| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 | "use strict";Object.defineProperty(exports, "__esModule", {  value: true});exports.traverseNode = traverseNode;var _context = require("./context.js");var _index = require("./path/index.js");var _t = require("@babel/types");var _context2 = require("./path/context.js");const {  VISITOR_KEYS} = _t;function _visitPaths(ctx, paths) {  ctx.queue = paths;  ctx.priorityQueue = [];  const visited = new Set();  let stop = false;  let visitIndex = 0;  for (; visitIndex < paths.length;) {    const path = paths[visitIndex];    visitIndex++;    _context2.resync.call(path);    if (path.contexts.length === 0 || path.contexts[path.contexts.length - 1] !== ctx) {      _context2.pushContext.call(path, ctx);    }    if (path.key === null) continue;    const {      node    } = path;    if (visited.has(node)) continue;    if (node) visited.add(node);    if (_visit(ctx, path)) {      stop = true;      break;    }    if (ctx.priorityQueue.length) {      stop = _visitPaths(ctx, ctx.priorityQueue);      ctx.priorityQueue = [];      ctx.queue = paths;      if (stop) break;    }  }  for (let i = 0; i < visitIndex; i++) {    _context2.popContext.call(paths[i]);  }  ctx.queue = null;  return stop;}function _visit(ctx, path) {  var _opts$denylist;  const node = path.node;  if (!node) {    return false;  }  const opts = ctx.opts;  const denylist = (_opts$denylist = opts.denylist) != null ? _opts$denylist : opts.blacklist;  if (denylist != null && denylist.includes(node.type)) {    return false;  }  if (opts.shouldSkip != null && opts.shouldSkip(path)) {    return false;  }  if (path.shouldSkip) return path.shouldStop;  if (_context2._call.call(path, opts.enter)) return path.shouldStop;  if (path.node) {    var _opts$node$type;    if (_context2._call.call(path, (_opts$node$type = opts[node.type]) == null ? void 0 : _opts$node$type.enter)) return path.shouldStop;  }  path.shouldStop = _traverse(path.node, opts, path.scope, ctx.state, path, path.skipKeys);  if (path.node) {    if (_context2._call.call(path, opts.exit)) return true;  }  if (path.node) {    var _opts$node$type2;    _context2._call.call(path, (_opts$node$type2 = opts[node.type]) == null ? void 0 : _opts$node$type2.exit);  }  return path.shouldStop;}function _traverse(node, opts, scope, state, path, skipKeys, visitSelf) {  const keys = VISITOR_KEYS[node.type];  if (!(keys != null && keys.length)) return false;  const ctx = new _context.default(scope, opts, state, path);  if (visitSelf) {    if (skipKeys != null && skipKeys[path.parentKey]) return false;    return _visitPaths(ctx, [path]);  }  for (const key of keys) {    if (skipKeys != null && skipKeys[key]) continue;    const prop = node[key];    if (!prop) continue;    if (Array.isArray(prop)) {      if (!prop.length) continue;      const paths = [];      for (let i = 0; i < prop.length; i++) {        const childPath = _index.default.get({          parentPath: path,          parent: node,          container: prop,          key: i,          listKey: key        });        paths.push(childPath);      }      if (_visitPaths(ctx, paths)) return true;    } else {      if (_visitPaths(ctx, [_index.default.get({        parentPath: path,        parent: node,        container: node,        key,        listKey: null      })])) {        return true;      }    }  }  return false;}function traverseNode(node, opts, scope, state, path, skipKeys, visitSelf) {  ;  const keys = VISITOR_KEYS[node.type];  if (!keys) return false;  const context = new _context.default(scope, opts, state, path);  if (visitSelf) {    if (skipKeys != null && skipKeys[path.parentKey]) return false;    return context.visitQueue([path]);  }  for (const key of keys) {    if (skipKeys != null && skipKeys[key]) continue;    if (context.visit(node, key)) {      return true;    }  }  return false;}//# sourceMappingURL=traverse-node.js.map
 |