mirror of
https://github.com/Sevichecc/Urara-Blog.git
synced 2025-05-05 20:59:31 +08:00
54 lines
No EOL
1.9 KiB
Text
54 lines
No EOL
1.9 KiB
Text
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.simpleTraverse = void 0;
|
|
const visitor_keys_1 = require("@typescript-eslint/visitor-keys");
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
function isValidNode(x) {
|
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
return x !== null && typeof x === 'object' && typeof x.type === 'string';
|
|
}
|
|
function getVisitorKeysForNode(allVisitorKeys, node) {
|
|
const keys = allVisitorKeys[node.type];
|
|
return (keys !== null && keys !== void 0 ? keys : []);
|
|
}
|
|
class SimpleTraverser {
|
|
constructor(selectors, setParentPointers = false) {
|
|
this.allVisitorKeys = visitor_keys_1.visitorKeys;
|
|
this.selectors = selectors;
|
|
this.setParentPointers = setParentPointers;
|
|
}
|
|
traverse(node, parent) {
|
|
if (!isValidNode(node)) {
|
|
return;
|
|
}
|
|
if (this.setParentPointers) {
|
|
node.parent = parent;
|
|
}
|
|
if ('enter' in this.selectors) {
|
|
this.selectors.enter(node, parent);
|
|
}
|
|
else if (node.type in this.selectors) {
|
|
this.selectors[node.type](node, parent);
|
|
}
|
|
const keys = getVisitorKeysForNode(this.allVisitorKeys, node);
|
|
if (keys.length < 1) {
|
|
return;
|
|
}
|
|
for (const key of keys) {
|
|
const childOrChildren = node[key];
|
|
if (Array.isArray(childOrChildren)) {
|
|
for (const child of childOrChildren) {
|
|
this.traverse(child, node);
|
|
}
|
|
}
|
|
else {
|
|
this.traverse(childOrChildren, node);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
function simpleTraverse(startingNode, options, setParentPointers = false) {
|
|
new SimpleTraverser(options, setParentPointers).traverse(startingNode, undefined);
|
|
}
|
|
exports.simpleTraverse = simpleTraverse;
|
|
//# sourceMappingURL=simple-traverse.js.map |