@babel/traverse 7.28.5 → 7.29.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cache.js +0 -1
- package/lib/cache.js.map +1 -1
- package/lib/context.js +8 -4
- package/lib/context.js.map +1 -1
- package/lib/index.js.map +1 -1
- package/lib/path/ancestry.js.map +1 -1
- package/lib/path/context.js +18 -6
- package/lib/path/context.js.map +1 -1
- package/lib/path/conversion.js +6 -12
- package/lib/path/conversion.js.map +1 -1
- package/lib/path/evaluation.js +9 -4
- package/lib/path/evaluation.js.map +1 -1
- package/lib/path/family.js.map +1 -1
- package/lib/path/index.js +42 -46
- package/lib/path/index.js.map +1 -1
- package/lib/path/inference/index.js.map +1 -1
- package/lib/path/inference/util.js +8 -10
- package/lib/path/inference/util.js.map +1 -1
- package/lib/path/introspection.js +17 -21
- package/lib/path/introspection.js.map +1 -1
- package/lib/path/lib/hoister.js.map +1 -1
- package/lib/path/lib/virtual-types-validator.js +6 -8
- package/lib/path/lib/virtual-types-validator.js.map +1 -1
- package/lib/path/modification.js +4 -6
- package/lib/path/modification.js.map +1 -1
- package/lib/path/replacement.js +2 -2
- package/lib/path/replacement.js.map +1 -1
- package/lib/scope/binding.js.map +1 -1
- package/lib/scope/index.js +107 -132
- package/lib/scope/index.js.map +1 -1
- package/lib/scope/lib/renamer.js +5 -4
- package/lib/scope/lib/renamer.js.map +1 -1
- package/lib/scope/traverseForScope.js +9 -11
- package/lib/scope/traverseForScope.js.map +1 -1
- package/lib/traverse-node.js +0 -1
- package/lib/traverse-node.js.map +1 -1
- package/lib/types.js.map +1 -1
- package/lib/visitors.js +10 -14
- package/lib/visitors.js.map +1 -1
- package/package.json +7 -7
package/lib/cache.js
CHANGED
package/lib/cache.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["pathsCache","exports","path","WeakMap","scope","clear","clearPath","clearScope","getCachedPaths","parent","parentPath","get","getOrCreateCachedPaths","node","paths","set","Map"],"sources":["../src/cache.ts"],"sourcesContent":["import type { Node } from \"@babel/types\";\nimport type NodePath from \"./path/index.ts\";\nimport type Scope from \"./scope/index.ts\";\n\nlet pathsCache
|
|
1
|
+
{"version":3,"names":["pathsCache","exports","path","WeakMap","scope","clear","clearPath","clearScope","getCachedPaths","parent","parentPath","get","getOrCreateCachedPaths","node","paths","set","Map"],"sources":["../src/cache.ts"],"sourcesContent":["import type { Node } from \"@babel/types\";\nimport type NodePath from \"./path/index.ts\";\nimport type Scope from \"./scope/index.ts\";\n\nlet pathsCache = new WeakMap<Node, Map<Node, NodePath>>();\nexport { pathsCache as path };\nexport let scope = new WeakMap<Node, Scope>();\n\nexport function clear() {\n clearPath();\n clearScope();\n}\n\nexport function clearPath() {\n pathsCache = new WeakMap();\n}\n\nexport function clearScope() {\n scope = new WeakMap();\n}\n\nexport function getCachedPaths(path: NodePath) {\n const { parent, parentPath } = path;\n return process.env.BABEL_8_BREAKING && parentPath\n ? parentPath._store\n : pathsCache.get(parent);\n}\n\nexport function getOrCreateCachedPaths(\n node: Node,\n parentPath?: NodePath | null,\n) {\n if (process.env.BABEL_8_BREAKING && parentPath) {\n return (parentPath._store ||= new Map());\n }\n\n let paths = pathsCache.get(node);\n if (!paths) pathsCache.set(node, (paths = new Map()));\n\n return paths;\n}\n"],"mappings":";;;;;;;;;;;AAIA,IAAIA,UAAU,GAAAC,OAAA,CAAAC,IAAA,GAAG,IAAIC,OAAO,CAA4B,CAAC;AAElD,IAAIC,KAAK,GAAAH,OAAA,CAAAG,KAAA,GAAG,IAAID,OAAO,CAAc,CAAC;AAEtC,SAASE,KAAKA,CAAA,EAAG;EACtBC,SAAS,CAAC,CAAC;EACXC,UAAU,CAAC,CAAC;AACd;AAEO,SAASD,SAASA,CAAA,EAAG;EAC1BL,OAAA,CAAAC,IAAA,GAAAF,UAAU,GAAG,IAAIG,OAAO,CAAC,CAAC;AAC5B;AAEO,SAASI,UAAUA,CAAA,EAAG;EAC3BN,OAAA,CAAAG,KAAA,GAAAA,KAAK,GAAG,IAAID,OAAO,CAAC,CAAC;AACvB;AAEO,SAASK,cAAcA,CAACN,IAAc,EAAE;EAC7C,MAAM;IAAEO,MAAM;IAAEC;EAAW,CAAC,GAAGR,IAAI;EACnC,OAEIF,UAAU,CAACW,GAAG,CAACF,MAAM,CAAC;AAC5B;AAEO,SAASG,sBAAsBA,CACpCC,IAAU,EACVH,UAA4B,EAC5B;EAKA,IAAII,KAAK,GAAGd,UAAU,CAACW,GAAG,CAACE,IAAI,CAAC;EAChC,IAAI,CAACC,KAAK,EAAEd,UAAU,CAACe,GAAG,CAACF,IAAI,EAAGC,KAAK,GAAG,IAAIE,GAAG,CAAC,CAAE,CAAC;EAErD,OAAOF,KAAK;AACd","ignoreList":[]}
|
package/lib/context.js
CHANGED
|
@@ -7,6 +7,7 @@ exports.default = void 0;
|
|
|
7
7
|
var _index = require("./path/index.js");
|
|
8
8
|
var _t = require("@babel/types");
|
|
9
9
|
var _context = require("./path/context.js");
|
|
10
|
+
var _hub = require("./hub.js");
|
|
10
11
|
const {
|
|
11
12
|
VISITOR_KEYS
|
|
12
13
|
} = _t;
|
|
@@ -33,12 +34,17 @@ class TraversalContext {
|
|
|
33
34
|
return false;
|
|
34
35
|
}
|
|
35
36
|
create(node, container, key, listKey) {
|
|
37
|
+
const {
|
|
38
|
+
parentPath
|
|
39
|
+
} = this;
|
|
40
|
+
const hub = parentPath == null ? node.type === "Program" || node.type === "File" ? new _hub.default() : undefined : parentPath.hub;
|
|
36
41
|
return _index.default.get({
|
|
37
|
-
parentPath
|
|
42
|
+
parentPath,
|
|
38
43
|
parent: node,
|
|
39
44
|
container,
|
|
40
45
|
key: key,
|
|
41
|
-
listKey
|
|
46
|
+
listKey,
|
|
47
|
+
hub
|
|
42
48
|
});
|
|
43
49
|
}
|
|
44
50
|
maybeQueue(path, notPriority) {
|
|
@@ -78,7 +84,6 @@ class TraversalContext {
|
|
|
78
84
|
const path = queue[visitIndex];
|
|
79
85
|
visitIndex++;
|
|
80
86
|
_context.resync.call(path);
|
|
81
|
-
;
|
|
82
87
|
if (path.contexts.length === 0 || path.contexts[path.contexts.length - 1] !== this) {
|
|
83
88
|
_context.pushContext.call(path, this);
|
|
84
89
|
}
|
|
@@ -100,7 +105,6 @@ class TraversalContext {
|
|
|
100
105
|
}
|
|
101
106
|
}
|
|
102
107
|
for (let i = 0; i < visitIndex; i++) {
|
|
103
|
-
;
|
|
104
108
|
_context.popContext.call(queue[i]);
|
|
105
109
|
}
|
|
106
110
|
this.queue = null;
|
package/lib/context.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_index","require","_t","_context","VISITOR_KEYS","TraversalContext","constructor","scope","opts","state","parentPath","queue","priorityQueue","shouldVisit","node","enter","exit","type","keys","length","key","create","container","listKey","NodePath","get","parent","maybeQueue","path","notPriority","push","visitMultiple","visitQueue","visitSingle","visited","WeakSet","stop","visitIndex","resync","call","contexts","pushContext","has","add","visit","i","popContext","nodes","Array","isArray","exports","default"],"sources":["../src/context.ts"],"sourcesContent":["import NodePath from \"./path/index.ts\";\nimport { VISITOR_KEYS } from \"@babel/types\";\nimport type Scope from \"./scope/index.ts\";\nimport type { ExplodedTraverseOptions } from \"./index.ts\";\nimport type * as t from \"@babel/types\";\nimport type { Visitor } from \"./types.ts\";\nimport { popContext, pushContext, resync } from \"./path/context.ts\";\n\nexport default class TraversalContext<S = unknown> {\n constructor(\n scope: Scope | null | undefined,\n opts: ExplodedTraverseOptions<S>,\n state: S,\n parentPath: NodePath | undefined,\n ) {\n this.parentPath = parentPath;\n this.scope = scope;\n this.state = state;\n this.opts = opts;\n }\n\n declare parentPath: NodePath | undefined;\n declare scope: Scope | null | undefined;\n declare state: S;\n declare opts: ExplodedTraverseOptions<S>;\n queue:
|
|
1
|
+
{"version":3,"names":["_index","require","_t","_context","_hub","VISITOR_KEYS","TraversalContext","constructor","scope","opts","state","parentPath","queue","priorityQueue","shouldVisit","node","enter","exit","type","keys","length","key","create","container","listKey","hub","Hub","undefined","NodePath","get","parent","maybeQueue","path","notPriority","push","visitMultiple","visitQueue","visitSingle","visited","WeakSet","stop","visitIndex","resync","call","contexts","pushContext","has","add","visit","i","popContext","nodes","Array","isArray","exports","default"],"sources":["../src/context.ts"],"sourcesContent":["import NodePath from \"./path/index.ts\";\nimport { VISITOR_KEYS } from \"@babel/types\";\nimport type Scope from \"./scope/index.ts\";\nimport type { ExplodedTraverseOptions } from \"./index.ts\";\nimport type * as t from \"@babel/types\";\nimport type { Visitor } from \"./types.ts\";\nimport { popContext, pushContext, resync } from \"./path/context.ts\";\nimport Hub from \"./hub.ts\";\n\nexport default class TraversalContext<S = unknown> {\n constructor(\n scope: Scope | null | undefined,\n opts: ExplodedTraverseOptions<S>,\n state: S,\n parentPath: NodePath | undefined,\n ) {\n this.parentPath = parentPath;\n this.scope = scope;\n this.state = state;\n this.opts = opts;\n }\n\n declare parentPath: NodePath | undefined;\n declare scope: Scope | null | undefined;\n declare state: S;\n declare opts: ExplodedTraverseOptions<S>;\n queue: NodePath[] | null = null;\n priorityQueue: NodePath[] | null = null;\n\n /**\n * This method does a simple check to determine whether or not we really need to attempt\n * visit a node. This will prevent us from constructing a NodePath.\n */\n\n shouldVisit(node: t.Node): boolean {\n const opts = this.opts as Visitor;\n if (opts.enter || opts.exit) return true;\n\n // check if we have a visitor for this node\n if (opts[node.type]) return true;\n\n // check if we're going to traverse into this node\n const keys: string[] | undefined = VISITOR_KEYS[node.type];\n if (!keys?.length) return false;\n\n // we need to traverse into this node so ensure that it has children to traverse into!\n for (const key of keys) {\n if (\n // @ts-expect-error key is from visitor keys\n node[key]\n ) {\n return true;\n }\n }\n\n return false;\n }\n\n create(\n node: t.Node,\n container: t.Node | t.Node[],\n key: string | number,\n listKey?: string,\n ): NodePath {\n const { parentPath } = this;\n const hub =\n parentPath == null\n ? node.type === \"Program\" || node.type === \"File\"\n ? new Hub()\n : undefined\n : parentPath.hub;\n\n // We don't need to `.setContext()` here, since `.visitQueue()` already\n // calls `.pushContext`.\n return NodePath.get({\n parentPath,\n parent: node,\n container,\n key: key,\n listKey,\n hub,\n });\n }\n\n maybeQueue(path: NodePath, notPriority?: boolean) {\n if (this.queue) {\n if (notPriority) {\n this.queue.push(path);\n } else {\n this.priorityQueue!.push(path);\n }\n }\n }\n\n visitMultiple(container: t.Node[], parent: t.Node, listKey: string) {\n // nothing to traverse!\n if (container.length === 0) return false;\n\n const queue = [];\n\n // build up initial queue\n for (let key = 0; key < container.length; key++) {\n const node = container[key];\n if (node && this.shouldVisit(node)) {\n queue.push(this.create(parent, container, key, listKey));\n }\n }\n\n return this.visitQueue(queue);\n }\n\n visitSingle(node: t.Node, key: string): boolean {\n if (\n this.shouldVisit(\n // @ts-expect-error key may not index node\n node[key],\n )\n ) {\n return this.visitQueue([this.create(node, node, key)]);\n } else {\n return false;\n }\n }\n\n visitQueue(queue: NodePath[]): boolean {\n // set queue\n this.queue = queue;\n this.priorityQueue = [];\n\n const visited = new WeakSet();\n let stop = false;\n let visitIndex = 0;\n\n // visit the queue\n for (; visitIndex < queue.length; ) {\n const path = queue[visitIndex];\n visitIndex++;\n resync.call(path);\n\n // this path no longer belongs to the tree\n if (process.env.BABEL_8_BREAKING && path.key === null) continue;\n\n if (\n path.contexts.length === 0 ||\n path.contexts[path.contexts.length - 1] !== this\n ) {\n // The context might already have been pushed when this path was inserted and queued.\n // If we always re-pushed here, we could get duplicates and risk leaving contexts\n // on the stack after the traversal has completed, which could break things.\n pushContext.call(path, this);\n }\n\n // this path no longer belongs to the tree\n if (!process.env.BABEL_8_BREAKING && path.key === null) continue;\n\n // ensure we don't visit the same node twice\n const { node } = path;\n if (visited.has(node)) continue;\n if (node) visited.add(node);\n\n if (path.visit()) {\n stop = true;\n break;\n }\n\n if (this.priorityQueue.length) {\n stop = this.visitQueue(this.priorityQueue);\n this.priorityQueue = [];\n this.queue = queue;\n if (stop) break;\n }\n }\n\n // pop contexts\n for (let i = 0; i < visitIndex; i++) {\n if (process.env.BABEL_8_BREAKING && queue[i].key === null) continue;\n popContext.call(queue[i]);\n }\n\n // clear queue\n this.queue = null;\n\n return stop;\n }\n\n visit(node: t.Node, key: string) {\n // @ts-expect-error key may not index node\n const nodes = node[key] as t.Node | t.Node[] | null;\n if (!nodes) return false;\n\n if (Array.isArray(nodes)) {\n return this.visitMultiple(nodes, node, key);\n } else {\n return this.visitSingle(node, key);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["require","visitors","exports","_t","cache","_traverseNode","_index","_index2","_hub","VISITOR_KEYS","removeProperties","traverseFast","traverse","parent","opts","scope","state","parentPath","visitSelf","noScope","type","Error","explode","traverseNode","undefined","_default","default","verify","cheap","node","enter","path","skipKeys","clearNode","tree","hasType","denylistTypes","includes","skip","stop"],"sources":["../src/index.ts"],"sourcesContent":["import \"./path/context.ts\"; // We have some cycles, this ensures correct order to avoid TDZ\nimport * as visitors from \"./visitors.ts\";\nimport {\n VISITOR_KEYS,\n removeProperties,\n type RemovePropertiesOptions,\n traverseFast,\n} from \"@babel/types\";\nimport type * as t from \"@babel/types\";\nimport * as cache from \"./cache.ts\";\nimport type NodePath from \"./path/index.ts\";\nimport type { default as Scope, Binding } from \"./scope/index.ts\";\nimport type { ExplodedVisitor, Visitor, VisitorBase } from \"./types.ts\";\nimport { traverseNode } from \"./traverse-node.ts\";\n\nexport type { ExplodedVisitor, Visitor, VisitorBase, Binding };\nexport { default as NodePath } from \"./path/index.ts\";\nexport { default as Scope } from \"./scope/index.ts\";\nexport { default as Hub } from \"./hub.ts\";\nexport type { HubInterface } from \"./hub.ts\";\nexport type { VisitWrapper } from \"./visitors.ts\";\n\nexport { visitors };\n\nexport type TraverseOptions<S = t.Node> = {\n scope?: Scope;\n noScope?: boolean;\n denylist?: string[];\n shouldSkip?: (node: NodePath) => boolean;\n} & Visitor<S>;\n\nexport type ExplodedTraverseOptions<S = t.Node> = TraverseOptions<S> &\n ExplodedVisitor<S>;\n\nfunction traverse<S>(\n parent: t.Node,\n opts: TraverseOptions<S>,\n scope: Scope | null | undefined,\n state: S,\n parentPath?: NodePath,\n visitSelf?: boolean,\n): void;\n\nfunction traverse(\n parent: t.Node,\n opts: TraverseOptions,\n scope?: Scope | null,\n state?: any,\n parentPath?: NodePath,\n visitSelf?: boolean,\n): void;\n\nfunction traverse<Options extends TraverseOptions>(\n parent: t.Node,\n // @ts-expect-error provide {} as default value for Options\n opts: Options = {},\n scope?: Scope | null,\n state?: any,\n parentPath?: NodePath,\n visitSelf?: boolean,\n) {\n if (!parent) return;\n\n if (!opts.noScope && !scope) {\n if (parent.type !== \"Program\" && parent.type !== \"File\") {\n throw new Error(\n \"You must pass a scope and parentPath unless traversing a Program/File. \" +\n `Instead of that you tried to traverse a ${parent.type} node without ` +\n \"passing scope and parentPath.\",\n );\n }\n }\n\n if (!parentPath && visitSelf) {\n throw new Error(\"visitSelf can only be used when providing a NodePath.\");\n }\n\n if (!VISITOR_KEYS[parent.type]) {\n return;\n }\n\n visitors.explode(opts as Visitor);\n\n traverseNode(\n parent,\n opts as ExplodedVisitor,\n scope,\n state,\n parentPath,\n /* skipKeys */ undefined,\n visitSelf,\n );\n}\n\nexport default traverse;\n\ntraverse.visitors = visitors;\ntraverse.verify = visitors.verify;\ntraverse.explode = visitors.explode;\n\ntraverse.cheap = function (node: t.Node, enter: (node: t.Node) => void) {\n traverseFast(node, enter);\n return;\n};\n\ntraverse.node = function (\n node: t.Node,\n opts: ExplodedTraverseOptions,\n scope?: Scope,\n state?: any,\n path?: NodePath,\n skipKeys?: Record<string, boolean>,\n) {\n traverseNode(node, opts, scope, state, path, skipKeys);\n // traverse.node always returns undefined\n};\n\ntraverse.clearNode = function (node: t.Node, opts?: RemovePropertiesOptions) {\n removeProperties(node, opts);\n};\n\ntraverse.removeProperties = function (\n tree: t.Node,\n opts?: RemovePropertiesOptions,\n) {\n traverseFast(tree, traverse.clearNode, opts);\n return tree;\n};\n\ntraverse.hasType = function (\n tree: t.Node,\n type: t.Node[\"type\"],\n denylistTypes?:
|
|
1
|
+
{"version":3,"names":["require","visitors","exports","_t","cache","_traverseNode","_index","_index2","_hub","VISITOR_KEYS","removeProperties","traverseFast","traverse","parent","opts","scope","state","parentPath","visitSelf","noScope","type","Error","explode","traverseNode","undefined","_default","default","verify","cheap","node","enter","path","skipKeys","clearNode","tree","hasType","denylistTypes","includes","skip","stop"],"sources":["../src/index.ts"],"sourcesContent":["import \"./path/context.ts\"; // We have some cycles, this ensures correct order to avoid TDZ\nimport * as visitors from \"./visitors.ts\";\nimport {\n VISITOR_KEYS,\n removeProperties,\n type RemovePropertiesOptions,\n traverseFast,\n} from \"@babel/types\";\nimport type * as t from \"@babel/types\";\nimport * as cache from \"./cache.ts\";\nimport type NodePath from \"./path/index.ts\";\nimport type { default as Scope, Binding } from \"./scope/index.ts\";\nimport type { ExplodedVisitor, Visitor, VisitorBase } from \"./types.ts\";\nimport { traverseNode } from \"./traverse-node.ts\";\n\nexport type { ExplodedVisitor, Visitor, VisitorBase, Binding };\nexport { default as NodePath } from \"./path/index.ts\";\nexport { default as Scope, type BindingKind } from \"./scope/index.ts\";\nexport { default as Hub } from \"./hub.ts\";\nexport type { HubInterface } from \"./hub.ts\";\nexport type { VisitWrapper } from \"./visitors.ts\";\n\nexport { visitors };\n\nexport type TraverseOptions<S = t.Node> = {\n scope?: Scope;\n noScope?: boolean;\n denylist?: string[];\n shouldSkip?: (node: NodePath) => boolean;\n} & Visitor<S>;\n\nexport type ExplodedTraverseOptions<S = t.Node> = TraverseOptions<S> &\n ExplodedVisitor<S>;\n\nfunction traverse<S>(\n parent: t.Node,\n opts: TraverseOptions<S>,\n scope: Scope | null | undefined,\n state: S,\n parentPath?: NodePath,\n visitSelf?: boolean,\n): void;\n\nfunction traverse(\n parent: t.Node,\n opts: TraverseOptions,\n scope?: Scope | null,\n state?: any,\n parentPath?: NodePath,\n visitSelf?: boolean,\n): void;\n\nfunction traverse<Options extends TraverseOptions>(\n parent: t.Node,\n // @ts-expect-error provide {} as default value for Options\n opts: Options = {},\n scope?: Scope | null,\n state?: any,\n parentPath?: NodePath,\n visitSelf?: boolean,\n) {\n if (!parent) return;\n\n if (!opts.noScope && !scope) {\n if (parent.type !== \"Program\" && parent.type !== \"File\") {\n throw new Error(\n \"You must pass a scope and parentPath unless traversing a Program/File. \" +\n `Instead of that you tried to traverse a ${parent.type} node without ` +\n \"passing scope and parentPath.\",\n );\n }\n }\n\n if (!parentPath && visitSelf) {\n throw new Error(\"visitSelf can only be used when providing a NodePath.\");\n }\n\n if (!VISITOR_KEYS[parent.type]) {\n return;\n }\n\n visitors.explode(opts as Visitor);\n\n traverseNode(\n parent,\n opts as ExplodedVisitor,\n scope,\n state,\n parentPath,\n /* skipKeys */ undefined,\n visitSelf,\n );\n}\n\nexport default traverse;\n\ntraverse.visitors = visitors;\ntraverse.verify = visitors.verify;\ntraverse.explode = visitors.explode;\n\ntraverse.cheap = function (node: t.Node, enter: (node: t.Node) => void) {\n traverseFast(node, enter);\n return;\n};\n\ntraverse.node = function (\n node: t.Node,\n opts: ExplodedTraverseOptions,\n scope?: Scope,\n state?: any,\n path?: NodePath,\n skipKeys?: Record<string, boolean>,\n) {\n traverseNode(node, opts, scope, state, path, skipKeys);\n // traverse.node always returns undefined\n};\n\ntraverse.clearNode = function (node: t.Node, opts?: RemovePropertiesOptions) {\n removeProperties(node, opts);\n};\n\ntraverse.removeProperties = function (\n tree: t.Node,\n opts?: RemovePropertiesOptions,\n) {\n traverseFast(tree, traverse.clearNode, opts);\n return tree;\n};\n\ntraverse.hasType = function (\n tree: t.Node,\n type: t.Node[\"type\"],\n denylistTypes?: string[],\n): boolean {\n // the node we're searching in is denylisted\n if (denylistTypes?.includes(tree.type)) return false;\n\n // the type we're looking for is the same as the passed node\n if (tree.type === type) return true;\n\n return traverseFast(tree, function (node) {\n if (denylistTypes?.includes(node.type)) {\n return traverseFast.skip;\n }\n if (node.type === type) {\n return traverseFast.stop;\n }\n });\n};\n\ntraverse.cache = cache;\n"],"mappings":"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","ignoreList":[]}
|
package/lib/path/ancestry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_t","require","VISITOR_KEYS","findParent","callback","path","parentPath","find","getFunctionParent","p","isFunction","getStatementParent","Array","isArray","container","isStatement","isProgram","isFile","Error","getEarliestCommonAncestorFrom","paths","getDeepestCommonAncestorFrom","deepest","i","ancestries","earliest","keys","type","ancestry","listKey","key","earliestKeyIndex","indexOf","parentKey","currentKeyIndex","filter","length","minDepth","Infinity","lastCommonIndex","lastCommon","map","unshift","first","depthLoop","shouldMatch","getAncestry","push","isAncestor","maybeDescendant","isDescendant","maybeAncestor","parent","inType","candidateTypes","includes","node"],"sources":["../../src/path/ancestry.ts"],"sourcesContent":["// This file contains that retrieve or validate anything related to the current paths ancestry.\n\nimport { VISITOR_KEYS } from \"@babel/types\";\nimport type * as t from \"@babel/types\";\nimport type NodePath from \"./index.ts\";\n\n/**\n * Starting at the parent path of the current `NodePath` and going up the\n * tree, return the first `NodePath` that causes the provided `callback`\n * to return a truthy value, or `null` if the `callback` never returns a\n * truthy value.\n */\n\nexport function findParent(\n this: NodePath,\n callback: (path: NodePath) => boolean,\n): NodePath | null {\n let path = this;\n while ((path = path.parentPath)) {\n if (callback(path)) return path;\n }\n return null;\n}\n\n/**\n * Starting at current `NodePath` and going up the tree, return the first\n * `NodePath` that causes the provided `callback` to return a truthy value,\n * or `null` if the `callback` never returns a truthy value.\n */\n\nexport function find(\n this: NodePath,\n callback: (path: NodePath) => boolean,\n): NodePath | null {\n let path = this;\n do {\n if (callback(path)) return path;\n } while ((path = path.parentPath));\n return null;\n}\n\n/**\n * Get the parent function of the current path.\n */\n\nexport function getFunctionParent(this: NodePath): NodePath<t.Function> | null {\n return this.findParent(p => p.isFunction()) as NodePath<t.Function> | null;\n}\n\n/**\n * Walk up the tree until we hit a parent node path in a list.\n */\n\nexport function getStatementParent(this: NodePath): NodePath<t.Statement> {\n let path = this;\n\n do {\n if (\n !path.parentPath ||\n (Array.isArray(path.container) && path.isStatement())\n ) {\n break;\n } else {\n path = path.parentPath;\n }\n } while (path);\n\n if (path && (path.isProgram() || path.isFile())) {\n throw new Error(\n \"File/Program node, we can't possibly find a statement parent to this\",\n );\n }\n\n return path as NodePath<t.Statement>;\n}\n\n/**\n * Get the deepest common ancestor and then from it, get the earliest relationship path\n * to that ancestor.\n *\n * Earliest is defined as being \"before\" all the other nodes in terms of list container\n * position and visiting key.\n */\n\nexport function getEarliestCommonAncestorFrom(\n this: NodePath,\n paths: Array<NodePath>,\n): NodePath {\n return this.getDeepestCommonAncestorFrom(\n paths,\n function (deepest, i, ancestries) {\n let earliest;\n const keys = VISITOR_KEYS[deepest.type];\n\n for (const ancestry of ancestries) {\n const path = ancestry[i + 1];\n\n // first path\n if (!earliest) {\n earliest = path;\n continue;\n }\n\n // handle containers\n if (path.listKey && earliest.listKey === path.listKey) {\n // we're in the same container so check if we're earlier\n if (path.key! < earliest.key!) {\n earliest = path;\n continue;\n }\n }\n\n // handle keys\n const earliestKeyIndex = keys.indexOf(earliest.parentKey);\n const currentKeyIndex = keys.indexOf(path.parentKey);\n if (earliestKeyIndex > currentKeyIndex) {\n // key appears before so it's earlier\n earliest = path;\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n return earliest!;\n },\n );\n}\n\n/**\n * Get the earliest path in the tree where the provided `paths` intersect.\n *\n * TODO: Possible optimisation target.\n */\n\nexport function getDeepestCommonAncestorFrom(\n this: NodePath,\n paths: Array<NodePath>,\n filter?: (deepest: NodePath, i: number, ancestries: NodePath[][]) => NodePath,\n): NodePath {\n if (!paths.length) {\n return this;\n }\n\n if (paths.length === 1) {\n return paths[0];\n }\n\n // minimum depth of the tree so we know the highest node\n let minDepth = Infinity;\n\n // last common ancestor\n let lastCommonIndex, lastCommon;\n\n // get the ancestors of the path, breaking when the parent exceeds ourselves\n const ancestries = paths.map(path => {\n const ancestry: NodePath[] = [];\n\n do {\n ancestry.unshift(path);\n } while ((path = path.parentPath) && path !== this);\n\n // save min depth to avoid going too far in\n if (ancestry.length < minDepth) {\n minDepth = ancestry.length;\n }\n\n return ancestry;\n });\n\n // get the first ancestry so we have a seed to assess all other ancestries with\n const first = ancestries[0];\n\n // check ancestor equality\n depthLoop: for (let i = 0; i < minDepth; i++) {\n const shouldMatch = first[i];\n\n for (const ancestry of ancestries) {\n if (ancestry[i] !== shouldMatch) {\n // we've hit a snag\n break depthLoop;\n }\n }\n\n // next iteration may break so store these so they can be returned\n lastCommonIndex = i;\n lastCommon = shouldMatch;\n }\n\n if (lastCommon) {\n if (filter) {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n return filter(lastCommon, lastCommonIndex!, ancestries);\n } else {\n return lastCommon;\n }\n } else {\n throw new Error(\"Couldn't find intersection\");\n }\n}\n\n/**\n * Build an array of node paths containing the entire ancestry of the current node path.\n *\n * NOTE: The current node path is included in this.\n */\n\nexport function getAncestry(this: NodePath): Array<NodePath> {\n let path = this;\n const paths = [];\n do {\n paths.push(path);\n } while ((path = path.parentPath));\n return paths;\n}\n\n/**\n * A helper to find if `this` path is an ancestor of @param maybeDescendant\n */\nexport function isAncestor(this: NodePath, maybeDescendant: NodePath): boolean {\n return maybeDescendant.isDescendant(this);\n}\n\n/**\n * A helper to find if `this` path is a descendant of @param maybeAncestor\n */\nexport function isDescendant(this: NodePath, maybeAncestor: NodePath): boolean {\n return !!this.findParent(parent => parent === maybeAncestor);\n}\n\nexport function inType(this: NodePath, ...candidateTypes: string[]): boolean {\n let path = this;\n while (path) {\n if (candidateTypes.includes(path.node.type)) return true;\n path = path.parentPath;\n }\n\n return false;\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_t","require","VISITOR_KEYS","findParent","callback","path","parentPath","find","getFunctionParent","p","isFunction","getStatementParent","Array","isArray","container","isStatement","isProgram","isFile","Error","getEarliestCommonAncestorFrom","paths","getDeepestCommonAncestorFrom","deepest","i","ancestries","earliest","keys","type","ancestry","listKey","key","earliestKeyIndex","indexOf","parentKey","currentKeyIndex","filter","length","minDepth","Infinity","lastCommonIndex","lastCommon","map","unshift","first","depthLoop","shouldMatch","getAncestry","push","isAncestor","maybeDescendant","isDescendant","maybeAncestor","parent","inType","candidateTypes","includes","node"],"sources":["../../src/path/ancestry.ts"],"sourcesContent":["// This file contains that retrieve or validate anything related to the current paths ancestry.\n\nimport { VISITOR_KEYS } from \"@babel/types\";\nimport type * as t from \"@babel/types\";\nimport type NodePath from \"./index.ts\";\n\n/**\n * Starting at the parent path of the current `NodePath` and going up the\n * tree, return the first `NodePath` that causes the provided `callback`\n * to return a truthy value, or `null` if the `callback` never returns a\n * truthy value.\n */\n\nexport function findParent(\n this: NodePath,\n callback: (path: NodePath) => boolean,\n): NodePath | null {\n let path = this;\n while ((path = path.parentPath)) {\n if (callback(path)) return path;\n }\n return null;\n}\n\n/**\n * Starting at current `NodePath` and going up the tree, return the first\n * `NodePath` that causes the provided `callback` to return a truthy value,\n * or `null` if the `callback` never returns a truthy value.\n */\n\nexport function find(\n this: NodePath,\n callback: (path: NodePath) => boolean,\n): NodePath | null {\n let path = this;\n do {\n if (callback(path)) return path;\n } while ((path = path.parentPath));\n return null;\n}\n\n/**\n * Get the parent function of the current path.\n */\n\nexport function getFunctionParent(this: NodePath): NodePath<t.Function> | null {\n return this.findParent(p => p.isFunction()) as NodePath<t.Function> | null;\n}\n\n/**\n * Walk up the tree until we hit a parent node path in a list.\n */\n\nexport function getStatementParent(this: NodePath): NodePath<t.Statement> {\n let path = this;\n\n do {\n if (\n !path.parentPath ||\n (Array.isArray(path.container) && path.isStatement())\n ) {\n break;\n } else {\n path = path.parentPath;\n }\n } while (path);\n\n if (path && (path.isProgram() || path.isFile())) {\n throw new Error(\n \"File/Program node, we can't possibly find a statement parent to this\",\n );\n }\n\n return path as NodePath<t.Statement>;\n}\n\n/**\n * Get the deepest common ancestor and then from it, get the earliest relationship path\n * to that ancestor.\n *\n * Earliest is defined as being \"before\" all the other nodes in terms of list container\n * position and visiting key.\n */\n\nexport function getEarliestCommonAncestorFrom(\n this: NodePath,\n paths: NodePath[],\n): NodePath {\n return this.getDeepestCommonAncestorFrom(\n paths,\n function (deepest, i, ancestries) {\n let earliest;\n const keys = VISITOR_KEYS[deepest.type];\n\n for (const ancestry of ancestries) {\n const path = ancestry[i + 1];\n\n // first path\n if (!earliest) {\n earliest = path;\n continue;\n }\n\n // handle containers\n if (path.listKey && earliest.listKey === path.listKey) {\n // we're in the same container so check if we're earlier\n if (path.key! < earliest.key!) {\n earliest = path;\n continue;\n }\n }\n\n // handle keys\n const earliestKeyIndex = keys.indexOf(earliest.parentKey);\n const currentKeyIndex = keys.indexOf(path.parentKey);\n if (earliestKeyIndex > currentKeyIndex) {\n // key appears before so it's earlier\n earliest = path;\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n return earliest!;\n },\n );\n}\n\n/**\n * Get the earliest path in the tree where the provided `paths` intersect.\n *\n * TODO: Possible optimisation target.\n */\n\nexport function getDeepestCommonAncestorFrom(\n this: NodePath,\n paths: NodePath[],\n filter?: (deepest: NodePath, i: number, ancestries: NodePath[][]) => NodePath,\n): NodePath {\n if (!paths.length) {\n return this;\n }\n\n if (paths.length === 1) {\n return paths[0];\n }\n\n // minimum depth of the tree so we know the highest node\n let minDepth = Infinity;\n\n // last common ancestor\n let lastCommonIndex, lastCommon;\n\n // get the ancestors of the path, breaking when the parent exceeds ourselves\n const ancestries = paths.map(path => {\n const ancestry: NodePath[] = [];\n\n do {\n ancestry.unshift(path);\n } while ((path = path.parentPath) && path !== this);\n\n // save min depth to avoid going too far in\n if (ancestry.length < minDepth) {\n minDepth = ancestry.length;\n }\n\n return ancestry;\n });\n\n // get the first ancestry so we have a seed to assess all other ancestries with\n const first = ancestries[0];\n\n // check ancestor equality\n depthLoop: for (let i = 0; i < minDepth; i++) {\n const shouldMatch = first[i];\n\n for (const ancestry of ancestries) {\n if (ancestry[i] !== shouldMatch) {\n // we've hit a snag\n break depthLoop;\n }\n }\n\n // next iteration may break so store these so they can be returned\n lastCommonIndex = i;\n lastCommon = shouldMatch;\n }\n\n if (lastCommon) {\n if (filter) {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n return filter(lastCommon, lastCommonIndex!, ancestries);\n } else {\n return lastCommon;\n }\n } else {\n throw new Error(\"Couldn't find intersection\");\n }\n}\n\n/**\n * Build an array of node paths containing the entire ancestry of the current node path.\n *\n * NOTE: The current node path is included in this.\n */\n\nexport function getAncestry(this: NodePath): NodePath[] {\n let path = this;\n const paths = [];\n do {\n paths.push(path);\n } while ((path = path.parentPath));\n return paths;\n}\n\n/**\n * A helper to find if `this` path is an ancestor of @param maybeDescendant\n */\nexport function isAncestor(this: NodePath, maybeDescendant: NodePath): boolean {\n return maybeDescendant.isDescendant(this);\n}\n\n/**\n * A helper to find if `this` path is a descendant of @param maybeAncestor\n */\nexport function isDescendant(this: NodePath, maybeAncestor: NodePath): boolean {\n return !!this.findParent(parent => parent === maybeAncestor);\n}\n\nexport function inType(this: NodePath, ...candidateTypes: string[]): boolean {\n let path = this;\n while (path) {\n if (candidateTypes.includes(path.node.type)) return true;\n path = path.parentPath;\n }\n\n return false;\n}\n"],"mappings":"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","ignoreList":[]}
|
package/lib/path/context.js
CHANGED
|
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports._call = _call;
|
|
7
|
+
exports._forceSetScope = _forceSetScope;
|
|
7
8
|
exports._getQueueContexts = _getQueueContexts;
|
|
8
9
|
exports._resyncKey = _resyncKey;
|
|
9
10
|
exports._resyncList = _resyncList;
|
|
@@ -63,9 +64,7 @@ function isDenylisted() {
|
|
|
63
64
|
const denylist = (_this$opts$denylist = this.opts.denylist) != null ? _this$opts$denylist : this.opts.blacklist;
|
|
64
65
|
return denylist == null ? void 0 : denylist.includes(this.node.type);
|
|
65
66
|
}
|
|
66
|
-
|
|
67
|
-
exports.isBlacklisted = isDenylisted;
|
|
68
|
-
}
|
|
67
|
+
exports.isBlacklisted = isDenylisted;
|
|
69
68
|
function restoreContext(path, context) {
|
|
70
69
|
if (path.context !== context) {
|
|
71
70
|
path.context = context;
|
|
@@ -108,8 +107,22 @@ function skipKey(key) {
|
|
|
108
107
|
function stop() {
|
|
109
108
|
this._traverseFlags |= _index.SHOULD_SKIP | _index.SHOULD_STOP;
|
|
110
109
|
}
|
|
110
|
+
function _forceSetScope() {
|
|
111
|
+
var _this$scope;
|
|
112
|
+
let path = this.parentPath;
|
|
113
|
+
if ((this.key === "key" || this.listKey === "decorators") && path.isMethod() || this.key === "discriminant" && path.isSwitchStatement()) {
|
|
114
|
+
path = path.parentPath;
|
|
115
|
+
}
|
|
116
|
+
let target;
|
|
117
|
+
while (path && !target) {
|
|
118
|
+
target = path.scope;
|
|
119
|
+
path = path.parentPath;
|
|
120
|
+
}
|
|
121
|
+
this.scope = this.getScope(target);
|
|
122
|
+
(_this$scope = this.scope) == null || _this$scope.init();
|
|
123
|
+
}
|
|
111
124
|
function setScope() {
|
|
112
|
-
var _this$opts2, _this$
|
|
125
|
+
var _this$opts2, _this$scope2;
|
|
113
126
|
if ((_this$opts2 = this.opts) != null && _this$opts2.noScope) return;
|
|
114
127
|
let path = this.parentPath;
|
|
115
128
|
if ((this.key === "key" || this.listKey === "decorators") && path.isMethod() || this.key === "discriminant" && path.isSwitchStatement()) {
|
|
@@ -123,7 +136,7 @@ function setScope() {
|
|
|
123
136
|
path = path.parentPath;
|
|
124
137
|
}
|
|
125
138
|
this.scope = this.getScope(target);
|
|
126
|
-
(_this$
|
|
139
|
+
(_this$scope2 = this.scope) == null || _this$scope2.init();
|
|
127
140
|
}
|
|
128
141
|
function setContext(context) {
|
|
129
142
|
if (this.skipKeys != null) {
|
|
@@ -208,7 +221,6 @@ function setKey(key) {
|
|
|
208
221
|
}
|
|
209
222
|
function requeue(pathToQueue = this) {
|
|
210
223
|
if (pathToQueue.removed) return;
|
|
211
|
-
;
|
|
212
224
|
const contexts = this.contexts;
|
|
213
225
|
for (const context of contexts) {
|
|
214
226
|
context.maybeQueue(pathToQueue);
|
package/lib/path/context.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_traverseNode","require","_index","_removal","t","call","key","opts","debug","node","_call","_opts$this$node$type","type","fns","fn","ret","state","then","Error","_traverseFlags","isDenylisted","_this$opts$denylist","denylist","blacklist","includes","exports","isBlacklisted","restoreContext","path","context","visit","_this$opts$shouldSkip","_this$opts","shouldSkip","currentContext","shouldStop","traverseNode","scope","skipKeys","skip","skipKey","stop","SHOULD_SKIP","SHOULD_STOP","setScope","_this$opts2","_this$scope","noScope","parentPath","listKey","isMethod","isSwitchStatement","target","_path$opts","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","_this$node","requeue","pathToQueue","maybeQueue","requeueComputedKeyAndDecorators","isPrivate","computed","get","decorators","decorator","_getQueueContexts"],"sources":["../../src/path/context.ts"],"sourcesContent":["// This file contains methods responsible for maintaining a TraversalContext.\n\nimport { traverseNode } from \"../traverse-node.ts\";\nimport { SHOULD_SKIP, SHOULD_STOP } from \"./index.ts\";\nimport { _markRemoved } from \"./removal.ts\";\nimport type TraversalContext from \"../context.ts\";\nimport type { VisitPhase } from \"../types.ts\";\nimport type NodePath from \"./index.ts\";\nimport * as t from \"@babel/types\";\n\nexport function call(this: NodePath, key: VisitPhase): boolean {\n const opts = this.opts;\n\n this.debug(key);\n\n if (this.node) {\n if (_call.call(this, opts[key])) return true;\n }\n\n if (this.node) {\n return _call.call(this, 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 // @ts-expect-error TODO(Babel 8): Remove blacklist\n const denylist = this.opts.denylist ?? this.opts.blacklist;\n return denylist?.includes(this.node.type);\n}\n\nif (!process.env.BABEL_8_BREAKING && !USE_ESM) {\n // eslint-disable-next-line no-restricted-globals\n exports.isBlacklisted = isDenylisted;\n}\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)) {\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 || call.call(this, \"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 call.call(this, \"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 (!process.env.BABEL_8_BREAKING && this.opts?.noScope) return;\n\n let path = this.parentPath;\n\n if (\n // Skip method scope if is computed method key or decorator expression\n ((this.key === \"key\" || this.listKey === \"decorators\") &&\n path.isMethod()) ||\n // Skip switch scope if for discriminant (`x` in `switch (x) {}`).\n (this.key === \"discriminant\" && path.isSwitchStatement())\n ) {\n path = path.parentPath;\n }\n\n let target;\n while (path && !target) {\n if (!process.env.BABEL_8_BREAKING && path.opts?.noScope) return;\n\n target = path.scope;\n path = path.parentPath;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n this.scope = this.getScope(target!);\n 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 // Discard the S type parameter from context.opts\n this.opts = context.opts as typeof this.opts;\n }\n\n setScope.call(this);\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 _resyncParent.call(this);\n _resyncList.call(this);\n _resyncKey.call(this);\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 setKey.call(this, i);\n return;\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 setKey.call(this, key);\n return;\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 _markRemoved.call(this);\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 | t.Node[],\n listKey: string | undefined,\n key: string | number,\n) {\n this.listKey = listKey;\n this.container = container;\n\n this.parentPath = parentPath || this.parentPath;\n setKey.call(this, 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 requeueComputedKeyAndDecorators(\n this: NodePath<t.Method | t.Property>,\n) {\n const { context, node } = this;\n if (!t.isPrivate(node) && node.computed) {\n context.maybeQueue(this.get(\"key\"));\n }\n if (node.decorators) {\n for (const decorator of this.get(\"decorators\")) {\n context.maybeQueue(decorator);\n }\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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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_traverseNode","require","_index","_removal","t","call","key","opts","debug","node","_call","_opts$this$node$type","type","fns","fn","ret","state","then","Error","_traverseFlags","isDenylisted","_this$opts$denylist","denylist","blacklist","includes","exports","isBlacklisted","restoreContext","path","context","visit","_this$opts$shouldSkip","_this$opts","shouldSkip","currentContext","shouldStop","traverseNode","scope","skipKeys","skip","skipKey","stop","SHOULD_SKIP","SHOULD_STOP","_forceSetScope","_this$scope","parentPath","listKey","isMethod","isSwitchStatement","target","getScope","init","setScope","_this$opts2","_this$scope2","noScope","_path$opts","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","_this$node","requeue","pathToQueue","maybeQueue","requeueComputedKeyAndDecorators","isPrivate","computed","get","decorators","decorator","_getQueueContexts"],"sources":["../../src/path/context.ts"],"sourcesContent":["// This file contains methods responsible for maintaining a TraversalContext.\n\nimport { traverseNode } from \"../traverse-node.ts\";\nimport { SHOULD_SKIP, SHOULD_STOP } from \"./index.ts\";\nimport { _markRemoved } from \"./removal.ts\";\nimport type TraversalContext from \"../context.ts\";\nimport type { VisitPhase } from \"../types.ts\";\nimport type NodePath from \"./index.ts\";\nimport * as t from \"@babel/types\";\n\nexport function call(this: NodePath, key: VisitPhase): boolean {\n const opts = this.opts;\n\n this.debug(key);\n\n if (this.node) {\n if (_call.call(this, opts[key])) return true;\n }\n\n if (this.node) {\n return _call.call(this, opts[this.node.type]?.[key]);\n }\n\n return false;\n}\n\nexport function _call(this: NodePath, fns?: 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 // @ts-expect-error TODO(Babel 8): Remove blacklist\n const denylist = this.opts.denylist ?? this.opts.blacklist;\n return denylist?.includes(this.node.type);\n}\n\nif (!process.env.BABEL_8_BREAKING && !USE_ESM) {\n // eslint-disable-next-line no-restricted-globals\n exports.isBlacklisted = isDenylisted;\n}\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)) {\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 || call.call(this, \"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 call.call(this, \"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 _forceSetScope(this: NodePath) {\n let path = this.parentPath;\n\n if (\n // Skip method scope if is computed method key or decorator expression\n ((this.key === \"key\" || this.listKey === \"decorators\") &&\n path.isMethod()) ||\n // Skip switch scope if for discriminant (`x` in `switch (x) {}`).\n (this.key === \"discriminant\" && path.isSwitchStatement())\n ) {\n path = path.parentPath;\n }\n\n let target;\n while (path && !target) {\n target = path.scope;\n path = path.parentPath;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n this.scope = this.getScope(target!);\n this.scope?.init();\n}\n\nexport function setScope(this: NodePath) {\n if (this.opts?.noScope) return;\n\n let path = this.parentPath;\n\n if (\n // Skip method scope if is computed method key or decorator expression\n ((this.key === \"key\" || this.listKey === \"decorators\") &&\n path.isMethod()) ||\n // Skip switch scope if for discriminant (`x` in `switch (x) {}`).\n (this.key === \"discriminant\" && path.isSwitchStatement())\n ) {\n path = path.parentPath;\n }\n\n let target;\n while (path && !target) {\n if (path.opts?.noScope) return;\n\n target = path.scope;\n path = path.parentPath;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n this.scope = this.getScope(target!);\n 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 // Discard the S type parameter from context.opts\n this.opts = context.opts as typeof this.opts;\n }\n\n setScope.call(this);\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 _resyncParent.call(this);\n _resyncList.call(this);\n _resyncKey.call(this);\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 setKey.call(this, i);\n return;\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 setKey.call(this, key);\n return;\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 _markRemoved.call(this);\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 | t.Node[],\n listKey: string | undefined,\n key: string | number,\n) {\n this.listKey = listKey;\n this.container = container;\n\n this.parentPath = parentPath || this.parentPath;\n setKey.call(this, 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 requeueComputedKeyAndDecorators(\n this: NodePath<t.Method | t.Property>,\n) {\n const { context, node } = this;\n if (!t.isPrivate(node) && node.computed) {\n context.maybeQueue(this.get(\"key\"));\n }\n if (node.decorators) {\n for (const decorator of this.get(\"decorators\")) {\n context.maybeQueue(decorator);\n }\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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","ignoreList":[]}
|
package/lib/path/conversion.js
CHANGED
|
@@ -100,12 +100,10 @@ function ensureBlock() {
|
|
|
100
100
|
_context.setup.call(body, parentPath, listKey ? parentPath.node[listKey] : parentPath.node, listKey, key);
|
|
101
101
|
return this.node;
|
|
102
102
|
}
|
|
103
|
-
{
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
};
|
|
108
|
-
}
|
|
103
|
+
exports.arrowFunctionToShadowed = function () {
|
|
104
|
+
if (!this.isArrowFunctionExpression()) return;
|
|
105
|
+
this.arrowFunctionToExpression();
|
|
106
|
+
};
|
|
109
107
|
function unwrapFunctionEnvironment() {
|
|
110
108
|
if (!this.isArrowFunctionExpression() && !this.isFunctionExpression() && !this.isFunctionDeclaration()) {
|
|
111
109
|
throw this.buildCodeFrameError("Can only unwrap the environment of a function.");
|
|
@@ -572,17 +570,13 @@ function ensureFunctionName(supportUnicodeId) {
|
|
|
572
570
|
}
|
|
573
571
|
if (!state.needsRename) {
|
|
574
572
|
this.node.id = id;
|
|
575
|
-
|
|
576
|
-
scope.getProgramParent().references[id.name] = true;
|
|
577
|
-
}
|
|
573
|
+
scope.getProgramParent().references[id.name] = true;
|
|
578
574
|
return this;
|
|
579
575
|
}
|
|
580
576
|
if (scope.hasBinding(id.name) && !scope.hasGlobal(id.name)) {
|
|
581
577
|
scope.rename(id.name);
|
|
582
578
|
this.node.id = id;
|
|
583
|
-
|
|
584
|
-
scope.getProgramParent().references[id.name] = true;
|
|
585
|
-
}
|
|
579
|
+
scope.getProgramParent().references[id.name] = true;
|
|
586
580
|
return this;
|
|
587
581
|
}
|
|
588
582
|
if (!isFunction(this.node)) return null;
|