@babel/plugin-proposal-decorators 7.21.0 → 7.21.4-esm.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/index.js +12 -19
- package/lib/index.js.map +1 -1
- package/lib/package.json +1 -0
- package/lib/transformer-2023-01.js +90 -96
- package/lib/transformer-2023-01.js.map +1 -1
- package/lib/transformer-legacy.js +28 -35
- package/lib/transformer-legacy.js.map +1 -1
- package/package.json +11 -11
package/lib/index.js
CHANGED
|
@@ -1,15 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
var _helperPluginUtils = require("@babel/helper-plugin-utils");
|
|
8
|
-
var _pluginSyntaxDecorators = require("@babel/plugin-syntax-decorators");
|
|
9
|
-
var _helperCreateClassFeaturesPlugin = require("@babel/helper-create-class-features-plugin");
|
|
10
|
-
var _transformerLegacy = require("./transformer-legacy");
|
|
11
|
-
var _transformer = require("./transformer-2023-01");
|
|
12
|
-
var _default = (0, _helperPluginUtils.declare)((api, options) => {
|
|
1
|
+
import { declare } from "@babel/helper-plugin-utils";
|
|
2
|
+
import syntaxDecorators from "@babel/plugin-syntax-decorators";
|
|
3
|
+
import { createClassFeaturePlugin, FEATURES } from "@babel/helper-create-class-features-plugin";
|
|
4
|
+
import legacyVisitor from "./transformer-legacy.js";
|
|
5
|
+
import transformer2022_03 from "./transformer-2023-01.js";
|
|
6
|
+
export default declare((api, options) => {
|
|
13
7
|
api.assertVersion(7);
|
|
14
8
|
{
|
|
15
9
|
var {
|
|
@@ -22,21 +16,20 @@ var _default = (0, _helperPluginUtils.declare)((api, options) => {
|
|
|
22
16
|
if (legacy || version === "legacy") {
|
|
23
17
|
return {
|
|
24
18
|
name: "proposal-decorators",
|
|
25
|
-
inherits:
|
|
26
|
-
visitor:
|
|
19
|
+
inherits: syntaxDecorators,
|
|
20
|
+
visitor: legacyVisitor
|
|
27
21
|
};
|
|
28
22
|
} else if (version === "2021-12" || version === "2022-03" || version === "2023-01") {
|
|
29
|
-
return (
|
|
23
|
+
return transformer2022_03(api, options, version);
|
|
30
24
|
} else {
|
|
31
25
|
api.assertVersion("^7.0.2");
|
|
32
|
-
return
|
|
26
|
+
return createClassFeaturePlugin({
|
|
33
27
|
name: "proposal-decorators",
|
|
34
28
|
api,
|
|
35
|
-
feature:
|
|
36
|
-
inherits:
|
|
29
|
+
feature: FEATURES.decorators,
|
|
30
|
+
inherits: syntaxDecorators
|
|
37
31
|
});
|
|
38
32
|
}
|
|
39
33
|
});
|
|
40
|
-
exports.default = _default;
|
|
41
34
|
|
|
42
35
|
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["declare","
|
|
1
|
+
{"version":3,"names":["declare","syntaxDecorators","createClassFeaturePlugin","FEATURES","legacyVisitor","transformer2022_03","api","options","assertVersion","legacy","version","name","inherits","visitor","feature","decorators"],"sources":["../src/index.ts"],"sourcesContent":["/* eslint-disable @babel/development/plugin-name */\n\nimport { declare } from \"@babel/helper-plugin-utils\";\nimport syntaxDecorators from \"@babel/plugin-syntax-decorators\";\nimport {\n createClassFeaturePlugin,\n FEATURES,\n} from \"@babel/helper-create-class-features-plugin\";\nimport legacyVisitor from \"./transformer-legacy\";\nimport transformer2022_03 from \"./transformer-2023-01\";\nimport type { Options as SyntaxOptions } from \"@babel/plugin-syntax-decorators\";\n\ninterface Options extends SyntaxOptions {\n /** @deprecated use `constantSuper` assumption instead. Only supported in 2021-12 version. */\n loose?: boolean;\n}\n\nexport type { Options };\n\nexport default declare((api, options: Options) => {\n api.assertVersion(7);\n\n // Options are validated in @babel/plugin-syntax-decorators\n if (!process.env.BABEL_8_BREAKING) {\n // eslint-disable-next-line no-var\n var { legacy } = options;\n }\n const { version } = options;\n\n if (\n process.env.BABEL_8_BREAKING\n ? version === \"legacy\"\n : legacy || version === \"legacy\"\n ) {\n return {\n name: \"proposal-decorators\",\n inherits: syntaxDecorators,\n visitor: legacyVisitor,\n };\n } else if (\n version === \"2021-12\" ||\n version === \"2022-03\" ||\n version === \"2023-01\"\n ) {\n return transformer2022_03(api, options, version);\n } else if (!process.env.BABEL_8_BREAKING) {\n api.assertVersion(\"^7.0.2\");\n return createClassFeaturePlugin({\n name: \"proposal-decorators\",\n\n api,\n feature: FEATURES.decorators,\n inherits: syntaxDecorators,\n // loose: options.loose, Not supported\n });\n } else {\n throw new Error(\n \"The '.version' option must be one of 'legacy', '2021-12', '2022-03', or '2023-01'.\",\n );\n }\n});\n"],"mappings":"AAEA,SAASA,OAAO,QAAQ,4BAA4B;AACpD,OAAOC,gBAAgB,MAAM,iCAAiC;AAC9D,SACEC,wBAAwB,EACxBC,QAAQ,QACH,4CAA4C;AACnD,OAAOC,aAAa,MAAM,yBAAsB;AAChD,OAAOC,kBAAkB,MAAM,0BAAuB;AAUtD,eAAeL,OAAO,CAAC,CAACM,GAAG,EAAEC,OAAgB,KAAK;EAChDD,GAAG,CAACE,aAAa,CAAC,CAAC,CAAC;EAGe;IAEjC,IAAI;MAAEC;IAAO,CAAC,GAAGF,OAAO;EAC1B;EACA,MAAM;IAAEG;EAAQ,CAAC,GAAGH,OAAO;EAE3B,IAGME,MAAM,IAAIC,OAAO,KAAK,QAAQ,EAClC;IACA,OAAO;MACLC,IAAI,EAAE,qBAAqB;MAC3BC,QAAQ,EAAEX,gBAAgB;MAC1BY,OAAO,EAAET;IACX,CAAC;EACH,CAAC,MAAM,IACLM,OAAO,KAAK,SAAS,IACrBA,OAAO,KAAK,SAAS,IACrBA,OAAO,KAAK,SAAS,EACrB;IACA,OAAOL,kBAAkB,CAACC,GAAG,EAAEC,OAAO,EAAEG,OAAO,CAAC;EAClD,CAAC,MAAyC;IACxCJ,GAAG,CAACE,aAAa,CAAC,QAAQ,CAAC;IAC3B,OAAON,wBAAwB,CAAC;MAC9BS,IAAI,EAAE,qBAAqB;MAE3BL,GAAG;MACHQ,OAAO,EAAEX,QAAQ,CAACY,UAAU;MAC5BH,QAAQ,EAAEX;IAEZ,CAAC,CAAC;EACJ;AAKF,CAAC,CAAC"}
|
package/lib/package.json
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{ "type": "module" }
|
|
@@ -1,13 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
});
|
|
6
|
-
exports.default = _default;
|
|
7
|
-
var _core = require("@babel/core");
|
|
8
|
-
var _pluginSyntaxDecorators = require("@babel/plugin-syntax-decorators");
|
|
9
|
-
var _helperReplaceSupers = require("@babel/helper-replace-supers");
|
|
10
|
-
var _helperSplitExportDeclaration = require("@babel/helper-split-export-declaration");
|
|
1
|
+
import { types as t, template } from "@babel/core";
|
|
2
|
+
import syntaxDecorators from "@babel/plugin-syntax-decorators";
|
|
3
|
+
import ReplaceSupers from "@babel/helper-replace-supers";
|
|
4
|
+
import splitExportDeclaration from "@babel/helper-split-export-declaration";
|
|
11
5
|
function incrementId(id, idx = id.length - 1) {
|
|
12
6
|
if (idx === -1) {
|
|
13
7
|
id.unshift(65);
|
|
@@ -37,7 +31,7 @@ function createPrivateUidGeneratorForClass(classPath) {
|
|
|
37
31
|
incrementId(currentPrivateId);
|
|
38
32
|
reifiedId = String.fromCharCode(...currentPrivateId);
|
|
39
33
|
} while (privateNames.has(reifiedId));
|
|
40
|
-
return
|
|
34
|
+
return t.privateName(t.identifier(reifiedId));
|
|
41
35
|
};
|
|
42
36
|
}
|
|
43
37
|
function createLazyPrivateUidGeneratorForClass(classPath) {
|
|
@@ -52,11 +46,11 @@ function createLazyPrivateUidGeneratorForClass(classPath) {
|
|
|
52
46
|
function replaceClassWithVar(path) {
|
|
53
47
|
if (path.type === "ClassDeclaration") {
|
|
54
48
|
const varId = path.scope.generateUidIdentifierBasedOnNode(path.node.id);
|
|
55
|
-
const classId =
|
|
49
|
+
const classId = t.identifier(path.node.id.name);
|
|
56
50
|
path.scope.rename(classId.name, varId.name);
|
|
57
|
-
path.insertBefore(
|
|
51
|
+
path.insertBefore(t.variableDeclaration("let", [t.variableDeclarator(varId)]));
|
|
58
52
|
path.get("id").replaceWith(classId);
|
|
59
|
-
return [
|
|
53
|
+
return [t.cloneNode(varId), path];
|
|
60
54
|
} else {
|
|
61
55
|
let className;
|
|
62
56
|
let varId;
|
|
@@ -70,51 +64,51 @@ function replaceClassWithVar(path) {
|
|
|
70
64
|
} else {
|
|
71
65
|
varId = path.scope.parent.generateDeclaredUidIdentifier("decorated_class");
|
|
72
66
|
}
|
|
73
|
-
const newClassExpr =
|
|
74
|
-
const [newPath] = path.replaceWith(
|
|
75
|
-
return [
|
|
67
|
+
const newClassExpr = t.classExpression(className && t.identifier(className), path.node.superClass, path.node.body);
|
|
68
|
+
const [newPath] = path.replaceWith(t.sequenceExpression([newClassExpr, varId]));
|
|
69
|
+
return [t.cloneNode(varId), newPath.get("expressions.0")];
|
|
76
70
|
}
|
|
77
71
|
}
|
|
78
72
|
function generateClassProperty(key, value, isStatic) {
|
|
79
73
|
if (key.type === "PrivateName") {
|
|
80
|
-
return
|
|
74
|
+
return t.classPrivateProperty(key, value, undefined, isStatic);
|
|
81
75
|
} else {
|
|
82
|
-
return
|
|
76
|
+
return t.classProperty(key, value, undefined, undefined, isStatic);
|
|
83
77
|
}
|
|
84
78
|
}
|
|
85
79
|
function addProxyAccessorsFor(element, originalKey, targetKey, isComputed = false) {
|
|
86
80
|
const {
|
|
87
81
|
static: isStatic
|
|
88
82
|
} = element.node;
|
|
89
|
-
const getterBody =
|
|
90
|
-
const setterBody =
|
|
83
|
+
const getterBody = t.blockStatement([t.returnStatement(t.memberExpression(t.thisExpression(), t.cloneNode(targetKey)))]);
|
|
84
|
+
const setterBody = t.blockStatement([t.expressionStatement(t.assignmentExpression("=", t.memberExpression(t.thisExpression(), t.cloneNode(targetKey)), t.identifier("v")))]);
|
|
91
85
|
let getter, setter;
|
|
92
86
|
if (originalKey.type === "PrivateName") {
|
|
93
|
-
getter =
|
|
94
|
-
setter =
|
|
87
|
+
getter = t.classPrivateMethod("get", t.cloneNode(originalKey), [], getterBody, isStatic);
|
|
88
|
+
setter = t.classPrivateMethod("set", t.cloneNode(originalKey), [t.identifier("v")], setterBody, isStatic);
|
|
95
89
|
} else {
|
|
96
|
-
getter =
|
|
97
|
-
setter =
|
|
90
|
+
getter = t.classMethod("get", t.cloneNode(originalKey), [], getterBody, isComputed, isStatic);
|
|
91
|
+
setter = t.classMethod("set", t.cloneNode(originalKey), [t.identifier("v")], setterBody, isComputed, isStatic);
|
|
98
92
|
}
|
|
99
93
|
element.insertAfter(setter);
|
|
100
94
|
element.insertAfter(getter);
|
|
101
95
|
}
|
|
102
96
|
function extractProxyAccessorsFor(targetKey, version) {
|
|
103
97
|
if (version !== "2023-01") {
|
|
104
|
-
return [
|
|
98
|
+
return [template.expression.ast`
|
|
105
99
|
function () {
|
|
106
|
-
return this.${
|
|
100
|
+
return this.${t.cloneNode(targetKey)};
|
|
107
101
|
}
|
|
108
|
-
`,
|
|
102
|
+
`, template.expression.ast`
|
|
109
103
|
function (value) {
|
|
110
|
-
this.${
|
|
104
|
+
this.${t.cloneNode(targetKey)} = value;
|
|
111
105
|
}
|
|
112
106
|
`];
|
|
113
107
|
}
|
|
114
|
-
return [
|
|
115
|
-
o => o.${
|
|
116
|
-
`,
|
|
117
|
-
(o, v) => o.${
|
|
108
|
+
return [template.expression.ast`
|
|
109
|
+
o => o.${t.cloneNode(targetKey)}
|
|
110
|
+
`, template.expression.ast`
|
|
111
|
+
(o, v) => o.${t.cloneNode(targetKey)} = v
|
|
118
112
|
`];
|
|
119
113
|
}
|
|
120
114
|
const FIELD = 0;
|
|
@@ -149,10 +143,10 @@ function filteredOrderedDecoratorInfo(info) {
|
|
|
149
143
|
return [...filtered.filter(el => el.isStatic && el.kind >= ACCESSOR && el.kind <= SETTER), ...filtered.filter(el => !el.isStatic && el.kind >= ACCESSOR && el.kind <= SETTER), ...filtered.filter(el => el.isStatic && el.kind === FIELD), ...filtered.filter(el => !el.isStatic && el.kind === FIELD)];
|
|
150
144
|
}
|
|
151
145
|
function generateDecorationExprs(info) {
|
|
152
|
-
return
|
|
153
|
-
const decs = el.decorators.length > 1 ?
|
|
146
|
+
return t.arrayExpression(filteredOrderedDecoratorInfo(info).map(el => {
|
|
147
|
+
const decs = el.decorators.length > 1 ? t.arrayExpression(el.decorators) : el.decorators[0];
|
|
154
148
|
const kind = el.isStatic ? el.kind + STATIC : el.kind;
|
|
155
|
-
return
|
|
149
|
+
return t.arrayExpression([decs, t.numericLiteral(kind), el.name, ...(el.privateMethods || [])]);
|
|
156
150
|
}));
|
|
157
151
|
}
|
|
158
152
|
function extractElementLocalAssignments(decorationInfo) {
|
|
@@ -170,8 +164,8 @@ function extractElementLocalAssignments(decorationInfo) {
|
|
|
170
164
|
return localIds;
|
|
171
165
|
}
|
|
172
166
|
function addCallAccessorsFor(element, key, getId, setId) {
|
|
173
|
-
element.insertAfter(
|
|
174
|
-
element.insertAfter(
|
|
167
|
+
element.insertAfter(t.classPrivateMethod("get", t.cloneNode(key), [], t.blockStatement([t.returnStatement(t.callExpression(t.cloneNode(getId), [t.thisExpression()]))])));
|
|
168
|
+
element.insertAfter(t.classPrivateMethod("set", t.cloneNode(key), [t.identifier("v")], t.blockStatement([t.expressionStatement(t.callExpression(t.cloneNode(setId), [t.thisExpression(), t.identifier("v")]))])));
|
|
175
169
|
}
|
|
176
170
|
function isNotTsParameter(node) {
|
|
177
171
|
return node.type !== "TSParameterProperty";
|
|
@@ -180,13 +174,13 @@ function movePrivateAccessor(element, key, methodLocalVar, isStatic) {
|
|
|
180
174
|
let params;
|
|
181
175
|
let block;
|
|
182
176
|
if (element.node.kind === "set") {
|
|
183
|
-
params = [
|
|
184
|
-
block = [
|
|
177
|
+
params = [t.identifier("v")];
|
|
178
|
+
block = [t.expressionStatement(t.callExpression(methodLocalVar, [t.thisExpression(), t.identifier("v")]))];
|
|
185
179
|
} else {
|
|
186
180
|
params = [];
|
|
187
|
-
block = [
|
|
181
|
+
block = [t.returnStatement(t.callExpression(methodLocalVar, [t.thisExpression()]))];
|
|
188
182
|
}
|
|
189
|
-
element.replaceWith(
|
|
183
|
+
element.replaceWith(t.classPrivateMethod(element.node.kind, t.cloneNode(key), params, t.blockStatement(block), isStatic));
|
|
190
184
|
}
|
|
191
185
|
function isClassDecoratableElementPath(path) {
|
|
192
186
|
const {
|
|
@@ -195,12 +189,12 @@ function isClassDecoratableElementPath(path) {
|
|
|
195
189
|
return type !== "TSDeclareMethod" && type !== "TSIndexSignature" && type !== "StaticBlock";
|
|
196
190
|
}
|
|
197
191
|
function staticBlockToIIFE(block) {
|
|
198
|
-
return
|
|
192
|
+
return t.callExpression(t.arrowFunctionExpression([], t.blockStatement(block.body)), []);
|
|
199
193
|
}
|
|
200
194
|
function maybeSequenceExpression(exprs) {
|
|
201
|
-
if (exprs.length === 0) return
|
|
195
|
+
if (exprs.length === 0) return t.unaryExpression("void", t.numericLiteral(0));
|
|
202
196
|
if (exprs.length === 1) return exprs[0];
|
|
203
|
-
return
|
|
197
|
+
return t.sequenceExpression(exprs);
|
|
204
198
|
}
|
|
205
199
|
function transformClass(path, state, constantSuper, version) {
|
|
206
200
|
const body = path.get("body.body");
|
|
@@ -221,7 +215,7 @@ function transformClass(path, state, constantSuper, version) {
|
|
|
221
215
|
computed
|
|
222
216
|
} = element.node;
|
|
223
217
|
const newId = generateClassPrivateUid();
|
|
224
|
-
const valueNode = value ?
|
|
218
|
+
const valueNode = value ? t.cloneNode(value) : undefined;
|
|
225
219
|
const newField = generateClassProperty(newId, valueNode, isStatic);
|
|
226
220
|
const [newPath] = element.replaceWith(newField);
|
|
227
221
|
addProxyAccessorsFor(newPath, key, newId, computed);
|
|
@@ -239,8 +233,8 @@ function transformClass(path, state, constantSuper, version) {
|
|
|
239
233
|
const scopeParent = path.scope.parent;
|
|
240
234
|
const memoiseExpression = (expression, hint) => {
|
|
241
235
|
const localEvaluatedId = scopeParent.generateDeclaredUidIdentifier(hint);
|
|
242
|
-
assignments.push(
|
|
243
|
-
return
|
|
236
|
+
assignments.push(t.assignmentExpression("=", localEvaluatedId, expression));
|
|
237
|
+
return t.cloneNode(localEvaluatedId);
|
|
244
238
|
};
|
|
245
239
|
if (classDecorators) {
|
|
246
240
|
classInitLocal = scopeParent.generateDeclaredUidIdentifier("initClass");
|
|
@@ -257,7 +251,7 @@ function transformClass(path, state, constantSuper, version) {
|
|
|
257
251
|
if (!path.node.id) {
|
|
258
252
|
path.node.id = path.scope.generateUidIdentifier("Class");
|
|
259
253
|
}
|
|
260
|
-
classIdLocal =
|
|
254
|
+
classIdLocal = t.cloneNode(path.node.id);
|
|
261
255
|
}
|
|
262
256
|
let lastInstancePrivateName;
|
|
263
257
|
let needsInstancePrivateBrandCheck = false;
|
|
@@ -300,7 +294,7 @@ function transformClass(path, state, constantSuper, version) {
|
|
|
300
294
|
if (hasDecorators) {
|
|
301
295
|
needsInstancePrivateBrandCheck = true;
|
|
302
296
|
}
|
|
303
|
-
if (
|
|
297
|
+
if (t.isClassPrivateProperty(node) || !lastInstancePrivateName) {
|
|
304
298
|
lastInstancePrivateName = key;
|
|
305
299
|
}
|
|
306
300
|
}
|
|
@@ -316,13 +310,13 @@ function transformClass(path, state, constantSuper, version) {
|
|
|
316
310
|
const {
|
|
317
311
|
value
|
|
318
312
|
} = element.node;
|
|
319
|
-
const params = [
|
|
313
|
+
const params = [t.thisExpression()];
|
|
320
314
|
if (value) {
|
|
321
|
-
params.push(
|
|
315
|
+
params.push(t.cloneNode(value));
|
|
322
316
|
}
|
|
323
317
|
const newId = generateClassPrivateUid();
|
|
324
318
|
const newFieldInitId = element.scope.parent.generateDeclaredUidIdentifier(`init_${name}`);
|
|
325
|
-
const newValue =
|
|
319
|
+
const newValue = t.callExpression(t.cloneNode(newFieldInitId), params);
|
|
326
320
|
const newField = generateClassProperty(newId, newValue, isStatic);
|
|
327
321
|
const [newPath] = element.replaceWith(newField);
|
|
328
322
|
if (isPrivate) {
|
|
@@ -338,14 +332,14 @@ function transformClass(path, state, constantSuper, version) {
|
|
|
338
332
|
} else if (kind === FIELD) {
|
|
339
333
|
const initId = element.scope.parent.generateDeclaredUidIdentifier(`init_${name}`);
|
|
340
334
|
const valuePath = element.get("value");
|
|
341
|
-
valuePath.replaceWith(
|
|
335
|
+
valuePath.replaceWith(t.callExpression(t.cloneNode(initId), [t.thisExpression(), valuePath.node].filter(v => v)));
|
|
342
336
|
locals = initId;
|
|
343
337
|
if (isPrivate) {
|
|
344
338
|
privateMethods = extractProxyAccessorsFor(key, version);
|
|
345
339
|
}
|
|
346
340
|
} else if (isPrivate) {
|
|
347
341
|
locals = element.scope.parent.generateDeclaredUidIdentifier(`call_${name}`);
|
|
348
|
-
const replaceSupers = new
|
|
342
|
+
const replaceSupers = new ReplaceSupers({
|
|
349
343
|
constantSuper,
|
|
350
344
|
methodPath: element,
|
|
351
345
|
objectRef: classIdLocal,
|
|
@@ -359,25 +353,25 @@ function transformClass(path, state, constantSuper, version) {
|
|
|
359
353
|
body,
|
|
360
354
|
async: isAsync
|
|
361
355
|
} = element.node;
|
|
362
|
-
privateMethods = [
|
|
356
|
+
privateMethods = [t.functionExpression(undefined, params.filter(isNotTsParameter), body, isAsync)];
|
|
363
357
|
if (kind === GETTER || kind === SETTER) {
|
|
364
|
-
movePrivateAccessor(element,
|
|
358
|
+
movePrivateAccessor(element, t.cloneNode(key), t.cloneNode(locals), isStatic);
|
|
365
359
|
} else {
|
|
366
360
|
const node = element.node;
|
|
367
|
-
path.node.body.body.unshift(
|
|
361
|
+
path.node.body.body.unshift(t.classPrivateProperty(key, t.cloneNode(locals), [], node.static));
|
|
368
362
|
decoratedPrivateMethods.add(key.id.name);
|
|
369
363
|
element.remove();
|
|
370
364
|
}
|
|
371
365
|
}
|
|
372
366
|
let nameExpr;
|
|
373
367
|
if (isComputed) {
|
|
374
|
-
nameExpr =
|
|
368
|
+
nameExpr = t.cloneNode(key);
|
|
375
369
|
} else if (key.type === "PrivateName") {
|
|
376
|
-
nameExpr =
|
|
370
|
+
nameExpr = t.stringLiteral(key.id.name);
|
|
377
371
|
} else if (key.type === "Identifier") {
|
|
378
|
-
nameExpr =
|
|
372
|
+
nameExpr = t.stringLiteral(key.name);
|
|
379
373
|
} else {
|
|
380
|
-
nameExpr =
|
|
374
|
+
nameExpr = t.cloneNode(key);
|
|
381
375
|
}
|
|
382
376
|
elementDecoratorInfo.push({
|
|
383
377
|
kind,
|
|
@@ -404,39 +398,39 @@ function transformClass(path, state, constantSuper, version) {
|
|
|
404
398
|
}
|
|
405
399
|
}
|
|
406
400
|
const elementDecorations = generateDecorationExprs(elementDecoratorInfo);
|
|
407
|
-
const classDecorations =
|
|
401
|
+
const classDecorations = t.arrayExpression((classDecorators || []).map(d => d.expression));
|
|
408
402
|
const elementLocals = extractElementLocalAssignments(elementDecoratorInfo);
|
|
409
403
|
if (requiresProtoInit) {
|
|
410
404
|
protoInitLocal = scopeParent.generateDeclaredUidIdentifier("initProto");
|
|
411
405
|
elementLocals.push(protoInitLocal);
|
|
412
|
-
const protoInitCall =
|
|
406
|
+
const protoInitCall = t.callExpression(t.cloneNode(protoInitLocal), [t.thisExpression()]);
|
|
413
407
|
if (firstFieldPath) {
|
|
414
408
|
const value = firstFieldPath.get("value");
|
|
415
409
|
const body = [protoInitCall];
|
|
416
410
|
if (value.node) {
|
|
417
411
|
body.push(value.node);
|
|
418
412
|
}
|
|
419
|
-
value.replaceWith(
|
|
413
|
+
value.replaceWith(t.sequenceExpression(body));
|
|
420
414
|
} else if (constructorPath) {
|
|
421
415
|
if (path.node.superClass) {
|
|
422
416
|
path.traverse({
|
|
423
417
|
CallExpression: {
|
|
424
418
|
exit(path) {
|
|
425
419
|
if (!path.get("callee").isSuper()) return;
|
|
426
|
-
path.replaceWith(
|
|
420
|
+
path.replaceWith(t.callExpression(t.cloneNode(protoInitLocal), [path.node]));
|
|
427
421
|
path.skip();
|
|
428
422
|
}
|
|
429
423
|
}
|
|
430
424
|
});
|
|
431
425
|
} else {
|
|
432
|
-
constructorPath.node.body.body.unshift(
|
|
426
|
+
constructorPath.node.body.body.unshift(t.expressionStatement(protoInitCall));
|
|
433
427
|
}
|
|
434
428
|
} else {
|
|
435
|
-
const body = [
|
|
429
|
+
const body = [t.expressionStatement(protoInitCall)];
|
|
436
430
|
if (path.node.superClass) {
|
|
437
|
-
body.unshift(
|
|
431
|
+
body.unshift(t.expressionStatement(t.callExpression(t.super(), [t.spreadElement(t.identifier("args"))])));
|
|
438
432
|
}
|
|
439
|
-
path.node.body.body.unshift(
|
|
433
|
+
path.node.body.body.unshift(t.classMethod("constructor", t.identifier("constructor"), [t.restElement(t.identifier("args"))], t.blockStatement(body)));
|
|
440
434
|
}
|
|
441
435
|
}
|
|
442
436
|
if (requiresStaticInit) {
|
|
@@ -457,7 +451,7 @@ function transformClass(path, state, constantSuper, version) {
|
|
|
457
451
|
}
|
|
458
452
|
const classLocals = [];
|
|
459
453
|
let classInitInjected = false;
|
|
460
|
-
const classInitCall = classInitLocal &&
|
|
454
|
+
const classInitCall = classInitLocal && t.callExpression(t.cloneNode(classInitLocal), []);
|
|
461
455
|
const originalClass = path.node;
|
|
462
456
|
if (classDecorators) {
|
|
463
457
|
classLocals.push(classIdLocal, classInitLocal);
|
|
@@ -483,12 +477,12 @@ function transformClass(path, state, constantSuper, version) {
|
|
|
483
477
|
}
|
|
484
478
|
});
|
|
485
479
|
if (statics.length > 0 || staticBlocks.length > 0) {
|
|
486
|
-
const staticsClass =
|
|
480
|
+
const staticsClass = template.expression.ast`
|
|
487
481
|
class extends ${state.addHelper("identity")} {}
|
|
488
482
|
`;
|
|
489
|
-
staticsClass.body.body = [
|
|
483
|
+
staticsClass.body.body = [t.staticBlock([t.toStatement(originalClass, true) || t.expressionStatement(originalClass)]), ...statics];
|
|
490
484
|
const constructorBody = [];
|
|
491
|
-
const newExpr =
|
|
485
|
+
const newExpr = t.newExpression(staticsClass, []);
|
|
492
486
|
if (staticBlocks.length > 0) {
|
|
493
487
|
constructorBody.push(...staticBlocks.map(staticBlockToIIFE));
|
|
494
488
|
}
|
|
@@ -497,54 +491,54 @@ function transformClass(path, state, constantSuper, version) {
|
|
|
497
491
|
constructorBody.push(classInitCall);
|
|
498
492
|
}
|
|
499
493
|
if (constructorBody.length > 0) {
|
|
500
|
-
constructorBody.unshift(
|
|
501
|
-
staticsClass.body.body.push(
|
|
494
|
+
constructorBody.unshift(t.callExpression(t.super(), [t.cloneNode(classIdLocal)]));
|
|
495
|
+
staticsClass.body.body.push(t.classMethod("constructor", t.identifier("constructor"), [], t.blockStatement([t.expressionStatement(t.sequenceExpression(constructorBody))])));
|
|
502
496
|
} else {
|
|
503
|
-
newExpr.arguments.push(
|
|
497
|
+
newExpr.arguments.push(t.cloneNode(classIdLocal));
|
|
504
498
|
}
|
|
505
499
|
path.replaceWith(newExpr);
|
|
506
500
|
}
|
|
507
501
|
}
|
|
508
502
|
if (!classInitInjected && classInitCall) {
|
|
509
|
-
path.node.body.body.push(
|
|
503
|
+
path.node.body.body.push(t.staticBlock([t.expressionStatement(classInitCall)]));
|
|
510
504
|
}
|
|
511
|
-
originalClass.body.body.unshift(
|
|
512
|
-
path.insertBefore(assignments.map(expr =>
|
|
505
|
+
originalClass.body.body.unshift(t.staticBlock([t.expressionStatement(createLocalsAssignment(elementLocals, classLocals, elementDecorations, classDecorations, needsInstancePrivateBrandCheck ? lastInstancePrivateName : null, state, version)), requiresStaticInit && t.expressionStatement(t.callExpression(t.cloneNode(staticInitLocal), [t.thisExpression()]))].filter(Boolean)));
|
|
506
|
+
path.insertBefore(assignments.map(expr => t.expressionStatement(expr)));
|
|
513
507
|
path.scope.crawl();
|
|
514
508
|
return path;
|
|
515
509
|
}
|
|
516
510
|
function createLocalsAssignment(elementLocals, classLocals, elementDecorations, classDecorations, maybePrivateBranName, state, version) {
|
|
517
511
|
let lhs, rhs;
|
|
518
|
-
const args = [
|
|
512
|
+
const args = [t.thisExpression(), elementDecorations, classDecorations];
|
|
519
513
|
if (version === "2021-12" || version === "2022-03" && !state.availableHelper("applyDecs2203R")) {
|
|
520
|
-
lhs =
|
|
521
|
-
rhs =
|
|
514
|
+
lhs = t.arrayPattern([...elementLocals, ...classLocals]);
|
|
515
|
+
rhs = t.callExpression(state.addHelper(version === "2021-12" ? "applyDecs" : "applyDecs2203"), args);
|
|
522
516
|
} else {
|
|
523
517
|
if (version === "2023-01") {
|
|
524
518
|
if (maybePrivateBranName) {
|
|
525
|
-
args.push(
|
|
526
|
-
_ => ${
|
|
519
|
+
args.push(template.expression.ast`
|
|
520
|
+
_ => ${t.cloneNode(maybePrivateBranName)} in _
|
|
527
521
|
`);
|
|
528
522
|
}
|
|
529
|
-
rhs =
|
|
523
|
+
rhs = t.callExpression(state.addHelper("applyDecs2301"), args);
|
|
530
524
|
} else {
|
|
531
|
-
rhs =
|
|
525
|
+
rhs = t.callExpression(state.addHelper("applyDecs2203R"), args);
|
|
532
526
|
}
|
|
533
527
|
if (elementLocals.length > 0) {
|
|
534
528
|
if (classLocals.length > 0) {
|
|
535
|
-
lhs =
|
|
529
|
+
lhs = t.objectPattern([t.objectProperty(t.identifier("e"), t.arrayPattern(elementLocals)), t.objectProperty(t.identifier("c"), t.arrayPattern(classLocals))]);
|
|
536
530
|
} else {
|
|
537
|
-
lhs =
|
|
538
|
-
rhs =
|
|
531
|
+
lhs = t.arrayPattern(elementLocals);
|
|
532
|
+
rhs = t.memberExpression(rhs, t.identifier("e"), false, false);
|
|
539
533
|
}
|
|
540
534
|
} else {
|
|
541
|
-
lhs =
|
|
542
|
-
rhs =
|
|
535
|
+
lhs = t.arrayPattern(classLocals);
|
|
536
|
+
rhs = t.memberExpression(rhs, t.identifier("c"), false, false);
|
|
543
537
|
}
|
|
544
538
|
}
|
|
545
|
-
return
|
|
539
|
+
return t.assignmentExpression("=", lhs, rhs);
|
|
546
540
|
}
|
|
547
|
-
function
|
|
541
|
+
export default function ({
|
|
548
542
|
assertVersion,
|
|
549
543
|
assumption
|
|
550
544
|
}, {
|
|
@@ -562,7 +556,7 @@ function _default({
|
|
|
562
556
|
const constantSuper = (_assumption = assumption("constantSuper")) != null ? _assumption : loose;
|
|
563
557
|
return {
|
|
564
558
|
name: "proposal-decorators",
|
|
565
|
-
inherits:
|
|
559
|
+
inherits: syntaxDecorators,
|
|
566
560
|
visitor: {
|
|
567
561
|
"ExportNamedDeclaration|ExportDefaultDeclaration"(path) {
|
|
568
562
|
var _declaration$decorato;
|
|
@@ -570,7 +564,7 @@ function _default({
|
|
|
570
564
|
declaration
|
|
571
565
|
} = path.node;
|
|
572
566
|
if ((declaration == null ? void 0 : declaration.type) === "ClassDeclaration" && ((_declaration$decorato = declaration.decorators) == null ? void 0 : _declaration$decorato.length) > 0) {
|
|
573
|
-
(
|
|
567
|
+
splitExportDeclaration(path);
|
|
574
568
|
}
|
|
575
569
|
},
|
|
576
570
|
Class(path, state) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["incrementId","id","idx","length","unshift","current","createPrivateUidGeneratorForClass","classPath","currentPrivateId","privateNames","Set","traverse","PrivateName","path","add","node","name","reifiedId","String","fromCharCode","has","t","privateName","identifier","createLazyPrivateUidGeneratorForClass","generator","replaceClassWithVar","type","varId","scope","generateUidIdentifierBasedOnNode","classId","rename","insertBefore","variableDeclaration","variableDeclarator","get","replaceWith","cloneNode","className","parent","generateDeclaredUidIdentifier","parentPath","newClassExpr","classExpression","superClass","body","newPath","sequenceExpression","generateClassProperty","key","value","isStatic","classPrivateProperty","undefined","classProperty","addProxyAccessorsFor","element","originalKey","targetKey","isComputed","static","getterBody","blockStatement","returnStatement","memberExpression","thisExpression","setterBody","expressionStatement","assignmentExpression","getter","setter","classPrivateMethod","classMethod","insertAfter","extractProxyAccessorsFor","version","template","expression","ast","FIELD","ACCESSOR","METHOD","GETTER","SETTER","STATIC","getElementKind","kind","isDecoratorInfo","info","filteredOrderedDecoratorInfo","filtered","filter","el","generateDecorationExprs","arrayExpression","map","decs","decorators","numericLiteral","privateMethods","extractElementLocalAssignments","decorationInfo","localIds","locals","Array","isArray","push","addCallAccessorsFor","getId","setId","callExpression","isNotTsParameter","movePrivateAccessor","methodLocalVar","params","block","isClassDecoratableElementPath","staticBlockToIIFE","arrowFunctionExpression","maybeSequenceExpression","exprs","unaryExpression","transformClass","state","constantSuper","classDecorators","hasElementDecorators","generateClassPrivateUid","computed","newId","valueNode","newField","elementDecoratorInfo","firstFieldPath","constructorPath","requiresProtoInit","requiresStaticInit","decoratedPrivateMethods","protoInitLocal","staticInitLocal","classInitLocal","classIdLocal","assignments","scopeParent","memoiseExpression","hint","localEvaluatedId","classDecorator","generateUidIdentifier","lastInstancePrivateName","needsInstancePrivateBrandCheck","hasDecorators","decoratorPath","isPrivate","isClassPrivateProperty","isClassMethod","newFieldInitId","newValue","initId","valuePath","v","replaceSupers","ReplaceSupers","methodPath","objectRef","superRef","file","refToPreserve","replace","async","isAsync","functionExpression","remove","nameExpr","stringLiteral","d","elementDecorations","classDecorations","elementLocals","protoInitCall","CallExpression","exit","isSuper","skip","super","spreadElement","restElement","size","parentParentPath","left","buildCodeFrameError","classLocals","classInitInjected","classInitCall","originalClass","statics","staticBlocks","forEach","isStaticBlock","isProperty","isClassProperty","isClassPrivateMethod","allValues","staticsClass","addHelper","staticBlock","toStatement","constructorBody","newExpr","newExpression","arguments","createLocalsAssignment","Boolean","expr","crawl","maybePrivateBranName","lhs","rhs","args","availableHelper","arrayPattern","objectPattern","objectProperty","assertVersion","assumption","loose","VISITED","WeakSet","inherits","syntaxDecorators","visitor","declaration","splitExportDeclaration","Class"],"sources":["../src/transformer-2023-01.ts"],"sourcesContent":["import type { NodePath, Scope } from \"@babel/traverse\";\nimport { types as t, template } from \"@babel/core\";\nimport syntaxDecorators from \"@babel/plugin-syntax-decorators\";\nimport ReplaceSupers from \"@babel/helper-replace-supers\";\nimport splitExportDeclaration from \"@babel/helper-split-export-declaration\";\nimport * as charCodes from \"charcodes\";\nimport type { PluginAPI, PluginObject, PluginPass } from \"@babel/core\";\nimport type { Options } from \"./index\";\n\ntype ClassDecoratableElement =\n | t.ClassMethod\n | t.ClassPrivateMethod\n | t.ClassProperty\n | t.ClassPrivateProperty\n | t.ClassAccessorProperty;\n\ntype ClassElement =\n | ClassDecoratableElement\n | t.TSDeclareMethod\n | t.TSIndexSignature\n | t.StaticBlock;\n\ntype DecoratorVersionKind = \"2023-01\" | \"2022-03\" | \"2021-12\";\n\nfunction incrementId(id: number[], idx = id.length - 1): void {\n // If index is -1, id needs an additional character, unshift A\n if (idx === -1) {\n id.unshift(charCodes.uppercaseA);\n return;\n }\n\n const current = id[idx];\n\n if (current === charCodes.uppercaseZ) {\n // if current is Z, skip to a\n id[idx] = charCodes.lowercaseA;\n } else if (current === charCodes.lowercaseZ) {\n // if current is z, reset to A and carry the 1\n id[idx] = charCodes.uppercaseA;\n incrementId(id, idx - 1);\n } else {\n // else, increment by one\n id[idx] = current + 1;\n }\n}\n\n/**\n * Generates a new private name that is unique to the given class. This can be\n * used to create extra class fields and methods for the implementation, while\n * keeping the length of those names as small as possible. This is important for\n * minification purposes (though private names can generally be minified,\n * transpilations and polyfills cannot yet).\n */\nfunction createPrivateUidGeneratorForClass(\n classPath: NodePath<t.ClassDeclaration | t.ClassExpression>,\n): () => t.PrivateName {\n const currentPrivateId: number[] = [];\n const privateNames = new Set<string>();\n\n classPath.traverse({\n PrivateName(path) {\n privateNames.add(path.node.id.name);\n },\n });\n\n return (): t.PrivateName => {\n let reifiedId;\n do {\n incrementId(currentPrivateId);\n reifiedId = String.fromCharCode(...currentPrivateId);\n } while (privateNames.has(reifiedId));\n\n return t.privateName(t.identifier(reifiedId));\n };\n}\n\n/**\n * Wraps the above generator function so that it's run lazily the first time\n * it's actually required. Several types of decoration do not require this, so it\n * saves iterating the class elements an additional time and allocating the space\n * for the Sets of element names.\n */\nfunction createLazyPrivateUidGeneratorForClass(\n classPath: NodePath<t.ClassDeclaration | t.ClassExpression>,\n): () => t.PrivateName {\n let generator: () => t.PrivateName;\n\n return (): t.PrivateName => {\n if (!generator) {\n generator = createPrivateUidGeneratorForClass(classPath);\n }\n\n return generator();\n };\n}\n\n/**\n * Takes a class definition and replaces it with an equivalent class declaration\n * which is then assigned to a local variable. This allows us to reassign the\n * local variable with the decorated version of the class. The class definition\n * retains its original name so that `toString` is not affected, other\n * references to the class are renamed instead.\n */\nfunction replaceClassWithVar(\n path: NodePath<t.ClassDeclaration | t.ClassExpression>,\n): [t.Identifier, NodePath<t.ClassDeclaration | t.ClassExpression>] {\n if (path.type === \"ClassDeclaration\") {\n const varId = path.scope.generateUidIdentifierBasedOnNode(path.node.id);\n const classId = t.identifier(path.node.id.name);\n\n path.scope.rename(classId.name, varId.name);\n\n path.insertBefore(\n t.variableDeclaration(\"let\", [t.variableDeclarator(varId)]),\n );\n path.get(\"id\").replaceWith(classId);\n\n return [t.cloneNode(varId), path];\n } else {\n let className: string;\n let varId: t.Identifier;\n\n if (path.node.id) {\n className = path.node.id.name;\n varId = path.scope.parent.generateDeclaredUidIdentifier(className);\n path.scope.rename(className, varId.name);\n } else if (\n path.parentPath.node.type === \"VariableDeclarator\" &&\n path.parentPath.node.id.type === \"Identifier\"\n ) {\n className = path.parentPath.node.id.name;\n varId = path.scope.parent.generateDeclaredUidIdentifier(className);\n } else {\n varId =\n path.scope.parent.generateDeclaredUidIdentifier(\"decorated_class\");\n }\n\n const newClassExpr = t.classExpression(\n className && t.identifier(className),\n path.node.superClass,\n path.node.body,\n );\n\n const [newPath] = path.replaceWith(\n t.sequenceExpression([newClassExpr, varId]),\n );\n\n return [\n t.cloneNode(varId),\n newPath.get(\"expressions.0\") as NodePath<t.ClassExpression>,\n ];\n }\n}\n\nfunction generateClassProperty(\n key: t.PrivateName | t.Identifier,\n value: t.Expression | undefined,\n isStatic: boolean,\n): t.ClassPrivateProperty | t.ClassProperty {\n if (key.type === \"PrivateName\") {\n return t.classPrivateProperty(key, value, undefined, isStatic);\n } else {\n return t.classProperty(key, value, undefined, undefined, isStatic);\n }\n}\n\nfunction addProxyAccessorsFor(\n element: NodePath<ClassDecoratableElement>,\n originalKey: t.PrivateName | t.Expression,\n targetKey: t.PrivateName,\n isComputed = false,\n): void {\n const { static: isStatic } = element.node;\n\n const getterBody = t.blockStatement([\n t.returnStatement(\n t.memberExpression(t.thisExpression(), t.cloneNode(targetKey)),\n ),\n ]);\n\n const setterBody = t.blockStatement([\n t.expressionStatement(\n t.assignmentExpression(\n \"=\",\n t.memberExpression(t.thisExpression(), t.cloneNode(targetKey)),\n t.identifier(\"v\"),\n ),\n ),\n ]);\n\n let getter: t.ClassMethod | t.ClassPrivateMethod,\n setter: t.ClassMethod | t.ClassPrivateMethod;\n\n if (originalKey.type === \"PrivateName\") {\n getter = t.classPrivateMethod(\n \"get\",\n t.cloneNode(originalKey),\n [],\n getterBody,\n isStatic,\n );\n setter = t.classPrivateMethod(\n \"set\",\n t.cloneNode(originalKey),\n [t.identifier(\"v\")],\n setterBody,\n isStatic,\n );\n } else {\n getter = t.classMethod(\n \"get\",\n t.cloneNode(originalKey),\n [],\n getterBody,\n isComputed,\n isStatic,\n );\n setter = t.classMethod(\n \"set\",\n t.cloneNode(originalKey),\n [t.identifier(\"v\")],\n setterBody,\n isComputed,\n isStatic,\n );\n }\n\n element.insertAfter(setter);\n element.insertAfter(getter);\n}\n\nfunction extractProxyAccessorsFor(\n targetKey: t.PrivateName,\n version: DecoratorVersionKind,\n): (t.FunctionExpression | t.ArrowFunctionExpression)[] {\n if (version !== \"2023-01\") {\n return [\n template.expression.ast`\n function () {\n return this.${t.cloneNode(targetKey)};\n }\n ` as t.FunctionExpression,\n template.expression.ast`\n function (value) {\n this.${t.cloneNode(targetKey)} = value;\n }\n ` as t.FunctionExpression,\n ];\n }\n return [\n template.expression.ast`\n o => o.${t.cloneNode(targetKey)}\n ` as t.ArrowFunctionExpression,\n template.expression.ast`\n (o, v) => o.${t.cloneNode(targetKey)} = v\n ` as t.ArrowFunctionExpression,\n ];\n}\n\nconst FIELD = 0;\nconst ACCESSOR = 1;\nconst METHOD = 2;\nconst GETTER = 3;\nconst SETTER = 4;\n\nconst STATIC = 5;\n\nfunction getElementKind(element: NodePath<ClassDecoratableElement>): number {\n switch (element.node.type) {\n case \"ClassProperty\":\n case \"ClassPrivateProperty\":\n return FIELD;\n case \"ClassAccessorProperty\":\n return ACCESSOR;\n case \"ClassMethod\":\n case \"ClassPrivateMethod\":\n if (element.node.kind === \"get\") {\n return GETTER;\n } else if (element.node.kind === \"set\") {\n return SETTER;\n } else {\n return METHOD;\n }\n }\n}\n\n// Information about the decorators applied to an element\ninterface DecoratorInfo {\n // The expressions of the decorators themselves\n decorators: t.Expression[];\n\n // The kind of the decorated value, matches the kind value passed to applyDecs\n kind: number;\n\n // whether or not the field is static\n isStatic: boolean;\n\n // The name of the decorator\n name: t.StringLiteral | t.Expression;\n\n privateMethods:\n | (t.FunctionExpression | t.ArrowFunctionExpression)[]\n | undefined;\n\n // The names of local variables that will be used/returned from the decoration\n locals: t.Identifier | t.Identifier[] | undefined;\n}\n\n// Information about a computed property key. These must be evaluated\n// interspersed with decorator expressions, which is why they get added to the\n// array of DecoratorInfos later on.\ninterface ComputedPropInfo {\n localComputedNameId: t.Identifier;\n keyNode: t.Expression;\n}\n\nfunction isDecoratorInfo(\n info: DecoratorInfo | ComputedPropInfo,\n): info is DecoratorInfo {\n return \"decorators\" in info;\n}\n\nfunction filteredOrderedDecoratorInfo(\n info: (DecoratorInfo | ComputedPropInfo)[],\n): DecoratorInfo[] {\n const filtered = info.filter(isDecoratorInfo);\n\n return [\n ...filtered.filter(\n el => el.isStatic && el.kind >= ACCESSOR && el.kind <= SETTER,\n ),\n ...filtered.filter(\n el => !el.isStatic && el.kind >= ACCESSOR && el.kind <= SETTER,\n ),\n ...filtered.filter(el => el.isStatic && el.kind === FIELD),\n ...filtered.filter(el => !el.isStatic && el.kind === FIELD),\n ];\n}\n\nfunction generateDecorationExprs(\n info: (DecoratorInfo | ComputedPropInfo)[],\n): t.ArrayExpression {\n return t.arrayExpression(\n filteredOrderedDecoratorInfo(info).map(el => {\n const decs =\n el.decorators.length > 1\n ? t.arrayExpression(el.decorators)\n : el.decorators[0];\n\n const kind = el.isStatic ? el.kind + STATIC : el.kind;\n\n return t.arrayExpression([\n decs,\n t.numericLiteral(kind),\n el.name,\n ...(el.privateMethods || []),\n ]);\n }),\n );\n}\n\nfunction extractElementLocalAssignments(\n decorationInfo: (DecoratorInfo | ComputedPropInfo)[],\n) {\n const localIds: t.Identifier[] = [];\n\n for (const el of filteredOrderedDecoratorInfo(decorationInfo)) {\n const { locals } = el;\n\n if (Array.isArray(locals)) {\n localIds.push(...locals);\n } else if (locals !== undefined) {\n localIds.push(locals);\n }\n }\n\n return localIds;\n}\n\nfunction addCallAccessorsFor(\n element: NodePath,\n key: t.PrivateName,\n getId: t.Identifier,\n setId: t.Identifier,\n) {\n element.insertAfter(\n t.classPrivateMethod(\n \"get\",\n t.cloneNode(key),\n [],\n t.blockStatement([\n t.returnStatement(\n t.callExpression(t.cloneNode(getId), [t.thisExpression()]),\n ),\n ]),\n ),\n );\n\n element.insertAfter(\n t.classPrivateMethod(\n \"set\",\n t.cloneNode(key),\n [t.identifier(\"v\")],\n t.blockStatement([\n t.expressionStatement(\n t.callExpression(t.cloneNode(setId), [\n t.thisExpression(),\n t.identifier(\"v\"),\n ]),\n ),\n ]),\n ),\n );\n}\n\nfunction isNotTsParameter(\n node: t.Identifier | t.Pattern | t.RestElement | t.TSParameterProperty,\n): node is t.Identifier | t.Pattern | t.RestElement {\n return node.type !== \"TSParameterProperty\";\n}\n\nfunction movePrivateAccessor(\n element: NodePath<t.ClassPrivateMethod>,\n key: t.PrivateName,\n methodLocalVar: t.Identifier,\n isStatic: boolean,\n) {\n let params: (t.Identifier | t.RestElement)[];\n let block: t.Statement[];\n\n if (element.node.kind === \"set\") {\n params = [t.identifier(\"v\")];\n block = [\n t.expressionStatement(\n t.callExpression(methodLocalVar, [\n t.thisExpression(),\n t.identifier(\"v\"),\n ]),\n ),\n ];\n } else {\n params = [];\n block = [\n t.returnStatement(t.callExpression(methodLocalVar, [t.thisExpression()])),\n ];\n }\n\n element.replaceWith(\n t.classPrivateMethod(\n element.node.kind,\n t.cloneNode(key),\n params,\n t.blockStatement(block),\n isStatic,\n ),\n );\n}\n\nfunction isClassDecoratableElementPath(\n path: NodePath<ClassElement>,\n): path is NodePath<ClassDecoratableElement> {\n const { type } = path;\n\n return (\n type !== \"TSDeclareMethod\" &&\n type !== \"TSIndexSignature\" &&\n type !== \"StaticBlock\"\n );\n}\n\nfunction staticBlockToIIFE(block: t.StaticBlock) {\n return t.callExpression(\n t.arrowFunctionExpression([], t.blockStatement(block.body)),\n [],\n );\n}\n\nfunction maybeSequenceExpression(exprs: t.Expression[]) {\n if (exprs.length === 0) return t.unaryExpression(\"void\", t.numericLiteral(0));\n if (exprs.length === 1) return exprs[0];\n return t.sequenceExpression(exprs);\n}\n\nfunction transformClass(\n path: NodePath<t.ClassExpression | t.ClassDeclaration>,\n state: PluginPass,\n constantSuper: boolean,\n version: DecoratorVersionKind,\n): NodePath {\n const body = path.get(\"body.body\");\n\n const classDecorators = path.node.decorators;\n let hasElementDecorators = false;\n\n const generateClassPrivateUid = createLazyPrivateUidGeneratorForClass(path);\n\n // Iterate over the class to see if we need to decorate it, and also to\n // transform simple auto accessors which are not decorated\n for (const element of body) {\n if (!isClassDecoratableElementPath(element)) {\n continue;\n }\n\n if (element.node.decorators && element.node.decorators.length > 0) {\n hasElementDecorators = true;\n } else if (element.node.type === \"ClassAccessorProperty\") {\n const { key, value, static: isStatic, computed } = element.node;\n\n const newId = generateClassPrivateUid();\n\n const valueNode = value ? t.cloneNode(value) : undefined;\n\n const newField = generateClassProperty(newId, valueNode, isStatic);\n\n const [newPath] = element.replaceWith(newField);\n addProxyAccessorsFor(newPath, key, newId, computed);\n }\n }\n\n // If nothing is decorated, return\n if (!classDecorators && !hasElementDecorators) return;\n\n const elementDecoratorInfo: (DecoratorInfo | ComputedPropInfo)[] = [];\n\n // The initializer of the first non-static field will be injected with the protoInit call\n let firstFieldPath:\n | NodePath<t.ClassProperty | t.ClassPrivateProperty>\n | undefined;\n let constructorPath: NodePath<t.ClassMethod> | undefined;\n let requiresProtoInit = false;\n let requiresStaticInit = false;\n const decoratedPrivateMethods = new Set<string>();\n\n let protoInitLocal: t.Identifier,\n staticInitLocal: t.Identifier,\n classInitLocal: t.Identifier,\n classIdLocal: t.Identifier;\n const assignments: t.AssignmentExpression[] = [];\n const scopeParent: Scope = path.scope.parent;\n\n const memoiseExpression = (expression: t.Expression, hint: string) => {\n const localEvaluatedId = scopeParent.generateDeclaredUidIdentifier(hint);\n assignments.push(t.assignmentExpression(\"=\", localEvaluatedId, expression));\n return t.cloneNode(localEvaluatedId);\n };\n\n if (classDecorators) {\n classInitLocal = scopeParent.generateDeclaredUidIdentifier(\"initClass\");\n\n const [classId, classPath] = replaceClassWithVar(path);\n path = classPath;\n classIdLocal = classId;\n\n path.node.decorators = null;\n\n for (const classDecorator of classDecorators) {\n if (!scopeParent.isStatic(classDecorator.expression)) {\n classDecorator.expression = memoiseExpression(\n classDecorator.expression,\n \"dec\",\n );\n }\n }\n } else {\n if (!path.node.id) {\n path.node.id = path.scope.generateUidIdentifier(\"Class\");\n }\n classIdLocal = t.cloneNode(path.node.id);\n }\n\n let lastInstancePrivateName: t.PrivateName;\n let needsInstancePrivateBrandCheck = false;\n\n if (hasElementDecorators) {\n for (const element of body) {\n if (!isClassDecoratableElementPath(element)) {\n continue;\n }\n\n const { node } = element;\n const decorators = element.get(\"decorators\");\n\n const hasDecorators = Array.isArray(decorators) && decorators.length > 0;\n\n if (hasDecorators) {\n for (const decoratorPath of decorators) {\n if (!scopeParent.isStatic(decoratorPath.node.expression)) {\n decoratorPath.node.expression = memoiseExpression(\n decoratorPath.node.expression,\n \"dec\",\n );\n }\n }\n }\n\n const isComputed =\n \"computed\" in element.node && element.node.computed === true;\n if (isComputed) {\n if (!scopeParent.isStatic(node.key)) {\n node.key = memoiseExpression(node.key as t.Expression, \"computedKey\");\n }\n }\n\n const kind = getElementKind(element);\n const { key } = node;\n\n const isPrivate = key.type === \"PrivateName\";\n\n const isStatic = !!element.node.static;\n\n let name = \"computedKey\";\n\n if (isPrivate) {\n name = key.id.name;\n } else if (!isComputed && key.type === \"Identifier\") {\n name = key.name;\n }\n\n if (isPrivate && !isStatic) {\n if (hasDecorators) {\n needsInstancePrivateBrandCheck = true;\n }\n if (t.isClassPrivateProperty(node) || !lastInstancePrivateName) {\n lastInstancePrivateName = key;\n }\n }\n\n if (element.isClassMethod({ kind: \"constructor\" })) {\n constructorPath = element;\n }\n\n if (hasDecorators) {\n let locals: t.Identifier | t.Identifier[];\n let privateMethods: Array<\n t.FunctionExpression | t.ArrowFunctionExpression\n >;\n\n if (kind === ACCESSOR) {\n const { value } = element.node as t.ClassAccessorProperty;\n\n const params: t.Expression[] = [t.thisExpression()];\n\n if (value) {\n params.push(t.cloneNode(value));\n }\n\n const newId = generateClassPrivateUid();\n const newFieldInitId =\n element.scope.parent.generateDeclaredUidIdentifier(`init_${name}`);\n const newValue = t.callExpression(\n t.cloneNode(newFieldInitId),\n params,\n );\n\n const newField = generateClassProperty(newId, newValue, isStatic);\n const [newPath] = element.replaceWith(newField);\n\n if (isPrivate) {\n privateMethods = extractProxyAccessorsFor(newId, version);\n\n const getId = newPath.scope.parent.generateDeclaredUidIdentifier(\n `get_${name}`,\n );\n const setId = newPath.scope.parent.generateDeclaredUidIdentifier(\n `set_${name}`,\n );\n\n addCallAccessorsFor(newPath, key, getId, setId);\n\n locals = [newFieldInitId, getId, setId];\n } else {\n addProxyAccessorsFor(newPath, key, newId, isComputed);\n locals = newFieldInitId;\n }\n } else if (kind === FIELD) {\n const initId = element.scope.parent.generateDeclaredUidIdentifier(\n `init_${name}`,\n );\n const valuePath = (\n element as NodePath<t.ClassProperty | t.ClassPrivateProperty>\n ).get(\"value\");\n\n valuePath.replaceWith(\n t.callExpression(\n t.cloneNode(initId),\n [t.thisExpression(), valuePath.node].filter(v => v),\n ),\n );\n\n locals = initId;\n\n if (isPrivate) {\n privateMethods = extractProxyAccessorsFor(key, version);\n }\n } else if (isPrivate) {\n locals = element.scope.parent.generateDeclaredUidIdentifier(\n `call_${name}`,\n );\n\n const replaceSupers = new ReplaceSupers({\n constantSuper,\n methodPath: element as NodePath<t.ClassPrivateMethod>,\n objectRef: classIdLocal,\n superRef: path.node.superClass,\n file: state.file,\n refToPreserve: classIdLocal,\n });\n\n replaceSupers.replace();\n\n const {\n params,\n body,\n async: isAsync,\n } = element.node as t.ClassPrivateMethod;\n\n privateMethods = [\n t.functionExpression(\n undefined,\n params.filter(isNotTsParameter),\n body,\n isAsync,\n ),\n ];\n\n if (kind === GETTER || kind === SETTER) {\n movePrivateAccessor(\n element as NodePath<t.ClassPrivateMethod>,\n t.cloneNode(key),\n t.cloneNode(locals),\n isStatic,\n );\n } else {\n const node = element.node as t.ClassPrivateMethod;\n\n // Unshift\n path.node.body.body.unshift(\n t.classPrivateProperty(key, t.cloneNode(locals), [], node.static),\n );\n\n decoratedPrivateMethods.add(key.id.name);\n\n element.remove();\n }\n }\n\n let nameExpr: t.Expression;\n\n if (isComputed) {\n nameExpr = t.cloneNode(key as t.Expression);\n } else if (key.type === \"PrivateName\") {\n nameExpr = t.stringLiteral(key.id.name);\n } else if (key.type === \"Identifier\") {\n nameExpr = t.stringLiteral(key.name);\n } else {\n nameExpr = t.cloneNode(key as t.Expression);\n }\n\n elementDecoratorInfo.push({\n kind,\n decorators: decorators.map(d => d.node.expression),\n name: nameExpr,\n isStatic,\n privateMethods,\n locals,\n });\n\n if (kind !== FIELD) {\n if (isStatic) {\n requiresStaticInit = true;\n } else {\n requiresProtoInit = true;\n }\n }\n\n if (element.node) {\n element.node.decorators = null;\n }\n\n if (\n !firstFieldPath &&\n !isStatic &&\n (kind === FIELD || kind === ACCESSOR)\n ) {\n firstFieldPath = element as NodePath<\n t.ClassProperty | t.ClassPrivateProperty\n >;\n }\n }\n }\n }\n\n const elementDecorations = generateDecorationExprs(elementDecoratorInfo);\n const classDecorations = t.arrayExpression(\n (classDecorators || []).map(d => d.expression),\n );\n\n const elementLocals: t.Identifier[] =\n extractElementLocalAssignments(elementDecoratorInfo);\n\n if (requiresProtoInit) {\n protoInitLocal = scopeParent.generateDeclaredUidIdentifier(\"initProto\");\n elementLocals.push(protoInitLocal);\n\n const protoInitCall = t.callExpression(t.cloneNode(protoInitLocal), [\n t.thisExpression(),\n ]);\n\n if (firstFieldPath) {\n const value = firstFieldPath.get(\"value\");\n const body: t.Expression[] = [protoInitCall];\n\n if (value.node) {\n body.push(value.node);\n }\n\n value.replaceWith(t.sequenceExpression(body));\n } else if (constructorPath) {\n if (path.node.superClass) {\n path.traverse({\n CallExpression: {\n exit(path) {\n if (!path.get(\"callee\").isSuper()) return;\n\n path.replaceWith(\n t.callExpression(t.cloneNode(protoInitLocal), [path.node]),\n );\n\n path.skip();\n },\n },\n });\n } else {\n constructorPath.node.body.body.unshift(\n t.expressionStatement(protoInitCall),\n );\n }\n } else {\n const body: t.Statement[] = [t.expressionStatement(protoInitCall)];\n\n if (path.node.superClass) {\n body.unshift(\n t.expressionStatement(\n t.callExpression(t.super(), [\n t.spreadElement(t.identifier(\"args\")),\n ]),\n ),\n );\n }\n\n path.node.body.body.unshift(\n t.classMethod(\n \"constructor\",\n t.identifier(\"constructor\"),\n [t.restElement(t.identifier(\"args\"))],\n t.blockStatement(body),\n ),\n );\n }\n }\n\n if (requiresStaticInit) {\n staticInitLocal = scopeParent.generateDeclaredUidIdentifier(\"initStatic\");\n elementLocals.push(staticInitLocal);\n }\n\n if (decoratedPrivateMethods.size > 0) {\n path.traverse({\n PrivateName(path) {\n if (!decoratedPrivateMethods.has(path.node.id.name)) return;\n\n const parentPath = path.parentPath;\n const parentParentPath = parentPath.parentPath;\n\n if (\n // this.bar().#x = 123;\n (parentParentPath.node.type === \"AssignmentExpression\" &&\n parentParentPath.node.left === parentPath.node) ||\n // this.#x++;\n parentParentPath.node.type === \"UpdateExpression\" ||\n // ([...this.#x] = foo);\n parentParentPath.node.type === \"RestElement\" ||\n // ([this.#x] = foo);\n parentParentPath.node.type === \"ArrayPattern\" ||\n // ({ a: this.#x } = bar);\n (parentParentPath.node.type === \"ObjectProperty\" &&\n parentParentPath.node.value === parentPath.node &&\n parentParentPath.parentPath.type === \"ObjectPattern\") ||\n // for (this.#x of []);\n (parentParentPath.node.type === \"ForOfStatement\" &&\n parentParentPath.node.left === parentPath.node)\n ) {\n throw path.buildCodeFrameError(\n `Decorated private methods are not updatable, but \"#${path.node.id.name}\" is updated via this expression.`,\n );\n }\n },\n });\n }\n\n const classLocals: t.Identifier[] = [];\n let classInitInjected = false;\n const classInitCall =\n classInitLocal && t.callExpression(t.cloneNode(classInitLocal), []);\n\n const originalClass = path.node;\n\n if (classDecorators) {\n classLocals.push(classIdLocal, classInitLocal);\n const statics: (\n | t.ClassProperty\n | t.ClassPrivateProperty\n | t.ClassPrivateMethod\n )[] = [];\n let staticBlocks: t.StaticBlock[] = [];\n path.get(\"body.body\").forEach(element => {\n // Static blocks cannot be compiled to \"instance blocks\", but we can inline\n // them as IIFEs in the next property.\n if (element.isStaticBlock()) {\n staticBlocks.push(element.node);\n element.remove();\n return;\n }\n\n const isProperty =\n element.isClassProperty() || element.isClassPrivateProperty();\n\n if (\n (isProperty || element.isClassPrivateMethod()) &&\n element.node.static\n ) {\n if (isProperty && staticBlocks.length > 0) {\n const allValues: t.Expression[] = staticBlocks.map(staticBlockToIIFE);\n if (element.node.value) allValues.push(element.node.value);\n element.node.value = maybeSequenceExpression(allValues);\n staticBlocks = [];\n }\n\n element.node.static = false;\n statics.push(element.node);\n element.remove();\n }\n });\n\n if (statics.length > 0 || staticBlocks.length > 0) {\n const staticsClass = template.expression.ast`\n class extends ${state.addHelper(\"identity\")} {}\n ` as t.ClassExpression;\n staticsClass.body.body = [\n t.staticBlock([\n t.toStatement(originalClass, true) ||\n // If toStatement returns false, originalClass must be an anonymous ClassExpression,\n // because `export default @dec ...` has been handled in the export visitor before.\n t.expressionStatement(originalClass as t.ClassExpression),\n ]),\n ...statics,\n ];\n\n const constructorBody: t.Expression[] = [];\n\n const newExpr = t.newExpression(staticsClass, []);\n\n if (staticBlocks.length > 0) {\n constructorBody.push(...staticBlocks.map(staticBlockToIIFE));\n }\n if (classInitCall) {\n classInitInjected = true;\n constructorBody.push(classInitCall);\n }\n if (constructorBody.length > 0) {\n constructorBody.unshift(\n t.callExpression(t.super(), [t.cloneNode(classIdLocal)]),\n );\n\n staticsClass.body.body.push(\n t.classMethod(\n \"constructor\",\n t.identifier(\"constructor\"),\n [],\n t.blockStatement([\n t.expressionStatement(t.sequenceExpression(constructorBody)),\n ]),\n ),\n );\n } else {\n newExpr.arguments.push(t.cloneNode(classIdLocal));\n }\n\n path.replaceWith(newExpr);\n }\n }\n if (!classInitInjected && classInitCall) {\n path.node.body.body.push(\n t.staticBlock([t.expressionStatement(classInitCall)]),\n );\n }\n\n originalClass.body.body.unshift(\n t.staticBlock(\n [\n t.expressionStatement(\n createLocalsAssignment(\n elementLocals,\n classLocals,\n elementDecorations,\n classDecorations,\n needsInstancePrivateBrandCheck ? lastInstancePrivateName : null,\n state,\n version,\n ),\n ),\n requiresStaticInit &&\n t.expressionStatement(\n t.callExpression(t.cloneNode(staticInitLocal), [\n t.thisExpression(),\n ]),\n ),\n ].filter(Boolean),\n ),\n );\n\n // When path is a ClassExpression, path.insertBefore will convert `path`\n // into a SequenceExpression\n path.insertBefore(assignments.map(expr => t.expressionStatement(expr)));\n\n // Recrawl the scope to make sure new identifiers are properly synced\n path.scope.crawl();\n\n return path;\n}\n\nfunction createLocalsAssignment(\n elementLocals: t.Identifier[],\n classLocals: t.Identifier[],\n elementDecorations: t.ArrayExpression,\n classDecorations: t.ArrayExpression,\n maybePrivateBranName: t.PrivateName | null,\n state: PluginPass,\n version: DecoratorVersionKind,\n) {\n let lhs, rhs;\n const args: t.Expression[] = [\n t.thisExpression(),\n elementDecorations,\n classDecorations,\n ];\n // TODO(Babel 8): Only keep the else branch\n if (\n version === \"2021-12\" ||\n (version === \"2022-03\" && !state.availableHelper(\"applyDecs2203R\"))\n ) {\n lhs = t.arrayPattern([...elementLocals, ...classLocals]);\n rhs = t.callExpression(\n state.addHelper(version === \"2021-12\" ? \"applyDecs\" : \"applyDecs2203\"),\n args,\n );\n } else {\n // TODO(Babel 8): Only keep the if branch\n if (version === \"2023-01\") {\n if (maybePrivateBranName) {\n args.push(\n template.expression.ast`\n _ => ${t.cloneNode(maybePrivateBranName)} in _\n ` as t.ArrowFunctionExpression,\n );\n }\n rhs = t.callExpression(state.addHelper(\"applyDecs2301\"), args);\n } else {\n rhs = t.callExpression(state.addHelper(\"applyDecs2203R\"), args);\n }\n // optimize `{ c: [classLocals] } = applyapplyDecs2203R(...)` to\n // `[classLocals] = applyapplyDecs2203R(...).c`\n if (elementLocals.length > 0) {\n if (classLocals.length > 0) {\n lhs = t.objectPattern([\n t.objectProperty(t.identifier(\"e\"), t.arrayPattern(elementLocals)),\n t.objectProperty(t.identifier(\"c\"), t.arrayPattern(classLocals)),\n ]);\n } else {\n lhs = t.arrayPattern(elementLocals);\n rhs = t.memberExpression(rhs, t.identifier(\"e\"), false, false);\n }\n } else {\n // invariant: classLocals.length > 0\n lhs = t.arrayPattern(classLocals);\n rhs = t.memberExpression(rhs, t.identifier(\"c\"), false, false);\n }\n }\n return t.assignmentExpression(\"=\", lhs, rhs);\n}\n\nexport default function (\n { assertVersion, assumption }: PluginAPI,\n { loose }: Options,\n version: \"2023-01\" | \"2022-03\" | \"2021-12\",\n): PluginObject {\n if (version === \"2023-01\") {\n assertVersion(\"^7.21.0\");\n } else if (version === \"2021-12\") {\n assertVersion(\"^7.16.0\");\n } else {\n assertVersion(\"^7.19.0\");\n }\n\n const VISITED = new WeakSet<NodePath>();\n const constantSuper = assumption(\"constantSuper\") ?? loose;\n\n return {\n name: \"proposal-decorators\",\n inherits: syntaxDecorators,\n\n visitor: {\n \"ExportNamedDeclaration|ExportDefaultDeclaration\"(\n path: NodePath<t.ExportNamedDeclaration | t.ExportDefaultDeclaration>,\n ) {\n const { declaration } = path.node;\n if (\n declaration?.type === \"ClassDeclaration\" &&\n // When compiling class decorators we need to replace the class\n // binding, so we must split it in two separate declarations.\n declaration.decorators?.length > 0\n ) {\n splitExportDeclaration(path);\n }\n },\n\n Class(path, state) {\n if (VISITED.has(path)) return;\n\n const newPath = transformClass(path, state, constantSuper, version);\n if (newPath) VISITED.add(newPath);\n },\n },\n };\n}\n"],"mappings":";;;;;;AACA;AACA;AACA;AACA;AAoBA,SAASA,WAAW,CAACC,EAAY,EAAEC,GAAG,GAAGD,EAAE,CAACE,MAAM,GAAG,CAAC,EAAQ;EAE5D,IAAID,GAAG,KAAK,CAAC,CAAC,EAAE;IACdD,EAAE,CAACG,OAAO,IAAsB;IAChC;EACF;EAEA,MAAMC,OAAO,GAAGJ,EAAE,CAACC,GAAG,CAAC;EAEvB,IAAIG,OAAO,OAAyB,EAAE;IAEpCJ,EAAE,CAACC,GAAG,CAAC,KAAuB;EAChC,CAAC,MAAM,IAAIG,OAAO,QAAyB,EAAE;IAE3CJ,EAAE,CAACC,GAAG,CAAC,KAAuB;IAC9BF,WAAW,CAACC,EAAE,EAAEC,GAAG,GAAG,CAAC,CAAC;EAC1B,CAAC,MAAM;IAELD,EAAE,CAACC,GAAG,CAAC,GAAGG,OAAO,GAAG,CAAC;EACvB;AACF;AASA,SAASC,iCAAiC,CACxCC,SAA2D,EACtC;EACrB,MAAMC,gBAA0B,GAAG,EAAE;EACrC,MAAMC,YAAY,GAAG,IAAIC,GAAG,EAAU;EAEtCH,SAAS,CAACI,QAAQ,CAAC;IACjBC,WAAW,CAACC,IAAI,EAAE;MAChBJ,YAAY,CAACK,GAAG,CAACD,IAAI,CAACE,IAAI,CAACd,EAAE,CAACe,IAAI,CAAC;IACrC;EACF,CAAC,CAAC;EAEF,OAAO,MAAqB;IAC1B,IAAIC,SAAS;IACb,GAAG;MACDjB,WAAW,CAACQ,gBAAgB,CAAC;MAC7BS,SAAS,GAAGC,MAAM,CAACC,YAAY,CAAC,GAAGX,gBAAgB,CAAC;IACtD,CAAC,QAAQC,YAAY,CAACW,GAAG,CAACH,SAAS,CAAC;IAEpC,OAAOI,WAAC,CAACC,WAAW,CAACD,WAAC,CAACE,UAAU,CAACN,SAAS,CAAC,CAAC;EAC/C,CAAC;AACH;AAQA,SAASO,qCAAqC,CAC5CjB,SAA2D,EACtC;EACrB,IAAIkB,SAA8B;EAElC,OAAO,MAAqB;IAC1B,IAAI,CAACA,SAAS,EAAE;MACdA,SAAS,GAAGnB,iCAAiC,CAACC,SAAS,CAAC;IAC1D;IAEA,OAAOkB,SAAS,EAAE;EACpB,CAAC;AACH;AASA,SAASC,mBAAmB,CAC1Bb,IAAsD,EACY;EAClE,IAAIA,IAAI,CAACc,IAAI,KAAK,kBAAkB,EAAE;IACpC,MAAMC,KAAK,GAAGf,IAAI,CAACgB,KAAK,CAACC,gCAAgC,CAACjB,IAAI,CAACE,IAAI,CAACd,EAAE,CAAC;IACvE,MAAM8B,OAAO,GAAGV,WAAC,CAACE,UAAU,CAACV,IAAI,CAACE,IAAI,CAACd,EAAE,CAACe,IAAI,CAAC;IAE/CH,IAAI,CAACgB,KAAK,CAACG,MAAM,CAACD,OAAO,CAACf,IAAI,EAAEY,KAAK,CAACZ,IAAI,CAAC;IAE3CH,IAAI,CAACoB,YAAY,CACfZ,WAAC,CAACa,mBAAmB,CAAC,KAAK,EAAE,CAACb,WAAC,CAACc,kBAAkB,CAACP,KAAK,CAAC,CAAC,CAAC,CAC5D;IACDf,IAAI,CAACuB,GAAG,CAAC,IAAI,CAAC,CAACC,WAAW,CAACN,OAAO,CAAC;IAEnC,OAAO,CAACV,WAAC,CAACiB,SAAS,CAACV,KAAK,CAAC,EAAEf,IAAI,CAAC;EACnC,CAAC,MAAM;IACL,IAAI0B,SAAiB;IACrB,IAAIX,KAAmB;IAEvB,IAAIf,IAAI,CAACE,IAAI,CAACd,EAAE,EAAE;MAChBsC,SAAS,GAAG1B,IAAI,CAACE,IAAI,CAACd,EAAE,CAACe,IAAI;MAC7BY,KAAK,GAAGf,IAAI,CAACgB,KAAK,CAACW,MAAM,CAACC,6BAA6B,CAACF,SAAS,CAAC;MAClE1B,IAAI,CAACgB,KAAK,CAACG,MAAM,CAACO,SAAS,EAAEX,KAAK,CAACZ,IAAI,CAAC;IAC1C,CAAC,MAAM,IACLH,IAAI,CAAC6B,UAAU,CAAC3B,IAAI,CAACY,IAAI,KAAK,oBAAoB,IAClDd,IAAI,CAAC6B,UAAU,CAAC3B,IAAI,CAACd,EAAE,CAAC0B,IAAI,KAAK,YAAY,EAC7C;MACAY,SAAS,GAAG1B,IAAI,CAAC6B,UAAU,CAAC3B,IAAI,CAACd,EAAE,CAACe,IAAI;MACxCY,KAAK,GAAGf,IAAI,CAACgB,KAAK,CAACW,MAAM,CAACC,6BAA6B,CAACF,SAAS,CAAC;IACpE,CAAC,MAAM;MACLX,KAAK,GACHf,IAAI,CAACgB,KAAK,CAACW,MAAM,CAACC,6BAA6B,CAAC,iBAAiB,CAAC;IACtE;IAEA,MAAME,YAAY,GAAGtB,WAAC,CAACuB,eAAe,CACpCL,SAAS,IAAIlB,WAAC,CAACE,UAAU,CAACgB,SAAS,CAAC,EACpC1B,IAAI,CAACE,IAAI,CAAC8B,UAAU,EACpBhC,IAAI,CAACE,IAAI,CAAC+B,IAAI,CACf;IAED,MAAM,CAACC,OAAO,CAAC,GAAGlC,IAAI,CAACwB,WAAW,CAChChB,WAAC,CAAC2B,kBAAkB,CAAC,CAACL,YAAY,EAAEf,KAAK,CAAC,CAAC,CAC5C;IAED,OAAO,CACLP,WAAC,CAACiB,SAAS,CAACV,KAAK,CAAC,EAClBmB,OAAO,CAACX,GAAG,CAAC,eAAe,CAAC,CAC7B;EACH;AACF;AAEA,SAASa,qBAAqB,CAC5BC,GAAiC,EACjCC,KAA+B,EAC/BC,QAAiB,EACyB;EAC1C,IAAIF,GAAG,CAACvB,IAAI,KAAK,aAAa,EAAE;IAC9B,OAAON,WAAC,CAACgC,oBAAoB,CAACH,GAAG,EAAEC,KAAK,EAAEG,SAAS,EAAEF,QAAQ,CAAC;EAChE,CAAC,MAAM;IACL,OAAO/B,WAAC,CAACkC,aAAa,CAACL,GAAG,EAAEC,KAAK,EAAEG,SAAS,EAAEA,SAAS,EAAEF,QAAQ,CAAC;EACpE;AACF;AAEA,SAASI,oBAAoB,CAC3BC,OAA0C,EAC1CC,WAAyC,EACzCC,SAAwB,EACxBC,UAAU,GAAG,KAAK,EACZ;EACN,MAAM;IAAEC,MAAM,EAAET;EAAS,CAAC,GAAGK,OAAO,CAAC1C,IAAI;EAEzC,MAAM+C,UAAU,GAAGzC,WAAC,CAAC0C,cAAc,CAAC,CAClC1C,WAAC,CAAC2C,eAAe,CACf3C,WAAC,CAAC4C,gBAAgB,CAAC5C,WAAC,CAAC6C,cAAc,EAAE,EAAE7C,WAAC,CAACiB,SAAS,CAACqB,SAAS,CAAC,CAAC,CAC/D,CACF,CAAC;EAEF,MAAMQ,UAAU,GAAG9C,WAAC,CAAC0C,cAAc,CAAC,CAClC1C,WAAC,CAAC+C,mBAAmB,CACnB/C,WAAC,CAACgD,oBAAoB,CACpB,GAAG,EACHhD,WAAC,CAAC4C,gBAAgB,CAAC5C,WAAC,CAAC6C,cAAc,EAAE,EAAE7C,WAAC,CAACiB,SAAS,CAACqB,SAAS,CAAC,CAAC,EAC9DtC,WAAC,CAACE,UAAU,CAAC,GAAG,CAAC,CAClB,CACF,CACF,CAAC;EAEF,IAAI+C,MAA4C,EAC9CC,MAA4C;EAE9C,IAAIb,WAAW,CAAC/B,IAAI,KAAK,aAAa,EAAE;IACtC2C,MAAM,GAAGjD,WAAC,CAACmD,kBAAkB,CAC3B,KAAK,EACLnD,WAAC,CAACiB,SAAS,CAACoB,WAAW,CAAC,EACxB,EAAE,EACFI,UAAU,EACVV,QAAQ,CACT;IACDmB,MAAM,GAAGlD,WAAC,CAACmD,kBAAkB,CAC3B,KAAK,EACLnD,WAAC,CAACiB,SAAS,CAACoB,WAAW,CAAC,EACxB,CAACrC,WAAC,CAACE,UAAU,CAAC,GAAG,CAAC,CAAC,EACnB4C,UAAU,EACVf,QAAQ,CACT;EACH,CAAC,MAAM;IACLkB,MAAM,GAAGjD,WAAC,CAACoD,WAAW,CACpB,KAAK,EACLpD,WAAC,CAACiB,SAAS,CAACoB,WAAW,CAAC,EACxB,EAAE,EACFI,UAAU,EACVF,UAAU,EACVR,QAAQ,CACT;IACDmB,MAAM,GAAGlD,WAAC,CAACoD,WAAW,CACpB,KAAK,EACLpD,WAAC,CAACiB,SAAS,CAACoB,WAAW,CAAC,EACxB,CAACrC,WAAC,CAACE,UAAU,CAAC,GAAG,CAAC,CAAC,EACnB4C,UAAU,EACVP,UAAU,EACVR,QAAQ,CACT;EACH;EAEAK,OAAO,CAACiB,WAAW,CAACH,MAAM,CAAC;EAC3Bd,OAAO,CAACiB,WAAW,CAACJ,MAAM,CAAC;AAC7B;AAEA,SAASK,wBAAwB,CAC/BhB,SAAwB,EACxBiB,OAA6B,EACyB;EACtD,IAAIA,OAAO,KAAK,SAAS,EAAE;IACzB,OAAO,CACLC,cAAQ,CAACC,UAAU,CAACC,GAAI;AAC9B;AACA,wBAAwB1D,WAAC,CAACiB,SAAS,CAACqB,SAAS,CAAE;AAC/C;AACA,OAAO,EACDkB,cAAQ,CAACC,UAAU,CAACC,GAAI;AAC9B;AACA,iBAAiB1D,WAAC,CAACiB,SAAS,CAACqB,SAAS,CAAE;AACxC;AACA,OAAO,CACF;EACH;EACA,OAAO,CACLkB,cAAQ,CAACC,UAAU,CAACC,GAAI;AAC5B,eAAe1D,WAAC,CAACiB,SAAS,CAACqB,SAAS,CAAE;AACtC,KAAK,EACDkB,cAAQ,CAACC,UAAU,CAACC,GAAI;AAC5B,oBAAoB1D,WAAC,CAACiB,SAAS,CAACqB,SAAS,CAAE;AAC3C,KAAK,CACF;AACH;AAEA,MAAMqB,KAAK,GAAG,CAAC;AACf,MAAMC,QAAQ,GAAG,CAAC;AAClB,MAAMC,MAAM,GAAG,CAAC;AAChB,MAAMC,MAAM,GAAG,CAAC;AAChB,MAAMC,MAAM,GAAG,CAAC;AAEhB,MAAMC,MAAM,GAAG,CAAC;AAEhB,SAASC,cAAc,CAAC7B,OAA0C,EAAU;EAC1E,QAAQA,OAAO,CAAC1C,IAAI,CAACY,IAAI;IACvB,KAAK,eAAe;IACpB,KAAK,sBAAsB;MACzB,OAAOqD,KAAK;IACd,KAAK,uBAAuB;MAC1B,OAAOC,QAAQ;IACjB,KAAK,aAAa;IAClB,KAAK,oBAAoB;MACvB,IAAIxB,OAAO,CAAC1C,IAAI,CAACwE,IAAI,KAAK,KAAK,EAAE;QAC/B,OAAOJ,MAAM;MACf,CAAC,MAAM,IAAI1B,OAAO,CAAC1C,IAAI,CAACwE,IAAI,KAAK,KAAK,EAAE;QACtC,OAAOH,MAAM;MACf,CAAC,MAAM;QACL,OAAOF,MAAM;MACf;EAAC;AAEP;AAgCA,SAASM,eAAe,CACtBC,IAAsC,EACf;EACvB,OAAO,YAAY,IAAIA,IAAI;AAC7B;AAEA,SAASC,4BAA4B,CACnCD,IAA0C,EACzB;EACjB,MAAME,QAAQ,GAAGF,IAAI,CAACG,MAAM,CAACJ,eAAe,CAAC;EAE7C,OAAO,CACL,GAAGG,QAAQ,CAACC,MAAM,CAChBC,EAAE,IAAIA,EAAE,CAACzC,QAAQ,IAAIyC,EAAE,CAACN,IAAI,IAAIN,QAAQ,IAAIY,EAAE,CAACN,IAAI,IAAIH,MAAM,CAC9D,EACD,GAAGO,QAAQ,CAACC,MAAM,CAChBC,EAAE,IAAI,CAACA,EAAE,CAACzC,QAAQ,IAAIyC,EAAE,CAACN,IAAI,IAAIN,QAAQ,IAAIY,EAAE,CAACN,IAAI,IAAIH,MAAM,CAC/D,EACD,GAAGO,QAAQ,CAACC,MAAM,CAACC,EAAE,IAAIA,EAAE,CAACzC,QAAQ,IAAIyC,EAAE,CAACN,IAAI,KAAKP,KAAK,CAAC,EAC1D,GAAGW,QAAQ,CAACC,MAAM,CAACC,EAAE,IAAI,CAACA,EAAE,CAACzC,QAAQ,IAAIyC,EAAE,CAACN,IAAI,KAAKP,KAAK,CAAC,CAC5D;AACH;AAEA,SAASc,uBAAuB,CAC9BL,IAA0C,EACvB;EACnB,OAAOpE,WAAC,CAAC0E,eAAe,CACtBL,4BAA4B,CAACD,IAAI,CAAC,CAACO,GAAG,CAACH,EAAE,IAAI;IAC3C,MAAMI,IAAI,GACRJ,EAAE,CAACK,UAAU,CAAC/F,MAAM,GAAG,CAAC,GACpBkB,WAAC,CAAC0E,eAAe,CAACF,EAAE,CAACK,UAAU,CAAC,GAChCL,EAAE,CAACK,UAAU,CAAC,CAAC,CAAC;IAEtB,MAAMX,IAAI,GAAGM,EAAE,CAACzC,QAAQ,GAAGyC,EAAE,CAACN,IAAI,GAAGF,MAAM,GAAGQ,EAAE,CAACN,IAAI;IAErD,OAAOlE,WAAC,CAAC0E,eAAe,CAAC,CACvBE,IAAI,EACJ5E,WAAC,CAAC8E,cAAc,CAACZ,IAAI,CAAC,EACtBM,EAAE,CAAC7E,IAAI,EACP,IAAI6E,EAAE,CAACO,cAAc,IAAI,EAAE,CAAC,CAC7B,CAAC;EACJ,CAAC,CAAC,CACH;AACH;AAEA,SAASC,8BAA8B,CACrCC,cAAoD,EACpD;EACA,MAAMC,QAAwB,GAAG,EAAE;EAEnC,KAAK,MAAMV,EAAE,IAAIH,4BAA4B,CAACY,cAAc,CAAC,EAAE;IAC7D,MAAM;MAAEE;IAAO,CAAC,GAAGX,EAAE;IAErB,IAAIY,KAAK,CAACC,OAAO,CAACF,MAAM,CAAC,EAAE;MACzBD,QAAQ,CAACI,IAAI,CAAC,GAAGH,MAAM,CAAC;IAC1B,CAAC,MAAM,IAAIA,MAAM,KAAKlD,SAAS,EAAE;MAC/BiD,QAAQ,CAACI,IAAI,CAACH,MAAM,CAAC;IACvB;EACF;EAEA,OAAOD,QAAQ;AACjB;AAEA,SAASK,mBAAmB,CAC1BnD,OAAiB,EACjBP,GAAkB,EAClB2D,KAAmB,EACnBC,KAAmB,EACnB;EACArD,OAAO,CAACiB,WAAW,CACjBrD,WAAC,CAACmD,kBAAkB,CAClB,KAAK,EACLnD,WAAC,CAACiB,SAAS,CAACY,GAAG,CAAC,EAChB,EAAE,EACF7B,WAAC,CAAC0C,cAAc,CAAC,CACf1C,WAAC,CAAC2C,eAAe,CACf3C,WAAC,CAAC0F,cAAc,CAAC1F,WAAC,CAACiB,SAAS,CAACuE,KAAK,CAAC,EAAE,CAACxF,WAAC,CAAC6C,cAAc,EAAE,CAAC,CAAC,CAC3D,CACF,CAAC,CACH,CACF;EAEDT,OAAO,CAACiB,WAAW,CACjBrD,WAAC,CAACmD,kBAAkB,CAClB,KAAK,EACLnD,WAAC,CAACiB,SAAS,CAACY,GAAG,CAAC,EAChB,CAAC7B,WAAC,CAACE,UAAU,CAAC,GAAG,CAAC,CAAC,EACnBF,WAAC,CAAC0C,cAAc,CAAC,CACf1C,WAAC,CAAC+C,mBAAmB,CACnB/C,WAAC,CAAC0F,cAAc,CAAC1F,WAAC,CAACiB,SAAS,CAACwE,KAAK,CAAC,EAAE,CACnCzF,WAAC,CAAC6C,cAAc,EAAE,EAClB7C,WAAC,CAACE,UAAU,CAAC,GAAG,CAAC,CAClB,CAAC,CACH,CACF,CAAC,CACH,CACF;AACH;AAEA,SAASyF,gBAAgB,CACvBjG,IAAsE,EACpB;EAClD,OAAOA,IAAI,CAACY,IAAI,KAAK,qBAAqB;AAC5C;AAEA,SAASsF,mBAAmB,CAC1BxD,OAAuC,EACvCP,GAAkB,EAClBgE,cAA4B,EAC5B9D,QAAiB,EACjB;EACA,IAAI+D,MAAwC;EAC5C,IAAIC,KAAoB;EAExB,IAAI3D,OAAO,CAAC1C,IAAI,CAACwE,IAAI,KAAK,KAAK,EAAE;IAC/B4B,MAAM,GAAG,CAAC9F,WAAC,CAACE,UAAU,CAAC,GAAG,CAAC,CAAC;IAC5B6F,KAAK,GAAG,CACN/F,WAAC,CAAC+C,mBAAmB,CACnB/C,WAAC,CAAC0F,cAAc,CAACG,cAAc,EAAE,CAC/B7F,WAAC,CAAC6C,cAAc,EAAE,EAClB7C,WAAC,CAACE,UAAU,CAAC,GAAG,CAAC,CAClB,CAAC,CACH,CACF;EACH,CAAC,MAAM;IACL4F,MAAM,GAAG,EAAE;IACXC,KAAK,GAAG,CACN/F,WAAC,CAAC2C,eAAe,CAAC3C,WAAC,CAAC0F,cAAc,CAACG,cAAc,EAAE,CAAC7F,WAAC,CAAC6C,cAAc,EAAE,CAAC,CAAC,CAAC,CAC1E;EACH;EAEAT,OAAO,CAACpB,WAAW,CACjBhB,WAAC,CAACmD,kBAAkB,CAClBf,OAAO,CAAC1C,IAAI,CAACwE,IAAI,EACjBlE,WAAC,CAACiB,SAAS,CAACY,GAAG,CAAC,EAChBiE,MAAM,EACN9F,WAAC,CAAC0C,cAAc,CAACqD,KAAK,CAAC,EACvBhE,QAAQ,CACT,CACF;AACH;AAEA,SAASiE,6BAA6B,CACpCxG,IAA4B,EACe;EAC3C,MAAM;IAAEc;EAAK,CAAC,GAAGd,IAAI;EAErB,OACEc,IAAI,KAAK,iBAAiB,IAC1BA,IAAI,KAAK,kBAAkB,IAC3BA,IAAI,KAAK,aAAa;AAE1B;AAEA,SAAS2F,iBAAiB,CAACF,KAAoB,EAAE;EAC/C,OAAO/F,WAAC,CAAC0F,cAAc,CACrB1F,WAAC,CAACkG,uBAAuB,CAAC,EAAE,EAAElG,WAAC,CAAC0C,cAAc,CAACqD,KAAK,CAACtE,IAAI,CAAC,CAAC,EAC3D,EAAE,CACH;AACH;AAEA,SAAS0E,uBAAuB,CAACC,KAAqB,EAAE;EACtD,IAAIA,KAAK,CAACtH,MAAM,KAAK,CAAC,EAAE,OAAOkB,WAAC,CAACqG,eAAe,CAAC,MAAM,EAAErG,WAAC,CAAC8E,cAAc,CAAC,CAAC,CAAC,CAAC;EAC7E,IAAIsB,KAAK,CAACtH,MAAM,KAAK,CAAC,EAAE,OAAOsH,KAAK,CAAC,CAAC,CAAC;EACvC,OAAOpG,WAAC,CAAC2B,kBAAkB,CAACyE,KAAK,CAAC;AACpC;AAEA,SAASE,cAAc,CACrB9G,IAAsD,EACtD+G,KAAiB,EACjBC,aAAsB,EACtBjD,OAA6B,EACnB;EACV,MAAM9B,IAAI,GAAGjC,IAAI,CAACuB,GAAG,CAAC,WAAW,CAAC;EAElC,MAAM0F,eAAe,GAAGjH,IAAI,CAACE,IAAI,CAACmF,UAAU;EAC5C,IAAI6B,oBAAoB,GAAG,KAAK;EAEhC,MAAMC,uBAAuB,GAAGxG,qCAAqC,CAACX,IAAI,CAAC;EAI3E,KAAK,MAAM4C,OAAO,IAAIX,IAAI,EAAE;IAC1B,IAAI,CAACuE,6BAA6B,CAAC5D,OAAO,CAAC,EAAE;MAC3C;IACF;IAEA,IAAIA,OAAO,CAAC1C,IAAI,CAACmF,UAAU,IAAIzC,OAAO,CAAC1C,IAAI,CAACmF,UAAU,CAAC/F,MAAM,GAAG,CAAC,EAAE;MACjE4H,oBAAoB,GAAG,IAAI;IAC7B,CAAC,MAAM,IAAItE,OAAO,CAAC1C,IAAI,CAACY,IAAI,KAAK,uBAAuB,EAAE;MACxD,MAAM;QAAEuB,GAAG;QAAEC,KAAK;QAAEU,MAAM,EAAET,QAAQ;QAAE6E;MAAS,CAAC,GAAGxE,OAAO,CAAC1C,IAAI;MAE/D,MAAMmH,KAAK,GAAGF,uBAAuB,EAAE;MAEvC,MAAMG,SAAS,GAAGhF,KAAK,GAAG9B,WAAC,CAACiB,SAAS,CAACa,KAAK,CAAC,GAAGG,SAAS;MAExD,MAAM8E,QAAQ,GAAGnF,qBAAqB,CAACiF,KAAK,EAAEC,SAAS,EAAE/E,QAAQ,CAAC;MAElE,MAAM,CAACL,OAAO,CAAC,GAAGU,OAAO,CAACpB,WAAW,CAAC+F,QAAQ,CAAC;MAC/C5E,oBAAoB,CAACT,OAAO,EAAEG,GAAG,EAAEgF,KAAK,EAAED,QAAQ,CAAC;IACrD;EACF;EAGA,IAAI,CAACH,eAAe,IAAI,CAACC,oBAAoB,EAAE;EAE/C,MAAMM,oBAA0D,GAAG,EAAE;EAGrE,IAAIC,cAES;EACb,IAAIC,eAAoD;EACxD,IAAIC,iBAAiB,GAAG,KAAK;EAC7B,IAAIC,kBAAkB,GAAG,KAAK;EAC9B,MAAMC,uBAAuB,GAAG,IAAIhI,GAAG,EAAU;EAEjD,IAAIiI,cAA4B,EAC9BC,eAA6B,EAC7BC,cAA4B,EAC5BC,YAA0B;EAC5B,MAAMC,WAAqC,GAAG,EAAE;EAChD,MAAMC,WAAkB,GAAGnI,IAAI,CAACgB,KAAK,CAACW,MAAM;EAE5C,MAAMyG,iBAAiB,GAAG,CAACnE,UAAwB,EAAEoE,IAAY,KAAK;IACpE,MAAMC,gBAAgB,GAAGH,WAAW,CAACvG,6BAA6B,CAACyG,IAAI,CAAC;IACxEH,WAAW,CAACpC,IAAI,CAACtF,WAAC,CAACgD,oBAAoB,CAAC,GAAG,EAAE8E,gBAAgB,EAAErE,UAAU,CAAC,CAAC;IAC3E,OAAOzD,WAAC,CAACiB,SAAS,CAAC6G,gBAAgB,CAAC;EACtC,CAAC;EAED,IAAIrB,eAAe,EAAE;IACnBe,cAAc,GAAGG,WAAW,CAACvG,6BAA6B,CAAC,WAAW,CAAC;IAEvE,MAAM,CAACV,OAAO,EAAExB,SAAS,CAAC,GAAGmB,mBAAmB,CAACb,IAAI,CAAC;IACtDA,IAAI,GAAGN,SAAS;IAChBuI,YAAY,GAAG/G,OAAO;IAEtBlB,IAAI,CAACE,IAAI,CAACmF,UAAU,GAAG,IAAI;IAE3B,KAAK,MAAMkD,cAAc,IAAItB,eAAe,EAAE;MAC5C,IAAI,CAACkB,WAAW,CAAC5F,QAAQ,CAACgG,cAAc,CAACtE,UAAU,CAAC,EAAE;QACpDsE,cAAc,CAACtE,UAAU,GAAGmE,iBAAiB,CAC3CG,cAAc,CAACtE,UAAU,EACzB,KAAK,CACN;MACH;IACF;EACF,CAAC,MAAM;IACL,IAAI,CAACjE,IAAI,CAACE,IAAI,CAACd,EAAE,EAAE;MACjBY,IAAI,CAACE,IAAI,CAACd,EAAE,GAAGY,IAAI,CAACgB,KAAK,CAACwH,qBAAqB,CAAC,OAAO,CAAC;IAC1D;IACAP,YAAY,GAAGzH,WAAC,CAACiB,SAAS,CAACzB,IAAI,CAACE,IAAI,CAACd,EAAE,CAAC;EAC1C;EAEA,IAAIqJ,uBAAsC;EAC1C,IAAIC,8BAA8B,GAAG,KAAK;EAE1C,IAAIxB,oBAAoB,EAAE;IACxB,KAAK,MAAMtE,OAAO,IAAIX,IAAI,EAAE;MAC1B,IAAI,CAACuE,6BAA6B,CAAC5D,OAAO,CAAC,EAAE;QAC3C;MACF;MAEA,MAAM;QAAE1C;MAAK,CAAC,GAAG0C,OAAO;MACxB,MAAMyC,UAAU,GAAGzC,OAAO,CAACrB,GAAG,CAAC,YAAY,CAAC;MAE5C,MAAMoH,aAAa,GAAG/C,KAAK,CAACC,OAAO,CAACR,UAAU,CAAC,IAAIA,UAAU,CAAC/F,MAAM,GAAG,CAAC;MAExE,IAAIqJ,aAAa,EAAE;QACjB,KAAK,MAAMC,aAAa,IAAIvD,UAAU,EAAE;UACtC,IAAI,CAAC8C,WAAW,CAAC5F,QAAQ,CAACqG,aAAa,CAAC1I,IAAI,CAAC+D,UAAU,CAAC,EAAE;YACxD2E,aAAa,CAAC1I,IAAI,CAAC+D,UAAU,GAAGmE,iBAAiB,CAC/CQ,aAAa,CAAC1I,IAAI,CAAC+D,UAAU,EAC7B,KAAK,CACN;UACH;QACF;MACF;MAEA,MAAMlB,UAAU,GACd,UAAU,IAAIH,OAAO,CAAC1C,IAAI,IAAI0C,OAAO,CAAC1C,IAAI,CAACkH,QAAQ,KAAK,IAAI;MAC9D,IAAIrE,UAAU,EAAE;QACd,IAAI,CAACoF,WAAW,CAAC5F,QAAQ,CAACrC,IAAI,CAACmC,GAAG,CAAC,EAAE;UACnCnC,IAAI,CAACmC,GAAG,GAAG+F,iBAAiB,CAAClI,IAAI,CAACmC,GAAG,EAAkB,aAAa,CAAC;QACvE;MACF;MAEA,MAAMqC,IAAI,GAAGD,cAAc,CAAC7B,OAAO,CAAC;MACpC,MAAM;QAAEP;MAAI,CAAC,GAAGnC,IAAI;MAEpB,MAAM2I,SAAS,GAAGxG,GAAG,CAACvB,IAAI,KAAK,aAAa;MAE5C,MAAMyB,QAAQ,GAAG,CAAC,CAACK,OAAO,CAAC1C,IAAI,CAAC8C,MAAM;MAEtC,IAAI7C,IAAI,GAAG,aAAa;MAExB,IAAI0I,SAAS,EAAE;QACb1I,IAAI,GAAGkC,GAAG,CAACjD,EAAE,CAACe,IAAI;MACpB,CAAC,MAAM,IAAI,CAAC4C,UAAU,IAAIV,GAAG,CAACvB,IAAI,KAAK,YAAY,EAAE;QACnDX,IAAI,GAAGkC,GAAG,CAAClC,IAAI;MACjB;MAEA,IAAI0I,SAAS,IAAI,CAACtG,QAAQ,EAAE;QAC1B,IAAIoG,aAAa,EAAE;UACjBD,8BAA8B,GAAG,IAAI;QACvC;QACA,IAAIlI,WAAC,CAACsI,sBAAsB,CAAC5I,IAAI,CAAC,IAAI,CAACuI,uBAAuB,EAAE;UAC9DA,uBAAuB,GAAGpG,GAAG;QAC/B;MACF;MAEA,IAAIO,OAAO,CAACmG,aAAa,CAAC;QAAErE,IAAI,EAAE;MAAc,CAAC,CAAC,EAAE;QAClDgD,eAAe,GAAG9E,OAAO;MAC3B;MAEA,IAAI+F,aAAa,EAAE;QACjB,IAAIhD,MAAqC;QACzC,IAAIJ,cAEH;QAED,IAAIb,IAAI,KAAKN,QAAQ,EAAE;UACrB,MAAM;YAAE9B;UAAM,CAAC,GAAGM,OAAO,CAAC1C,IAA+B;UAEzD,MAAMoG,MAAsB,GAAG,CAAC9F,WAAC,CAAC6C,cAAc,EAAE,CAAC;UAEnD,IAAIf,KAAK,EAAE;YACTgE,MAAM,CAACR,IAAI,CAACtF,WAAC,CAACiB,SAAS,CAACa,KAAK,CAAC,CAAC;UACjC;UAEA,MAAM+E,KAAK,GAAGF,uBAAuB,EAAE;UACvC,MAAM6B,cAAc,GAClBpG,OAAO,CAAC5B,KAAK,CAACW,MAAM,CAACC,6BAA6B,CAAE,QAAOzB,IAAK,EAAC,CAAC;UACpE,MAAM8I,QAAQ,GAAGzI,WAAC,CAAC0F,cAAc,CAC/B1F,WAAC,CAACiB,SAAS,CAACuH,cAAc,CAAC,EAC3B1C,MAAM,CACP;UAED,MAAMiB,QAAQ,GAAGnF,qBAAqB,CAACiF,KAAK,EAAE4B,QAAQ,EAAE1G,QAAQ,CAAC;UACjE,MAAM,CAACL,OAAO,CAAC,GAAGU,OAAO,CAACpB,WAAW,CAAC+F,QAAQ,CAAC;UAE/C,IAAIsB,SAAS,EAAE;YACbtD,cAAc,GAAGzB,wBAAwB,CAACuD,KAAK,EAAEtD,OAAO,CAAC;YAEzD,MAAMiC,KAAK,GAAG9D,OAAO,CAAClB,KAAK,CAACW,MAAM,CAACC,6BAA6B,CAC7D,OAAMzB,IAAK,EAAC,CACd;YACD,MAAM8F,KAAK,GAAG/D,OAAO,CAAClB,KAAK,CAACW,MAAM,CAACC,6BAA6B,CAC7D,OAAMzB,IAAK,EAAC,CACd;YAED4F,mBAAmB,CAAC7D,OAAO,EAAEG,GAAG,EAAE2D,KAAK,EAAEC,KAAK,CAAC;YAE/CN,MAAM,GAAG,CAACqD,cAAc,EAAEhD,KAAK,EAAEC,KAAK,CAAC;UACzC,CAAC,MAAM;YACLtD,oBAAoB,CAACT,OAAO,EAAEG,GAAG,EAAEgF,KAAK,EAAEtE,UAAU,CAAC;YACrD4C,MAAM,GAAGqD,cAAc;UACzB;QACF,CAAC,MAAM,IAAItE,IAAI,KAAKP,KAAK,EAAE;UACzB,MAAM+E,MAAM,GAAGtG,OAAO,CAAC5B,KAAK,CAACW,MAAM,CAACC,6BAA6B,CAC9D,QAAOzB,IAAK,EAAC,CACf;UACD,MAAMgJ,SAAS,GACbvG,OAAO,CACPrB,GAAG,CAAC,OAAO,CAAC;UAEd4H,SAAS,CAAC3H,WAAW,CACnBhB,WAAC,CAAC0F,cAAc,CACd1F,WAAC,CAACiB,SAAS,CAACyH,MAAM,CAAC,EACnB,CAAC1I,WAAC,CAAC6C,cAAc,EAAE,EAAE8F,SAAS,CAACjJ,IAAI,CAAC,CAAC6E,MAAM,CAACqE,CAAC,IAAIA,CAAC,CAAC,CACpD,CACF;UAEDzD,MAAM,GAAGuD,MAAM;UAEf,IAAIL,SAAS,EAAE;YACbtD,cAAc,GAAGzB,wBAAwB,CAACzB,GAAG,EAAE0B,OAAO,CAAC;UACzD;QACF,CAAC,MAAM,IAAI8E,SAAS,EAAE;UACpBlD,MAAM,GAAG/C,OAAO,CAAC5B,KAAK,CAACW,MAAM,CAACC,6BAA6B,CACxD,QAAOzB,IAAK,EAAC,CACf;UAED,MAAMkJ,aAAa,GAAG,IAAIC,4BAAa,CAAC;YACtCtC,aAAa;YACbuC,UAAU,EAAE3G,OAAyC;YACrD4G,SAAS,EAAEvB,YAAY;YACvBwB,QAAQ,EAAEzJ,IAAI,CAACE,IAAI,CAAC8B,UAAU;YAC9B0H,IAAI,EAAE3C,KAAK,CAAC2C,IAAI;YAChBC,aAAa,EAAE1B;UACjB,CAAC,CAAC;UAEFoB,aAAa,CAACO,OAAO,EAAE;UAEvB,MAAM;YACJtD,MAAM;YACNrE,IAAI;YACJ4H,KAAK,EAAEC;UACT,CAAC,GAAGlH,OAAO,CAAC1C,IAA4B;UAExCqF,cAAc,GAAG,CACf/E,WAAC,CAACuJ,kBAAkB,CAClBtH,SAAS,EACT6D,MAAM,CAACvB,MAAM,CAACoB,gBAAgB,CAAC,EAC/BlE,IAAI,EACJ6H,OAAO,CACR,CACF;UAED,IAAIpF,IAAI,KAAKJ,MAAM,IAAII,IAAI,KAAKH,MAAM,EAAE;YACtC6B,mBAAmB,CACjBxD,OAAO,EACPpC,WAAC,CAACiB,SAAS,CAACY,GAAG,CAAC,EAChB7B,WAAC,CAACiB,SAAS,CAACkE,MAAM,CAAC,EACnBpD,QAAQ,CACT;UACH,CAAC,MAAM;YACL,MAAMrC,IAAI,GAAG0C,OAAO,CAAC1C,IAA4B;YAGjDF,IAAI,CAACE,IAAI,CAAC+B,IAAI,CAACA,IAAI,CAAC1C,OAAO,CACzBiB,WAAC,CAACgC,oBAAoB,CAACH,GAAG,EAAE7B,WAAC,CAACiB,SAAS,CAACkE,MAAM,CAAC,EAAE,EAAE,EAAEzF,IAAI,CAAC8C,MAAM,CAAC,CAClE;YAED6E,uBAAuB,CAAC5H,GAAG,CAACoC,GAAG,CAACjD,EAAE,CAACe,IAAI,CAAC;YAExCyC,OAAO,CAACoH,MAAM,EAAE;UAClB;QACF;QAEA,IAAIC,QAAsB;QAE1B,IAAIlH,UAAU,EAAE;UACdkH,QAAQ,GAAGzJ,WAAC,CAACiB,SAAS,CAACY,GAAG,CAAiB;QAC7C,CAAC,MAAM,IAAIA,GAAG,CAACvB,IAAI,KAAK,aAAa,EAAE;UACrCmJ,QAAQ,GAAGzJ,WAAC,CAAC0J,aAAa,CAAC7H,GAAG,CAACjD,EAAE,CAACe,IAAI,CAAC;QACzC,CAAC,MAAM,IAAIkC,GAAG,CAACvB,IAAI,KAAK,YAAY,EAAE;UACpCmJ,QAAQ,GAAGzJ,WAAC,CAAC0J,aAAa,CAAC7H,GAAG,CAAClC,IAAI,CAAC;QACtC,CAAC,MAAM;UACL8J,QAAQ,GAAGzJ,WAAC,CAACiB,SAAS,CAACY,GAAG,CAAiB;QAC7C;QAEAmF,oBAAoB,CAAC1B,IAAI,CAAC;UACxBpB,IAAI;UACJW,UAAU,EAAEA,UAAU,CAACF,GAAG,CAACgF,CAAC,IAAIA,CAAC,CAACjK,IAAI,CAAC+D,UAAU,CAAC;UAClD9D,IAAI,EAAE8J,QAAQ;UACd1H,QAAQ;UACRgD,cAAc;UACdI;QACF,CAAC,CAAC;QAEF,IAAIjB,IAAI,KAAKP,KAAK,EAAE;UAClB,IAAI5B,QAAQ,EAAE;YACZqF,kBAAkB,GAAG,IAAI;UAC3B,CAAC,MAAM;YACLD,iBAAiB,GAAG,IAAI;UAC1B;QACF;QAEA,IAAI/E,OAAO,CAAC1C,IAAI,EAAE;UAChB0C,OAAO,CAAC1C,IAAI,CAACmF,UAAU,GAAG,IAAI;QAChC;QAEA,IACE,CAACoC,cAAc,IACf,CAAClF,QAAQ,KACRmC,IAAI,KAAKP,KAAK,IAAIO,IAAI,KAAKN,QAAQ,CAAC,EACrC;UACAqD,cAAc,GAAG7E,OAEhB;QACH;MACF;IACF;EACF;EAEA,MAAMwH,kBAAkB,GAAGnF,uBAAuB,CAACuC,oBAAoB,CAAC;EACxE,MAAM6C,gBAAgB,GAAG7J,WAAC,CAAC0E,eAAe,CACxC,CAAC+B,eAAe,IAAI,EAAE,EAAE9B,GAAG,CAACgF,CAAC,IAAIA,CAAC,CAAClG,UAAU,CAAC,CAC/C;EAED,MAAMqG,aAA6B,GACjC9E,8BAA8B,CAACgC,oBAAoB,CAAC;EAEtD,IAAIG,iBAAiB,EAAE;IACrBG,cAAc,GAAGK,WAAW,CAACvG,6BAA6B,CAAC,WAAW,CAAC;IACvE0I,aAAa,CAACxE,IAAI,CAACgC,cAAc,CAAC;IAElC,MAAMyC,aAAa,GAAG/J,WAAC,CAAC0F,cAAc,CAAC1F,WAAC,CAACiB,SAAS,CAACqG,cAAc,CAAC,EAAE,CAClEtH,WAAC,CAAC6C,cAAc,EAAE,CACnB,CAAC;IAEF,IAAIoE,cAAc,EAAE;MAClB,MAAMnF,KAAK,GAAGmF,cAAc,CAAClG,GAAG,CAAC,OAAO,CAAC;MACzC,MAAMU,IAAoB,GAAG,CAACsI,aAAa,CAAC;MAE5C,IAAIjI,KAAK,CAACpC,IAAI,EAAE;QACd+B,IAAI,CAAC6D,IAAI,CAACxD,KAAK,CAACpC,IAAI,CAAC;MACvB;MAEAoC,KAAK,CAACd,WAAW,CAAChB,WAAC,CAAC2B,kBAAkB,CAACF,IAAI,CAAC,CAAC;IAC/C,CAAC,MAAM,IAAIyF,eAAe,EAAE;MAC1B,IAAI1H,IAAI,CAACE,IAAI,CAAC8B,UAAU,EAAE;QACxBhC,IAAI,CAACF,QAAQ,CAAC;UACZ0K,cAAc,EAAE;YACdC,IAAI,CAACzK,IAAI,EAAE;cACT,IAAI,CAACA,IAAI,CAACuB,GAAG,CAAC,QAAQ,CAAC,CAACmJ,OAAO,EAAE,EAAE;cAEnC1K,IAAI,CAACwB,WAAW,CACdhB,WAAC,CAAC0F,cAAc,CAAC1F,WAAC,CAACiB,SAAS,CAACqG,cAAc,CAAC,EAAE,CAAC9H,IAAI,CAACE,IAAI,CAAC,CAAC,CAC3D;cAEDF,IAAI,CAAC2K,IAAI,EAAE;YACb;UACF;QACF,CAAC,CAAC;MACJ,CAAC,MAAM;QACLjD,eAAe,CAACxH,IAAI,CAAC+B,IAAI,CAACA,IAAI,CAAC1C,OAAO,CACpCiB,WAAC,CAAC+C,mBAAmB,CAACgH,aAAa,CAAC,CACrC;MACH;IACF,CAAC,MAAM;MACL,MAAMtI,IAAmB,GAAG,CAACzB,WAAC,CAAC+C,mBAAmB,CAACgH,aAAa,CAAC,CAAC;MAElE,IAAIvK,IAAI,CAACE,IAAI,CAAC8B,UAAU,EAAE;QACxBC,IAAI,CAAC1C,OAAO,CACViB,WAAC,CAAC+C,mBAAmB,CACnB/C,WAAC,CAAC0F,cAAc,CAAC1F,WAAC,CAACoK,KAAK,EAAE,EAAE,CAC1BpK,WAAC,CAACqK,aAAa,CAACrK,WAAC,CAACE,UAAU,CAAC,MAAM,CAAC,CAAC,CACtC,CAAC,CACH,CACF;MACH;MAEAV,IAAI,CAACE,IAAI,CAAC+B,IAAI,CAACA,IAAI,CAAC1C,OAAO,CACzBiB,WAAC,CAACoD,WAAW,CACX,aAAa,EACbpD,WAAC,CAACE,UAAU,CAAC,aAAa,CAAC,EAC3B,CAACF,WAAC,CAACsK,WAAW,CAACtK,WAAC,CAACE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EACrCF,WAAC,CAAC0C,cAAc,CAACjB,IAAI,CAAC,CACvB,CACF;IACH;EACF;EAEA,IAAI2F,kBAAkB,EAAE;IACtBG,eAAe,GAAGI,WAAW,CAACvG,6BAA6B,CAAC,YAAY,CAAC;IACzE0I,aAAa,CAACxE,IAAI,CAACiC,eAAe,CAAC;EACrC;EAEA,IAAIF,uBAAuB,CAACkD,IAAI,GAAG,CAAC,EAAE;IACpC/K,IAAI,CAACF,QAAQ,CAAC;MACZC,WAAW,CAACC,IAAI,EAAE;QAChB,IAAI,CAAC6H,uBAAuB,CAACtH,GAAG,CAACP,IAAI,CAACE,IAAI,CAACd,EAAE,CAACe,IAAI,CAAC,EAAE;QAErD,MAAM0B,UAAU,GAAG7B,IAAI,CAAC6B,UAAU;QAClC,MAAMmJ,gBAAgB,GAAGnJ,UAAU,CAACA,UAAU;QAE9C,IAEGmJ,gBAAgB,CAAC9K,IAAI,CAACY,IAAI,KAAK,sBAAsB,IACpDkK,gBAAgB,CAAC9K,IAAI,CAAC+K,IAAI,KAAKpJ,UAAU,CAAC3B,IAAI,IAEhD8K,gBAAgB,CAAC9K,IAAI,CAACY,IAAI,KAAK,kBAAkB,IAEjDkK,gBAAgB,CAAC9K,IAAI,CAACY,IAAI,KAAK,aAAa,IAE5CkK,gBAAgB,CAAC9K,IAAI,CAACY,IAAI,KAAK,cAAc,IAE5CkK,gBAAgB,CAAC9K,IAAI,CAACY,IAAI,KAAK,gBAAgB,IAC9CkK,gBAAgB,CAAC9K,IAAI,CAACoC,KAAK,KAAKT,UAAU,CAAC3B,IAAI,IAC/C8K,gBAAgB,CAACnJ,UAAU,CAACf,IAAI,KAAK,eAAgB,IAEtDkK,gBAAgB,CAAC9K,IAAI,CAACY,IAAI,KAAK,gBAAgB,IAC9CkK,gBAAgB,CAAC9K,IAAI,CAAC+K,IAAI,KAAKpJ,UAAU,CAAC3B,IAAK,EACjD;UACA,MAAMF,IAAI,CAACkL,mBAAmB,CAC3B,sDAAqDlL,IAAI,CAACE,IAAI,CAACd,EAAE,CAACe,IAAK,mCAAkC,CAC3G;QACH;MACF;IACF,CAAC,CAAC;EACJ;EAEA,MAAMgL,WAA2B,GAAG,EAAE;EACtC,IAAIC,iBAAiB,GAAG,KAAK;EAC7B,MAAMC,aAAa,GACjBrD,cAAc,IAAIxH,WAAC,CAAC0F,cAAc,CAAC1F,WAAC,CAACiB,SAAS,CAACuG,cAAc,CAAC,EAAE,EAAE,CAAC;EAErE,MAAMsD,aAAa,GAAGtL,IAAI,CAACE,IAAI;EAE/B,IAAI+G,eAAe,EAAE;IACnBkE,WAAW,CAACrF,IAAI,CAACmC,YAAY,EAAED,cAAc,CAAC;IAC9C,MAAMuD,OAIH,GAAG,EAAE;IACR,IAAIC,YAA6B,GAAG,EAAE;IACtCxL,IAAI,CAACuB,GAAG,CAAC,WAAW,CAAC,CAACkK,OAAO,CAAC7I,OAAO,IAAI;MAGvC,IAAIA,OAAO,CAAC8I,aAAa,EAAE,EAAE;QAC3BF,YAAY,CAAC1F,IAAI,CAAClD,OAAO,CAAC1C,IAAI,CAAC;QAC/B0C,OAAO,CAACoH,MAAM,EAAE;QAChB;MACF;MAEA,MAAM2B,UAAU,GACd/I,OAAO,CAACgJ,eAAe,EAAE,IAAIhJ,OAAO,CAACkG,sBAAsB,EAAE;MAE/D,IACE,CAAC6C,UAAU,IAAI/I,OAAO,CAACiJ,oBAAoB,EAAE,KAC7CjJ,OAAO,CAAC1C,IAAI,CAAC8C,MAAM,EACnB;QACA,IAAI2I,UAAU,IAAIH,YAAY,CAAClM,MAAM,GAAG,CAAC,EAAE;UACzC,MAAMwM,SAAyB,GAAGN,YAAY,CAACrG,GAAG,CAACsB,iBAAiB,CAAC;UACrE,IAAI7D,OAAO,CAAC1C,IAAI,CAACoC,KAAK,EAAEwJ,SAAS,CAAChG,IAAI,CAAClD,OAAO,CAAC1C,IAAI,CAACoC,KAAK,CAAC;UAC1DM,OAAO,CAAC1C,IAAI,CAACoC,KAAK,GAAGqE,uBAAuB,CAACmF,SAAS,CAAC;UACvDN,YAAY,GAAG,EAAE;QACnB;QAEA5I,OAAO,CAAC1C,IAAI,CAAC8C,MAAM,GAAG,KAAK;QAC3BuI,OAAO,CAACzF,IAAI,CAAClD,OAAO,CAAC1C,IAAI,CAAC;QAC1B0C,OAAO,CAACoH,MAAM,EAAE;MAClB;IACF,CAAC,CAAC;IAEF,IAAIuB,OAAO,CAACjM,MAAM,GAAG,CAAC,IAAIkM,YAAY,CAAClM,MAAM,GAAG,CAAC,EAAE;MACjD,MAAMyM,YAAY,GAAG/H,cAAQ,CAACC,UAAU,CAACC,GAAI;AACnD,wBAAwB6C,KAAK,CAACiF,SAAS,CAAC,UAAU,CAAE;AACpD,OAA4B;MACtBD,YAAY,CAAC9J,IAAI,CAACA,IAAI,GAAG,CACvBzB,WAAC,CAACyL,WAAW,CAAC,CACZzL,WAAC,CAAC0L,WAAW,CAACZ,aAAa,EAAE,IAAI,CAAC,IAGhC9K,WAAC,CAAC+C,mBAAmB,CAAC+H,aAAa,CAAsB,CAC5D,CAAC,EACF,GAAGC,OAAO,CACX;MAED,MAAMY,eAA+B,GAAG,EAAE;MAE1C,MAAMC,OAAO,GAAG5L,WAAC,CAAC6L,aAAa,CAACN,YAAY,EAAE,EAAE,CAAC;MAEjD,IAAIP,YAAY,CAAClM,MAAM,GAAG,CAAC,EAAE;QAC3B6M,eAAe,CAACrG,IAAI,CAAC,GAAG0F,YAAY,CAACrG,GAAG,CAACsB,iBAAiB,CAAC,CAAC;MAC9D;MACA,IAAI4E,aAAa,EAAE;QACjBD,iBAAiB,GAAG,IAAI;QACxBe,eAAe,CAACrG,IAAI,CAACuF,aAAa,CAAC;MACrC;MACA,IAAIc,eAAe,CAAC7M,MAAM,GAAG,CAAC,EAAE;QAC9B6M,eAAe,CAAC5M,OAAO,CACrBiB,WAAC,CAAC0F,cAAc,CAAC1F,WAAC,CAACoK,KAAK,EAAE,EAAE,CAACpK,WAAC,CAACiB,SAAS,CAACwG,YAAY,CAAC,CAAC,CAAC,CACzD;QAED8D,YAAY,CAAC9J,IAAI,CAACA,IAAI,CAAC6D,IAAI,CACzBtF,WAAC,CAACoD,WAAW,CACX,aAAa,EACbpD,WAAC,CAACE,UAAU,CAAC,aAAa,CAAC,EAC3B,EAAE,EACFF,WAAC,CAAC0C,cAAc,CAAC,CACf1C,WAAC,CAAC+C,mBAAmB,CAAC/C,WAAC,CAAC2B,kBAAkB,CAACgK,eAAe,CAAC,CAAC,CAC7D,CAAC,CACH,CACF;MACH,CAAC,MAAM;QACLC,OAAO,CAACE,SAAS,CAACxG,IAAI,CAACtF,WAAC,CAACiB,SAAS,CAACwG,YAAY,CAAC,CAAC;MACnD;MAEAjI,IAAI,CAACwB,WAAW,CAAC4K,OAAO,CAAC;IAC3B;EACF;EACA,IAAI,CAAChB,iBAAiB,IAAIC,aAAa,EAAE;IACvCrL,IAAI,CAACE,IAAI,CAAC+B,IAAI,CAACA,IAAI,CAAC6D,IAAI,CACtBtF,WAAC,CAACyL,WAAW,CAAC,CAACzL,WAAC,CAAC+C,mBAAmB,CAAC8H,aAAa,CAAC,CAAC,CAAC,CACtD;EACH;EAEAC,aAAa,CAACrJ,IAAI,CAACA,IAAI,CAAC1C,OAAO,CAC7BiB,WAAC,CAACyL,WAAW,CACX,CACEzL,WAAC,CAAC+C,mBAAmB,CACnBgJ,sBAAsB,CACpBjC,aAAa,EACba,WAAW,EACXf,kBAAkB,EAClBC,gBAAgB,EAChB3B,8BAA8B,GAAGD,uBAAuB,GAAG,IAAI,EAC/D1B,KAAK,EACLhD,OAAO,CACR,CACF,EACD6D,kBAAkB,IAChBpH,WAAC,CAAC+C,mBAAmB,CACnB/C,WAAC,CAAC0F,cAAc,CAAC1F,WAAC,CAACiB,SAAS,CAACsG,eAAe,CAAC,EAAE,CAC7CvH,WAAC,CAAC6C,cAAc,EAAE,CACnB,CAAC,CACH,CACJ,CAAC0B,MAAM,CAACyH,OAAO,CAAC,CAClB,CACF;EAIDxM,IAAI,CAACoB,YAAY,CAAC8G,WAAW,CAAC/C,GAAG,CAACsH,IAAI,IAAIjM,WAAC,CAAC+C,mBAAmB,CAACkJ,IAAI,CAAC,CAAC,CAAC;EAGvEzM,IAAI,CAACgB,KAAK,CAAC0L,KAAK,EAAE;EAElB,OAAO1M,IAAI;AACb;AAEA,SAASuM,sBAAsB,CAC7BjC,aAA6B,EAC7Ba,WAA2B,EAC3Bf,kBAAqC,EACrCC,gBAAmC,EACnCsC,oBAA0C,EAC1C5F,KAAiB,EACjBhD,OAA6B,EAC7B;EACA,IAAI6I,GAAG,EAAEC,GAAG;EACZ,MAAMC,IAAoB,GAAG,CAC3BtM,WAAC,CAAC6C,cAAc,EAAE,EAClB+G,kBAAkB,EAClBC,gBAAgB,CACjB;EAED,IACEtG,OAAO,KAAK,SAAS,IACpBA,OAAO,KAAK,SAAS,IAAI,CAACgD,KAAK,CAACgG,eAAe,CAAC,gBAAgB,CAAE,EACnE;IACAH,GAAG,GAAGpM,WAAC,CAACwM,YAAY,CAAC,CAAC,GAAG1C,aAAa,EAAE,GAAGa,WAAW,CAAC,CAAC;IACxD0B,GAAG,GAAGrM,WAAC,CAAC0F,cAAc,CACpBa,KAAK,CAACiF,SAAS,CAACjI,OAAO,KAAK,SAAS,GAAG,WAAW,GAAG,eAAe,CAAC,EACtE+I,IAAI,CACL;EACH,CAAC,MAAM;IAEL,IAAI/I,OAAO,KAAK,SAAS,EAAE;MACzB,IAAI4I,oBAAoB,EAAE;QACxBG,IAAI,CAAChH,IAAI,CACP9B,cAAQ,CAACC,UAAU,CAACC,GAAI;AAClC,mBAAmB1D,WAAC,CAACiB,SAAS,CAACkL,oBAAoB,CAAE;AACrD,WAAW,CACF;MACH;MACAE,GAAG,GAAGrM,WAAC,CAAC0F,cAAc,CAACa,KAAK,CAACiF,SAAS,CAAC,eAAe,CAAC,EAAEc,IAAI,CAAC;IAChE,CAAC,MAAM;MACLD,GAAG,GAAGrM,WAAC,CAAC0F,cAAc,CAACa,KAAK,CAACiF,SAAS,CAAC,gBAAgB,CAAC,EAAEc,IAAI,CAAC;IACjE;IAGA,IAAIxC,aAAa,CAAChL,MAAM,GAAG,CAAC,EAAE;MAC5B,IAAI6L,WAAW,CAAC7L,MAAM,GAAG,CAAC,EAAE;QAC1BsN,GAAG,GAAGpM,WAAC,CAACyM,aAAa,CAAC,CACpBzM,WAAC,CAAC0M,cAAc,CAAC1M,WAAC,CAACE,UAAU,CAAC,GAAG,CAAC,EAAEF,WAAC,CAACwM,YAAY,CAAC1C,aAAa,CAAC,CAAC,EAClE9J,WAAC,CAAC0M,cAAc,CAAC1M,WAAC,CAACE,UAAU,CAAC,GAAG,CAAC,EAAEF,WAAC,CAACwM,YAAY,CAAC7B,WAAW,CAAC,CAAC,CACjE,CAAC;MACJ,CAAC,MAAM;QACLyB,GAAG,GAAGpM,WAAC,CAACwM,YAAY,CAAC1C,aAAa,CAAC;QACnCuC,GAAG,GAAGrM,WAAC,CAAC4C,gBAAgB,CAACyJ,GAAG,EAAErM,WAAC,CAACE,UAAU,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC;MAChE;IACF,CAAC,MAAM;MAELkM,GAAG,GAAGpM,WAAC,CAACwM,YAAY,CAAC7B,WAAW,CAAC;MACjC0B,GAAG,GAAGrM,WAAC,CAAC4C,gBAAgB,CAACyJ,GAAG,EAAErM,WAAC,CAACE,UAAU,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC;IAChE;EACF;EACA,OAAOF,WAAC,CAACgD,oBAAoB,CAAC,GAAG,EAAEoJ,GAAG,EAAEC,GAAG,CAAC;AAC9C;AAEe,kBACb;EAAEM,aAAa;EAAEC;AAAsB,CAAC,EACxC;EAAEC;AAAe,CAAC,EAClBtJ,OAA0C,EAC5B;EAAA;EACd,IAAIA,OAAO,KAAK,SAAS,EAAE;IACzBoJ,aAAa,CAAC,SAAS,CAAC;EAC1B,CAAC,MAAM,IAAIpJ,OAAO,KAAK,SAAS,EAAE;IAChCoJ,aAAa,CAAC,SAAS,CAAC;EAC1B,CAAC,MAAM;IACLA,aAAa,CAAC,SAAS,CAAC;EAC1B;EAEA,MAAMG,OAAO,GAAG,IAAIC,OAAO,EAAY;EACvC,MAAMvG,aAAa,kBAAGoG,UAAU,CAAC,eAAe,CAAC,0BAAIC,KAAK;EAE1D,OAAO;IACLlN,IAAI,EAAE,qBAAqB;IAC3BqN,QAAQ,EAAEC,+BAAgB;IAE1BC,OAAO,EAAE;MACP,iDAAiD,CAC/C1N,IAAqE,EACrE;QAAA;QACA,MAAM;UAAE2N;QAAY,CAAC,GAAG3N,IAAI,CAACE,IAAI;QACjC,IACE,CAAAyN,WAAW,oBAAXA,WAAW,CAAE7M,IAAI,MAAK,kBAAkB,IAGxC,0BAAA6M,WAAW,CAACtI,UAAU,qBAAtB,sBAAwB/F,MAAM,IAAG,CAAC,EAClC;UACA,IAAAsO,qCAAsB,EAAC5N,IAAI,CAAC;QAC9B;MACF,CAAC;MAED6N,KAAK,CAAC7N,IAAI,EAAE+G,KAAK,EAAE;QACjB,IAAIuG,OAAO,CAAC/M,GAAG,CAACP,IAAI,CAAC,EAAE;QAEvB,MAAMkC,OAAO,GAAG4E,cAAc,CAAC9G,IAAI,EAAE+G,KAAK,EAAEC,aAAa,EAAEjD,OAAO,CAAC;QACnE,IAAI7B,OAAO,EAAEoL,OAAO,CAACrN,GAAG,CAACiC,OAAO,CAAC;MACnC;IACF;EACF,CAAC;AACH"}
|
|
1
|
+
{"version":3,"names":["types","t","template","syntaxDecorators","ReplaceSupers","splitExportDeclaration","incrementId","id","idx","length","unshift","current","createPrivateUidGeneratorForClass","classPath","currentPrivateId","privateNames","Set","traverse","PrivateName","path","add","node","name","reifiedId","String","fromCharCode","has","privateName","identifier","createLazyPrivateUidGeneratorForClass","generator","replaceClassWithVar","type","varId","scope","generateUidIdentifierBasedOnNode","classId","rename","insertBefore","variableDeclaration","variableDeclarator","get","replaceWith","cloneNode","className","parent","generateDeclaredUidIdentifier","parentPath","newClassExpr","classExpression","superClass","body","newPath","sequenceExpression","generateClassProperty","key","value","isStatic","classPrivateProperty","undefined","classProperty","addProxyAccessorsFor","element","originalKey","targetKey","isComputed","static","getterBody","blockStatement","returnStatement","memberExpression","thisExpression","setterBody","expressionStatement","assignmentExpression","getter","setter","classPrivateMethod","classMethod","insertAfter","extractProxyAccessorsFor","version","expression","ast","FIELD","ACCESSOR","METHOD","GETTER","SETTER","STATIC","getElementKind","kind","isDecoratorInfo","info","filteredOrderedDecoratorInfo","filtered","filter","el","generateDecorationExprs","arrayExpression","map","decs","decorators","numericLiteral","privateMethods","extractElementLocalAssignments","decorationInfo","localIds","locals","Array","isArray","push","addCallAccessorsFor","getId","setId","callExpression","isNotTsParameter","movePrivateAccessor","methodLocalVar","params","block","isClassDecoratableElementPath","staticBlockToIIFE","arrowFunctionExpression","maybeSequenceExpression","exprs","unaryExpression","transformClass","state","constantSuper","classDecorators","hasElementDecorators","generateClassPrivateUid","computed","newId","valueNode","newField","elementDecoratorInfo","firstFieldPath","constructorPath","requiresProtoInit","requiresStaticInit","decoratedPrivateMethods","protoInitLocal","staticInitLocal","classInitLocal","classIdLocal","assignments","scopeParent","memoiseExpression","hint","localEvaluatedId","classDecorator","generateUidIdentifier","lastInstancePrivateName","needsInstancePrivateBrandCheck","hasDecorators","decoratorPath","isPrivate","isClassPrivateProperty","isClassMethod","newFieldInitId","newValue","initId","valuePath","v","replaceSupers","methodPath","objectRef","superRef","file","refToPreserve","replace","async","isAsync","functionExpression","remove","nameExpr","stringLiteral","d","elementDecorations","classDecorations","elementLocals","protoInitCall","CallExpression","exit","isSuper","skip","super","spreadElement","restElement","size","parentParentPath","left","buildCodeFrameError","classLocals","classInitInjected","classInitCall","originalClass","statics","staticBlocks","forEach","isStaticBlock","isProperty","isClassProperty","isClassPrivateMethod","allValues","staticsClass","addHelper","staticBlock","toStatement","constructorBody","newExpr","newExpression","arguments","createLocalsAssignment","Boolean","expr","crawl","maybePrivateBranName","lhs","rhs","args","availableHelper","arrayPattern","objectPattern","objectProperty","assertVersion","assumption","loose","_assumption","VISITED","WeakSet","inherits","visitor","ExportNamedDeclaration|ExportDefaultDeclaration","_declaration$decorato","declaration","Class"],"sources":["../src/transformer-2023-01.ts"],"sourcesContent":["import type { NodePath, Scope } from \"@babel/traverse\";\nimport { types as t, template } from \"@babel/core\";\nimport syntaxDecorators from \"@babel/plugin-syntax-decorators\";\nimport ReplaceSupers from \"@babel/helper-replace-supers\";\nimport splitExportDeclaration from \"@babel/helper-split-export-declaration\";\nimport * as charCodes from \"charcodes\";\nimport type { PluginAPI, PluginObject, PluginPass } from \"@babel/core\";\nimport type { Options } from \"./index\";\n\ntype ClassDecoratableElement =\n | t.ClassMethod\n | t.ClassPrivateMethod\n | t.ClassProperty\n | t.ClassPrivateProperty\n | t.ClassAccessorProperty;\n\ntype ClassElement =\n | ClassDecoratableElement\n | t.TSDeclareMethod\n | t.TSIndexSignature\n | t.StaticBlock;\n\ntype DecoratorVersionKind = \"2023-01\" | \"2022-03\" | \"2021-12\";\n\nfunction incrementId(id: number[], idx = id.length - 1): void {\n // If index is -1, id needs an additional character, unshift A\n if (idx === -1) {\n id.unshift(charCodes.uppercaseA);\n return;\n }\n\n const current = id[idx];\n\n if (current === charCodes.uppercaseZ) {\n // if current is Z, skip to a\n id[idx] = charCodes.lowercaseA;\n } else if (current === charCodes.lowercaseZ) {\n // if current is z, reset to A and carry the 1\n id[idx] = charCodes.uppercaseA;\n incrementId(id, idx - 1);\n } else {\n // else, increment by one\n id[idx] = current + 1;\n }\n}\n\n/**\n * Generates a new private name that is unique to the given class. This can be\n * used to create extra class fields and methods for the implementation, while\n * keeping the length of those names as small as possible. This is important for\n * minification purposes (though private names can generally be minified,\n * transpilations and polyfills cannot yet).\n */\nfunction createPrivateUidGeneratorForClass(\n classPath: NodePath<t.ClassDeclaration | t.ClassExpression>,\n): () => t.PrivateName {\n const currentPrivateId: number[] = [];\n const privateNames = new Set<string>();\n\n classPath.traverse({\n PrivateName(path) {\n privateNames.add(path.node.id.name);\n },\n });\n\n return (): t.PrivateName => {\n let reifiedId;\n do {\n incrementId(currentPrivateId);\n reifiedId = String.fromCharCode(...currentPrivateId);\n } while (privateNames.has(reifiedId));\n\n return t.privateName(t.identifier(reifiedId));\n };\n}\n\n/**\n * Wraps the above generator function so that it's run lazily the first time\n * it's actually required. Several types of decoration do not require this, so it\n * saves iterating the class elements an additional time and allocating the space\n * for the Sets of element names.\n */\nfunction createLazyPrivateUidGeneratorForClass(\n classPath: NodePath<t.ClassDeclaration | t.ClassExpression>,\n): () => t.PrivateName {\n let generator: () => t.PrivateName;\n\n return (): t.PrivateName => {\n if (!generator) {\n generator = createPrivateUidGeneratorForClass(classPath);\n }\n\n return generator();\n };\n}\n\n/**\n * Takes a class definition and replaces it with an equivalent class declaration\n * which is then assigned to a local variable. This allows us to reassign the\n * local variable with the decorated version of the class. The class definition\n * retains its original name so that `toString` is not affected, other\n * references to the class are renamed instead.\n */\nfunction replaceClassWithVar(\n path: NodePath<t.ClassDeclaration | t.ClassExpression>,\n): [t.Identifier, NodePath<t.ClassDeclaration | t.ClassExpression>] {\n if (path.type === \"ClassDeclaration\") {\n const varId = path.scope.generateUidIdentifierBasedOnNode(path.node.id);\n const classId = t.identifier(path.node.id.name);\n\n path.scope.rename(classId.name, varId.name);\n\n path.insertBefore(\n t.variableDeclaration(\"let\", [t.variableDeclarator(varId)]),\n );\n path.get(\"id\").replaceWith(classId);\n\n return [t.cloneNode(varId), path];\n } else {\n let className: string;\n let varId: t.Identifier;\n\n if (path.node.id) {\n className = path.node.id.name;\n varId = path.scope.parent.generateDeclaredUidIdentifier(className);\n path.scope.rename(className, varId.name);\n } else if (\n path.parentPath.node.type === \"VariableDeclarator\" &&\n path.parentPath.node.id.type === \"Identifier\"\n ) {\n className = path.parentPath.node.id.name;\n varId = path.scope.parent.generateDeclaredUidIdentifier(className);\n } else {\n varId =\n path.scope.parent.generateDeclaredUidIdentifier(\"decorated_class\");\n }\n\n const newClassExpr = t.classExpression(\n className && t.identifier(className),\n path.node.superClass,\n path.node.body,\n );\n\n const [newPath] = path.replaceWith(\n t.sequenceExpression([newClassExpr, varId]),\n );\n\n return [\n t.cloneNode(varId),\n newPath.get(\"expressions.0\") as NodePath<t.ClassExpression>,\n ];\n }\n}\n\nfunction generateClassProperty(\n key: t.PrivateName | t.Identifier,\n value: t.Expression | undefined,\n isStatic: boolean,\n): t.ClassPrivateProperty | t.ClassProperty {\n if (key.type === \"PrivateName\") {\n return t.classPrivateProperty(key, value, undefined, isStatic);\n } else {\n return t.classProperty(key, value, undefined, undefined, isStatic);\n }\n}\n\nfunction addProxyAccessorsFor(\n element: NodePath<ClassDecoratableElement>,\n originalKey: t.PrivateName | t.Expression,\n targetKey: t.PrivateName,\n isComputed = false,\n): void {\n const { static: isStatic } = element.node;\n\n const getterBody = t.blockStatement([\n t.returnStatement(\n t.memberExpression(t.thisExpression(), t.cloneNode(targetKey)),\n ),\n ]);\n\n const setterBody = t.blockStatement([\n t.expressionStatement(\n t.assignmentExpression(\n \"=\",\n t.memberExpression(t.thisExpression(), t.cloneNode(targetKey)),\n t.identifier(\"v\"),\n ),\n ),\n ]);\n\n let getter: t.ClassMethod | t.ClassPrivateMethod,\n setter: t.ClassMethod | t.ClassPrivateMethod;\n\n if (originalKey.type === \"PrivateName\") {\n getter = t.classPrivateMethod(\n \"get\",\n t.cloneNode(originalKey),\n [],\n getterBody,\n isStatic,\n );\n setter = t.classPrivateMethod(\n \"set\",\n t.cloneNode(originalKey),\n [t.identifier(\"v\")],\n setterBody,\n isStatic,\n );\n } else {\n getter = t.classMethod(\n \"get\",\n t.cloneNode(originalKey),\n [],\n getterBody,\n isComputed,\n isStatic,\n );\n setter = t.classMethod(\n \"set\",\n t.cloneNode(originalKey),\n [t.identifier(\"v\")],\n setterBody,\n isComputed,\n isStatic,\n );\n }\n\n element.insertAfter(setter);\n element.insertAfter(getter);\n}\n\nfunction extractProxyAccessorsFor(\n targetKey: t.PrivateName,\n version: DecoratorVersionKind,\n): (t.FunctionExpression | t.ArrowFunctionExpression)[] {\n if (version !== \"2023-01\") {\n return [\n template.expression.ast`\n function () {\n return this.${t.cloneNode(targetKey)};\n }\n ` as t.FunctionExpression,\n template.expression.ast`\n function (value) {\n this.${t.cloneNode(targetKey)} = value;\n }\n ` as t.FunctionExpression,\n ];\n }\n return [\n template.expression.ast`\n o => o.${t.cloneNode(targetKey)}\n ` as t.ArrowFunctionExpression,\n template.expression.ast`\n (o, v) => o.${t.cloneNode(targetKey)} = v\n ` as t.ArrowFunctionExpression,\n ];\n}\n\nconst FIELD = 0;\nconst ACCESSOR = 1;\nconst METHOD = 2;\nconst GETTER = 3;\nconst SETTER = 4;\n\nconst STATIC = 5;\n\nfunction getElementKind(element: NodePath<ClassDecoratableElement>): number {\n switch (element.node.type) {\n case \"ClassProperty\":\n case \"ClassPrivateProperty\":\n return FIELD;\n case \"ClassAccessorProperty\":\n return ACCESSOR;\n case \"ClassMethod\":\n case \"ClassPrivateMethod\":\n if (element.node.kind === \"get\") {\n return GETTER;\n } else if (element.node.kind === \"set\") {\n return SETTER;\n } else {\n return METHOD;\n }\n }\n}\n\n// Information about the decorators applied to an element\ninterface DecoratorInfo {\n // The expressions of the decorators themselves\n decorators: t.Expression[];\n\n // The kind of the decorated value, matches the kind value passed to applyDecs\n kind: number;\n\n // whether or not the field is static\n isStatic: boolean;\n\n // The name of the decorator\n name: t.StringLiteral | t.Expression;\n\n privateMethods:\n | (t.FunctionExpression | t.ArrowFunctionExpression)[]\n | undefined;\n\n // The names of local variables that will be used/returned from the decoration\n locals: t.Identifier | t.Identifier[] | undefined;\n}\n\n// Information about a computed property key. These must be evaluated\n// interspersed with decorator expressions, which is why they get added to the\n// array of DecoratorInfos later on.\ninterface ComputedPropInfo {\n localComputedNameId: t.Identifier;\n keyNode: t.Expression;\n}\n\nfunction isDecoratorInfo(\n info: DecoratorInfo | ComputedPropInfo,\n): info is DecoratorInfo {\n return \"decorators\" in info;\n}\n\nfunction filteredOrderedDecoratorInfo(\n info: (DecoratorInfo | ComputedPropInfo)[],\n): DecoratorInfo[] {\n const filtered = info.filter(isDecoratorInfo);\n\n return [\n ...filtered.filter(\n el => el.isStatic && el.kind >= ACCESSOR && el.kind <= SETTER,\n ),\n ...filtered.filter(\n el => !el.isStatic && el.kind >= ACCESSOR && el.kind <= SETTER,\n ),\n ...filtered.filter(el => el.isStatic && el.kind === FIELD),\n ...filtered.filter(el => !el.isStatic && el.kind === FIELD),\n ];\n}\n\nfunction generateDecorationExprs(\n info: (DecoratorInfo | ComputedPropInfo)[],\n): t.ArrayExpression {\n return t.arrayExpression(\n filteredOrderedDecoratorInfo(info).map(el => {\n const decs =\n el.decorators.length > 1\n ? t.arrayExpression(el.decorators)\n : el.decorators[0];\n\n const kind = el.isStatic ? el.kind + STATIC : el.kind;\n\n return t.arrayExpression([\n decs,\n t.numericLiteral(kind),\n el.name,\n ...(el.privateMethods || []),\n ]);\n }),\n );\n}\n\nfunction extractElementLocalAssignments(\n decorationInfo: (DecoratorInfo | ComputedPropInfo)[],\n) {\n const localIds: t.Identifier[] = [];\n\n for (const el of filteredOrderedDecoratorInfo(decorationInfo)) {\n const { locals } = el;\n\n if (Array.isArray(locals)) {\n localIds.push(...locals);\n } else if (locals !== undefined) {\n localIds.push(locals);\n }\n }\n\n return localIds;\n}\n\nfunction addCallAccessorsFor(\n element: NodePath,\n key: t.PrivateName,\n getId: t.Identifier,\n setId: t.Identifier,\n) {\n element.insertAfter(\n t.classPrivateMethod(\n \"get\",\n t.cloneNode(key),\n [],\n t.blockStatement([\n t.returnStatement(\n t.callExpression(t.cloneNode(getId), [t.thisExpression()]),\n ),\n ]),\n ),\n );\n\n element.insertAfter(\n t.classPrivateMethod(\n \"set\",\n t.cloneNode(key),\n [t.identifier(\"v\")],\n t.blockStatement([\n t.expressionStatement(\n t.callExpression(t.cloneNode(setId), [\n t.thisExpression(),\n t.identifier(\"v\"),\n ]),\n ),\n ]),\n ),\n );\n}\n\nfunction isNotTsParameter(\n node: t.Identifier | t.Pattern | t.RestElement | t.TSParameterProperty,\n): node is t.Identifier | t.Pattern | t.RestElement {\n return node.type !== \"TSParameterProperty\";\n}\n\nfunction movePrivateAccessor(\n element: NodePath<t.ClassPrivateMethod>,\n key: t.PrivateName,\n methodLocalVar: t.Identifier,\n isStatic: boolean,\n) {\n let params: (t.Identifier | t.RestElement)[];\n let block: t.Statement[];\n\n if (element.node.kind === \"set\") {\n params = [t.identifier(\"v\")];\n block = [\n t.expressionStatement(\n t.callExpression(methodLocalVar, [\n t.thisExpression(),\n t.identifier(\"v\"),\n ]),\n ),\n ];\n } else {\n params = [];\n block = [\n t.returnStatement(t.callExpression(methodLocalVar, [t.thisExpression()])),\n ];\n }\n\n element.replaceWith(\n t.classPrivateMethod(\n element.node.kind,\n t.cloneNode(key),\n params,\n t.blockStatement(block),\n isStatic,\n ),\n );\n}\n\nfunction isClassDecoratableElementPath(\n path: NodePath<ClassElement>,\n): path is NodePath<ClassDecoratableElement> {\n const { type } = path;\n\n return (\n type !== \"TSDeclareMethod\" &&\n type !== \"TSIndexSignature\" &&\n type !== \"StaticBlock\"\n );\n}\n\nfunction staticBlockToIIFE(block: t.StaticBlock) {\n return t.callExpression(\n t.arrowFunctionExpression([], t.blockStatement(block.body)),\n [],\n );\n}\n\nfunction maybeSequenceExpression(exprs: t.Expression[]) {\n if (exprs.length === 0) return t.unaryExpression(\"void\", t.numericLiteral(0));\n if (exprs.length === 1) return exprs[0];\n return t.sequenceExpression(exprs);\n}\n\nfunction transformClass(\n path: NodePath<t.ClassExpression | t.ClassDeclaration>,\n state: PluginPass,\n constantSuper: boolean,\n version: DecoratorVersionKind,\n): NodePath {\n const body = path.get(\"body.body\");\n\n const classDecorators = path.node.decorators;\n let hasElementDecorators = false;\n\n const generateClassPrivateUid = createLazyPrivateUidGeneratorForClass(path);\n\n // Iterate over the class to see if we need to decorate it, and also to\n // transform simple auto accessors which are not decorated\n for (const element of body) {\n if (!isClassDecoratableElementPath(element)) {\n continue;\n }\n\n if (element.node.decorators && element.node.decorators.length > 0) {\n hasElementDecorators = true;\n } else if (element.node.type === \"ClassAccessorProperty\") {\n const { key, value, static: isStatic, computed } = element.node;\n\n const newId = generateClassPrivateUid();\n\n const valueNode = value ? t.cloneNode(value) : undefined;\n\n const newField = generateClassProperty(newId, valueNode, isStatic);\n\n const [newPath] = element.replaceWith(newField);\n addProxyAccessorsFor(newPath, key, newId, computed);\n }\n }\n\n // If nothing is decorated, return\n if (!classDecorators && !hasElementDecorators) return;\n\n const elementDecoratorInfo: (DecoratorInfo | ComputedPropInfo)[] = [];\n\n // The initializer of the first non-static field will be injected with the protoInit call\n let firstFieldPath:\n | NodePath<t.ClassProperty | t.ClassPrivateProperty>\n | undefined;\n let constructorPath: NodePath<t.ClassMethod> | undefined;\n let requiresProtoInit = false;\n let requiresStaticInit = false;\n const decoratedPrivateMethods = new Set<string>();\n\n let protoInitLocal: t.Identifier,\n staticInitLocal: t.Identifier,\n classInitLocal: t.Identifier,\n classIdLocal: t.Identifier;\n const assignments: t.AssignmentExpression[] = [];\n const scopeParent: Scope = path.scope.parent;\n\n const memoiseExpression = (expression: t.Expression, hint: string) => {\n const localEvaluatedId = scopeParent.generateDeclaredUidIdentifier(hint);\n assignments.push(t.assignmentExpression(\"=\", localEvaluatedId, expression));\n return t.cloneNode(localEvaluatedId);\n };\n\n if (classDecorators) {\n classInitLocal = scopeParent.generateDeclaredUidIdentifier(\"initClass\");\n\n const [classId, classPath] = replaceClassWithVar(path);\n path = classPath;\n classIdLocal = classId;\n\n path.node.decorators = null;\n\n for (const classDecorator of classDecorators) {\n if (!scopeParent.isStatic(classDecorator.expression)) {\n classDecorator.expression = memoiseExpression(\n classDecorator.expression,\n \"dec\",\n );\n }\n }\n } else {\n if (!path.node.id) {\n path.node.id = path.scope.generateUidIdentifier(\"Class\");\n }\n classIdLocal = t.cloneNode(path.node.id);\n }\n\n let lastInstancePrivateName: t.PrivateName;\n let needsInstancePrivateBrandCheck = false;\n\n if (hasElementDecorators) {\n for (const element of body) {\n if (!isClassDecoratableElementPath(element)) {\n continue;\n }\n\n const { node } = element;\n const decorators = element.get(\"decorators\");\n\n const hasDecorators = Array.isArray(decorators) && decorators.length > 0;\n\n if (hasDecorators) {\n for (const decoratorPath of decorators) {\n if (!scopeParent.isStatic(decoratorPath.node.expression)) {\n decoratorPath.node.expression = memoiseExpression(\n decoratorPath.node.expression,\n \"dec\",\n );\n }\n }\n }\n\n const isComputed =\n \"computed\" in element.node && element.node.computed === true;\n if (isComputed) {\n if (!scopeParent.isStatic(node.key)) {\n node.key = memoiseExpression(node.key as t.Expression, \"computedKey\");\n }\n }\n\n const kind = getElementKind(element);\n const { key } = node;\n\n const isPrivate = key.type === \"PrivateName\";\n\n const isStatic = !!element.node.static;\n\n let name = \"computedKey\";\n\n if (isPrivate) {\n name = key.id.name;\n } else if (!isComputed && key.type === \"Identifier\") {\n name = key.name;\n }\n\n if (isPrivate && !isStatic) {\n if (hasDecorators) {\n needsInstancePrivateBrandCheck = true;\n }\n if (t.isClassPrivateProperty(node) || !lastInstancePrivateName) {\n lastInstancePrivateName = key;\n }\n }\n\n if (element.isClassMethod({ kind: \"constructor\" })) {\n constructorPath = element;\n }\n\n if (hasDecorators) {\n let locals: t.Identifier | t.Identifier[];\n let privateMethods: Array<\n t.FunctionExpression | t.ArrowFunctionExpression\n >;\n\n if (kind === ACCESSOR) {\n const { value } = element.node as t.ClassAccessorProperty;\n\n const params: t.Expression[] = [t.thisExpression()];\n\n if (value) {\n params.push(t.cloneNode(value));\n }\n\n const newId = generateClassPrivateUid();\n const newFieldInitId =\n element.scope.parent.generateDeclaredUidIdentifier(`init_${name}`);\n const newValue = t.callExpression(\n t.cloneNode(newFieldInitId),\n params,\n );\n\n const newField = generateClassProperty(newId, newValue, isStatic);\n const [newPath] = element.replaceWith(newField);\n\n if (isPrivate) {\n privateMethods = extractProxyAccessorsFor(newId, version);\n\n const getId = newPath.scope.parent.generateDeclaredUidIdentifier(\n `get_${name}`,\n );\n const setId = newPath.scope.parent.generateDeclaredUidIdentifier(\n `set_${name}`,\n );\n\n addCallAccessorsFor(newPath, key, getId, setId);\n\n locals = [newFieldInitId, getId, setId];\n } else {\n addProxyAccessorsFor(newPath, key, newId, isComputed);\n locals = newFieldInitId;\n }\n } else if (kind === FIELD) {\n const initId = element.scope.parent.generateDeclaredUidIdentifier(\n `init_${name}`,\n );\n const valuePath = (\n element as NodePath<t.ClassProperty | t.ClassPrivateProperty>\n ).get(\"value\");\n\n valuePath.replaceWith(\n t.callExpression(\n t.cloneNode(initId),\n [t.thisExpression(), valuePath.node].filter(v => v),\n ),\n );\n\n locals = initId;\n\n if (isPrivate) {\n privateMethods = extractProxyAccessorsFor(key, version);\n }\n } else if (isPrivate) {\n locals = element.scope.parent.generateDeclaredUidIdentifier(\n `call_${name}`,\n );\n\n const replaceSupers = new ReplaceSupers({\n constantSuper,\n methodPath: element as NodePath<t.ClassPrivateMethod>,\n objectRef: classIdLocal,\n superRef: path.node.superClass,\n file: state.file,\n refToPreserve: classIdLocal,\n });\n\n replaceSupers.replace();\n\n const {\n params,\n body,\n async: isAsync,\n } = element.node as t.ClassPrivateMethod;\n\n privateMethods = [\n t.functionExpression(\n undefined,\n params.filter(isNotTsParameter),\n body,\n isAsync,\n ),\n ];\n\n if (kind === GETTER || kind === SETTER) {\n movePrivateAccessor(\n element as NodePath<t.ClassPrivateMethod>,\n t.cloneNode(key),\n t.cloneNode(locals),\n isStatic,\n );\n } else {\n const node = element.node as t.ClassPrivateMethod;\n\n // Unshift\n path.node.body.body.unshift(\n t.classPrivateProperty(key, t.cloneNode(locals), [], node.static),\n );\n\n decoratedPrivateMethods.add(key.id.name);\n\n element.remove();\n }\n }\n\n let nameExpr: t.Expression;\n\n if (isComputed) {\n nameExpr = t.cloneNode(key as t.Expression);\n } else if (key.type === \"PrivateName\") {\n nameExpr = t.stringLiteral(key.id.name);\n } else if (key.type === \"Identifier\") {\n nameExpr = t.stringLiteral(key.name);\n } else {\n nameExpr = t.cloneNode(key as t.Expression);\n }\n\n elementDecoratorInfo.push({\n kind,\n decorators: decorators.map(d => d.node.expression),\n name: nameExpr,\n isStatic,\n privateMethods,\n locals,\n });\n\n if (kind !== FIELD) {\n if (isStatic) {\n requiresStaticInit = true;\n } else {\n requiresProtoInit = true;\n }\n }\n\n if (element.node) {\n element.node.decorators = null;\n }\n\n if (\n !firstFieldPath &&\n !isStatic &&\n (kind === FIELD || kind === ACCESSOR)\n ) {\n firstFieldPath = element as NodePath<\n t.ClassProperty | t.ClassPrivateProperty\n >;\n }\n }\n }\n }\n\n const elementDecorations = generateDecorationExprs(elementDecoratorInfo);\n const classDecorations = t.arrayExpression(\n (classDecorators || []).map(d => d.expression),\n );\n\n const elementLocals: t.Identifier[] =\n extractElementLocalAssignments(elementDecoratorInfo);\n\n if (requiresProtoInit) {\n protoInitLocal = scopeParent.generateDeclaredUidIdentifier(\"initProto\");\n elementLocals.push(protoInitLocal);\n\n const protoInitCall = t.callExpression(t.cloneNode(protoInitLocal), [\n t.thisExpression(),\n ]);\n\n if (firstFieldPath) {\n const value = firstFieldPath.get(\"value\");\n const body: t.Expression[] = [protoInitCall];\n\n if (value.node) {\n body.push(value.node);\n }\n\n value.replaceWith(t.sequenceExpression(body));\n } else if (constructorPath) {\n if (path.node.superClass) {\n path.traverse({\n CallExpression: {\n exit(path) {\n if (!path.get(\"callee\").isSuper()) return;\n\n path.replaceWith(\n t.callExpression(t.cloneNode(protoInitLocal), [path.node]),\n );\n\n path.skip();\n },\n },\n });\n } else {\n constructorPath.node.body.body.unshift(\n t.expressionStatement(protoInitCall),\n );\n }\n } else {\n const body: t.Statement[] = [t.expressionStatement(protoInitCall)];\n\n if (path.node.superClass) {\n body.unshift(\n t.expressionStatement(\n t.callExpression(t.super(), [\n t.spreadElement(t.identifier(\"args\")),\n ]),\n ),\n );\n }\n\n path.node.body.body.unshift(\n t.classMethod(\n \"constructor\",\n t.identifier(\"constructor\"),\n [t.restElement(t.identifier(\"args\"))],\n t.blockStatement(body),\n ),\n );\n }\n }\n\n if (requiresStaticInit) {\n staticInitLocal = scopeParent.generateDeclaredUidIdentifier(\"initStatic\");\n elementLocals.push(staticInitLocal);\n }\n\n if (decoratedPrivateMethods.size > 0) {\n path.traverse({\n PrivateName(path) {\n if (!decoratedPrivateMethods.has(path.node.id.name)) return;\n\n const parentPath = path.parentPath;\n const parentParentPath = parentPath.parentPath;\n\n if (\n // this.bar().#x = 123;\n (parentParentPath.node.type === \"AssignmentExpression\" &&\n parentParentPath.node.left === parentPath.node) ||\n // this.#x++;\n parentParentPath.node.type === \"UpdateExpression\" ||\n // ([...this.#x] = foo);\n parentParentPath.node.type === \"RestElement\" ||\n // ([this.#x] = foo);\n parentParentPath.node.type === \"ArrayPattern\" ||\n // ({ a: this.#x } = bar);\n (parentParentPath.node.type === \"ObjectProperty\" &&\n parentParentPath.node.value === parentPath.node &&\n parentParentPath.parentPath.type === \"ObjectPattern\") ||\n // for (this.#x of []);\n (parentParentPath.node.type === \"ForOfStatement\" &&\n parentParentPath.node.left === parentPath.node)\n ) {\n throw path.buildCodeFrameError(\n `Decorated private methods are not updatable, but \"#${path.node.id.name}\" is updated via this expression.`,\n );\n }\n },\n });\n }\n\n const classLocals: t.Identifier[] = [];\n let classInitInjected = false;\n const classInitCall =\n classInitLocal && t.callExpression(t.cloneNode(classInitLocal), []);\n\n const originalClass = path.node;\n\n if (classDecorators) {\n classLocals.push(classIdLocal, classInitLocal);\n const statics: (\n | t.ClassProperty\n | t.ClassPrivateProperty\n | t.ClassPrivateMethod\n )[] = [];\n let staticBlocks: t.StaticBlock[] = [];\n path.get(\"body.body\").forEach(element => {\n // Static blocks cannot be compiled to \"instance blocks\", but we can inline\n // them as IIFEs in the next property.\n if (element.isStaticBlock()) {\n staticBlocks.push(element.node);\n element.remove();\n return;\n }\n\n const isProperty =\n element.isClassProperty() || element.isClassPrivateProperty();\n\n if (\n (isProperty || element.isClassPrivateMethod()) &&\n element.node.static\n ) {\n if (isProperty && staticBlocks.length > 0) {\n const allValues: t.Expression[] = staticBlocks.map(staticBlockToIIFE);\n if (element.node.value) allValues.push(element.node.value);\n element.node.value = maybeSequenceExpression(allValues);\n staticBlocks = [];\n }\n\n element.node.static = false;\n statics.push(element.node);\n element.remove();\n }\n });\n\n if (statics.length > 0 || staticBlocks.length > 0) {\n const staticsClass = template.expression.ast`\n class extends ${state.addHelper(\"identity\")} {}\n ` as t.ClassExpression;\n staticsClass.body.body = [\n t.staticBlock([\n t.toStatement(originalClass, true) ||\n // If toStatement returns false, originalClass must be an anonymous ClassExpression,\n // because `export default @dec ...` has been handled in the export visitor before.\n t.expressionStatement(originalClass as t.ClassExpression),\n ]),\n ...statics,\n ];\n\n const constructorBody: t.Expression[] = [];\n\n const newExpr = t.newExpression(staticsClass, []);\n\n if (staticBlocks.length > 0) {\n constructorBody.push(...staticBlocks.map(staticBlockToIIFE));\n }\n if (classInitCall) {\n classInitInjected = true;\n constructorBody.push(classInitCall);\n }\n if (constructorBody.length > 0) {\n constructorBody.unshift(\n t.callExpression(t.super(), [t.cloneNode(classIdLocal)]),\n );\n\n staticsClass.body.body.push(\n t.classMethod(\n \"constructor\",\n t.identifier(\"constructor\"),\n [],\n t.blockStatement([\n t.expressionStatement(t.sequenceExpression(constructorBody)),\n ]),\n ),\n );\n } else {\n newExpr.arguments.push(t.cloneNode(classIdLocal));\n }\n\n path.replaceWith(newExpr);\n }\n }\n if (!classInitInjected && classInitCall) {\n path.node.body.body.push(\n t.staticBlock([t.expressionStatement(classInitCall)]),\n );\n }\n\n originalClass.body.body.unshift(\n t.staticBlock(\n [\n t.expressionStatement(\n createLocalsAssignment(\n elementLocals,\n classLocals,\n elementDecorations,\n classDecorations,\n needsInstancePrivateBrandCheck ? lastInstancePrivateName : null,\n state,\n version,\n ),\n ),\n requiresStaticInit &&\n t.expressionStatement(\n t.callExpression(t.cloneNode(staticInitLocal), [\n t.thisExpression(),\n ]),\n ),\n ].filter(Boolean),\n ),\n );\n\n // When path is a ClassExpression, path.insertBefore will convert `path`\n // into a SequenceExpression\n path.insertBefore(assignments.map(expr => t.expressionStatement(expr)));\n\n // Recrawl the scope to make sure new identifiers are properly synced\n path.scope.crawl();\n\n return path;\n}\n\nfunction createLocalsAssignment(\n elementLocals: t.Identifier[],\n classLocals: t.Identifier[],\n elementDecorations: t.ArrayExpression,\n classDecorations: t.ArrayExpression,\n maybePrivateBranName: t.PrivateName | null,\n state: PluginPass,\n version: DecoratorVersionKind,\n) {\n let lhs, rhs;\n const args: t.Expression[] = [\n t.thisExpression(),\n elementDecorations,\n classDecorations,\n ];\n // TODO(Babel 8): Only keep the else branch\n if (\n version === \"2021-12\" ||\n (version === \"2022-03\" && !state.availableHelper(\"applyDecs2203R\"))\n ) {\n lhs = t.arrayPattern([...elementLocals, ...classLocals]);\n rhs = t.callExpression(\n state.addHelper(version === \"2021-12\" ? \"applyDecs\" : \"applyDecs2203\"),\n args,\n );\n } else {\n // TODO(Babel 8): Only keep the if branch\n if (version === \"2023-01\") {\n if (maybePrivateBranName) {\n args.push(\n template.expression.ast`\n _ => ${t.cloneNode(maybePrivateBranName)} in _\n ` as t.ArrowFunctionExpression,\n );\n }\n rhs = t.callExpression(state.addHelper(\"applyDecs2301\"), args);\n } else {\n rhs = t.callExpression(state.addHelper(\"applyDecs2203R\"), args);\n }\n // optimize `{ c: [classLocals] } = applyapplyDecs2203R(...)` to\n // `[classLocals] = applyapplyDecs2203R(...).c`\n if (elementLocals.length > 0) {\n if (classLocals.length > 0) {\n lhs = t.objectPattern([\n t.objectProperty(t.identifier(\"e\"), t.arrayPattern(elementLocals)),\n t.objectProperty(t.identifier(\"c\"), t.arrayPattern(classLocals)),\n ]);\n } else {\n lhs = t.arrayPattern(elementLocals);\n rhs = t.memberExpression(rhs, t.identifier(\"e\"), false, false);\n }\n } else {\n // invariant: classLocals.length > 0\n lhs = t.arrayPattern(classLocals);\n rhs = t.memberExpression(rhs, t.identifier(\"c\"), false, false);\n }\n }\n return t.assignmentExpression(\"=\", lhs, rhs);\n}\n\nexport default function (\n { assertVersion, assumption }: PluginAPI,\n { loose }: Options,\n version: \"2023-01\" | \"2022-03\" | \"2021-12\",\n): PluginObject {\n if (version === \"2023-01\") {\n assertVersion(\"^7.21.0\");\n } else if (version === \"2021-12\") {\n assertVersion(\"^7.16.0\");\n } else {\n assertVersion(\"^7.19.0\");\n }\n\n const VISITED = new WeakSet<NodePath>();\n const constantSuper = assumption(\"constantSuper\") ?? loose;\n\n return {\n name: \"proposal-decorators\",\n inherits: syntaxDecorators,\n\n visitor: {\n \"ExportNamedDeclaration|ExportDefaultDeclaration\"(\n path: NodePath<t.ExportNamedDeclaration | t.ExportDefaultDeclaration>,\n ) {\n const { declaration } = path.node;\n if (\n declaration?.type === \"ClassDeclaration\" &&\n // When compiling class decorators we need to replace the class\n // binding, so we must split it in two separate declarations.\n declaration.decorators?.length > 0\n ) {\n splitExportDeclaration(path);\n }\n },\n\n Class(path, state) {\n if (VISITED.has(path)) return;\n\n const newPath = transformClass(path, state, constantSuper, version);\n if (newPath) VISITED.add(newPath);\n },\n },\n };\n}\n"],"mappings":"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"}
|
|
@@ -1,20 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
var _core = require("@babel/core");
|
|
8
|
-
const buildClassDecorator = _core.template.statement(`
|
|
1
|
+
import { template, types as t } from "@babel/core";
|
|
2
|
+
const buildClassDecorator = template.statement(`
|
|
9
3
|
DECORATOR(CLASS_REF = INNER) || CLASS_REF;
|
|
10
4
|
`);
|
|
11
|
-
const buildClassPrototype =
|
|
5
|
+
const buildClassPrototype = template(`
|
|
12
6
|
CLASS_REF.prototype;
|
|
13
7
|
`);
|
|
14
|
-
const buildGetDescriptor =
|
|
8
|
+
const buildGetDescriptor = template(`
|
|
15
9
|
Object.getOwnPropertyDescriptor(TARGET, PROPERTY);
|
|
16
10
|
`);
|
|
17
|
-
const buildGetObjectInitializer =
|
|
11
|
+
const buildGetObjectInitializer = template(`
|
|
18
12
|
(TEMP = Object.getOwnPropertyDescriptor(TARGET, PROPERTY), (TEMP = TEMP ? TEMP.value : undefined), {
|
|
19
13
|
enumerable: true,
|
|
20
14
|
configurable: true,
|
|
@@ -27,12 +21,12 @@ const buildGetObjectInitializer = (0, _core.template)(`
|
|
|
27
21
|
const WARNING_CALLS = new WeakSet();
|
|
28
22
|
function applyEnsureOrdering(path) {
|
|
29
23
|
const decorators = (path.isClass() ? [path, ...path.get("body.body")] : path.get("properties")).reduce((acc, prop) => acc.concat(prop.node.decorators || []), []);
|
|
30
|
-
const identDecorators = decorators.filter(decorator => !
|
|
24
|
+
const identDecorators = decorators.filter(decorator => !t.isIdentifier(decorator.expression));
|
|
31
25
|
if (identDecorators.length === 0) return;
|
|
32
|
-
return
|
|
26
|
+
return t.sequenceExpression(identDecorators.map(decorator => {
|
|
33
27
|
const expression = decorator.expression;
|
|
34
28
|
const id = decorator.expression = path.scope.generateDeclaredUidIdentifier("dec");
|
|
35
|
-
return
|
|
29
|
+
return t.assignmentExpression("=", id, expression);
|
|
36
30
|
}).concat([path.node]));
|
|
37
31
|
}
|
|
38
32
|
function applyClassDecorators(classPath) {
|
|
@@ -42,8 +36,8 @@ function applyClassDecorators(classPath) {
|
|
|
42
36
|
const name = classPath.scope.generateDeclaredUidIdentifier("class");
|
|
43
37
|
return decorators.map(dec => dec.expression).reverse().reduce(function (acc, decorator) {
|
|
44
38
|
return buildClassDecorator({
|
|
45
|
-
CLASS_REF:
|
|
46
|
-
DECORATOR:
|
|
39
|
+
CLASS_REF: t.cloneNode(name),
|
|
40
|
+
DECORATOR: t.cloneNode(decorator),
|
|
47
41
|
INNER: acc
|
|
48
42
|
}).expression;
|
|
49
43
|
}, classPath.node);
|
|
@@ -77,33 +71,33 @@ function applyTargetDecorators(path, state, decoratedProps) {
|
|
|
77
71
|
if (node.computed) {
|
|
78
72
|
throw path.buildCodeFrameError("Computed method/property decorators are not yet supported.");
|
|
79
73
|
}
|
|
80
|
-
const property =
|
|
74
|
+
const property = t.isLiteral(node.key) ? node.key : t.stringLiteral(node.key.name);
|
|
81
75
|
const target = path.isClass() && !node.static ? buildClassPrototype({
|
|
82
76
|
CLASS_REF: name
|
|
83
77
|
}).expression : name;
|
|
84
|
-
if (
|
|
78
|
+
if (t.isClassProperty(node, {
|
|
85
79
|
static: false
|
|
86
80
|
})) {
|
|
87
81
|
const descriptor = path.scope.generateDeclaredUidIdentifier("descriptor");
|
|
88
|
-
const initializer = node.value ?
|
|
89
|
-
node.value =
|
|
82
|
+
const initializer = node.value ? t.functionExpression(null, [], t.blockStatement([t.returnStatement(node.value)])) : t.nullLiteral();
|
|
83
|
+
node.value = t.callExpression(state.addHelper("initializerWarningHelper"), [descriptor, t.thisExpression()]);
|
|
90
84
|
WARNING_CALLS.add(node.value);
|
|
91
|
-
acc.push(
|
|
85
|
+
acc.push(t.assignmentExpression("=", t.cloneNode(descriptor), t.callExpression(state.addHelper("applyDecoratedDescriptor"), [t.cloneNode(target), t.cloneNode(property), t.arrayExpression(decorators.map(dec => t.cloneNode(dec.expression))), t.objectExpression([t.objectProperty(t.identifier("configurable"), t.booleanLiteral(true)), t.objectProperty(t.identifier("enumerable"), t.booleanLiteral(true)), t.objectProperty(t.identifier("writable"), t.booleanLiteral(true)), t.objectProperty(t.identifier("initializer"), initializer)])])));
|
|
92
86
|
} else {
|
|
93
|
-
acc.push(
|
|
87
|
+
acc.push(t.callExpression(state.addHelper("applyDecoratedDescriptor"), [t.cloneNode(target), t.cloneNode(property), t.arrayExpression(decorators.map(dec => t.cloneNode(dec.expression))), t.isObjectProperty(node) || t.isClassProperty(node, {
|
|
94
88
|
static: true
|
|
95
89
|
}) ? buildGetObjectInitializer({
|
|
96
90
|
TEMP: path.scope.generateDeclaredUidIdentifier("init"),
|
|
97
|
-
TARGET:
|
|
98
|
-
PROPERTY:
|
|
91
|
+
TARGET: t.cloneNode(target),
|
|
92
|
+
PROPERTY: t.cloneNode(property)
|
|
99
93
|
}).expression : buildGetDescriptor({
|
|
100
|
-
TARGET:
|
|
101
|
-
PROPERTY:
|
|
102
|
-
}).expression,
|
|
94
|
+
TARGET: t.cloneNode(target),
|
|
95
|
+
PROPERTY: t.cloneNode(property)
|
|
96
|
+
}).expression, t.cloneNode(target)]));
|
|
103
97
|
}
|
|
104
98
|
return acc;
|
|
105
99
|
}, []);
|
|
106
|
-
return
|
|
100
|
+
return t.sequenceExpression([t.assignmentExpression("=", t.cloneNode(name), path.node), t.sequenceExpression(exprs), t.cloneNode(name)]);
|
|
107
101
|
}
|
|
108
102
|
function decoratedClassToExpression({
|
|
109
103
|
node,
|
|
@@ -112,8 +106,8 @@ function decoratedClassToExpression({
|
|
|
112
106
|
if (!hasClassDecorators(node) && !hasMethodDecorators(node.body.body)) {
|
|
113
107
|
return;
|
|
114
108
|
}
|
|
115
|
-
const ref = node.id ?
|
|
116
|
-
return
|
|
109
|
+
const ref = node.id ? t.cloneNode(node.id) : scope.generateUidIdentifier("class");
|
|
110
|
+
return t.variableDeclaration("let", [t.variableDeclarator(ref, t.toExpression(node))]);
|
|
117
111
|
}
|
|
118
112
|
const visitor = {
|
|
119
113
|
ExportDefaultDeclaration(path) {
|
|
@@ -121,7 +115,7 @@ const visitor = {
|
|
|
121
115
|
if (!decl.isClassDeclaration()) return;
|
|
122
116
|
const replacement = decoratedClassToExpression(decl);
|
|
123
117
|
if (replacement) {
|
|
124
|
-
const [varDeclPath] = path.replaceWithMultiple([replacement,
|
|
118
|
+
const [varDeclPath] = path.replaceWithMultiple([replacement, t.exportNamedDeclaration(null, [t.exportSpecifier(t.cloneNode(replacement.declarations[0].id), t.identifier("default"))])]);
|
|
125
119
|
if (!decl.node.id) {
|
|
126
120
|
path.scope.registerDeclaration(varDeclPath);
|
|
127
121
|
}
|
|
@@ -148,7 +142,7 @@ const visitor = {
|
|
|
148
142
|
},
|
|
149
143
|
AssignmentExpression(path, state) {
|
|
150
144
|
if (!WARNING_CALLS.has(path.node.right)) return;
|
|
151
|
-
path.replaceWith(
|
|
145
|
+
path.replaceWith(t.callExpression(state.addHelper("initializerDefineProperty"), [t.cloneNode(path.get("left.object").node), t.stringLiteral(path.get("left.property").node.name || path.get("left.property").node.value), t.cloneNode(path.get("right.arguments")[0].node), t.cloneNode(path.get("right.arguments")[1].node)]));
|
|
152
146
|
},
|
|
153
147
|
CallExpression(path, state) {
|
|
154
148
|
if (path.node.arguments.length !== 3) return;
|
|
@@ -156,10 +150,9 @@ const visitor = {
|
|
|
156
150
|
if (path.node.callee.name !== state.addHelper("defineProperty").name) {
|
|
157
151
|
return;
|
|
158
152
|
}
|
|
159
|
-
path.replaceWith(
|
|
153
|
+
path.replaceWith(t.callExpression(state.addHelper("initializerDefineProperty"), [t.cloneNode(path.get("arguments")[0].node), t.cloneNode(path.get("arguments")[1].node), t.cloneNode(path.get("arguments.2.arguments")[0].node), t.cloneNode(path.get("arguments.2.arguments")[1].node)]));
|
|
160
154
|
}
|
|
161
155
|
};
|
|
162
|
-
|
|
163
|
-
exports.default = _default;
|
|
156
|
+
export default visitor;
|
|
164
157
|
|
|
165
158
|
//# sourceMappingURL=transformer-legacy.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["buildClassDecorator","template","statement","buildClassPrototype","buildGetDescriptor","buildGetObjectInitializer","WARNING_CALLS","WeakSet","applyEnsureOrdering","path","decorators","isClass","get","reduce","acc","prop","concat","node","identDecorators","filter","decorator","t","isIdentifier","expression","length","sequenceExpression","map","id","scope","generateDeclaredUidIdentifier","assignmentExpression","applyClassDecorators","classPath","hasClassDecorators","name","dec","reverse","CLASS_REF","cloneNode","DECORATOR","INNER","classNode","applyMethodDecorators","state","hasMethodDecorators","body","applyTargetDecorators","some","applyObjectDecorators","properties","type","decoratedProps","exprs","computed","buildCodeFrameError","property","isLiteral","key","stringLiteral","target","static","isClassProperty","descriptor","initializer","value","functionExpression","blockStatement","returnStatement","nullLiteral","callExpression","addHelper","thisExpression","add","push","arrayExpression","objectExpression","objectProperty","identifier","booleanLiteral","isObjectProperty","TEMP","TARGET","PROPERTY","decoratedClassToExpression","ref","generateUidIdentifier","variableDeclaration","variableDeclarator","toExpression","visitor","ExportDefaultDeclaration","decl","isClassDeclaration","replacement","varDeclPath","replaceWithMultiple","exportNamedDeclaration","exportSpecifier","declarations","registerDeclaration","ClassDeclaration","newPath","replaceWith","binding","getOwnBinding","ClassExpression","decoratedClass","ObjectExpression","decoratedObject","AssignmentExpression","has","right","CallExpression","arguments","callee"],"sources":["../src/transformer-legacy.ts"],"sourcesContent":["// Fork of https://github.com/loganfsmyth/babel-plugin-proposal-decorators-legacy\n\nimport { template, types as t, type PluginPass } from \"@babel/core\";\nimport type { NodePath, Visitor } from \"@babel/traverse\";\n\nconst buildClassDecorator = template.statement(`\n DECORATOR(CLASS_REF = INNER) || CLASS_REF;\n`) as (replacements: {\n DECORATOR: t.Expression;\n CLASS_REF: t.Identifier;\n INNER: t.Expression;\n}) => t.ExpressionStatement;\n\nconst buildClassPrototype = template(`\n CLASS_REF.prototype;\n`) as (replacements: { CLASS_REF: t.Identifier }) => t.ExpressionStatement;\n\nconst buildGetDescriptor = template(`\n Object.getOwnPropertyDescriptor(TARGET, PROPERTY);\n`) as (replacements: {\n TARGET: t.Expression;\n PROPERTY: t.Literal;\n}) => t.ExpressionStatement;\n\nconst buildGetObjectInitializer = template(`\n (TEMP = Object.getOwnPropertyDescriptor(TARGET, PROPERTY), (TEMP = TEMP ? TEMP.value : undefined), {\n enumerable: true,\n configurable: true,\n writable: true,\n initializer: function(){\n return TEMP;\n }\n })\n`) as (replacements: {\n TEMP: t.Identifier;\n TARGET: t.Expression;\n PROPERTY: t.Literal;\n}) => t.ExpressionStatement;\n\nconst WARNING_CALLS = new WeakSet();\n\n// legacy decorator does not support ClassAccessorProperty\ntype ClassDecoratableElement =\n | t.ClassMethod\n | t.ClassPrivateMethod\n | t.ClassProperty\n | t.ClassPrivateProperty;\n\n/**\n * If the decorator expressions are non-identifiers, hoist them to before the class so we can be sure\n * that they are evaluated in order.\n */\nfunction applyEnsureOrdering(\n path: NodePath<t.ClassExpression | t.ObjectExpression>,\n) {\n // TODO: This should probably also hoist computed properties.\n const decorators: t.Decorator[] = (\n path.isClass()\n ? [\n path,\n ...(path.get(\"body.body\") as NodePath<ClassDecoratableElement>[]),\n ]\n : path.get(\"properties\")\n ).reduce(\n (\n acc: t.Decorator[],\n prop: NodePath<\n t.ObjectMember | t.ClassExpression | ClassDecoratableElement\n >,\n ) => acc.concat(prop.node.decorators || []),\n [],\n );\n\n const identDecorators = decorators.filter(\n decorator => !t.isIdentifier(decorator.expression),\n );\n if (identDecorators.length === 0) return;\n\n return t.sequenceExpression(\n identDecorators\n .map((decorator): t.Expression => {\n const expression = decorator.expression;\n const id = (decorator.expression =\n path.scope.generateDeclaredUidIdentifier(\"dec\"));\n return t.assignmentExpression(\"=\", id, expression);\n })\n .concat([path.node]),\n );\n}\n\n/**\n * Given a class expression with class-level decorators, create a new expression\n * with the proper decorated behavior.\n */\nfunction applyClassDecorators(classPath: NodePath<t.ClassExpression>) {\n if (!hasClassDecorators(classPath.node)) return;\n\n const decorators = classPath.node.decorators || [];\n classPath.node.decorators = null;\n\n const name = classPath.scope.generateDeclaredUidIdentifier(\"class\");\n\n return decorators\n .map(dec => dec.expression)\n .reverse()\n .reduce(function (acc, decorator) {\n return buildClassDecorator({\n CLASS_REF: t.cloneNode(name),\n DECORATOR: t.cloneNode(decorator),\n INNER: acc,\n }).expression;\n }, classPath.node);\n}\n\nfunction hasClassDecorators(classNode: t.Class) {\n return !!(classNode.decorators && classNode.decorators.length);\n}\n\n/**\n * Given a class expression with method-level decorators, create a new expression\n * with the proper decorated behavior.\n */\nfunction applyMethodDecorators(\n path: NodePath<t.ClassExpression>,\n state: PluginPass,\n) {\n if (!hasMethodDecorators(path.node.body.body)) return;\n\n return applyTargetDecorators(\n path,\n state,\n // @ts-expect-error ClassAccessorProperty is not supported in legacy decorator\n path.node.body.body,\n );\n}\n\nfunction hasMethodDecorators(\n body: t.ClassBody[\"body\"] | t.ObjectExpression[\"properties\"],\n) {\n return body.some(\n node =>\n // @ts-expect-error decorators not in SpreadElement/StaticBlock\n node.decorators?.length,\n );\n}\n\n/**\n * Given an object expression with property decorators, create a new expression\n * with the proper decorated behavior.\n */\nfunction applyObjectDecorators(\n path: NodePath<t.ObjectExpression>,\n state: PluginPass,\n) {\n if (!hasMethodDecorators(path.node.properties)) return;\n\n return applyTargetDecorators(\n path,\n state,\n path.node.properties.filter(\n (prop): prop is t.ObjectMember => prop.type !== \"SpreadElement\",\n ),\n );\n}\n\n/**\n * A helper to pull out property decorators into a sequence expression.\n */\nfunction applyTargetDecorators(\n path: NodePath<t.ClassExpression | t.ObjectExpression>,\n state: PluginPass,\n decoratedProps: (t.ObjectMember | ClassDecoratableElement)[],\n) {\n const name = path.scope.generateDeclaredUidIdentifier(\n path.isClass() ? \"class\" : \"obj\",\n );\n\n const exprs = decoratedProps.reduce(function (acc, node) {\n let decorators: t.Decorator[] = [];\n if (node.decorators != null) {\n decorators = node.decorators;\n node.decorators = null;\n }\n\n if (decorators.length === 0) return acc;\n\n if (\n // @ts-expect-error computed is not in ClassPrivateProperty\n node.computed\n ) {\n throw path.buildCodeFrameError(\n \"Computed method/property decorators are not yet supported.\",\n );\n }\n\n const property: t.Literal = t.isLiteral(node.key)\n ? node.key\n : t.stringLiteral(\n // @ts-expect-error: should we handle ClassPrivateProperty?\n node.key.name,\n );\n\n const target =\n path.isClass() && !(node as ClassDecoratableElement).static\n ? buildClassPrototype({\n CLASS_REF: name,\n }).expression\n : name;\n\n if (t.isClassProperty(node, { static: false })) {\n const descriptor = path.scope.generateDeclaredUidIdentifier(\"descriptor\");\n\n const initializer = node.value\n ? t.functionExpression(\n null,\n [],\n t.blockStatement([t.returnStatement(node.value)]),\n )\n : t.nullLiteral();\n\n node.value = t.callExpression(\n state.addHelper(\"initializerWarningHelper\"),\n [descriptor, t.thisExpression()],\n );\n\n WARNING_CALLS.add(node.value);\n\n acc.push(\n t.assignmentExpression(\n \"=\",\n t.cloneNode(descriptor),\n t.callExpression(state.addHelper(\"applyDecoratedDescriptor\"), [\n t.cloneNode(target),\n t.cloneNode(property),\n t.arrayExpression(\n decorators.map(dec => t.cloneNode(dec.expression)),\n ),\n t.objectExpression([\n t.objectProperty(\n t.identifier(\"configurable\"),\n t.booleanLiteral(true),\n ),\n t.objectProperty(\n t.identifier(\"enumerable\"),\n t.booleanLiteral(true),\n ),\n t.objectProperty(\n t.identifier(\"writable\"),\n t.booleanLiteral(true),\n ),\n t.objectProperty(t.identifier(\"initializer\"), initializer),\n ]),\n ]),\n ),\n );\n } else {\n acc.push(\n t.callExpression(state.addHelper(\"applyDecoratedDescriptor\"), [\n t.cloneNode(target),\n t.cloneNode(property),\n t.arrayExpression(decorators.map(dec => t.cloneNode(dec.expression))),\n t.isObjectProperty(node) || t.isClassProperty(node, { static: true })\n ? buildGetObjectInitializer({\n TEMP: path.scope.generateDeclaredUidIdentifier(\"init\"),\n TARGET: t.cloneNode(target),\n PROPERTY: t.cloneNode(property),\n }).expression\n : buildGetDescriptor({\n TARGET: t.cloneNode(target),\n PROPERTY: t.cloneNode(property),\n }).expression,\n t.cloneNode(target),\n ]),\n );\n }\n\n return acc;\n }, []);\n\n return t.sequenceExpression([\n t.assignmentExpression(\"=\", t.cloneNode(name), path.node),\n t.sequenceExpression(exprs),\n t.cloneNode(name),\n ]);\n}\n\nfunction decoratedClassToExpression({ node, scope }: NodePath<t.Class>) {\n if (!hasClassDecorators(node) && !hasMethodDecorators(node.body.body)) {\n return;\n }\n\n const ref = node.id\n ? t.cloneNode(node.id)\n : scope.generateUidIdentifier(\"class\");\n\n return t.variableDeclaration(\"let\", [\n t.variableDeclarator(ref, t.toExpression(node)),\n ]);\n}\n\nconst visitor: Visitor<PluginPass> = {\n ExportDefaultDeclaration(path) {\n const decl = path.get(\"declaration\");\n if (!decl.isClassDeclaration()) return;\n\n const replacement = decoratedClassToExpression(decl);\n if (replacement) {\n const [varDeclPath] = path.replaceWithMultiple([\n replacement,\n t.exportNamedDeclaration(null, [\n t.exportSpecifier(\n // @ts-expect-error todo(flow->ts) might be add more specific return type for decoratedClassToExpression\n t.cloneNode(replacement.declarations[0].id),\n t.identifier(\"default\"),\n ),\n ]),\n ]);\n\n if (!decl.node.id) {\n path.scope.registerDeclaration(varDeclPath);\n }\n }\n },\n ClassDeclaration(path) {\n const replacement = decoratedClassToExpression(path);\n if (replacement) {\n const [newPath] = path.replaceWith(replacement);\n\n const decl = newPath.get(\"declarations.0\");\n const id = decl.node.id as t.Identifier;\n\n // TODO: Maybe add this logic to @babel/traverse\n const binding = path.scope.getOwnBinding(id.name);\n binding.identifier = id;\n binding.path = decl;\n }\n },\n ClassExpression(path, state) {\n // Create a replacement for the class node if there is one. We do one pass to replace classes with\n // class decorators, and a second pass to process method decorators.\n const decoratedClass =\n applyEnsureOrdering(path) ||\n applyClassDecorators(path) ||\n applyMethodDecorators(path, state);\n\n if (decoratedClass) path.replaceWith(decoratedClass);\n },\n ObjectExpression(path, state) {\n const decoratedObject =\n applyEnsureOrdering(path) || applyObjectDecorators(path, state);\n\n if (decoratedObject) path.replaceWith(decoratedObject);\n },\n\n AssignmentExpression(path, state) {\n if (!WARNING_CALLS.has(path.node.right)) return;\n\n path.replaceWith(\n t.callExpression(state.addHelper(\"initializerDefineProperty\"), [\n // @ts-expect-error todo(flow->ts) typesafe NodePath.get\n t.cloneNode(path.get(\"left.object\").node),\n t.stringLiteral(\n // @ts-expect-error todo(flow->ts) typesafe NodePath.get\n path.get(\"left.property\").node.name ||\n // @ts-expect-error todo(flow->ts) typesafe NodePath.get\n path.get(\"left.property\").node.value,\n ),\n // @ts-expect-error todo(flow->ts)\n t.cloneNode(path.get(\"right.arguments\")[0].node),\n // @ts-expect-error todo(flow->ts)\n t.cloneNode(path.get(\"right.arguments\")[1].node),\n ]),\n );\n },\n\n CallExpression(path, state) {\n if (path.node.arguments.length !== 3) return;\n if (!WARNING_CALLS.has(path.node.arguments[2])) return;\n\n // If the class properties plugin isn't enabled, this line will add an unused helper\n // to the code. It's not ideal, but it's ok since the configuration is not valid anyway.\n // @ts-expect-error todo(flow->ts) check that `callee` is Identifier\n if (path.node.callee.name !== state.addHelper(\"defineProperty\").name) {\n return;\n }\n\n path.replaceWith(\n t.callExpression(state.addHelper(\"initializerDefineProperty\"), [\n t.cloneNode(path.get(\"arguments\")[0].node),\n t.cloneNode(path.get(\"arguments\")[1].node),\n // @ts-expect-error todo(flow->ts)\n t.cloneNode(path.get(\"arguments.2.arguments\")[0].node),\n // @ts-expect-error todo(flow->ts)\n t.cloneNode(path.get(\"arguments.2.arguments\")[1].node),\n ]),\n );\n },\n};\n\nexport default visitor;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["template","types","t","buildClassDecorator","statement","buildClassPrototype","buildGetDescriptor","buildGetObjectInitializer","WARNING_CALLS","WeakSet","applyEnsureOrdering","path","decorators","isClass","get","reduce","acc","prop","concat","node","identDecorators","filter","decorator","isIdentifier","expression","length","sequenceExpression","map","id","scope","generateDeclaredUidIdentifier","assignmentExpression","applyClassDecorators","classPath","hasClassDecorators","name","dec","reverse","CLASS_REF","cloneNode","DECORATOR","INNER","classNode","applyMethodDecorators","state","hasMethodDecorators","body","applyTargetDecorators","some","_node$decorators","applyObjectDecorators","properties","type","decoratedProps","exprs","computed","buildCodeFrameError","property","isLiteral","key","stringLiteral","target","static","isClassProperty","descriptor","initializer","value","functionExpression","blockStatement","returnStatement","nullLiteral","callExpression","addHelper","thisExpression","add","push","arrayExpression","objectExpression","objectProperty","identifier","booleanLiteral","isObjectProperty","TEMP","TARGET","PROPERTY","decoratedClassToExpression","ref","generateUidIdentifier","variableDeclaration","variableDeclarator","toExpression","visitor","ExportDefaultDeclaration","decl","isClassDeclaration","replacement","varDeclPath","replaceWithMultiple","exportNamedDeclaration","exportSpecifier","declarations","registerDeclaration","ClassDeclaration","newPath","replaceWith","binding","getOwnBinding","ClassExpression","decoratedClass","ObjectExpression","decoratedObject","AssignmentExpression","has","right","CallExpression","arguments","callee"],"sources":["../src/transformer-legacy.ts"],"sourcesContent":["// Fork of https://github.com/loganfsmyth/babel-plugin-proposal-decorators-legacy\n\nimport { template, types as t, type PluginPass } from \"@babel/core\";\nimport type { NodePath, Visitor } from \"@babel/traverse\";\n\nconst buildClassDecorator = template.statement(`\n DECORATOR(CLASS_REF = INNER) || CLASS_REF;\n`) as (replacements: {\n DECORATOR: t.Expression;\n CLASS_REF: t.Identifier;\n INNER: t.Expression;\n}) => t.ExpressionStatement;\n\nconst buildClassPrototype = template(`\n CLASS_REF.prototype;\n`) as (replacements: { CLASS_REF: t.Identifier }) => t.ExpressionStatement;\n\nconst buildGetDescriptor = template(`\n Object.getOwnPropertyDescriptor(TARGET, PROPERTY);\n`) as (replacements: {\n TARGET: t.Expression;\n PROPERTY: t.Literal;\n}) => t.ExpressionStatement;\n\nconst buildGetObjectInitializer = template(`\n (TEMP = Object.getOwnPropertyDescriptor(TARGET, PROPERTY), (TEMP = TEMP ? TEMP.value : undefined), {\n enumerable: true,\n configurable: true,\n writable: true,\n initializer: function(){\n return TEMP;\n }\n })\n`) as (replacements: {\n TEMP: t.Identifier;\n TARGET: t.Expression;\n PROPERTY: t.Literal;\n}) => t.ExpressionStatement;\n\nconst WARNING_CALLS = new WeakSet();\n\n// legacy decorator does not support ClassAccessorProperty\ntype ClassDecoratableElement =\n | t.ClassMethod\n | t.ClassPrivateMethod\n | t.ClassProperty\n | t.ClassPrivateProperty;\n\n/**\n * If the decorator expressions are non-identifiers, hoist them to before the class so we can be sure\n * that they are evaluated in order.\n */\nfunction applyEnsureOrdering(\n path: NodePath<t.ClassExpression | t.ObjectExpression>,\n) {\n // TODO: This should probably also hoist computed properties.\n const decorators: t.Decorator[] = (\n path.isClass()\n ? [\n path,\n ...(path.get(\"body.body\") as NodePath<ClassDecoratableElement>[]),\n ]\n : path.get(\"properties\")\n ).reduce(\n (\n acc: t.Decorator[],\n prop: NodePath<\n t.ObjectMember | t.ClassExpression | ClassDecoratableElement\n >,\n ) => acc.concat(prop.node.decorators || []),\n [],\n );\n\n const identDecorators = decorators.filter(\n decorator => !t.isIdentifier(decorator.expression),\n );\n if (identDecorators.length === 0) return;\n\n return t.sequenceExpression(\n identDecorators\n .map((decorator): t.Expression => {\n const expression = decorator.expression;\n const id = (decorator.expression =\n path.scope.generateDeclaredUidIdentifier(\"dec\"));\n return t.assignmentExpression(\"=\", id, expression);\n })\n .concat([path.node]),\n );\n}\n\n/**\n * Given a class expression with class-level decorators, create a new expression\n * with the proper decorated behavior.\n */\nfunction applyClassDecorators(classPath: NodePath<t.ClassExpression>) {\n if (!hasClassDecorators(classPath.node)) return;\n\n const decorators = classPath.node.decorators || [];\n classPath.node.decorators = null;\n\n const name = classPath.scope.generateDeclaredUidIdentifier(\"class\");\n\n return decorators\n .map(dec => dec.expression)\n .reverse()\n .reduce(function (acc, decorator) {\n return buildClassDecorator({\n CLASS_REF: t.cloneNode(name),\n DECORATOR: t.cloneNode(decorator),\n INNER: acc,\n }).expression;\n }, classPath.node);\n}\n\nfunction hasClassDecorators(classNode: t.Class) {\n return !!(classNode.decorators && classNode.decorators.length);\n}\n\n/**\n * Given a class expression with method-level decorators, create a new expression\n * with the proper decorated behavior.\n */\nfunction applyMethodDecorators(\n path: NodePath<t.ClassExpression>,\n state: PluginPass,\n) {\n if (!hasMethodDecorators(path.node.body.body)) return;\n\n return applyTargetDecorators(\n path,\n state,\n // @ts-expect-error ClassAccessorProperty is not supported in legacy decorator\n path.node.body.body,\n );\n}\n\nfunction hasMethodDecorators(\n body: t.ClassBody[\"body\"] | t.ObjectExpression[\"properties\"],\n) {\n return body.some(\n node =>\n // @ts-expect-error decorators not in SpreadElement/StaticBlock\n node.decorators?.length,\n );\n}\n\n/**\n * Given an object expression with property decorators, create a new expression\n * with the proper decorated behavior.\n */\nfunction applyObjectDecorators(\n path: NodePath<t.ObjectExpression>,\n state: PluginPass,\n) {\n if (!hasMethodDecorators(path.node.properties)) return;\n\n return applyTargetDecorators(\n path,\n state,\n path.node.properties.filter(\n (prop): prop is t.ObjectMember => prop.type !== \"SpreadElement\",\n ),\n );\n}\n\n/**\n * A helper to pull out property decorators into a sequence expression.\n */\nfunction applyTargetDecorators(\n path: NodePath<t.ClassExpression | t.ObjectExpression>,\n state: PluginPass,\n decoratedProps: (t.ObjectMember | ClassDecoratableElement)[],\n) {\n const name = path.scope.generateDeclaredUidIdentifier(\n path.isClass() ? \"class\" : \"obj\",\n );\n\n const exprs = decoratedProps.reduce(function (acc, node) {\n let decorators: t.Decorator[] = [];\n if (node.decorators != null) {\n decorators = node.decorators;\n node.decorators = null;\n }\n\n if (decorators.length === 0) return acc;\n\n if (\n // @ts-expect-error computed is not in ClassPrivateProperty\n node.computed\n ) {\n throw path.buildCodeFrameError(\n \"Computed method/property decorators are not yet supported.\",\n );\n }\n\n const property: t.Literal = t.isLiteral(node.key)\n ? node.key\n : t.stringLiteral(\n // @ts-expect-error: should we handle ClassPrivateProperty?\n node.key.name,\n );\n\n const target =\n path.isClass() && !(node as ClassDecoratableElement).static\n ? buildClassPrototype({\n CLASS_REF: name,\n }).expression\n : name;\n\n if (t.isClassProperty(node, { static: false })) {\n const descriptor = path.scope.generateDeclaredUidIdentifier(\"descriptor\");\n\n const initializer = node.value\n ? t.functionExpression(\n null,\n [],\n t.blockStatement([t.returnStatement(node.value)]),\n )\n : t.nullLiteral();\n\n node.value = t.callExpression(\n state.addHelper(\"initializerWarningHelper\"),\n [descriptor, t.thisExpression()],\n );\n\n WARNING_CALLS.add(node.value);\n\n acc.push(\n t.assignmentExpression(\n \"=\",\n t.cloneNode(descriptor),\n t.callExpression(state.addHelper(\"applyDecoratedDescriptor\"), [\n t.cloneNode(target),\n t.cloneNode(property),\n t.arrayExpression(\n decorators.map(dec => t.cloneNode(dec.expression)),\n ),\n t.objectExpression([\n t.objectProperty(\n t.identifier(\"configurable\"),\n t.booleanLiteral(true),\n ),\n t.objectProperty(\n t.identifier(\"enumerable\"),\n t.booleanLiteral(true),\n ),\n t.objectProperty(\n t.identifier(\"writable\"),\n t.booleanLiteral(true),\n ),\n t.objectProperty(t.identifier(\"initializer\"), initializer),\n ]),\n ]),\n ),\n );\n } else {\n acc.push(\n t.callExpression(state.addHelper(\"applyDecoratedDescriptor\"), [\n t.cloneNode(target),\n t.cloneNode(property),\n t.arrayExpression(decorators.map(dec => t.cloneNode(dec.expression))),\n t.isObjectProperty(node) || t.isClassProperty(node, { static: true })\n ? buildGetObjectInitializer({\n TEMP: path.scope.generateDeclaredUidIdentifier(\"init\"),\n TARGET: t.cloneNode(target),\n PROPERTY: t.cloneNode(property),\n }).expression\n : buildGetDescriptor({\n TARGET: t.cloneNode(target),\n PROPERTY: t.cloneNode(property),\n }).expression,\n t.cloneNode(target),\n ]),\n );\n }\n\n return acc;\n }, []);\n\n return t.sequenceExpression([\n t.assignmentExpression(\"=\", t.cloneNode(name), path.node),\n t.sequenceExpression(exprs),\n t.cloneNode(name),\n ]);\n}\n\nfunction decoratedClassToExpression({ node, scope }: NodePath<t.Class>) {\n if (!hasClassDecorators(node) && !hasMethodDecorators(node.body.body)) {\n return;\n }\n\n const ref = node.id\n ? t.cloneNode(node.id)\n : scope.generateUidIdentifier(\"class\");\n\n return t.variableDeclaration(\"let\", [\n t.variableDeclarator(ref, t.toExpression(node)),\n ]);\n}\n\nconst visitor: Visitor<PluginPass> = {\n ExportDefaultDeclaration(path) {\n const decl = path.get(\"declaration\");\n if (!decl.isClassDeclaration()) return;\n\n const replacement = decoratedClassToExpression(decl);\n if (replacement) {\n const [varDeclPath] = path.replaceWithMultiple([\n replacement,\n t.exportNamedDeclaration(null, [\n t.exportSpecifier(\n // @ts-expect-error todo(flow->ts) might be add more specific return type for decoratedClassToExpression\n t.cloneNode(replacement.declarations[0].id),\n t.identifier(\"default\"),\n ),\n ]),\n ]);\n\n if (!decl.node.id) {\n path.scope.registerDeclaration(varDeclPath);\n }\n }\n },\n ClassDeclaration(path) {\n const replacement = decoratedClassToExpression(path);\n if (replacement) {\n const [newPath] = path.replaceWith(replacement);\n\n const decl = newPath.get(\"declarations.0\");\n const id = decl.node.id as t.Identifier;\n\n // TODO: Maybe add this logic to @babel/traverse\n const binding = path.scope.getOwnBinding(id.name);\n binding.identifier = id;\n binding.path = decl;\n }\n },\n ClassExpression(path, state) {\n // Create a replacement for the class node if there is one. We do one pass to replace classes with\n // class decorators, and a second pass to process method decorators.\n const decoratedClass =\n applyEnsureOrdering(path) ||\n applyClassDecorators(path) ||\n applyMethodDecorators(path, state);\n\n if (decoratedClass) path.replaceWith(decoratedClass);\n },\n ObjectExpression(path, state) {\n const decoratedObject =\n applyEnsureOrdering(path) || applyObjectDecorators(path, state);\n\n if (decoratedObject) path.replaceWith(decoratedObject);\n },\n\n AssignmentExpression(path, state) {\n if (!WARNING_CALLS.has(path.node.right)) return;\n\n path.replaceWith(\n t.callExpression(state.addHelper(\"initializerDefineProperty\"), [\n // @ts-expect-error todo(flow->ts) typesafe NodePath.get\n t.cloneNode(path.get(\"left.object\").node),\n t.stringLiteral(\n // @ts-expect-error todo(flow->ts) typesafe NodePath.get\n path.get(\"left.property\").node.name ||\n // @ts-expect-error todo(flow->ts) typesafe NodePath.get\n path.get(\"left.property\").node.value,\n ),\n // @ts-expect-error todo(flow->ts)\n t.cloneNode(path.get(\"right.arguments\")[0].node),\n // @ts-expect-error todo(flow->ts)\n t.cloneNode(path.get(\"right.arguments\")[1].node),\n ]),\n );\n },\n\n CallExpression(path, state) {\n if (path.node.arguments.length !== 3) return;\n if (!WARNING_CALLS.has(path.node.arguments[2])) return;\n\n // If the class properties plugin isn't enabled, this line will add an unused helper\n // to the code. It's not ideal, but it's ok since the configuration is not valid anyway.\n // @ts-expect-error todo(flow->ts) check that `callee` is Identifier\n if (path.node.callee.name !== state.addHelper(\"defineProperty\").name) {\n return;\n }\n\n path.replaceWith(\n t.callExpression(state.addHelper(\"initializerDefineProperty\"), [\n t.cloneNode(path.get(\"arguments\")[0].node),\n t.cloneNode(path.get(\"arguments\")[1].node),\n // @ts-expect-error todo(flow->ts)\n t.cloneNode(path.get(\"arguments.2.arguments\")[0].node),\n // @ts-expect-error todo(flow->ts)\n t.cloneNode(path.get(\"arguments.2.arguments\")[1].node),\n ]),\n );\n },\n};\n\nexport default visitor;\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@babel/plugin-proposal-decorators",
|
|
3
|
-
"version": "7.21.
|
|
3
|
+
"version": "7.21.4-esm.1",
|
|
4
4
|
"author": "The Babel Team (https://babel.dev/team)",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"publishConfig": {
|
|
@@ -20,19 +20,19 @@
|
|
|
20
20
|
"decorators"
|
|
21
21
|
],
|
|
22
22
|
"dependencies": {
|
|
23
|
-
"@babel/helper-create-class-features-plugin": "^7.21.
|
|
24
|
-
"@babel/helper-plugin-utils": "^7.
|
|
25
|
-
"@babel/helper-replace-supers": "^7.
|
|
26
|
-
"@babel/helper-split-export-declaration": "^7.
|
|
27
|
-
"@babel/plugin-syntax-decorators": "^7.21.
|
|
23
|
+
"@babel/helper-create-class-features-plugin": "^7.21.4-esm.1",
|
|
24
|
+
"@babel/helper-plugin-utils": "^7.21.4-esm.1",
|
|
25
|
+
"@babel/helper-replace-supers": "^7.21.4-esm.1",
|
|
26
|
+
"@babel/helper-split-export-declaration": "^7.21.4-esm.1",
|
|
27
|
+
"@babel/plugin-syntax-decorators": "^7.21.4-esm.1"
|
|
28
28
|
},
|
|
29
29
|
"peerDependencies": {
|
|
30
|
-
"@babel/core": "^7.0.0-0"
|
|
30
|
+
"@babel/core": "^7.0.0-0 || 7.21.4-esm.1"
|
|
31
31
|
},
|
|
32
32
|
"devDependencies": {
|
|
33
|
-
"@babel/core": "^7.21.
|
|
34
|
-
"@babel/helper-plugin-test-runner": "^7.
|
|
35
|
-
"@babel/traverse": "^7.21.
|
|
33
|
+
"@babel/core": "^7.21.4-esm.1",
|
|
34
|
+
"@babel/helper-plugin-test-runner": "^7.21.4-esm.1",
|
|
35
|
+
"@babel/traverse": "^7.21.4-esm.1",
|
|
36
36
|
"@types/charcodes": "^0.2.0",
|
|
37
37
|
"array.prototype.concat": "^1.0.2",
|
|
38
38
|
"babel-plugin-polyfill-es-shims": "^0.7.1",
|
|
@@ -42,5 +42,5 @@
|
|
|
42
42
|
"engines": {
|
|
43
43
|
"node": ">=6.9.0"
|
|
44
44
|
},
|
|
45
|
-
"type": "
|
|
45
|
+
"type": "module"
|
|
46
46
|
}
|