@nodesecure/estree-ast-utils
v4.2.0
Published
Utilities for AST (ESTree compliant)
Readme
Getting Started
This package is available in the Node Package Repository and can be easily installed with npm or yarn.
$ npm i @nodesecure/estree-ast-utils
# or
$ yarn add @nodesecure/estree-ast-utilsAPI
Most utility options extend the DefaultOptions interface:
export interface DefaultOptions {
externalIdentifierLookup?(name: string): string | null;
}You can provide a custom externalIdentifierLookup function to enable the utilities to resolve identifiers from external sources—such as VariableTracer, for example.
Transforms an ESTree ArrayExpression into an iterable of literal values.
["foo", "bar"];will yield "foo", then "bar".
export interface ArrayExpressionToStringOptions extends DefaultOptions {
/**
* When enabled, resolves the char code of the literal value.
*
* @default true
* @example
* [65, 66] // => ['A', 'B']
*/
resolveCharCode?: boolean;
}Compute simple ArrayExpression that are using a CallExpression join()
{
host: [
["goo", "g", "gle"].join(""),
"com"
].join(".")
}Will return google.com
Returns all Literal nodes from a binary expression.
"foo" + "bar";Will yield "foo", then "bar".
Options are described by the following interface:
interface ConcatBinaryExpressionOptions extends DefaultOptions {
/**
* When set to true, the function will throw an error if it encounters
* a node type that is not supported (i.e., not a Literal, BinaryExpr, ArrayExpr or Identifier).
*
* @default false
* @example
* "foo" + fn() + "bar" // <- will throw an error if `stopOnUnsupportedNode` is true
*/
stopOnUnsupportedNode?: boolean;
}Recursively extracts all LogicalExpression components.
{ operator: "||" | "&&" | "??", node: ESTree.Expression }For example:
freeGlobal || freeSelf || Function('return this')();Will yield three components:
- freeGlobal
- freeSelf
- and finally
Function('return this')();
Returns the literal arguments of a CallExpression.
For example:
eval("require");Returns
["require"]Returns the identifier name of a CallExpression, or null if not resolvable.
foobar();Returns "foobar".
By default, it resolves member expressions. This can be disabled with resolveCallExpression: false.
require('./file.js')();
// ^ Second ^ FirstWith resolveCallExpression: false, the function will return null.
interface GetCallExpressionIdentifierOptions extends DefaultOptions {
/**
* Resolve the CallExpression callee if it is a MemberExpression.
*
* @default true
* @example
* require('./file.js')();
^ Second ^ First
*/
resolveCallExpression?: boolean;
}Returns the identifier chain from a MemberExpression.
foo.bar();will return "foo" then "bar".
Extracts all variable identifiers from a declaration.
const [foo, bar] = [1, 2];will return "foo" then "bar".
License
MIT
