|
1 vuosi sitten | |
---|---|---|
.. | ||
build | 1 vuosi sitten | |
lib | 1 vuosi sitten | |
CHANGELOG.md | 1 vuosi sitten | |
MIT-LICENSE.txt | 1 vuosi sitten | |
README.md | 1 vuosi sitten | |
index.js | 1 vuosi sitten | |
package.json | 1 vuosi sitten |
Clone new AST without extra properties
Returns new clone of originalAst
but without extra properties.
Leaves properties defined in The ESTree Spec (formerly known as Mozilla SpiderMonkey Parser API) only. Also note that extra informations (such as loc
, range
and raw
) are eliminated too.
espurify
supports ES5, ES2015, and ES2017 properties.
Returns customized function for cloning AST, with user-provided whiteList
.
Returns new clone of originalAst
by customized function.
type | default value |
---|---|
object |
N/A |
whiteList
is an object containing NodeType as keys and properties as values.
{
ArrayExpression: ['type', 'elements'],
ArrayPattern: ['type', 'elements'],
ArrowFunctionExpression: ['type', 'id', 'params', 'body', 'generator', 'expression'],
AssignmentExpression: ['type', 'operator', 'left', 'right'],
...
Returns customized function for cloning AST, configured by custom options
.
Returns new clone of originalAst
by customized function.
type | default value |
---|---|
object |
{} |
Configuration options. If not passed, default options will be used.
type | default value |
---|---|
array of string |
null |
List of extra properties to be left in result AST. For example, functions returned by espurify.customize({extra: ['raw']})
will preserve raw
properties of Literal
. Functions return by espurify.customize({extra: ['loc', 'range']})
will preserve loc
and range
properties of each Node.
var espurify = require('espurify'),
estraverse = require('estraverse'),
esprima = require('esprima'),
syntax = estraverse.Syntax,
assert = require('assert');
var jsCode = 'assert("foo")';
// Adding extra informations to AST
var originalAst = esprima.parse(jsCode, {tolerant: true, loc: true, raw: true});
estraverse.replace(originalAst, {
leave: function (currentNode, parentNode) {
if (currentNode.type === syntax.Literal && typeof currentNode.raw !== 'undefined') {
currentNode['x-verbatim-bar'] = {
content : currentNode.raw,
precedence : 18 // escodegen.Precedence.Primary
};
return currentNode;
} else {
return undefined;
}
}
});
// purify AST
var purifiedClone = espurify(originalAst);
// original AST is not modified
assert.deepEqual(originalAst, {
type: 'Program',
body: [
{
type: 'ExpressionStatement',
expression: {
type: 'CallExpression',
callee: {
type: 'Identifier',
name: 'assert',
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 6
}
}
},
arguments: [
{
type: 'Literal',
value: 'foo',
raw: '"foo"',
loc: {
start: {
line: 1,
column: 7
},
end: {
line: 1,
column: 12
}
},
"x-verbatim-bar": {
content: '"foo"',
precedence: 18
}
}
],
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 13
}
}
},
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 13
}
}
}
],
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 13
}
},
errors: []
});
// Extra properties are eliminated from cloned AST
assert.deepEqual(purifiedClone, {
type: 'Program',
body: [
{
type: 'ExpressionStatement',
expression: {
type: 'CallExpression',
callee: {
type: 'Identifier',
name: 'assert'
},
arguments: [
{
type: 'Literal',
value: 'foo'
}
]
}
}
]
});
Install
$ npm install --save espurify
Use
var espurify = require('espurify');
espurify
function is exported
<script type="text/javascript" src="./path/to/node_modules/espurify/build/espurify.js"></script>
Install
$ bower install --save espurify
Load (espurify
function is exported)
<script type="text/javascript" src="./path/to/bower_components/espurify/build/espurify.js"></script>
Licensed under the MIT license.