"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