@decompiler/core
v0.0.1
Published
Production-grade reverse engineering toolkit — reconstructs readable source approximations from compiled, minified, or transpiled JavaScript and bytecode.
Maintainers
Readme
@decompiler/core
Production-grade reverse engineering toolkit — reconstructs readable, structured source approximations from minified JavaScript, transpiled output, or bytecode artifacts.
Features
- AST-based decompilation — fault-tolerant JS parsing via Acorn + acorn-loose
- Code beautification — configurable reformatting with js-beautify + escodegen
- Symbol renaming — heuristic rename of mangled identifiers to semantic placeholders
- Pluggable parsers & transformers — extend by adding one file per format
- CLI interface —
decompiler -i file.min.js -o recovered.js - Structured logging — JSON or pretty-print via Winston
- Jest test suite with coverage thresholds enforced
Quick Start
npm install
npm test
node src/cli/index.js --input fixtures/input/sample.min.js --output fixtures/output/result.jsCLI Usage
Usage: decompiler [options]
Options:
-i, --input <file> Input compiled/minified file (required)
-o, --output <file> Output path (omit for stdout)
-p, --parser <name> javascript | bytecode [default: javascript]
-t, --transformer <name> beautify | rename | full [default: full]
-l, --log-level <level> error | warn | info | debug [default: info]
-f, --format <fmt> pretty | json [default: pretty]
-V, --version Print version
-h, --help Show helpExamples
# Decompile a minified bundle
decompiler -i dist/bundle.min.js -o src-recovered/bundle.js
# Beautify only (skip rename heuristics)
decompiler -i lib/util.js -o lib/util.pretty.js --transformer beautify
# Emit raw JSON AST
decompiler -i app.min.js --format json
# Debug logging
decompiler -i file.js --log-level debugProject Structure
src/
├── index.js Public API entry point
├── cli/index.js Commander-based CLI
├── core/
│ ├── decompiler.js Orchestration engine
│ └── pipeline.js Composable transform runner
├── parsers/
│ ├── index.js Parser registry
│ ├── javascript.js Acorn fault-tolerant JS parser
│ └── bytecode.js Bytecode stub (extend here)
├── transformers/
│ ├── index.js Transformer registry + generator
│ ├── beautifier.js escodegen + js-beautify
│ └── renamer.js Heuristic identifier renaming
└── utils/
├── logger.js Winston logger factory
├── fileHandler.js Safe file I/O
└── validator.js Input validation
tests/ Mirror of src/ — one test file per module
fixtures/
├── input/sample.min.js Bundled minified fixture
└── output/ Git-ignored decompilation outputnpm Scripts
| Command | Purpose |
|-----------------------|--------------------------------------------------|
| npm start | Run CLI (append -- -i file.js for args) |
| npm test | Run Jest suite |
| npm run test:coverage | Coverage report (thresholds enforced) |
| npm run lint | ESLint (zero warnings) |
| npm run lint:fix | Auto-fix lint violations |
| npm run build | Lint + test gate (CI entry point) |
Extending the Pipeline
Add a parser — create src/parsers/myformat.js:
'use strict';
function parse(source, opts) { /* return ESTree AST */ }
module.exports = { name: 'myformat', parse };Register in src/parsers/index.js.
Add a transformer — create src/transformers/mytransform.js:
'use strict';
function transform(ast, opts) { /* return AST */ }
module.exports = { name: 'mytransform', transform };Register in src/transformers/index.js.
License
MIT
