2 Object.defineProperty(exports, "__esModule", { value: true });
3 const visitor_keys_1 = require("./visitor-keys");
4 // eslint-disable-next-line @typescript-eslint/no-explicit-any
5 function isValidNode(x) {
6 return x !== null && typeof x === 'object' && typeof x.type === 'string';
8 function getVisitorKeysForNode(allVisitorKeys, node) {
9 const keys = allVisitorKeys[node.type];
12 class SimpleTraverser {
13 constructor({ enter }) {
14 this.allVisitorKeys = visitor_keys_1.visitorKeys;
17 traverse(node, parent) {
18 if (!isValidNode(node)) {
21 this.enter(node, parent);
22 const keys = getVisitorKeysForNode(this.allVisitorKeys, node);
23 if (keys.length < 1) {
26 for (const key of keys) {
27 const childOrChildren = node[key];
28 if (Array.isArray(childOrChildren)) {
29 for (const child of childOrChildren) {
30 this.traverse(child, node);
34 this.traverse(childOrChildren, node);
39 function simpleTraverse(startingNode, options) {
40 new SimpleTraverser(options).traverse(startingNode, undefined);
42 exports.simpleTraverse = simpleTraverse;
43 //# sourceMappingURL=simple-traverse.js.map