You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					233 lines
				
				5.8 KiB
			
		
		
			
		
	
	
					233 lines
				
				5.8 KiB
			| 
											3 years ago
										 | "use strict"; | ||
|  | 
 | ||
|  | Object.defineProperty(exports, "__esModule", { | ||
|  |   value: true | ||
|  | }); | ||
|  | exports._call = _call; | ||
|  | exports._getQueueContexts = _getQueueContexts; | ||
|  | exports._resyncKey = _resyncKey; | ||
|  | exports._resyncList = _resyncList; | ||
|  | exports._resyncParent = _resyncParent; | ||
|  | exports._resyncRemoved = _resyncRemoved; | ||
|  | exports.call = call; | ||
|  | exports.isBlacklisted = exports.isDenylisted = isDenylisted; | ||
|  | exports.popContext = popContext; | ||
|  | exports.pushContext = pushContext; | ||
|  | exports.requeue = requeue; | ||
|  | exports.resync = resync; | ||
|  | exports.setContext = setContext; | ||
|  | exports.setKey = setKey; | ||
|  | exports.setScope = setScope; | ||
|  | exports.setup = setup; | ||
|  | exports.skip = skip; | ||
|  | exports.skipKey = skipKey; | ||
|  | exports.stop = stop; | ||
|  | exports.visit = visit; | ||
|  | var _traverseNode = require("../traverse-node"); | ||
|  | var _index = require("./index"); | ||
|  | 
 | ||
|  | function call(key) { | ||
|  |   const opts = this.opts; | ||
|  |   this.debug(key); | ||
|  |   if (this.node) { | ||
|  |     if (this._call(opts[key])) return true; | ||
|  |   } | ||
|  |   if (this.node) { | ||
|  |     return this._call(opts[this.node.type] && opts[this.node.type][key]); | ||
|  |   } | ||
|  |   return false; | ||
|  | } | ||
|  | function _call(fns) { | ||
|  |   if (!fns) return false; | ||
|  |   for (const fn of fns) { | ||
|  |     if (!fn) continue; | ||
|  |     const node = this.node; | ||
|  |     if (!node) return true; | ||
|  |     const ret = fn.call(this.state, this, this.state); | ||
|  |     if (ret && typeof ret === "object" && typeof ret.then === "function") { | ||
|  |       throw new Error(`You appear to be using a plugin with an async traversal visitor, ` + `which your current version of Babel does not support. ` + `If you're using a published plugin, you may need to upgrade ` + `your @babel/core version.`); | ||
|  |     } | ||
|  |     if (ret) { | ||
|  |       throw new Error(`Unexpected return value from visitor method ${fn}`); | ||
|  |     } | ||
|  | 
 | ||
|  |     if (this.node !== node) return true; | ||
|  | 
 | ||
|  |     if (this._traverseFlags > 0) return true; | ||
|  |   } | ||
|  |   return false; | ||
|  | } | ||
|  | function isDenylisted() { | ||
|  |   var _this$opts$denylist; | ||
|  |   const denylist = (_this$opts$denylist = this.opts.denylist) != null ? _this$opts$denylist : this.opts.blacklist; | ||
|  |   return denylist && denylist.indexOf(this.node.type) > -1; | ||
|  | } | ||
|  | 
 | ||
|  | function restoreContext(path, context) { | ||
|  |   if (path.context !== context) { | ||
|  |     path.context = context; | ||
|  |     path.state = context.state; | ||
|  |     path.opts = context.opts; | ||
|  |   } | ||
|  | } | ||
|  | function visit() { | ||
|  |   if (!this.node) { | ||
|  |     return false; | ||
|  |   } | ||
|  |   if (this.isDenylisted()) { | ||
|  |     return false; | ||
|  |   } | ||
|  |   if (this.opts.shouldSkip && this.opts.shouldSkip(this)) { | ||
|  |     return false; | ||
|  |   } | ||
|  |   const currentContext = this.context; | ||
|  |   if (this.shouldSkip || this.call("enter")) { | ||
|  |     this.debug("Skip..."); | ||
|  |     return this.shouldStop; | ||
|  |   } | ||
|  |   restoreContext(this, currentContext); | ||
|  |   this.debug("Recursing into..."); | ||
|  |   this.shouldStop = (0, _traverseNode.traverseNode)(this.node, this.opts, this.scope, this.state, this, this.skipKeys); | ||
|  |   restoreContext(this, currentContext); | ||
|  |   this.call("exit"); | ||
|  |   return this.shouldStop; | ||
|  | } | ||
|  | function skip() { | ||
|  |   this.shouldSkip = true; | ||
|  | } | ||
|  | function skipKey(key) { | ||
|  |   if (this.skipKeys == null) { | ||
|  |     this.skipKeys = {}; | ||
|  |   } | ||
|  |   this.skipKeys[key] = true; | ||
|  | } | ||
|  | function stop() { | ||
|  |   this._traverseFlags |= _index.SHOULD_SKIP | _index.SHOULD_STOP; | ||
|  | } | ||
|  | function setScope() { | ||
|  |   if (this.opts && this.opts.noScope) return; | ||
|  |   let path = this.parentPath; | ||
|  |   if ( | ||
|  |   (this.key === "key" || this.listKey === "decorators") && path.isMethod() || | ||
|  |   this.key === "discriminant" && path.isSwitchStatement()) { | ||
|  |     path = path.parentPath; | ||
|  |   } | ||
|  |   let target; | ||
|  |   while (path && !target) { | ||
|  |     if (path.opts && path.opts.noScope) return; | ||
|  |     target = path.scope; | ||
|  |     path = path.parentPath; | ||
|  |   } | ||
|  |   this.scope = this.getScope(target); | ||
|  |   if (this.scope) this.scope.init(); | ||
|  | } | ||
|  | function setContext(context) { | ||
|  |   if (this.skipKeys != null) { | ||
|  |     this.skipKeys = {}; | ||
|  |   } | ||
|  |   this._traverseFlags = 0; | ||
|  |   if (context) { | ||
|  |     this.context = context; | ||
|  |     this.state = context.state; | ||
|  |     this.opts = context.opts; | ||
|  |   } | ||
|  |   this.setScope(); | ||
|  |   return this; | ||
|  | } | ||
|  | 
 | ||
|  | function resync() { | ||
|  |   if (this.removed) return; | ||
|  |   this._resyncParent(); | ||
|  |   this._resyncList(); | ||
|  |   this._resyncKey(); | ||
|  | } | ||
|  | 
 | ||
|  | function _resyncParent() { | ||
|  |   if (this.parentPath) { | ||
|  |     this.parent = this.parentPath.node; | ||
|  |   } | ||
|  | } | ||
|  | function _resyncKey() { | ||
|  |   if (!this.container) return; | ||
|  |   if (this.node === | ||
|  |   this.container[this.key]) { | ||
|  |     return; | ||
|  |   } | ||
|  | 
 | ||
|  |   if (Array.isArray(this.container)) { | ||
|  |     for (let i = 0; i < this.container.length; i++) { | ||
|  |       if (this.container[i] === this.node) { | ||
|  |         return this.setKey(i); | ||
|  |       } | ||
|  |     } | ||
|  |   } else { | ||
|  |     for (const key of Object.keys(this.container)) { | ||
|  |       if (this.container[key] === this.node) { | ||
|  |         return this.setKey(key); | ||
|  |       } | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   this.key = null; | ||
|  | } | ||
|  | function _resyncList() { | ||
|  |   if (!this.parent || !this.inList) return; | ||
|  |   const newContainer = | ||
|  |   this.parent[this.listKey]; | ||
|  |   if (this.container === newContainer) return; | ||
|  | 
 | ||
|  |   this.container = newContainer || null; | ||
|  | } | ||
|  | function _resyncRemoved() { | ||
|  |   if (this.key == null || !this.container || | ||
|  |   this.container[this.key] !== this.node) { | ||
|  |     this._markRemoved(); | ||
|  |   } | ||
|  | } | ||
|  | function popContext() { | ||
|  |   this.contexts.pop(); | ||
|  |   if (this.contexts.length > 0) { | ||
|  |     this.setContext(this.contexts[this.contexts.length - 1]); | ||
|  |   } else { | ||
|  |     this.setContext(undefined); | ||
|  |   } | ||
|  | } | ||
|  | function pushContext(context) { | ||
|  |   this.contexts.push(context); | ||
|  |   this.setContext(context); | ||
|  | } | ||
|  | function setup(parentPath, container, listKey, key) { | ||
|  |   this.listKey = listKey; | ||
|  |   this.container = container; | ||
|  |   this.parentPath = parentPath || this.parentPath; | ||
|  |   this.setKey(key); | ||
|  | } | ||
|  | function setKey(key) { | ||
|  |   var _this$node; | ||
|  |   this.key = key; | ||
|  |   this.node = | ||
|  |   this.container[this.key]; | ||
|  |   this.type = (_this$node = this.node) == null ? void 0 : _this$node.type; | ||
|  | } | ||
|  | function requeue(pathToQueue = this) { | ||
|  |   if (pathToQueue.removed) return; | ||
|  | 
 | ||
|  |   ; | ||
|  |   const contexts = this.contexts; | ||
|  |   for (const context of contexts) { | ||
|  |     context.maybeQueue(pathToQueue); | ||
|  |   } | ||
|  | } | ||
|  | function _getQueueContexts() { | ||
|  |   let path = this; | ||
|  |   let contexts = this.contexts; | ||
|  |   while (!contexts.length) { | ||
|  |     path = path.parentPath; | ||
|  |     if (!path) break; | ||
|  |     contexts = path.contexts; | ||
|  |   } | ||
|  |   return contexts; | ||
|  | } | ||
|  | 
 | ||
|  | //# sourceMappingURL=context.js.map
 |