@babel/traverse 7.20.0 → 7.20.5
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.
Potentially problematic release.
This version of @babel/traverse might be problematic. Click here for more details.
- package/lib/cache.js +0 -3
- package/lib/cache.js.map +1 -1
- package/lib/context.js +7 -21
- package/lib/context.js.map +1 -1
- package/lib/hub.js +0 -6
- package/lib/hub.js.map +1 -1
- package/lib/index.js +3 -21
- package/lib/index.js.map +1 -1
- package/lib/path/ancestry.js +3 -23
- package/lib/path/ancestry.js.map +1 -1
- package/lib/path/comments.js +0 -4
- package/lib/path/comments.js.map +1 -1
- package/lib/path/context.js +14 -54
- package/lib/path/context.js.map +1 -1
- package/lib/path/conversion.js +23 -78
- package/lib/path/conversion.js.map +1 -1
- package/lib/path/evaluation.js +9 -85
- package/lib/path/evaluation.js.map +1 -1
- package/lib/path/family.js +6 -73
- package/lib/path/family.js.map +1 -1
- package/lib/path/index.js +2 -61
- package/lib/path/index.js.map +1 -1
- package/lib/path/inference/index.js +2 -27
- package/lib/path/inference/index.js.map +1 -1
- package/lib/path/inference/inferer-reference.js +10 -31
- package/lib/path/inference/inferer-reference.js.map +1 -1
- package/lib/path/inference/inferers.js +4 -44
- package/lib/path/inference/inferers.js.map +1 -1
- package/lib/path/inference/util.js +0 -4
- package/lib/path/inference/util.js.map +1 -1
- package/lib/path/introspection.js +17 -59
- package/lib/path/introspection.js.map +1 -1
- package/lib/path/lib/hoister.js +7 -23
- package/lib/path/lib/hoister.js.map +1 -1
- package/lib/path/lib/removal-hooks.js +7 -3
- package/lib/path/lib/removal-hooks.js.map +1 -1
- package/lib/path/lib/virtual-types-validator.js +0 -23
- package/lib/path/lib/virtual-types-validator.js.map +1 -1
- package/lib/path/lib/virtual-types.js +1 -0
- package/lib/path/lib/virtual-types.js.map +1 -1
- package/lib/path/modification.js +12 -47
- package/lib/path/modification.js.map +1 -1
- package/lib/path/removal.js +0 -16
- package/lib/path/removal.js.map +1 -1
- package/lib/path/replacement.js +8 -50
- package/lib/path/replacement.js.map +1 -1
- package/lib/scope/binding.js +2 -14
- package/lib/scope/binding.js.map +1 -1
- package/lib/scope/index.js +19 -184
- package/lib/scope/index.js.map +1 -1
- package/lib/scope/lib/renamer.js +2 -25
- package/lib/scope/lib/renamer.js.map +1 -1
- package/lib/traverse-node.js +0 -7
- package/lib/traverse-node.js.map +1 -1
- package/lib/visitors.js +13 -44
- package/lib/visitors.js.map +1 -1
- package/package.json +4 -4
package/lib/path/context.js
CHANGED
@@ -23,53 +23,42 @@ exports.skip = skip;
|
|
23
23
|
exports.skipKey = skipKey;
|
24
24
|
exports.stop = stop;
|
25
25
|
exports.visit = visit;
|
26
|
-
|
27
26
|
var _traverseNode = require("../traverse-node");
|
28
|
-
|
29
27
|
var _index = require("./index");
|
30
28
|
|
31
29
|
function call(key) {
|
32
30
|
const opts = this.opts;
|
33
31
|
this.debug(key);
|
34
|
-
|
35
32
|
if (this.node) {
|
36
33
|
if (this._call(opts[key])) return true;
|
37
34
|
}
|
38
|
-
|
39
35
|
if (this.node) {
|
40
36
|
return this._call(opts[this.node.type] && opts[this.node.type][key]);
|
41
37
|
}
|
42
|
-
|
43
38
|
return false;
|
44
39
|
}
|
45
|
-
|
46
40
|
function _call(fns) {
|
47
41
|
if (!fns) return false;
|
48
|
-
|
49
42
|
for (const fn of fns) {
|
50
43
|
if (!fn) continue;
|
51
44
|
const node = this.node;
|
52
45
|
if (!node) return true;
|
53
46
|
const ret = fn.call(this.state, this, this.state);
|
54
|
-
|
55
47
|
if (ret && typeof ret === "object" && typeof ret.then === "function") {
|
56
48
|
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.`);
|
57
49
|
}
|
58
|
-
|
59
50
|
if (ret) {
|
60
51
|
throw new Error(`Unexpected return value from visitor method ${fn}`);
|
61
52
|
}
|
62
53
|
|
63
54
|
if (this.node !== node) return true;
|
55
|
+
|
64
56
|
if (this._traverseFlags > 0) return true;
|
65
57
|
}
|
66
|
-
|
67
58
|
return false;
|
68
59
|
}
|
69
|
-
|
70
60
|
function isDenylisted() {
|
71
61
|
var _this$opts$denylist;
|
72
|
-
|
73
62
|
const denylist = (_this$opts$denylist = this.opts.denylist) != null ? _this$opts$denylist : this.opts.blacklist;
|
74
63
|
return denylist && denylist.indexOf(this.node.type) > -1;
|
75
64
|
}
|
@@ -81,27 +70,21 @@ function restoreContext(path, context) {
|
|
81
70
|
path.opts = context.opts;
|
82
71
|
}
|
83
72
|
}
|
84
|
-
|
85
73
|
function visit() {
|
86
74
|
if (!this.node) {
|
87
75
|
return false;
|
88
76
|
}
|
89
|
-
|
90
77
|
if (this.isDenylisted()) {
|
91
78
|
return false;
|
92
79
|
}
|
93
|
-
|
94
80
|
if (this.opts.shouldSkip && this.opts.shouldSkip(this)) {
|
95
81
|
return false;
|
96
82
|
}
|
97
|
-
|
98
83
|
const currentContext = this.context;
|
99
|
-
|
100
84
|
if (this.shouldSkip || this.call("enter")) {
|
101
85
|
this.debug("Skip...");
|
102
86
|
return this.shouldStop;
|
103
87
|
}
|
104
|
-
|
105
88
|
restoreContext(this, currentContext);
|
106
89
|
this.debug("Recursing into...");
|
107
90
|
this.shouldStop = (0, _traverseNode.traverseNode)(this.node, this.opts, this.scope, this.state, this, this.skipKeys);
|
@@ -109,67 +92,53 @@ function visit() {
|
|
109
92
|
this.call("exit");
|
110
93
|
return this.shouldStop;
|
111
94
|
}
|
112
|
-
|
113
95
|
function skip() {
|
114
96
|
this.shouldSkip = true;
|
115
97
|
}
|
116
|
-
|
117
98
|
function skipKey(key) {
|
118
99
|
if (this.skipKeys == null) {
|
119
100
|
this.skipKeys = {};
|
120
101
|
}
|
121
|
-
|
122
102
|
this.skipKeys[key] = true;
|
123
103
|
}
|
124
|
-
|
125
104
|
function stop() {
|
126
105
|
this._traverseFlags |= _index.SHOULD_SKIP | _index.SHOULD_STOP;
|
127
106
|
}
|
128
|
-
|
129
107
|
function setScope() {
|
130
108
|
if (this.opts && this.opts.noScope) return;
|
131
109
|
let path = this.parentPath;
|
132
|
-
|
133
|
-
|
110
|
+
if (
|
111
|
+
(this.key === "key" || this.listKey === "decorators") && path.isMethod() ||
|
112
|
+
this.key === "discriminant" && path.isSwitchStatement()) {
|
134
113
|
path = path.parentPath;
|
135
114
|
}
|
136
|
-
|
137
115
|
let target;
|
138
|
-
|
139
116
|
while (path && !target) {
|
140
117
|
if (path.opts && path.opts.noScope) return;
|
141
118
|
target = path.scope;
|
142
119
|
path = path.parentPath;
|
143
120
|
}
|
144
|
-
|
145
121
|
this.scope = this.getScope(target);
|
146
122
|
if (this.scope) this.scope.init();
|
147
123
|
}
|
148
|
-
|
149
124
|
function setContext(context) {
|
150
125
|
if (this.skipKeys != null) {
|
151
126
|
this.skipKeys = {};
|
152
127
|
}
|
153
|
-
|
154
128
|
this._traverseFlags = 0;
|
155
|
-
|
156
129
|
if (context) {
|
157
130
|
this.context = context;
|
158
131
|
this.state = context.state;
|
159
132
|
this.opts = context.opts;
|
160
133
|
}
|
161
|
-
|
162
134
|
this.setScope();
|
163
135
|
return this;
|
164
136
|
}
|
165
137
|
|
166
138
|
function resync() {
|
167
139
|
if (this.removed) return;
|
168
|
-
|
169
140
|
this._resyncParent();
|
170
|
-
|
171
141
|
this._resyncList();
|
172
|
-
|
173
142
|
this._resyncKey();
|
174
143
|
}
|
175
144
|
|
@@ -178,11 +147,10 @@ function _resyncParent() {
|
|
178
147
|
this.parent = this.parentPath.node;
|
179
148
|
}
|
180
149
|
}
|
181
|
-
|
182
150
|
function _resyncKey() {
|
183
151
|
if (!this.container) return;
|
184
|
-
|
185
|
-
|
152
|
+
if (this.node ===
|
153
|
+
this.container[this.key]) {
|
186
154
|
return;
|
187
155
|
}
|
188
156
|
|
@@ -202,70 +170,62 @@ function _resyncKey() {
|
|
202
170
|
|
203
171
|
this.key = null;
|
204
172
|
}
|
205
|
-
|
206
173
|
function _resyncList() {
|
207
174
|
if (!this.parent || !this.inList) return;
|
208
|
-
const newContainer =
|
175
|
+
const newContainer =
|
176
|
+
this.parent[this.listKey];
|
209
177
|
if (this.container === newContainer) return;
|
178
|
+
|
210
179
|
this.container = newContainer || null;
|
211
180
|
}
|
212
|
-
|
213
181
|
function _resyncRemoved() {
|
214
|
-
if (this.key == null || !this.container ||
|
182
|
+
if (this.key == null || !this.container ||
|
183
|
+
this.container[this.key] !== this.node) {
|
215
184
|
this._markRemoved();
|
216
185
|
}
|
217
186
|
}
|
218
|
-
|
219
187
|
function popContext() {
|
220
188
|
this.contexts.pop();
|
221
|
-
|
222
189
|
if (this.contexts.length > 0) {
|
223
190
|
this.setContext(this.contexts[this.contexts.length - 1]);
|
224
191
|
} else {
|
225
192
|
this.setContext(undefined);
|
226
193
|
}
|
227
194
|
}
|
228
|
-
|
229
195
|
function pushContext(context) {
|
230
196
|
this.contexts.push(context);
|
231
197
|
this.setContext(context);
|
232
198
|
}
|
233
|
-
|
234
199
|
function setup(parentPath, container, listKey, key) {
|
235
200
|
this.listKey = listKey;
|
236
201
|
this.container = container;
|
237
202
|
this.parentPath = parentPath || this.parentPath;
|
238
203
|
this.setKey(key);
|
239
204
|
}
|
240
|
-
|
241
205
|
function setKey(key) {
|
242
206
|
var _this$node;
|
243
|
-
|
244
207
|
this.key = key;
|
245
|
-
this.node =
|
208
|
+
this.node =
|
209
|
+
this.container[this.key];
|
246
210
|
this.type = (_this$node = this.node) == null ? void 0 : _this$node.type;
|
247
211
|
}
|
248
|
-
|
249
212
|
function requeue(pathToQueue = this) {
|
250
213
|
if (pathToQueue.removed) return;
|
214
|
+
|
251
215
|
;
|
252
216
|
const contexts = this.contexts;
|
253
|
-
|
254
217
|
for (const context of contexts) {
|
255
218
|
context.maybeQueue(pathToQueue);
|
256
219
|
}
|
257
220
|
}
|
258
|
-
|
259
221
|
function _getQueueContexts() {
|
260
222
|
let path = this;
|
261
223
|
let contexts = this.contexts;
|
262
|
-
|
263
224
|
while (!contexts.length) {
|
264
225
|
path = path.parentPath;
|
265
226
|
if (!path) break;
|
266
227
|
contexts = path.contexts;
|
267
228
|
}
|
268
|
-
|
269
229
|
return contexts;
|
270
230
|
}
|
271
231
|
|
package/lib/path/context.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["call","key","opts","debug","node","_call","type","fns","fn","ret","state","then","Error","_traverseFlags","isDenylisted","denylist","blacklist","indexOf","restoreContext","path","context","visit","shouldSkip","currentContext","shouldStop","traverseNode","scope","skipKeys","skip","skipKey","stop","SHOULD_SKIP","SHOULD_STOP","setScope","noScope","parentPath","listKey","isMethod","target","getScope","init","setContext","resync","removed","_resyncParent","_resyncList","_resyncKey","parent","container","Array","isArray","i","length","setKey","Object","keys","inList","newContainer","_resyncRemoved","_markRemoved","popContext","contexts","pop","undefined","pushContext","push","setup","requeue","pathToQueue","maybeQueue","_getQueueContexts"],"sources":["../../src/path/context.ts"],"sourcesContent":["// This file contains methods responsible for maintaining a TraversalContext.\n\nimport { traverseNode } from \"../traverse-node\";\nimport { SHOULD_SKIP, SHOULD_STOP } from \"./index\";\nimport type TraversalContext from \"../context\";\nimport type NodePath from \"./index\";\nimport type * as t from \"@babel/types\";\n\nexport function call(this: NodePath, key: string): boolean {\n const opts = this.opts;\n\n this.debug(key);\n\n if (this.node) {\n if (this._call(opts[key])) return true;\n }\n\n if (this.node) {\n return this._call(opts[this.node.type] && opts[this.node.type][key]);\n }\n\n return false;\n}\n\nexport function _call(this: NodePath, fns?: Array<Function>): boolean {\n if (!fns) return false;\n\n for (const fn of fns) {\n if (!fn) continue;\n\n const node = this.node;\n if (!node) return true;\n\n const ret = fn.call(this.state, this, this.state);\n if (ret && typeof ret === \"object\" && typeof ret.then === \"function\") {\n throw new Error(\n `You appear to be using a plugin with an async traversal visitor, ` +\n `which your current version of Babel does not support. ` +\n `If you're using a published plugin, you may need to upgrade ` +\n `your @babel/core version.`,\n );\n }\n if (ret) {\n throw new Error(`Unexpected return value from visitor method ${fn}`);\n }\n\n // node has been replaced, it will have been requeued\n if (this.node !== node) return true;\n\n // this.shouldSkip || this.shouldStop || this.removed\n if (this._traverseFlags > 0) return true;\n }\n\n return false;\n}\n\nexport function isDenylisted(this: NodePath): boolean {\n const denylist = this.opts.denylist ?? this.opts.blacklist;\n return denylist && denylist.indexOf(this.node.type) > -1;\n}\n\n// TODO: Remove in Babel 8\nexport { isDenylisted as isBlacklisted };\n\nfunction restoreContext(path: NodePath, context: TraversalContext) {\n if (path.context !== context) {\n path.context = context;\n path.state = context.state;\n path.opts = context.opts;\n }\n}\n\nexport function visit(this: NodePath): boolean {\n if (!this.node) {\n return false;\n }\n\n if (this.isDenylisted()) {\n return false;\n }\n\n if (this.opts.shouldSkip && this.opts.shouldSkip(this)) {\n return false;\n }\n\n const currentContext = this.context;\n // Note: We need to check \"this.shouldSkip\" first because\n // another visitor can set it to true. Usually .shouldSkip is false\n // before calling the enter visitor, but it can be true in case of\n // a requeued node (e.g. by .replaceWith()) that is then marked\n // with .skip().\n if (this.shouldSkip || this.call(\"enter\")) {\n this.debug(\"Skip...\");\n return this.shouldStop;\n }\n restoreContext(this, currentContext);\n\n this.debug(\"Recursing into...\");\n this.shouldStop = traverseNode(\n this.node,\n this.opts,\n this.scope,\n this.state,\n this,\n this.skipKeys,\n );\n\n restoreContext(this, currentContext);\n\n this.call(\"exit\");\n\n return this.shouldStop;\n}\n\nexport function skip(this: NodePath) {\n this.shouldSkip = true;\n}\n\nexport function skipKey(this: NodePath, key: string) {\n if (this.skipKeys == null) {\n this.skipKeys = {};\n }\n this.skipKeys[key] = true;\n}\n\nexport function stop(this: NodePath) {\n // this.shouldSkip = true; this.shouldStop = true;\n this._traverseFlags |= SHOULD_SKIP | SHOULD_STOP;\n}\n\nexport function setScope(this: NodePath) {\n if (this.opts && this.opts.noScope) return;\n\n let path = this.parentPath;\n\n // Skip method scope if is computed method key or decorator expression\n if (\n (this.key === \"key\" || this.listKey === \"decorators\") &&\n path.isMethod()\n ) {\n path = path.parentPath;\n }\n\n let target;\n while (path && !target) {\n if (path.opts && path.opts.noScope) return;\n\n target = path.scope;\n path = path.parentPath;\n }\n\n this.scope = this.getScope(target);\n if (this.scope) this.scope.init();\n}\n\nexport function setContext<S = unknown>(\n this: NodePath,\n context?: TraversalContext<S>,\n) {\n if (this.skipKeys != null) {\n this.skipKeys = {};\n }\n // this.shouldSkip = false; this.shouldStop = false; this.removed = false;\n this._traverseFlags = 0;\n\n if (context) {\n this.context = context;\n this.state = context.state;\n this.opts = context.opts;\n }\n\n this.setScope();\n\n return this;\n}\n\n/**\n * Here we resync the node paths `key` and `container`. If they've changed according\n * to what we have stored internally then we attempt to resync by crawling and looking\n * for the new values.\n */\n\nexport function resync(this: NodePath) {\n if (this.removed) return;\n\n this._resyncParent();\n this._resyncList();\n this._resyncKey();\n //this._resyncRemoved();\n}\n\nexport function _resyncParent(this: NodePath) {\n if (this.parentPath) {\n this.parent = this.parentPath.node;\n }\n}\n\nexport function _resyncKey(this: NodePath) {\n if (!this.container) return;\n\n if (\n this.node ===\n // @ts-expect-error this.key should present in this.container\n this.container[this.key]\n ) {\n return;\n }\n\n // grrr, path key is out of sync. this is likely due to a modification to the AST\n // not done through our path APIs\n\n if (Array.isArray(this.container)) {\n for (let i = 0; i < this.container.length; i++) {\n if (this.container[i] === this.node) {\n return this.setKey(i);\n }\n }\n } else {\n for (const key of Object.keys(this.container)) {\n // @ts-expect-error this.key should present in this.container\n if (this.container[key] === this.node) {\n return this.setKey(key);\n }\n }\n }\n\n // ¯\\_(ツ)_/¯ who knows where it's gone lol\n this.key = null;\n}\n\nexport function _resyncList(this: NodePath) {\n if (!this.parent || !this.inList) return;\n\n const newContainer =\n // @ts-expect-error this.listKey should present in this.parent\n this.parent[this.listKey];\n if (this.container === newContainer) return;\n\n // container is out of sync. this is likely the result of it being reassigned\n this.container = newContainer || null;\n}\n\nexport function _resyncRemoved(this: NodePath) {\n if (\n this.key == null ||\n !this.container ||\n // @ts-expect-error this.key should present in this.container\n this.container[this.key] !== this.node\n ) {\n this._markRemoved();\n }\n}\n\nexport function popContext(this: NodePath) {\n this.contexts.pop();\n if (this.contexts.length > 0) {\n this.setContext(this.contexts[this.contexts.length - 1]);\n } else {\n this.setContext(undefined);\n }\n}\n\nexport function pushContext(this: NodePath, context: TraversalContext) {\n this.contexts.push(context);\n this.setContext(context);\n}\n\nexport function setup(\n this: NodePath,\n parentPath: NodePath | undefined,\n container: t.Node,\n listKey: string,\n key: string | number,\n) {\n this.listKey = listKey;\n this.container = container;\n\n this.parentPath = parentPath || this.parentPath;\n this.setKey(key);\n}\n\nexport function setKey(this: NodePath, key: string | number) {\n this.key = key;\n this.node =\n // @ts-expect-error this.key must present in this.container\n this.container[this.key];\n this.type = this.node?.type;\n}\n\nexport function requeue(this: NodePath, pathToQueue = this) {\n if (pathToQueue.removed) return;\n\n // If a path is skipped, and then replaced with a\n // new one, the new one shouldn't probably be skipped.\n if (process.env.BABEL_8_BREAKING) {\n pathToQueue.shouldSkip = false;\n }\n\n // TODO(loganfsmyth): This should be switched back to queue in parent contexts\n // automatically once #2892 and #4135 have been resolved. See #4140.\n // let contexts = this._getQueueContexts();\n const contexts = this.contexts;\n\n for (const context of contexts) {\n context.maybeQueue(pathToQueue);\n }\n}\n\nexport function _getQueueContexts(this: NodePath) {\n let path = this;\n let contexts = this.contexts;\n while (!contexts.length) {\n path = path.parentPath;\n if (!path) break;\n contexts = path.contexts;\n }\n return contexts;\n}\n"],"mappings":"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"}
|
1
|
+
{"version":3,"names":["call","key","opts","debug","node","_call","type","fns","fn","ret","state","then","Error","_traverseFlags","isDenylisted","denylist","blacklist","indexOf","restoreContext","path","context","visit","shouldSkip","currentContext","shouldStop","traverseNode","scope","skipKeys","skip","skipKey","stop","SHOULD_SKIP","SHOULD_STOP","setScope","noScope","parentPath","listKey","isMethod","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 NodePath from \"./index\";\nimport type * as t from \"@babel/types\";\n\nexport function call(this: NodePath, key: string): boolean {\n const opts = this.opts;\n\n this.debug(key);\n\n if (this.node) {\n if (this._call(opts[key])) return true;\n }\n\n if (this.node) {\n return this._call(opts[this.node.type] && opts[this.node.type][key]);\n }\n\n return false;\n}\n\nexport function _call(this: NodePath, fns?: Array<Function>): boolean {\n if (!fns) return false;\n\n for (const fn of fns) {\n if (!fn) continue;\n\n const node = this.node;\n if (!node) return true;\n\n const ret = fn.call(this.state, this, this.state);\n if (ret && typeof ret === \"object\" && typeof ret.then === \"function\") {\n throw new Error(\n `You appear to be using a plugin with an async traversal visitor, ` +\n `which your current version of Babel does not support. ` +\n `If you're using a published plugin, you may need to upgrade ` +\n `your @babel/core version.`,\n );\n }\n if (ret) {\n throw new Error(`Unexpected return value from visitor method ${fn}`);\n }\n\n // node has been replaced, it will have been requeued\n if (this.node !== node) return true;\n\n // this.shouldSkip || this.shouldStop || this.removed\n if (this._traverseFlags > 0) return true;\n }\n\n return false;\n}\n\nexport function isDenylisted(this: NodePath): boolean {\n const denylist = this.opts.denylist ?? this.opts.blacklist;\n return denylist && denylist.indexOf(this.node.type) > -1;\n}\n\n// TODO: Remove in Babel 8\nexport { isDenylisted as isBlacklisted };\n\nfunction restoreContext(path: NodePath, context: TraversalContext) {\n if (path.context !== context) {\n path.context = context;\n path.state = context.state;\n path.opts = context.opts;\n }\n}\n\nexport function visit(this: NodePath): boolean {\n if (!this.node) {\n return false;\n }\n\n if (this.isDenylisted()) {\n return false;\n }\n\n if (this.opts.shouldSkip && this.opts.shouldSkip(this)) {\n return false;\n }\n\n const currentContext = this.context;\n // Note: We need to check \"this.shouldSkip\" first because\n // another visitor can set it to true. Usually .shouldSkip is false\n // before calling the enter visitor, but it can be true in case of\n // a requeued node (e.g. by .replaceWith()) that is then marked\n // with .skip().\n if (this.shouldSkip || this.call(\"enter\")) {\n this.debug(\"Skip...\");\n return this.shouldStop;\n }\n restoreContext(this, currentContext);\n\n this.debug(\"Recursing into...\");\n this.shouldStop = traverseNode(\n this.node,\n this.opts,\n this.scope,\n this.state,\n this,\n this.skipKeys,\n );\n\n restoreContext(this, currentContext);\n\n this.call(\"exit\");\n\n return this.shouldStop;\n}\n\nexport function skip(this: NodePath) {\n this.shouldSkip = true;\n}\n\nexport function skipKey(this: NodePath, key: string) {\n if (this.skipKeys == null) {\n this.skipKeys = {};\n }\n this.skipKeys[key] = true;\n}\n\nexport function stop(this: NodePath) {\n // this.shouldSkip = true; this.shouldStop = true;\n this._traverseFlags |= SHOULD_SKIP | SHOULD_STOP;\n}\n\nexport function setScope(this: NodePath) {\n if (this.opts && this.opts.noScope) return;\n\n let path = this.parentPath;\n\n 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 && path.opts.noScope) return;\n\n target = path.scope;\n path = path.parentPath;\n }\n\n this.scope = this.getScope(target);\n if (this.scope) this.scope.init();\n}\n\nexport function setContext<S = unknown>(\n this: NodePath,\n context?: TraversalContext<S>,\n) {\n if (this.skipKeys != null) {\n this.skipKeys = {};\n }\n // this.shouldSkip = false; this.shouldStop = false; this.removed = false;\n this._traverseFlags = 0;\n\n if (context) {\n this.context = context;\n this.state = context.state;\n this.opts = context.opts;\n }\n\n this.setScope();\n\n return this;\n}\n\n/**\n * Here we resync the node paths `key` and `container`. If they've changed according\n * to what we have stored internally then we attempt to resync by crawling and looking\n * for the new values.\n */\n\nexport function resync(this: NodePath) {\n if (this.removed) return;\n\n this._resyncParent();\n this._resyncList();\n this._resyncKey();\n //this._resyncRemoved();\n}\n\nexport function _resyncParent(this: NodePath) {\n if (this.parentPath) {\n this.parent = this.parentPath.node;\n }\n}\n\nexport function _resyncKey(this: NodePath) {\n if (!this.container) return;\n\n if (\n this.node ===\n // @ts-expect-error this.key should present in this.container\n this.container[this.key]\n ) {\n return;\n }\n\n // grrr, path key is out of sync. this is likely due to a modification to the AST\n // not done through our path APIs\n\n if (Array.isArray(this.container)) {\n for (let i = 0; i < this.container.length; i++) {\n if (this.container[i] === this.node) {\n return this.setKey(i);\n }\n }\n } else {\n for (const key of Object.keys(this.container)) {\n // @ts-expect-error this.key should present in this.container\n if (this.container[key] === this.node) {\n return this.setKey(key);\n }\n }\n }\n\n // ¯\\_(ツ)_/¯ who knows where it's gone lol\n this.key = null;\n}\n\nexport function _resyncList(this: NodePath) {\n if (!this.parent || !this.inList) return;\n\n const newContainer =\n // @ts-expect-error this.listKey should present in this.parent\n this.parent[this.listKey];\n if (this.container === newContainer) return;\n\n // container is out of sync. this is likely the result of it being reassigned\n this.container = newContainer || null;\n}\n\nexport function _resyncRemoved(this: NodePath) {\n if (\n this.key == null ||\n !this.container ||\n // @ts-expect-error this.key should present in this.container\n this.container[this.key] !== this.node\n ) {\n this._markRemoved();\n }\n}\n\nexport function popContext(this: NodePath) {\n this.contexts.pop();\n if (this.contexts.length > 0) {\n this.setContext(this.contexts[this.contexts.length - 1]);\n } else {\n this.setContext(undefined);\n }\n}\n\nexport function pushContext(this: NodePath, context: TraversalContext) {\n this.contexts.push(context);\n this.setContext(context);\n}\n\nexport function setup(\n this: NodePath,\n parentPath: NodePath | undefined,\n container: t.Node,\n listKey: string,\n key: string | number,\n) {\n this.listKey = listKey;\n this.container = container;\n\n this.parentPath = parentPath || this.parentPath;\n this.setKey(key);\n}\n\nexport function setKey(this: NodePath, key: string | number) {\n this.key = key;\n this.node =\n // @ts-expect-error this.key must present in this.container\n this.container[this.key];\n this.type = this.node?.type;\n}\n\nexport function requeue(this: NodePath, pathToQueue = this) {\n if (pathToQueue.removed) return;\n\n // If a path is skipped, and then replaced with a\n // new one, the new one shouldn't probably be skipped.\n if (process.env.BABEL_8_BREAKING) {\n pathToQueue.shouldSkip = false;\n }\n\n // TODO(loganfsmyth): This should be switched back to queue in parent contexts\n // automatically once #2892 and #4135 have been resolved. See #4140.\n // let contexts = this._getQueueContexts();\n const contexts = this.contexts;\n\n for (const context of contexts) {\n context.maybeQueue(pathToQueue);\n }\n}\n\nexport function _getQueueContexts(this: NodePath) {\n let path = this;\n let contexts = this.contexts;\n while (!contexts.length) {\n path = path.parentPath;\n if (!path) break;\n contexts = path.contexts;\n }\n return contexts;\n}\n"],"mappings":"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"}
|