@babel/traverse 8.0.0-alpha.2 → 8.0.0-alpha.3
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/index.js +132 -130
- package/lib/index.js.map +1 -1
- package/package.json +11 -11
- package/lib/cache.js +0 -28
- package/lib/cache.js.map +0 -1
- package/lib/context.js +0 -108
- package/lib/context.js.map +0 -1
- package/lib/hub.js +0 -12
- package/lib/hub.js.map +0 -1
- package/lib/path/ancestry.js +0 -126
- package/lib/path/ancestry.js.map +0 -1
- package/lib/path/comments.js +0 -46
- package/lib/path/comments.js.map +0 -1
- package/lib/path/context.js +0 -194
- package/lib/path/context.js.map +0 -1
- package/lib/path/conversion.js +0 -453
- package/lib/path/conversion.js.map +0 -1
- package/lib/path/evaluation.js +0 -333
- package/lib/path/evaluation.js.map +0 -1
- package/lib/path/family.js +0 -322
- package/lib/path/family.js.map +0 -1
- package/lib/path/index.js +0 -181
- package/lib/path/index.js.map +0 -1
- package/lib/path/inference/index.js +0 -137
- package/lib/path/inference/index.js.map +0 -1
- package/lib/path/inference/inferer-reference.js +0 -145
- package/lib/path/inference/inferer-reference.js.map +0 -1
- package/lib/path/inference/inferers.js +0 -172
- package/lib/path/inference/inferers.js.map +0 -1
- package/lib/path/inference/util.js +0 -20
- package/lib/path/inference/util.js.map +0 -1
- package/lib/path/introspection.js +0 -360
- package/lib/path/introspection.js.map +0 -1
- package/lib/path/lib/hoister.js +0 -164
- package/lib/path/lib/hoister.js.map +0 -1
- package/lib/path/lib/removal-hooks.js +0 -31
- package/lib/path/lib/removal-hooks.js.map +0 -1
- package/lib/path/lib/virtual-types-validator.js +0 -133
- package/lib/path/lib/virtual-types-validator.js.map +0 -1
- package/lib/path/lib/virtual-types.js +0 -20
- package/lib/path/lib/virtual-types.js.map +0 -1
- package/lib/path/modification.js +0 -209
- package/lib/path/modification.js.map +0 -1
- package/lib/path/removal.js +0 -48
- package/lib/path/removal.js.map +0 -1
- package/lib/path/replacement.js +0 -192
- package/lib/path/replacement.js.map +0 -1
- package/lib/scope/binding.js +0 -78
- package/lib/scope/binding.js.map +0 -1
- package/lib/scope/index.js +0 -870
- package/lib/scope/index.js.map +0 -1
- package/lib/scope/lib/renamer.js +0 -105
- package/lib/scope/lib/renamer.js.map +0 -1
- package/lib/traverse-node.js +0 -23
- package/lib/traverse-node.js.map +0 -1
- package/lib/types.js +0 -3
- package/lib/types.js.map +0 -1
- package/lib/visitors.js +0 -210
- package/lib/visitors.js.map +0 -1
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@babel/traverse",
|
3
|
-
"version": "8.0.0-alpha.
|
3
|
+
"version": "8.0.0-alpha.3",
|
4
4
|
"description": "The Babel Traverse module maintains the overall tree state, and is responsible for replacing, removing, and adding nodes",
|
5
5
|
"author": "The Babel Team (https://babel.dev/team)",
|
6
6
|
"homepage": "https://babel.dev/docs/en/next/babel-traverse",
|
@@ -16,20 +16,20 @@
|
|
16
16
|
},
|
17
17
|
"main": "./lib/index.js",
|
18
18
|
"dependencies": {
|
19
|
-
"@babel/code-frame": "^8.0.0-alpha.
|
20
|
-
"@babel/generator": "^8.0.0-alpha.
|
21
|
-
"@babel/helper-environment-visitor": "^8.0.0-alpha.
|
22
|
-
"@babel/helper-function-name": "^8.0.0-alpha.
|
23
|
-
"@babel/helper-hoist-variables": "^8.0.0-alpha.
|
24
|
-
"@babel/helper-split-export-declaration": "^8.0.0-alpha.
|
25
|
-
"@babel/parser": "^8.0.0-alpha.
|
26
|
-
"@babel/types": "^8.0.0-alpha.
|
19
|
+
"@babel/code-frame": "^8.0.0-alpha.3",
|
20
|
+
"@babel/generator": "^8.0.0-alpha.3",
|
21
|
+
"@babel/helper-environment-visitor": "^8.0.0-alpha.3",
|
22
|
+
"@babel/helper-function-name": "^8.0.0-alpha.3",
|
23
|
+
"@babel/helper-hoist-variables": "^8.0.0-alpha.3",
|
24
|
+
"@babel/helper-split-export-declaration": "^8.0.0-alpha.3",
|
25
|
+
"@babel/parser": "^8.0.0-alpha.3",
|
26
|
+
"@babel/types": "^8.0.0-alpha.3",
|
27
27
|
"debug": "^4.1.0",
|
28
28
|
"globals": "^13.5.0"
|
29
29
|
},
|
30
30
|
"devDependencies": {
|
31
|
-
"@babel/core": "^8.0.0-alpha.
|
32
|
-
"@babel/helper-plugin-test-runner": "^8.0.0-alpha.
|
31
|
+
"@babel/core": "^8.0.0-alpha.3",
|
32
|
+
"@babel/helper-plugin-test-runner": "^8.0.0-alpha.3"
|
33
33
|
},
|
34
34
|
"engines": {
|
35
35
|
"node": "^16.20.0 || ^18.16.0 || >=20.0.0"
|
package/lib/cache.js
DELETED
@@ -1,28 +0,0 @@
|
|
1
|
-
let pathsCache = new WeakMap();
|
2
|
-
export { pathsCache as path };
|
3
|
-
export let scope = new WeakMap();
|
4
|
-
export function clear() {
|
5
|
-
clearPath();
|
6
|
-
clearScope();
|
7
|
-
}
|
8
|
-
export function clearPath() {
|
9
|
-
pathsCache = new WeakMap();
|
10
|
-
}
|
11
|
-
export function clearScope() {
|
12
|
-
scope = new WeakMap();
|
13
|
-
}
|
14
|
-
const nullHub = Object.freeze({});
|
15
|
-
export function getCachedPaths(hub, parent) {
|
16
|
-
;
|
17
|
-
return pathsCache.get(hub ?? nullHub)?.get(parent);
|
18
|
-
}
|
19
|
-
export function getOrCreateCachedPaths(hub, parent) {
|
20
|
-
;
|
21
|
-
let parents = pathsCache.get(hub ?? nullHub);
|
22
|
-
if (!parents) pathsCache.set(hub ?? nullHub, parents = new WeakMap());
|
23
|
-
let paths = parents.get(parent);
|
24
|
-
if (!paths) parents.set(parent, paths = new Map());
|
25
|
-
return paths;
|
26
|
-
}
|
27
|
-
|
28
|
-
//# sourceMappingURL=cache.js.map
|
package/lib/cache.js.map
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"names":["pathsCache","WeakMap","path","scope","clear","clearPath","clearScope","nullHub","Object","freeze","getCachedPaths","hub","parent","get","getOrCreateCachedPaths","parents","set","paths","Map"],"sources":["../src/cache.ts"],"sourcesContent":["import type { Node } from \"@babel/types\";\nimport type NodePath from \"./path\";\nimport type Scope from \"./scope\";\nimport type { HubInterface } from \"./hub\";\n\nlet pathsCache: WeakMap<\n HubInterface | typeof nullHub,\n WeakMap<Node, Map<Node, NodePath>>\n> = new WeakMap();\nexport { pathsCache as path };\nexport let scope: WeakMap<Node, Scope> = new WeakMap();\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\n// NodePath#hub can be null, but it's not a valid weakmap key because it\n// cannot be collected by GC. Use an object, knowing tht it will not be\n// collected anyway. It's not a memory leak because pathsCache.get(nullHub)\n// is itself a weakmap, so its entries can still be collected.\nconst nullHub = Object.freeze({} as const);\n\nexport function getCachedPaths(hub: HubInterface | null, parent: Node) {\n if (!process.env.BABEL_8_BREAKING) {\n // Only use Hub as part of the cache key in Babel 8, because it is a\n // breaking change (it causes incompatibilities with older `@babel/core`\n // versions: see https://github.com/babel/babel/pull/15759)\n hub = null;\n }\n return pathsCache.get(hub ?? nullHub)?.get(parent);\n}\n\nexport function getOrCreateCachedPaths(hub: HubInterface | null, parent: Node) {\n if (!process.env.BABEL_8_BREAKING) {\n hub = null;\n }\n\n let parents = pathsCache.get(hub ?? nullHub);\n if (!parents) pathsCache.set(hub ?? nullHub, (parents = new WeakMap()));\n\n let paths = parents.get(parent);\n if (!paths) parents.set(parent, (paths = new Map()));\n\n return paths;\n}\n"],"mappings":"AAKA,IAAIA,UAGH,GAAG,IAAIC,OAAO,CAAC,CAAC;AACjB,SAASD,UAAU,IAAIE,IAAI;AAC3B,OAAO,IAAIC,KAA2B,GAAG,IAAIF,OAAO,CAAC,CAAC;AAEtD,OAAO,SAASG,KAAKA,CAAA,EAAG;EACtBC,SAAS,CAAC,CAAC;EACXC,UAAU,CAAC,CAAC;AACd;AAEA,OAAO,SAASD,SAASA,CAAA,EAAG;EAC1BL,UAAU,GAAG,IAAIC,OAAO,CAAC,CAAC;AAC5B;AAEA,OAAO,SAASK,UAAUA,CAAA,EAAG;EAC3BH,KAAK,GAAG,IAAIF,OAAO,CAAC,CAAC;AACvB;AAMA,MAAMM,OAAO,GAAGC,MAAM,CAACC,MAAM,CAAC,CAAC,CAAU,CAAC;AAE1C,OAAO,SAASC,cAAcA,CAACC,GAAwB,EAAEC,MAAY,EAAE;EAAA;EAOrE,OAAOZ,UAAU,CAACa,GAAG,CAACF,GAAG,IAAIJ,OAAO,CAAC,EAAEM,GAAG,CAACD,MAAM,CAAC;AACpD;AAEA,OAAO,SAASE,sBAAsBA,CAACH,GAAwB,EAAEC,MAAY,EAAE;EAAA;EAK7E,IAAIG,OAAO,GAAGf,UAAU,CAACa,GAAG,CAACF,GAAG,IAAIJ,OAAO,CAAC;EAC5C,IAAI,CAACQ,OAAO,EAAEf,UAAU,CAACgB,GAAG,CAACL,GAAG,IAAIJ,OAAO,EAAGQ,OAAO,GAAG,IAAId,OAAO,CAAC,CAAE,CAAC;EAEvE,IAAIgB,KAAK,GAAGF,OAAO,CAACF,GAAG,CAACD,MAAM,CAAC;EAC/B,IAAI,CAACK,KAAK,EAAEF,OAAO,CAACC,GAAG,CAACJ,MAAM,EAAGK,KAAK,GAAG,IAAIC,GAAG,CAAC,CAAE,CAAC;EAEpD,OAAOD,KAAK;AACd"}
|
package/lib/context.js
DELETED
@@ -1,108 +0,0 @@
|
|
1
|
-
import NodePath from "./path/index.js";
|
2
|
-
import * as _t from "@babel/types";
|
3
|
-
const {
|
4
|
-
VISITOR_KEYS
|
5
|
-
} = _t;
|
6
|
-
export default class TraversalContext {
|
7
|
-
constructor(scope, opts, state, parentPath) {
|
8
|
-
this.parentPath = parentPath;
|
9
|
-
this.scope = scope;
|
10
|
-
this.state = state;
|
11
|
-
this.opts = opts;
|
12
|
-
}
|
13
|
-
queue = null;
|
14
|
-
priorityQueue = null;
|
15
|
-
shouldVisit(node) {
|
16
|
-
const opts = this.opts;
|
17
|
-
if (opts.enter || opts.exit) return true;
|
18
|
-
if (opts[node.type]) return true;
|
19
|
-
const keys = VISITOR_KEYS[node.type];
|
20
|
-
if (!keys?.length) return false;
|
21
|
-
for (const key of keys) {
|
22
|
-
if (node[key]) {
|
23
|
-
return true;
|
24
|
-
}
|
25
|
-
}
|
26
|
-
return false;
|
27
|
-
}
|
28
|
-
create(node, container, key, listKey) {
|
29
|
-
return NodePath.get({
|
30
|
-
parentPath: this.parentPath,
|
31
|
-
parent: node,
|
32
|
-
container,
|
33
|
-
key: key,
|
34
|
-
listKey
|
35
|
-
});
|
36
|
-
}
|
37
|
-
maybeQueue(path, notPriority) {
|
38
|
-
if (this.queue) {
|
39
|
-
if (notPriority) {
|
40
|
-
this.queue.push(path);
|
41
|
-
} else {
|
42
|
-
this.priorityQueue.push(path);
|
43
|
-
}
|
44
|
-
}
|
45
|
-
}
|
46
|
-
visitMultiple(container, parent, listKey) {
|
47
|
-
if (container.length === 0) return false;
|
48
|
-
const queue = [];
|
49
|
-
for (let key = 0; key < container.length; key++) {
|
50
|
-
const node = container[key];
|
51
|
-
if (node && this.shouldVisit(node)) {
|
52
|
-
queue.push(this.create(parent, container, key, listKey));
|
53
|
-
}
|
54
|
-
}
|
55
|
-
return this.visitQueue(queue);
|
56
|
-
}
|
57
|
-
visitSingle(node, key) {
|
58
|
-
if (this.shouldVisit(node[key])) {
|
59
|
-
return this.visitQueue([this.create(node, node, key)]);
|
60
|
-
} else {
|
61
|
-
return false;
|
62
|
-
}
|
63
|
-
}
|
64
|
-
visitQueue(queue) {
|
65
|
-
this.queue = queue;
|
66
|
-
this.priorityQueue = [];
|
67
|
-
const visited = new WeakSet();
|
68
|
-
let stop = false;
|
69
|
-
for (const path of queue) {
|
70
|
-
path.resync();
|
71
|
-
if (path.contexts.length === 0 || path.contexts[path.contexts.length - 1] !== this) {
|
72
|
-
path.pushContext(this);
|
73
|
-
}
|
74
|
-
if (path.key === null) continue;
|
75
|
-
const {
|
76
|
-
node
|
77
|
-
} = path;
|
78
|
-
if (visited.has(node)) continue;
|
79
|
-
if (node) visited.add(node);
|
80
|
-
if (path.visit()) {
|
81
|
-
stop = true;
|
82
|
-
break;
|
83
|
-
}
|
84
|
-
if (this.priorityQueue.length) {
|
85
|
-
stop = this.visitQueue(this.priorityQueue);
|
86
|
-
this.priorityQueue = [];
|
87
|
-
this.queue = queue;
|
88
|
-
if (stop) break;
|
89
|
-
}
|
90
|
-
}
|
91
|
-
for (const path of queue) {
|
92
|
-
path.popContext();
|
93
|
-
}
|
94
|
-
this.queue = null;
|
95
|
-
return stop;
|
96
|
-
}
|
97
|
-
visit(node, key) {
|
98
|
-
const nodes = node[key];
|
99
|
-
if (!nodes) return false;
|
100
|
-
if (Array.isArray(nodes)) {
|
101
|
-
return this.visitMultiple(nodes, node, key);
|
102
|
-
} else {
|
103
|
-
return this.visitSingle(node, key);
|
104
|
-
}
|
105
|
-
}
|
106
|
-
}
|
107
|
-
|
108
|
-
//# sourceMappingURL=context.js.map
|
package/lib/context.js.map
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"names":["NodePath","_t","VISITOR_KEYS","TraversalContext","constructor","scope","opts","state","parentPath","queue","priorityQueue","shouldVisit","node","enter","exit","type","keys","length","key","create","container","listKey","get","parent","maybeQueue","path","notPriority","push","visitMultiple","visitQueue","visitSingle","visited","WeakSet","stop","resync","contexts","pushContext","has","add","visit","popContext","nodes","Array","isArray"],"sources":["../src/context.ts"],"sourcesContent":["import NodePath from \"./path\";\nimport { VISITOR_KEYS } from \"@babel/types\";\nimport type Scope from \"./scope\";\nimport type { ExplodedTraverseOptions } from \".\";\nimport type * as t from \"@babel/types\";\nimport type { Visitor } from \"./types\";\n\nexport default class TraversalContext<S = unknown> {\n constructor(\n scope: Scope,\n opts: ExplodedTraverseOptions<S>,\n state: S,\n parentPath: NodePath,\n ) {\n this.parentPath = parentPath;\n this.scope = scope;\n this.state = state;\n this.opts = opts;\n }\n\n declare parentPath: NodePath;\n declare scope: Scope;\n declare state: S;\n declare opts: ExplodedTraverseOptions<S>;\n queue: Array<NodePath> | null = null;\n priorityQueue: Array<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: Array<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 // We don't need to `.setContext()` here, since `.visitQueue()` already\n // calls `.pushContext`.\n return NodePath.get({\n parentPath: this.parentPath,\n parent: node,\n container,\n key: key,\n listKey,\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: Array<NodePath>): boolean {\n // set queue\n this.queue = queue;\n this.priorityQueue = [];\n\n const visited = new WeakSet();\n let stop = false;\n\n // visit the queue\n for (const path of queue) {\n path.resync();\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 path.pushContext(this);\n }\n\n // this path no longer belongs to the tree\n if (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 // clear queue\n for (const path of queue) {\n path.popContext();\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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"}
|
package/lib/hub.js
DELETED
@@ -1,12 +0,0 @@
|
|
1
|
-
export default class Hub {
|
2
|
-
getCode() {}
|
3
|
-
getScope() {}
|
4
|
-
addHelper() {
|
5
|
-
throw new Error("Helpers are not supported by the default hub.");
|
6
|
-
}
|
7
|
-
buildError(node, msg, Error = TypeError) {
|
8
|
-
return new Error(msg);
|
9
|
-
}
|
10
|
-
}
|
11
|
-
|
12
|
-
//# sourceMappingURL=hub.js.map
|
package/lib/hub.js.map
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"names":["Hub","getCode","getScope","addHelper","Error","buildError","node","msg","TypeError"],"sources":["../src/hub.ts"],"sourcesContent":["import type Scope from \"./scope\";\nimport type { Node } from \"@babel/types\";\n\nexport interface HubInterface {\n getCode(): string | void;\n getScope(): Scope | void;\n addHelper(name: string): any;\n buildError(node: Node, msg: string, Error: new () => Error): Error;\n}\n\nexport default class Hub implements HubInterface {\n getCode() {}\n\n getScope() {}\n\n addHelper() {\n throw new Error(\"Helpers are not supported by the default hub.\");\n }\n\n buildError(node: Node, msg: string, Error = TypeError): Error {\n return new Error(msg);\n }\n}\n"],"mappings":"AAUA,eAAe,MAAMA,GAAG,CAAyB;EAC/CC,OAAOA,CAAA,EAAG,CAAC;EAEXC,QAAQA,CAAA,EAAG,CAAC;EAEZC,SAASA,CAAA,EAAG;IACV,MAAM,IAAIC,KAAK,CAAC,+CAA+C,CAAC;EAClE;EAEAC,UAAUA,CAACC,IAAU,EAAEC,GAAW,EAAEH,KAAK,GAAGI,SAAS,EAAS;IAC5D,OAAO,IAAIJ,KAAK,CAACG,GAAG,CAAC;EACvB;AACF"}
|
package/lib/path/ancestry.js
DELETED
@@ -1,126 +0,0 @@
|
|
1
|
-
import * as _t from "@babel/types";
|
2
|
-
const {
|
3
|
-
VISITOR_KEYS
|
4
|
-
} = _t;
|
5
|
-
export function findParent(callback) {
|
6
|
-
let path = this;
|
7
|
-
while (path = path.parentPath) {
|
8
|
-
if (callback(path)) return path;
|
9
|
-
}
|
10
|
-
return null;
|
11
|
-
}
|
12
|
-
export function find(callback) {
|
13
|
-
let path = this;
|
14
|
-
do {
|
15
|
-
if (callback(path)) return path;
|
16
|
-
} while (path = path.parentPath);
|
17
|
-
return null;
|
18
|
-
}
|
19
|
-
export function getFunctionParent() {
|
20
|
-
return this.findParent(p => p.isFunction());
|
21
|
-
}
|
22
|
-
export function getStatementParent() {
|
23
|
-
let path = this;
|
24
|
-
do {
|
25
|
-
if (!path.parentPath || Array.isArray(path.container) && path.isStatement()) {
|
26
|
-
break;
|
27
|
-
} else {
|
28
|
-
path = path.parentPath;
|
29
|
-
}
|
30
|
-
} while (path);
|
31
|
-
if (path && (path.isProgram() || path.isFile())) {
|
32
|
-
throw new Error("File/Program node, we can't possibly find a statement parent to this");
|
33
|
-
}
|
34
|
-
return path;
|
35
|
-
}
|
36
|
-
export function getEarliestCommonAncestorFrom(paths) {
|
37
|
-
return this.getDeepestCommonAncestorFrom(paths, function (deepest, i, ancestries) {
|
38
|
-
let earliest;
|
39
|
-
const keys = VISITOR_KEYS[deepest.type];
|
40
|
-
for (const ancestry of ancestries) {
|
41
|
-
const path = ancestry[i + 1];
|
42
|
-
if (!earliest) {
|
43
|
-
earliest = path;
|
44
|
-
continue;
|
45
|
-
}
|
46
|
-
if (path.listKey && earliest.listKey === path.listKey) {
|
47
|
-
if (path.key < earliest.key) {
|
48
|
-
earliest = path;
|
49
|
-
continue;
|
50
|
-
}
|
51
|
-
}
|
52
|
-
const earliestKeyIndex = keys.indexOf(earliest.parentKey);
|
53
|
-
const currentKeyIndex = keys.indexOf(path.parentKey);
|
54
|
-
if (earliestKeyIndex > currentKeyIndex) {
|
55
|
-
earliest = path;
|
56
|
-
}
|
57
|
-
}
|
58
|
-
return earliest;
|
59
|
-
});
|
60
|
-
}
|
61
|
-
export function getDeepestCommonAncestorFrom(paths, filter) {
|
62
|
-
if (!paths.length) {
|
63
|
-
return this;
|
64
|
-
}
|
65
|
-
if (paths.length === 1) {
|
66
|
-
return paths[0];
|
67
|
-
}
|
68
|
-
let minDepth = Infinity;
|
69
|
-
let lastCommonIndex, lastCommon;
|
70
|
-
const ancestries = paths.map(path => {
|
71
|
-
const ancestry = [];
|
72
|
-
do {
|
73
|
-
ancestry.unshift(path);
|
74
|
-
} while ((path = path.parentPath) && path !== this);
|
75
|
-
if (ancestry.length < minDepth) {
|
76
|
-
minDepth = ancestry.length;
|
77
|
-
}
|
78
|
-
return ancestry;
|
79
|
-
});
|
80
|
-
const first = ancestries[0];
|
81
|
-
depthLoop: for (let i = 0; i < minDepth; i++) {
|
82
|
-
const shouldMatch = first[i];
|
83
|
-
for (const ancestry of ancestries) {
|
84
|
-
if (ancestry[i] !== shouldMatch) {
|
85
|
-
break depthLoop;
|
86
|
-
}
|
87
|
-
}
|
88
|
-
lastCommonIndex = i;
|
89
|
-
lastCommon = shouldMatch;
|
90
|
-
}
|
91
|
-
if (lastCommon) {
|
92
|
-
if (filter) {
|
93
|
-
return filter(lastCommon, lastCommonIndex, ancestries);
|
94
|
-
} else {
|
95
|
-
return lastCommon;
|
96
|
-
}
|
97
|
-
} else {
|
98
|
-
throw new Error("Couldn't find intersection");
|
99
|
-
}
|
100
|
-
}
|
101
|
-
export function getAncestry() {
|
102
|
-
let path = this;
|
103
|
-
const paths = [];
|
104
|
-
do {
|
105
|
-
paths.push(path);
|
106
|
-
} while (path = path.parentPath);
|
107
|
-
return paths;
|
108
|
-
}
|
109
|
-
export function isAncestor(maybeDescendant) {
|
110
|
-
return maybeDescendant.isDescendant(this);
|
111
|
-
}
|
112
|
-
export function isDescendant(maybeAncestor) {
|
113
|
-
return !!this.findParent(parent => parent === maybeAncestor);
|
114
|
-
}
|
115
|
-
export function inType(...candidateTypes) {
|
116
|
-
let path = this;
|
117
|
-
while (path) {
|
118
|
-
for (const type of candidateTypes) {
|
119
|
-
if (path.node.type === type) return true;
|
120
|
-
}
|
121
|
-
path = path.parentPath;
|
122
|
-
}
|
123
|
-
return false;
|
124
|
-
}
|
125
|
-
|
126
|
-
//# sourceMappingURL=ancestry.js.map
|
package/lib/path/ancestry.js.map
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"names":["_t","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","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\";\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 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 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 for (const type of candidateTypes) {\n if (path.node.type === type) return true;\n }\n path = path.parentPath;\n }\n\n return false;\n}\n"],"mappings":"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"}
|
package/lib/path/comments.js
DELETED
@@ -1,46 +0,0 @@
|
|
1
|
-
import * as _t from "@babel/types";
|
2
|
-
const {
|
3
|
-
addComment: _addComment,
|
4
|
-
addComments: _addComments
|
5
|
-
} = _t;
|
6
|
-
export function shareCommentsWithSiblings() {
|
7
|
-
if (typeof this.key === "string") return;
|
8
|
-
const node = this.node;
|
9
|
-
if (!node) return;
|
10
|
-
const trailing = node.trailingComments;
|
11
|
-
const leading = node.leadingComments;
|
12
|
-
if (!trailing && !leading) return;
|
13
|
-
const prev = this.getSibling(this.key - 1);
|
14
|
-
const next = this.getSibling(this.key + 1);
|
15
|
-
const hasPrev = Boolean(prev.node);
|
16
|
-
const hasNext = Boolean(next.node);
|
17
|
-
if (hasPrev) {
|
18
|
-
if (leading) {
|
19
|
-
prev.addComments("trailing", removeIfExisting(leading, prev.node.trailingComments));
|
20
|
-
}
|
21
|
-
if (trailing && !hasNext) prev.addComments("trailing", trailing);
|
22
|
-
}
|
23
|
-
if (hasNext) {
|
24
|
-
if (trailing) {
|
25
|
-
next.addComments("leading", removeIfExisting(trailing, next.node.leadingComments));
|
26
|
-
}
|
27
|
-
if (leading && !hasPrev) next.addComments("leading", leading);
|
28
|
-
}
|
29
|
-
}
|
30
|
-
function removeIfExisting(list, toRemove) {
|
31
|
-
if (!toRemove) return list;
|
32
|
-
let lastFoundIndex = -1;
|
33
|
-
return list.filter(el => {
|
34
|
-
const i = toRemove.indexOf(el, lastFoundIndex);
|
35
|
-
if (i === -1) return true;
|
36
|
-
lastFoundIndex = i;
|
37
|
-
});
|
38
|
-
}
|
39
|
-
export function addComment(type, content, line) {
|
40
|
-
_addComment(this.node, type, content, line);
|
41
|
-
}
|
42
|
-
export function addComments(type, comments) {
|
43
|
-
_addComments(this.node, type, comments);
|
44
|
-
}
|
45
|
-
|
46
|
-
//# sourceMappingURL=comments.js.map
|
package/lib/path/comments.js.map
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"names":["_t","addComment","_addComment","addComments","_addComments","shareCommentsWithSiblings","key","node","trailing","trailingComments","leading","leadingComments","prev","getSibling","next","hasPrev","Boolean","hasNext","removeIfExisting","list","toRemove","lastFoundIndex","filter","el","i","indexOf","type","content","line","comments"],"sources":["../../src/path/comments.ts"],"sourcesContent":["// This file contains methods responsible for dealing with comments.\nimport type * as t from \"@babel/types\";\nimport type NodePath from \"./index\";\nimport {\n addComment as _addComment,\n addComments as _addComments,\n} from \"@babel/types\";\n\n/**\n * Share comments amongst siblings.\n */\n\nexport function shareCommentsWithSiblings(this: NodePath) {\n // NOTE: this assumes numbered keys\n if (typeof this.key === \"string\") return;\n\n const node = this.node;\n if (!node) return;\n\n const trailing = node.trailingComments;\n const leading = node.leadingComments;\n if (!trailing && !leading) return;\n\n const prev = this.getSibling(this.key - 1);\n const next = this.getSibling(this.key + 1);\n const hasPrev = Boolean(prev.node);\n const hasNext = Boolean(next.node);\n\n if (hasPrev) {\n if (leading) {\n prev.addComments(\n \"trailing\",\n removeIfExisting(leading, prev.node.trailingComments),\n );\n }\n if (trailing && !hasNext) prev.addComments(\"trailing\", trailing);\n }\n if (hasNext) {\n if (trailing) {\n next.addComments(\n \"leading\",\n removeIfExisting(trailing, next.node.leadingComments),\n );\n }\n if (leading && !hasPrev) next.addComments(\"leading\", leading);\n }\n}\n\nfunction removeIfExisting<T>(list: T[], toRemove?: T[]): T[] {\n if (!toRemove) return list;\n let lastFoundIndex = -1;\n return list.filter(el => {\n const i = toRemove.indexOf(el, lastFoundIndex);\n if (i === -1) return true;\n lastFoundIndex = i;\n });\n}\n\nexport function addComment(\n this: NodePath,\n type: t.CommentTypeShorthand,\n content: string,\n line?: boolean,\n) {\n _addComment(this.node, type, content, line);\n}\n\n/**\n * Give node `comments` of the specified `type`.\n */\n\nexport function addComments(\n this: NodePath,\n type: t.CommentTypeShorthand,\n comments: t.Comment[],\n) {\n _addComments(this.node, type, comments);\n}\n"],"mappings":"AAGA,YAAAA,EAAA,MAGO,cAAc;AAAC;EAFpBC,UAAU,EAAIC,WAAW;EACzBC,WAAW,EAAIC;AAAY,IAAAJ,EAAA;AAO7B,OAAO,SAASK,yBAAyBA,CAAA,EAAiB;EAExD,IAAI,OAAO,IAAI,CAACC,GAAG,KAAK,QAAQ,EAAE;EAElC,MAAMC,IAAI,GAAG,IAAI,CAACA,IAAI;EACtB,IAAI,CAACA,IAAI,EAAE;EAEX,MAAMC,QAAQ,GAAGD,IAAI,CAACE,gBAAgB;EACtC,MAAMC,OAAO,GAAGH,IAAI,CAACI,eAAe;EACpC,IAAI,CAACH,QAAQ,IAAI,CAACE,OAAO,EAAE;EAE3B,MAAME,IAAI,GAAG,IAAI,CAACC,UAAU,CAAC,IAAI,CAACP,GAAG,GAAG,CAAC,CAAC;EAC1C,MAAMQ,IAAI,GAAG,IAAI,CAACD,UAAU,CAAC,IAAI,CAACP,GAAG,GAAG,CAAC,CAAC;EAC1C,MAAMS,OAAO,GAAGC,OAAO,CAACJ,IAAI,CAACL,IAAI,CAAC;EAClC,MAAMU,OAAO,GAAGD,OAAO,CAACF,IAAI,CAACP,IAAI,CAAC;EAElC,IAAIQ,OAAO,EAAE;IACX,IAAIL,OAAO,EAAE;MACXE,IAAI,CAACT,WAAW,CACd,UAAU,EACVe,gBAAgB,CAACR,OAAO,EAAEE,IAAI,CAACL,IAAI,CAACE,gBAAgB,CACtD,CAAC;IACH;IACA,IAAID,QAAQ,IAAI,CAACS,OAAO,EAAEL,IAAI,CAACT,WAAW,CAAC,UAAU,EAAEK,QAAQ,CAAC;EAClE;EACA,IAAIS,OAAO,EAAE;IACX,IAAIT,QAAQ,EAAE;MACZM,IAAI,CAACX,WAAW,CACd,SAAS,EACTe,gBAAgB,CAACV,QAAQ,EAAEM,IAAI,CAACP,IAAI,CAACI,eAAe,CACtD,CAAC;IACH;IACA,IAAID,OAAO,IAAI,CAACK,OAAO,EAAED,IAAI,CAACX,WAAW,CAAC,SAAS,EAAEO,OAAO,CAAC;EAC/D;AACF;AAEA,SAASQ,gBAAgBA,CAAIC,IAAS,EAAEC,QAAc,EAAO;EAC3D,IAAI,CAACA,QAAQ,EAAE,OAAOD,IAAI;EAC1B,IAAIE,cAAc,GAAG,CAAC,CAAC;EACvB,OAAOF,IAAI,CAACG,MAAM,CAACC,EAAE,IAAI;IACvB,MAAMC,CAAC,GAAGJ,QAAQ,CAACK,OAAO,CAACF,EAAE,EAAEF,cAAc,CAAC;IAC9C,IAAIG,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,IAAI;IACzBH,cAAc,GAAGG,CAAC;EACpB,CAAC,CAAC;AACJ;AAEA,OAAO,SAASvB,UAAUA,CAExByB,IAA4B,EAC5BC,OAAe,EACfC,IAAc,EACd;EACA1B,WAAW,CAAC,IAAI,CAACK,IAAI,EAAEmB,IAAI,EAAEC,OAAO,EAAEC,IAAI,CAAC;AAC7C;AAMA,OAAO,SAASzB,WAAWA,CAEzBuB,IAA4B,EAC5BG,QAAqB,EACrB;EACAzB,YAAY,CAAC,IAAI,CAACG,IAAI,EAAEmB,IAAI,EAAEG,QAAQ,CAAC;AACzC"}
|
package/lib/path/context.js
DELETED
@@ -1,194 +0,0 @@
|
|
1
|
-
import { traverseNode } from "../traverse-node.js";
|
2
|
-
import { SHOULD_SKIP, SHOULD_STOP } from "./index.js";
|
3
|
-
export function call(key) {
|
4
|
-
const opts = this.opts;
|
5
|
-
this.debug(key);
|
6
|
-
if (this.node) {
|
7
|
-
if (this._call(opts[key])) return true;
|
8
|
-
}
|
9
|
-
if (this.node) {
|
10
|
-
return this._call(opts[this.node.type]?.[key]);
|
11
|
-
}
|
12
|
-
return false;
|
13
|
-
}
|
14
|
-
export function _call(fns) {
|
15
|
-
if (!fns) return false;
|
16
|
-
for (const fn of fns) {
|
17
|
-
if (!fn) continue;
|
18
|
-
const node = this.node;
|
19
|
-
if (!node) return true;
|
20
|
-
const ret = fn.call(this.state, this, this.state);
|
21
|
-
if (ret && typeof ret === "object" && typeof ret.then === "function") {
|
22
|
-
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.`);
|
23
|
-
}
|
24
|
-
if (ret) {
|
25
|
-
throw new Error(`Unexpected return value from visitor method ${fn}`);
|
26
|
-
}
|
27
|
-
if (this.node !== node) return true;
|
28
|
-
if (this._traverseFlags > 0) return true;
|
29
|
-
}
|
30
|
-
return false;
|
31
|
-
}
|
32
|
-
export function isDenylisted() {
|
33
|
-
const denylist = this.opts.denylist ?? this.opts.blacklist;
|
34
|
-
return denylist && denylist.indexOf(this.node.type) > -1;
|
35
|
-
}
|
36
|
-
export { isDenylisted as isBlacklisted };
|
37
|
-
function restoreContext(path, context) {
|
38
|
-
if (path.context !== context) {
|
39
|
-
path.context = context;
|
40
|
-
path.state = context.state;
|
41
|
-
path.opts = context.opts;
|
42
|
-
}
|
43
|
-
}
|
44
|
-
export function visit() {
|
45
|
-
if (!this.node) {
|
46
|
-
return false;
|
47
|
-
}
|
48
|
-
if (this.isDenylisted()) {
|
49
|
-
return false;
|
50
|
-
}
|
51
|
-
if (this.opts.shouldSkip?.(this)) {
|
52
|
-
return false;
|
53
|
-
}
|
54
|
-
const currentContext = this.context;
|
55
|
-
if (this.shouldSkip || this.call("enter")) {
|
56
|
-
this.debug("Skip...");
|
57
|
-
return this.shouldStop;
|
58
|
-
}
|
59
|
-
restoreContext(this, currentContext);
|
60
|
-
this.debug("Recursing into...");
|
61
|
-
this.shouldStop = traverseNode(this.node, this.opts, this.scope, this.state, this, this.skipKeys);
|
62
|
-
restoreContext(this, currentContext);
|
63
|
-
this.call("exit");
|
64
|
-
return this.shouldStop;
|
65
|
-
}
|
66
|
-
export function skip() {
|
67
|
-
this.shouldSkip = true;
|
68
|
-
}
|
69
|
-
export function skipKey(key) {
|
70
|
-
if (this.skipKeys == null) {
|
71
|
-
this.skipKeys = {};
|
72
|
-
}
|
73
|
-
this.skipKeys[key] = true;
|
74
|
-
}
|
75
|
-
export function stop() {
|
76
|
-
this._traverseFlags |= SHOULD_SKIP | SHOULD_STOP;
|
77
|
-
}
|
78
|
-
export function setScope() {
|
79
|
-
if (this.opts?.noScope) return;
|
80
|
-
let path = this.parentPath;
|
81
|
-
if ((this.key === "key" || this.listKey === "decorators") && path.isMethod() || this.key === "discriminant" && path.isSwitchStatement()) {
|
82
|
-
path = path.parentPath;
|
83
|
-
}
|
84
|
-
let target;
|
85
|
-
while (path && !target) {
|
86
|
-
if (path.opts?.noScope) return;
|
87
|
-
target = path.scope;
|
88
|
-
path = path.parentPath;
|
89
|
-
}
|
90
|
-
this.scope = this.getScope(target);
|
91
|
-
this.scope?.init();
|
92
|
-
}
|
93
|
-
export function setContext(context) {
|
94
|
-
if (this.skipKeys != null) {
|
95
|
-
this.skipKeys = {};
|
96
|
-
}
|
97
|
-
this._traverseFlags = 0;
|
98
|
-
if (context) {
|
99
|
-
this.context = context;
|
100
|
-
this.state = context.state;
|
101
|
-
this.opts = context.opts;
|
102
|
-
}
|
103
|
-
this.setScope();
|
104
|
-
return this;
|
105
|
-
}
|
106
|
-
export function resync() {
|
107
|
-
if (this.removed) return;
|
108
|
-
this._resyncParent();
|
109
|
-
this._resyncList();
|
110
|
-
this._resyncKey();
|
111
|
-
}
|
112
|
-
export function _resyncParent() {
|
113
|
-
if (this.parentPath) {
|
114
|
-
this.parent = this.parentPath.node;
|
115
|
-
}
|
116
|
-
}
|
117
|
-
export function _resyncKey() {
|
118
|
-
if (!this.container) return;
|
119
|
-
if (this.node === this.container[this.key]) {
|
120
|
-
return;
|
121
|
-
}
|
122
|
-
if (Array.isArray(this.container)) {
|
123
|
-
for (let i = 0; i < this.container.length; i++) {
|
124
|
-
if (this.container[i] === this.node) {
|
125
|
-
this.setKey(i);
|
126
|
-
return;
|
127
|
-
}
|
128
|
-
}
|
129
|
-
} else {
|
130
|
-
for (const key of Object.keys(this.container)) {
|
131
|
-
if (this.container[key] === this.node) {
|
132
|
-
this.setKey(key);
|
133
|
-
return;
|
134
|
-
}
|
135
|
-
}
|
136
|
-
}
|
137
|
-
this.key = null;
|
138
|
-
}
|
139
|
-
export function _resyncList() {
|
140
|
-
if (!this.parent || !this.inList) return;
|
141
|
-
const newContainer = this.parent[this.listKey];
|
142
|
-
if (this.container === newContainer) return;
|
143
|
-
this.container = newContainer || null;
|
144
|
-
}
|
145
|
-
export function _resyncRemoved() {
|
146
|
-
if (this.key == null || !this.container || this.container[this.key] !== this.node) {
|
147
|
-
this._markRemoved();
|
148
|
-
}
|
149
|
-
}
|
150
|
-
export function popContext() {
|
151
|
-
this.contexts.pop();
|
152
|
-
if (this.contexts.length > 0) {
|
153
|
-
this.setContext(this.contexts[this.contexts.length - 1]);
|
154
|
-
} else {
|
155
|
-
this.setContext(undefined);
|
156
|
-
}
|
157
|
-
}
|
158
|
-
export function pushContext(context) {
|
159
|
-
this.contexts.push(context);
|
160
|
-
this.setContext(context);
|
161
|
-
}
|
162
|
-
export function setup(parentPath, container, listKey, key) {
|
163
|
-
this.listKey = listKey;
|
164
|
-
this.container = container;
|
165
|
-
this.parentPath = parentPath || this.parentPath;
|
166
|
-
this.setKey(key);
|
167
|
-
}
|
168
|
-
export function setKey(key) {
|
169
|
-
this.key = key;
|
170
|
-
this.node = this.container[this.key];
|
171
|
-
this.type = this.node?.type;
|
172
|
-
}
|
173
|
-
export function requeue(pathToQueue = this) {
|
174
|
-
if (pathToQueue.removed) return;
|
175
|
-
{
|
176
|
-
pathToQueue.shouldSkip = false;
|
177
|
-
}
|
178
|
-
const contexts = this.contexts;
|
179
|
-
for (const context of contexts) {
|
180
|
-
context.maybeQueue(pathToQueue);
|
181
|
-
}
|
182
|
-
}
|
183
|
-
export function _getQueueContexts() {
|
184
|
-
let path = this;
|
185
|
-
let contexts = this.contexts;
|
186
|
-
while (!contexts.length) {
|
187
|
-
path = path.parentPath;
|
188
|
-
if (!path) break;
|
189
|
-
contexts = path.contexts;
|
190
|
-
}
|
191
|
-
return contexts;
|
192
|
-
}
|
193
|
-
|
194
|
-
//# sourceMappingURL=context.js.map
|
package/lib/path/context.js.map
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"names":["traverseNode","SHOULD_SKIP","SHOULD_STOP","call","key","opts","debug","node","_call","type","fns","fn","ret","state","then","Error","_traverseFlags","isDenylisted","denylist","blacklist","indexOf","isBlacklisted","restoreContext","path","context","visit","shouldSkip","currentContext","shouldStop","scope","skipKeys","skip","skipKey","stop","setScope","noScope","parentPath","listKey","isMethod","isSwitchStatement","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 { VisitPhase } from \"../types\";\nimport type NodePath from \"./index\";\nimport type * 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 (this._call(opts[key])) return true;\n }\n\n if (this.node) {\n return this._call(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 && 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)) {\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?.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 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 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 this.setKey(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 this.setKey(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 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 | 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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"}
|