@babel/traverse 7.1.0 → 7.23.2
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/LICENSE +1 -1
- package/README.md +1 -1
- package/lib/cache.js +27 -7
- package/lib/cache.js.map +1 -0
- package/lib/context.js +22 -59
- package/lib/context.js.map +1 -0
- package/lib/hub.js +2 -6
- package/lib/hub.js.map +1 -0
- package/lib/index.js +42 -77
- package/lib/index.js.map +1 -0
- package/lib/path/ancestry.js +15 -62
- package/lib/path/ancestry.js.map +1 -0
- package/lib/path/comments.js +31 -24
- package/lib/path/comments.js.map +1 -0
- package/lib/path/context.js +68 -91
- package/lib/path/context.js.map +1 -0
- package/lib/path/conversion.js +275 -273
- package/lib/path/conversion.js.map +1 -0
- package/lib/path/evaluation.js +84 -149
- package/lib/path/evaluation.js.map +1 -0
- package/lib/path/family.js +189 -94
- package/lib/path/family.js.map +1 -0
- package/lib/path/index.js +106 -132
- package/lib/path/index.js.map +1 -0
- package/lib/path/inference/index.js +81 -64
- package/lib/path/inference/index.js.map +1 -0
- package/lib/path/inference/inferer-reference.js +22 -52
- package/lib/path/inference/inferer-reference.js.map +1 -0
- package/lib/path/inference/inferers.js +110 -125
- package/lib/path/inference/inferers.js.map +1 -0
- package/lib/path/inference/util.js +30 -0
- package/lib/path/inference/util.js.map +1 -0
- package/lib/path/introspection.js +182 -168
- package/lib/path/introspection.js.map +1 -0
- package/lib/path/lib/hoister.js +37 -54
- package/lib/path/lib/hoister.js.map +1 -0
- package/lib/path/lib/removal-hooks.js +4 -4
- package/lib/path/lib/removal-hooks.js.map +1 -0
- package/lib/path/lib/virtual-types-validator.js +161 -0
- package/lib/path/lib/virtual-types-validator.js.map +1 -0
- package/lib/path/lib/virtual-types.js +21 -189
- package/lib/path/lib/virtual-types.js.map +1 -0
- package/lib/path/modification.js +103 -98
- package/lib/path/modification.js.map +1 -0
- package/lib/path/removal.js +18 -23
- package/lib/path/removal.js.map +1 -0
- package/lib/path/replacement.js +91 -144
- package/lib/path/replacement.js.map +1 -0
- package/lib/scope/binding.js +28 -16
- package/lib/scope/binding.js.map +1 -0
- package/lib/scope/index.js +407 -414
- package/lib/scope/index.js.map +1 -0
- package/lib/scope/lib/renamer.js +45 -70
- package/lib/scope/lib/renamer.js.map +1 -0
- package/lib/traverse-node.js +29 -0
- package/lib/traverse-node.js.map +1 -0
- package/lib/types.js +3 -0
- package/lib/types.js.map +1 -0
- package/lib/visitors.js +77 -113
- package/lib/visitors.js.map +1 -0
- package/package.json +28 -17
package/lib/path/index.js
CHANGED
@@ -3,99 +3,56 @@
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
4
4
|
value: true
|
5
5
|
});
|
6
|
-
exports.default = void 0;
|
7
|
-
|
8
|
-
var
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
var
|
21
|
-
|
22
|
-
var
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
const data = _interopRequireDefault(require("@babel/generator"));
|
38
|
-
|
39
|
-
_generator = function () {
|
40
|
-
return data;
|
41
|
-
};
|
42
|
-
|
43
|
-
return data;
|
44
|
-
}
|
45
|
-
|
46
|
-
var NodePath_ancestry = _interopRequireWildcard(require("./ancestry"));
|
47
|
-
|
48
|
-
var NodePath_inference = _interopRequireWildcard(require("./inference"));
|
49
|
-
|
50
|
-
var NodePath_replacement = _interopRequireWildcard(require("./replacement"));
|
51
|
-
|
52
|
-
var NodePath_evaluation = _interopRequireWildcard(require("./evaluation"));
|
53
|
-
|
54
|
-
var NodePath_conversion = _interopRequireWildcard(require("./conversion"));
|
55
|
-
|
56
|
-
var NodePath_introspection = _interopRequireWildcard(require("./introspection"));
|
57
|
-
|
58
|
-
var NodePath_context = _interopRequireWildcard(require("./context"));
|
59
|
-
|
60
|
-
var NodePath_removal = _interopRequireWildcard(require("./removal"));
|
61
|
-
|
62
|
-
var NodePath_modification = _interopRequireWildcard(require("./modification"));
|
63
|
-
|
64
|
-
var NodePath_family = _interopRequireWildcard(require("./family"));
|
65
|
-
|
66
|
-
var NodePath_comments = _interopRequireWildcard(require("./comments"));
|
67
|
-
|
68
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
69
|
-
|
70
|
-
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }
|
71
|
-
|
72
|
-
const debug = (0, _debug().default)("babel");
|
73
|
-
|
6
|
+
exports.default = exports.SHOULD_STOP = exports.SHOULD_SKIP = exports.REMOVED = void 0;
|
7
|
+
var virtualTypes = require("./lib/virtual-types.js");
|
8
|
+
var _debug = require("debug");
|
9
|
+
var _index = require("../index.js");
|
10
|
+
var _index2 = require("../scope/index.js");
|
11
|
+
var _t = require("@babel/types");
|
12
|
+
var t = _t;
|
13
|
+
var cache = require("../cache.js");
|
14
|
+
var _generator = require("@babel/generator");
|
15
|
+
var NodePath_ancestry = require("./ancestry.js");
|
16
|
+
var NodePath_inference = require("./inference/index.js");
|
17
|
+
var NodePath_replacement = require("./replacement.js");
|
18
|
+
var NodePath_evaluation = require("./evaluation.js");
|
19
|
+
var NodePath_conversion = require("./conversion.js");
|
20
|
+
var NodePath_introspection = require("./introspection.js");
|
21
|
+
var NodePath_context = require("./context.js");
|
22
|
+
var NodePath_removal = require("./removal.js");
|
23
|
+
var NodePath_modification = require("./modification.js");
|
24
|
+
var NodePath_family = require("./family.js");
|
25
|
+
var NodePath_comments = require("./comments.js");
|
26
|
+
var NodePath_virtual_types_validator = require("./lib/virtual-types-validator.js");
|
27
|
+
const {
|
28
|
+
validate
|
29
|
+
} = _t;
|
30
|
+
const debug = _debug("babel");
|
31
|
+
const REMOVED = 1 << 0;
|
32
|
+
exports.REMOVED = REMOVED;
|
33
|
+
const SHOULD_STOP = 1 << 1;
|
34
|
+
exports.SHOULD_STOP = SHOULD_STOP;
|
35
|
+
const SHOULD_SKIP = 1 << 2;
|
36
|
+
exports.SHOULD_SKIP = SHOULD_SKIP;
|
74
37
|
class NodePath {
|
75
38
|
constructor(hub, parent) {
|
76
|
-
this.parent = parent;
|
77
|
-
this.hub = hub;
|
78
39
|
this.contexts = [];
|
79
|
-
this.data = {};
|
80
|
-
this.shouldSkip = false;
|
81
|
-
this.shouldStop = false;
|
82
|
-
this.removed = false;
|
83
40
|
this.state = null;
|
84
41
|
this.opts = null;
|
42
|
+
this._traverseFlags = 0;
|
85
43
|
this.skipKeys = null;
|
86
44
|
this.parentPath = null;
|
87
|
-
this.context = null;
|
88
45
|
this.container = null;
|
89
46
|
this.listKey = null;
|
90
|
-
this.inList = false;
|
91
|
-
this.parentKey = null;
|
92
47
|
this.key = null;
|
93
48
|
this.node = null;
|
94
|
-
this.scope = null;
|
95
49
|
this.type = null;
|
96
|
-
this.
|
50
|
+
this.parent = parent;
|
51
|
+
this.hub = hub;
|
52
|
+
this.data = null;
|
53
|
+
this.context = null;
|
54
|
+
this.scope = null;
|
97
55
|
}
|
98
|
-
|
99
56
|
static get({
|
100
57
|
hub,
|
101
58
|
parentPath,
|
@@ -107,113 +64,130 @@ class NodePath {
|
|
107
64
|
if (!hub && parentPath) {
|
108
65
|
hub = parentPath.hub;
|
109
66
|
}
|
110
|
-
|
111
67
|
if (!parent) {
|
112
68
|
throw new Error("To get a node path the parent needs to exist");
|
113
69
|
}
|
114
|
-
|
115
70
|
const targetNode = container[key];
|
116
|
-
const paths =
|
117
|
-
|
118
|
-
if (!_cache.path.has(parent)) {
|
119
|
-
_cache.path.set(parent, paths);
|
120
|
-
}
|
121
|
-
|
122
|
-
let path;
|
123
|
-
|
124
|
-
for (let i = 0; i < paths.length; i++) {
|
125
|
-
const pathCheck = paths[i];
|
126
|
-
|
127
|
-
if (pathCheck.node === targetNode) {
|
128
|
-
path = pathCheck;
|
129
|
-
break;
|
130
|
-
}
|
131
|
-
}
|
132
|
-
|
71
|
+
const paths = cache.getOrCreateCachedPaths(hub, parent);
|
72
|
+
let path = paths.get(targetNode);
|
133
73
|
if (!path) {
|
134
74
|
path = new NodePath(hub, parent);
|
135
|
-
paths.
|
75
|
+
if (targetNode) paths.set(targetNode, path);
|
136
76
|
}
|
137
|
-
|
138
77
|
path.setup(parentPath, container, listKey, key);
|
139
78
|
return path;
|
140
79
|
}
|
141
|
-
|
142
80
|
getScope(scope) {
|
143
|
-
return this.isScope() ? new
|
81
|
+
return this.isScope() ? new _index2.default(this) : scope;
|
144
82
|
}
|
145
|
-
|
146
83
|
setData(key, val) {
|
84
|
+
if (this.data == null) {
|
85
|
+
this.data = Object.create(null);
|
86
|
+
}
|
147
87
|
return this.data[key] = val;
|
148
88
|
}
|
149
|
-
|
150
89
|
getData(key, def) {
|
90
|
+
if (this.data == null) {
|
91
|
+
this.data = Object.create(null);
|
92
|
+
}
|
151
93
|
let val = this.data[key];
|
152
|
-
if (
|
94
|
+
if (val === undefined && def !== undefined) val = this.data[key] = def;
|
153
95
|
return val;
|
154
96
|
}
|
155
|
-
|
97
|
+
hasNode() {
|
98
|
+
return this.node != null;
|
99
|
+
}
|
156
100
|
buildCodeFrameError(msg, Error = SyntaxError) {
|
157
101
|
return this.hub.buildError(this.node, msg, Error);
|
158
102
|
}
|
159
|
-
|
160
103
|
traverse(visitor, state) {
|
161
104
|
(0, _index.default)(this.node, visitor, this.scope, state, this);
|
162
105
|
}
|
163
|
-
|
164
106
|
set(key, node) {
|
165
|
-
|
107
|
+
validate(this.node, key, node);
|
166
108
|
this.node[key] = node;
|
167
109
|
}
|
168
|
-
|
169
110
|
getPathLocation() {
|
170
111
|
const parts = [];
|
171
112
|
let path = this;
|
172
|
-
|
173
113
|
do {
|
174
114
|
let key = path.key;
|
175
115
|
if (path.inList) key = `${path.listKey}[${key}]`;
|
176
116
|
parts.unshift(key);
|
177
117
|
} while (path = path.parentPath);
|
178
|
-
|
179
118
|
return parts.join(".");
|
180
119
|
}
|
181
|
-
|
182
120
|
debug(message) {
|
183
121
|
if (!debug.enabled) return;
|
184
122
|
debug(`${this.getPathLocation()} ${this.type}: ${message}`);
|
185
123
|
}
|
186
|
-
|
187
124
|
toString() {
|
188
|
-
return (0, _generator
|
125
|
+
return (0, _generator.default)(this.node).code;
|
126
|
+
}
|
127
|
+
get inList() {
|
128
|
+
return !!this.listKey;
|
129
|
+
}
|
130
|
+
set inList(inList) {
|
131
|
+
if (!inList) {
|
132
|
+
this.listKey = null;
|
133
|
+
}
|
134
|
+
}
|
135
|
+
get parentKey() {
|
136
|
+
return this.listKey || this.key;
|
137
|
+
}
|
138
|
+
get shouldSkip() {
|
139
|
+
return !!(this._traverseFlags & SHOULD_SKIP);
|
140
|
+
}
|
141
|
+
set shouldSkip(v) {
|
142
|
+
if (v) {
|
143
|
+
this._traverseFlags |= SHOULD_SKIP;
|
144
|
+
} else {
|
145
|
+
this._traverseFlags &= ~SHOULD_SKIP;
|
146
|
+
}
|
147
|
+
}
|
148
|
+
get shouldStop() {
|
149
|
+
return !!(this._traverseFlags & SHOULD_STOP);
|
150
|
+
}
|
151
|
+
set shouldStop(v) {
|
152
|
+
if (v) {
|
153
|
+
this._traverseFlags |= SHOULD_STOP;
|
154
|
+
} else {
|
155
|
+
this._traverseFlags &= ~SHOULD_STOP;
|
156
|
+
}
|
157
|
+
}
|
158
|
+
get removed() {
|
159
|
+
return !!(this._traverseFlags & REMOVED);
|
160
|
+
}
|
161
|
+
set removed(v) {
|
162
|
+
if (v) {
|
163
|
+
this._traverseFlags |= REMOVED;
|
164
|
+
} else {
|
165
|
+
this._traverseFlags &= ~REMOVED;
|
166
|
+
}
|
189
167
|
}
|
190
|
-
|
191
168
|
}
|
192
|
-
|
193
|
-
exports.default = NodePath;
|
194
169
|
Object.assign(NodePath.prototype, NodePath_ancestry, NodePath_inference, NodePath_replacement, NodePath_evaluation, NodePath_conversion, NodePath_introspection, NodePath_context, NodePath_removal, NodePath_modification, NodePath_family, NodePath_comments);
|
195
|
-
|
196
|
-
|
170
|
+
{
|
171
|
+
NodePath.prototype._guessExecutionStatusRelativeToDifferentFunctions = NodePath_introspection._guessExecutionStatusRelativeTo;
|
172
|
+
}
|
173
|
+
for (const type of t.TYPES) {
|
197
174
|
const typeKey = `is${type}`;
|
198
|
-
const fn = t
|
199
|
-
|
175
|
+
const fn = t[typeKey];
|
200
176
|
NodePath.prototype[typeKey] = function (opts) {
|
201
177
|
return fn(this.node, opts);
|
202
178
|
};
|
203
|
-
|
204
179
|
NodePath.prototype[`assert${type}`] = function (opts) {
|
205
180
|
if (!fn(this.node, opts)) {
|
206
181
|
throw new TypeError(`Expected node path of type ${type}`);
|
207
182
|
}
|
208
183
|
};
|
209
184
|
}
|
210
|
-
|
211
|
-
for (const type
|
185
|
+
Object.assign(NodePath.prototype, NodePath_virtual_types_validator);
|
186
|
+
for (const type of Object.keys(virtualTypes)) {
|
212
187
|
if (type[0] === "_") continue;
|
213
|
-
if (t
|
214
|
-
|
188
|
+
if (!t.TYPES.includes(type)) t.TYPES.push(type);
|
189
|
+
}
|
190
|
+
var _default = NodePath;
|
191
|
+
exports.default = _default;
|
215
192
|
|
216
|
-
|
217
|
-
return virtualType.checkPath(this, opts);
|
218
|
-
};
|
219
|
-
}
|
193
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"names":["virtualTypes","require","_debug","_index","_index2","_t","t","cache","_generator","NodePath_ancestry","NodePath_inference","NodePath_replacement","NodePath_evaluation","NodePath_conversion","NodePath_introspection","NodePath_context","NodePath_removal","NodePath_modification","NodePath_family","NodePath_comments","NodePath_virtual_types_validator","validate","debug","buildDebug","REMOVED","exports","SHOULD_STOP","SHOULD_SKIP","NodePath","constructor","hub","parent","contexts","state","opts","_traverseFlags","skipKeys","parentPath","container","listKey","key","node","type","data","context","scope","get","Error","targetNode","paths","getOrCreateCachedPaths","path","set","setup","getScope","isScope","Scope","setData","val","Object","create","getData","def","undefined","hasNode","buildCodeFrameError","msg","SyntaxError","buildError","traverse","visitor","getPathLocation","parts","inList","unshift","join","message","enabled","toString","generator","code","parentKey","shouldSkip","v","shouldStop","removed","assign","prototype","_guessExecutionStatusRelativeToDifferentFunctions","_guessExecutionStatusRelativeTo","TYPES","typeKey","fn","TypeError","keys","includes","push","_default","default"],"sources":["../../src/path/index.ts"],"sourcesContent":["import type { HubInterface } from \"../hub.ts\";\nimport type TraversalContext from \"../context.ts\";\nimport type { ExplodedTraverseOptions } from \"../index.ts\";\nimport * as virtualTypes from \"./lib/virtual-types.ts\";\nimport buildDebug from \"debug\";\nimport traverse from \"../index.ts\";\nimport type { Visitor } from \"../types.ts\";\nimport Scope from \"../scope/index.ts\";\nimport { validate } from \"@babel/types\";\nimport * as t from \"@babel/types\";\nimport * as cache from \"../cache.ts\";\nimport generator from \"@babel/generator\";\n\n// NodePath is split across many files.\nimport * as NodePath_ancestry from \"./ancestry.ts\";\nimport * as NodePath_inference from \"./inference/index.ts\";\nimport * as NodePath_replacement from \"./replacement.ts\";\nimport * as NodePath_evaluation from \"./evaluation.ts\";\nimport * as NodePath_conversion from \"./conversion.ts\";\nimport * as NodePath_introspection from \"./introspection.ts\";\nimport * as NodePath_context from \"./context.ts\";\nimport * as NodePath_removal from \"./removal.ts\";\nimport * as NodePath_modification from \"./modification.ts\";\nimport * as NodePath_family from \"./family.ts\";\nimport * as NodePath_comments from \"./comments.ts\";\nimport * as NodePath_virtual_types_validator from \"./lib/virtual-types-validator.ts\";\nimport type { NodePathAssertions } from \"./generated/asserts.ts\";\nimport type { NodePathValidators } from \"./generated/validators.ts\";\n\nconst debug = buildDebug(\"babel\");\n\nexport const REMOVED = 1 << 0;\nexport const SHOULD_STOP = 1 << 1;\nexport const SHOULD_SKIP = 1 << 2;\n\nclass NodePath<T extends t.Node = t.Node> {\n constructor(hub: HubInterface, parent: t.ParentMaps[T[\"type\"]]) {\n this.parent = parent;\n this.hub = hub;\n this.data = null;\n\n this.context = null;\n this.scope = null;\n }\n\n declare parent: t.ParentMaps[T[\"type\"]];\n declare hub: HubInterface;\n declare data: Record<string | symbol, unknown>;\n // TraversalContext is configured by setContext\n declare context: TraversalContext;\n declare scope: Scope;\n\n contexts: Array<TraversalContext> = [];\n state: any = null;\n opts: ExplodedTraverseOptions | null = null;\n // this.shouldSkip = false; this.shouldStop = false; this.removed = false;\n _traverseFlags: number = 0;\n skipKeys: Record<string, boolean> | null = null;\n parentPath: t.ParentMaps[T[\"type\"]] extends null\n ? null\n : NodePath<t.ParentMaps[T[\"type\"]]> | null = null;\n container: t.Node | Array<t.Node> | null = null;\n listKey: string | null = null;\n key: string | number | null = null;\n node: T = null;\n type: T[\"type\"] | null = null;\n\n static get({\n hub,\n parentPath,\n parent,\n container,\n listKey,\n key,\n }: {\n hub?: HubInterface;\n parentPath: NodePath | null;\n parent: t.Node;\n container: t.Node | t.Node[];\n listKey?: string;\n key: string | number;\n }): NodePath {\n if (!hub && parentPath) {\n hub = parentPath.hub;\n }\n\n if (!parent) {\n throw new Error(\"To get a node path the parent needs to exist\");\n }\n\n const targetNode =\n // @ts-expect-error key must present in container\n container[key];\n\n const paths = cache.getOrCreateCachedPaths(hub, parent);\n\n let path = paths.get(targetNode);\n if (!path) {\n path = new NodePath(hub, parent);\n if (targetNode) paths.set(targetNode, path);\n }\n\n path.setup(parentPath, container, listKey, key);\n\n return path;\n }\n\n getScope(scope: Scope): Scope {\n return this.isScope() ? new Scope(this) : scope;\n }\n\n setData(key: string | symbol, val: any): any {\n if (this.data == null) {\n this.data = Object.create(null);\n }\n return (this.data[key] = val);\n }\n\n getData(key: string | symbol, def?: any): any {\n if (this.data == null) {\n this.data = Object.create(null);\n }\n let val = this.data[key];\n if (val === undefined && def !== undefined) val = this.data[key] = def;\n return val;\n }\n\n hasNode(): this is NodePath<NonNullable<this[\"node\"]>> {\n return this.node != null;\n }\n\n buildCodeFrameError(\n msg: string,\n Error: new () => Error = SyntaxError,\n ): Error {\n return this.hub.buildError(this.node, msg, Error);\n }\n\n traverse<T>(visitor: Visitor<T>, state: T): void;\n traverse(visitor: Visitor): void;\n traverse(visitor: any, state?: any) {\n traverse(this.node, visitor, this.scope, state, this);\n }\n\n set(key: string, node: any) {\n validate(this.node, key, node);\n // @ts-expect-error key must present in this.node\n this.node[key] = node;\n }\n\n getPathLocation(): string {\n const parts = [];\n let path: NodePath = this;\n do {\n let key = path.key;\n if (path.inList) key = `${path.listKey}[${key}]`;\n parts.unshift(key);\n } while ((path = path.parentPath));\n return parts.join(\".\");\n }\n\n debug(message: string) {\n if (!debug.enabled) return;\n debug(`${this.getPathLocation()} ${this.type}: ${message}`);\n }\n\n toString() {\n return generator(this.node).code;\n }\n\n get inList() {\n return !!this.listKey;\n }\n\n set inList(inList) {\n if (!inList) {\n this.listKey = null;\n }\n // ignore inList = true as it should depend on `listKey`\n }\n\n get parentKey(): string {\n return (this.listKey || this.key) as string;\n }\n\n get shouldSkip() {\n return !!(this._traverseFlags & SHOULD_SKIP);\n }\n\n set shouldSkip(v) {\n if (v) {\n this._traverseFlags |= SHOULD_SKIP;\n } else {\n this._traverseFlags &= ~SHOULD_SKIP;\n }\n }\n\n get shouldStop() {\n return !!(this._traverseFlags & SHOULD_STOP);\n }\n\n set shouldStop(v) {\n if (v) {\n this._traverseFlags |= SHOULD_STOP;\n } else {\n this._traverseFlags &= ~SHOULD_STOP;\n }\n }\n\n get removed() {\n return !!(this._traverseFlags & REMOVED);\n }\n set removed(v) {\n if (v) {\n this._traverseFlags |= REMOVED;\n } else {\n this._traverseFlags &= ~REMOVED;\n }\n }\n}\n\nObject.assign(\n NodePath.prototype,\n NodePath_ancestry,\n NodePath_inference,\n NodePath_replacement,\n NodePath_evaluation,\n NodePath_conversion,\n NodePath_introspection,\n NodePath_context,\n NodePath_removal,\n NodePath_modification,\n NodePath_family,\n NodePath_comments,\n);\n\nif (!process.env.BABEL_8_BREAKING) {\n // @ts-expect-error The original _guessExecutionStatusRelativeToDifferentFunctions only worked for paths in\n // different functions, but _guessExecutionStatusRelativeTo works as a replacement in those cases.\n NodePath.prototype._guessExecutionStatusRelativeToDifferentFunctions =\n NodePath_introspection._guessExecutionStatusRelativeTo;\n}\n\n// we can not use `import { TYPES } from \"@babel/types\"` here\n// because the transformNamedBabelTypesImportToDestructuring plugin in babel.config.js\n// does not offer live bindings for `TYPES`\n// we can change to `import { TYPES }` when we are publishing ES modules only\nfor (const type of t.TYPES) {\n const typeKey = `is${type}`;\n // @ts-expect-error typeKey must present in t\n const fn = t[typeKey];\n // @ts-expect-error augmenting NodePath prototype\n NodePath.prototype[typeKey] = function (opts: any) {\n return fn(this.node, opts);\n };\n\n // @ts-expect-error augmenting NodePath prototype\n NodePath.prototype[`assert${type}`] = function (opts: any) {\n if (!fn(this.node, opts)) {\n throw new TypeError(`Expected node path of type ${type}`);\n }\n };\n}\n\n// Register virtual types validators after base types validators\nObject.assign(NodePath.prototype, NodePath_virtual_types_validator);\n\nfor (const type of Object.keys(virtualTypes) as (keyof typeof virtualTypes)[]) {\n if (type[0] === \"_\") continue;\n if (!t.TYPES.includes(type)) t.TYPES.push(type);\n}\n\ntype NodePathMixins = typeof NodePath_ancestry &\n typeof NodePath_inference &\n typeof NodePath_replacement &\n typeof NodePath_evaluation &\n typeof NodePath_conversion &\n typeof NodePath_introspection &\n typeof NodePath_context &\n typeof NodePath_removal &\n typeof NodePath_modification &\n typeof NodePath_family &\n typeof NodePath_comments;\n\n// @ts-expect-error TS throws because ensureBlock returns the body node path\n// however, we don't use the return value and treat it as a transform and\n// assertion utilities. For better type inference we annotate it as an\n// assertion method\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\ninterface NodePath<T>\n extends NodePathAssertions,\n NodePathValidators,\n NodePathMixins {\n /**\n * @see ./conversion.ts for implementation\n */\n ensureBlock<\n T extends\n | t.Loop\n | t.WithStatement\n | t.Function\n | t.LabeledStatement\n | t.CatchClause,\n >(\n this: NodePath<T>,\n ): asserts this is NodePath<T & { body: t.BlockStatement }>;\n}\n\nexport default NodePath;\n"],"mappings":"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"}
|
@@ -3,92 +3,105 @@
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
4
4
|
value: true
|
5
5
|
});
|
6
|
-
exports.getTypeAnnotation = getTypeAnnotation;
|
7
6
|
exports._getTypeAnnotation = _getTypeAnnotation;
|
8
|
-
exports.isBaseType = isBaseType;
|
9
|
-
exports.couldBeBaseType = couldBeBaseType;
|
10
7
|
exports.baseTypeStrictlyMatches = baseTypeStrictlyMatches;
|
8
|
+
exports.couldBeBaseType = couldBeBaseType;
|
9
|
+
exports.getTypeAnnotation = getTypeAnnotation;
|
10
|
+
exports.isBaseType = isBaseType;
|
11
11
|
exports.isGenericType = isGenericType;
|
12
|
-
|
13
|
-
var
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
12
|
+
var inferers = require("./inferers.js");
|
13
|
+
var _t = require("@babel/types");
|
14
|
+
const {
|
15
|
+
anyTypeAnnotation,
|
16
|
+
isAnyTypeAnnotation,
|
17
|
+
isArrayTypeAnnotation,
|
18
|
+
isBooleanTypeAnnotation,
|
19
|
+
isEmptyTypeAnnotation,
|
20
|
+
isFlowBaseAnnotation,
|
21
|
+
isGenericTypeAnnotation,
|
22
|
+
isIdentifier,
|
23
|
+
isMixedTypeAnnotation,
|
24
|
+
isNumberTypeAnnotation,
|
25
|
+
isStringTypeAnnotation,
|
26
|
+
isTSArrayType,
|
27
|
+
isTSTypeAnnotation,
|
28
|
+
isTSTypeReference,
|
29
|
+
isTupleTypeAnnotation,
|
30
|
+
isTypeAnnotation,
|
31
|
+
isUnionTypeAnnotation,
|
32
|
+
isVoidTypeAnnotation,
|
33
|
+
stringTypeAnnotation,
|
34
|
+
voidTypeAnnotation
|
35
|
+
} = _t;
|
27
36
|
function getTypeAnnotation() {
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
37
|
+
let type = this.getData("typeAnnotation");
|
38
|
+
if (type != null) {
|
39
|
+
return type;
|
40
|
+
}
|
41
|
+
type = this._getTypeAnnotation() || anyTypeAnnotation();
|
42
|
+
if (isTypeAnnotation(type) || isTSTypeAnnotation(type)) {
|
43
|
+
type = type.typeAnnotation;
|
44
|
+
}
|
45
|
+
this.setData("typeAnnotation", type);
|
46
|
+
return type;
|
32
47
|
}
|
33
|
-
|
48
|
+
const typeAnnotationInferringNodes = new WeakSet();
|
34
49
|
function _getTypeAnnotation() {
|
35
50
|
const node = this.node;
|
36
|
-
|
37
51
|
if (!node) {
|
38
52
|
if (this.key === "init" && this.parentPath.isVariableDeclarator()) {
|
39
53
|
const declar = this.parentPath.parentPath;
|
40
54
|
const declarParent = declar.parentPath;
|
41
|
-
|
42
55
|
if (declar.key === "left" && declarParent.isForInStatement()) {
|
43
|
-
return
|
56
|
+
return stringTypeAnnotation();
|
44
57
|
}
|
45
|
-
|
46
58
|
if (declar.key === "left" && declarParent.isForOfStatement()) {
|
47
|
-
return
|
59
|
+
return anyTypeAnnotation();
|
48
60
|
}
|
49
|
-
|
50
|
-
return t().voidTypeAnnotation();
|
61
|
+
return voidTypeAnnotation();
|
51
62
|
} else {
|
52
63
|
return;
|
53
64
|
}
|
54
65
|
}
|
55
|
-
|
56
66
|
if (node.typeAnnotation) {
|
57
67
|
return node.typeAnnotation;
|
58
68
|
}
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
if (inferer) {
|
63
|
-
return inferer.call(this, node);
|
69
|
+
if (typeAnnotationInferringNodes.has(node)) {
|
70
|
+
return;
|
64
71
|
}
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
72
|
+
typeAnnotationInferringNodes.add(node);
|
73
|
+
try {
|
74
|
+
var _inferer;
|
75
|
+
let inferer = inferers[node.type];
|
76
|
+
if (inferer) {
|
77
|
+
return inferer.call(this, node);
|
78
|
+
}
|
79
|
+
inferer = inferers[this.parentPath.type];
|
80
|
+
if ((_inferer = inferer) != null && _inferer.validParent) {
|
81
|
+
return this.parentPath.getTypeAnnotation();
|
82
|
+
}
|
83
|
+
} finally {
|
84
|
+
typeAnnotationInferringNodes.delete(node);
|
70
85
|
}
|
71
86
|
}
|
72
|
-
|
73
87
|
function isBaseType(baseName, soft) {
|
74
88
|
return _isBaseType(baseName, this.getTypeAnnotation(), soft);
|
75
89
|
}
|
76
|
-
|
77
90
|
function _isBaseType(baseName, type, soft) {
|
78
91
|
if (baseName === "string") {
|
79
|
-
return
|
92
|
+
return isStringTypeAnnotation(type);
|
80
93
|
} else if (baseName === "number") {
|
81
|
-
return
|
94
|
+
return isNumberTypeAnnotation(type);
|
82
95
|
} else if (baseName === "boolean") {
|
83
|
-
return
|
96
|
+
return isBooleanTypeAnnotation(type);
|
84
97
|
} else if (baseName === "any") {
|
85
|
-
return
|
98
|
+
return isAnyTypeAnnotation(type);
|
86
99
|
} else if (baseName === "mixed") {
|
87
|
-
return
|
100
|
+
return isMixedTypeAnnotation(type);
|
88
101
|
} else if (baseName === "empty") {
|
89
|
-
return
|
102
|
+
return isEmptyTypeAnnotation(type);
|
90
103
|
} else if (baseName === "void") {
|
91
|
-
return
|
104
|
+
return isVoidTypeAnnotation(type);
|
92
105
|
} else {
|
93
106
|
if (soft) {
|
94
107
|
return false;
|
@@ -97,36 +110,40 @@ function _isBaseType(baseName, type, soft) {
|
|
97
110
|
}
|
98
111
|
}
|
99
112
|
}
|
100
|
-
|
101
113
|
function couldBeBaseType(name) {
|
102
114
|
const type = this.getTypeAnnotation();
|
103
|
-
if (
|
104
|
-
|
105
|
-
if (t().isUnionTypeAnnotation(type)) {
|
115
|
+
if (isAnyTypeAnnotation(type)) return true;
|
116
|
+
if (isUnionTypeAnnotation(type)) {
|
106
117
|
for (const type2 of type.types) {
|
107
|
-
if (
|
118
|
+
if (isAnyTypeAnnotation(type2) || _isBaseType(name, type2, true)) {
|
108
119
|
return true;
|
109
120
|
}
|
110
121
|
}
|
111
|
-
|
112
122
|
return false;
|
113
123
|
} else {
|
114
124
|
return _isBaseType(name, type, true);
|
115
125
|
}
|
116
126
|
}
|
117
|
-
|
118
|
-
function baseTypeStrictlyMatches(right) {
|
127
|
+
function baseTypeStrictlyMatches(rightArg) {
|
119
128
|
const left = this.getTypeAnnotation();
|
120
|
-
right =
|
121
|
-
|
122
|
-
if (!t().isAnyTypeAnnotation(left) && t().isFlowBaseAnnotation(left)) {
|
129
|
+
const right = rightArg.getTypeAnnotation();
|
130
|
+
if (!isAnyTypeAnnotation(left) && isFlowBaseAnnotation(left)) {
|
123
131
|
return right.type === left.type;
|
124
132
|
}
|
133
|
+
return false;
|
125
134
|
}
|
126
|
-
|
127
135
|
function isGenericType(genericName) {
|
128
136
|
const type = this.getTypeAnnotation();
|
129
|
-
|
137
|
+
if (genericName === "Array") {
|
138
|
+
if (isTSArrayType(type) || isArrayTypeAnnotation(type) || isTupleTypeAnnotation(type)) {
|
139
|
+
return true;
|
140
|
+
}
|
141
|
+
}
|
142
|
+
return isGenericTypeAnnotation(type) && isIdentifier(type.id, {
|
143
|
+
name: genericName
|
144
|
+
}) || isTSTypeReference(type) && isIdentifier(type.typeName, {
|
130
145
|
name: genericName
|
131
146
|
});
|
132
|
-
}
|
147
|
+
}
|
148
|
+
|
149
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"names":["inferers","require","_t","anyTypeAnnotation","isAnyTypeAnnotation","isArrayTypeAnnotation","isBooleanTypeAnnotation","isEmptyTypeAnnotation","isFlowBaseAnnotation","isGenericTypeAnnotation","isIdentifier","isMixedTypeAnnotation","isNumberTypeAnnotation","isStringTypeAnnotation","isTSArrayType","isTSTypeAnnotation","isTSTypeReference","isTupleTypeAnnotation","isTypeAnnotation","isUnionTypeAnnotation","isVoidTypeAnnotation","stringTypeAnnotation","voidTypeAnnotation","getTypeAnnotation","type","getData","_getTypeAnnotation","typeAnnotation","setData","typeAnnotationInferringNodes","WeakSet","node","key","parentPath","isVariableDeclarator","declar","declarParent","isForInStatement","isForOfStatement","has","add","_inferer","inferer","call","validParent","delete","isBaseType","baseName","soft","_isBaseType","Error","couldBeBaseType","name","type2","types","baseTypeStrictlyMatches","rightArg","left","right","isGenericType","genericName","id","typeName"],"sources":["../../../src/path/inference/index.ts"],"sourcesContent":["import type NodePath from \"../index.ts\";\nimport * as inferers from \"./inferers.ts\";\nimport {\n anyTypeAnnotation,\n isAnyTypeAnnotation,\n isArrayTypeAnnotation,\n isBooleanTypeAnnotation,\n isEmptyTypeAnnotation,\n isFlowBaseAnnotation,\n isGenericTypeAnnotation,\n isIdentifier,\n isMixedTypeAnnotation,\n isNumberTypeAnnotation,\n isStringTypeAnnotation,\n isTSArrayType,\n isTSTypeAnnotation,\n isTSTypeReference,\n isTupleTypeAnnotation,\n isTypeAnnotation,\n isUnionTypeAnnotation,\n isVoidTypeAnnotation,\n stringTypeAnnotation,\n voidTypeAnnotation,\n} from \"@babel/types\";\nimport type * as t from \"@babel/types\";\n\n/**\n * Infer the type of the current `NodePath`.\n */\n\nexport function getTypeAnnotation(this: NodePath): t.FlowType | t.TSType {\n let type = this.getData(\"typeAnnotation\");\n if (type != null) {\n return type;\n }\n type = this._getTypeAnnotation() || anyTypeAnnotation();\n if (isTypeAnnotation(type) || isTSTypeAnnotation(type)) {\n type = type.typeAnnotation;\n }\n this.setData(\"typeAnnotation\", type);\n return type;\n}\n\n// Used to avoid infinite recursion in cases like\n// var b, c; if (0) { c = 1; b = c; } c = b;\n// It also works with indirect recursion.\nconst typeAnnotationInferringNodes = new WeakSet();\n\n/**\n * todo: split up this method\n */\n\nexport function _getTypeAnnotation(this: NodePath): any {\n const node = this.node;\n\n if (!node) {\n // handle initializerless variables, add in checks for loop initializers too\n if (this.key === \"init\" && this.parentPath.isVariableDeclarator()) {\n const declar = this.parentPath.parentPath;\n const declarParent = declar.parentPath;\n\n // for (let NODE in bar) {}\n if (declar.key === \"left\" && declarParent.isForInStatement()) {\n return stringTypeAnnotation();\n }\n\n // for (let NODE of bar) {}\n if (declar.key === \"left\" && declarParent.isForOfStatement()) {\n return anyTypeAnnotation();\n }\n\n return voidTypeAnnotation();\n } else {\n return;\n }\n }\n\n // @ts-expect-error typeAnnotation may not index node\n if (node.typeAnnotation) {\n // @ts-expect-error typeAnnotation may not index node\n return node.typeAnnotation;\n }\n\n if (typeAnnotationInferringNodes.has(node)) {\n // Bail out from type inference to avoid infinite loops\n return;\n }\n typeAnnotationInferringNodes.add(node);\n\n try {\n let inferer =\n // @ts-expect-error inferers do not cover all AST types\n inferers[node.type];\n if (inferer) {\n return inferer.call(this, node);\n }\n\n // @ts-expect-error inferers do not cover all AST types\n inferer = inferers[this.parentPath.type];\n if (inferer?.validParent) {\n return this.parentPath.getTypeAnnotation();\n }\n } finally {\n typeAnnotationInferringNodes.delete(node);\n }\n}\n\nexport function isBaseType(\n this: NodePath,\n baseName: string,\n soft?: boolean,\n): boolean {\n return _isBaseType(baseName, this.getTypeAnnotation(), soft);\n}\n\nfunction _isBaseType(\n baseName: string,\n type?: t.FlowType | t.TSType,\n soft?: boolean,\n): boolean {\n if (baseName === \"string\") {\n return isStringTypeAnnotation(type);\n } else if (baseName === \"number\") {\n return isNumberTypeAnnotation(type);\n } else if (baseName === \"boolean\") {\n return isBooleanTypeAnnotation(type);\n } else if (baseName === \"any\") {\n return isAnyTypeAnnotation(type);\n } else if (baseName === \"mixed\") {\n return isMixedTypeAnnotation(type);\n } else if (baseName === \"empty\") {\n return isEmptyTypeAnnotation(type);\n } else if (baseName === \"void\") {\n return isVoidTypeAnnotation(type);\n } else {\n if (soft) {\n return false;\n } else {\n throw new Error(`Unknown base type ${baseName}`);\n }\n }\n}\n\nexport function couldBeBaseType(this: NodePath, name: string): boolean {\n const type = this.getTypeAnnotation();\n if (isAnyTypeAnnotation(type)) return true;\n\n if (isUnionTypeAnnotation(type)) {\n for (const type2 of type.types) {\n if (isAnyTypeAnnotation(type2) || _isBaseType(name, type2, true)) {\n return true;\n }\n }\n return false;\n } else {\n return _isBaseType(name, type, true);\n }\n}\n\nexport function baseTypeStrictlyMatches(\n this: NodePath,\n rightArg: NodePath,\n): boolean {\n const left = this.getTypeAnnotation();\n const right = rightArg.getTypeAnnotation();\n\n if (!isAnyTypeAnnotation(left) && isFlowBaseAnnotation(left)) {\n return right.type === left.type;\n }\n return false;\n}\n\nexport function isGenericType(this: NodePath, genericName: string): boolean {\n const type = this.getTypeAnnotation();\n if (genericName === \"Array\") {\n // T[]\n if (\n isTSArrayType(type) ||\n isArrayTypeAnnotation(type) ||\n isTupleTypeAnnotation(type)\n ) {\n return true;\n }\n }\n return (\n (isGenericTypeAnnotation(type) &&\n isIdentifier(type.id, {\n name: genericName,\n })) ||\n (isTSTypeReference(type) &&\n isIdentifier(type.typeName, {\n name: genericName,\n }))\n );\n}\n"],"mappings":"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"}
|