A JavaScript port of the Vineflower decompiler (https://github.com/Vineflower/vineflower).
npm install @run-slicer/vfA JavaScript port of the Vineflower decompiler.
``js
const fs = require("fs");
const { decompile } = require("./vf.js"); // get it from the dist/ directory or jsDelivr
const data = fs.readFileSync("./your/package/HelloWorld.class"); // read a class file
const result = await decompile(["your/package/HelloWorld", / you can decompile multiple classes at once /], {
source: async (name) => {
/ provide classes for analysis here, including the one you want to decompile /
console.log(name); / internal name, e.g. java/lang/Object /
return name === "your/package/HelloWorld" ? data : null / class not available /;
},
resources: [
/ class names of supporting resources (libraries), which source can load /
// "java/lang/Object",
],
options: {
/ see https://github.com/Vineflower/vineflower/blob/master/src/org/jetbrains/java/decompiler/main/extern/IFernflowerPreferences.java#L11 /
"banner": "// Decompiled with Vineflower in TeaVM!\n", / testing option - comment on top of the decompiled code /
},
tokenCollector: {
/ exposes the text tokens generated by the decompiler /
/ useful for gathering info about placement of element references/declarations in the output /
/ see the vf.d.ts for the API /
},
}); // {"your/package/HelloWorld": "decompiled source code here..."}
console.log(result["your/package/HelloWorld"]);
``
Or see the browser-based proof-of-concept in the docs directory.
The supporting code for this project is licensed under the MIT License.
The Vineflower decompiler is licensed under the Apache License 2.0.
_This project is not affiliated with, maintained or endorsed by the Vineflower project in any way.
Do NOT report issues with this project to the Vineflower issue tracker._