@depup/babel__plugin-transform-typescript 7.28.6-depup.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2014-present Sebastian McKenzie and other contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,25 @@
1
+ # @depup/babel__plugin-transform-typescript
2
+
3
+ > Dependency-bumped version of [@babel/plugin-transform-typescript](https://www.npmjs.com/package/@babel/plugin-transform-typescript)
4
+
5
+ Generated by [DepUp](https://github.com/depup/npm) -- all production
6
+ dependencies bumped to latest versions.
7
+
8
+ ## Installation
9
+
10
+ ```bash
11
+ npm install @depup/babel__plugin-transform-typescript
12
+ ```
13
+
14
+ | Field | Value |
15
+ |-------|-------|
16
+ | Original | [@babel/plugin-transform-typescript](https://www.npmjs.com/package/@babel/plugin-transform-typescript) @ 7.28.6 |
17
+ | Processed | 2026-03-17 |
18
+ | Smoke test | passed |
19
+ | Deps updated | 0 |
20
+
21
+ ---
22
+
23
+ Source: https://github.com/depup/npm | Original: https://www.npmjs.com/package/@babel/plugin-transform-typescript
24
+
25
+ License inherited from the original package.
package/changes.json ADDED
@@ -0,0 +1,5 @@
1
+ {
2
+ "bumped": {},
3
+ "timestamp": "2026-03-17T16:30:29.482Z",
4
+ "totalUpdated": 0
5
+ }
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.EXPORTED_CONST_ENUMS_IN_NAMESPACE = void 0;
7
+ exports.default = transpileConstEnum;
8
+ var _enum = require("./enum.js");
9
+ const EXPORTED_CONST_ENUMS_IN_NAMESPACE = exports.EXPORTED_CONST_ENUMS_IN_NAMESPACE = new WeakSet();
10
+ function transpileConstEnum(path, t) {
11
+ const {
12
+ name
13
+ } = path.node.id;
14
+ const parentIsExport = path.parentPath.isExportNamedDeclaration();
15
+ let isExported = parentIsExport;
16
+ if (!isExported && t.isProgram(path.parent)) {
17
+ isExported = path.parent.body.some(stmt => t.isExportNamedDeclaration(stmt) && stmt.exportKind !== "type" && !stmt.source && stmt.specifiers.some(spec => t.isExportSpecifier(spec) && spec.exportKind !== "type" && spec.local.name === name));
18
+ }
19
+ const {
20
+ enumValues: entries
21
+ } = (0, _enum.translateEnumValues)(path, t);
22
+ if (isExported || EXPORTED_CONST_ENUMS_IN_NAMESPACE.has(path.node)) {
23
+ const obj = t.objectExpression(entries.map(([name, value]) => t.objectProperty(t.isValidIdentifier(name) ? t.identifier(name) : t.stringLiteral(name), value)));
24
+ if (path.scope.hasOwnBinding(name)) {
25
+ (parentIsExport ? path.parentPath : path).replaceWith(t.expressionStatement(t.callExpression(t.memberExpression(t.identifier("Object"), t.identifier("assign")), [path.node.id, obj])));
26
+ } else {
27
+ path.replaceWith(t.variableDeclaration("var", [t.variableDeclarator(path.node.id, obj)]));
28
+ path.scope.registerDeclaration(path);
29
+ }
30
+ return;
31
+ }
32
+ const entriesMap = new Map(entries);
33
+ path.scope.path.traverse({
34
+ Scope(path) {
35
+ if (path.scope.hasOwnBinding(name)) path.skip();
36
+ },
37
+ MemberExpression(path) {
38
+ if (!t.isIdentifier(path.node.object, {
39
+ name
40
+ })) return;
41
+ let key;
42
+ if (path.node.computed) {
43
+ if (t.isStringLiteral(path.node.property)) {
44
+ key = path.node.property.value;
45
+ } else {
46
+ return;
47
+ }
48
+ } else if (t.isIdentifier(path.node.property)) {
49
+ key = path.node.property.name;
50
+ } else {
51
+ return;
52
+ }
53
+ if (!entriesMap.has(key)) return;
54
+ path.replaceWith(t.cloneNode(entriesMap.get(key)));
55
+ }
56
+ });
57
+ path.remove();
58
+ }
59
+
60
+ //# sourceMappingURL=const-enum.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_enum","require","EXPORTED_CONST_ENUMS_IN_NAMESPACE","exports","WeakSet","transpileConstEnum","path","t","name","node","id","parentIsExport","parentPath","isExportNamedDeclaration","isExported","isProgram","parent","body","some","stmt","exportKind","source","specifiers","spec","isExportSpecifier","local","enumValues","entries","translateEnumValues","has","obj","objectExpression","map","value","objectProperty","isValidIdentifier","identifier","stringLiteral","scope","hasOwnBinding","replaceWith","expressionStatement","callExpression","memberExpression","variableDeclaration","variableDeclarator","registerDeclaration","entriesMap","Map","traverse","Scope","skip","MemberExpression","isIdentifier","object","key","computed","isStringLiteral","property","cloneNode","get","remove"],"sources":["../src/const-enum.ts"],"sourcesContent":["import type { NodePath, types as t } from \"@babel/core\";\n\nimport { translateEnumValues } from \"./enum.ts\";\n\nexport const EXPORTED_CONST_ENUMS_IN_NAMESPACE =\n new WeakSet<t.TSEnumDeclaration>();\n\nexport type NodePathConstEnum = NodePath<t.TSEnumDeclaration & { const: true }>;\nexport default function transpileConstEnum(\n path: NodePathConstEnum,\n t: typeof import(\"@babel/types\"),\n) {\n const { name } = path.node.id;\n\n const parentIsExport = path.parentPath.isExportNamedDeclaration();\n let isExported = parentIsExport;\n if (!isExported && t.isProgram(path.parent)) {\n isExported = path.parent.body.some(\n stmt =>\n t.isExportNamedDeclaration(stmt) &&\n stmt.exportKind !== \"type\" &&\n !stmt.source &&\n stmt.specifiers.some(\n spec =>\n t.isExportSpecifier(spec) &&\n spec.exportKind !== \"type\" &&\n spec.local.name === name,\n ),\n );\n }\n\n const { enumValues: entries } = translateEnumValues(path, t);\n\n if (isExported || EXPORTED_CONST_ENUMS_IN_NAMESPACE.has(path.node)) {\n const obj = t.objectExpression(\n entries.map(([name, value]) =>\n t.objectProperty(\n t.isValidIdentifier(name)\n ? t.identifier(name)\n : t.stringLiteral(name),\n value,\n ),\n ),\n );\n\n if (path.scope.hasOwnBinding(name)) {\n (parentIsExport ? path.parentPath : path).replaceWith(\n t.expressionStatement(\n t.callExpression(\n t.memberExpression(t.identifier(\"Object\"), t.identifier(\"assign\")),\n [path.node.id, obj],\n ),\n ),\n );\n } else {\n path.replaceWith(\n t.variableDeclaration(process.env.BABEL_8_BREAKING ? \"const\" : \"var\", [\n t.variableDeclarator(path.node.id, obj),\n ]),\n );\n path.scope.registerDeclaration(path);\n }\n\n return;\n }\n\n const entriesMap = new Map(entries);\n\n // TODO: After fixing https://github.com/babel/babel/pull/11065, we can\n // use path.scope.getBinding(name).referencePaths rather than doing\n // a full traversal.\n path.scope.path.traverse({\n Scope(path) {\n if (path.scope.hasOwnBinding(name)) path.skip();\n },\n MemberExpression(path) {\n if (!t.isIdentifier(path.node.object, { name })) return;\n\n let key: string;\n if (path.node.computed) {\n if (t.isStringLiteral(path.node.property)) {\n key = path.node.property.value;\n } else {\n return;\n }\n } else if (t.isIdentifier(path.node.property)) {\n key = path.node.property.name;\n } else {\n return;\n }\n if (!entriesMap.has(key)) return;\n\n path.replaceWith(t.cloneNode(entriesMap.get(key)));\n },\n });\n\n path.remove();\n}\n"],"mappings":"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","ignoreList":[]}
package/lib/enum.js ADDED
@@ -0,0 +1,332 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = transpileEnum;
7
+ exports.isSyntacticallyString = isSyntacticallyString;
8
+ exports.translateEnumValues = translateEnumValues;
9
+ var _core = require("@babel/core");
10
+ var _assert = require("assert");
11
+ var _helperAnnotateAsPure = require("@babel/helper-annotate-as-pure");
12
+ var _helperSkipTransparentExpressionWrappers = require("@babel/helper-skip-transparent-expression-wrappers");
13
+ const ENUMS = new WeakMap();
14
+ const buildEnumWrapper = _core.template.expression(`
15
+ (function (ID) {
16
+ ASSIGNMENTS;
17
+ return ID;
18
+ })(INIT)
19
+ `);
20
+ function transpileEnum(path, t) {
21
+ const {
22
+ node,
23
+ parentPath
24
+ } = path;
25
+ if (node.declare) {
26
+ path.remove();
27
+ return;
28
+ }
29
+ const name = node.id.name;
30
+ const {
31
+ fill,
32
+ data,
33
+ isPure
34
+ } = enumFill(path, t, node.id);
35
+ switch (parentPath.type) {
36
+ case "BlockStatement":
37
+ case "ExportNamedDeclaration":
38
+ case "Program":
39
+ {
40
+ const isGlobal = t.isProgram(path.parent);
41
+ const isSeen = seen(parentPath);
42
+ let init = t.objectExpression([]);
43
+ if (isSeen || isGlobal) {
44
+ init = t.logicalExpression("||", t.cloneNode(fill.ID), init);
45
+ }
46
+ const enumIIFE = buildEnumWrapper(Object.assign({}, fill, {
47
+ INIT: init
48
+ }));
49
+ if (isPure) (0, _helperAnnotateAsPure.default)(enumIIFE);
50
+ if (isSeen) {
51
+ const toReplace = parentPath.isExportDeclaration() ? parentPath : path;
52
+ toReplace.replaceWith(t.expressionStatement(t.assignmentExpression("=", t.cloneNode(node.id), enumIIFE)));
53
+ } else {
54
+ path.scope.registerDeclaration(path.replaceWith(t.variableDeclaration(isGlobal ? "var" : "let", [t.variableDeclarator(node.id, enumIIFE)]))[0]);
55
+ }
56
+ ENUMS.set(path.scope.getBindingIdentifier(name), data);
57
+ break;
58
+ }
59
+ default:
60
+ throw new Error(`Unexpected enum parent '${path.parent.type}`);
61
+ }
62
+ function seen(parentPath) {
63
+ if (parentPath.isExportDeclaration()) {
64
+ return seen(parentPath.parentPath);
65
+ }
66
+ if (parentPath.getData(name)) {
67
+ return true;
68
+ } else {
69
+ parentPath.setData(name, true);
70
+ return false;
71
+ }
72
+ }
73
+ }
74
+ const buildStringAssignment = _core.template.statement(`
75
+ ENUM["NAME"] = VALUE;
76
+ `);
77
+ const buildNumericAssignment = _core.template.statement(`
78
+ ENUM[ENUM["NAME"] = VALUE] = "NAME";
79
+ `);
80
+ const buildEnumMember = (isString, options) => (isString ? buildStringAssignment : buildNumericAssignment)(options);
81
+ function enumFill(path, t, id) {
82
+ const {
83
+ enumValues,
84
+ data,
85
+ isPure
86
+ } = translateEnumValues(path, t);
87
+ const enumMembers = path.get("members");
88
+ const assignments = [];
89
+ for (let i = 0; i < enumMembers.length; i++) {
90
+ const [memberName, memberValue] = enumValues[i];
91
+ assignments.push(t.inheritsComments(buildEnumMember(isSyntacticallyString(memberValue), {
92
+ ENUM: t.cloneNode(id),
93
+ NAME: memberName,
94
+ VALUE: memberValue
95
+ }), enumMembers[i].node));
96
+ }
97
+ return {
98
+ fill: {
99
+ ID: t.cloneNode(id),
100
+ ASSIGNMENTS: assignments
101
+ },
102
+ data,
103
+ isPure
104
+ };
105
+ }
106
+ function isSyntacticallyString(expr) {
107
+ expr = (0, _helperSkipTransparentExpressionWrappers.skipTransparentExprWrapperNodes)(expr);
108
+ switch (expr.type) {
109
+ case "BinaryExpression":
110
+ {
111
+ const left = expr.left;
112
+ const right = expr.right;
113
+ return expr.operator === "+" && (isSyntacticallyString(left) || isSyntacticallyString(right));
114
+ }
115
+ case "TemplateLiteral":
116
+ case "StringLiteral":
117
+ return true;
118
+ }
119
+ return false;
120
+ }
121
+ function ReferencedIdentifier(expr, state) {
122
+ const {
123
+ seen,
124
+ path,
125
+ t
126
+ } = state;
127
+ const name = expr.node.name;
128
+ if (seen.has(name)) {
129
+ for (let curScope = expr.scope; curScope !== path.scope; curScope = curScope.parent) {
130
+ if (curScope.hasOwnBinding(name)) {
131
+ return;
132
+ }
133
+ }
134
+ expr.replaceWith(t.memberExpression(t.cloneNode(path.node.id), t.cloneNode(expr.node)));
135
+ expr.skip();
136
+ }
137
+ }
138
+ const enumSelfReferenceVisitor = {
139
+ ReferencedIdentifier
140
+ };
141
+ function translateEnumValues(path, t) {
142
+ var _ENUMS$get;
143
+ const bindingIdentifier = path.scope.getBindingIdentifier(path.node.id.name);
144
+ const seen = (_ENUMS$get = ENUMS.get(bindingIdentifier)) != null ? _ENUMS$get : new Map();
145
+ let constValue = -1;
146
+ let lastName;
147
+ let isPure = true;
148
+ const enumMembers = path.get("members");
149
+ const enumValues = enumMembers.map(memberPath => {
150
+ const member = memberPath.node;
151
+ const name = t.isIdentifier(member.id) ? member.id.name : member.id.value;
152
+ const initializerPath = memberPath.get("initializer");
153
+ const initializer = member.initializer;
154
+ let value;
155
+ if (initializer) {
156
+ constValue = computeConstantValue(initializerPath, seen);
157
+ if (constValue !== undefined) {
158
+ seen.set(name, constValue);
159
+ _assert(typeof constValue === "number" || typeof constValue === "string");
160
+ if (constValue === Infinity || Number.isNaN(constValue)) {
161
+ value = t.identifier(String(constValue));
162
+ } else if (constValue === -Infinity) {
163
+ value = t.unaryExpression("-", t.identifier("Infinity"));
164
+ } else {
165
+ value = t.valueToNode(constValue);
166
+ }
167
+ } else {
168
+ isPure && (isPure = initializerPath.isPure());
169
+ if (initializerPath.isReferencedIdentifier()) {
170
+ ReferencedIdentifier(initializerPath, {
171
+ t,
172
+ seen,
173
+ path
174
+ });
175
+ } else {
176
+ initializerPath.traverse(enumSelfReferenceVisitor, {
177
+ t,
178
+ seen,
179
+ path
180
+ });
181
+ }
182
+ value = initializerPath.node;
183
+ seen.set(name, undefined);
184
+ }
185
+ } else if (typeof constValue === "number") {
186
+ constValue += 1;
187
+ value = t.numericLiteral(constValue);
188
+ seen.set(name, constValue);
189
+ } else if (typeof constValue === "string") {
190
+ throw path.buildCodeFrameError("Enum member must have initializer.");
191
+ } else {
192
+ const lastRef = t.memberExpression(t.cloneNode(path.node.id), t.stringLiteral(lastName), true);
193
+ value = t.binaryExpression("+", t.numericLiteral(1), lastRef);
194
+ seen.set(name, undefined);
195
+ }
196
+ lastName = name;
197
+ return [name, value];
198
+ });
199
+ return {
200
+ isPure,
201
+ data: seen,
202
+ enumValues
203
+ };
204
+ }
205
+ function computeConstantValue(path, prevMembers, seen = new Set()) {
206
+ return evaluate(path);
207
+ function evaluate(path) {
208
+ const expr = path.node;
209
+ switch (expr.type) {
210
+ case "MemberExpression":
211
+ return evaluateRef(path, prevMembers, seen);
212
+ case "StringLiteral":
213
+ return expr.value;
214
+ case "UnaryExpression":
215
+ return evalUnaryExpression(path);
216
+ case "BinaryExpression":
217
+ return evalBinaryExpression(path);
218
+ case "NumericLiteral":
219
+ return expr.value;
220
+ case "ParenthesizedExpression":
221
+ return evaluate(path.get("expression"));
222
+ case "Identifier":
223
+ return evaluateRef(path, prevMembers, seen);
224
+ case "TemplateLiteral":
225
+ {
226
+ if (expr.quasis.length === 1) {
227
+ return expr.quasis[0].value.cooked;
228
+ }
229
+ const paths = path.get("expressions");
230
+ const quasis = expr.quasis;
231
+ let str = "";
232
+ for (let i = 0; i < quasis.length; i++) {
233
+ str += quasis[i].value.cooked;
234
+ if (i + 1 < quasis.length) {
235
+ const value = evaluateRef(paths[i], prevMembers, seen);
236
+ if (value === undefined) return undefined;
237
+ str += value;
238
+ }
239
+ }
240
+ return str;
241
+ }
242
+ default:
243
+ return undefined;
244
+ }
245
+ }
246
+ function evaluateRef(path, prevMembers, seen) {
247
+ if (path.isMemberExpression()) {
248
+ const expr = path.node;
249
+ const obj = expr.object;
250
+ const prop = expr.property;
251
+ if (!_core.types.isIdentifier(obj) || (expr.computed ? !_core.types.isStringLiteral(prop) : !_core.types.isIdentifier(prop))) {
252
+ return;
253
+ }
254
+ const bindingIdentifier = path.scope.getBindingIdentifier(obj.name);
255
+ const data = ENUMS.get(bindingIdentifier);
256
+ if (!data) return;
257
+ return data.get(prop.computed ? prop.value : prop.name);
258
+ } else if (path.isIdentifier()) {
259
+ const name = path.node.name;
260
+ if (["Infinity", "NaN"].includes(name)) {
261
+ return Number(name);
262
+ }
263
+ let value = prevMembers == null ? void 0 : prevMembers.get(name);
264
+ if (value !== undefined) {
265
+ return value;
266
+ }
267
+ if (prevMembers != null && prevMembers.has(name)) {
268
+ return undefined;
269
+ }
270
+ if (seen.has(path.node)) return;
271
+ seen.add(path.node);
272
+ value = computeConstantValue(path.resolve(), prevMembers, seen);
273
+ return value;
274
+ }
275
+ }
276
+ function evalUnaryExpression(path) {
277
+ const value = evaluate(path.get("argument"));
278
+ if (value === undefined) {
279
+ return undefined;
280
+ }
281
+ switch (path.node.operator) {
282
+ case "+":
283
+ return value;
284
+ case "-":
285
+ return -value;
286
+ case "~":
287
+ return ~value;
288
+ default:
289
+ return undefined;
290
+ }
291
+ }
292
+ function evalBinaryExpression(path) {
293
+ const left = evaluate(path.get("left"));
294
+ if (left === undefined) {
295
+ return undefined;
296
+ }
297
+ const right = evaluate(path.get("right"));
298
+ if (right === undefined) {
299
+ return undefined;
300
+ }
301
+ switch (path.node.operator) {
302
+ case "|":
303
+ return left | right;
304
+ case "&":
305
+ return left & right;
306
+ case ">>":
307
+ return left >> right;
308
+ case ">>>":
309
+ return left >>> right;
310
+ case "<<":
311
+ return left << right;
312
+ case "^":
313
+ return left ^ right;
314
+ case "*":
315
+ return left * right;
316
+ case "/":
317
+ return left / right;
318
+ case "+":
319
+ return left + right;
320
+ case "-":
321
+ return left - right;
322
+ case "%":
323
+ return left % right;
324
+ case "**":
325
+ return Math.pow(left, right);
326
+ default:
327
+ return undefined;
328
+ }
329
+ }
330
+ }
331
+
332
+ //# sourceMappingURL=enum.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_core","require","_assert","_helperAnnotateAsPure","_helperSkipTransparentExpressionWrappers","ENUMS","WeakMap","buildEnumWrapper","template","expression","transpileEnum","path","t","node","parentPath","declare","remove","name","id","fill","data","isPure","enumFill","type","isGlobal","isProgram","parent","isSeen","seen","init","objectExpression","logicalExpression","cloneNode","ID","enumIIFE","Object","assign","INIT","annotateAsPure","toReplace","isExportDeclaration","replaceWith","expressionStatement","assignmentExpression","scope","registerDeclaration","variableDeclaration","variableDeclarator","set","getBindingIdentifier","Error","getData","setData","buildStringAssignment","statement","buildNumericAssignment","buildEnumMember","isString","options","enumValues","translateEnumValues","enumMembers","get","assignments","i","length","memberName","memberValue","push","inheritsComments","isSyntacticallyString","ENUM","NAME","VALUE","ASSIGNMENTS","expr","skipTransparentExprWrapperNodes","left","right","operator","ReferencedIdentifier","state","has","curScope","hasOwnBinding","memberExpression","skip","enumSelfReferenceVisitor","_ENUMS$get","bindingIdentifier","Map","constValue","lastName","map","memberPath","member","isIdentifier","value","initializerPath","initializer","computeConstantValue","undefined","assert","Infinity","Number","isNaN","identifier","String","unaryExpression","valueToNode","isReferencedIdentifier","traverse","numericLiteral","buildCodeFrameError","lastRef","stringLiteral","binaryExpression","prevMembers","Set","evaluate","evaluateRef","evalUnaryExpression","evalBinaryExpression","quasis","cooked","paths","str","isMemberExpression","obj","object","prop","property","computed","isStringLiteral","includes","add","resolve","Math","pow"],"sources":["../src/enum.ts"],"sourcesContent":["import { template, types as t, type NodePath } from \"@babel/core\";\nimport assert from \"node:assert\";\nimport annotateAsPure from \"@babel/helper-annotate-as-pure\";\nimport { skipTransparentExprWrapperNodes } from \"@babel/helper-skip-transparent-expression-wrappers\";\n\ntype t = typeof t;\n\nconst ENUMS = new WeakMap<t.Identifier, PreviousEnumMembers>();\n\nconst buildEnumWrapper = template.expression(\n `\n (function (ID) {\n ASSIGNMENTS;\n return ID;\n })(INIT)\n `,\n);\n\nexport default function transpileEnum(\n path: NodePath<t.TSEnumDeclaration>,\n t: t,\n) {\n const { node, parentPath } = path;\n\n if (node.declare) {\n path.remove();\n return;\n }\n\n const name = node.id.name;\n const { fill, data, isPure } = enumFill(path, t, node.id);\n\n switch (parentPath.type) {\n case \"BlockStatement\":\n case \"ExportNamedDeclaration\":\n case \"Program\": {\n // todo: Consider exclude program with import/export\n // && !path.parent.body.some(n => t.isImportDeclaration(n) || t.isExportDeclaration(n));\n const isGlobal = t.isProgram(path.parent);\n const isSeen = seen(parentPath);\n\n let init: t.Expression = t.objectExpression([]);\n if (isSeen || isGlobal) {\n init = t.logicalExpression(\"||\", t.cloneNode(fill.ID), init);\n }\n const enumIIFE = buildEnumWrapper({ ...fill, INIT: init });\n if (isPure) annotateAsPure(enumIIFE);\n\n if (isSeen) {\n const toReplace = parentPath.isExportDeclaration() ? parentPath : path;\n toReplace.replaceWith(\n t.expressionStatement(\n t.assignmentExpression(\"=\", t.cloneNode(node.id), enumIIFE),\n ),\n );\n } else {\n path.scope.registerDeclaration(\n path.replaceWith(\n t.variableDeclaration(isGlobal ? \"var\" : \"let\", [\n t.variableDeclarator(node.id, enumIIFE),\n ]),\n )[0],\n );\n }\n ENUMS.set(path.scope.getBindingIdentifier(name), data);\n break;\n }\n\n default:\n throw new Error(`Unexpected enum parent '${path.parent.type}`);\n }\n\n function seen(parentPath: NodePath<t.Node>): boolean {\n if (parentPath.isExportDeclaration()) {\n return seen(parentPath.parentPath);\n }\n\n if (parentPath.getData(name)) {\n return true;\n } else {\n parentPath.setData(name, true);\n return false;\n }\n }\n}\n\nconst buildStringAssignment = template.statement(`\n ENUM[\"NAME\"] = VALUE;\n`);\n\nconst buildNumericAssignment = template.statement(`\n ENUM[ENUM[\"NAME\"] = VALUE] = \"NAME\";\n`);\n\nconst buildEnumMember = (isString: boolean, options: Record<string, unknown>) =>\n (isString ? buildStringAssignment : buildNumericAssignment)(options);\n\n/**\n * Generates the statement that fills in the variable declared by the enum.\n * `(function (E) { ... assignments ... })(E || (E = {}));`\n */\nfunction enumFill(path: NodePath<t.TSEnumDeclaration>, t: t, id: t.Identifier) {\n const { enumValues, data, isPure } = translateEnumValues(path, t);\n const enumMembers: NodePath<t.TSEnumMember>[] = process.env.BABEL_8_BREAKING\n ? // @ts-ignore(Babel 7 vs Babel 8) Babel 8 AST\n path.get(\"body\").get(\"members\")\n : path.get(\"members\");\n const assignments = [];\n for (let i = 0; i < enumMembers.length; i++) {\n const [memberName, memberValue] = enumValues[i];\n assignments.push(\n t.inheritsComments(\n buildEnumMember(isSyntacticallyString(memberValue), {\n ENUM: t.cloneNode(id),\n NAME: memberName,\n VALUE: memberValue,\n }),\n enumMembers[i].node,\n ),\n );\n }\n\n return {\n fill: {\n ID: t.cloneNode(id),\n ASSIGNMENTS: assignments,\n },\n data,\n isPure,\n };\n}\n\nexport function isSyntacticallyString(expr: t.Expression): boolean {\n // @ts-ignore(Babel 7 vs Babel 8) Type 'Expression | Super' is not assignable to type 'Expression' in Babel 8\n expr = skipTransparentExprWrapperNodes(expr);\n switch (expr.type) {\n case \"BinaryExpression\": {\n const left = expr.left;\n const right = expr.right;\n return (\n expr.operator === \"+\" &&\n (isSyntacticallyString(left as t.Expression) ||\n isSyntacticallyString(right))\n );\n }\n case \"TemplateLiteral\":\n case \"StringLiteral\":\n return true;\n }\n return false;\n}\n\n/**\n * Maps the name of an enum member to its value.\n * We keep track of the previous enum members so you can write code like:\n * enum E {\n * X = 1 << 0,\n * Y = 1 << 1,\n * Z = X | Y,\n * }\n */\ntype PreviousEnumMembers = Map<string, number | string>;\n\ntype EnumSelfReferenceVisitorState = {\n seen: PreviousEnumMembers;\n path: NodePath<t.TSEnumDeclaration>;\n t: t;\n};\n\nfunction ReferencedIdentifier(\n expr: NodePath<t.Identifier>,\n state: EnumSelfReferenceVisitorState,\n) {\n const { seen, path, t } = state;\n const name = expr.node.name;\n\n if (seen.has(name)) {\n /* The name is declared inside enum:\n enum Foo {\n A,\n B = (() => {\n const A = 1;\n return A;\n })())\n } */\n if (process.env.BABEL_8_BREAKING) {\n if (expr.scope.hasBinding(name, { upToScope: path.scope })) {\n return;\n }\n } else {\n for (\n let curScope = expr.scope;\n curScope !== path.scope;\n curScope = curScope.parent\n ) {\n if (curScope.hasOwnBinding(name)) {\n return;\n }\n }\n }\n\n expr.replaceWith(\n t.memberExpression(t.cloneNode(path.node.id), t.cloneNode(expr.node)),\n );\n expr.skip();\n }\n}\n\nconst enumSelfReferenceVisitor = {\n ReferencedIdentifier,\n};\n\nexport function translateEnumValues(path: NodePath<t.TSEnumDeclaration>, t: t) {\n const bindingIdentifier = path.scope.getBindingIdentifier(path.node.id.name);\n const seen: PreviousEnumMembers = ENUMS.get(bindingIdentifier) ?? new Map();\n\n // Start at -1 so the first enum member is its increment, 0.\n let constValue: number | string | undefined = -1;\n let lastName: string;\n let isPure = true;\n\n const enumMembers: NodePath<t.TSEnumMember>[] = process.env.BABEL_8_BREAKING\n ? // @ts-ignore(Babel 7 vs Babel 8) Babel 8 AST\n path.get(\"body\").get(\"members\")\n : path.get(\"members\");\n\n const enumValues: [name: string, value: t.Expression][] = enumMembers.map(\n memberPath => {\n const member = memberPath.node;\n const name = t.isIdentifier(member.id) ? member.id.name : member.id.value;\n const initializerPath = memberPath.get(\"initializer\");\n const initializer = member.initializer;\n let value: t.Expression;\n if (initializer) {\n constValue = computeConstantValue(initializerPath, seen);\n if (constValue !== undefined) {\n seen.set(name, constValue);\n assert(\n typeof constValue === \"number\" || typeof constValue === \"string\",\n );\n // We do not use `t.valueToNode` because `Infinity`/`NaN` might refer\n // to a local variable. Even 1/0\n // Revisit once https://github.com/microsoft/TypeScript/issues/55091\n // is fixed. Note: we will have to distinguish between actual\n // infinities and reference to non-infinite variables names Infinity.\n if (constValue === Infinity || Number.isNaN(constValue)) {\n value = t.identifier(String(constValue));\n } else if (constValue === -Infinity) {\n value = t.unaryExpression(\"-\", t.identifier(\"Infinity\"));\n } else {\n value = t.valueToNode(constValue);\n }\n } else {\n isPure &&= initializerPath.isPure();\n\n if (initializerPath.isReferencedIdentifier()) {\n ReferencedIdentifier(initializerPath, {\n t,\n seen,\n path,\n });\n } else {\n initializerPath.traverse(enumSelfReferenceVisitor, {\n t,\n seen,\n path,\n });\n }\n\n value = initializerPath.node;\n seen.set(name, undefined);\n }\n } else if (typeof constValue === \"number\") {\n constValue += 1;\n value = t.numericLiteral(constValue);\n seen.set(name, constValue);\n } else if (typeof constValue === \"string\") {\n throw path.buildCodeFrameError(\"Enum member must have initializer.\");\n } else {\n // create dynamic initializer: 1 + ENUM[\"PREVIOUS\"]\n const lastRef = t.memberExpression(\n t.cloneNode(path.node.id),\n t.stringLiteral(lastName),\n true,\n );\n value = t.binaryExpression(\"+\", t.numericLiteral(1), lastRef);\n seen.set(name, undefined);\n }\n\n lastName = name;\n return [name, value];\n },\n );\n\n return {\n isPure,\n data: seen,\n enumValues,\n };\n}\n\n// Based on the TypeScript repository's `computeConstantValue` in `checker.ts`.\nfunction computeConstantValue(\n path: NodePath,\n prevMembers?: PreviousEnumMembers,\n seen = new Set<t.Identifier>(),\n): number | string | undefined {\n return evaluate(path);\n\n function evaluate(path: NodePath): number | string | undefined {\n const expr = path.node;\n switch (expr.type) {\n case \"MemberExpression\":\n return evaluateRef(path, prevMembers, seen);\n case \"StringLiteral\":\n return expr.value;\n case \"UnaryExpression\":\n return evalUnaryExpression(path as NodePath<t.UnaryExpression>);\n case \"BinaryExpression\":\n return evalBinaryExpression(path as NodePath<t.BinaryExpression>);\n case \"NumericLiteral\":\n return expr.value;\n case \"ParenthesizedExpression\":\n return evaluate(path.get(\"expression\"));\n case \"Identifier\":\n return evaluateRef(path, prevMembers, seen);\n case \"TemplateLiteral\": {\n if (expr.quasis.length === 1) {\n return expr.quasis[0].value.cooked;\n }\n\n const paths = (path as NodePath<t.TemplateLiteral>).get(\"expressions\");\n const quasis = expr.quasis;\n let str = \"\";\n\n for (let i = 0; i < quasis.length; i++) {\n str += quasis[i].value.cooked;\n\n if (i + 1 < quasis.length) {\n const value = evaluateRef(paths[i], prevMembers, seen);\n if (value === undefined) return undefined;\n str += value;\n }\n }\n return str;\n }\n default:\n return undefined;\n }\n }\n\n function evaluateRef(\n path: NodePath,\n prevMembers: PreviousEnumMembers,\n seen: Set<t.Identifier>,\n ): number | string | undefined {\n if (path.isMemberExpression()) {\n const expr = path.node;\n\n const obj = expr.object;\n const prop = expr.property;\n if (\n !t.isIdentifier(obj) ||\n (expr.computed ? !t.isStringLiteral(prop) : !t.isIdentifier(prop))\n ) {\n return;\n }\n const bindingIdentifier = path.scope.getBindingIdentifier(obj.name);\n const data = ENUMS.get(bindingIdentifier);\n if (!data) return;\n // @ts-expect-error checked above\n return data.get(prop.computed ? prop.value : prop.name);\n } else if (path.isIdentifier()) {\n const name = path.node.name;\n\n if ([\"Infinity\", \"NaN\"].includes(name)) {\n return Number(name);\n }\n\n let value = prevMembers?.get(name);\n if (value !== undefined) {\n return value;\n }\n if (prevMembers?.has(name)) {\n // prevMembers contains name => undefined. This means the value couldn't be pre-computed.\n return undefined;\n }\n\n if (seen.has(path.node)) return;\n seen.add(path.node);\n\n value = computeConstantValue(path.resolve(), prevMembers, seen);\n return value;\n }\n }\n\n function evalUnaryExpression(\n path: NodePath<t.UnaryExpression>,\n ): number | string | undefined {\n const value = evaluate(path.get(\"argument\"));\n if (value === undefined) {\n return undefined;\n }\n\n switch (path.node.operator) {\n case \"+\":\n return value;\n case \"-\":\n // eslint-disable-next-line @typescript-eslint/no-unsafe-unary-minus\n return -value;\n case \"~\":\n return ~value;\n default:\n return undefined;\n }\n }\n\n function evalBinaryExpression(\n path: NodePath<t.BinaryExpression>,\n ): number | string | undefined {\n const left = evaluate(path.get(\"left\")) as any;\n if (left === undefined) {\n return undefined;\n }\n const right = evaluate(path.get(\"right\")) as any;\n if (right === undefined) {\n return undefined;\n }\n\n switch (path.node.operator) {\n case \"|\":\n return left | right;\n case \"&\":\n return left & right;\n case \">>\":\n return left >> right;\n case \">>>\":\n return left >>> right;\n case \"<<\":\n return left << right;\n case \"^\":\n return left ^ right;\n case \"*\":\n return left * right;\n case \"/\":\n return left / right;\n case \"+\":\n return left + right;\n case \"-\":\n return left - right;\n case \"%\":\n return left % right;\n case \"**\":\n return left ** right;\n default:\n return undefined;\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.GLOBAL_TYPES = void 0;
7
+ exports.isGlobalType = isGlobalType;
8
+ exports.registerGlobalType = registerGlobalType;
9
+ const GLOBAL_TYPES = exports.GLOBAL_TYPES = new WeakMap();
10
+ function isGlobalType({
11
+ scope
12
+ }, name) {
13
+ if (scope.hasBinding(name)) return false;
14
+ if (GLOBAL_TYPES.get(scope).has(name)) return true;
15
+ console.warn(`The exported identifier "${name}" is not declared in Babel's scope tracker\n` + `as a JavaScript value binding, and "@babel/plugin-transform-typescript"\n` + `never encountered it as a TypeScript type declaration.\n` + `It will be treated as a JavaScript value.\n\n` + `This problem is likely caused by another plugin injecting\n` + `"${name}" without registering it in the scope tracker. If you are the author\n` + ` of that plugin, please use "scope.registerDeclaration(declarationPath)".`);
16
+ return false;
17
+ }
18
+ function registerGlobalType(programScope, name) {
19
+ GLOBAL_TYPES.get(programScope).add(name);
20
+ }
21
+
22
+ //# sourceMappingURL=global-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["GLOBAL_TYPES","exports","WeakMap","isGlobalType","scope","name","hasBinding","get","has","console","warn","registerGlobalType","programScope","add"],"sources":["../src/global-types.ts"],"sourcesContent":["import type { NodePath, Scope } from \"@babel/core\";\n\nexport const GLOBAL_TYPES = new WeakMap<Scope, Set<string>>();\n\nexport function isGlobalType({ scope }: NodePath, name: string) {\n if (scope.hasBinding(name)) return false;\n if (GLOBAL_TYPES.get(scope).has(name)) return true;\n\n console.warn(\n `The exported identifier \"${name}\" is not declared in Babel's scope tracker\\n` +\n `as a JavaScript value binding, and \"@babel/plugin-transform-typescript\"\\n` +\n `never encountered it as a TypeScript type declaration.\\n` +\n `It will be treated as a JavaScript value.\\n\\n` +\n `This problem is likely caused by another plugin injecting\\n` +\n `\"${name}\" without registering it in the scope tracker. If you are the author\\n` +\n ` of that plugin, please use \"scope.registerDeclaration(declarationPath)\".`,\n );\n\n return false;\n}\n\nexport function registerGlobalType(programScope: Scope, name: string) {\n GLOBAL_TYPES.get(programScope).add(name);\n}\n"],"mappings":";;;;;;;;AAEO,MAAMA,YAAY,GAAAC,OAAA,CAAAD,YAAA,GAAG,IAAIE,OAAO,CAAqB,CAAC;AAEtD,SAASC,YAAYA,CAAC;EAAEC;AAAgB,CAAC,EAAEC,IAAY,EAAE;EAC9D,IAAID,KAAK,CAACE,UAAU,CAACD,IAAI,CAAC,EAAE,OAAO,KAAK;EACxC,IAAIL,YAAY,CAACO,GAAG,CAACH,KAAK,CAAC,CAACI,GAAG,CAACH,IAAI,CAAC,EAAE,OAAO,IAAI;EAElDI,OAAO,CAACC,IAAI,CACV,4BAA4BL,IAAI,8CAA8C,GAC5E,2EAA2E,GAC3E,0DAA0D,GAC1D,+CAA+C,GAC/C,6DAA6D,GAC7D,IAAIA,IAAI,wEAAwE,GAChF,2EACJ,CAAC;EAED,OAAO,KAAK;AACd;AAEO,SAASM,kBAAkBA,CAACC,YAAmB,EAAEP,IAAY,EAAE;EACpEL,YAAY,CAACO,GAAG,CAACK,YAAY,CAAC,CAACC,GAAG,CAACR,IAAI,CAAC;AAC1C","ignoreList":[]}