| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 | 
							- import { createPath } from "./node-path";
 
- import { unionTypesMap, nodeAndUnionTypes } from "./nodes"; // recursively walks the AST starting at the given node. The callback is invoked for
 
- // and object that has a 'type' property.
 
- function walk(context, callback) {
 
-   var stop = false;
 
-   function innerWalk(context, callback) {
 
-     if (stop) {
 
-       return;
 
-     }
 
-     var node = context.node;
 
-     if (node === undefined) {
 
-       console.warn("traversing with an empty context");
 
-       return;
 
-     }
 
-     if (node._deleted === true) {
 
-       return;
 
-     }
 
-     var path = createPath(context);
 
-     callback(node.type, path);
 
-     if (path.shouldStop) {
 
-       stop = true;
 
-       return;
 
-     }
 
-     Object.keys(node).forEach(function (prop) {
 
-       var value = node[prop];
 
-       if (value === null || value === undefined) {
 
-         return;
 
-       }
 
-       var valueAsArray = Array.isArray(value) ? value : [value];
 
-       valueAsArray.forEach(function (childNode) {
 
-         if (typeof childNode.type === "string") {
 
-           var childContext = {
 
-             node: childNode,
 
-             parentKey: prop,
 
-             parentPath: path,
 
-             shouldStop: false,
 
-             inList: Array.isArray(value)
 
-           };
 
-           innerWalk(childContext, callback);
 
-         }
 
-       });
 
-     });
 
-   }
 
-   innerWalk(context, callback);
 
- }
 
- var noop = function noop() {};
 
- export function traverse(node, visitors) {
 
-   var before = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : noop;
 
-   var after = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : noop;
 
-   Object.keys(visitors).forEach(function (visitor) {
 
-     if (!nodeAndUnionTypes.includes(visitor)) {
 
-       throw new Error("Unexpected visitor ".concat(visitor));
 
-     }
 
-   });
 
-   var context = {
 
-     node: node,
 
-     inList: false,
 
-     shouldStop: false,
 
-     parentPath: null,
 
-     parentKey: null
 
-   };
 
-   walk(context, function (type, path) {
 
-     if (typeof visitors[type] === "function") {
 
-       before(type, path);
 
-       visitors[type](path);
 
-       after(type, path);
 
-     }
 
-     var unionTypes = unionTypesMap[type];
 
-     if (!unionTypes) {
 
-       throw new Error("Unexpected node type ".concat(type));
 
-     }
 
-     unionTypes.forEach(function (unionType) {
 
-       if (typeof visitors[unionType] === "function") {
 
-         before(unionType, path);
 
-         visitors[unionType](path);
 
-         after(unionType, path);
 
-       }
 
-     });
 
-   });
 
- }
 
 
  |