--- /dev/null
+"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) {
+ 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
\ No newline at end of file