@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 +22 -0
- package/README.md +25 -0
- package/changes.json +5 -0
- package/lib/const-enum.js +60 -0
- package/lib/const-enum.js.map +1 -0
- package/lib/enum.js +332 -0
- package/lib/enum.js.map +1 -0
- package/lib/global-types.js +22 -0
- package/lib/global-types.js.map +1 -0
- package/lib/index.js +495 -0
- package/lib/index.js.map +1 -0
- package/lib/namespace.js +176 -0
- package/lib/namespace.js.map +1 -0
- package/package.json +50 -0
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,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
|
package/lib/enum.js.map
ADDED
|
@@ -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":[]}
|