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
|