1 line
15 KiB
Plaintext
1 line
15 KiB
Plaintext
{"version":3,"names":["call","key","opts","debug","node","_call","type","fns","fn","ret","state","then","Error","_traverseFlags","isDenylisted","denylist","blacklist","indexOf","restoreContext","path","context","visit","shouldSkip","currentContext","shouldStop","traverseNode","scope","skipKeys","skip","skipKey","stop","SHOULD_SKIP","SHOULD_STOP","setScope","noScope","parentPath","listKey","isMethod","target","getScope","init","setContext","resync","removed","_resyncParent","_resyncList","_resyncKey","parent","container","Array","isArray","i","length","setKey","Object","keys","inList","newContainer","_resyncRemoved","_markRemoved","popContext","contexts","pop","undefined","pushContext","push","setup","requeue","pathToQueue","maybeQueue","_getQueueContexts"],"sources":["../../src/path/context.ts"],"sourcesContent":["// This file contains methods responsible for maintaining a TraversalContext.\n\nimport { traverseNode } from \"../traverse-node\";\nimport { SHOULD_SKIP, SHOULD_STOP } from \"./index\";\nimport type TraversalContext from \"../context\";\nimport type NodePath from \"./index\";\nimport type * as t from \"@babel/types\";\n\nexport function call(this: NodePath, key: string): boolean {\n const opts = this.opts;\n\n this.debug(key);\n\n if (this.node) {\n if (this._call(opts[key])) return true;\n }\n\n if (this.node) {\n return this._call(opts[this.node.type] && opts[this.node.type][key]);\n }\n\n return false;\n}\n\nexport function _call(this: NodePath, fns?: Array<Function>): boolean {\n if (!fns) return false;\n\n for (const fn of fns) {\n if (!fn) continue;\n\n const node = this.node;\n if (!node) return true;\n\n const ret = fn.call(this.state, this, this.state);\n if (ret && typeof ret === \"object\" && typeof ret.then === \"function\") {\n throw new Error(\n `You appear to be using a plugin with an async traversal visitor, ` +\n `which your current version of Babel does not support. ` +\n `If you're using a published plugin, you may need to upgrade ` +\n `your @babel/core version.`,\n );\n }\n if (ret) {\n throw new Error(`Unexpected return value from visitor method ${fn}`);\n }\n\n // node has been replaced, it will have been requeued\n if (this.node !== node) return true;\n\n // this.shouldSkip || this.shouldStop || this.removed\n if (this._traverseFlags > 0) return true;\n }\n\n return false;\n}\n\nexport function isDenylisted(this: NodePath): boolean {\n const denylist = this.opts.denylist ?? this.opts.blacklist;\n return denylist && denylist.indexOf(this.node.type) > -1;\n}\n\n// TODO: Remove in Babel 8\nexport { isDenylisted as isBlacklisted };\n\nfunction restoreContext(path: NodePath, context: TraversalContext) {\n if (path.context !== context) {\n path.context = context;\n path.state = context.state;\n path.opts = context.opts;\n }\n}\n\nexport function visit(this: NodePath): boolean {\n if (!this.node) {\n return false;\n }\n\n if (this.isDenylisted()) {\n return false;\n }\n\n if (this.opts.shouldSkip && this.opts.shouldSkip(this)) {\n return false;\n }\n\n const currentContext = this.context;\n // Note: We need to check \"this.shouldSkip\" first because\n // another visitor can set it to true. Usually .shouldSkip is false\n // before calling the enter visitor, but it can be true in case of\n // a requeued node (e.g. by .replaceWith()) that is then marked\n // with .skip().\n if (this.shouldSkip || this.call(\"enter\")) {\n this.debug(\"Skip...\");\n return this.shouldStop;\n }\n restoreContext(this, currentContext);\n\n this.debug(\"Recursing into...\");\n this.shouldStop = traverseNode(\n this.node,\n this.opts,\n this.scope,\n this.state,\n this,\n this.skipKeys,\n );\n\n restoreContext(this, currentContext);\n\n this.call(\"exit\");\n\n return this.shouldStop;\n}\n\nexport function skip(this: NodePath) {\n this.shouldSkip = true;\n}\n\nexport function skipKey(this: NodePath, key: string) {\n if (this.skipKeys == null) {\n this.skipKeys = {};\n }\n this.skipKeys[key] = true;\n}\n\nexport function stop(this: NodePath) {\n // this.shouldSkip = true; this.shouldStop = true;\n this._traverseFlags |= SHOULD_SKIP | SHOULD_STOP;\n}\n\nexport function setScope(this: NodePath) {\n if (this.opts && this.opts.noScope) return;\n\n let path = this.parentPath;\n\n // Skip method scope if is computed method key or decorator expression\n if (\n (this.key === \"key\" || this.listKey === \"decorators\") &&\n path.isMethod()\n ) {\n path = path.parentPath;\n }\n\n let target;\n while (path && !target) {\n if (path.opts && path.opts.noScope) return;\n\n target = path.scope;\n path = path.parentPath;\n }\n\n this.scope = this.getScope(target);\n if (this.scope) this.scope.init();\n}\n\nexport function setContext<S = unknown>(\n this: NodePath,\n context?: TraversalContext<S>,\n) {\n if (this.skipKeys != null) {\n this.skipKeys = {};\n }\n // this.shouldSkip = false; this.shouldStop = false; this.removed = false;\n this._traverseFlags = 0;\n\n if (context) {\n this.context = context;\n this.state = context.state;\n this.opts = context.opts;\n }\n\n this.setScope();\n\n return this;\n}\n\n/**\n * Here we resync the node paths `key` and `container`. If they've changed according\n * to what we have stored internally then we attempt to resync by crawling and looking\n * for the new values.\n */\n\nexport function resync(this: NodePath) {\n if (this.removed) return;\n\n this._resyncParent();\n this._resyncList();\n this._resyncKey();\n //this._resyncRemoved();\n}\n\nexport function _resyncParent(this: NodePath) {\n if (this.parentPath) {\n this.parent = this.parentPath.node;\n }\n}\n\nexport function _resyncKey(this: NodePath) {\n if (!this.container) return;\n\n if (\n this.node ===\n // @ts-expect-error this.key should present in this.container\n this.container[this.key]\n ) {\n return;\n }\n\n // grrr, path key is out of sync. this is likely due to a modification to the AST\n // not done through our path APIs\n\n if (Array.isArray(this.container)) {\n for (let i = 0; i < this.container.length; i++) {\n if (this.container[i] === this.node) {\n return this.setKey(i);\n }\n }\n } else {\n for (const key of Object.keys(this.container)) {\n // @ts-expect-error this.key should present in this.container\n if (this.container[key] === this.node) {\n return this.setKey(key);\n }\n }\n }\n\n // ¯\\_(ツ)_/¯ who knows where it's gone lol\n this.key = null;\n}\n\nexport function _resyncList(this: NodePath) {\n if (!this.parent || !this.inList) return;\n\n const newContainer =\n // @ts-expect-error this.listKey should present in this.parent\n this.parent[this.listKey];\n if (this.container === newContainer) return;\n\n // container is out of sync. this is likely the result of it being reassigned\n this.container = newContainer || null;\n}\n\nexport function _resyncRemoved(this: NodePath) {\n if (\n this.key == null ||\n !this.container ||\n // @ts-expect-error this.key should present in this.container\n this.container[this.key] !== this.node\n ) {\n this._markRemoved();\n }\n}\n\nexport function popContext(this: NodePath) {\n this.contexts.pop();\n if (this.contexts.length > 0) {\n this.setContext(this.contexts[this.contexts.length - 1]);\n } else {\n this.setContext(undefined);\n }\n}\n\nexport function pushContext(this: NodePath, context: TraversalContext) {\n this.contexts.push(context);\n this.setContext(context);\n}\n\nexport function setup(\n this: NodePath,\n parentPath: NodePath | undefined,\n container: t.Node,\n listKey: string,\n key: string | number,\n) {\n this.listKey = listKey;\n this.container = container;\n\n this.parentPath = parentPath || this.parentPath;\n this.setKey(key);\n}\n\nexport function setKey(this: NodePath, key: string | number) {\n this.key = key;\n this.node =\n // @ts-expect-error this.key must present in this.container\n this.container[this.key];\n this.type = this.node?.type;\n}\n\nexport function requeue(this: NodePath, pathToQueue = this) {\n if (pathToQueue.removed) return;\n\n // If a path is skipped, and then replaced with a\n // new one, the new one shouldn't probably be skipped.\n if (process.env.BABEL_8_BREAKING) {\n pathToQueue.shouldSkip = false;\n }\n\n // TODO(loganfsmyth): This should be switched back to queue in parent contexts\n // automatically once #2892 and #4135 have been resolved. See #4140.\n // let contexts = this._getQueueContexts();\n const contexts = this.contexts;\n\n for (const context of contexts) {\n context.maybeQueue(pathToQueue);\n }\n}\n\nexport function _getQueueContexts(this: NodePath) {\n let path = this;\n let contexts = this.contexts;\n while (!contexts.length) {\n path = path.parentPath;\n if (!path) break;\n contexts = path.contexts;\n }\n return contexts;\n}\n"],"mappings":"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"} |