Remove the cycle from babel-types/babel-traverse.
This commit is contained in:
parent
b871a49e3a
commit
a0ca5ed61e
@ -42,24 +42,7 @@ traverse.Scope = require("./scope");
|
||||
traverse.Hub = require("./hub");
|
||||
|
||||
traverse.cheap = function (node, enter) {
|
||||
if (!node) return;
|
||||
|
||||
let keys = t.VISITOR_KEYS[node.type];
|
||||
if (!keys) return;
|
||||
|
||||
enter(node);
|
||||
|
||||
for (let key of keys) {
|
||||
let subNode = node[key];
|
||||
|
||||
if (Array.isArray(subNode)) {
|
||||
for (let node of subNode) {
|
||||
traverse.cheap(node, enter);
|
||||
}
|
||||
} else {
|
||||
traverse.cheap(subNode, enter);
|
||||
}
|
||||
}
|
||||
return t.traverseFast(node, enter);
|
||||
};
|
||||
|
||||
traverse.node = function (node: Object, opts: Object, scope: Object, state: Object, parentPath: Object, skipKeys?) {
|
||||
@ -73,31 +56,14 @@ traverse.node = function (node: Object, opts: Object, scope: Object, state: Obje
|
||||
}
|
||||
};
|
||||
|
||||
const CLEAR_KEYS: Array = t.COMMENT_KEYS.concat([
|
||||
"tokens", "comments",
|
||||
"start", "end", "loc",
|
||||
"raw", "rawValue"
|
||||
]);
|
||||
|
||||
traverse.clearNode = function (node) {
|
||||
for (let key of CLEAR_KEYS) {
|
||||
if (node[key] != null) node[key] = undefined;
|
||||
}
|
||||
|
||||
for (let key in node) {
|
||||
if (key[0] === "_" && node[key] != null) node[key] = undefined;
|
||||
}
|
||||
t.removeProperties(node);
|
||||
|
||||
cache.path.delete(node);
|
||||
|
||||
let syms: Array<Symbol> = Object.getOwnPropertySymbols(node);
|
||||
for (let sym of syms) {
|
||||
node[sym] = null;
|
||||
}
|
||||
};
|
||||
|
||||
traverse.removeProperties = function (tree) {
|
||||
traverse.cheap(tree, traverse.clearNode);
|
||||
t.traverseFast(tree, traverse.clearNode);
|
||||
return tree;
|
||||
};
|
||||
|
||||
|
||||
@ -9,7 +9,6 @@
|
||||
"main": "lib/index.js",
|
||||
"dependencies": {
|
||||
"babel-runtime": "^6.9.1",
|
||||
"babel-traverse": "^6.14.0",
|
||||
"esutils": "^2.0.2",
|
||||
"lodash": "^4.2.0",
|
||||
"to-fast-properties": "^1.0.1"
|
||||
|
||||
@ -98,14 +98,7 @@ export function toSequenceExpression(nodes: Array<Object>, scope: Scope): ?Objec
|
||||
}
|
||||
}
|
||||
|
||||
// Can't use import because of cyclic dependency between babel-traverse
|
||||
// and this module (babel-types). This require needs to appear after
|
||||
// we export the TYPES constant, so we lazy-initialize it before use.
|
||||
let traverse;
|
||||
|
||||
export function toKeyAlias(node: Object, key: Object = node.key): string {
|
||||
if (!traverse) traverse = require("babel-traverse").default;
|
||||
|
||||
let alias;
|
||||
|
||||
if (node.kind === "method") {
|
||||
@ -115,7 +108,7 @@ export function toKeyAlias(node: Object, key: Object = node.key): string {
|
||||
} else if (t.isStringLiteral(key)) {
|
||||
alias = JSON.stringify(key.value);
|
||||
} else {
|
||||
alias = JSON.stringify(traverse.removeProperties(t.cloneDeep(key)));
|
||||
alias = JSON.stringify(t.removePropertiesDeep(t.cloneDeep(key)));
|
||||
}
|
||||
|
||||
if (node.computed) {
|
||||
|
||||
@ -399,18 +399,11 @@ function _inheritComments(key, child, parent) {
|
||||
}
|
||||
}
|
||||
|
||||
// Can't use import because of cyclic dependency between babel-traverse
|
||||
// and this module (babel-types). This require needs to appear after
|
||||
// we export the TYPES constant, so we lazy-initialize it before use.
|
||||
let traverse;
|
||||
|
||||
/**
|
||||
* Inherit all contextual properties from `parent` node to `child` node.
|
||||
*/
|
||||
|
||||
export function inherits(child: Object, parent: Object): Object {
|
||||
if (!traverse) traverse = require("babel-traverse").default;
|
||||
|
||||
if (!child || !parent) return child;
|
||||
|
||||
// optionally inherit specific properties if not null
|
||||
@ -431,7 +424,6 @@ export function inherits(child: Object, parent: Object): Object {
|
||||
}
|
||||
|
||||
t.inheritsComments(child, parent);
|
||||
traverse.copyCache(parent, child);
|
||||
|
||||
return child;
|
||||
}
|
||||
@ -459,6 +451,62 @@ export function isNode(node?): boolean {
|
||||
toFastProperties(t);
|
||||
toFastProperties(t.VISITOR_KEYS);
|
||||
|
||||
/**
|
||||
* A prefix AST traversal implementation implementation.
|
||||
*/
|
||||
|
||||
export function traverseFast(node: Node, enter: (node: Node) => void) {
|
||||
if (!node) return;
|
||||
|
||||
let keys = t.VISITOR_KEYS[node.type];
|
||||
if (!keys) return;
|
||||
|
||||
enter(node);
|
||||
|
||||
for (let key of keys) {
|
||||
let subNode = node[key];
|
||||
|
||||
if (Array.isArray(subNode)) {
|
||||
for (let node of subNode) {
|
||||
traverseFast(node, enter);
|
||||
}
|
||||
} else {
|
||||
traverseFast(subNode, enter);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const CLEAR_KEYS: Array = t.COMMENT_KEYS.concat([
|
||||
"tokens", "comments",
|
||||
"start", "end", "loc",
|
||||
"raw", "rawValue"
|
||||
]);
|
||||
|
||||
/**
|
||||
* Remove all of the _* properties from a node along with the additional metadata
|
||||
* properties like location data and raw token data.
|
||||
*/
|
||||
|
||||
export function removeProperties(node: Node): void {
|
||||
for (let key of CLEAR_KEYS) {
|
||||
if (node[key] != null) node[key] = undefined;
|
||||
}
|
||||
|
||||
for (let key in node) {
|
||||
if (key[0] === "_" && node[key] != null) node[key] = undefined;
|
||||
}
|
||||
|
||||
let syms: Array<Symbol> = Object.getOwnPropertySymbols(node);
|
||||
for (let sym of syms) {
|
||||
node[sym] = null;
|
||||
}
|
||||
}
|
||||
|
||||
export function removePropertiesDeep(tree: Node): Node {
|
||||
traverseFast(tree, removeProperties);
|
||||
return tree;
|
||||
}
|
||||
|
||||
//
|
||||
export {
|
||||
getBindingIdentifiers,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user