fuse-box
Version:
Fuse-Box a bundler that does it right
49 lines (47 loc) • 1.56 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
class ASTTraverse {
static traverse(root, options) {
options = options || {};
const pre = options.pre;
const skipProperty = options.skipProperty;
let visit = (node, parent, prop, idx) => {
if (!node || typeof node.type !== "string") {
return;
}
if (node._visited) {
return;
}
node.$parent = parent;
node.$prop = prop;
node.$idx = idx;
let res = undefined;
if (pre) {
res = pre(node, parent, prop, idx);
}
node._visited = true;
if (typeof res === "object" && res.type) {
return visit(res, null);
}
if (res !== false) {
for (let prop in node) {
if (skipProperty ? skipProperty(prop, node) : prop[0] === "$") {
continue;
}
let child = node[prop];
if (Array.isArray(child)) {
for (let i = 0; i < child.length; i++) {
visit(child[i], node, prop, i);
}
}
else {
visit(child, node, prop);
}
}
}
};
visit(root, null);
}
}
exports.ASTTraverse = ASTTraverse;
//# sourceMappingURL=ASTTraverse.js.map