[Require Maintainer] AST helper to transform source code.
MIT License
AST helper to transform source code.
On purpose make you focus to develop AST transforming function.
npm install ast-source
range
, loc
etc..).ASTSource#transformStrict
provide always clean AST by options.ASTSource's input is source code, output is ASTOutput
.
var source = new ASTSource(code, options)
All options are optional. often set filePath
as options.
/**
* @namespace
* @type {Object} ASTSourceOptions
* @property {string} ASTSourceOptions.filePath? path to source code
* @property {string} ASTSourceOptions.sourceRoot? source root path to source code
* @property {parserType} ASTSourceOptions.parserType? what parser is used
* @property {boolean} ASTSourceOptions.esprimaTokens? tokens
* @property {boolean} ASTSourceOptions.range? range
* @property {boolean} ASTSourceOptions.loc? location
* @property {boolean} ASTSourceOptions.comment?
*/
const defaultOptions = {
filePath: null,
disableSourceMap: false,
parserType: null,
esprimaTokens: true,
loc: true,
range: true,
comment: true
};
Returns current AST
Return current AST that is espurifyed.
Transform current AST by fn
.
function transformFn(AST){
return modify(AST)
}
var source = new ASTSource(code, options)
source.transform(transformFn);
Transform AST by fn
after healing the AST.
re-calculate range
, loc
, comment
the AST and transform.
Returns ASTOutput
ASTOutput's input is source code, output are source code and source-map.
Returns source code of the results.
Returns source map of the results.
Returns source code that include base64ed comment of source map.
See example.
Run npm test
on example/
import ASTSource from "ast-source"
import estraverse from "estraverse"
import fs from "fs"
function transform(AST) {
var replaced = {
"type": "Literal",
"value": 42,
"raw": "42"
};
return estraverse.replace(AST, {
enter: function (node) {
if (node.type === estraverse.Syntax.Literal) {
return replaced;
}
}
});
}
var source = new ASTSource(fs.readFileSync("./input.js", "utf-8"), {
filePath: "./input.js"
});
var output = source.transform(transform).output();
console.log(output.code);// => "var a = 42;"
console.dir(output.map.toString()); // => source map
fs.writeFileSync("./output.js", output.codeWithMap, "utf-8");
npm test
git checkout -b my-new-feature
git commit -am 'Add some feature'
git push origin my-new-feature
MIT