Introducing Socket Firewall: Free, Proactive Protection for Your Software Supply Chain.Learn More
Socket
Book a DemoInstallSign in
Socket

ast-source

Package Overview
Dependencies
Maintainers
1
Versions
13
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

ast-source

AST helper to transform source code.

latest
Source
npmnpm
Version
4.0.0
Version published
Maintainers
1
Created
Source

ast-source Actions Status: test

AST helper to transform source code.

On purpose make you focus to develop AST transforming function.

Installation

npm install ast-source

Feature

  • Automatically select JavaScript parser like esprima or babel(babylon)
    • It make you focus to develop AST transforming function.
  • SourceMap support is first class.
  • Always get clean AST if you want.
    • AST transforming function pollute AST's meta info(range, loc etc..).
    • ASTSource#transformStrict provide always clean AST by options.

Example

Usage

API

ASTSource(code, 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
};
value(): AST

Returns current AST

cloneValue(): AST

Return current AST that is espurifyed.

transform(fn)

Transform current AST by fn.

function transformFn(AST){
   return modify(AST)
}
var source = new ASTSource(code, options)
source.transform(transformFn);
transformStrict(fn)

Transform AST by fn after healing the AST.

re-calculate range, loc, comment the AST and transform.

output(): ASTOutput

Returns ASTOutput

ASTOutput

ASTOutput's input is source code, output are source code and source-map.

code: string

Returns source code of the results.

map: Object

Returns source map of the results.

codeWithMap: string

Returns source code that include base64ed comment of source map.

Example

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");

Tests

npm test

Contributing

  • Fork it!
  • Create your feature branch: git checkout -b my-new-feature
  • Commit your changes: git commit -am 'Add some feature'
  • Push to the branch: git push origin my-new-feature
  • Submit a pull request :D

License

MIT

Keywords

ast

FAQs

Package last updated on 10 Oct 2022

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts