@babel/plugin-proposal-decorators 7.20.0 → 7.20.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/index.js +2 -8
- package/lib/index.js.map +1 -1
- package/lib/transformer-2022-03.js +15 -113
- package/lib/transformer-2022-03.js.map +1 -1
- package/lib/transformer-legacy.js +18 -30
- package/lib/transformer-legacy.js.map +1 -1
- package/package.json +5 -5
package/lib/index.js
CHANGED
|
@@ -4,19 +4,14 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
|
|
8
7
|
var _helperPluginUtils = require("@babel/helper-plugin-utils");
|
|
9
|
-
|
|
10
8
|
var _pluginSyntaxDecorators = require("@babel/plugin-syntax-decorators");
|
|
11
|
-
|
|
12
9
|
var _helperCreateClassFeaturesPlugin = require("@babel/helper-create-class-features-plugin");
|
|
13
|
-
|
|
14
10
|
var _transformerLegacy = require("./transformer-legacy");
|
|
15
|
-
|
|
16
11
|
var _transformer = require("./transformer-2022-03");
|
|
17
|
-
|
|
18
12
|
var _default = (0, _helperPluginUtils.declare)((api, options) => {
|
|
19
13
|
api.assertVersion(7);
|
|
14
|
+
|
|
20
15
|
{
|
|
21
16
|
var {
|
|
22
17
|
legacy
|
|
@@ -25,7 +20,6 @@ var _default = (0, _helperPluginUtils.declare)((api, options) => {
|
|
|
25
20
|
const {
|
|
26
21
|
version
|
|
27
22
|
} = options;
|
|
28
|
-
|
|
29
23
|
if (legacy || version === "legacy") {
|
|
30
24
|
return {
|
|
31
25
|
name: "proposal-decorators",
|
|
@@ -35,6 +29,7 @@ var _default = (0, _helperPluginUtils.declare)((api, options) => {
|
|
|
35
29
|
} else if (version === "2021-12" || version === "2022-03") {
|
|
36
30
|
return (0, _transformer.default)(api, options, version);
|
|
37
31
|
} else {
|
|
32
|
+
api.assertVersion("^7.0.2");
|
|
38
33
|
return (0, _helperCreateClassFeaturesPlugin.createClassFeaturePlugin)({
|
|
39
34
|
name: "proposal-decorators",
|
|
40
35
|
api,
|
|
@@ -43,7 +38,6 @@ var _default = (0, _helperPluginUtils.declare)((api, options) => {
|
|
|
43
38
|
});
|
|
44
39
|
}
|
|
45
40
|
});
|
|
46
|
-
|
|
47
41
|
exports.default = _default;
|
|
48
42
|
|
|
49
43
|
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["declare","api","options","assertVersion","legacy","version","name","inherits","syntaxDecorators","visitor","legacyVisitor","transformer2022_03","createClassFeaturePlugin","feature","FEATURES","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-2022-03\";\nimport type { Options as SyntaxOptions } from \"@babel/plugin-syntax-decorators\";\n\ninterface Options extends SyntaxOptions {\n /** @depreated 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 (version === \"2021-12\" || version === \"2022-03\") {\n return transformer2022_03(api, options, version);\n } else if (!process.env.BABEL_8_BREAKING) {\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' or '2022-03'.\",\n );\n }\n});\n"],"mappings":"
|
|
1
|
+
{"version":3,"names":["declare","api","options","assertVersion","legacy","version","name","inherits","syntaxDecorators","visitor","legacyVisitor","transformer2022_03","createClassFeaturePlugin","feature","FEATURES","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-2022-03\";\nimport type { Options as SyntaxOptions } from \"@babel/plugin-syntax-decorators\";\n\ninterface Options extends SyntaxOptions {\n /** @depreated 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 (version === \"2021-12\" || version === \"2022-03\") {\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' or '2022-03'.\",\n );\n }\n});\n"],"mappings":";;;;;;AAEA;AACA;AACA;AAIA;AACA;AAAuD,eAUxC,IAAAA,0BAAO,EAAC,CAACC,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,EAAEC,+BAAgB;MAC1BC,OAAO,EAAEC;IACX,CAAC;EACH,CAAC,MAAM,IAAIL,OAAO,KAAK,SAAS,IAAIA,OAAO,KAAK,SAAS,EAAE;IACzD,OAAO,IAAAM,oBAAkB,EAACV,GAAG,EAAEC,OAAO,EAAEG,OAAO,CAAC;EAClD,CAAC,MAAyC;IACxCJ,GAAG,CAACE,aAAa,CAAC,QAAQ,CAAC;IAC3B,OAAO,IAAAS,yDAAwB,EAAC;MAC9BN,IAAI,EAAE,qBAAqB;MAE3BL,GAAG;MACHY,OAAO,EAAEC,yCAAQ,CAACC,UAAU;MAC5BR,QAAQ,EAAEC;IAEZ,CAAC,CAAC;EACJ;AAKF,CAAC,CAAC;AAAA"}
|
|
@@ -4,23 +4,16 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = _default;
|
|
7
|
-
|
|
8
7
|
var _core = require("@babel/core");
|
|
9
|
-
|
|
10
8
|
var _pluginSyntaxDecorators = require("@babel/plugin-syntax-decorators");
|
|
11
|
-
|
|
12
9
|
var _helperReplaceSupers = require("@babel/helper-replace-supers");
|
|
13
|
-
|
|
14
10
|
var _helperSplitExportDeclaration = require("@babel/helper-split-export-declaration");
|
|
15
|
-
|
|
16
11
|
function incrementId(id, idx = id.length - 1) {
|
|
17
12
|
if (idx === -1) {
|
|
18
13
|
id.unshift(65);
|
|
19
14
|
return;
|
|
20
15
|
}
|
|
21
|
-
|
|
22
16
|
const current = id[idx];
|
|
23
|
-
|
|
24
17
|
if (current === 90) {
|
|
25
18
|
id[idx] = 97;
|
|
26
19
|
} else if (current === 122) {
|
|
@@ -38,16 +31,13 @@ function createPrivateUidGeneratorForClass(classPath) {
|
|
|
38
31
|
PrivateName(path) {
|
|
39
32
|
privateNames.add(path.node.id.name);
|
|
40
33
|
}
|
|
41
|
-
|
|
42
34
|
});
|
|
43
35
|
return () => {
|
|
44
36
|
let reifiedId;
|
|
45
|
-
|
|
46
37
|
do {
|
|
47
38
|
incrementId(currentPrivateId);
|
|
48
39
|
reifiedId = String.fromCharCode(...currentPrivateId);
|
|
49
40
|
} while (privateNames.has(reifiedId));
|
|
50
|
-
|
|
51
41
|
return _core.types.privateName(_core.types.identifier(reifiedId));
|
|
52
42
|
};
|
|
53
43
|
}
|
|
@@ -58,7 +48,6 @@ function createLazyPrivateUidGeneratorForClass(classPath) {
|
|
|
58
48
|
if (!generator) {
|
|
59
49
|
generator = createPrivateUidGeneratorForClass(classPath);
|
|
60
50
|
}
|
|
61
|
-
|
|
62
51
|
return generator();
|
|
63
52
|
};
|
|
64
53
|
}
|
|
@@ -66,9 +55,7 @@ function createLazyPrivateUidGeneratorForClass(classPath) {
|
|
|
66
55
|
function replaceClassWithVar(path) {
|
|
67
56
|
if (path.type === "ClassDeclaration") {
|
|
68
57
|
const varId = path.scope.generateUidIdentifierBasedOnNode(path.node.id);
|
|
69
|
-
|
|
70
58
|
const classId = _core.types.identifier(path.node.id.name);
|
|
71
|
-
|
|
72
59
|
path.scope.rename(classId.name, varId.name);
|
|
73
60
|
path.insertBefore(_core.types.variableDeclaration("let", [_core.types.variableDeclarator(varId)]));
|
|
74
61
|
path.get("id").replaceWith(classId);
|
|
@@ -76,7 +63,6 @@ function replaceClassWithVar(path) {
|
|
|
76
63
|
} else {
|
|
77
64
|
let className;
|
|
78
65
|
let varId;
|
|
79
|
-
|
|
80
66
|
if (path.node.id) {
|
|
81
67
|
className = path.node.id.name;
|
|
82
68
|
varId = path.scope.parent.generateDeclaredUidIdentifier(className);
|
|
@@ -87,14 +73,11 @@ function replaceClassWithVar(path) {
|
|
|
87
73
|
} else {
|
|
88
74
|
varId = path.scope.parent.generateDeclaredUidIdentifier("decorated_class");
|
|
89
75
|
}
|
|
90
|
-
|
|
91
76
|
const newClassExpr = _core.types.classExpression(className && _core.types.identifier(className), path.node.superClass, path.node.body);
|
|
92
|
-
|
|
93
77
|
const [newPath] = path.replaceWith(_core.types.sequenceExpression([newClassExpr, varId]));
|
|
94
78
|
return [_core.types.cloneNode(varId), newPath.get("expressions.0")];
|
|
95
79
|
}
|
|
96
80
|
}
|
|
97
|
-
|
|
98
81
|
function generateClassProperty(key, value, isStatic) {
|
|
99
82
|
if (key.type === "PrivateName") {
|
|
100
83
|
return _core.types.classPrivateProperty(key, value, undefined, isStatic);
|
|
@@ -102,18 +85,13 @@ function generateClassProperty(key, value, isStatic) {
|
|
|
102
85
|
return _core.types.classProperty(key, value, undefined, undefined, isStatic);
|
|
103
86
|
}
|
|
104
87
|
}
|
|
105
|
-
|
|
106
88
|
function addProxyAccessorsFor(element, originalKey, targetKey, isComputed = false) {
|
|
107
89
|
const {
|
|
108
90
|
static: isStatic
|
|
109
91
|
} = element.node;
|
|
110
|
-
|
|
111
92
|
const getterBody = _core.types.blockStatement([_core.types.returnStatement(_core.types.memberExpression(_core.types.thisExpression(), _core.types.cloneNode(targetKey)))]);
|
|
112
|
-
|
|
113
93
|
const setterBody = _core.types.blockStatement([_core.types.expressionStatement(_core.types.assignmentExpression("=", _core.types.memberExpression(_core.types.thisExpression(), _core.types.cloneNode(targetKey)), _core.types.identifier("v")))]);
|
|
114
|
-
|
|
115
94
|
let getter, setter;
|
|
116
|
-
|
|
117
95
|
if (originalKey.type === "PrivateName") {
|
|
118
96
|
getter = _core.types.classPrivateMethod("get", _core.types.cloneNode(originalKey), [], getterBody, isStatic);
|
|
119
97
|
setter = _core.types.classPrivateMethod("set", _core.types.cloneNode(originalKey), [_core.types.identifier("v")], setterBody, isStatic);
|
|
@@ -121,31 +99,25 @@ function addProxyAccessorsFor(element, originalKey, targetKey, isComputed = fals
|
|
|
121
99
|
getter = _core.types.classMethod("get", _core.types.cloneNode(originalKey), [], getterBody, isComputed, isStatic);
|
|
122
100
|
setter = _core.types.classMethod("set", _core.types.cloneNode(originalKey), [_core.types.identifier("v")], setterBody, isComputed, isStatic);
|
|
123
101
|
}
|
|
124
|
-
|
|
125
102
|
element.insertAfter(setter);
|
|
126
103
|
element.insertAfter(getter);
|
|
127
104
|
}
|
|
128
|
-
|
|
129
105
|
function extractProxyAccessorsFor(targetKey) {
|
|
130
106
|
return [_core.types.functionExpression(undefined, [], _core.types.blockStatement([_core.types.returnStatement(_core.types.memberExpression(_core.types.thisExpression(), _core.types.cloneNode(targetKey)))])), _core.types.functionExpression(undefined, [_core.types.identifier("value")], _core.types.blockStatement([_core.types.expressionStatement(_core.types.assignmentExpression("=", _core.types.memberExpression(_core.types.thisExpression(), _core.types.cloneNode(targetKey)), _core.types.identifier("value")))]))];
|
|
131
107
|
}
|
|
132
|
-
|
|
133
108
|
const FIELD = 0;
|
|
134
109
|
const ACCESSOR = 1;
|
|
135
110
|
const METHOD = 2;
|
|
136
111
|
const GETTER = 3;
|
|
137
112
|
const SETTER = 4;
|
|
138
113
|
const STATIC = 5;
|
|
139
|
-
|
|
140
114
|
function getElementKind(element) {
|
|
141
115
|
switch (element.node.type) {
|
|
142
116
|
case "ClassProperty":
|
|
143
117
|
case "ClassPrivateProperty":
|
|
144
118
|
return FIELD;
|
|
145
|
-
|
|
146
119
|
case "ClassAccessorProperty":
|
|
147
120
|
return ACCESSOR;
|
|
148
|
-
|
|
149
121
|
case "ClassMethod":
|
|
150
122
|
case "ClassPrivateMethod":
|
|
151
123
|
if (element.node.kind === "get") {
|
|
@@ -155,19 +127,16 @@ function getElementKind(element) {
|
|
|
155
127
|
} else {
|
|
156
128
|
return METHOD;
|
|
157
129
|
}
|
|
158
|
-
|
|
159
130
|
}
|
|
160
131
|
}
|
|
161
132
|
|
|
162
133
|
function isDecoratorInfo(info) {
|
|
163
134
|
return "decorators" in info;
|
|
164
135
|
}
|
|
165
|
-
|
|
166
136
|
function filteredOrderedDecoratorInfo(info) {
|
|
167
137
|
const filtered = info.filter(isDecoratorInfo);
|
|
168
138
|
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)];
|
|
169
139
|
}
|
|
170
|
-
|
|
171
140
|
function generateDecorationExprs(info) {
|
|
172
141
|
return _core.types.arrayExpression(filteredOrderedDecoratorInfo(info).map(el => {
|
|
173
142
|
const decs = el.decorators.length > 1 ? _core.types.arrayExpression(el.decorators) : el.decorators[0];
|
|
@@ -176,48 +145,38 @@ function generateDecorationExprs(info) {
|
|
|
176
145
|
const {
|
|
177
146
|
privateMethods
|
|
178
147
|
} = el;
|
|
179
|
-
|
|
180
148
|
if (Array.isArray(privateMethods)) {
|
|
181
149
|
decInfo.push(...privateMethods);
|
|
182
150
|
} else if (privateMethods) {
|
|
183
151
|
decInfo.push(privateMethods);
|
|
184
152
|
}
|
|
185
|
-
|
|
186
153
|
return _core.types.arrayExpression(decInfo);
|
|
187
154
|
}));
|
|
188
155
|
}
|
|
189
|
-
|
|
190
156
|
function extractElementLocalAssignments(decorationInfo) {
|
|
191
157
|
const localIds = [];
|
|
192
|
-
|
|
193
158
|
for (const el of filteredOrderedDecoratorInfo(decorationInfo)) {
|
|
194
159
|
const {
|
|
195
160
|
locals
|
|
196
161
|
} = el;
|
|
197
|
-
|
|
198
162
|
if (Array.isArray(locals)) {
|
|
199
163
|
localIds.push(...locals);
|
|
200
164
|
} else if (locals !== undefined) {
|
|
201
165
|
localIds.push(locals);
|
|
202
166
|
}
|
|
203
167
|
}
|
|
204
|
-
|
|
205
168
|
return localIds;
|
|
206
169
|
}
|
|
207
|
-
|
|
208
170
|
function addCallAccessorsFor(element, key, getId, setId) {
|
|
209
171
|
element.insertAfter(_core.types.classPrivateMethod("get", _core.types.cloneNode(key), [], _core.types.blockStatement([_core.types.returnStatement(_core.types.callExpression(_core.types.cloneNode(getId), [_core.types.thisExpression()]))])));
|
|
210
172
|
element.insertAfter(_core.types.classPrivateMethod("set", _core.types.cloneNode(key), [_core.types.identifier("v")], _core.types.blockStatement([_core.types.expressionStatement(_core.types.callExpression(_core.types.cloneNode(setId), [_core.types.thisExpression(), _core.types.identifier("v")]))])));
|
|
211
173
|
}
|
|
212
|
-
|
|
213
174
|
function isNotTsParameter(node) {
|
|
214
175
|
return node.type !== "TSParameterProperty";
|
|
215
176
|
}
|
|
216
|
-
|
|
217
177
|
function movePrivateAccessor(element, key, methodLocalVar, isStatic) {
|
|
218
178
|
let params;
|
|
219
179
|
let block;
|
|
220
|
-
|
|
221
180
|
if (element.node.kind === "set") {
|
|
222
181
|
params = [_core.types.identifier("v")];
|
|
223
182
|
block = [_core.types.expressionStatement(_core.types.callExpression(methodLocalVar, [_core.types.thisExpression(), _core.types.identifier("v")]))];
|
|
@@ -225,27 +184,22 @@ function movePrivateAccessor(element, key, methodLocalVar, isStatic) {
|
|
|
225
184
|
params = [];
|
|
226
185
|
block = [_core.types.returnStatement(_core.types.callExpression(methodLocalVar, [_core.types.thisExpression()]))];
|
|
227
186
|
}
|
|
228
|
-
|
|
229
187
|
element.replaceWith(_core.types.classPrivateMethod(element.node.kind, _core.types.cloneNode(key), params, _core.types.blockStatement(block), isStatic));
|
|
230
188
|
}
|
|
231
|
-
|
|
232
189
|
function isClassDecoratableElementPath(path) {
|
|
233
190
|
const {
|
|
234
191
|
type
|
|
235
192
|
} = path;
|
|
236
193
|
return type !== "TSDeclareMethod" && type !== "TSIndexSignature" && type !== "StaticBlock";
|
|
237
194
|
}
|
|
238
|
-
|
|
239
195
|
function staticBlockToIIFE(block) {
|
|
240
196
|
return _core.types.callExpression(_core.types.arrowFunctionExpression([], _core.types.blockStatement(block.body)), []);
|
|
241
197
|
}
|
|
242
|
-
|
|
243
198
|
function maybeSequenceExpression(exprs) {
|
|
244
199
|
if (exprs.length === 0) return _core.types.unaryExpression("void", _core.types.numericLiteral(0));
|
|
245
200
|
if (exprs.length === 1) return exprs[0];
|
|
246
201
|
return _core.types.sequenceExpression(exprs);
|
|
247
202
|
}
|
|
248
|
-
|
|
249
203
|
function transformClass(path, state, constantSuper, version) {
|
|
250
204
|
const body = path.get("body.body");
|
|
251
205
|
const classDecorators = path.node.decorators;
|
|
@@ -256,7 +210,6 @@ function transformClass(path, state, constantSuper, version) {
|
|
|
256
210
|
if (!isClassDecoratableElementPath(element)) {
|
|
257
211
|
continue;
|
|
258
212
|
}
|
|
259
|
-
|
|
260
213
|
if (element.node.decorators && element.node.decorators.length > 0) {
|
|
261
214
|
hasElementDecorators = true;
|
|
262
215
|
} else if (element.node.type === "ClassAccessorProperty") {
|
|
@@ -276,6 +229,7 @@ function transformClass(path, state, constantSuper, version) {
|
|
|
276
229
|
|
|
277
230
|
if (!classDecorators && !hasElementDecorators) return;
|
|
278
231
|
const elementDecoratorInfo = [];
|
|
232
|
+
|
|
279
233
|
let firstFieldPath;
|
|
280
234
|
let constructorPath;
|
|
281
235
|
let requiresProtoInit = false;
|
|
@@ -284,20 +238,17 @@ function transformClass(path, state, constantSuper, version) {
|
|
|
284
238
|
let protoInitLocal, staticInitLocal, classInitLocal, classLocal;
|
|
285
239
|
const assignments = [];
|
|
286
240
|
const scopeParent = path.scope.parent;
|
|
287
|
-
|
|
288
241
|
const memoiseExpression = (expression, hint) => {
|
|
289
242
|
const localEvaluatedId = scopeParent.generateDeclaredUidIdentifier(hint);
|
|
290
243
|
assignments.push(_core.types.assignmentExpression("=", localEvaluatedId, expression));
|
|
291
244
|
return _core.types.cloneNode(localEvaluatedId);
|
|
292
245
|
};
|
|
293
|
-
|
|
294
246
|
if (classDecorators) {
|
|
295
247
|
classInitLocal = scopeParent.generateDeclaredUidIdentifier("initClass");
|
|
296
248
|
const [localId, classPath] = replaceClassWithVar(path);
|
|
297
249
|
path = classPath;
|
|
298
250
|
classLocal = localId;
|
|
299
251
|
path.node.decorators = null;
|
|
300
|
-
|
|
301
252
|
for (const classDecorator of classDecorators) {
|
|
302
253
|
if (!scopeParent.isStatic(classDecorator.expression)) {
|
|
303
254
|
classDecorator.expression = memoiseExpression(classDecorator.expression, "dec");
|
|
@@ -307,22 +258,18 @@ function transformClass(path, state, constantSuper, version) {
|
|
|
307
258
|
if (!path.node.id) {
|
|
308
259
|
path.node.id = path.scope.generateUidIdentifier("Class");
|
|
309
260
|
}
|
|
310
|
-
|
|
311
261
|
classLocal = _core.types.cloneNode(path.node.id);
|
|
312
262
|
}
|
|
313
|
-
|
|
314
263
|
if (hasElementDecorators) {
|
|
315
264
|
for (const element of body) {
|
|
316
265
|
if (!isClassDecoratableElementPath(element)) {
|
|
317
266
|
continue;
|
|
318
267
|
}
|
|
319
|
-
|
|
320
268
|
const {
|
|
321
269
|
node
|
|
322
270
|
} = element;
|
|
323
271
|
const decorators = element.get("decorators");
|
|
324
272
|
const hasDecorators = Array.isArray(decorators) && decorators.length > 0;
|
|
325
|
-
|
|
326
273
|
if (hasDecorators) {
|
|
327
274
|
for (const decoratorPath of decorators) {
|
|
328
275
|
if (!scopeParent.isStatic(decoratorPath.node.expression)) {
|
|
@@ -330,15 +277,12 @@ function transformClass(path, state, constantSuper, version) {
|
|
|
330
277
|
}
|
|
331
278
|
}
|
|
332
279
|
}
|
|
333
|
-
|
|
334
280
|
const isComputed = "computed" in element.node && element.node.computed === true;
|
|
335
|
-
|
|
336
281
|
if (isComputed) {
|
|
337
282
|
if (!scopeParent.isStatic(node.key)) {
|
|
338
283
|
node.key = memoiseExpression(node.key, "computedKey");
|
|
339
284
|
}
|
|
340
285
|
}
|
|
341
|
-
|
|
342
286
|
const kind = getElementKind(element);
|
|
343
287
|
const {
|
|
344
288
|
key
|
|
@@ -346,41 +290,32 @@ function transformClass(path, state, constantSuper, version) {
|
|
|
346
290
|
const isPrivate = key.type === "PrivateName";
|
|
347
291
|
const isStatic = !!element.node.static;
|
|
348
292
|
let name = "computedKey";
|
|
349
|
-
|
|
350
293
|
if (isPrivate) {
|
|
351
294
|
name = key.id.name;
|
|
352
295
|
} else if (!isComputed && key.type === "Identifier") {
|
|
353
296
|
name = key.name;
|
|
354
297
|
}
|
|
355
|
-
|
|
356
298
|
if (element.isClassMethod({
|
|
357
299
|
kind: "constructor"
|
|
358
300
|
})) {
|
|
359
301
|
constructorPath = element;
|
|
360
302
|
}
|
|
361
|
-
|
|
362
303
|
if (hasDecorators) {
|
|
363
304
|
let locals;
|
|
364
305
|
let privateMethods;
|
|
365
|
-
|
|
366
306
|
if (kind === ACCESSOR) {
|
|
367
307
|
const {
|
|
368
308
|
value
|
|
369
309
|
} = element.node;
|
|
370
310
|
const params = [_core.types.thisExpression()];
|
|
371
|
-
|
|
372
311
|
if (value) {
|
|
373
312
|
params.push(_core.types.cloneNode(value));
|
|
374
313
|
}
|
|
375
|
-
|
|
376
314
|
const newId = generateClassPrivateUid();
|
|
377
315
|
const newFieldInitId = element.scope.parent.generateDeclaredUidIdentifier(`init_${name}`);
|
|
378
|
-
|
|
379
316
|
const newValue = _core.types.callExpression(_core.types.cloneNode(newFieldInitId), params);
|
|
380
|
-
|
|
381
317
|
const newField = generateClassProperty(newId, newValue, isStatic);
|
|
382
318
|
const [newPath] = element.replaceWith(newField);
|
|
383
|
-
|
|
384
319
|
if (isPrivate) {
|
|
385
320
|
privateMethods = extractProxyAccessorsFor(newId);
|
|
386
321
|
const getId = newPath.scope.parent.generateDeclaredUidIdentifier(`get_${name}`);
|
|
@@ -396,7 +331,6 @@ function transformClass(path, state, constantSuper, version) {
|
|
|
396
331
|
const valuePath = element.get("value");
|
|
397
332
|
valuePath.replaceWith(_core.types.callExpression(_core.types.cloneNode(initId), [_core.types.thisExpression(), valuePath.node].filter(v => v)));
|
|
398
333
|
locals = initId;
|
|
399
|
-
|
|
400
334
|
if (isPrivate) {
|
|
401
335
|
privateMethods = extractProxyAccessorsFor(key);
|
|
402
336
|
}
|
|
@@ -417,19 +351,17 @@ function transformClass(path, state, constantSuper, version) {
|
|
|
417
351
|
async: isAsync
|
|
418
352
|
} = element.node;
|
|
419
353
|
privateMethods = _core.types.functionExpression(undefined, params.filter(isNotTsParameter), body, isAsync);
|
|
420
|
-
|
|
421
354
|
if (kind === GETTER || kind === SETTER) {
|
|
422
355
|
movePrivateAccessor(element, _core.types.cloneNode(key), _core.types.cloneNode(locals), isStatic);
|
|
423
356
|
} else {
|
|
424
357
|
const node = element.node;
|
|
358
|
+
|
|
425
359
|
path.node.body.body.unshift(_core.types.classPrivateProperty(key, _core.types.cloneNode(locals), [], node.static));
|
|
426
360
|
decoratedPrivateMethods.add(key.id.name);
|
|
427
361
|
element.remove();
|
|
428
362
|
}
|
|
429
363
|
}
|
|
430
|
-
|
|
431
364
|
let nameExpr;
|
|
432
|
-
|
|
433
365
|
if (isComputed) {
|
|
434
366
|
nameExpr = _core.types.cloneNode(key);
|
|
435
367
|
} else if (key.type === "PrivateName") {
|
|
@@ -439,7 +371,6 @@ function transformClass(path, state, constantSuper, version) {
|
|
|
439
371
|
} else {
|
|
440
372
|
nameExpr = _core.types.cloneNode(key);
|
|
441
373
|
}
|
|
442
|
-
|
|
443
374
|
elementDecoratorInfo.push({
|
|
444
375
|
kind,
|
|
445
376
|
decorators: decorators.map(d => d.node.expression),
|
|
@@ -448,7 +379,6 @@ function transformClass(path, state, constantSuper, version) {
|
|
|
448
379
|
privateMethods,
|
|
449
380
|
locals
|
|
450
381
|
});
|
|
451
|
-
|
|
452
382
|
if (kind !== FIELD) {
|
|
453
383
|
if (isStatic) {
|
|
454
384
|
requiresStaticInit = true;
|
|
@@ -456,38 +386,28 @@ function transformClass(path, state, constantSuper, version) {
|
|
|
456
386
|
requiresProtoInit = true;
|
|
457
387
|
}
|
|
458
388
|
}
|
|
459
|
-
|
|
460
389
|
if (element.node) {
|
|
461
390
|
element.node.decorators = null;
|
|
462
391
|
}
|
|
463
|
-
|
|
464
392
|
if (!firstFieldPath && !isStatic && (kind === FIELD || kind === ACCESSOR)) {
|
|
465
393
|
firstFieldPath = element;
|
|
466
394
|
}
|
|
467
395
|
}
|
|
468
396
|
}
|
|
469
397
|
}
|
|
470
|
-
|
|
471
398
|
const elementDecorations = generateDecorationExprs(elementDecoratorInfo);
|
|
472
|
-
|
|
473
399
|
const classDecorations = _core.types.arrayExpression((classDecorators || []).map(d => d.expression));
|
|
474
|
-
|
|
475
400
|
const locals = extractElementLocalAssignments(elementDecoratorInfo);
|
|
476
|
-
|
|
477
401
|
if (requiresProtoInit) {
|
|
478
402
|
protoInitLocal = scopeParent.generateDeclaredUidIdentifier("initProto");
|
|
479
403
|
locals.push(protoInitLocal);
|
|
480
|
-
|
|
481
404
|
const protoInitCall = _core.types.callExpression(_core.types.cloneNode(protoInitLocal), [_core.types.thisExpression()]);
|
|
482
|
-
|
|
483
405
|
if (firstFieldPath) {
|
|
484
406
|
const value = firstFieldPath.get("value");
|
|
485
407
|
const body = [protoInitCall];
|
|
486
|
-
|
|
487
408
|
if (value.node) {
|
|
488
409
|
body.push(value.node);
|
|
489
410
|
}
|
|
490
|
-
|
|
491
411
|
value.replaceWith(_core.types.sequenceExpression(body));
|
|
492
412
|
} else if (constructorPath) {
|
|
493
413
|
if (path.node.superClass) {
|
|
@@ -498,7 +418,6 @@ function transformClass(path, state, constantSuper, version) {
|
|
|
498
418
|
path.replaceWith(_core.types.callExpression(_core.types.cloneNode(protoInitLocal), [path.node]));
|
|
499
419
|
path.skip();
|
|
500
420
|
}
|
|
501
|
-
|
|
502
421
|
}
|
|
503
422
|
});
|
|
504
423
|
} else {
|
|
@@ -506,41 +425,37 @@ function transformClass(path, state, constantSuper, version) {
|
|
|
506
425
|
}
|
|
507
426
|
} else {
|
|
508
427
|
const body = [_core.types.expressionStatement(protoInitCall)];
|
|
509
|
-
|
|
510
428
|
if (path.node.superClass) {
|
|
511
429
|
body.unshift(_core.types.expressionStatement(_core.types.callExpression(_core.types.super(), [_core.types.spreadElement(_core.types.identifier("args"))])));
|
|
512
430
|
}
|
|
513
|
-
|
|
514
431
|
path.node.body.body.unshift(_core.types.classMethod("constructor", _core.types.identifier("constructor"), [_core.types.restElement(_core.types.identifier("args"))], _core.types.blockStatement(body)));
|
|
515
432
|
}
|
|
516
433
|
}
|
|
517
|
-
|
|
518
434
|
if (requiresStaticInit) {
|
|
519
435
|
staticInitLocal = scopeParent.generateDeclaredUidIdentifier("initStatic");
|
|
520
436
|
locals.push(staticInitLocal);
|
|
521
437
|
}
|
|
522
|
-
|
|
523
438
|
if (decoratedPrivateMethods.size > 0) {
|
|
524
439
|
path.traverse({
|
|
525
440
|
PrivateName(path) {
|
|
526
441
|
if (!decoratedPrivateMethods.has(path.node.id.name)) return;
|
|
527
442
|
const parentPath = path.parentPath;
|
|
528
443
|
const parentParentPath = parentPath.parentPath;
|
|
529
|
-
|
|
530
|
-
|
|
444
|
+
if (
|
|
445
|
+
parentParentPath.node.type === "AssignmentExpression" && parentParentPath.node.left === parentPath.node ||
|
|
446
|
+
parentParentPath.node.type === "UpdateExpression" ||
|
|
447
|
+
parentParentPath.node.type === "RestElement" ||
|
|
448
|
+
parentParentPath.node.type === "ArrayPattern" ||
|
|
449
|
+
parentParentPath.node.type === "ObjectProperty" && parentParentPath.node.value === parentPath.node && parentParentPath.parentPath.type === "ObjectPattern" ||
|
|
450
|
+
parentParentPath.node.type === "ForOfStatement" && parentParentPath.node.left === parentPath.node) {
|
|
531
451
|
throw path.buildCodeFrameError(`Decorated private methods are not updatable, but "#${path.node.id.name}" is updated via this expression.`);
|
|
532
452
|
}
|
|
533
453
|
}
|
|
534
|
-
|
|
535
454
|
});
|
|
536
455
|
}
|
|
537
|
-
|
|
538
456
|
let classInitInjected = false;
|
|
539
|
-
|
|
540
457
|
const classInitCall = classInitLocal && _core.types.callExpression(_core.types.cloneNode(classInitLocal), []);
|
|
541
|
-
|
|
542
458
|
const originalClass = path.node;
|
|
543
|
-
|
|
544
459
|
if (classDecorators) {
|
|
545
460
|
locals.push(classLocal, classInitLocal);
|
|
546
461
|
const statics = [];
|
|
@@ -551,9 +466,7 @@ function transformClass(path, state, constantSuper, version) {
|
|
|
551
466
|
element.remove();
|
|
552
467
|
return;
|
|
553
468
|
}
|
|
554
|
-
|
|
555
469
|
const isProperty = element.isClassProperty() || element.isClassPrivateProperty();
|
|
556
|
-
|
|
557
470
|
if ((isProperty || element.isClassPrivateMethod()) && element.node.static) {
|
|
558
471
|
if (isProperty && staticBlocks.length > 0) {
|
|
559
472
|
const allValues = staticBlocks.map(staticBlockToIIFE);
|
|
@@ -561,52 +474,45 @@ function transformClass(path, state, constantSuper, version) {
|
|
|
561
474
|
element.node.value = maybeSequenceExpression(allValues);
|
|
562
475
|
staticBlocks = [];
|
|
563
476
|
}
|
|
564
|
-
|
|
565
477
|
element.node.static = false;
|
|
566
478
|
statics.push(element.node);
|
|
567
479
|
element.remove();
|
|
568
480
|
}
|
|
569
481
|
});
|
|
570
|
-
|
|
571
482
|
if (statics.length > 0 || staticBlocks.length > 0) {
|
|
572
483
|
const staticsClass = _core.template.expression.ast`
|
|
573
484
|
class extends ${state.addHelper("identity")} {}
|
|
574
485
|
`;
|
|
575
|
-
staticsClass.body.body = [_core.types.staticBlock([_core.types.toStatement(
|
|
486
|
+
staticsClass.body.body = [_core.types.staticBlock([_core.types.toStatement(originalClass, true) ||
|
|
487
|
+
_core.types.expressionStatement(originalClass)]), ...statics];
|
|
576
488
|
const constructorBody = [];
|
|
577
|
-
|
|
578
489
|
const newExpr = _core.types.newExpression(staticsClass, []);
|
|
579
|
-
|
|
580
490
|
if (staticBlocks.length > 0) {
|
|
581
491
|
constructorBody.push(...staticBlocks.map(staticBlockToIIFE));
|
|
582
492
|
}
|
|
583
|
-
|
|
584
493
|
if (classInitCall) {
|
|
585
494
|
classInitInjected = true;
|
|
586
495
|
constructorBody.push(classInitCall);
|
|
587
496
|
}
|
|
588
|
-
|
|
589
497
|
if (constructorBody.length > 0) {
|
|
590
498
|
constructorBody.unshift(_core.types.callExpression(_core.types.super(), [_core.types.cloneNode(classLocal)]));
|
|
591
499
|
staticsClass.body.body.push(_core.types.classMethod("constructor", _core.types.identifier("constructor"), [], _core.types.blockStatement([_core.types.expressionStatement(_core.types.sequenceExpression(constructorBody))])));
|
|
592
500
|
} else {
|
|
593
501
|
newExpr.arguments.push(_core.types.cloneNode(classLocal));
|
|
594
502
|
}
|
|
595
|
-
|
|
596
503
|
path.replaceWith(newExpr);
|
|
597
504
|
}
|
|
598
505
|
}
|
|
599
|
-
|
|
600
506
|
if (!classInitInjected && classInitCall) {
|
|
601
507
|
path.node.body.body.push(_core.types.staticBlock([_core.types.expressionStatement(classInitCall)]));
|
|
602
508
|
}
|
|
603
|
-
|
|
604
509
|
originalClass.body.body.unshift(_core.types.staticBlock([_core.types.expressionStatement(_core.types.assignmentExpression("=", _core.types.arrayPattern(locals), _core.types.callExpression(state.addHelper(version === "2021-12" ? "applyDecs" : "applyDecs2203"), [_core.types.thisExpression(), elementDecorations, classDecorations]))), requiresStaticInit && _core.types.expressionStatement(_core.types.callExpression(_core.types.cloneNode(staticInitLocal), [_core.types.thisExpression()]))].filter(Boolean)));
|
|
510
|
+
|
|
605
511
|
path.insertBefore(assignments.map(expr => _core.types.expressionStatement(expr)));
|
|
512
|
+
|
|
606
513
|
path.scope.crawl();
|
|
607
514
|
return path;
|
|
608
515
|
}
|
|
609
|
-
|
|
610
516
|
function _default({
|
|
611
517
|
assertVersion,
|
|
612
518
|
assumption
|
|
@@ -614,7 +520,6 @@ function _default({
|
|
|
614
520
|
loose
|
|
615
521
|
}, version) {
|
|
616
522
|
var _assumption;
|
|
617
|
-
|
|
618
523
|
assertVersion(version === "2021-12" ? "^7.16.0" : "^7.19.0");
|
|
619
524
|
const VISITED = new WeakSet();
|
|
620
525
|
const constantSuper = (_assumption = assumption("constantSuper")) != null ? _assumption : loose;
|
|
@@ -624,22 +529,19 @@ function _default({
|
|
|
624
529
|
visitor: {
|
|
625
530
|
"ExportNamedDeclaration|ExportDefaultDeclaration"(path) {
|
|
626
531
|
var _declaration$decorato;
|
|
627
|
-
|
|
628
532
|
const {
|
|
629
533
|
declaration
|
|
630
534
|
} = path.node;
|
|
631
|
-
|
|
632
|
-
|
|
535
|
+
if ((declaration == null ? void 0 : declaration.type) === "ClassDeclaration" &&
|
|
536
|
+
((_declaration$decorato = declaration.decorators) == null ? void 0 : _declaration$decorato.length) > 0) {
|
|
633
537
|
(0, _helperSplitExportDeclaration.default)(path);
|
|
634
538
|
}
|
|
635
539
|
},
|
|
636
|
-
|
|
637
540
|
Class(path, state) {
|
|
638
541
|
if (VISITED.has(path)) return;
|
|
639
542
|
const newPath = transformClass(path, state, constantSuper, version);
|
|
640
543
|
if (newPath) VISITED.add(newPath);
|
|
641
544
|
}
|
|
642
|
-
|
|
643
545
|
}
|
|
644
546
|
};
|
|
645
547
|
}
|
|
@@ -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","functionExpression","FIELD","ACCESSOR","METHOD","GETTER","SETTER","STATIC","getElementKind","kind","isDecoratorInfo","info","filteredOrderedDecoratorInfo","filtered","filter","el","generateDecorationExprs","arrayExpression","map","decs","decorators","decInfo","numericLiteral","privateMethods","Array","isArray","push","extractElementLocalAssignments","decorationInfo","localIds","locals","addCallAccessorsFor","getId","setId","callExpression","isNotTsParameter","movePrivateAccessor","methodLocalVar","params","block","isClassDecoratableElementPath","staticBlockToIIFE","arrowFunctionExpression","maybeSequenceExpression","exprs","unaryExpression","transformClass","state","constantSuper","version","classDecorators","hasElementDecorators","generateClassPrivateUid","computed","newId","valueNode","newField","elementDecoratorInfo","firstFieldPath","constructorPath","requiresProtoInit","requiresStaticInit","decoratedPrivateMethods","protoInitLocal","staticInitLocal","classInitLocal","classLocal","assignments","scopeParent","memoiseExpression","expression","hint","localEvaluatedId","localId","classDecorator","generateUidIdentifier","hasDecorators","decoratorPath","isPrivate","isClassMethod","newFieldInitId","newValue","initId","valuePath","v","replaceSupers","ReplaceSupers","methodPath","objectRef","superRef","file","refToPreserve","replace","async","isAsync","remove","nameExpr","stringLiteral","d","elementDecorations","classDecorations","protoInitCall","CallExpression","exit","isSuper","skip","super","spreadElement","restElement","size","parentParentPath","left","buildCodeFrameError","classInitInjected","classInitCall","originalClass","statics","staticBlocks","forEach","isStaticBlock","isProperty","isClassProperty","isClassPrivateProperty","isClassPrivateMethod","allValues","staticsClass","template","ast","addHelper","staticBlock","toStatement","constructorBody","newExpr","newExpression","arguments","arrayPattern","Boolean","expr","crawl","assertVersion","assumption","loose","VISITED","WeakSet","inherits","syntaxDecorators","visitor","declaration","splitExportDeclaration","Class"],"sources":["../src/transformer-2022-03.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\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): t.FunctionExpression[] {\n return [\n t.functionExpression(\n undefined,\n [],\n t.blockStatement([\n t.returnStatement(\n t.memberExpression(t.thisExpression(), t.cloneNode(targetKey)),\n ),\n ]),\n ),\n t.functionExpression(\n undefined,\n [t.identifier(\"value\")],\n t.blockStatement([\n t.expressionStatement(\n t.assignmentExpression(\n \"=\",\n t.memberExpression(t.thisExpression(), t.cloneNode(targetKey)),\n t.identifier(\"value\"),\n ),\n ),\n ]),\n ),\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: t.FunctionExpression | t.FunctionExpression[] | 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 const decInfo = [decs, t.numericLiteral(kind), el.name];\n\n const { privateMethods } = el;\n\n if (Array.isArray(privateMethods)) {\n decInfo.push(...privateMethods);\n } else if (privateMethods) {\n decInfo.push(privateMethods);\n }\n\n return t.arrayExpression(decInfo);\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: \"2022-03\" | \"2021-12\",\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 classLocal: 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 [localId, classPath] = replaceClassWithVar(path);\n path = classPath;\n classLocal = localId;\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 classLocal = t.cloneNode(path.node.id);\n }\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 as t.PrivateName).id.name;\n } else if (!isComputed && key.type === \"Identifier\") {\n name = key.name;\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: t.FunctionExpression | t.FunctionExpression[];\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);\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 as t.PrivateName, 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 as t.PrivateName);\n }\n } else if (isPrivate) {\n locals = element.scope.parent.generateDeclaredUidIdentifier(\n `call_${name}`,\n ) as t.Identifier;\n\n const replaceSupers = new ReplaceSupers({\n constantSuper,\n methodPath: element as NodePath<t.ClassPrivateMethod>,\n objectRef: classLocal,\n superRef: path.node.superClass,\n file: state.file,\n refToPreserve: classLocal,\n });\n\n replaceSupers.replace();\n\n const {\n params,\n body,\n async: isAsync,\n } = element.node as t.ClassPrivateMethod;\n\n privateMethods = t.functionExpression(\n undefined,\n params.filter(isNotTsParameter),\n body,\n isAsync,\n );\n\n if (kind === GETTER || kind === SETTER) {\n movePrivateAccessor(\n element as NodePath<t.ClassPrivateMethod>,\n t.cloneNode(key as t.PrivateName),\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(\n key as t.PrivateName,\n t.cloneNode(locals),\n [],\n node.static,\n ),\n );\n\n decoratedPrivateMethods.add((key as t.PrivateName).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 locals: t.Identifier[] =\n extractElementLocalAssignments(elementDecoratorInfo);\n\n if (requiresProtoInit) {\n protoInitLocal = scopeParent.generateDeclaredUidIdentifier(\"initProto\");\n locals.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 locals.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 let classInitInjected = false;\n const classInitCall =\n classInitLocal && t.callExpression(t.cloneNode(classInitLocal), []);\n\n const originalClass = path.node;\n\n if (classDecorators) {\n locals.push(classLocal, 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([t.toStatement(path.node, false)]),\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(classLocal)]),\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(classLocal));\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 t.assignmentExpression(\n \"=\",\n t.arrayPattern(locals),\n t.callExpression(\n state.addHelper(\n version === \"2021-12\" ? \"applyDecs\" : \"applyDecs2203\",\n ),\n [t.thisExpression(), elementDecorations, classDecorations],\n ),\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\nexport default function (\n { assertVersion, assumption }: PluginAPI,\n { loose }: Options,\n version: \"2022-03\" | \"2021-12\",\n): PluginObject {\n assertVersion(version === \"2021-12\" ? \"^7.16.0\" : \"^7.19.0\");\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;;AAkBA,SAASA,WAAT,CAAqBC,EAArB,EAAmCC,GAAG,GAAGD,EAAE,CAACE,MAAH,GAAY,CAArD,EAA8D;EAE5D,IAAID,GAAG,KAAK,CAAC,CAAb,EAAgB;IACdD,EAAE,CAACG,OAAH;IACA;EACD;;EAED,MAAMC,OAAO,GAAGJ,EAAE,CAACC,GAAD,CAAlB;;EAEA,IAAIG,OAAO,OAAX,EAAsC;IAEpCJ,EAAE,CAACC,GAAD,CAAF;EACD,CAHD,MAGO,IAAIG,OAAO,QAAX,EAAsC;IAE3CJ,EAAE,CAACC,GAAD,CAAF;IACAF,WAAW,CAACC,EAAD,EAAKC,GAAG,GAAG,CAAX,CAAX;EACD,CAJM,MAIA;IAELD,EAAE,CAACC,GAAD,CAAF,GAAUG,OAAO,GAAG,CAApB;EACD;AACF;;AASD,SAASC,iCAAT,CACEC,SADF,EAEuB;EACrB,MAAMC,gBAA0B,GAAG,EAAnC;EACA,MAAMC,YAAY,GAAG,IAAIC,GAAJ,EAArB;EAEAH,SAAS,CAACI,QAAV,CAAmB;IACjBC,WAAW,CAACC,IAAD,EAAO;MAChBJ,YAAY,CAACK,GAAb,CAAiBD,IAAI,CAACE,IAAL,CAAUd,EAAV,CAAae,IAA9B;IACD;;EAHgB,CAAnB;EAMA,OAAO,MAAqB;IAC1B,IAAIC,SAAJ;;IACA,GAAG;MACDjB,WAAW,CAACQ,gBAAD,CAAX;MACAS,SAAS,GAAGC,MAAM,CAACC,YAAP,CAAoB,GAAGX,gBAAvB,CAAZ;IACD,CAHD,QAGSC,YAAY,CAACW,GAAb,CAAiBH,SAAjB,CAHT;;IAKA,OAAOI,WAAA,CAAEC,WAAF,CAAcD,WAAA,CAAEE,UAAF,CAAaN,SAAb,CAAd,CAAP;EACD,CARD;AASD;;AAQD,SAASO,qCAAT,CACEjB,SADF,EAEuB;EACrB,IAAIkB,SAAJ;EAEA,OAAO,MAAqB;IAC1B,IAAI,CAACA,SAAL,EAAgB;MACdA,SAAS,GAAGnB,iCAAiC,CAACC,SAAD,CAA7C;IACD;;IAED,OAAOkB,SAAS,EAAhB;EACD,CAND;AAOD;;AASD,SAASC,mBAAT,CACEb,IADF,EAEoE;EAClE,IAAIA,IAAI,CAACc,IAAL,KAAc,kBAAlB,EAAsC;IACpC,MAAMC,KAAK,GAAGf,IAAI,CAACgB,KAAL,CAAWC,gCAAX,CAA4CjB,IAAI,CAACE,IAAL,CAAUd,EAAtD,CAAd;;IACA,MAAM8B,OAAO,GAAGV,WAAA,CAAEE,UAAF,CAAaV,IAAI,CAACE,IAAL,CAAUd,EAAV,CAAae,IAA1B,CAAhB;;IAEAH,IAAI,CAACgB,KAAL,CAAWG,MAAX,CAAkBD,OAAO,CAACf,IAA1B,EAAgCY,KAAK,CAACZ,IAAtC;IAEAH,IAAI,CAACoB,YAAL,CACEZ,WAAA,CAAEa,mBAAF,CAAsB,KAAtB,EAA6B,CAACb,WAAA,CAAEc,kBAAF,CAAqBP,KAArB,CAAD,CAA7B,CADF;IAGAf,IAAI,CAACuB,GAAL,CAAS,IAAT,EAAeC,WAAf,CAA2BN,OAA3B;IAEA,OAAO,CAACV,WAAA,CAAEiB,SAAF,CAAYV,KAAZ,CAAD,EAAqBf,IAArB,CAAP;EACD,CAZD,MAYO;IACL,IAAI0B,SAAJ;IACA,IAAIX,KAAJ;;IAEA,IAAIf,IAAI,CAACE,IAAL,CAAUd,EAAd,EAAkB;MAChBsC,SAAS,GAAG1B,IAAI,CAACE,IAAL,CAAUd,EAAV,CAAae,IAAzB;MACAY,KAAK,GAAGf,IAAI,CAACgB,KAAL,CAAWW,MAAX,CAAkBC,6BAAlB,CAAgDF,SAAhD,CAAR;MACA1B,IAAI,CAACgB,KAAL,CAAWG,MAAX,CAAkBO,SAAlB,EAA6BX,KAAK,CAACZ,IAAnC;IACD,CAJD,MAIO,IACLH,IAAI,CAAC6B,UAAL,CAAgB3B,IAAhB,CAAqBY,IAArB,KAA8B,oBAA9B,IACAd,IAAI,CAAC6B,UAAL,CAAgB3B,IAAhB,CAAqBd,EAArB,CAAwB0B,IAAxB,KAAiC,YAF5B,EAGL;MACAY,SAAS,GAAG1B,IAAI,CAAC6B,UAAL,CAAgB3B,IAAhB,CAAqBd,EAArB,CAAwBe,IAApC;MACAY,KAAK,GAAGf,IAAI,CAACgB,KAAL,CAAWW,MAAX,CAAkBC,6BAAlB,CAAgDF,SAAhD,CAAR;IACD,CANM,MAMA;MACLX,KAAK,GACHf,IAAI,CAACgB,KAAL,CAAWW,MAAX,CAAkBC,6BAAlB,CAAgD,iBAAhD,CADF;IAED;;IAED,MAAME,YAAY,GAAGtB,WAAA,CAAEuB,eAAF,CACnBL,SAAS,IAAIlB,WAAA,CAAEE,UAAF,CAAagB,SAAb,CADM,EAEnB1B,IAAI,CAACE,IAAL,CAAU8B,UAFS,EAGnBhC,IAAI,CAACE,IAAL,CAAU+B,IAHS,CAArB;;IAMA,MAAM,CAACC,OAAD,IAAYlC,IAAI,CAACwB,WAAL,CAChBhB,WAAA,CAAE2B,kBAAF,CAAqB,CAACL,YAAD,EAAef,KAAf,CAArB,CADgB,CAAlB;IAIA,OAAO,CACLP,WAAA,CAAEiB,SAAF,CAAYV,KAAZ,CADK,EAELmB,OAAO,CAACX,GAAR,CAAY,eAAZ,CAFK,CAAP;EAID;AACF;;AAED,SAASa,qBAAT,CACEC,GADF,EAEEC,KAFF,EAGEC,QAHF,EAI4C;EAC1C,IAAIF,GAAG,CAACvB,IAAJ,KAAa,aAAjB,EAAgC;IAC9B,OAAON,WAAA,CAAEgC,oBAAF,CAAuBH,GAAvB,EAA4BC,KAA5B,EAAmCG,SAAnC,EAA8CF,QAA9C,CAAP;EACD,CAFD,MAEO;IACL,OAAO/B,WAAA,CAAEkC,aAAF,CAAgBL,GAAhB,EAAqBC,KAArB,EAA4BG,SAA5B,EAAuCA,SAAvC,EAAkDF,QAAlD,CAAP;EACD;AACF;;AAED,SAASI,oBAAT,CACEC,OADF,EAEEC,WAFF,EAGEC,SAHF,EAIEC,UAAU,GAAG,KAJf,EAKQ;EACN,MAAM;IAAEC,MAAM,EAAET;EAAV,IAAuBK,OAAO,CAAC1C,IAArC;;EAEA,MAAM+C,UAAU,GAAGzC,WAAA,CAAE0C,cAAF,CAAiB,CAClC1C,WAAA,CAAE2C,eAAF,CACE3C,WAAA,CAAE4C,gBAAF,CAAmB5C,WAAA,CAAE6C,cAAF,EAAnB,EAAuC7C,WAAA,CAAEiB,SAAF,CAAYqB,SAAZ,CAAvC,CADF,CADkC,CAAjB,CAAnB;;EAMA,MAAMQ,UAAU,GAAG9C,WAAA,CAAE0C,cAAF,CAAiB,CAClC1C,WAAA,CAAE+C,mBAAF,CACE/C,WAAA,CAAEgD,oBAAF,CACE,GADF,EAEEhD,WAAA,CAAE4C,gBAAF,CAAmB5C,WAAA,CAAE6C,cAAF,EAAnB,EAAuC7C,WAAA,CAAEiB,SAAF,CAAYqB,SAAZ,CAAvC,CAFF,EAGEtC,WAAA,CAAEE,UAAF,CAAa,GAAb,CAHF,CADF,CADkC,CAAjB,CAAnB;;EAUA,IAAI+C,MAAJ,EACEC,MADF;;EAGA,IAAIb,WAAW,CAAC/B,IAAZ,KAAqB,aAAzB,EAAwC;IACtC2C,MAAM,GAAGjD,WAAA,CAAEmD,kBAAF,CACP,KADO,EAEPnD,WAAA,CAAEiB,SAAF,CAAYoB,WAAZ,CAFO,EAGP,EAHO,EAIPI,UAJO,EAKPV,QALO,CAAT;IAOAmB,MAAM,GAAGlD,WAAA,CAAEmD,kBAAF,CACP,KADO,EAEPnD,WAAA,CAAEiB,SAAF,CAAYoB,WAAZ,CAFO,EAGP,CAACrC,WAAA,CAAEE,UAAF,CAAa,GAAb,CAAD,CAHO,EAIP4C,UAJO,EAKPf,QALO,CAAT;EAOD,CAfD,MAeO;IACLkB,MAAM,GAAGjD,WAAA,CAAEoD,WAAF,CACP,KADO,EAEPpD,WAAA,CAAEiB,SAAF,CAAYoB,WAAZ,CAFO,EAGP,EAHO,EAIPI,UAJO,EAKPF,UALO,EAMPR,QANO,CAAT;IAQAmB,MAAM,GAAGlD,WAAA,CAAEoD,WAAF,CACP,KADO,EAEPpD,WAAA,CAAEiB,SAAF,CAAYoB,WAAZ,CAFO,EAGP,CAACrC,WAAA,CAAEE,UAAF,CAAa,GAAb,CAAD,CAHO,EAIP4C,UAJO,EAKPP,UALO,EAMPR,QANO,CAAT;EAQD;;EAEDK,OAAO,CAACiB,WAAR,CAAoBH,MAApB;EACAd,OAAO,CAACiB,WAAR,CAAoBJ,MAApB;AACD;;AAED,SAASK,wBAAT,CACEhB,SADF,EAE0B;EACxB,OAAO,CACLtC,WAAA,CAAEuD,kBAAF,CACEtB,SADF,EAEE,EAFF,EAGEjC,WAAA,CAAE0C,cAAF,CAAiB,CACf1C,WAAA,CAAE2C,eAAF,CACE3C,WAAA,CAAE4C,gBAAF,CAAmB5C,WAAA,CAAE6C,cAAF,EAAnB,EAAuC7C,WAAA,CAAEiB,SAAF,CAAYqB,SAAZ,CAAvC,CADF,CADe,CAAjB,CAHF,CADK,EAULtC,WAAA,CAAEuD,kBAAF,CACEtB,SADF,EAEE,CAACjC,WAAA,CAAEE,UAAF,CAAa,OAAb,CAAD,CAFF,EAGEF,WAAA,CAAE0C,cAAF,CAAiB,CACf1C,WAAA,CAAE+C,mBAAF,CACE/C,WAAA,CAAEgD,oBAAF,CACE,GADF,EAEEhD,WAAA,CAAE4C,gBAAF,CAAmB5C,WAAA,CAAE6C,cAAF,EAAnB,EAAuC7C,WAAA,CAAEiB,SAAF,CAAYqB,SAAZ,CAAvC,CAFF,EAGEtC,WAAA,CAAEE,UAAF,CAAa,OAAb,CAHF,CADF,CADe,CAAjB,CAHF,CAVK,CAAP;AAwBD;;AAED,MAAMsD,KAAK,GAAG,CAAd;AACA,MAAMC,QAAQ,GAAG,CAAjB;AACA,MAAMC,MAAM,GAAG,CAAf;AACA,MAAMC,MAAM,GAAG,CAAf;AACA,MAAMC,MAAM,GAAG,CAAf;AAEA,MAAMC,MAAM,GAAG,CAAf;;AAEA,SAASC,cAAT,CAAwB1B,OAAxB,EAA4E;EAC1E,QAAQA,OAAO,CAAC1C,IAAR,CAAaY,IAArB;IACE,KAAK,eAAL;IACA,KAAK,sBAAL;MACE,OAAOkD,KAAP;;IACF,KAAK,uBAAL;MACE,OAAOC,QAAP;;IACF,KAAK,aAAL;IACA,KAAK,oBAAL;MACE,IAAIrB,OAAO,CAAC1C,IAAR,CAAaqE,IAAb,KAAsB,KAA1B,EAAiC;QAC/B,OAAOJ,MAAP;MACD,CAFD,MAEO,IAAIvB,OAAO,CAAC1C,IAAR,CAAaqE,IAAb,KAAsB,KAA1B,EAAiC;QACtC,OAAOH,MAAP;MACD,CAFM,MAEA;QACL,OAAOF,MAAP;MACD;;EAdL;AAgBD;;AA8BD,SAASM,eAAT,CACEC,IADF,EAEyB;EACvB,OAAO,gBAAgBA,IAAvB;AACD;;AAED,SAASC,4BAAT,CACED,IADF,EAEmB;EACjB,MAAME,QAAQ,GAAGF,IAAI,CAACG,MAAL,CAAYJ,eAAZ,CAAjB;EAEA,OAAO,CACL,GAAGG,QAAQ,CAACC,MAAT,CACDC,EAAE,IAAIA,EAAE,CAACtC,QAAH,IAAesC,EAAE,CAACN,IAAH,IAAWN,QAA1B,IAAsCY,EAAE,CAACN,IAAH,IAAWH,MADtD,CADE,EAIL,GAAGO,QAAQ,CAACC,MAAT,CACDC,EAAE,IAAI,CAACA,EAAE,CAACtC,QAAJ,IAAgBsC,EAAE,CAACN,IAAH,IAAWN,QAA3B,IAAuCY,EAAE,CAACN,IAAH,IAAWH,MADvD,CAJE,EAOL,GAAGO,QAAQ,CAACC,MAAT,CAAgBC,EAAE,IAAIA,EAAE,CAACtC,QAAH,IAAesC,EAAE,CAACN,IAAH,KAAYP,KAAjD,CAPE,EAQL,GAAGW,QAAQ,CAACC,MAAT,CAAgBC,EAAE,IAAI,CAACA,EAAE,CAACtC,QAAJ,IAAgBsC,EAAE,CAACN,IAAH,KAAYP,KAAlD,CARE,CAAP;AAUD;;AAED,SAASc,uBAAT,CACEL,IADF,EAEqB;EACnB,OAAOjE,WAAA,CAAEuE,eAAF,CACLL,4BAA4B,CAACD,IAAD,CAA5B,CAAmCO,GAAnC,CAAuCH,EAAE,IAAI;IAC3C,MAAMI,IAAI,GACRJ,EAAE,CAACK,UAAH,CAAc5F,MAAd,GAAuB,CAAvB,GACIkB,WAAA,CAAEuE,eAAF,CAAkBF,EAAE,CAACK,UAArB,CADJ,GAEIL,EAAE,CAACK,UAAH,CAAc,CAAd,CAHN;IAKA,MAAMX,IAAI,GAAGM,EAAE,CAACtC,QAAH,GAAcsC,EAAE,CAACN,IAAH,GAAUF,MAAxB,GAAiCQ,EAAE,CAACN,IAAjD;IAEA,MAAMY,OAAO,GAAG,CAACF,IAAD,EAAOzE,WAAA,CAAE4E,cAAF,CAAiBb,IAAjB,CAAP,EAA+BM,EAAE,CAAC1E,IAAlC,CAAhB;IAEA,MAAM;MAAEkF;IAAF,IAAqBR,EAA3B;;IAEA,IAAIS,KAAK,CAACC,OAAN,CAAcF,cAAd,CAAJ,EAAmC;MACjCF,OAAO,CAACK,IAAR,CAAa,GAAGH,cAAhB;IACD,CAFD,MAEO,IAAIA,cAAJ,EAAoB;MACzBF,OAAO,CAACK,IAAR,CAAaH,cAAb;IACD;;IAED,OAAO7E,WAAA,CAAEuE,eAAF,CAAkBI,OAAlB,CAAP;EACD,CAnBD,CADK,CAAP;AAsBD;;AAED,SAASM,8BAAT,CACEC,cADF,EAEE;EACA,MAAMC,QAAwB,GAAG,EAAjC;;EAEA,KAAK,MAAMd,EAAX,IAAiBH,4BAA4B,CAACgB,cAAD,CAA7C,EAA+D;IAC7D,MAAM;MAAEE;IAAF,IAAaf,EAAnB;;IAEA,IAAIS,KAAK,CAACC,OAAN,CAAcK,MAAd,CAAJ,EAA2B;MACzBD,QAAQ,CAACH,IAAT,CAAc,GAAGI,MAAjB;IACD,CAFD,MAEO,IAAIA,MAAM,KAAKnD,SAAf,EAA0B;MAC/BkD,QAAQ,CAACH,IAAT,CAAcI,MAAd;IACD;EACF;;EAED,OAAOD,QAAP;AACD;;AAED,SAASE,mBAAT,CACEjD,OADF,EAEEP,GAFF,EAGEyD,KAHF,EAIEC,KAJF,EAKE;EACAnD,OAAO,CAACiB,WAAR,CACErD,WAAA,CAAEmD,kBAAF,CACE,KADF,EAEEnD,WAAA,CAAEiB,SAAF,CAAYY,GAAZ,CAFF,EAGE,EAHF,EAIE7B,WAAA,CAAE0C,cAAF,CAAiB,CACf1C,WAAA,CAAE2C,eAAF,CACE3C,WAAA,CAAEwF,cAAF,CAAiBxF,WAAA,CAAEiB,SAAF,CAAYqE,KAAZ,CAAjB,EAAqC,CAACtF,WAAA,CAAE6C,cAAF,EAAD,CAArC,CADF,CADe,CAAjB,CAJF,CADF;EAaAT,OAAO,CAACiB,WAAR,CACErD,WAAA,CAAEmD,kBAAF,CACE,KADF,EAEEnD,WAAA,CAAEiB,SAAF,CAAYY,GAAZ,CAFF,EAGE,CAAC7B,WAAA,CAAEE,UAAF,CAAa,GAAb,CAAD,CAHF,EAIEF,WAAA,CAAE0C,cAAF,CAAiB,CACf1C,WAAA,CAAE+C,mBAAF,CACE/C,WAAA,CAAEwF,cAAF,CAAiBxF,WAAA,CAAEiB,SAAF,CAAYsE,KAAZ,CAAjB,EAAqC,CACnCvF,WAAA,CAAE6C,cAAF,EADmC,EAEnC7C,WAAA,CAAEE,UAAF,CAAa,GAAb,CAFmC,CAArC,CADF,CADe,CAAjB,CAJF,CADF;AAeD;;AAED,SAASuF,gBAAT,CACE/F,IADF,EAEoD;EAClD,OAAOA,IAAI,CAACY,IAAL,KAAc,qBAArB;AACD;;AAED,SAASoF,mBAAT,CACEtD,OADF,EAEEP,GAFF,EAGE8D,cAHF,EAIE5D,QAJF,EAKE;EACA,IAAI6D,MAAJ;EACA,IAAIC,KAAJ;;EAEA,IAAIzD,OAAO,CAAC1C,IAAR,CAAaqE,IAAb,KAAsB,KAA1B,EAAiC;IAC/B6B,MAAM,GAAG,CAAC5F,WAAA,CAAEE,UAAF,CAAa,GAAb,CAAD,CAAT;IACA2F,KAAK,GAAG,CACN7F,WAAA,CAAE+C,mBAAF,CACE/C,WAAA,CAAEwF,cAAF,CAAiBG,cAAjB,EAAiC,CAC/B3F,WAAA,CAAE6C,cAAF,EAD+B,EAE/B7C,WAAA,CAAEE,UAAF,CAAa,GAAb,CAF+B,CAAjC,CADF,CADM,CAAR;EAQD,CAVD,MAUO;IACL0F,MAAM,GAAG,EAAT;IACAC,KAAK,GAAG,CACN7F,WAAA,CAAE2C,eAAF,CAAkB3C,WAAA,CAAEwF,cAAF,CAAiBG,cAAjB,EAAiC,CAAC3F,WAAA,CAAE6C,cAAF,EAAD,CAAjC,CAAlB,CADM,CAAR;EAGD;;EAEDT,OAAO,CAACpB,WAAR,CACEhB,WAAA,CAAEmD,kBAAF,CACEf,OAAO,CAAC1C,IAAR,CAAaqE,IADf,EAEE/D,WAAA,CAAEiB,SAAF,CAAYY,GAAZ,CAFF,EAGE+D,MAHF,EAIE5F,WAAA,CAAE0C,cAAF,CAAiBmD,KAAjB,CAJF,EAKE9D,QALF,CADF;AASD;;AAED,SAAS+D,6BAAT,CACEtG,IADF,EAE6C;EAC3C,MAAM;IAAEc;EAAF,IAAWd,IAAjB;EAEA,OACEc,IAAI,KAAK,iBAAT,IACAA,IAAI,KAAK,kBADT,IAEAA,IAAI,KAAK,aAHX;AAKD;;AAED,SAASyF,iBAAT,CAA2BF,KAA3B,EAAiD;EAC/C,OAAO7F,WAAA,CAAEwF,cAAF,CACLxF,WAAA,CAAEgG,uBAAF,CAA0B,EAA1B,EAA8BhG,WAAA,CAAE0C,cAAF,CAAiBmD,KAAK,CAACpE,IAAvB,CAA9B,CADK,EAEL,EAFK,CAAP;AAID;;AAED,SAASwE,uBAAT,CAAiCC,KAAjC,EAAwD;EACtD,IAAIA,KAAK,CAACpH,MAAN,KAAiB,CAArB,EAAwB,OAAOkB,WAAA,CAAEmG,eAAF,CAAkB,MAAlB,EAA0BnG,WAAA,CAAE4E,cAAF,CAAiB,CAAjB,CAA1B,CAAP;EACxB,IAAIsB,KAAK,CAACpH,MAAN,KAAiB,CAArB,EAAwB,OAAOoH,KAAK,CAAC,CAAD,CAAZ;EACxB,OAAOlG,WAAA,CAAE2B,kBAAF,CAAqBuE,KAArB,CAAP;AACD;;AAED,SAASE,cAAT,CACE5G,IADF,EAEE6G,KAFF,EAGEC,aAHF,EAIEC,OAJF,EAKY;EACV,MAAM9E,IAAI,GAAGjC,IAAI,CAACuB,GAAL,CAAS,WAAT,CAAb;EAEA,MAAMyF,eAAe,GAAGhH,IAAI,CAACE,IAAL,CAAUgF,UAAlC;EACA,IAAI+B,oBAAoB,GAAG,KAA3B;EAEA,MAAMC,uBAAuB,GAAGvG,qCAAqC,CAACX,IAAD,CAArE;;EAIA,KAAK,MAAM4C,OAAX,IAAsBX,IAAtB,EAA4B;IAC1B,IAAI,CAACqE,6BAA6B,CAAC1D,OAAD,CAAlC,EAA6C;MAC3C;IACD;;IAED,IAAIA,OAAO,CAAC1C,IAAR,CAAagF,UAAb,IAA2BtC,OAAO,CAAC1C,IAAR,CAAagF,UAAb,CAAwB5F,MAAxB,GAAiC,CAAhE,EAAmE;MACjE2H,oBAAoB,GAAG,IAAvB;IACD,CAFD,MAEO,IAAIrE,OAAO,CAAC1C,IAAR,CAAaY,IAAb,KAAsB,uBAA1B,EAAmD;MACxD,MAAM;QAAEuB,GAAF;QAAOC,KAAP;QAAcU,MAAM,EAAET,QAAtB;QAAgC4E;MAAhC,IAA6CvE,OAAO,CAAC1C,IAA3D;MAEA,MAAMkH,KAAK,GAAGF,uBAAuB,EAArC;MAEA,MAAMG,SAAS,GAAG/E,KAAK,GAAG9B,WAAA,CAAEiB,SAAF,CAAYa,KAAZ,CAAH,GAAwBG,SAA/C;MAEA,MAAM6E,QAAQ,GAAGlF,qBAAqB,CAACgF,KAAD,EAAQC,SAAR,EAAmB9E,QAAnB,CAAtC;MAEA,MAAM,CAACL,OAAD,IAAYU,OAAO,CAACpB,WAAR,CAAoB8F,QAApB,CAAlB;MACA3E,oBAAoB,CAACT,OAAD,EAAUG,GAAV,EAAe+E,KAAf,EAAsBD,QAAtB,CAApB;IACD;EACF;;EAGD,IAAI,CAACH,eAAD,IAAoB,CAACC,oBAAzB,EAA+C;EAE/C,MAAMM,oBAA0D,GAAG,EAAnE;EAGA,IAAIC,cAAJ;EAGA,IAAIC,eAAJ;EACA,IAAIC,iBAAiB,GAAG,KAAxB;EACA,IAAIC,kBAAkB,GAAG,KAAzB;EACA,MAAMC,uBAAuB,GAAG,IAAI/H,GAAJ,EAAhC;EAEA,IAAIgI,cAAJ,EACEC,eADF,EAEEC,cAFF,EAGEC,UAHF;EAIA,MAAMC,WAAqC,GAAG,EAA9C;EACA,MAAMC,WAAkB,GAAGlI,IAAI,CAACgB,KAAL,CAAWW,MAAtC;;EAEA,MAAMwG,iBAAiB,GAAG,CAACC,UAAD,EAA2BC,IAA3B,KAA4C;IACpE,MAAMC,gBAAgB,GAAGJ,WAAW,CAACtG,6BAAZ,CAA0CyG,IAA1C,CAAzB;IACAJ,WAAW,CAACzC,IAAZ,CAAiBhF,WAAA,CAAEgD,oBAAF,CAAuB,GAAvB,EAA4B8E,gBAA5B,EAA8CF,UAA9C,CAAjB;IACA,OAAO5H,WAAA,CAAEiB,SAAF,CAAY6G,gBAAZ,CAAP;EACD,CAJD;;EAMA,IAAItB,eAAJ,EAAqB;IACnBe,cAAc,GAAGG,WAAW,CAACtG,6BAAZ,CAA0C,WAA1C,CAAjB;IAEA,MAAM,CAAC2G,OAAD,EAAU7I,SAAV,IAAuBmB,mBAAmB,CAACb,IAAD,CAAhD;IACAA,IAAI,GAAGN,SAAP;IACAsI,UAAU,GAAGO,OAAb;IAEAvI,IAAI,CAACE,IAAL,CAAUgF,UAAV,GAAuB,IAAvB;;IAEA,KAAK,MAAMsD,cAAX,IAA6BxB,eAA7B,EAA8C;MAC5C,IAAI,CAACkB,WAAW,CAAC3F,QAAZ,CAAqBiG,cAAc,CAACJ,UAApC,CAAL,EAAsD;QACpDI,cAAc,CAACJ,UAAf,GAA4BD,iBAAiB,CAC3CK,cAAc,CAACJ,UAD4B,EAE3C,KAF2C,CAA7C;MAID;IACF;EACF,CAjBD,MAiBO;IACL,IAAI,CAACpI,IAAI,CAACE,IAAL,CAAUd,EAAf,EAAmB;MACjBY,IAAI,CAACE,IAAL,CAAUd,EAAV,GAAeY,IAAI,CAACgB,KAAL,CAAWyH,qBAAX,CAAiC,OAAjC,CAAf;IACD;;IACDT,UAAU,GAAGxH,WAAA,CAAEiB,SAAF,CAAYzB,IAAI,CAACE,IAAL,CAAUd,EAAtB,CAAb;EACD;;EAED,IAAI6H,oBAAJ,EAA0B;IACxB,KAAK,MAAMrE,OAAX,IAAsBX,IAAtB,EAA4B;MAC1B,IAAI,CAACqE,6BAA6B,CAAC1D,OAAD,CAAlC,EAA6C;QAC3C;MACD;;MAED,MAAM;QAAE1C;MAAF,IAAW0C,OAAjB;MACA,MAAMsC,UAAU,GAAGtC,OAAO,CAACrB,GAAR,CAAY,YAAZ,CAAnB;MAEA,MAAMmH,aAAa,GAAGpD,KAAK,CAACC,OAAN,CAAcL,UAAd,KAA6BA,UAAU,CAAC5F,MAAX,GAAoB,CAAvE;;MAEA,IAAIoJ,aAAJ,EAAmB;QACjB,KAAK,MAAMC,aAAX,IAA4BzD,UAA5B,EAAwC;UACtC,IAAI,CAACgD,WAAW,CAAC3F,QAAZ,CAAqBoG,aAAa,CAACzI,IAAd,CAAmBkI,UAAxC,CAAL,EAA0D;YACxDO,aAAa,CAACzI,IAAd,CAAmBkI,UAAnB,GAAgCD,iBAAiB,CAC/CQ,aAAa,CAACzI,IAAd,CAAmBkI,UAD4B,EAE/C,KAF+C,CAAjD;UAID;QACF;MACF;;MAED,MAAMrF,UAAU,GACd,cAAcH,OAAO,CAAC1C,IAAtB,IAA8B0C,OAAO,CAAC1C,IAAR,CAAaiH,QAAb,KAA0B,IAD1D;;MAEA,IAAIpE,UAAJ,EAAgB;QACd,IAAI,CAACmF,WAAW,CAAC3F,QAAZ,CAAqBrC,IAAI,CAACmC,GAA1B,CAAL,EAAqC;UACnCnC,IAAI,CAACmC,GAAL,GAAW8F,iBAAiB,CAACjI,IAAI,CAACmC,GAAN,EAA2B,aAA3B,CAA5B;QACD;MACF;;MAED,MAAMkC,IAAI,GAAGD,cAAc,CAAC1B,OAAD,CAA3B;MACA,MAAM;QAAEP;MAAF,IAAUnC,IAAhB;MAEA,MAAM0I,SAAS,GAAGvG,GAAG,CAACvB,IAAJ,KAAa,aAA/B;MAEA,MAAMyB,QAAQ,GAAG,CAAC,CAACK,OAAO,CAAC1C,IAAR,CAAa8C,MAAhC;MAEA,IAAI7C,IAAI,GAAG,aAAX;;MAEA,IAAIyI,SAAJ,EAAe;QACbzI,IAAI,GAAIkC,GAAD,CAAuBjD,EAAvB,CAA0Be,IAAjC;MACD,CAFD,MAEO,IAAI,CAAC4C,UAAD,IAAeV,GAAG,CAACvB,IAAJ,KAAa,YAAhC,EAA8C;QACnDX,IAAI,GAAGkC,GAAG,CAAClC,IAAX;MACD;;MAED,IAAIyC,OAAO,CAACiG,aAAR,CAAsB;QAAEtE,IAAI,EAAE;MAAR,CAAtB,CAAJ,EAAoD;QAClDkD,eAAe,GAAG7E,OAAlB;MACD;;MAED,IAAI8F,aAAJ,EAAmB;QACjB,IAAI9C,MAAJ;QACA,IAAIP,cAAJ;;QAEA,IAAId,IAAI,KAAKN,QAAb,EAAuB;UACrB,MAAM;YAAE3B;UAAF,IAAYM,OAAO,CAAC1C,IAA1B;UAEA,MAAMkG,MAAsB,GAAG,CAAC5F,WAAA,CAAE6C,cAAF,EAAD,CAA/B;;UAEA,IAAIf,KAAJ,EAAW;YACT8D,MAAM,CAACZ,IAAP,CAAYhF,WAAA,CAAEiB,SAAF,CAAYa,KAAZ,CAAZ;UACD;;UAED,MAAM8E,KAAK,GAAGF,uBAAuB,EAArC;UACA,MAAM4B,cAAc,GAClBlG,OAAO,CAAC5B,KAAR,CAAcW,MAAd,CAAqBC,6BAArB,CAAoD,QAAOzB,IAAK,EAAhE,CADF;;UAEA,MAAM4I,QAAQ,GAAGvI,WAAA,CAAEwF,cAAF,CACfxF,WAAA,CAAEiB,SAAF,CAAYqH,cAAZ,CADe,EAEf1C,MAFe,CAAjB;;UAKA,MAAMkB,QAAQ,GAAGlF,qBAAqB,CAACgF,KAAD,EAAQ2B,QAAR,EAAkBxG,QAAlB,CAAtC;UACA,MAAM,CAACL,OAAD,IAAYU,OAAO,CAACpB,WAAR,CAAoB8F,QAApB,CAAlB;;UAEA,IAAIsB,SAAJ,EAAe;YACbvD,cAAc,GAAGvB,wBAAwB,CAACsD,KAAD,CAAzC;YAEA,MAAMtB,KAAK,GAAG5D,OAAO,CAAClB,KAAR,CAAcW,MAAd,CAAqBC,6BAArB,CACX,OAAMzB,IAAK,EADA,CAAd;YAGA,MAAM4F,KAAK,GAAG7D,OAAO,CAAClB,KAAR,CAAcW,MAAd,CAAqBC,6BAArB,CACX,OAAMzB,IAAK,EADA,CAAd;YAIA0F,mBAAmB,CAAC3D,OAAD,EAAUG,GAAV,EAAgCyD,KAAhC,EAAuCC,KAAvC,CAAnB;YAEAH,MAAM,GAAG,CAACkD,cAAD,EAAiBhD,KAAjB,EAAwBC,KAAxB,CAAT;UACD,CAbD,MAaO;YACLpD,oBAAoB,CAACT,OAAD,EAAUG,GAAV,EAAe+E,KAAf,EAAsBrE,UAAtB,CAApB;YACA6C,MAAM,GAAGkD,cAAT;UACD;QACF,CArCD,MAqCO,IAAIvE,IAAI,KAAKP,KAAb,EAAoB;UACzB,MAAMgF,MAAM,GAAGpG,OAAO,CAAC5B,KAAR,CAAcW,MAAd,CAAqBC,6BAArB,CACZ,QAAOzB,IAAK,EADA,CAAf;UAGA,MAAM8I,SAAS,GACbrG,OADgB,CAEhBrB,GAFgB,CAEZ,OAFY,CAAlB;UAIA0H,SAAS,CAACzH,WAAV,CACEhB,WAAA,CAAEwF,cAAF,CACExF,WAAA,CAAEiB,SAAF,CAAYuH,MAAZ,CADF,EAEE,CAACxI,WAAA,CAAE6C,cAAF,EAAD,EAAqB4F,SAAS,CAAC/I,IAA/B,EAAqC0E,MAArC,CAA4CsE,CAAC,IAAIA,CAAjD,CAFF,CADF;UAOAtD,MAAM,GAAGoD,MAAT;;UAEA,IAAIJ,SAAJ,EAAe;YACbvD,cAAc,GAAGvB,wBAAwB,CAACzB,GAAD,CAAzC;UACD;QACF,CApBM,MAoBA,IAAIuG,SAAJ,EAAe;UACpBhD,MAAM,GAAGhD,OAAO,CAAC5B,KAAR,CAAcW,MAAd,CAAqBC,6BAArB,CACN,QAAOzB,IAAK,EADN,CAAT;UAIA,MAAMgJ,aAAa,GAAG,IAAIC,4BAAJ,CAAkB;YACtCtC,aADsC;YAEtCuC,UAAU,EAAEzG,OAF0B;YAGtC0G,SAAS,EAAEtB,UAH2B;YAItCuB,QAAQ,EAAEvJ,IAAI,CAACE,IAAL,CAAU8B,UAJkB;YAKtCwH,IAAI,EAAE3C,KAAK,CAAC2C,IAL0B;YAMtCC,aAAa,EAAEzB;UANuB,CAAlB,CAAtB;UASAmB,aAAa,CAACO,OAAd;UAEA,MAAM;YACJtD,MADI;YAEJnE,IAFI;YAGJ0H,KAAK,EAAEC;UAHH,IAIFhH,OAAO,CAAC1C,IAJZ;UAMAmF,cAAc,GAAG7E,WAAA,CAAEuD,kBAAF,CACftB,SADe,EAEf2D,MAAM,CAACxB,MAAP,CAAcqB,gBAAd,CAFe,EAGfhE,IAHe,EAIf2H,OAJe,CAAjB;;UAOA,IAAIrF,IAAI,KAAKJ,MAAT,IAAmBI,IAAI,KAAKH,MAAhC,EAAwC;YACtC8B,mBAAmB,CACjBtD,OADiB,EAEjBpC,WAAA,CAAEiB,SAAF,CAAYY,GAAZ,CAFiB,EAGjB7B,WAAA,CAAEiB,SAAF,CAAYmE,MAAZ,CAHiB,EAIjBrD,QAJiB,CAAnB;UAMD,CAPD,MAOO;YACL,MAAMrC,IAAI,GAAG0C,OAAO,CAAC1C,IAArB;YAGAF,IAAI,CAACE,IAAL,CAAU+B,IAAV,CAAeA,IAAf,CAAoB1C,OAApB,CACEiB,WAAA,CAAEgC,oBAAF,CACEH,GADF,EAEE7B,WAAA,CAAEiB,SAAF,CAAYmE,MAAZ,CAFF,EAGE,EAHF,EAIE1F,IAAI,CAAC8C,MAJP,CADF;YASA4E,uBAAuB,CAAC3H,GAAxB,CAA6BoC,GAAD,CAAuBjD,EAAvB,CAA0Be,IAAtD;YAEAyC,OAAO,CAACiH,MAAR;UACD;QACF;;QAED,IAAIC,QAAJ;;QAEA,IAAI/G,UAAJ,EAAgB;UACd+G,QAAQ,GAAGtJ,WAAA,CAAEiB,SAAF,CAAYY,GAAZ,CAAX;QACD,CAFD,MAEO,IAAIA,GAAG,CAACvB,IAAJ,KAAa,aAAjB,EAAgC;UACrCgJ,QAAQ,GAAGtJ,WAAA,CAAEuJ,aAAF,CAAgB1H,GAAG,CAACjD,EAAJ,CAAOe,IAAvB,CAAX;QACD,CAFM,MAEA,IAAIkC,GAAG,CAACvB,IAAJ,KAAa,YAAjB,EAA+B;UACpCgJ,QAAQ,GAAGtJ,WAAA,CAAEuJ,aAAF,CAAgB1H,GAAG,CAAClC,IAApB,CAAX;QACD,CAFM,MAEA;UACL2J,QAAQ,GAAGtJ,WAAA,CAAEiB,SAAF,CAAYY,GAAZ,CAAX;QACD;;QAEDkF,oBAAoB,CAAC/B,IAArB,CAA0B;UACxBjB,IADwB;UAExBW,UAAU,EAAEA,UAAU,CAACF,GAAX,CAAegF,CAAC,IAAIA,CAAC,CAAC9J,IAAF,CAAOkI,UAA3B,CAFY;UAGxBjI,IAAI,EAAE2J,QAHkB;UAIxBvH,QAJwB;UAKxB8C,cALwB;UAMxBO;QANwB,CAA1B;;QASA,IAAIrB,IAAI,KAAKP,KAAb,EAAoB;UAClB,IAAIzB,QAAJ,EAAc;YACZoF,kBAAkB,GAAG,IAArB;UACD,CAFD,MAEO;YACLD,iBAAiB,GAAG,IAApB;UACD;QACF;;QAED,IAAI9E,OAAO,CAAC1C,IAAZ,EAAkB;UAChB0C,OAAO,CAAC1C,IAAR,CAAagF,UAAb,GAA0B,IAA1B;QACD;;QAED,IACE,CAACsC,cAAD,IACA,CAACjF,QADD,KAECgC,IAAI,KAAKP,KAAT,IAAkBO,IAAI,KAAKN,QAF5B,CADF,EAIE;UACAuD,cAAc,GAAG5E,OAAjB;QAGD;MACF;IACF;EACF;;EAED,MAAMqH,kBAAkB,GAAGnF,uBAAuB,CAACyC,oBAAD,CAAlD;;EACA,MAAM2C,gBAAgB,GAAG1J,WAAA,CAAEuE,eAAF,CACvB,CAACiC,eAAe,IAAI,EAApB,EAAwBhC,GAAxB,CAA4BgF,CAAC,IAAIA,CAAC,CAAC5B,UAAnC,CADuB,CAAzB;;EAIA,MAAMxC,MAAsB,GAC1BH,8BAA8B,CAAC8B,oBAAD,CADhC;;EAGA,IAAIG,iBAAJ,EAAuB;IACrBG,cAAc,GAAGK,WAAW,CAACtG,6BAAZ,CAA0C,WAA1C,CAAjB;IACAgE,MAAM,CAACJ,IAAP,CAAYqC,cAAZ;;IAEA,MAAMsC,aAAa,GAAG3J,WAAA,CAAEwF,cAAF,CAAiBxF,WAAA,CAAEiB,SAAF,CAAYoG,cAAZ,CAAjB,EAA8C,CAClErH,WAAA,CAAE6C,cAAF,EADkE,CAA9C,CAAtB;;IAIA,IAAImE,cAAJ,EAAoB;MAClB,MAAMlF,KAAK,GAAGkF,cAAc,CAACjG,GAAf,CAAmB,OAAnB,CAAd;MACA,MAAMU,IAAoB,GAAG,CAACkI,aAAD,CAA7B;;MAEA,IAAI7H,KAAK,CAACpC,IAAV,EAAgB;QACd+B,IAAI,CAACuD,IAAL,CAAUlD,KAAK,CAACpC,IAAhB;MACD;;MAEDoC,KAAK,CAACd,WAAN,CAAkBhB,WAAA,CAAE2B,kBAAF,CAAqBF,IAArB,CAAlB;IACD,CATD,MASO,IAAIwF,eAAJ,EAAqB;MAC1B,IAAIzH,IAAI,CAACE,IAAL,CAAU8B,UAAd,EAA0B;QACxBhC,IAAI,CAACF,QAAL,CAAc;UACZsK,cAAc,EAAE;YACdC,IAAI,CAACrK,IAAD,EAAO;cACT,IAAI,CAACA,IAAI,CAACuB,GAAL,CAAS,QAAT,EAAmB+I,OAAnB,EAAL,EAAmC;cAEnCtK,IAAI,CAACwB,WAAL,CACEhB,WAAA,CAAEwF,cAAF,CAAiBxF,WAAA,CAAEiB,SAAF,CAAYoG,cAAZ,CAAjB,EAA8C,CAAC7H,IAAI,CAACE,IAAN,CAA9C,CADF;cAIAF,IAAI,CAACuK,IAAL;YACD;;UATa;QADJ,CAAd;MAaD,CAdD,MAcO;QACL9C,eAAe,CAACvH,IAAhB,CAAqB+B,IAArB,CAA0BA,IAA1B,CAA+B1C,OAA/B,CACEiB,WAAA,CAAE+C,mBAAF,CAAsB4G,aAAtB,CADF;MAGD;IACF,CApBM,MAoBA;MACL,MAAMlI,IAAmB,GAAG,CAACzB,WAAA,CAAE+C,mBAAF,CAAsB4G,aAAtB,CAAD,CAA5B;;MAEA,IAAInK,IAAI,CAACE,IAAL,CAAU8B,UAAd,EAA0B;QACxBC,IAAI,CAAC1C,OAAL,CACEiB,WAAA,CAAE+C,mBAAF,CACE/C,WAAA,CAAEwF,cAAF,CAAiBxF,WAAA,CAAEgK,KAAF,EAAjB,EAA4B,CAC1BhK,WAAA,CAAEiK,aAAF,CAAgBjK,WAAA,CAAEE,UAAF,CAAa,MAAb,CAAhB,CAD0B,CAA5B,CADF,CADF;MAOD;;MAEDV,IAAI,CAACE,IAAL,CAAU+B,IAAV,CAAeA,IAAf,CAAoB1C,OAApB,CACEiB,WAAA,CAAEoD,WAAF,CACE,aADF,EAEEpD,WAAA,CAAEE,UAAF,CAAa,aAAb,CAFF,EAGE,CAACF,WAAA,CAAEkK,WAAF,CAAclK,WAAA,CAAEE,UAAF,CAAa,MAAb,CAAd,CAAD,CAHF,EAIEF,WAAA,CAAE0C,cAAF,CAAiBjB,IAAjB,CAJF,CADF;IAQD;EACF;;EAED,IAAI0F,kBAAJ,EAAwB;IACtBG,eAAe,GAAGI,WAAW,CAACtG,6BAAZ,CAA0C,YAA1C,CAAlB;IACAgE,MAAM,CAACJ,IAAP,CAAYsC,eAAZ;EACD;;EAED,IAAIF,uBAAuB,CAAC+C,IAAxB,GAA+B,CAAnC,EAAsC;IACpC3K,IAAI,CAACF,QAAL,CAAc;MACZC,WAAW,CAACC,IAAD,EAAO;QAChB,IAAI,CAAC4H,uBAAuB,CAACrH,GAAxB,CAA4BP,IAAI,CAACE,IAAL,CAAUd,EAAV,CAAae,IAAzC,CAAL,EAAqD;QAErD,MAAM0B,UAAU,GAAG7B,IAAI,CAAC6B,UAAxB;QACA,MAAM+I,gBAAgB,GAAG/I,UAAU,CAACA,UAApC;;QAEA,IAEG+I,gBAAgB,CAAC1K,IAAjB,CAAsBY,IAAtB,KAA+B,sBAA/B,IACC8J,gBAAgB,CAAC1K,IAAjB,CAAsB2K,IAAtB,KAA+BhJ,UAAU,CAAC3B,IAD5C,IAGA0K,gBAAgB,CAAC1K,IAAjB,CAAsBY,IAAtB,KAA+B,kBAH/B,IAKA8J,gBAAgB,CAAC1K,IAAjB,CAAsBY,IAAtB,KAA+B,aAL/B,IAOA8J,gBAAgB,CAAC1K,IAAjB,CAAsBY,IAAtB,KAA+B,cAP/B,IASC8J,gBAAgB,CAAC1K,IAAjB,CAAsBY,IAAtB,KAA+B,gBAA/B,IACC8J,gBAAgB,CAAC1K,IAAjB,CAAsBoC,KAAtB,KAAgCT,UAAU,CAAC3B,IAD5C,IAEC0K,gBAAgB,CAAC/I,UAAjB,CAA4Bf,IAA5B,KAAqC,eAXvC,IAaC8J,gBAAgB,CAAC1K,IAAjB,CAAsBY,IAAtB,KAA+B,gBAA/B,IACC8J,gBAAgB,CAAC1K,IAAjB,CAAsB2K,IAAtB,KAA+BhJ,UAAU,CAAC3B,IAhB9C,EAiBE;UACA,MAAMF,IAAI,CAAC8K,mBAAL,CACH,sDAAqD9K,IAAI,CAACE,IAAL,CAAUd,EAAV,CAAae,IAAK,mCADpE,CAAN;QAGD;MACF;;IA7BW,CAAd;EA+BD;;EAED,IAAI4K,iBAAiB,GAAG,KAAxB;;EACA,MAAMC,aAAa,GACjBjD,cAAc,IAAIvH,WAAA,CAAEwF,cAAF,CAAiBxF,WAAA,CAAEiB,SAAF,CAAYsG,cAAZ,CAAjB,EAA8C,EAA9C,CADpB;;EAGA,MAAMkD,aAAa,GAAGjL,IAAI,CAACE,IAA3B;;EAEA,IAAI8G,eAAJ,EAAqB;IACnBpB,MAAM,CAACJ,IAAP,CAAYwC,UAAZ,EAAwBD,cAAxB;IACA,MAAMmD,OAIH,GAAG,EAJN;IAKA,IAAIC,YAA6B,GAAG,EAApC;IACAnL,IAAI,CAACuB,GAAL,CAAS,WAAT,EAAsB6J,OAAtB,CAA8BxI,OAAO,IAAI;MAGvC,IAAIA,OAAO,CAACyI,aAAR,EAAJ,EAA6B;QAC3BF,YAAY,CAAC3F,IAAb,CAAkB5C,OAAO,CAAC1C,IAA1B;QACA0C,OAAO,CAACiH,MAAR;QACA;MACD;;MAED,MAAMyB,UAAU,GACd1I,OAAO,CAAC2I,eAAR,MAA6B3I,OAAO,CAAC4I,sBAAR,EAD/B;;MAGA,IACE,CAACF,UAAU,IAAI1I,OAAO,CAAC6I,oBAAR,EAAf,KACA7I,OAAO,CAAC1C,IAAR,CAAa8C,MAFf,EAGE;QACA,IAAIsI,UAAU,IAAIH,YAAY,CAAC7L,MAAb,GAAsB,CAAxC,EAA2C;UACzC,MAAMoM,SAAyB,GAAGP,YAAY,CAACnG,GAAb,CAAiBuB,iBAAjB,CAAlC;UACA,IAAI3D,OAAO,CAAC1C,IAAR,CAAaoC,KAAjB,EAAwBoJ,SAAS,CAAClG,IAAV,CAAe5C,OAAO,CAAC1C,IAAR,CAAaoC,KAA5B;UACxBM,OAAO,CAAC1C,IAAR,CAAaoC,KAAb,GAAqBmE,uBAAuB,CAACiF,SAAD,CAA5C;UACAP,YAAY,GAAG,EAAf;QACD;;QAEDvI,OAAO,CAAC1C,IAAR,CAAa8C,MAAb,GAAsB,KAAtB;QACAkI,OAAO,CAAC1F,IAAR,CAAa5C,OAAO,CAAC1C,IAArB;QACA0C,OAAO,CAACiH,MAAR;MACD;IACF,CA3BD;;IA6BA,IAAIqB,OAAO,CAAC5L,MAAR,GAAiB,CAAjB,IAAsB6L,YAAY,CAAC7L,MAAb,GAAsB,CAAhD,EAAmD;MACjD,MAAMqM,YAAY,GAAGC,cAAA,CAASxD,UAAT,CAAoByD,GAAI;AACnD,wBAAwBhF,KAAK,CAACiF,SAAN,CAAgB,UAAhB,CAA4B;AACpD,OAFM;MAGAH,YAAY,CAAC1J,IAAb,CAAkBA,IAAlB,GAAyB,CACvBzB,WAAA,CAAEuL,WAAF,CAAc,CAACvL,WAAA,CAAEwL,WAAF,CAAchM,IAAI,CAACE,IAAnB,EAAyB,KAAzB,CAAD,CAAd,CADuB,EAEvB,GAAGgL,OAFoB,CAAzB;MAKA,MAAMe,eAA+B,GAAG,EAAxC;;MAEA,MAAMC,OAAO,GAAG1L,WAAA,CAAE2L,aAAF,CAAgBR,YAAhB,EAA8B,EAA9B,CAAhB;;MAEA,IAAIR,YAAY,CAAC7L,MAAb,GAAsB,CAA1B,EAA6B;QAC3B2M,eAAe,CAACzG,IAAhB,CAAqB,GAAG2F,YAAY,CAACnG,GAAb,CAAiBuB,iBAAjB,CAAxB;MACD;;MACD,IAAIyE,aAAJ,EAAmB;QACjBD,iBAAiB,GAAG,IAApB;QACAkB,eAAe,CAACzG,IAAhB,CAAqBwF,aAArB;MACD;;MACD,IAAIiB,eAAe,CAAC3M,MAAhB,GAAyB,CAA7B,EAAgC;QAC9B2M,eAAe,CAAC1M,OAAhB,CACEiB,WAAA,CAAEwF,cAAF,CAAiBxF,WAAA,CAAEgK,KAAF,EAAjB,EAA4B,CAAChK,WAAA,CAAEiB,SAAF,CAAYuG,UAAZ,CAAD,CAA5B,CADF;QAIA2D,YAAY,CAAC1J,IAAb,CAAkBA,IAAlB,CAAuBuD,IAAvB,CACEhF,WAAA,CAAEoD,WAAF,CACE,aADF,EAEEpD,WAAA,CAAEE,UAAF,CAAa,aAAb,CAFF,EAGE,EAHF,EAIEF,WAAA,CAAE0C,cAAF,CAAiB,CACf1C,WAAA,CAAE+C,mBAAF,CAAsB/C,WAAA,CAAE2B,kBAAF,CAAqB8J,eAArB,CAAtB,CADe,CAAjB,CAJF,CADF;MAUD,CAfD,MAeO;QACLC,OAAO,CAACE,SAAR,CAAkB5G,IAAlB,CAAuBhF,WAAA,CAAEiB,SAAF,CAAYuG,UAAZ,CAAvB;MACD;;MAEDhI,IAAI,CAACwB,WAAL,CAAiB0K,OAAjB;IACD;EACF;;EACD,IAAI,CAACnB,iBAAD,IAAsBC,aAA1B,EAAyC;IACvChL,IAAI,CAACE,IAAL,CAAU+B,IAAV,CAAeA,IAAf,CAAoBuD,IAApB,CACEhF,WAAA,CAAEuL,WAAF,CAAc,CAACvL,WAAA,CAAE+C,mBAAF,CAAsByH,aAAtB,CAAD,CAAd,CADF;EAGD;;EAEDC,aAAa,CAAChJ,IAAd,CAAmBA,IAAnB,CAAwB1C,OAAxB,CACEiB,WAAA,CAAEuL,WAAF,CACE,CACEvL,WAAA,CAAE+C,mBAAF,CACE/C,WAAA,CAAEgD,oBAAF,CACE,GADF,EAEEhD,WAAA,CAAE6L,YAAF,CAAezG,MAAf,CAFF,EAGEpF,WAAA,CAAEwF,cAAF,CACEa,KAAK,CAACiF,SAAN,CACE/E,OAAO,KAAK,SAAZ,GAAwB,WAAxB,GAAsC,eADxC,CADF,EAIE,CAACvG,WAAA,CAAE6C,cAAF,EAAD,EAAqB4G,kBAArB,EAAyCC,gBAAzC,CAJF,CAHF,CADF,CADF,EAaEvC,kBAAkB,IAChBnH,WAAA,CAAE+C,mBAAF,CACE/C,WAAA,CAAEwF,cAAF,CAAiBxF,WAAA,CAAEiB,SAAF,CAAYqG,eAAZ,CAAjB,EAA+C,CAC7CtH,WAAA,CAAE6C,cAAF,EAD6C,CAA/C,CADF,CAdJ,EAmBEuB,MAnBF,CAmBS0H,OAnBT,CADF,CADF;EA2BAtM,IAAI,CAACoB,YAAL,CAAkB6G,WAAW,CAACjD,GAAZ,CAAgBuH,IAAI,IAAI/L,WAAA,CAAE+C,mBAAF,CAAsBgJ,IAAtB,CAAxB,CAAlB;EAGAvM,IAAI,CAACgB,KAAL,CAAWwL,KAAX;EAEA,OAAOxM,IAAP;AACD;;AAEc,kBACb;EAAEyM,aAAF;EAAiBC;AAAjB,CADa,EAEb;EAAEC;AAAF,CAFa,EAGb5F,OAHa,EAIC;EAAA;;EACd0F,aAAa,CAAC1F,OAAO,KAAK,SAAZ,GAAwB,SAAxB,GAAoC,SAArC,CAAb;EAEA,MAAM6F,OAAO,GAAG,IAAIC,OAAJ,EAAhB;EACA,MAAM/F,aAAa,kBAAG4F,UAAU,CAAC,eAAD,CAAb,0BAAkCC,KAArD;EAEA,OAAO;IACLxM,IAAI,EAAE,qBADD;IAEL2M,QAAQ,EAAEC,+BAFL;IAILC,OAAO,EAAE;MACP,kDACEhN,IADF,EAEE;QAAA;;QACA,MAAM;UAAEiN;QAAF,IAAkBjN,IAAI,CAACE,IAA7B;;QACA,IACE,CAAA+M,WAAW,QAAX,YAAAA,WAAW,CAAEnM,IAAb,MAAsB,kBAAtB,IAGA,0BAAAmM,WAAW,CAAC/H,UAAZ,2CAAwB5F,MAAxB,IAAiC,CAJnC,EAKE;UACA,IAAA4N,qCAAA,EAAuBlN,IAAvB;QACD;MACF,CAbM;;MAePmN,KAAK,CAACnN,IAAD,EAAO6G,KAAP,EAAc;QACjB,IAAI+F,OAAO,CAACrM,GAAR,CAAYP,IAAZ,CAAJ,EAAuB;QAEvB,MAAMkC,OAAO,GAAG0E,cAAc,CAAC5G,IAAD,EAAO6G,KAAP,EAAcC,aAAd,EAA6BC,OAA7B,CAA9B;QACA,IAAI7E,OAAJ,EAAa0K,OAAO,CAAC3M,GAAR,CAAYiC,OAAZ;MACd;;IApBM;EAJJ,CAAP;AA2BD"}
|
|
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","functionExpression","FIELD","ACCESSOR","METHOD","GETTER","SETTER","STATIC","getElementKind","kind","isDecoratorInfo","info","filteredOrderedDecoratorInfo","filtered","filter","el","generateDecorationExprs","arrayExpression","map","decs","decorators","decInfo","numericLiteral","privateMethods","Array","isArray","push","extractElementLocalAssignments","decorationInfo","localIds","locals","addCallAccessorsFor","getId","setId","callExpression","isNotTsParameter","movePrivateAccessor","methodLocalVar","params","block","isClassDecoratableElementPath","staticBlockToIIFE","arrowFunctionExpression","maybeSequenceExpression","exprs","unaryExpression","transformClass","state","constantSuper","version","classDecorators","hasElementDecorators","generateClassPrivateUid","computed","newId","valueNode","newField","elementDecoratorInfo","firstFieldPath","constructorPath","requiresProtoInit","requiresStaticInit","decoratedPrivateMethods","protoInitLocal","staticInitLocal","classInitLocal","classLocal","assignments","scopeParent","memoiseExpression","expression","hint","localEvaluatedId","localId","classDecorator","generateUidIdentifier","hasDecorators","decoratorPath","isPrivate","isClassMethod","newFieldInitId","newValue","initId","valuePath","v","replaceSupers","ReplaceSupers","methodPath","objectRef","superRef","file","refToPreserve","replace","async","isAsync","remove","nameExpr","stringLiteral","d","elementDecorations","classDecorations","protoInitCall","CallExpression","exit","isSuper","skip","super","spreadElement","restElement","size","parentParentPath","left","buildCodeFrameError","classInitInjected","classInitCall","originalClass","statics","staticBlocks","forEach","isStaticBlock","isProperty","isClassProperty","isClassPrivateProperty","isClassPrivateMethod","allValues","staticsClass","template","ast","addHelper","staticBlock","toStatement","constructorBody","newExpr","newExpression","arguments","arrayPattern","Boolean","expr","crawl","assertVersion","assumption","loose","VISITED","WeakSet","inherits","syntaxDecorators","visitor","declaration","splitExportDeclaration","Class"],"sources":["../src/transformer-2022-03.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\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): t.FunctionExpression[] {\n return [\n t.functionExpression(\n undefined,\n [],\n t.blockStatement([\n t.returnStatement(\n t.memberExpression(t.thisExpression(), t.cloneNode(targetKey)),\n ),\n ]),\n ),\n t.functionExpression(\n undefined,\n [t.identifier(\"value\")],\n t.blockStatement([\n t.expressionStatement(\n t.assignmentExpression(\n \"=\",\n t.memberExpression(t.thisExpression(), t.cloneNode(targetKey)),\n t.identifier(\"value\"),\n ),\n ),\n ]),\n ),\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: t.FunctionExpression | t.FunctionExpression[] | 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 const decInfo = [decs, t.numericLiteral(kind), el.name];\n\n const { privateMethods } = el;\n\n if (Array.isArray(privateMethods)) {\n decInfo.push(...privateMethods);\n } else if (privateMethods) {\n decInfo.push(privateMethods);\n }\n\n return t.arrayExpression(decInfo);\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: \"2022-03\" | \"2021-12\",\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 classLocal: 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 [localId, classPath] = replaceClassWithVar(path);\n path = classPath;\n classLocal = localId;\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 classLocal = t.cloneNode(path.node.id);\n }\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 as t.PrivateName).id.name;\n } else if (!isComputed && key.type === \"Identifier\") {\n name = key.name;\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: t.FunctionExpression | t.FunctionExpression[];\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);\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 as t.PrivateName, 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 as t.PrivateName);\n }\n } else if (isPrivate) {\n locals = element.scope.parent.generateDeclaredUidIdentifier(\n `call_${name}`,\n ) as t.Identifier;\n\n const replaceSupers = new ReplaceSupers({\n constantSuper,\n methodPath: element as NodePath<t.ClassPrivateMethod>,\n objectRef: classLocal,\n superRef: path.node.superClass,\n file: state.file,\n refToPreserve: classLocal,\n });\n\n replaceSupers.replace();\n\n const {\n params,\n body,\n async: isAsync,\n } = element.node as t.ClassPrivateMethod;\n\n privateMethods = t.functionExpression(\n undefined,\n params.filter(isNotTsParameter),\n body,\n isAsync,\n );\n\n if (kind === GETTER || kind === SETTER) {\n movePrivateAccessor(\n element as NodePath<t.ClassPrivateMethod>,\n t.cloneNode(key as t.PrivateName),\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(\n key as t.PrivateName,\n t.cloneNode(locals),\n [],\n node.static,\n ),\n );\n\n decoratedPrivateMethods.add((key as t.PrivateName).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 locals: t.Identifier[] =\n extractElementLocalAssignments(elementDecoratorInfo);\n\n if (requiresProtoInit) {\n protoInitLocal = scopeParent.generateDeclaredUidIdentifier(\"initProto\");\n locals.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 locals.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 let classInitInjected = false;\n const classInitCall =\n classInitLocal && t.callExpression(t.cloneNode(classInitLocal), []);\n\n const originalClass = path.node;\n\n if (classDecorators) {\n locals.push(classLocal, 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(classLocal)]),\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(classLocal));\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 t.assignmentExpression(\n \"=\",\n t.arrayPattern(locals),\n t.callExpression(\n state.addHelper(\n version === \"2021-12\" ? \"applyDecs\" : \"applyDecs2203\",\n ),\n [t.thisExpression(), elementDecorations, classDecorations],\n ),\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\nexport default function (\n { assertVersion, assumption }: PluginAPI,\n { loose }: Options,\n version: \"2022-03\" | \"2021-12\",\n): PluginObject {\n assertVersion(version === \"2021-12\" ? \"^7.16.0\" : \"^7.19.0\");\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;AAkBA,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,EACA;EACxB,OAAO,CACLtC,WAAC,CAACuD,kBAAkB,CAClBtB,SAAS,EACT,EAAE,EACFjC,WAAC,CAAC0C,cAAc,CAAC,CACf1C,WAAC,CAAC2C,eAAe,CACf3C,WAAC,CAAC4C,gBAAgB,CAAC5C,WAAC,CAAC6C,cAAc,EAAE,EAAE7C,WAAC,CAACiB,SAAS,CAACqB,SAAS,CAAC,CAAC,CAC/D,CACF,CAAC,CACH,EACDtC,WAAC,CAACuD,kBAAkB,CAClBtB,SAAS,EACT,CAACjC,WAAC,CAACE,UAAU,CAAC,OAAO,CAAC,CAAC,EACvBF,WAAC,CAAC0C,cAAc,CAAC,CACf1C,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,OAAO,CAAC,CACtB,CACF,CACF,CAAC,CACH,CACF;AACH;AAEA,MAAMsD,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,CAAC1B,OAA0C,EAAU;EAC1E,QAAQA,OAAO,CAAC1C,IAAI,CAACY,IAAI;IACvB,KAAK,eAAe;IACpB,KAAK,sBAAsB;MACzB,OAAOkD,KAAK;IACd,KAAK,uBAAuB;MAC1B,OAAOC,QAAQ;IACjB,KAAK,aAAa;IAClB,KAAK,oBAAoB;MACvB,IAAIrB,OAAO,CAAC1C,IAAI,CAACqE,IAAI,KAAK,KAAK,EAAE;QAC/B,OAAOJ,MAAM;MACf,CAAC,MAAM,IAAIvB,OAAO,CAAC1C,IAAI,CAACqE,IAAI,KAAK,KAAK,EAAE;QACtC,OAAOH,MAAM;MACf,CAAC,MAAM;QACL,OAAOF,MAAM;MACf;EAAC;AAEP;;AA8BA,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,CAACtC,QAAQ,IAAIsC,EAAE,CAACN,IAAI,IAAIN,QAAQ,IAAIY,EAAE,CAACN,IAAI,IAAIH,MAAM,CAC9D,EACD,GAAGO,QAAQ,CAACC,MAAM,CAChBC,EAAE,IAAI,CAACA,EAAE,CAACtC,QAAQ,IAAIsC,EAAE,CAACN,IAAI,IAAIN,QAAQ,IAAIY,EAAE,CAACN,IAAI,IAAIH,MAAM,CAC/D,EACD,GAAGO,QAAQ,CAACC,MAAM,CAACC,EAAE,IAAIA,EAAE,CAACtC,QAAQ,IAAIsC,EAAE,CAACN,IAAI,KAAKP,KAAK,CAAC,EAC1D,GAAGW,QAAQ,CAACC,MAAM,CAACC,EAAE,IAAI,CAACA,EAAE,CAACtC,QAAQ,IAAIsC,EAAE,CAACN,IAAI,KAAKP,KAAK,CAAC,CAC5D;AACH;AAEA,SAASc,uBAAuB,CAC9BL,IAA0C,EACvB;EACnB,OAAOjE,WAAC,CAACuE,eAAe,CACtBL,4BAA4B,CAACD,IAAI,CAAC,CAACO,GAAG,CAACH,EAAE,IAAI;IAC3C,MAAMI,IAAI,GACRJ,EAAE,CAACK,UAAU,CAAC5F,MAAM,GAAG,CAAC,GACpBkB,WAAC,CAACuE,eAAe,CAACF,EAAE,CAACK,UAAU,CAAC,GAChCL,EAAE,CAACK,UAAU,CAAC,CAAC,CAAC;IAEtB,MAAMX,IAAI,GAAGM,EAAE,CAACtC,QAAQ,GAAGsC,EAAE,CAACN,IAAI,GAAGF,MAAM,GAAGQ,EAAE,CAACN,IAAI;IAErD,MAAMY,OAAO,GAAG,CAACF,IAAI,EAAEzE,WAAC,CAAC4E,cAAc,CAACb,IAAI,CAAC,EAAEM,EAAE,CAAC1E,IAAI,CAAC;IAEvD,MAAM;MAAEkF;IAAe,CAAC,GAAGR,EAAE;IAE7B,IAAIS,KAAK,CAACC,OAAO,CAACF,cAAc,CAAC,EAAE;MACjCF,OAAO,CAACK,IAAI,CAAC,GAAGH,cAAc,CAAC;IACjC,CAAC,MAAM,IAAIA,cAAc,EAAE;MACzBF,OAAO,CAACK,IAAI,CAACH,cAAc,CAAC;IAC9B;IAEA,OAAO7E,WAAC,CAACuE,eAAe,CAACI,OAAO,CAAC;EACnC,CAAC,CAAC,CACH;AACH;AAEA,SAASM,8BAA8B,CACrCC,cAAoD,EACpD;EACA,MAAMC,QAAwB,GAAG,EAAE;EAEnC,KAAK,MAAMd,EAAE,IAAIH,4BAA4B,CAACgB,cAAc,CAAC,EAAE;IAC7D,MAAM;MAAEE;IAAO,CAAC,GAAGf,EAAE;IAErB,IAAIS,KAAK,CAACC,OAAO,CAACK,MAAM,CAAC,EAAE;MACzBD,QAAQ,CAACH,IAAI,CAAC,GAAGI,MAAM,CAAC;IAC1B,CAAC,MAAM,IAAIA,MAAM,KAAKnD,SAAS,EAAE;MAC/BkD,QAAQ,CAACH,IAAI,CAACI,MAAM,CAAC;IACvB;EACF;EAEA,OAAOD,QAAQ;AACjB;AAEA,SAASE,mBAAmB,CAC1BjD,OAAiB,EACjBP,GAAkB,EAClByD,KAAmB,EACnBC,KAAmB,EACnB;EACAnD,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,CAACwF,cAAc,CAACxF,WAAC,CAACiB,SAAS,CAACqE,KAAK,CAAC,EAAE,CAACtF,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,CAACwF,cAAc,CAACxF,WAAC,CAACiB,SAAS,CAACsE,KAAK,CAAC,EAAE,CACnCvF,WAAC,CAAC6C,cAAc,EAAE,EAClB7C,WAAC,CAACE,UAAU,CAAC,GAAG,CAAC,CAClB,CAAC,CACH,CACF,CAAC,CACH,CACF;AACH;AAEA,SAASuF,gBAAgB,CACvB/F,IAAsE,EACpB;EAClD,OAAOA,IAAI,CAACY,IAAI,KAAK,qBAAqB;AAC5C;AAEA,SAASoF,mBAAmB,CAC1BtD,OAAuC,EACvCP,GAAkB,EAClB8D,cAA4B,EAC5B5D,QAAiB,EACjB;EACA,IAAI6D,MAAwC;EAC5C,IAAIC,KAAoB;EAExB,IAAIzD,OAAO,CAAC1C,IAAI,CAACqE,IAAI,KAAK,KAAK,EAAE;IAC/B6B,MAAM,GAAG,CAAC5F,WAAC,CAACE,UAAU,CAAC,GAAG,CAAC,CAAC;IAC5B2F,KAAK,GAAG,CACN7F,WAAC,CAAC+C,mBAAmB,CACnB/C,WAAC,CAACwF,cAAc,CAACG,cAAc,EAAE,CAC/B3F,WAAC,CAAC6C,cAAc,EAAE,EAClB7C,WAAC,CAACE,UAAU,CAAC,GAAG,CAAC,CAClB,CAAC,CACH,CACF;EACH,CAAC,MAAM;IACL0F,MAAM,GAAG,EAAE;IACXC,KAAK,GAAG,CACN7F,WAAC,CAAC2C,eAAe,CAAC3C,WAAC,CAACwF,cAAc,CAACG,cAAc,EAAE,CAAC3F,WAAC,CAAC6C,cAAc,EAAE,CAAC,CAAC,CAAC,CAC1E;EACH;EAEAT,OAAO,CAACpB,WAAW,CACjBhB,WAAC,CAACmD,kBAAkB,CAClBf,OAAO,CAAC1C,IAAI,CAACqE,IAAI,EACjB/D,WAAC,CAACiB,SAAS,CAACY,GAAG,CAAC,EAChB+D,MAAM,EACN5F,WAAC,CAAC0C,cAAc,CAACmD,KAAK,CAAC,EACvB9D,QAAQ,CACT,CACF;AACH;AAEA,SAAS+D,6BAA6B,CACpCtG,IAA4B,EACe;EAC3C,MAAM;IAAEc;EAAK,CAAC,GAAGd,IAAI;EAErB,OACEc,IAAI,KAAK,iBAAiB,IAC1BA,IAAI,KAAK,kBAAkB,IAC3BA,IAAI,KAAK,aAAa;AAE1B;AAEA,SAASyF,iBAAiB,CAACF,KAAoB,EAAE;EAC/C,OAAO7F,WAAC,CAACwF,cAAc,CACrBxF,WAAC,CAACgG,uBAAuB,CAAC,EAAE,EAAEhG,WAAC,CAAC0C,cAAc,CAACmD,KAAK,CAACpE,IAAI,CAAC,CAAC,EAC3D,EAAE,CACH;AACH;AAEA,SAASwE,uBAAuB,CAACC,KAAqB,EAAE;EACtD,IAAIA,KAAK,CAACpH,MAAM,KAAK,CAAC,EAAE,OAAOkB,WAAC,CAACmG,eAAe,CAAC,MAAM,EAAEnG,WAAC,CAAC4E,cAAc,CAAC,CAAC,CAAC,CAAC;EAC7E,IAAIsB,KAAK,CAACpH,MAAM,KAAK,CAAC,EAAE,OAAOoH,KAAK,CAAC,CAAC,CAAC;EACvC,OAAOlG,WAAC,CAAC2B,kBAAkB,CAACuE,KAAK,CAAC;AACpC;AAEA,SAASE,cAAc,CACrB5G,IAAsD,EACtD6G,KAAiB,EACjBC,aAAsB,EACtBC,OAA8B,EACpB;EACV,MAAM9E,IAAI,GAAGjC,IAAI,CAACuB,GAAG,CAAC,WAAW,CAAC;EAElC,MAAMyF,eAAe,GAAGhH,IAAI,CAACE,IAAI,CAACgF,UAAU;EAC5C,IAAI+B,oBAAoB,GAAG,KAAK;EAEhC,MAAMC,uBAAuB,GAAGvG,qCAAqC,CAACX,IAAI,CAAC;;EAI3E,KAAK,MAAM4C,OAAO,IAAIX,IAAI,EAAE;IAC1B,IAAI,CAACqE,6BAA6B,CAAC1D,OAAO,CAAC,EAAE;MAC3C;IACF;IAEA,IAAIA,OAAO,CAAC1C,IAAI,CAACgF,UAAU,IAAItC,OAAO,CAAC1C,IAAI,CAACgF,UAAU,CAAC5F,MAAM,GAAG,CAAC,EAAE;MACjE2H,oBAAoB,GAAG,IAAI;IAC7B,CAAC,MAAM,IAAIrE,OAAO,CAAC1C,IAAI,CAACY,IAAI,KAAK,uBAAuB,EAAE;MACxD,MAAM;QAAEuB,GAAG;QAAEC,KAAK;QAAEU,MAAM,EAAET,QAAQ;QAAE4E;MAAS,CAAC,GAAGvE,OAAO,CAAC1C,IAAI;MAE/D,MAAMkH,KAAK,GAAGF,uBAAuB,EAAE;MAEvC,MAAMG,SAAS,GAAG/E,KAAK,GAAG9B,WAAC,CAACiB,SAAS,CAACa,KAAK,CAAC,GAAGG,SAAS;MAExD,MAAM6E,QAAQ,GAAGlF,qBAAqB,CAACgF,KAAK,EAAEC,SAAS,EAAE9E,QAAQ,CAAC;MAElE,MAAM,CAACL,OAAO,CAAC,GAAGU,OAAO,CAACpB,WAAW,CAAC8F,QAAQ,CAAC;MAC/C3E,oBAAoB,CAACT,OAAO,EAAEG,GAAG,EAAE+E,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,IAAI/H,GAAG,EAAU;EAEjD,IAAIgI,cAA4B,EAC9BC,eAA6B,EAC7BC,cAA4B,EAC5BC,UAAwB;EAC1B,MAAMC,WAAqC,GAAG,EAAE;EAChD,MAAMC,WAAkB,GAAGlI,IAAI,CAACgB,KAAK,CAACW,MAAM;EAE5C,MAAMwG,iBAAiB,GAAG,CAACC,UAAwB,EAAEC,IAAY,KAAK;IACpE,MAAMC,gBAAgB,GAAGJ,WAAW,CAACtG,6BAA6B,CAACyG,IAAI,CAAC;IACxEJ,WAAW,CAACzC,IAAI,CAAChF,WAAC,CAACgD,oBAAoB,CAAC,GAAG,EAAE8E,gBAAgB,EAAEF,UAAU,CAAC,CAAC;IAC3E,OAAO5H,WAAC,CAACiB,SAAS,CAAC6G,gBAAgB,CAAC;EACtC,CAAC;EAED,IAAItB,eAAe,EAAE;IACnBe,cAAc,GAAGG,WAAW,CAACtG,6BAA6B,CAAC,WAAW,CAAC;IAEvE,MAAM,CAAC2G,OAAO,EAAE7I,SAAS,CAAC,GAAGmB,mBAAmB,CAACb,IAAI,CAAC;IACtDA,IAAI,GAAGN,SAAS;IAChBsI,UAAU,GAAGO,OAAO;IAEpBvI,IAAI,CAACE,IAAI,CAACgF,UAAU,GAAG,IAAI;IAE3B,KAAK,MAAMsD,cAAc,IAAIxB,eAAe,EAAE;MAC5C,IAAI,CAACkB,WAAW,CAAC3F,QAAQ,CAACiG,cAAc,CAACJ,UAAU,CAAC,EAAE;QACpDI,cAAc,CAACJ,UAAU,GAAGD,iBAAiB,CAC3CK,cAAc,CAACJ,UAAU,EACzB,KAAK,CACN;MACH;IACF;EACF,CAAC,MAAM;IACL,IAAI,CAACpI,IAAI,CAACE,IAAI,CAACd,EAAE,EAAE;MACjBY,IAAI,CAACE,IAAI,CAACd,EAAE,GAAGY,IAAI,CAACgB,KAAK,CAACyH,qBAAqB,CAAC,OAAO,CAAC;IAC1D;IACAT,UAAU,GAAGxH,WAAC,CAACiB,SAAS,CAACzB,IAAI,CAACE,IAAI,CAACd,EAAE,CAAC;EACxC;EAEA,IAAI6H,oBAAoB,EAAE;IACxB,KAAK,MAAMrE,OAAO,IAAIX,IAAI,EAAE;MAC1B,IAAI,CAACqE,6BAA6B,CAAC1D,OAAO,CAAC,EAAE;QAC3C;MACF;MAEA,MAAM;QAAE1C;MAAK,CAAC,GAAG0C,OAAO;MACxB,MAAMsC,UAAU,GAAGtC,OAAO,CAACrB,GAAG,CAAC,YAAY,CAAC;MAE5C,MAAMmH,aAAa,GAAGpD,KAAK,CAACC,OAAO,CAACL,UAAU,CAAC,IAAIA,UAAU,CAAC5F,MAAM,GAAG,CAAC;MAExE,IAAIoJ,aAAa,EAAE;QACjB,KAAK,MAAMC,aAAa,IAAIzD,UAAU,EAAE;UACtC,IAAI,CAACgD,WAAW,CAAC3F,QAAQ,CAACoG,aAAa,CAACzI,IAAI,CAACkI,UAAU,CAAC,EAAE;YACxDO,aAAa,CAACzI,IAAI,CAACkI,UAAU,GAAGD,iBAAiB,CAC/CQ,aAAa,CAACzI,IAAI,CAACkI,UAAU,EAC7B,KAAK,CACN;UACH;QACF;MACF;MAEA,MAAMrF,UAAU,GACd,UAAU,IAAIH,OAAO,CAAC1C,IAAI,IAAI0C,OAAO,CAAC1C,IAAI,CAACiH,QAAQ,KAAK,IAAI;MAC9D,IAAIpE,UAAU,EAAE;QACd,IAAI,CAACmF,WAAW,CAAC3F,QAAQ,CAACrC,IAAI,CAACmC,GAAG,CAAC,EAAE;UACnCnC,IAAI,CAACmC,GAAG,GAAG8F,iBAAiB,CAACjI,IAAI,CAACmC,GAAG,EAAkB,aAAa,CAAC;QACvE;MACF;MAEA,MAAMkC,IAAI,GAAGD,cAAc,CAAC1B,OAAO,CAAC;MACpC,MAAM;QAAEP;MAAI,CAAC,GAAGnC,IAAI;MAEpB,MAAM0I,SAAS,GAAGvG,GAAG,CAACvB,IAAI,KAAK,aAAa;MAE5C,MAAMyB,QAAQ,GAAG,CAAC,CAACK,OAAO,CAAC1C,IAAI,CAAC8C,MAAM;MAEtC,IAAI7C,IAAI,GAAG,aAAa;MAExB,IAAIyI,SAAS,EAAE;QACbzI,IAAI,GAAIkC,GAAG,CAAmBjD,EAAE,CAACe,IAAI;MACvC,CAAC,MAAM,IAAI,CAAC4C,UAAU,IAAIV,GAAG,CAACvB,IAAI,KAAK,YAAY,EAAE;QACnDX,IAAI,GAAGkC,GAAG,CAAClC,IAAI;MACjB;MAEA,IAAIyC,OAAO,CAACiG,aAAa,CAAC;QAAEtE,IAAI,EAAE;MAAc,CAAC,CAAC,EAAE;QAClDkD,eAAe,GAAG7E,OAAO;MAC3B;MAEA,IAAI8F,aAAa,EAAE;QACjB,IAAI9C,MAAqC;QACzC,IAAIP,cAA6D;QAEjE,IAAId,IAAI,KAAKN,QAAQ,EAAE;UACrB,MAAM;YAAE3B;UAAM,CAAC,GAAGM,OAAO,CAAC1C,IAA+B;UAEzD,MAAMkG,MAAsB,GAAG,CAAC5F,WAAC,CAAC6C,cAAc,EAAE,CAAC;UAEnD,IAAIf,KAAK,EAAE;YACT8D,MAAM,CAACZ,IAAI,CAAChF,WAAC,CAACiB,SAAS,CAACa,KAAK,CAAC,CAAC;UACjC;UAEA,MAAM8E,KAAK,GAAGF,uBAAuB,EAAE;UACvC,MAAM4B,cAAc,GAClBlG,OAAO,CAAC5B,KAAK,CAACW,MAAM,CAACC,6BAA6B,CAAE,QAAOzB,IAAK,EAAC,CAAC;UACpE,MAAM4I,QAAQ,GAAGvI,WAAC,CAACwF,cAAc,CAC/BxF,WAAC,CAACiB,SAAS,CAACqH,cAAc,CAAC,EAC3B1C,MAAM,CACP;UAED,MAAMkB,QAAQ,GAAGlF,qBAAqB,CAACgF,KAAK,EAAE2B,QAAQ,EAAExG,QAAQ,CAAC;UACjE,MAAM,CAACL,OAAO,CAAC,GAAGU,OAAO,CAACpB,WAAW,CAAC8F,QAAQ,CAAC;UAE/C,IAAIsB,SAAS,EAAE;YACbvD,cAAc,GAAGvB,wBAAwB,CAACsD,KAAK,CAAC;YAEhD,MAAMtB,KAAK,GAAG5D,OAAO,CAAClB,KAAK,CAACW,MAAM,CAACC,6BAA6B,CAC7D,OAAMzB,IAAK,EAAC,CACd;YACD,MAAM4F,KAAK,GAAG7D,OAAO,CAAClB,KAAK,CAACW,MAAM,CAACC,6BAA6B,CAC7D,OAAMzB,IAAK,EAAC,CACd;YAED0F,mBAAmB,CAAC3D,OAAO,EAAEG,GAAG,EAAmByD,KAAK,EAAEC,KAAK,CAAC;YAEhEH,MAAM,GAAG,CAACkD,cAAc,EAAEhD,KAAK,EAAEC,KAAK,CAAC;UACzC,CAAC,MAAM;YACLpD,oBAAoB,CAACT,OAAO,EAAEG,GAAG,EAAE+E,KAAK,EAAErE,UAAU,CAAC;YACrD6C,MAAM,GAAGkD,cAAc;UACzB;QACF,CAAC,MAAM,IAAIvE,IAAI,KAAKP,KAAK,EAAE;UACzB,MAAMgF,MAAM,GAAGpG,OAAO,CAAC5B,KAAK,CAACW,MAAM,CAACC,6BAA6B,CAC9D,QAAOzB,IAAK,EAAC,CACf;UACD,MAAM8I,SAAS,GACbrG,OAAO,CACPrB,GAAG,CAAC,OAAO,CAAC;UAEd0H,SAAS,CAACzH,WAAW,CACnBhB,WAAC,CAACwF,cAAc,CACdxF,WAAC,CAACiB,SAAS,CAACuH,MAAM,CAAC,EACnB,CAACxI,WAAC,CAAC6C,cAAc,EAAE,EAAE4F,SAAS,CAAC/I,IAAI,CAAC,CAAC0E,MAAM,CAACsE,CAAC,IAAIA,CAAC,CAAC,CACpD,CACF;UAEDtD,MAAM,GAAGoD,MAAM;UAEf,IAAIJ,SAAS,EAAE;YACbvD,cAAc,GAAGvB,wBAAwB,CAACzB,GAAG,CAAkB;UACjE;QACF,CAAC,MAAM,IAAIuG,SAAS,EAAE;UACpBhD,MAAM,GAAGhD,OAAO,CAAC5B,KAAK,CAACW,MAAM,CAACC,6BAA6B,CACxD,QAAOzB,IAAK,EAAC,CACC;UAEjB,MAAMgJ,aAAa,GAAG,IAAIC,4BAAa,CAAC;YACtCtC,aAAa;YACbuC,UAAU,EAAEzG,OAAyC;YACrD0G,SAAS,EAAEtB,UAAU;YACrBuB,QAAQ,EAAEvJ,IAAI,CAACE,IAAI,CAAC8B,UAAU;YAC9BwH,IAAI,EAAE3C,KAAK,CAAC2C,IAAI;YAChBC,aAAa,EAAEzB;UACjB,CAAC,CAAC;UAEFmB,aAAa,CAACO,OAAO,EAAE;UAEvB,MAAM;YACJtD,MAAM;YACNnE,IAAI;YACJ0H,KAAK,EAAEC;UACT,CAAC,GAAGhH,OAAO,CAAC1C,IAA4B;UAExCmF,cAAc,GAAG7E,WAAC,CAACuD,kBAAkB,CACnCtB,SAAS,EACT2D,MAAM,CAACxB,MAAM,CAACqB,gBAAgB,CAAC,EAC/BhE,IAAI,EACJ2H,OAAO,CACR;UAED,IAAIrF,IAAI,KAAKJ,MAAM,IAAII,IAAI,KAAKH,MAAM,EAAE;YACtC8B,mBAAmB,CACjBtD,OAAO,EACPpC,WAAC,CAACiB,SAAS,CAACY,GAAG,CAAkB,EACjC7B,WAAC,CAACiB,SAAS,CAACmE,MAAM,CAAC,EACnBrD,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,CACpBH,GAAG,EACH7B,WAAC,CAACiB,SAAS,CAACmE,MAAM,CAAC,EACnB,EAAE,EACF1F,IAAI,CAAC8C,MAAM,CACZ,CACF;YAED4E,uBAAuB,CAAC3H,GAAG,CAAEoC,GAAG,CAAmBjD,EAAE,CAACe,IAAI,CAAC;YAE3DyC,OAAO,CAACiH,MAAM,EAAE;UAClB;QACF;QAEA,IAAIC,QAAsB;QAE1B,IAAI/G,UAAU,EAAE;UACd+G,QAAQ,GAAGtJ,WAAC,CAACiB,SAAS,CAACY,GAAG,CAAiB;QAC7C,CAAC,MAAM,IAAIA,GAAG,CAACvB,IAAI,KAAK,aAAa,EAAE;UACrCgJ,QAAQ,GAAGtJ,WAAC,CAACuJ,aAAa,CAAC1H,GAAG,CAACjD,EAAE,CAACe,IAAI,CAAC;QACzC,CAAC,MAAM,IAAIkC,GAAG,CAACvB,IAAI,KAAK,YAAY,EAAE;UACpCgJ,QAAQ,GAAGtJ,WAAC,CAACuJ,aAAa,CAAC1H,GAAG,CAAClC,IAAI,CAAC;QACtC,CAAC,MAAM;UACL2J,QAAQ,GAAGtJ,WAAC,CAACiB,SAAS,CAACY,GAAG,CAAiB;QAC7C;QAEAkF,oBAAoB,CAAC/B,IAAI,CAAC;UACxBjB,IAAI;UACJW,UAAU,EAAEA,UAAU,CAACF,GAAG,CAACgF,CAAC,IAAIA,CAAC,CAAC9J,IAAI,CAACkI,UAAU,CAAC;UAClDjI,IAAI,EAAE2J,QAAQ;UACdvH,QAAQ;UACR8C,cAAc;UACdO;QACF,CAAC,CAAC;QAEF,IAAIrB,IAAI,KAAKP,KAAK,EAAE;UAClB,IAAIzB,QAAQ,EAAE;YACZoF,kBAAkB,GAAG,IAAI;UAC3B,CAAC,MAAM;YACLD,iBAAiB,GAAG,IAAI;UAC1B;QACF;QAEA,IAAI9E,OAAO,CAAC1C,IAAI,EAAE;UAChB0C,OAAO,CAAC1C,IAAI,CAACgF,UAAU,GAAG,IAAI;QAChC;QAEA,IACE,CAACsC,cAAc,IACf,CAACjF,QAAQ,KACRgC,IAAI,KAAKP,KAAK,IAAIO,IAAI,KAAKN,QAAQ,CAAC,EACrC;UACAuD,cAAc,GAAG5E,OAEhB;QACH;MACF;IACF;EACF;EAEA,MAAMqH,kBAAkB,GAAGnF,uBAAuB,CAACyC,oBAAoB,CAAC;EACxE,MAAM2C,gBAAgB,GAAG1J,WAAC,CAACuE,eAAe,CACxC,CAACiC,eAAe,IAAI,EAAE,EAAEhC,GAAG,CAACgF,CAAC,IAAIA,CAAC,CAAC5B,UAAU,CAAC,CAC/C;EAED,MAAMxC,MAAsB,GAC1BH,8BAA8B,CAAC8B,oBAAoB,CAAC;EAEtD,IAAIG,iBAAiB,EAAE;IACrBG,cAAc,GAAGK,WAAW,CAACtG,6BAA6B,CAAC,WAAW,CAAC;IACvEgE,MAAM,CAACJ,IAAI,CAACqC,cAAc,CAAC;IAE3B,MAAMsC,aAAa,GAAG3J,WAAC,CAACwF,cAAc,CAACxF,WAAC,CAACiB,SAAS,CAACoG,cAAc,CAAC,EAAE,CAClErH,WAAC,CAAC6C,cAAc,EAAE,CACnB,CAAC;IAEF,IAAImE,cAAc,EAAE;MAClB,MAAMlF,KAAK,GAAGkF,cAAc,CAACjG,GAAG,CAAC,OAAO,CAAC;MACzC,MAAMU,IAAoB,GAAG,CAACkI,aAAa,CAAC;MAE5C,IAAI7H,KAAK,CAACpC,IAAI,EAAE;QACd+B,IAAI,CAACuD,IAAI,CAAClD,KAAK,CAACpC,IAAI,CAAC;MACvB;MAEAoC,KAAK,CAACd,WAAW,CAAChB,WAAC,CAAC2B,kBAAkB,CAACF,IAAI,CAAC,CAAC;IAC/C,CAAC,MAAM,IAAIwF,eAAe,EAAE;MAC1B,IAAIzH,IAAI,CAACE,IAAI,CAAC8B,UAAU,EAAE;QACxBhC,IAAI,CAACF,QAAQ,CAAC;UACZsK,cAAc,EAAE;YACdC,IAAI,CAACrK,IAAI,EAAE;cACT,IAAI,CAACA,IAAI,CAACuB,GAAG,CAAC,QAAQ,CAAC,CAAC+I,OAAO,EAAE,EAAE;cAEnCtK,IAAI,CAACwB,WAAW,CACdhB,WAAC,CAACwF,cAAc,CAACxF,WAAC,CAACiB,SAAS,CAACoG,cAAc,CAAC,EAAE,CAAC7H,IAAI,CAACE,IAAI,CAAC,CAAC,CAC3D;cAEDF,IAAI,CAACuK,IAAI,EAAE;YACb;UACF;QACF,CAAC,CAAC;MACJ,CAAC,MAAM;QACL9C,eAAe,CAACvH,IAAI,CAAC+B,IAAI,CAACA,IAAI,CAAC1C,OAAO,CACpCiB,WAAC,CAAC+C,mBAAmB,CAAC4G,aAAa,CAAC,CACrC;MACH;IACF,CAAC,MAAM;MACL,MAAMlI,IAAmB,GAAG,CAACzB,WAAC,CAAC+C,mBAAmB,CAAC4G,aAAa,CAAC,CAAC;MAElE,IAAInK,IAAI,CAACE,IAAI,CAAC8B,UAAU,EAAE;QACxBC,IAAI,CAAC1C,OAAO,CACViB,WAAC,CAAC+C,mBAAmB,CACnB/C,WAAC,CAACwF,cAAc,CAACxF,WAAC,CAACgK,KAAK,EAAE,EAAE,CAC1BhK,WAAC,CAACiK,aAAa,CAACjK,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,CAACkK,WAAW,CAAClK,WAAC,CAACE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EACrCF,WAAC,CAAC0C,cAAc,CAACjB,IAAI,CAAC,CACvB,CACF;IACH;EACF;EAEA,IAAI0F,kBAAkB,EAAE;IACtBG,eAAe,GAAGI,WAAW,CAACtG,6BAA6B,CAAC,YAAY,CAAC;IACzEgE,MAAM,CAACJ,IAAI,CAACsC,eAAe,CAAC;EAC9B;EAEA,IAAIF,uBAAuB,CAAC+C,IAAI,GAAG,CAAC,EAAE;IACpC3K,IAAI,CAACF,QAAQ,CAAC;MACZC,WAAW,CAACC,IAAI,EAAE;QAChB,IAAI,CAAC4H,uBAAuB,CAACrH,GAAG,CAACP,IAAI,CAACE,IAAI,CAACd,EAAE,CAACe,IAAI,CAAC,EAAE;QAErD,MAAM0B,UAAU,GAAG7B,IAAI,CAAC6B,UAAU;QAClC,MAAM+I,gBAAgB,GAAG/I,UAAU,CAACA,UAAU;QAE9C;QAEG+I,gBAAgB,CAAC1K,IAAI,CAACY,IAAI,KAAK,sBAAsB,IACpD8J,gBAAgB,CAAC1K,IAAI,CAAC2K,IAAI,KAAKhJ,UAAU,CAAC3B,IAAI;QAEhD0K,gBAAgB,CAAC1K,IAAI,CAACY,IAAI,KAAK,kBAAkB;QAEjD8J,gBAAgB,CAAC1K,IAAI,CAACY,IAAI,KAAK,aAAa;QAE5C8J,gBAAgB,CAAC1K,IAAI,CAACY,IAAI,KAAK,cAAc;QAE5C8J,gBAAgB,CAAC1K,IAAI,CAACY,IAAI,KAAK,gBAAgB,IAC9C8J,gBAAgB,CAAC1K,IAAI,CAACoC,KAAK,KAAKT,UAAU,CAAC3B,IAAI,IAC/C0K,gBAAgB,CAAC/I,UAAU,CAACf,IAAI,KAAK,eAAgB;QAEtD8J,gBAAgB,CAAC1K,IAAI,CAACY,IAAI,KAAK,gBAAgB,IAC9C8J,gBAAgB,CAAC1K,IAAI,CAAC2K,IAAI,KAAKhJ,UAAU,CAAC3B,IAAK,EACjD;UACA,MAAMF,IAAI,CAAC8K,mBAAmB,CAC3B,sDAAqD9K,IAAI,CAACE,IAAI,CAACd,EAAE,CAACe,IAAK,mCAAkC,CAC3G;QACH;MACF;IACF,CAAC,CAAC;EACJ;EAEA,IAAI4K,iBAAiB,GAAG,KAAK;EAC7B,MAAMC,aAAa,GACjBjD,cAAc,IAAIvH,WAAC,CAACwF,cAAc,CAACxF,WAAC,CAACiB,SAAS,CAACsG,cAAc,CAAC,EAAE,EAAE,CAAC;EAErE,MAAMkD,aAAa,GAAGjL,IAAI,CAACE,IAAI;EAE/B,IAAI8G,eAAe,EAAE;IACnBpB,MAAM,CAACJ,IAAI,CAACwC,UAAU,EAAED,cAAc,CAAC;IACvC,MAAMmD,OAIH,GAAG,EAAE;IACR,IAAIC,YAA6B,GAAG,EAAE;IACtCnL,IAAI,CAACuB,GAAG,CAAC,WAAW,CAAC,CAAC6J,OAAO,CAACxI,OAAO,IAAI;MAGvC,IAAIA,OAAO,CAACyI,aAAa,EAAE,EAAE;QAC3BF,YAAY,CAAC3F,IAAI,CAAC5C,OAAO,CAAC1C,IAAI,CAAC;QAC/B0C,OAAO,CAACiH,MAAM,EAAE;QAChB;MACF;MAEA,MAAMyB,UAAU,GACd1I,OAAO,CAAC2I,eAAe,EAAE,IAAI3I,OAAO,CAAC4I,sBAAsB,EAAE;MAE/D,IACE,CAACF,UAAU,IAAI1I,OAAO,CAAC6I,oBAAoB,EAAE,KAC7C7I,OAAO,CAAC1C,IAAI,CAAC8C,MAAM,EACnB;QACA,IAAIsI,UAAU,IAAIH,YAAY,CAAC7L,MAAM,GAAG,CAAC,EAAE;UACzC,MAAMoM,SAAyB,GAAGP,YAAY,CAACnG,GAAG,CAACuB,iBAAiB,CAAC;UACrE,IAAI3D,OAAO,CAAC1C,IAAI,CAACoC,KAAK,EAAEoJ,SAAS,CAAClG,IAAI,CAAC5C,OAAO,CAAC1C,IAAI,CAACoC,KAAK,CAAC;UAC1DM,OAAO,CAAC1C,IAAI,CAACoC,KAAK,GAAGmE,uBAAuB,CAACiF,SAAS,CAAC;UACvDP,YAAY,GAAG,EAAE;QACnB;QAEAvI,OAAO,CAAC1C,IAAI,CAAC8C,MAAM,GAAG,KAAK;QAC3BkI,OAAO,CAAC1F,IAAI,CAAC5C,OAAO,CAAC1C,IAAI,CAAC;QAC1B0C,OAAO,CAACiH,MAAM,EAAE;MAClB;IACF,CAAC,CAAC;IAEF,IAAIqB,OAAO,CAAC5L,MAAM,GAAG,CAAC,IAAI6L,YAAY,CAAC7L,MAAM,GAAG,CAAC,EAAE;MACjD,MAAMqM,YAAY,GAAGC,cAAQ,CAACxD,UAAU,CAACyD,GAAI;AACnD,wBAAwBhF,KAAK,CAACiF,SAAS,CAAC,UAAU,CAAE;AACpD,OAA4B;MACtBH,YAAY,CAAC1J,IAAI,CAACA,IAAI,GAAG,CACvBzB,WAAC,CAACuL,WAAW,CAAC,CACZvL,WAAC,CAACwL,WAAW,CAACf,aAAa,EAAE,IAAI,CAAC;MAGhCzK,WAAC,CAAC+C,mBAAmB,CAAC0H,aAAa,CAAsB,CAC5D,CAAC,EACF,GAAGC,OAAO,CACX;MAED,MAAMe,eAA+B,GAAG,EAAE;MAE1C,MAAMC,OAAO,GAAG1L,WAAC,CAAC2L,aAAa,CAACR,YAAY,EAAE,EAAE,CAAC;MAEjD,IAAIR,YAAY,CAAC7L,MAAM,GAAG,CAAC,EAAE;QAC3B2M,eAAe,CAACzG,IAAI,CAAC,GAAG2F,YAAY,CAACnG,GAAG,CAACuB,iBAAiB,CAAC,CAAC;MAC9D;MACA,IAAIyE,aAAa,EAAE;QACjBD,iBAAiB,GAAG,IAAI;QACxBkB,eAAe,CAACzG,IAAI,CAACwF,aAAa,CAAC;MACrC;MACA,IAAIiB,eAAe,CAAC3M,MAAM,GAAG,CAAC,EAAE;QAC9B2M,eAAe,CAAC1M,OAAO,CACrBiB,WAAC,CAACwF,cAAc,CAACxF,WAAC,CAACgK,KAAK,EAAE,EAAE,CAAChK,WAAC,CAACiB,SAAS,CAACuG,UAAU,CAAC,CAAC,CAAC,CACvD;QAED2D,YAAY,CAAC1J,IAAI,CAACA,IAAI,CAACuD,IAAI,CACzBhF,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,CAAC8J,eAAe,CAAC,CAAC,CAC7D,CAAC,CACH,CACF;MACH,CAAC,MAAM;QACLC,OAAO,CAACE,SAAS,CAAC5G,IAAI,CAAChF,WAAC,CAACiB,SAAS,CAACuG,UAAU,CAAC,CAAC;MACjD;MAEAhI,IAAI,CAACwB,WAAW,CAAC0K,OAAO,CAAC;IAC3B;EACF;EACA,IAAI,CAACnB,iBAAiB,IAAIC,aAAa,EAAE;IACvChL,IAAI,CAACE,IAAI,CAAC+B,IAAI,CAACA,IAAI,CAACuD,IAAI,CACtBhF,WAAC,CAACuL,WAAW,CAAC,CAACvL,WAAC,CAAC+C,mBAAmB,CAACyH,aAAa,CAAC,CAAC,CAAC,CACtD;EACH;EAEAC,aAAa,CAAChJ,IAAI,CAACA,IAAI,CAAC1C,OAAO,CAC7BiB,WAAC,CAACuL,WAAW,CACX,CACEvL,WAAC,CAAC+C,mBAAmB,CACnB/C,WAAC,CAACgD,oBAAoB,CACpB,GAAG,EACHhD,WAAC,CAAC6L,YAAY,CAACzG,MAAM,CAAC,EACtBpF,WAAC,CAACwF,cAAc,CACda,KAAK,CAACiF,SAAS,CACb/E,OAAO,KAAK,SAAS,GAAG,WAAW,GAAG,eAAe,CACtD,EACD,CAACvG,WAAC,CAAC6C,cAAc,EAAE,EAAE4G,kBAAkB,EAAEC,gBAAgB,CAAC,CAC3D,CACF,CACF,EACDvC,kBAAkB,IAChBnH,WAAC,CAAC+C,mBAAmB,CACnB/C,WAAC,CAACwF,cAAc,CAACxF,WAAC,CAACiB,SAAS,CAACqG,eAAe,CAAC,EAAE,CAC7CtH,WAAC,CAAC6C,cAAc,EAAE,CACnB,CAAC,CACH,CACJ,CAACuB,MAAM,CAAC0H,OAAO,CAAC,CAClB,CACF;;EAIDtM,IAAI,CAACoB,YAAY,CAAC6G,WAAW,CAACjD,GAAG,CAACuH,IAAI,IAAI/L,WAAC,CAAC+C,mBAAmB,CAACgJ,IAAI,CAAC,CAAC,CAAC;;EAGvEvM,IAAI,CAACgB,KAAK,CAACwL,KAAK,EAAE;EAElB,OAAOxM,IAAI;AACb;AAEe,kBACb;EAAEyM,aAAa;EAAEC;AAAsB,CAAC,EACxC;EAAEC;AAAe,CAAC,EAClB5F,OAA8B,EAChB;EAAA;EACd0F,aAAa,CAAC1F,OAAO,KAAK,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;EAE5D,MAAM6F,OAAO,GAAG,IAAIC,OAAO,EAAY;EACvC,MAAM/F,aAAa,kBAAG4F,UAAU,CAAC,eAAe,CAAC,0BAAIC,KAAK;EAE1D,OAAO;IACLxM,IAAI,EAAE,qBAAqB;IAC3B2M,QAAQ,EAAEC,+BAAgB;IAE1BC,OAAO,EAAE;MACP,iDAAiD,CAC/ChN,IAAqE,EACrE;QAAA;QACA,MAAM;UAAEiN;QAAY,CAAC,GAAGjN,IAAI,CAACE,IAAI;QACjC,IACE,CAAA+M,WAAW,oBAAXA,WAAW,CAAEnM,IAAI,MAAK,kBAAkB;QAGxC,0BAAAmM,WAAW,CAAC/H,UAAU,qBAAtB,sBAAwB5F,MAAM,IAAG,CAAC,EAClC;UACA,IAAA4N,qCAAsB,EAAClN,IAAI,CAAC;QAC9B;MACF,CAAC;MAEDmN,KAAK,CAACnN,IAAI,EAAE6G,KAAK,EAAE;QACjB,IAAI+F,OAAO,CAACrM,GAAG,CAACP,IAAI,CAAC,EAAE;QAEvB,MAAMkC,OAAO,GAAG0E,cAAc,CAAC5G,IAAI,EAAE6G,KAAK,EAAEC,aAAa,EAAEC,OAAO,CAAC;QACnE,IAAI7E,OAAO,EAAE0K,OAAO,CAAC3M,GAAG,CAACiC,OAAO,CAAC;MACnC;IACF;EACF,CAAC;AACH"}
|
|
@@ -4,13 +4,11 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
|
|
8
7
|
var _core = require("@babel/core");
|
|
9
8
|
|
|
10
9
|
const buildClassDecorator = _core.template.statement(`
|
|
11
10
|
DECORATOR(CLASS_REF = INNER) || CLASS_REF;
|
|
12
11
|
`);
|
|
13
|
-
|
|
14
12
|
const buildClassPrototype = (0, _core.template)(`
|
|
15
13
|
CLASS_REF.prototype;
|
|
16
14
|
`);
|
|
@@ -53,20 +51,18 @@ function applyClassDecorators(classPath) {
|
|
|
53
51
|
}).expression;
|
|
54
52
|
}, classPath.node);
|
|
55
53
|
}
|
|
56
|
-
|
|
57
54
|
function hasClassDecorators(classNode) {
|
|
58
55
|
return !!(classNode.decorators && classNode.decorators.length);
|
|
59
56
|
}
|
|
60
57
|
|
|
61
58
|
function applyMethodDecorators(path, state) {
|
|
62
59
|
if (!hasMethodDecorators(path.node.body.body)) return;
|
|
63
|
-
return applyTargetDecorators(path, state,
|
|
60
|
+
return applyTargetDecorators(path, state,
|
|
61
|
+
path.node.body.body);
|
|
64
62
|
}
|
|
65
|
-
|
|
66
63
|
function hasMethodDecorators(body) {
|
|
67
64
|
return body.some(node => {
|
|
68
65
|
var _node$decorators;
|
|
69
|
-
|
|
70
66
|
return (_node$decorators = node.decorators) == null ? void 0 : _node$decorators.length;
|
|
71
67
|
});
|
|
72
68
|
}
|
|
@@ -80,23 +76,20 @@ function applyTargetDecorators(path, state, decoratedProps) {
|
|
|
80
76
|
const name = path.scope.generateDeclaredUidIdentifier(path.isClass() ? "class" : "obj");
|
|
81
77
|
const exprs = decoratedProps.reduce(function (acc, node) {
|
|
82
78
|
let decorators = [];
|
|
83
|
-
|
|
84
79
|
if (node.decorators != null) {
|
|
85
80
|
decorators = node.decorators;
|
|
86
81
|
node.decorators = null;
|
|
87
82
|
}
|
|
88
|
-
|
|
89
83
|
if (decorators.length === 0) return acc;
|
|
90
|
-
|
|
91
|
-
|
|
84
|
+
if (
|
|
85
|
+
node.computed) {
|
|
92
86
|
throw path.buildCodeFrameError("Computed method/property decorators are not yet supported.");
|
|
93
87
|
}
|
|
94
|
-
|
|
95
|
-
|
|
88
|
+
const property = _core.types.isLiteral(node.key) ? node.key : _core.types.stringLiteral(
|
|
89
|
+
node.key.name);
|
|
96
90
|
const target = path.isClass() && !node.static ? buildClassPrototype({
|
|
97
91
|
CLASS_REF: name
|
|
98
92
|
}).expression : name;
|
|
99
|
-
|
|
100
93
|
if (_core.types.isClassProperty(node, {
|
|
101
94
|
static: false
|
|
102
95
|
})) {
|
|
@@ -117,12 +110,10 @@ function applyTargetDecorators(path, state, decoratedProps) {
|
|
|
117
110
|
PROPERTY: _core.types.cloneNode(property)
|
|
118
111
|
}).expression, _core.types.cloneNode(target)]));
|
|
119
112
|
}
|
|
120
|
-
|
|
121
113
|
return acc;
|
|
122
114
|
}, []);
|
|
123
115
|
return _core.types.sequenceExpression([_core.types.assignmentExpression("=", _core.types.cloneNode(name), path.node), _core.types.sequenceExpression(exprs), _core.types.cloneNode(name)]);
|
|
124
116
|
}
|
|
125
|
-
|
|
126
117
|
function decoratedClassToExpression({
|
|
127
118
|
node,
|
|
128
119
|
scope
|
|
@@ -130,54 +121,51 @@ function decoratedClassToExpression({
|
|
|
130
121
|
if (!hasClassDecorators(node) && !hasMethodDecorators(node.body.body)) {
|
|
131
122
|
return;
|
|
132
123
|
}
|
|
133
|
-
|
|
134
124
|
const ref = node.id ? _core.types.cloneNode(node.id) : scope.generateUidIdentifier("class");
|
|
135
125
|
return _core.types.variableDeclaration("let", [_core.types.variableDeclarator(ref, _core.types.toExpression(node))]);
|
|
136
126
|
}
|
|
137
|
-
|
|
138
127
|
const visitor = {
|
|
139
128
|
ExportDefaultDeclaration(path) {
|
|
140
129
|
const decl = path.get("declaration");
|
|
141
130
|
if (!decl.isClassDeclaration()) return;
|
|
142
131
|
const replacement = decoratedClassToExpression(decl);
|
|
143
|
-
|
|
144
132
|
if (replacement) {
|
|
145
|
-
const [varDeclPath] = path.replaceWithMultiple([replacement, _core.types.exportNamedDeclaration(null, [_core.types.exportSpecifier(
|
|
146
|
-
|
|
133
|
+
const [varDeclPath] = path.replaceWithMultiple([replacement, _core.types.exportNamedDeclaration(null, [_core.types.exportSpecifier(
|
|
134
|
+
_core.types.cloneNode(replacement.declarations[0].id), _core.types.identifier("default"))])]);
|
|
147
135
|
if (!decl.node.id) {
|
|
148
136
|
path.scope.registerDeclaration(varDeclPath);
|
|
149
137
|
}
|
|
150
138
|
}
|
|
151
139
|
},
|
|
152
|
-
|
|
153
140
|
ClassDeclaration(path) {
|
|
154
141
|
const replacement = decoratedClassToExpression(path);
|
|
155
|
-
|
|
156
142
|
if (replacement) {
|
|
157
143
|
const [newPath] = path.replaceWith(replacement);
|
|
158
144
|
const decl = newPath.get("declarations.0");
|
|
159
145
|
const id = decl.node.id;
|
|
146
|
+
|
|
160
147
|
const binding = path.scope.getOwnBinding(id.name);
|
|
161
148
|
binding.identifier = id;
|
|
162
149
|
binding.path = decl;
|
|
163
150
|
}
|
|
164
151
|
},
|
|
165
|
-
|
|
166
152
|
ClassExpression(path, state) {
|
|
167
153
|
const decoratedClass = applyEnsureOrdering(path) || applyClassDecorators(path) || applyMethodDecorators(path, state);
|
|
168
154
|
if (decoratedClass) path.replaceWith(decoratedClass);
|
|
169
155
|
},
|
|
170
|
-
|
|
171
156
|
ObjectExpression(path, state) {
|
|
172
157
|
const decoratedObject = applyEnsureOrdering(path) || applyObjectDecorators(path, state);
|
|
173
158
|
if (decoratedObject) path.replaceWith(decoratedObject);
|
|
174
159
|
},
|
|
175
|
-
|
|
176
160
|
AssignmentExpression(path, state) {
|
|
177
161
|
if (!WARNING_CALLS.has(path.node.right)) return;
|
|
178
|
-
path.replaceWith(_core.types.callExpression(state.addHelper("initializerDefineProperty"), [
|
|
162
|
+
path.replaceWith(_core.types.callExpression(state.addHelper("initializerDefineProperty"), [
|
|
163
|
+
_core.types.cloneNode(path.get("left.object").node), _core.types.stringLiteral(
|
|
164
|
+
path.get("left.property").node.name ||
|
|
165
|
+
path.get("left.property").node.value),
|
|
166
|
+
_core.types.cloneNode(path.get("right.arguments")[0].node),
|
|
167
|
+
_core.types.cloneNode(path.get("right.arguments")[1].node)]));
|
|
179
168
|
},
|
|
180
|
-
|
|
181
169
|
CallExpression(path, state) {
|
|
182
170
|
if (path.node.arguments.length !== 3) return;
|
|
183
171
|
if (!WARNING_CALLS.has(path.node.arguments[2])) return;
|
|
@@ -185,10 +173,10 @@ const visitor = {
|
|
|
185
173
|
if (path.node.callee.name !== state.addHelper("defineProperty").name) {
|
|
186
174
|
return;
|
|
187
175
|
}
|
|
188
|
-
|
|
189
|
-
|
|
176
|
+
path.replaceWith(_core.types.callExpression(state.addHelper("initializerDefineProperty"), [_core.types.cloneNode(path.get("arguments")[0].node), _core.types.cloneNode(path.get("arguments")[1].node),
|
|
177
|
+
_core.types.cloneNode(path.get("arguments.2.arguments")[0].node),
|
|
178
|
+
_core.types.cloneNode(path.get("arguments.2.arguments")[1].node)]));
|
|
190
179
|
}
|
|
191
|
-
|
|
192
180
|
};
|
|
193
181
|
var _default = visitor;
|
|
194
182
|
exports.default = _default;
|
|
@@ -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":["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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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@babel/plugin-proposal-decorators",
|
|
3
|
-
"version": "7.20.
|
|
3
|
+
"version": "7.20.5",
|
|
4
4
|
"author": "The Babel Team (https://babel.dev/team)",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"publishConfig": {
|
|
@@ -20,8 +20,8 @@
|
|
|
20
20
|
"decorators"
|
|
21
21
|
],
|
|
22
22
|
"dependencies": {
|
|
23
|
-
"@babel/helper-create-class-features-plugin": "^7.
|
|
24
|
-
"@babel/helper-plugin-utils": "^7.
|
|
23
|
+
"@babel/helper-create-class-features-plugin": "^7.20.5",
|
|
24
|
+
"@babel/helper-plugin-utils": "^7.20.2",
|
|
25
25
|
"@babel/helper-replace-supers": "^7.19.1",
|
|
26
26
|
"@babel/helper-split-export-declaration": "^7.18.6",
|
|
27
27
|
"@babel/plugin-syntax-decorators": "^7.19.0"
|
|
@@ -30,9 +30,9 @@
|
|
|
30
30
|
"@babel/core": "^7.0.0-0"
|
|
31
31
|
},
|
|
32
32
|
"devDependencies": {
|
|
33
|
-
"@babel/core": "^7.
|
|
33
|
+
"@babel/core": "^7.20.5",
|
|
34
34
|
"@babel/helper-plugin-test-runner": "^7.18.6",
|
|
35
|
-
"@babel/traverse": "^7.20.
|
|
35
|
+
"@babel/traverse": "^7.20.5",
|
|
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",
|