@babel/plugin-proposal-decorators 7.23.5 → 7.23.6

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.
@@ -8,6 +8,7 @@ var _core = require("@babel/core");
8
8
  var _pluginSyntaxDecorators = require("@babel/plugin-syntax-decorators");
9
9
  var _helperReplaceSupers = require("@babel/helper-replace-supers");
10
10
  var _helperSplitExportDeclaration = require("@babel/helper-split-export-declaration");
11
+ var _helperSkipTransparentExpressionWrappers = require("@babel/helper-skip-transparent-expression-wrappers");
11
12
  function incrementId(id, idx = id.length - 1) {
12
13
  if (idx === -1) {
13
14
  id.unshift(65);
@@ -49,36 +50,32 @@ function createLazyPrivateUidGeneratorForClass(classPath) {
49
50
  return generator();
50
51
  };
51
52
  }
52
- function replaceClassWithVar(path) {
53
+ function replaceClassWithVar(path, className) {
53
54
  if (path.type === "ClassDeclaration") {
54
- const varId = path.scope.generateUidIdentifierBasedOnNode(path.node.id);
55
- const classId = _core.types.identifier(path.node.id.name);
56
- path.scope.rename(classId.name, varId.name);
55
+ const id = path.node.id;
56
+ const className = id.name;
57
+ const varId = path.scope.generateUidIdentifierBasedOnNode(id);
58
+ const classId = _core.types.identifier(className);
59
+ path.scope.rename(className, varId.name);
57
60
  path.get("id").replaceWith(classId);
58
61
  return {
59
62
  id: _core.types.cloneNode(varId),
60
- path,
61
- needsDeclaration: true
63
+ path
62
64
  };
63
65
  } else {
64
- let className;
65
66
  let varId;
66
67
  if (path.node.id) {
67
68
  className = path.node.id.name;
68
69
  varId = path.scope.parent.generateDeclaredUidIdentifier(className);
69
70
  path.scope.rename(className, varId.name);
70
- } else if (path.parentPath.node.type === "VariableDeclarator" && path.parentPath.node.id.type === "Identifier") {
71
- className = path.parentPath.node.id.name;
72
- varId = path.scope.parent.generateDeclaredUidIdentifier(className);
73
71
  } else {
74
- varId = path.scope.parent.generateDeclaredUidIdentifier("decorated_class");
72
+ varId = path.scope.parent.generateDeclaredUidIdentifier(typeof className === "string" ? className : "decorated_class");
75
73
  }
76
- const newClassExpr = _core.types.classExpression(className && _core.types.identifier(className), path.node.superClass, path.node.body);
74
+ const newClassExpr = _core.types.classExpression(typeof className === "string" ? _core.types.identifier(className) : null, path.node.superClass, path.node.body);
77
75
  const [newPath] = path.replaceWith(_core.types.sequenceExpression([newClassExpr, varId]));
78
76
  return {
79
77
  id: _core.types.cloneNode(varId),
80
- path: newPath.get("expressions.0"),
81
- needsDeclaration: false
78
+ path: newPath.get("expressions.0")
82
79
  };
83
80
  }
84
81
  }
@@ -234,18 +231,43 @@ function maybeSequenceExpression(exprs) {
234
231
  if (exprs.length === 1) return exprs[0];
235
232
  return _core.types.sequenceExpression(exprs);
236
233
  }
237
- function transformClass(path, state, constantSuper, version) {
234
+ function createSetFunctionNameCall(state, className) {
235
+ return _core.types.callExpression(state.addHelper("setFunctionName"), [_core.types.thisExpression(), className]);
236
+ }
237
+ function createToPropertyKeyCall(state, propertyKey) {
238
+ return _core.types.callExpression(state.addHelper("toPropertyKey"), [propertyKey]);
239
+ }
240
+ function transformClass(path, state, constantSuper, version, className, propertyVisitor) {
238
241
  const body = path.get("body.body");
239
242
  const classDecorators = path.node.decorators;
240
243
  let hasElementDecorators = false;
241
244
  const generateClassPrivateUid = createLazyPrivateUidGeneratorForClass(path);
245
+ const assignments = [];
246
+ const scopeParent = path.scope.parent;
247
+ const memoiseExpression = (expression, hint) => {
248
+ const localEvaluatedId = scopeParent.generateDeclaredUidIdentifier(hint);
249
+ assignments.push(_core.types.assignmentExpression("=", localEvaluatedId, expression));
250
+ return _core.types.cloneNode(localEvaluatedId);
251
+ };
242
252
  for (const element of body) {
243
253
  if (!isClassDecoratableElementPath(element)) {
244
254
  continue;
245
255
  }
246
256
  if (element.node.decorators && element.node.decorators.length > 0) {
257
+ switch (element.node.type) {
258
+ case "ClassProperty":
259
+ propertyVisitor.ClassProperty(element, state);
260
+ break;
261
+ case "ClassPrivateProperty":
262
+ propertyVisitor.ClassPrivateProperty(element, state);
263
+ break;
264
+ case "ClassAccessorProperty":
265
+ propertyVisitor.ClassAccessorProperty(element, state);
266
+ break;
267
+ }
247
268
  hasElementDecorators = true;
248
269
  } else if (element.node.type === "ClassAccessorProperty") {
270
+ propertyVisitor.ClassAccessorProperty(element, state);
249
271
  const {
250
272
  key,
251
273
  value,
@@ -253,13 +275,19 @@ function transformClass(path, state, constantSuper, version) {
253
275
  computed
254
276
  } = element.node;
255
277
  const newId = generateClassPrivateUid();
256
- const valueNode = value ? _core.types.cloneNode(value) : undefined;
257
- const newField = generateClassProperty(newId, valueNode, isStatic);
278
+ const newField = generateClassProperty(newId, value, isStatic);
279
+ const keyPath = element.get("key");
258
280
  const [newPath] = element.replaceWith(newField);
259
- addProxyAccessorsFor(path.node.id, newPath, key, newId, version, computed);
281
+ addProxyAccessorsFor(path.node.id, newPath, computed && !keyPath.isConstantExpression() ? memoiseExpression(createToPropertyKeyCall(state, key), "computedKey") : key, newId, version, computed);
260
282
  }
261
283
  }
262
- if (!classDecorators && !hasElementDecorators) return;
284
+ if (!classDecorators && !hasElementDecorators) {
285
+ if (assignments.length > 0) {
286
+ path.insertBefore(assignments.map(expr => _core.types.expressionStatement(expr)));
287
+ path.scope.crawl();
288
+ }
289
+ return;
290
+ }
263
291
  const elementDecoratorInfo = [];
264
292
  let firstFieldPath;
265
293
  let constructorPath;
@@ -267,13 +295,6 @@ function transformClass(path, state, constantSuper, version) {
267
295
  let requiresStaticInit = false;
268
296
  const decoratedPrivateMethods = new Set();
269
297
  let protoInitLocal, staticInitLocal, classInitLocal, classIdLocal;
270
- const assignments = [];
271
- const scopeParent = path.scope.parent;
272
- const memoiseExpression = (expression, hint) => {
273
- const localEvaluatedId = scopeParent.generateDeclaredUidIdentifier(hint);
274
- assignments.push(_core.types.assignmentExpression("=", localEvaluatedId, expression));
275
- return _core.types.cloneNode(localEvaluatedId);
276
- };
277
298
  const decoratorsThis = new Map();
278
299
  const maybeExtractDecorator = decorator => {
279
300
  const {
@@ -298,11 +319,11 @@ function transformClass(path, state, constantSuper, version) {
298
319
  let needsDeclaraionForClassBinding = false;
299
320
  if (classDecorators) {
300
321
  classInitLocal = scopeParent.generateDeclaredUidIdentifier("initClass");
322
+ needsDeclaraionForClassBinding = path.isClassDeclaration();
301
323
  ({
302
324
  id: classIdLocal,
303
- path,
304
- needsDeclaration: needsDeclaraionForClassBinding
305
- } = replaceClassWithVar(path));
325
+ path
326
+ } = replaceClassWithVar(path, className));
306
327
  path.node.decorators = null;
307
328
  for (const classDecorator of classDecorators) {
308
329
  maybeExtractDecorator(classDecorator);
@@ -332,8 +353,8 @@ function transformClass(path, state, constantSuper, version) {
332
353
  }
333
354
  const isComputed = "computed" in element.node && element.node.computed === true;
334
355
  if (isComputed) {
335
- if (!scopeParent.isStatic(node.key)) {
336
- node.key = memoiseExpression(node.key, "computedKey");
356
+ if (!element.get("key").isConstantExpression()) {
357
+ node.key = memoiseExpression(createToPropertyKeyCall(state, node.key), "computedKey");
337
358
  }
338
359
  }
339
360
  const kind = getElementKind(element);
@@ -580,7 +601,7 @@ function transformClass(path, state, constantSuper, version) {
580
601
  superClass = id;
581
602
  }
582
603
  }
583
- originalClass.body.body.unshift(_core.types.staticBlock([_core.types.expressionStatement(createLocalsAssignment(elementLocals, classLocals, elementDecorations, _core.types.arrayExpression(classDecorations), _core.types.numericLiteral(classDecorationsFlag), needsInstancePrivateBrandCheck ? lastInstancePrivateName : null, _core.types.cloneNode(superClass), state, version)), requiresStaticInit && _core.types.expressionStatement(_core.types.callExpression(_core.types.cloneNode(staticInitLocal), [_core.types.thisExpression()]))].filter(Boolean)));
604
+ originalClass.body.body.unshift(_core.types.staticBlock([_core.types.expressionStatement(createLocalsAssignment(elementLocals, classLocals, elementDecorations, _core.types.arrayExpression(classDecorations), _core.types.numericLiteral(classDecorationsFlag), needsInstancePrivateBrandCheck ? lastInstancePrivateName : null, typeof className === "object" ? className : undefined, _core.types.cloneNode(superClass), state, version)), requiresStaticInit && _core.types.expressionStatement(_core.types.callExpression(_core.types.cloneNode(staticInitLocal), [_core.types.thisExpression()]))].filter(Boolean)));
584
605
  path.insertBefore(assignments.map(expr => _core.types.expressionStatement(expr)));
585
606
  if (needsDeclaraionForClassBinding) {
586
607
  path.insertBefore(_core.types.variableDeclaration("let", [_core.types.variableDeclarator(_core.types.cloneNode(classIdLocal))]));
@@ -588,9 +609,9 @@ function transformClass(path, state, constantSuper, version) {
588
609
  path.scope.crawl();
589
610
  return path;
590
611
  }
591
- function createLocalsAssignment(elementLocals, classLocals, elementDecorations, classDecorations, classDecorationsFlag, maybePrivateBranName, superClass, state, version) {
612
+ function createLocalsAssignment(elementLocals, classLocals, elementDecorations, classDecorations, classDecorationsFlag, maybePrivateBranName, setClassName, superClass, state, version) {
592
613
  let lhs, rhs;
593
- const args = [_core.types.thisExpression(), elementDecorations, classDecorations];
614
+ const args = [setClassName ? createSetFunctionNameCall(state, setClassName) : _core.types.thisExpression(), elementDecorations, classDecorations];
594
615
  {
595
616
  if (version === "2021-12" || version === "2022-03" && !state.availableHelper("applyDecs2203R")) {
596
617
  const lhs = _core.types.arrayPattern([...elementLocals, ...classLocals]);
@@ -634,6 +655,169 @@ function createLocalsAssignment(elementLocals, classLocals, elementDecorations,
634
655
  }
635
656
  return _core.types.assignmentExpression("=", lhs, rhs);
636
657
  }
658
+ function isProtoKey(node) {
659
+ return node.type === "Identifier" ? node.name === "__proto__" : node.value === "__proto__";
660
+ }
661
+ function isDecorated(node) {
662
+ return node.decorators && node.decorators.length > 0;
663
+ }
664
+ function shouldTransformElement(node) {
665
+ switch (node.type) {
666
+ case "ClassAccessorProperty":
667
+ return true;
668
+ case "ClassMethod":
669
+ case "ClassProperty":
670
+ case "ClassPrivateMethod":
671
+ case "ClassPrivateProperty":
672
+ return isDecorated(node);
673
+ default:
674
+ return false;
675
+ }
676
+ }
677
+ function shouldTransformClass(node) {
678
+ return isDecorated(node) || node.body.body.some(shouldTransformElement);
679
+ }
680
+ function NamedEvaluationVisitoryFactory(isAnonymous, visitor) {
681
+ function handleComputedProperty(propertyPath, key, state) {
682
+ switch (key.type) {
683
+ case "StringLiteral":
684
+ return _core.types.stringLiteral(key.value);
685
+ case "NumericLiteral":
686
+ case "BigIntLiteral":
687
+ {
688
+ const keyValue = key.value + "";
689
+ propertyPath.get("key").replaceWith(_core.types.stringLiteral(keyValue));
690
+ return _core.types.stringLiteral(keyValue);
691
+ }
692
+ default:
693
+ {
694
+ const ref = propertyPath.scope.maybeGenerateMemoised(key);
695
+ propertyPath.get("key").replaceWith(_core.types.assignmentExpression("=", ref, _core.types.callExpression(state.addHelper("toPropertyKey"), [key])));
696
+ return _core.types.cloneNode(ref);
697
+ }
698
+ }
699
+ }
700
+ return {
701
+ VariableDeclarator(path, state) {
702
+ const id = path.node.id;
703
+ if (id.type === "Identifier") {
704
+ const initializer = (0, _helperSkipTransparentExpressionWrappers.skipTransparentExprWrappers)(path.get("init"));
705
+ if (isAnonymous(initializer)) {
706
+ const name = id.name;
707
+ visitor(initializer, state, name);
708
+ }
709
+ }
710
+ },
711
+ AssignmentExpression(path, state) {
712
+ const id = path.node.left;
713
+ if (id.type === "Identifier") {
714
+ const initializer = (0, _helperSkipTransparentExpressionWrappers.skipTransparentExprWrappers)(path.get("right"));
715
+ if (isAnonymous(initializer)) {
716
+ switch (path.node.operator) {
717
+ case "=":
718
+ case "&&=":
719
+ case "||=":
720
+ case "??=":
721
+ visitor(initializer, state, id.name);
722
+ }
723
+ }
724
+ }
725
+ },
726
+ AssignmentPattern(path, state) {
727
+ const id = path.node.left;
728
+ if (id.type === "Identifier") {
729
+ const initializer = (0, _helperSkipTransparentExpressionWrappers.skipTransparentExprWrappers)(path.get("right"));
730
+ if (isAnonymous(initializer)) {
731
+ const name = id.name;
732
+ visitor(initializer, state, name);
733
+ }
734
+ }
735
+ },
736
+ ObjectExpression(path, state) {
737
+ for (const propertyPath of path.get("properties")) {
738
+ const {
739
+ node
740
+ } = propertyPath;
741
+ if (node.type !== "ObjectProperty") continue;
742
+ const id = node.key;
743
+ const initializer = (0, _helperSkipTransparentExpressionWrappers.skipTransparentExprWrappers)(propertyPath.get("value"));
744
+ if (isAnonymous(initializer)) {
745
+ if (!node.computed) {
746
+ if (!isProtoKey(id)) {
747
+ if (id.type === "Identifier") {
748
+ visitor(initializer, state, id.name);
749
+ } else {
750
+ const className = _core.types.stringLiteral(id.value + "");
751
+ visitor(initializer, state, className);
752
+ }
753
+ }
754
+ } else {
755
+ const ref = handleComputedProperty(propertyPath, id, state);
756
+ visitor(initializer, state, ref);
757
+ }
758
+ }
759
+ }
760
+ },
761
+ ClassPrivateProperty(path, state) {
762
+ const {
763
+ node
764
+ } = path;
765
+ const initializer = (0, _helperSkipTransparentExpressionWrappers.skipTransparentExprWrappers)(path.get("value"));
766
+ if (isAnonymous(initializer)) {
767
+ const className = _core.types.stringLiteral("#" + node.key.id.name);
768
+ visitor(initializer, state, className);
769
+ }
770
+ },
771
+ ClassAccessorProperty(path, state) {
772
+ const {
773
+ node
774
+ } = path;
775
+ const id = node.key;
776
+ const initializer = (0, _helperSkipTransparentExpressionWrappers.skipTransparentExprWrappers)(path.get("value"));
777
+ if (isAnonymous(initializer)) {
778
+ if (!node.computed) {
779
+ if (id.type === "Identifier") {
780
+ visitor(initializer, state, id.name);
781
+ } else if (id.type === "PrivateName") {
782
+ const className = _core.types.stringLiteral("#" + id.id.name);
783
+ visitor(initializer, state, className);
784
+ } else {
785
+ const className = _core.types.stringLiteral(id.value + "");
786
+ visitor(initializer, state, className);
787
+ }
788
+ } else {
789
+ const ref = handleComputedProperty(path, id, state);
790
+ visitor(initializer, state, ref);
791
+ }
792
+ }
793
+ },
794
+ ClassProperty(path, state) {
795
+ const {
796
+ node
797
+ } = path;
798
+ const id = node.key;
799
+ const initializer = (0, _helperSkipTransparentExpressionWrappers.skipTransparentExprWrappers)(path.get("value"));
800
+ if (isAnonymous(initializer)) {
801
+ if (!node.computed) {
802
+ if (id.type === "Identifier") {
803
+ visitor(initializer, state, id.name);
804
+ } else {
805
+ const className = _core.types.stringLiteral(id.value + "");
806
+ visitor(initializer, state, className);
807
+ }
808
+ } else {
809
+ const ref = handleComputedProperty(path, id, state);
810
+ visitor(initializer, state, ref);
811
+ }
812
+ }
813
+ }
814
+ };
815
+ }
816
+ function isDecoratedAnonymousClassExpression(path) {
817
+ return path.isClassExpression({
818
+ id: null
819
+ }) && shouldTransformClass(path.node);
820
+ }
637
821
  function _default({
638
822
  assertVersion,
639
823
  assumption
@@ -652,25 +836,49 @@ function _default({
652
836
  }
653
837
  const VISITED = new WeakSet();
654
838
  const constantSuper = (_assumption = assumption("constantSuper")) != null ? _assumption : loose;
839
+ const namedEvaluationVisitor = NamedEvaluationVisitoryFactory(isDecoratedAnonymousClassExpression, visitClass);
840
+ function visitClass(path, state, className) {
841
+ var _className, _node$id;
842
+ if (VISITED.has(path)) return;
843
+ const {
844
+ node
845
+ } = path;
846
+ (_className = className) != null ? _className : className = (_node$id = node.id) == null ? void 0 : _node$id.name;
847
+ const newPath = transformClass(path, state, constantSuper, version, className, namedEvaluationVisitor);
848
+ if (newPath) {
849
+ VISITED.add(newPath);
850
+ return;
851
+ }
852
+ VISITED.add(path);
853
+ }
655
854
  return {
656
855
  name: "proposal-decorators",
657
856
  inherits: _pluginSyntaxDecorators.default,
658
- visitor: {
659
- "ExportNamedDeclaration|ExportDefaultDeclaration"(path) {
660
- var _declaration$decorato;
857
+ visitor: Object.assign({
858
+ ExportDefaultDeclaration(path, state) {
859
+ const {
860
+ declaration
861
+ } = path.node;
862
+ if ((declaration == null ? void 0 : declaration.type) === "ClassDeclaration" && isDecorated(declaration)) {
863
+ const isAnonymous = !declaration.id;
864
+ const updatedVarDeclarationPath = (0, _helperSplitExportDeclaration.default)(path);
865
+ if (isAnonymous) {
866
+ visitClass(updatedVarDeclarationPath, state, _core.types.stringLiteral("default"));
867
+ }
868
+ }
869
+ },
870
+ ExportNamedDeclaration(path) {
661
871
  const {
662
872
  declaration
663
873
  } = path.node;
664
- if ((declaration == null ? void 0 : declaration.type) === "ClassDeclaration" && ((_declaration$decorato = declaration.decorators) == null ? void 0 : _declaration$decorato.length) > 0) {
874
+ if ((declaration == null ? void 0 : declaration.type) === "ClassDeclaration" && isDecorated(declaration)) {
665
875
  (0, _helperSplitExportDeclaration.default)(path);
666
876
  }
667
877
  },
668
878
  Class(path, state) {
669
- if (VISITED.has(path)) return;
670
- const newPath = transformClass(path, state, constantSuper, version);
671
- if (newPath) VISITED.add(newPath);
879
+ visitClass(path, state, undefined);
672
880
  }
673
- }
881
+ }, namedEvaluationVisitor)
674
882
  };
675
883
  }
676
884
 
@@ -1 +1 @@
1
- {"version":3,"names":["_core","require","_pluginSyntaxDecorators","_helperReplaceSupers","_helperSplitExportDeclaration","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","get","replaceWith","cloneNode","needsDeclaration","className","parent","generateDeclaredUidIdentifier","parentPath","newClassExpr","classExpression","superClass","body","newPath","sequenceExpression","generateClassProperty","key","value","isStatic","classPrivateProperty","undefined","classProperty","addProxyAccessorsFor","element","originalKey","targetKey","version","isComputed","static","thisArg","thisExpression","getterBody","blockStatement","returnStatement","memberExpression","setterBody","expressionStatement","assignmentExpression","getter","setter","classPrivateMethod","classMethod","insertAfter","extractProxyAccessorsFor","template","expression","ast","FIELD","ACCESSOR","METHOD","GETTER","SETTER","STATIC_OLD_VERSION","STATIC","DECORATORS_HAVE_THIS","getElementKind","kind","isDecoratorInfo","info","filteredOrderedDecoratorInfo","filtered","filter","el","generateDecorationList","decorators","decoratorsThis","decsCount","hasOneThis","some","Boolean","decs","i","push","unaryExpression","numericLiteral","hasThis","generateDecorationExprs","arrayExpression","map","flag","privateMethods","extractElementLocalAssignments","decorationInfo","localIds","locals","Array","isArray","addCallAccessorsFor","getId","setId","callExpression","isNotTsParameter","movePrivateAccessor","methodLocalVar","params","block","isClassDecoratableElementPath","staticBlockToIIFE","arrowFunctionExpression","maybeSequenceExpression","exprs","transformClass","state","constantSuper","classDecorators","hasElementDecorators","generateClassPrivateUid","computed","newId","valueNode","newField","elementDecoratorInfo","firstFieldPath","constructorPath","requiresProtoInit","requiresStaticInit","decoratedPrivateMethods","protoInitLocal","staticInitLocal","classInitLocal","classIdLocal","assignments","scopeParent","memoiseExpression","hint","localEvaluatedId","Map","maybeExtractDecorator","decorator","isMemberExpression","object","isSuper","isThisExpression","set","needsDeclaraionForClassBinding","classDecorator","generateUidIdentifier","lastInstancePrivateName","needsInstancePrivateBrandCheck","hasDecorators","decoratorPath","isPrivate","isClassPrivateProperty","isClassMethod","newFieldInitId","newValue","initId","valuePath","v","replaceSupers","ReplaceSupers","methodPath","objectRef","superRef","file","refToPreserve","replace","async","isAsync","functionExpression","remove","nameExpr","stringLiteral","d","elementDecorations","classDecorationsFlag","classDecorations","dec","elementLocals","protoInitCall","CallExpression","exit","skip","super","spreadElement","restElement","size","parentParentPath","left","buildCodeFrameError","classLocals","classInitInjected","classInitCall","originalClass","statics","staticBlocks","forEach","isStaticBlock","isProperty","isClassProperty","isClassPrivateMethod","allValues","staticsClass","addHelper","staticBlock","toStatement","constructorBody","newExpr","newExpression","arguments","maybeGenerateMemoised","createLocalsAssignment","insertBefore","expr","variableDeclaration","variableDeclarator","crawl","maybePrivateBranName","lhs","rhs","args","availableHelper","arrayPattern","objectPattern","objectProperty","_default","assertVersion","assumption","loose","_assumption","VISITED","WeakSet","inherits","syntaxDecorators","visitor","ExportNamedDeclaration|ExportDefaultDeclaration","_declaration$decorato","declaration","splitExportDeclaration","Class"],"sources":["../src/transformer-2023-05.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.ts\";\n\ntype ClassDecoratableElement =\n | t.ClassMethod\n | t.ClassPrivateMethod\n | t.ClassProperty\n | t.ClassPrivateProperty\n | t.ClassAccessorProperty;\n\ntype ClassElement =\n | ClassDecoratableElement\n | t.TSDeclareMethod\n | t.TSIndexSignature\n | t.StaticBlock;\n\ntype DecoratorVersionKind = \"2023-05\" | \"2023-01\" | \"2022-03\" | \"2021-12\";\n\nfunction incrementId(id: number[], idx = id.length - 1): void {\n // If index is -1, id needs an additional character, unshift A\n if (idx === -1) {\n id.unshift(charCodes.uppercaseA);\n return;\n }\n\n const current = id[idx];\n\n if (current === charCodes.uppercaseZ) {\n // if current is Z, skip to a\n id[idx] = charCodes.lowercaseA;\n } else if (current === charCodes.lowercaseZ) {\n // if current is z, reset to A and carry the 1\n id[idx] = charCodes.uppercaseA;\n incrementId(id, idx - 1);\n } else {\n // else, increment by one\n id[idx] = current + 1;\n }\n}\n\n/**\n * Generates a new private name that is unique to the given class. This can be\n * used to create extra class fields and methods for the implementation, while\n * keeping the length of those names as small as possible. This is important for\n * minification purposes (though private names can generally be minified,\n * transpilations and polyfills cannot yet).\n */\nfunction createPrivateUidGeneratorForClass(\n classPath: NodePath<t.ClassDeclaration | t.ClassExpression>,\n): () => t.PrivateName {\n const currentPrivateId: number[] = [];\n const privateNames = new Set<string>();\n\n classPath.traverse({\n PrivateName(path) {\n privateNames.add(path.node.id.name);\n },\n });\n\n return (): t.PrivateName => {\n let reifiedId;\n do {\n incrementId(currentPrivateId);\n reifiedId = String.fromCharCode(...currentPrivateId);\n } while (privateNames.has(reifiedId));\n\n return t.privateName(t.identifier(reifiedId));\n };\n}\n\n/**\n * Wraps the above generator function so that it's run lazily the first time\n * it's actually required. Several types of decoration do not require this, so it\n * saves iterating the class elements an additional time and allocating the space\n * for the Sets of element names.\n */\nfunction createLazyPrivateUidGeneratorForClass(\n classPath: NodePath<t.ClassDeclaration | t.ClassExpression>,\n): () => t.PrivateName {\n let generator: () => t.PrivateName;\n\n return (): t.PrivateName => {\n if (!generator) {\n generator = createPrivateUidGeneratorForClass(classPath);\n }\n\n return generator();\n };\n}\n\n/**\n * Takes a class definition and replaces it with an equivalent class declaration\n * which is then assigned to a local variable. This allows us to reassign the\n * local variable with the decorated version of the class. The class definition\n * retains its original name so that `toString` is not affected, other\n * references to the class are renamed instead.\n */\nfunction replaceClassWithVar(\n path: NodePath<t.ClassDeclaration | t.ClassExpression>,\n): {\n id: t.Identifier;\n path: NodePath<t.ClassDeclaration | t.ClassExpression>;\n needsDeclaration: boolean;\n} {\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.get(\"id\").replaceWith(classId);\n\n return { id: t.cloneNode(varId), path, needsDeclaration: true };\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 id: t.cloneNode(varId),\n path: newPath.get(\"expressions.0\") as NodePath<t.ClassExpression>,\n needsDeclaration: false,\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 className: t.Identifier,\n element: NodePath<ClassDecoratableElement>,\n originalKey: t.PrivateName | t.Expression,\n targetKey: t.PrivateName,\n version: DecoratorVersionKind,\n isComputed = false,\n): void {\n const { static: isStatic } = element.node;\n\n const thisArg =\n version === \"2023-05\" && isStatic ? className : t.thisExpression();\n\n const getterBody = t.blockStatement([\n t.returnStatement(\n t.memberExpression(t.cloneNode(thisArg), t.cloneNode(targetKey)),\n ),\n ]);\n\n const setterBody = t.blockStatement([\n t.expressionStatement(\n t.assignmentExpression(\n \"=\",\n t.memberExpression(t.cloneNode(thisArg), t.cloneNode(targetKey)),\n t.identifier(\"v\"),\n ),\n ),\n ]);\n\n let getter: t.ClassMethod | t.ClassPrivateMethod,\n setter: t.ClassMethod | t.ClassPrivateMethod;\n\n if (originalKey.type === \"PrivateName\") {\n getter = t.classPrivateMethod(\n \"get\",\n t.cloneNode(originalKey),\n [],\n getterBody,\n isStatic,\n );\n setter = t.classPrivateMethod(\n \"set\",\n t.cloneNode(originalKey),\n [t.identifier(\"v\")],\n setterBody,\n isStatic,\n );\n } else {\n getter = t.classMethod(\n \"get\",\n t.cloneNode(originalKey),\n [],\n getterBody,\n isComputed,\n isStatic,\n );\n setter = t.classMethod(\n \"set\",\n t.cloneNode(originalKey),\n [t.identifier(\"v\")],\n setterBody,\n isComputed,\n isStatic,\n );\n }\n\n element.insertAfter(setter);\n element.insertAfter(getter);\n}\n\nfunction extractProxyAccessorsFor(\n targetKey: t.PrivateName,\n version: DecoratorVersionKind,\n): (t.FunctionExpression | t.ArrowFunctionExpression)[] {\n if (version !== \"2023-05\" && version !== \"2023-01\") {\n return [\n template.expression.ast`\n function () {\n return this.${t.cloneNode(targetKey)};\n }\n ` as t.FunctionExpression,\n template.expression.ast`\n function (value) {\n this.${t.cloneNode(targetKey)} = value;\n }\n ` as t.FunctionExpression,\n ];\n }\n return [\n template.expression.ast`\n o => o.${t.cloneNode(targetKey)}\n ` as t.ArrowFunctionExpression,\n template.expression.ast`\n (o, v) => o.${t.cloneNode(targetKey)} = v\n ` as t.ArrowFunctionExpression,\n ];\n}\n\n// 3 bits reserved to this (0-7)\nconst FIELD = 0;\nconst ACCESSOR = 1;\nconst METHOD = 2;\nconst GETTER = 3;\nconst SETTER = 4;\n\nconst STATIC_OLD_VERSION = 5; // Before 2023-05\nconst STATIC = 8; // 1 << 3\nconst DECORATORS_HAVE_THIS = 16; // 1 << 3\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 decoratorsThis: t.Expression[];\n\n // The kind of the decorated value, matches the kind value passed to applyDecs\n kind: number;\n\n // whether or not the field is static\n isStatic: boolean;\n\n // The name of the decorator\n name: t.StringLiteral | t.Expression;\n\n privateMethods:\n | (t.FunctionExpression | t.ArrowFunctionExpression)[]\n | undefined;\n\n // The names of local variables that will be used/returned from the decoration\n locals: t.Identifier | t.Identifier[] | undefined;\n}\n\n// Information about a computed property key. These must be evaluated\n// interspersed with decorator expressions, which is why they get added to the\n// array of DecoratorInfos later on.\ninterface ComputedPropInfo {\n localComputedNameId: t.Identifier;\n keyNode: t.Expression;\n}\n\nfunction isDecoratorInfo(\n info: DecoratorInfo | ComputedPropInfo,\n): info is DecoratorInfo {\n return \"decorators\" in info;\n}\n\nfunction filteredOrderedDecoratorInfo(\n info: (DecoratorInfo | ComputedPropInfo)[],\n): DecoratorInfo[] {\n const filtered = info.filter(isDecoratorInfo);\n\n return [\n ...filtered.filter(\n el => el.isStatic && el.kind >= ACCESSOR && el.kind <= SETTER,\n ),\n ...filtered.filter(\n el => !el.isStatic && el.kind >= ACCESSOR && el.kind <= SETTER,\n ),\n ...filtered.filter(el => el.isStatic && el.kind === FIELD),\n ...filtered.filter(el => !el.isStatic && el.kind === FIELD),\n ];\n}\n\nfunction generateDecorationList(\n decorators: t.Expression[],\n decoratorsThis: (t.Expression | null)[],\n version: DecoratorVersionKind,\n) {\n const decsCount = decorators.length;\n const hasOneThis = decoratorsThis.some(Boolean);\n const decs: t.Expression[] = [];\n for (let i = 0; i < decsCount; i++) {\n if (version === \"2023-05\" && hasOneThis) {\n decs.push(\n decoratorsThis[i] || t.unaryExpression(\"void\", t.numericLiteral(0)),\n );\n }\n decs.push(decorators[i]);\n }\n\n return { hasThis: hasOneThis, decs };\n}\n\nfunction generateDecorationExprs(\n info: (DecoratorInfo | ComputedPropInfo)[],\n version: DecoratorVersionKind,\n): t.ArrayExpression {\n return t.arrayExpression(\n filteredOrderedDecoratorInfo(info).map(el => {\n const { decs, hasThis } = generateDecorationList(\n el.decorators,\n el.decoratorsThis,\n version,\n );\n\n let flag = el.kind;\n if (el.isStatic) {\n flag += version === \"2023-05\" ? STATIC : STATIC_OLD_VERSION;\n }\n if (hasThis) flag += DECORATORS_HAVE_THIS;\n\n return t.arrayExpression([\n decs.length === 1 ? decs[0] : t.arrayExpression(decs),\n t.numericLiteral(flag),\n el.name,\n ...(el.privateMethods || []),\n ]);\n }),\n );\n}\n\nfunction extractElementLocalAssignments(\n decorationInfo: (DecoratorInfo | ComputedPropInfo)[],\n) {\n const localIds: t.Identifier[] = [];\n\n for (const el of filteredOrderedDecoratorInfo(decorationInfo)) {\n const { locals } = el;\n\n if (Array.isArray(locals)) {\n localIds.push(...locals);\n } else if (locals !== undefined) {\n localIds.push(locals);\n }\n }\n\n return localIds;\n}\n\nfunction addCallAccessorsFor(\n element: NodePath,\n key: t.PrivateName,\n getId: t.Identifier,\n setId: t.Identifier,\n) {\n element.insertAfter(\n t.classPrivateMethod(\n \"get\",\n t.cloneNode(key),\n [],\n t.blockStatement([\n t.returnStatement(\n t.callExpression(t.cloneNode(getId), [t.thisExpression()]),\n ),\n ]),\n ),\n );\n\n element.insertAfter(\n t.classPrivateMethod(\n \"set\",\n t.cloneNode(key),\n [t.identifier(\"v\")],\n t.blockStatement([\n t.expressionStatement(\n t.callExpression(t.cloneNode(setId), [\n t.thisExpression(),\n t.identifier(\"v\"),\n ]),\n ),\n ]),\n ),\n );\n}\n\nfunction isNotTsParameter(\n node: t.Identifier | t.Pattern | t.RestElement | t.TSParameterProperty,\n): node is t.Identifier | t.Pattern | t.RestElement {\n return node.type !== \"TSParameterProperty\";\n}\n\nfunction movePrivateAccessor(\n element: NodePath<t.ClassPrivateMethod>,\n key: t.PrivateName,\n methodLocalVar: t.Identifier,\n isStatic: boolean,\n) {\n let params: (t.Identifier | t.RestElement)[];\n let block: t.Statement[];\n\n if (element.node.kind === \"set\") {\n params = [t.identifier(\"v\")];\n block = [\n t.expressionStatement(\n t.callExpression(methodLocalVar, [\n t.thisExpression(),\n t.identifier(\"v\"),\n ]),\n ),\n ];\n } else {\n params = [];\n block = [\n t.returnStatement(t.callExpression(methodLocalVar, [t.thisExpression()])),\n ];\n }\n\n element.replaceWith(\n t.classPrivateMethod(\n element.node.kind,\n t.cloneNode(key),\n params,\n t.blockStatement(block),\n isStatic,\n ),\n );\n}\n\nfunction isClassDecoratableElementPath(\n path: NodePath<ClassElement>,\n): path is NodePath<ClassDecoratableElement> {\n const { type } = path;\n\n return (\n type !== \"TSDeclareMethod\" &&\n type !== \"TSIndexSignature\" &&\n type !== \"StaticBlock\"\n );\n}\n\nfunction staticBlockToIIFE(block: t.StaticBlock) {\n return t.callExpression(\n t.arrowFunctionExpression([], t.blockStatement(block.body)),\n [],\n );\n}\n\nfunction maybeSequenceExpression(exprs: t.Expression[]) {\n if (exprs.length === 0) return t.unaryExpression(\"void\", t.numericLiteral(0));\n if (exprs.length === 1) return exprs[0];\n return t.sequenceExpression(exprs);\n}\n\nfunction transformClass(\n path: NodePath<t.ClassExpression | t.ClassDeclaration>,\n state: PluginPass,\n constantSuper: boolean,\n version: DecoratorVersionKind,\n): NodePath {\n const body = path.get(\"body.body\");\n\n const classDecorators = path.node.decorators;\n let hasElementDecorators = false;\n\n const generateClassPrivateUid = createLazyPrivateUidGeneratorForClass(path);\n\n // Iterate over the class to see if we need to decorate it, and also to\n // transform simple auto accessors which are not decorated\n for (const element of body) {\n if (!isClassDecoratableElementPath(element)) {\n continue;\n }\n\n if (element.node.decorators && element.node.decorators.length > 0) {\n hasElementDecorators = true;\n } else if (element.node.type === \"ClassAccessorProperty\") {\n const { key, value, static: isStatic, computed } = element.node;\n\n const newId = generateClassPrivateUid();\n\n const valueNode = value ? t.cloneNode(value) : undefined;\n\n const newField = generateClassProperty(newId, valueNode, isStatic);\n\n const [newPath] = element.replaceWith(newField);\n addProxyAccessorsFor(\n path.node.id,\n newPath,\n key,\n newId,\n version,\n computed,\n );\n }\n }\n\n // If nothing is decorated, return\n if (!classDecorators && !hasElementDecorators) return;\n\n const elementDecoratorInfo: (DecoratorInfo | ComputedPropInfo)[] = [];\n\n // The initializer of the first non-static field will be injected with the protoInit call\n let firstFieldPath:\n | NodePath<t.ClassProperty | t.ClassPrivateProperty>\n | undefined;\n let constructorPath: NodePath<t.ClassMethod> | undefined;\n let requiresProtoInit = false;\n let requiresStaticInit = false;\n const decoratedPrivateMethods = new Set<string>();\n\n let protoInitLocal: t.Identifier,\n staticInitLocal: t.Identifier,\n classInitLocal: t.Identifier,\n classIdLocal: t.Identifier;\n const assignments: t.AssignmentExpression[] = [];\n const scopeParent: Scope = path.scope.parent;\n\n const memoiseExpression = (expression: t.Expression, hint: string) => {\n const localEvaluatedId = scopeParent.generateDeclaredUidIdentifier(hint);\n assignments.push(t.assignmentExpression(\"=\", localEvaluatedId, expression));\n return t.cloneNode(localEvaluatedId);\n };\n\n const decoratorsThis = new Map<t.Decorator, t.Expression>();\n const maybeExtractDecorator = (decorator: t.Decorator) => {\n const { expression } = decorator;\n if (version === \"2023-05\" && t.isMemberExpression(expression)) {\n let object;\n if (\n t.isSuper(expression.object) ||\n t.isThisExpression(expression.object)\n ) {\n object = memoiseExpression(t.thisExpression(), \"obj\");\n } else if (!scopeParent.isStatic(expression.object)) {\n object = memoiseExpression(expression.object, \"obj\");\n expression.object = object;\n } else {\n object = expression.object;\n }\n decoratorsThis.set(decorator, t.cloneNode(object));\n }\n if (!scopeParent.isStatic(expression)) {\n decorator.expression = memoiseExpression(expression, \"dec\");\n }\n };\n\n let needsDeclaraionForClassBinding = false;\n if (classDecorators) {\n classInitLocal = scopeParent.generateDeclaredUidIdentifier(\"initClass\");\n\n ({\n id: classIdLocal,\n path,\n needsDeclaration: needsDeclaraionForClassBinding,\n } = replaceClassWithVar(path));\n\n path.node.decorators = null;\n\n for (const classDecorator of classDecorators) {\n maybeExtractDecorator(classDecorator);\n }\n } else {\n if (!path.node.id) {\n path.node.id = path.scope.generateUidIdentifier(\"Class\");\n }\n classIdLocal = t.cloneNode(path.node.id);\n }\n\n let lastInstancePrivateName: t.PrivateName;\n let needsInstancePrivateBrandCheck = false;\n\n if (hasElementDecorators) {\n for (const element of body) {\n if (!isClassDecoratableElementPath(element)) {\n continue;\n }\n\n const { node } = element;\n const decorators = element.get(\"decorators\");\n\n const hasDecorators = Array.isArray(decorators) && decorators.length > 0;\n\n if (hasDecorators) {\n for (const decoratorPath of decorators) {\n maybeExtractDecorator(decoratorPath.node);\n }\n }\n\n const isComputed =\n \"computed\" in element.node && element.node.computed === true;\n if (isComputed) {\n if (!scopeParent.isStatic(node.key)) {\n node.key = memoiseExpression(node.key as t.Expression, \"computedKey\");\n }\n }\n\n const kind = getElementKind(element);\n const { key } = node;\n\n const isPrivate = key.type === \"PrivateName\";\n\n const isStatic = !!element.node.static;\n\n let name = \"computedKey\";\n\n if (isPrivate) {\n name = key.id.name;\n } else if (!isComputed && key.type === \"Identifier\") {\n name = key.name;\n }\n\n if (isPrivate && !isStatic) {\n if (hasDecorators) {\n needsInstancePrivateBrandCheck = true;\n }\n if (t.isClassPrivateProperty(node) || !lastInstancePrivateName) {\n lastInstancePrivateName = key;\n }\n }\n\n if (element.isClassMethod({ kind: \"constructor\" })) {\n constructorPath = element;\n }\n\n if (hasDecorators) {\n let locals: t.Identifier | t.Identifier[];\n let privateMethods: Array<\n t.FunctionExpression | t.ArrowFunctionExpression\n >;\n\n if (kind === ACCESSOR) {\n const { value } = element.node as t.ClassAccessorProperty;\n\n const params: t.Expression[] = [t.thisExpression()];\n\n if (value) {\n params.push(t.cloneNode(value));\n }\n\n const newId = generateClassPrivateUid();\n const newFieldInitId =\n element.scope.parent.generateDeclaredUidIdentifier(`init_${name}`);\n const newValue = t.callExpression(\n t.cloneNode(newFieldInitId),\n params,\n );\n\n const newField = generateClassProperty(newId, newValue, isStatic);\n const [newPath] = element.replaceWith(newField);\n\n if (isPrivate) {\n privateMethods = extractProxyAccessorsFor(newId, version);\n\n const getId = newPath.scope.parent.generateDeclaredUidIdentifier(\n `get_${name}`,\n );\n const setId = newPath.scope.parent.generateDeclaredUidIdentifier(\n `set_${name}`,\n );\n\n addCallAccessorsFor(newPath, key, getId, setId);\n\n locals = [newFieldInitId, getId, setId];\n } else {\n addProxyAccessorsFor(\n path.node.id,\n newPath,\n key,\n newId,\n version,\n isComputed,\n );\n locals = newFieldInitId;\n }\n } else if (kind === FIELD) {\n const initId = element.scope.parent.generateDeclaredUidIdentifier(\n `init_${name}`,\n );\n const valuePath = (\n element as NodePath<t.ClassProperty | t.ClassPrivateProperty>\n ).get(\"value\");\n\n valuePath.replaceWith(\n t.callExpression(\n t.cloneNode(initId),\n [t.thisExpression(), valuePath.node].filter(v => v),\n ),\n );\n\n locals = initId;\n\n if (isPrivate) {\n privateMethods = extractProxyAccessorsFor(key, version);\n }\n } else if (isPrivate) {\n locals = element.scope.parent.generateDeclaredUidIdentifier(\n `call_${name}`,\n );\n\n const replaceSupers = new ReplaceSupers({\n constantSuper,\n methodPath: element as NodePath<t.ClassPrivateMethod>,\n objectRef: classIdLocal,\n superRef: path.node.superClass,\n file: state.file,\n refToPreserve: classIdLocal,\n });\n\n replaceSupers.replace();\n\n const {\n params,\n body,\n async: isAsync,\n } = element.node as t.ClassPrivateMethod;\n\n privateMethods = [\n t.functionExpression(\n undefined,\n params.filter(isNotTsParameter),\n body,\n isAsync,\n ),\n ];\n\n if (kind === GETTER || kind === SETTER) {\n movePrivateAccessor(\n element as NodePath<t.ClassPrivateMethod>,\n t.cloneNode(key),\n t.cloneNode(locals),\n isStatic,\n );\n } else {\n const node = element.node as t.ClassPrivateMethod;\n\n // Unshift\n path.node.body.body.unshift(\n t.classPrivateProperty(key, t.cloneNode(locals), [], node.static),\n );\n\n decoratedPrivateMethods.add(key.id.name);\n\n element.remove();\n }\n }\n\n let nameExpr: t.Expression;\n\n if (isComputed) {\n nameExpr = t.cloneNode(key as t.Expression);\n } else if (key.type === \"PrivateName\") {\n nameExpr = t.stringLiteral(key.id.name);\n } else if (key.type === \"Identifier\") {\n nameExpr = t.stringLiteral(key.name);\n } else {\n nameExpr = t.cloneNode(key as t.Expression);\n }\n\n elementDecoratorInfo.push({\n kind,\n decorators: decorators.map(d => d.node.expression),\n decoratorsThis: decorators.map(d => decoratorsThis.get(d.node)),\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(\n elementDecoratorInfo,\n version,\n );\n let classDecorationsFlag = 0;\n let classDecorations: t.Expression[] = [];\n if (classDecorators) {\n const { hasThis, decs } = generateDecorationList(\n classDecorators.map(el => el.expression),\n classDecorators.map(dec => decoratorsThis.get(dec)),\n version,\n );\n classDecorationsFlag = hasThis ? 1 : 0;\n classDecorations = decs;\n }\n\n const elementLocals: t.Identifier[] =\n extractElementLocalAssignments(elementDecoratorInfo);\n\n if (requiresProtoInit) {\n protoInitLocal = scopeParent.generateDeclaredUidIdentifier(\"initProto\");\n elementLocals.push(protoInitLocal);\n\n const protoInitCall = t.callExpression(t.cloneNode(protoInitLocal), [\n t.thisExpression(),\n ]);\n\n if (firstFieldPath) {\n const value = firstFieldPath.get(\"value\");\n const body: t.Expression[] = [protoInitCall];\n\n if (value.node) {\n body.push(value.node);\n }\n\n value.replaceWith(t.sequenceExpression(body));\n } else if (constructorPath) {\n if (path.node.superClass) {\n path.traverse({\n CallExpression: {\n exit(path) {\n if (!path.get(\"callee\").isSuper()) return;\n\n path.replaceWith(\n t.callExpression(t.cloneNode(protoInitLocal), [path.node]),\n );\n\n path.skip();\n },\n },\n });\n } else {\n constructorPath.node.body.body.unshift(\n t.expressionStatement(protoInitCall),\n );\n }\n } else {\n const body: t.Statement[] = [t.expressionStatement(protoInitCall)];\n\n if (path.node.superClass) {\n body.unshift(\n t.expressionStatement(\n t.callExpression(t.super(), [\n t.spreadElement(t.identifier(\"args\")),\n ]),\n ),\n );\n }\n\n path.node.body.body.unshift(\n t.classMethod(\n \"constructor\",\n t.identifier(\"constructor\"),\n [t.restElement(t.identifier(\"args\"))],\n t.blockStatement(body),\n ),\n );\n }\n }\n\n if (requiresStaticInit) {\n staticInitLocal = scopeParent.generateDeclaredUidIdentifier(\"initStatic\");\n elementLocals.push(staticInitLocal);\n }\n\n if (decoratedPrivateMethods.size > 0) {\n path.traverse({\n PrivateName(path) {\n if (!decoratedPrivateMethods.has(path.node.id.name)) return;\n\n const parentPath = path.parentPath;\n const parentParentPath = parentPath.parentPath;\n\n if (\n // this.bar().#x = 123;\n (parentParentPath.node.type === \"AssignmentExpression\" &&\n parentParentPath.node.left === parentPath.node) ||\n // this.#x++;\n parentParentPath.node.type === \"UpdateExpression\" ||\n // ([...this.#x] = foo);\n parentParentPath.node.type === \"RestElement\" ||\n // ([this.#x] = foo);\n parentParentPath.node.type === \"ArrayPattern\" ||\n // ({ a: this.#x } = bar);\n (parentParentPath.node.type === \"ObjectProperty\" &&\n parentParentPath.node.value === parentPath.node &&\n parentParentPath.parentPath.type === \"ObjectPattern\") ||\n // for (this.#x of []);\n (parentParentPath.node.type === \"ForOfStatement\" &&\n parentParentPath.node.left === parentPath.node)\n ) {\n throw path.buildCodeFrameError(\n `Decorated private methods are not updatable, but \"#${path.node.id.name}\" is updated via this expression.`,\n );\n }\n },\n });\n }\n\n const classLocals: t.Identifier[] = [];\n let classInitInjected = false;\n const classInitCall =\n classInitLocal && t.callExpression(t.cloneNode(classInitLocal), []);\n\n const originalClass = path.node;\n\n if (classDecorators) {\n classLocals.push(classIdLocal, classInitLocal);\n const statics: (\n | t.ClassProperty\n | t.ClassPrivateProperty\n | t.ClassPrivateMethod\n )[] = [];\n let staticBlocks: t.StaticBlock[] = [];\n path.get(\"body.body\").forEach(element => {\n // Static blocks cannot be compiled to \"instance blocks\", but we can inline\n // them as IIFEs in the next property.\n if (element.isStaticBlock()) {\n staticBlocks.push(element.node);\n element.remove();\n return;\n }\n\n const isProperty =\n element.isClassProperty() || element.isClassPrivateProperty();\n\n if (\n (isProperty || element.isClassPrivateMethod()) &&\n element.node.static\n ) {\n if (isProperty && staticBlocks.length > 0) {\n const allValues: t.Expression[] = staticBlocks.map(staticBlockToIIFE);\n if (element.node.value) allValues.push(element.node.value);\n element.node.value = maybeSequenceExpression(allValues);\n staticBlocks = [];\n }\n\n element.node.static = false;\n statics.push(element.node);\n element.remove();\n }\n });\n\n if (statics.length > 0 || staticBlocks.length > 0) {\n const staticsClass = template.expression.ast`\n class extends ${state.addHelper(\"identity\")} {}\n ` as t.ClassExpression;\n staticsClass.body.body = [\n t.staticBlock([\n t.toStatement(originalClass, true) ||\n // If toStatement returns false, originalClass must be an anonymous ClassExpression,\n // because `export default @dec ...` has been handled in the export visitor before.\n t.expressionStatement(originalClass as t.ClassExpression),\n ]),\n ...statics,\n ];\n\n const constructorBody: t.Expression[] = [];\n\n const newExpr = t.newExpression(staticsClass, []);\n\n if (staticBlocks.length > 0) {\n constructorBody.push(...staticBlocks.map(staticBlockToIIFE));\n }\n if (classInitCall) {\n classInitInjected = true;\n constructorBody.push(classInitCall);\n }\n if (constructorBody.length > 0) {\n constructorBody.unshift(\n t.callExpression(t.super(), [t.cloneNode(classIdLocal)]),\n );\n\n staticsClass.body.body.push(\n t.classMethod(\n \"constructor\",\n t.identifier(\"constructor\"),\n [],\n t.blockStatement([\n t.expressionStatement(t.sequenceExpression(constructorBody)),\n ]),\n ),\n );\n } else {\n newExpr.arguments.push(t.cloneNode(classIdLocal));\n }\n\n path.replaceWith(newExpr);\n }\n }\n if (!classInitInjected && classInitCall) {\n path.node.body.body.push(\n t.staticBlock([t.expressionStatement(classInitCall)]),\n );\n }\n\n let { superClass } = originalClass;\n if (superClass && (process.env.BABEL_8_BREAKING || version === \"2023-05\")) {\n const id = path.scope.maybeGenerateMemoised(superClass);\n if (id) {\n originalClass.superClass = t.assignmentExpression(\"=\", id, superClass);\n superClass = id;\n }\n }\n\n originalClass.body.body.unshift(\n t.staticBlock(\n [\n t.expressionStatement(\n createLocalsAssignment(\n elementLocals,\n classLocals,\n elementDecorations,\n t.arrayExpression(classDecorations),\n t.numericLiteral(classDecorationsFlag),\n needsInstancePrivateBrandCheck ? lastInstancePrivateName : null,\n t.cloneNode(superClass),\n state,\n version,\n ),\n ),\n requiresStaticInit &&\n t.expressionStatement(\n t.callExpression(t.cloneNode(staticInitLocal), [\n t.thisExpression(),\n ]),\n ),\n ].filter(Boolean),\n ),\n );\n\n // When path is a ClassExpression, path.insertBefore will convert `path`\n // into a SequenceExpression\n path.insertBefore(assignments.map(expr => t.expressionStatement(expr)));\n\n if (needsDeclaraionForClassBinding) {\n path.insertBefore(\n t.variableDeclaration(\"let\", [\n t.variableDeclarator(t.cloneNode(classIdLocal)),\n ]),\n );\n }\n\n // Recrawl the scope to make sure new identifiers are properly synced\n path.scope.crawl();\n\n return path;\n}\n\nfunction createLocalsAssignment(\n elementLocals: t.Identifier[],\n classLocals: t.Identifier[],\n elementDecorations: t.ArrayExpression,\n classDecorations: t.ArrayExpression,\n classDecorationsFlag: t.NumericLiteral,\n maybePrivateBranName: t.PrivateName | null,\n superClass: null | t.Expression,\n state: PluginPass,\n version: DecoratorVersionKind,\n) {\n let lhs, rhs;\n const args: t.Expression[] = [\n t.thisExpression(),\n elementDecorations,\n classDecorations,\n ];\n\n if (!process.env.BABEL_8_BREAKING) {\n if (\n version === \"2021-12\" ||\n (version === \"2022-03\" && !state.availableHelper(\"applyDecs2203R\"))\n ) {\n const lhs = t.arrayPattern([...elementLocals, ...classLocals]);\n const rhs = t.callExpression(\n state.addHelper(version === \"2021-12\" ? \"applyDecs\" : \"applyDecs2203\"),\n args,\n );\n return t.assignmentExpression(\"=\", lhs, rhs);\n }\n }\n\n if (process.env.BABEL_8_BREAKING || version === \"2023-05\") {\n if (\n maybePrivateBranName ||\n superClass ||\n classDecorationsFlag.value !== 0\n ) {\n args.push(classDecorationsFlag);\n }\n if (maybePrivateBranName) {\n args.push(\n template.expression.ast`\n _ => ${t.cloneNode(maybePrivateBranName)} in _\n ` as t.ArrowFunctionExpression,\n );\n } else if (superClass) {\n args.push(t.unaryExpression(\"void\", t.numericLiteral(0)));\n }\n if (superClass) args.push(superClass);\n rhs = t.callExpression(state.addHelper(\"applyDecs2305\"), args);\n } else if (version === \"2023-01\") {\n if (maybePrivateBranName) {\n args.push(\n template.expression.ast`\n _ => ${t.cloneNode(maybePrivateBranName)} in _\n ` as t.ArrowFunctionExpression,\n );\n }\n rhs = t.callExpression(state.addHelper(\"applyDecs2301\"), args);\n } else {\n rhs = t.callExpression(state.addHelper(\"applyDecs2203R\"), args);\n }\n // optimize `{ c: [classLocals] } = applyapplyDecs2203R(...)` to\n // `[classLocals] = applyapplyDecs2203R(...).c`\n if (elementLocals.length > 0) {\n if (classLocals.length > 0) {\n lhs = t.objectPattern([\n t.objectProperty(t.identifier(\"e\"), t.arrayPattern(elementLocals)),\n t.objectProperty(t.identifier(\"c\"), t.arrayPattern(classLocals)),\n ]);\n } else {\n lhs = t.arrayPattern(elementLocals);\n rhs = t.memberExpression(rhs, t.identifier(\"e\"), false, false);\n }\n } else {\n // invariant: classLocals.length > 0\n lhs = t.arrayPattern(classLocals);\n rhs = t.memberExpression(rhs, t.identifier(\"c\"), false, false);\n }\n\n return t.assignmentExpression(\"=\", lhs, rhs);\n}\n\nexport default function (\n { assertVersion, assumption }: PluginAPI,\n { loose }: Options,\n // TODO(Babel 8): Only keep 2023-05\n version: \"2023-05\" | \"2023-01\" | \"2022-03\" | \"2021-12\",\n): PluginObject {\n if (process.env.BABEL_8_BREAKING) {\n assertVersion(process.env.IS_PUBLISH ? PACKAGE_JSON.version : \"^7.21.0\");\n } else {\n if (version === \"2023-05\" || version === \"2023-01\") {\n assertVersion(\"^7.21.0\");\n } else if (version === \"2021-12\") {\n assertVersion(\"^7.16.0\");\n } else {\n assertVersion(\"^7.19.0\");\n }\n }\n\n const VISITED = new WeakSet<NodePath>();\n const constantSuper = assumption(\"constantSuper\") ?? loose;\n\n return {\n name: \"proposal-decorators\",\n inherits: syntaxDecorators,\n\n visitor: {\n \"ExportNamedDeclaration|ExportDefaultDeclaration\"(\n path: NodePath<t.ExportNamedDeclaration | t.ExportDefaultDeclaration>,\n ) {\n const { declaration } = path.node;\n if (\n declaration?.type === \"ClassDeclaration\" &&\n // When compiling class decorators we need to replace the class\n // binding, so we must split it in two separate declarations.\n declaration.decorators?.length > 0\n ) {\n splitExportDeclaration(path);\n }\n },\n\n Class(path, state) {\n if (VISITED.has(path)) return;\n\n const newPath = transformClass(path, state, constantSuper, version);\n if (newPath) VISITED.add(newPath);\n },\n },\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["_core","require","_pluginSyntaxDecorators","_helperReplaceSupers","_helperSplitExportDeclaration","_helperSkipTransparentExpressionWrappers","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","className","type","varId","scope","generateUidIdentifierBasedOnNode","classId","rename","get","replaceWith","cloneNode","parent","generateDeclaredUidIdentifier","newClassExpr","classExpression","superClass","body","newPath","sequenceExpression","generateClassProperty","key","value","isStatic","classPrivateProperty","undefined","classProperty","addProxyAccessorsFor","element","originalKey","targetKey","version","isComputed","static","thisArg","thisExpression","getterBody","blockStatement","returnStatement","memberExpression","setterBody","expressionStatement","assignmentExpression","getter","setter","classPrivateMethod","classMethod","insertAfter","extractProxyAccessorsFor","template","expression","ast","FIELD","ACCESSOR","METHOD","GETTER","SETTER","STATIC_OLD_VERSION","STATIC","DECORATORS_HAVE_THIS","getElementKind","kind","isDecoratorInfo","info","filteredOrderedDecoratorInfo","filtered","filter","el","generateDecorationList","decorators","decoratorsThis","decsCount","hasOneThis","some","Boolean","decs","i","push","unaryExpression","numericLiteral","hasThis","generateDecorationExprs","arrayExpression","map","flag","privateMethods","extractElementLocalAssignments","decorationInfo","localIds","locals","Array","isArray","addCallAccessorsFor","getId","setId","callExpression","isNotTsParameter","movePrivateAccessor","methodLocalVar","params","block","isClassDecoratableElementPath","staticBlockToIIFE","arrowFunctionExpression","maybeSequenceExpression","exprs","createSetFunctionNameCall","state","addHelper","createToPropertyKeyCall","propertyKey","transformClass","constantSuper","propertyVisitor","classDecorators","hasElementDecorators","generateClassPrivateUid","assignments","scopeParent","memoiseExpression","hint","localEvaluatedId","ClassProperty","ClassPrivateProperty","ClassAccessorProperty","computed","newId","newField","keyPath","isConstantExpression","insertBefore","expr","crawl","elementDecoratorInfo","firstFieldPath","constructorPath","requiresProtoInit","requiresStaticInit","decoratedPrivateMethods","protoInitLocal","staticInitLocal","classInitLocal","classIdLocal","Map","maybeExtractDecorator","decorator","isMemberExpression","object","isSuper","isThisExpression","set","needsDeclaraionForClassBinding","isClassDeclaration","classDecorator","generateUidIdentifier","lastInstancePrivateName","needsInstancePrivateBrandCheck","hasDecorators","decoratorPath","isPrivate","isClassPrivateProperty","isClassMethod","newFieldInitId","newValue","initId","valuePath","v","replaceSupers","ReplaceSupers","methodPath","objectRef","superRef","file","refToPreserve","replace","async","isAsync","functionExpression","remove","nameExpr","stringLiteral","d","elementDecorations","classDecorationsFlag","classDecorations","dec","elementLocals","protoInitCall","CallExpression","exit","skip","super","spreadElement","restElement","size","parentPath","parentParentPath","left","buildCodeFrameError","classLocals","classInitInjected","classInitCall","originalClass","statics","staticBlocks","forEach","isStaticBlock","isProperty","isClassProperty","isClassPrivateMethod","allValues","staticsClass","staticBlock","toStatement","constructorBody","newExpr","newExpression","arguments","maybeGenerateMemoised","createLocalsAssignment","variableDeclaration","variableDeclarator","maybePrivateBranName","setClassName","lhs","rhs","args","availableHelper","arrayPattern","objectPattern","objectProperty","isProtoKey","isDecorated","shouldTransformElement","shouldTransformClass","NamedEvaluationVisitoryFactory","isAnonymous","visitor","handleComputedProperty","propertyPath","keyValue","ref","VariableDeclarator","initializer","skipTransparentExprWrappers","AssignmentExpression","operator","AssignmentPattern","ObjectExpression","isDecoratedAnonymousClassExpression","isClassExpression","_default","assertVersion","assumption","loose","_assumption","VISITED","WeakSet","namedEvaluationVisitor","visitClass","_className","_node$id","inherits","syntaxDecorators","Object","assign","ExportDefaultDeclaration","declaration","updatedVarDeclarationPath","splitExportDeclaration","ExportNamedDeclaration","Class"],"sources":["../src/transformer-2023-05.ts"],"sourcesContent":["import type { NodePath, Scope, Visitor } 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.ts\";\nimport { skipTransparentExprWrappers } from \"@babel/helper-skip-transparent-expression-wrappers\";\n\ntype ClassDecoratableElement =\n | t.ClassMethod\n | t.ClassPrivateMethod\n | t.ClassProperty\n | t.ClassPrivateProperty\n | t.ClassAccessorProperty;\n\ntype ClassElement =\n | ClassDecoratableElement\n | t.TSDeclareMethod\n | t.TSIndexSignature\n | t.StaticBlock;\n\ntype DecoratorVersionKind = \"2023-05\" | \"2023-01\" | \"2022-03\" | \"2021-12\";\n\nfunction incrementId(id: number[], idx = id.length - 1): void {\n // If index is -1, id needs an additional character, unshift A\n if (idx === -1) {\n id.unshift(charCodes.uppercaseA);\n return;\n }\n\n const current = id[idx];\n\n if (current === charCodes.uppercaseZ) {\n // if current is Z, skip to a\n id[idx] = charCodes.lowercaseA;\n } else if (current === charCodes.lowercaseZ) {\n // if current is z, reset to A and carry the 1\n id[idx] = charCodes.uppercaseA;\n incrementId(id, idx - 1);\n } else {\n // else, increment by one\n id[idx] = current + 1;\n }\n}\n\n/**\n * Generates a new private name that is unique to the given class. This can be\n * used to create extra class fields and methods for the implementation, while\n * keeping the length of those names as small as possible. This is important for\n * minification purposes (though private names can generally be minified,\n * transpilations and polyfills cannot yet).\n */\nfunction createPrivateUidGeneratorForClass(\n classPath: NodePath<t.ClassDeclaration | t.ClassExpression>,\n): () => t.PrivateName {\n const currentPrivateId: number[] = [];\n const privateNames = new Set<string>();\n\n classPath.traverse({\n PrivateName(path) {\n privateNames.add(path.node.id.name);\n },\n });\n\n return (): t.PrivateName => {\n let reifiedId;\n do {\n incrementId(currentPrivateId);\n reifiedId = String.fromCharCode(...currentPrivateId);\n } while (privateNames.has(reifiedId));\n\n return t.privateName(t.identifier(reifiedId));\n };\n}\n\n/**\n * Wraps the above generator function so that it's run lazily the first time\n * it's actually required. Several types of decoration do not require this, so it\n * saves iterating the class elements an additional time and allocating the space\n * for the Sets of element names.\n */\nfunction createLazyPrivateUidGeneratorForClass(\n classPath: NodePath<t.ClassDeclaration | t.ClassExpression>,\n): () => t.PrivateName {\n let generator: () => t.PrivateName;\n\n return (): t.PrivateName => {\n if (!generator) {\n generator = createPrivateUidGeneratorForClass(classPath);\n }\n\n return generator();\n };\n}\n\n/**\n * Takes a class definition and the desired class name if anonymous and\n * replaces it with an equivalent class declaration (path) which is then\n * assigned to a local variable (id). This allows us to reassign the local variable with the\n * decorated version of the class. The class definition retains its original\n * name so that `toString` is not affected, other references to the class\n * are renamed instead.\n */\nfunction replaceClassWithVar(\n path: NodePath<t.ClassDeclaration | t.ClassExpression>,\n className: string | t.Identifier | t.StringLiteral | undefined,\n): {\n id: t.Identifier;\n path: NodePath<t.ClassDeclaration | t.ClassExpression>;\n} {\n if (path.type === \"ClassDeclaration\") {\n const id = path.node.id;\n const className = id.name;\n const varId = path.scope.generateUidIdentifierBasedOnNode(id);\n const classId = t.identifier(className);\n\n path.scope.rename(className, varId.name);\n\n path.get(\"id\").replaceWith(classId);\n\n return { id: t.cloneNode(varId), path };\n } else {\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 {\n varId = path.scope.parent.generateDeclaredUidIdentifier(\n typeof className === \"string\" ? className : \"decorated_class\",\n );\n }\n\n const newClassExpr = t.classExpression(\n typeof className === \"string\" ? t.identifier(className) : null,\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 id: t.cloneNode(varId),\n path: 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 className: t.Identifier,\n element: NodePath<ClassDecoratableElement>,\n originalKey: t.PrivateName | t.Expression,\n targetKey: t.PrivateName,\n version: DecoratorVersionKind,\n isComputed = false,\n): void {\n const { static: isStatic } = element.node;\n\n const thisArg =\n version === \"2023-05\" && isStatic ? className : t.thisExpression();\n\n const getterBody = t.blockStatement([\n t.returnStatement(\n t.memberExpression(t.cloneNode(thisArg), t.cloneNode(targetKey)),\n ),\n ]);\n\n const setterBody = t.blockStatement([\n t.expressionStatement(\n t.assignmentExpression(\n \"=\",\n t.memberExpression(t.cloneNode(thisArg), t.cloneNode(targetKey)),\n t.identifier(\"v\"),\n ),\n ),\n ]);\n\n let getter: t.ClassMethod | t.ClassPrivateMethod,\n setter: t.ClassMethod | t.ClassPrivateMethod;\n\n if (originalKey.type === \"PrivateName\") {\n getter = t.classPrivateMethod(\n \"get\",\n t.cloneNode(originalKey),\n [],\n getterBody,\n isStatic,\n );\n setter = t.classPrivateMethod(\n \"set\",\n t.cloneNode(originalKey),\n [t.identifier(\"v\")],\n setterBody,\n isStatic,\n );\n } else {\n getter = t.classMethod(\n \"get\",\n t.cloneNode(originalKey),\n [],\n getterBody,\n isComputed,\n isStatic,\n );\n setter = t.classMethod(\n \"set\",\n t.cloneNode(originalKey),\n [t.identifier(\"v\")],\n setterBody,\n isComputed,\n isStatic,\n );\n }\n\n element.insertAfter(setter);\n element.insertAfter(getter);\n}\n\nfunction extractProxyAccessorsFor(\n targetKey: t.PrivateName,\n version: DecoratorVersionKind,\n): (t.FunctionExpression | t.ArrowFunctionExpression)[] {\n if (version !== \"2023-05\" && version !== \"2023-01\") {\n return [\n template.expression.ast`\n function () {\n return this.${t.cloneNode(targetKey)};\n }\n ` as t.FunctionExpression,\n template.expression.ast`\n function (value) {\n this.${t.cloneNode(targetKey)} = value;\n }\n ` as t.FunctionExpression,\n ];\n }\n return [\n template.expression.ast`\n o => o.${t.cloneNode(targetKey)}\n ` as t.ArrowFunctionExpression,\n template.expression.ast`\n (o, v) => o.${t.cloneNode(targetKey)} = v\n ` as t.ArrowFunctionExpression,\n ];\n}\n\n// 3 bits reserved to this (0-7)\nconst FIELD = 0;\nconst ACCESSOR = 1;\nconst METHOD = 2;\nconst GETTER = 3;\nconst SETTER = 4;\n\nconst STATIC_OLD_VERSION = 5; // Before 2023-05\nconst STATIC = 8; // 1 << 3\nconst DECORATORS_HAVE_THIS = 16; // 1 << 3\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 decoratorsThis: t.Expression[];\n\n // The kind of the decorated value, matches the kind value passed to applyDecs\n kind: number;\n\n // whether or not the field is static\n isStatic: boolean;\n\n // The name of the decorator\n name: t.StringLiteral | t.Expression;\n\n privateMethods:\n | (t.FunctionExpression | t.ArrowFunctionExpression)[]\n | undefined;\n\n // The names of local variables that will be used/returned from the decoration\n locals: t.Identifier | t.Identifier[] | undefined;\n}\n\n// Information about a computed property key. These must be evaluated\n// interspersed with decorator expressions, which is why they get added to the\n// array of DecoratorInfos later on.\ninterface ComputedPropInfo {\n localComputedNameId: t.Identifier;\n keyNode: t.Expression;\n}\n\nfunction isDecoratorInfo(\n info: DecoratorInfo | ComputedPropInfo,\n): info is DecoratorInfo {\n return \"decorators\" in info;\n}\n\nfunction filteredOrderedDecoratorInfo(\n info: (DecoratorInfo | ComputedPropInfo)[],\n): DecoratorInfo[] {\n const filtered = info.filter(isDecoratorInfo);\n\n return [\n ...filtered.filter(\n el => el.isStatic && el.kind >= ACCESSOR && el.kind <= SETTER,\n ),\n ...filtered.filter(\n el => !el.isStatic && el.kind >= ACCESSOR && el.kind <= SETTER,\n ),\n ...filtered.filter(el => el.isStatic && el.kind === FIELD),\n ...filtered.filter(el => !el.isStatic && el.kind === FIELD),\n ];\n}\n\nfunction generateDecorationList(\n decorators: t.Expression[],\n decoratorsThis: (t.Expression | null)[],\n version: DecoratorVersionKind,\n) {\n const decsCount = decorators.length;\n const hasOneThis = decoratorsThis.some(Boolean);\n const decs: t.Expression[] = [];\n for (let i = 0; i < decsCount; i++) {\n if (version === \"2023-05\" && hasOneThis) {\n decs.push(\n decoratorsThis[i] || t.unaryExpression(\"void\", t.numericLiteral(0)),\n );\n }\n decs.push(decorators[i]);\n }\n\n return { hasThis: hasOneThis, decs };\n}\n\nfunction generateDecorationExprs(\n info: (DecoratorInfo | ComputedPropInfo)[],\n version: DecoratorVersionKind,\n): t.ArrayExpression {\n return t.arrayExpression(\n filteredOrderedDecoratorInfo(info).map(el => {\n const { decs, hasThis } = generateDecorationList(\n el.decorators,\n el.decoratorsThis,\n version,\n );\n\n let flag = el.kind;\n if (el.isStatic) {\n flag += version === \"2023-05\" ? STATIC : STATIC_OLD_VERSION;\n }\n if (hasThis) flag += DECORATORS_HAVE_THIS;\n\n return t.arrayExpression([\n decs.length === 1 ? decs[0] : t.arrayExpression(decs),\n t.numericLiteral(flag),\n el.name,\n ...(el.privateMethods || []),\n ]);\n }),\n );\n}\n\nfunction extractElementLocalAssignments(\n decorationInfo: (DecoratorInfo | ComputedPropInfo)[],\n) {\n const localIds: t.Identifier[] = [];\n\n for (const el of filteredOrderedDecoratorInfo(decorationInfo)) {\n const { locals } = el;\n\n if (Array.isArray(locals)) {\n localIds.push(...locals);\n } else if (locals !== undefined) {\n localIds.push(locals);\n }\n }\n\n return localIds;\n}\n\nfunction addCallAccessorsFor(\n element: NodePath,\n key: t.PrivateName,\n getId: t.Identifier,\n setId: t.Identifier,\n) {\n element.insertAfter(\n t.classPrivateMethod(\n \"get\",\n t.cloneNode(key),\n [],\n t.blockStatement([\n t.returnStatement(\n t.callExpression(t.cloneNode(getId), [t.thisExpression()]),\n ),\n ]),\n ),\n );\n\n element.insertAfter(\n t.classPrivateMethod(\n \"set\",\n t.cloneNode(key),\n [t.identifier(\"v\")],\n t.blockStatement([\n t.expressionStatement(\n t.callExpression(t.cloneNode(setId), [\n t.thisExpression(),\n t.identifier(\"v\"),\n ]),\n ),\n ]),\n ),\n );\n}\n\nfunction isNotTsParameter(\n node: t.Identifier | t.Pattern | t.RestElement | t.TSParameterProperty,\n): node is t.Identifier | t.Pattern | t.RestElement {\n return node.type !== \"TSParameterProperty\";\n}\n\nfunction movePrivateAccessor(\n element: NodePath<t.ClassPrivateMethod>,\n key: t.PrivateName,\n methodLocalVar: t.Identifier,\n isStatic: boolean,\n) {\n let params: (t.Identifier | t.RestElement)[];\n let block: t.Statement[];\n\n if (element.node.kind === \"set\") {\n params = [t.identifier(\"v\")];\n block = [\n t.expressionStatement(\n t.callExpression(methodLocalVar, [\n t.thisExpression(),\n t.identifier(\"v\"),\n ]),\n ),\n ];\n } else {\n params = [];\n block = [\n t.returnStatement(t.callExpression(methodLocalVar, [t.thisExpression()])),\n ];\n }\n\n element.replaceWith(\n t.classPrivateMethod(\n element.node.kind,\n t.cloneNode(key),\n params,\n t.blockStatement(block),\n isStatic,\n ),\n );\n}\n\nfunction isClassDecoratableElementPath(\n path: NodePath<ClassElement>,\n): path is NodePath<ClassDecoratableElement> {\n const { type } = path;\n\n return (\n type !== \"TSDeclareMethod\" &&\n type !== \"TSIndexSignature\" &&\n type !== \"StaticBlock\"\n );\n}\n\nfunction staticBlockToIIFE(block: t.StaticBlock) {\n return t.callExpression(\n t.arrowFunctionExpression([], t.blockStatement(block.body)),\n [],\n );\n}\n\nfunction maybeSequenceExpression(exprs: t.Expression[]) {\n if (exprs.length === 0) return t.unaryExpression(\"void\", t.numericLiteral(0));\n if (exprs.length === 1) return exprs[0];\n return t.sequenceExpression(exprs);\n}\n\nfunction createSetFunctionNameCall(\n state: PluginPass,\n className: t.Identifier | t.StringLiteral,\n) {\n return t.callExpression(state.addHelper(\"setFunctionName\"), [\n t.thisExpression(),\n className,\n ]);\n}\n\nfunction createToPropertyKeyCall(state: PluginPass, propertyKey: t.Expression) {\n return t.callExpression(state.addHelper(\"toPropertyKey\"), [propertyKey]);\n}\n\nfunction transformClass(\n path: NodePath<t.ClassExpression | t.ClassDeclaration>,\n state: PluginPass,\n constantSuper: boolean,\n version: DecoratorVersionKind,\n className: string | t.Identifier | t.StringLiteral | undefined,\n propertyVisitor: Visitor<PluginPass>,\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 const assignments: t.AssignmentExpression[] = [];\n const scopeParent: Scope = path.scope.parent;\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 // 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 switch (element.node.type) {\n case \"ClassProperty\":\n // @ts-expect-error todo: propertyVisitor.ClassProperty should be callable. Improve typings.\n propertyVisitor.ClassProperty(\n element as NodePath<t.ClassProperty>,\n state,\n );\n break;\n case \"ClassPrivateProperty\":\n // @ts-expect-error todo: propertyVisitor.ClassPrivateProperty should be callable. Improve typings.\n propertyVisitor.ClassPrivateProperty(\n element as NodePath<t.ClassPrivateProperty>,\n state,\n );\n break;\n case \"ClassAccessorProperty\":\n // @ts-expect-error todo: propertyVisitor.ClassAccessorProperty should be callable. Improve typings.\n propertyVisitor.ClassAccessorProperty(\n element as NodePath<t.ClassAccessorProperty>,\n state,\n );\n break;\n }\n hasElementDecorators = true;\n } else if (element.node.type === \"ClassAccessorProperty\") {\n // @ts-expect-error todo: propertyVisitor.ClassAccessorProperty should be callable. Improve typings.\n propertyVisitor.ClassAccessorProperty(\n element as NodePath<t.ClassAccessorProperty>,\n state,\n );\n const { key, value, static: isStatic, computed } = element.node;\n\n const newId = generateClassPrivateUid();\n const newField = generateClassProperty(newId, value, isStatic);\n const keyPath = element.get(\"key\");\n const [newPath] = element.replaceWith(newField);\n\n addProxyAccessorsFor(\n path.node.id,\n newPath,\n computed && !keyPath.isConstantExpression()\n ? memoiseExpression(\n createToPropertyKeyCall(state, key as t.Expression),\n \"computedKey\",\n )\n : key,\n newId,\n version,\n computed,\n );\n }\n }\n\n if (!classDecorators && !hasElementDecorators) {\n // If nothing is decorated but we have assignments, it must be the memoised\n // computed keys of class accessors\n if (assignments.length > 0) {\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 // If nothing is decorated and no assignments inserted, return\n return;\n }\n\n const elementDecoratorInfo: (DecoratorInfo | ComputedPropInfo)[] = [];\n\n // The initializer of the first non-static field will be injected with the protoInit call\n let firstFieldPath:\n | NodePath<t.ClassProperty | t.ClassPrivateProperty>\n | undefined;\n let constructorPath: NodePath<t.ClassMethod> | undefined;\n let requiresProtoInit = false;\n let requiresStaticInit = false;\n const decoratedPrivateMethods = new Set<string>();\n\n let protoInitLocal: t.Identifier,\n staticInitLocal: t.Identifier,\n classInitLocal: t.Identifier,\n classIdLocal: t.Identifier;\n\n const decoratorsThis = new Map<t.Decorator, t.Expression>();\n const maybeExtractDecorator = (decorator: t.Decorator) => {\n const { expression } = decorator;\n if (version === \"2023-05\" && t.isMemberExpression(expression)) {\n let object;\n if (\n t.isSuper(expression.object) ||\n t.isThisExpression(expression.object)\n ) {\n object = memoiseExpression(t.thisExpression(), \"obj\");\n } else if (!scopeParent.isStatic(expression.object)) {\n object = memoiseExpression(expression.object, \"obj\");\n expression.object = object;\n } else {\n object = expression.object;\n }\n decoratorsThis.set(decorator, t.cloneNode(object));\n }\n if (!scopeParent.isStatic(expression)) {\n decorator.expression = memoiseExpression(expression, \"dec\");\n }\n };\n\n let needsDeclaraionForClassBinding = false;\n if (classDecorators) {\n classInitLocal = scopeParent.generateDeclaredUidIdentifier(\"initClass\");\n needsDeclaraionForClassBinding = path.isClassDeclaration();\n ({ id: classIdLocal, path } = replaceClassWithVar(path, className));\n\n path.node.decorators = null;\n\n for (const classDecorator of classDecorators) {\n maybeExtractDecorator(classDecorator);\n }\n } else {\n if (!path.node.id) {\n path.node.id = path.scope.generateUidIdentifier(\"Class\");\n }\n classIdLocal = t.cloneNode(path.node.id);\n }\n\n let lastInstancePrivateName: t.PrivateName;\n let needsInstancePrivateBrandCheck = false;\n\n if (hasElementDecorators) {\n for (const element of body) {\n if (!isClassDecoratableElementPath(element)) {\n continue;\n }\n\n const { node } = element;\n const decorators = element.get(\"decorators\");\n\n const hasDecorators = Array.isArray(decorators) && decorators.length > 0;\n\n if (hasDecorators) {\n for (const decoratorPath of decorators) {\n maybeExtractDecorator(decoratorPath.node);\n }\n }\n\n const isComputed =\n \"computed\" in element.node && element.node.computed === true;\n if (isComputed) {\n if (!element.get(\"key\").isConstantExpression()) {\n node.key = memoiseExpression(\n createToPropertyKeyCall(state, node.key as t.Expression),\n \"computedKey\",\n );\n }\n }\n\n const kind = getElementKind(element);\n const { key } = node;\n\n const isPrivate = key.type === \"PrivateName\";\n\n const isStatic = !!element.node.static;\n\n let name = \"computedKey\";\n\n if (isPrivate) {\n name = key.id.name;\n } else if (!isComputed && key.type === \"Identifier\") {\n name = key.name;\n }\n\n if (isPrivate && !isStatic) {\n if (hasDecorators) {\n needsInstancePrivateBrandCheck = true;\n }\n if (t.isClassPrivateProperty(node) || !lastInstancePrivateName) {\n lastInstancePrivateName = key;\n }\n }\n\n if (element.isClassMethod({ kind: \"constructor\" })) {\n constructorPath = element;\n }\n\n if (hasDecorators) {\n let locals: t.Identifier | t.Identifier[];\n let privateMethods: Array<\n t.FunctionExpression | t.ArrowFunctionExpression\n >;\n\n if (kind === ACCESSOR) {\n const { value } = element.node as t.ClassAccessorProperty;\n\n const params: t.Expression[] = [t.thisExpression()];\n\n if (value) {\n params.push(t.cloneNode(value));\n }\n\n const newId = generateClassPrivateUid();\n const newFieldInitId =\n element.scope.parent.generateDeclaredUidIdentifier(`init_${name}`);\n const newValue = t.callExpression(\n t.cloneNode(newFieldInitId),\n params,\n );\n\n const newField = generateClassProperty(newId, newValue, isStatic);\n const [newPath] = element.replaceWith(newField);\n\n if (isPrivate) {\n privateMethods = extractProxyAccessorsFor(newId, version);\n\n const getId = newPath.scope.parent.generateDeclaredUidIdentifier(\n `get_${name}`,\n );\n const setId = newPath.scope.parent.generateDeclaredUidIdentifier(\n `set_${name}`,\n );\n\n addCallAccessorsFor(newPath, key, getId, setId);\n\n locals = [newFieldInitId, getId, setId];\n } else {\n addProxyAccessorsFor(\n path.node.id,\n newPath,\n key,\n newId,\n version,\n isComputed,\n );\n locals = newFieldInitId;\n }\n } else if (kind === FIELD) {\n const initId = element.scope.parent.generateDeclaredUidIdentifier(\n `init_${name}`,\n );\n const valuePath = (\n element as NodePath<t.ClassProperty | t.ClassPrivateProperty>\n ).get(\"value\");\n\n valuePath.replaceWith(\n t.callExpression(\n t.cloneNode(initId),\n [t.thisExpression(), valuePath.node].filter(v => v),\n ),\n );\n\n locals = initId;\n\n if (isPrivate) {\n privateMethods = extractProxyAccessorsFor(key, version);\n }\n } else if (isPrivate) {\n locals = element.scope.parent.generateDeclaredUidIdentifier(\n `call_${name}`,\n );\n\n const replaceSupers = new ReplaceSupers({\n constantSuper,\n methodPath: element as NodePath<t.ClassPrivateMethod>,\n objectRef: classIdLocal,\n superRef: path.node.superClass,\n file: state.file,\n refToPreserve: classIdLocal,\n });\n\n replaceSupers.replace();\n\n const {\n params,\n body,\n async: isAsync,\n } = element.node as t.ClassPrivateMethod;\n\n privateMethods = [\n t.functionExpression(\n undefined,\n params.filter(isNotTsParameter),\n body,\n isAsync,\n ),\n ];\n\n if (kind === GETTER || kind === SETTER) {\n movePrivateAccessor(\n element as NodePath<t.ClassPrivateMethod>,\n t.cloneNode(key),\n t.cloneNode(locals),\n isStatic,\n );\n } else {\n const node = element.node as t.ClassPrivateMethod;\n\n // Unshift\n path.node.body.body.unshift(\n t.classPrivateProperty(key, t.cloneNode(locals), [], node.static),\n );\n\n decoratedPrivateMethods.add(key.id.name);\n\n element.remove();\n }\n }\n\n let nameExpr: t.Expression;\n\n if (isComputed) {\n nameExpr = t.cloneNode(key as t.Expression);\n } else if (key.type === \"PrivateName\") {\n nameExpr = t.stringLiteral(key.id.name);\n } else if (key.type === \"Identifier\") {\n nameExpr = t.stringLiteral(key.name);\n } else {\n nameExpr = t.cloneNode(key as t.Expression);\n }\n\n elementDecoratorInfo.push({\n kind,\n decorators: decorators.map(d => d.node.expression),\n decoratorsThis: decorators.map(d => decoratorsThis.get(d.node)),\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(\n elementDecoratorInfo,\n version,\n );\n let classDecorationsFlag = 0;\n let classDecorations: t.Expression[] = [];\n if (classDecorators) {\n const { hasThis, decs } = generateDecorationList(\n classDecorators.map(el => el.expression),\n classDecorators.map(dec => decoratorsThis.get(dec)),\n version,\n );\n classDecorationsFlag = hasThis ? 1 : 0;\n classDecorations = decs;\n }\n\n const elementLocals: t.Identifier[] =\n extractElementLocalAssignments(elementDecoratorInfo);\n\n if (requiresProtoInit) {\n protoInitLocal = scopeParent.generateDeclaredUidIdentifier(\"initProto\");\n elementLocals.push(protoInitLocal);\n\n const protoInitCall = t.callExpression(t.cloneNode(protoInitLocal), [\n t.thisExpression(),\n ]);\n\n if (firstFieldPath) {\n const value = firstFieldPath.get(\"value\");\n const body: t.Expression[] = [protoInitCall];\n\n if (value.node) {\n body.push(value.node);\n }\n\n value.replaceWith(t.sequenceExpression(body));\n } else if (constructorPath) {\n if (path.node.superClass) {\n path.traverse({\n CallExpression: {\n exit(path) {\n if (!path.get(\"callee\").isSuper()) return;\n\n path.replaceWith(\n t.callExpression(t.cloneNode(protoInitLocal), [path.node]),\n );\n\n path.skip();\n },\n },\n });\n } else {\n constructorPath.node.body.body.unshift(\n t.expressionStatement(protoInitCall),\n );\n }\n } else {\n const body: t.Statement[] = [t.expressionStatement(protoInitCall)];\n\n if (path.node.superClass) {\n body.unshift(\n t.expressionStatement(\n t.callExpression(t.super(), [\n t.spreadElement(t.identifier(\"args\")),\n ]),\n ),\n );\n }\n\n path.node.body.body.unshift(\n t.classMethod(\n \"constructor\",\n t.identifier(\"constructor\"),\n [t.restElement(t.identifier(\"args\"))],\n t.blockStatement(body),\n ),\n );\n }\n }\n\n if (requiresStaticInit) {\n staticInitLocal = scopeParent.generateDeclaredUidIdentifier(\"initStatic\");\n elementLocals.push(staticInitLocal);\n }\n\n if (decoratedPrivateMethods.size > 0) {\n path.traverse({\n PrivateName(path) {\n if (!decoratedPrivateMethods.has(path.node.id.name)) return;\n\n const parentPath = path.parentPath;\n const parentParentPath = parentPath.parentPath;\n\n if (\n // this.bar().#x = 123;\n (parentParentPath.node.type === \"AssignmentExpression\" &&\n parentParentPath.node.left === parentPath.node) ||\n // this.#x++;\n parentParentPath.node.type === \"UpdateExpression\" ||\n // ([...this.#x] = foo);\n parentParentPath.node.type === \"RestElement\" ||\n // ([this.#x] = foo);\n parentParentPath.node.type === \"ArrayPattern\" ||\n // ({ a: this.#x } = bar);\n (parentParentPath.node.type === \"ObjectProperty\" &&\n parentParentPath.node.value === parentPath.node &&\n parentParentPath.parentPath.type === \"ObjectPattern\") ||\n // for (this.#x of []);\n (parentParentPath.node.type === \"ForOfStatement\" &&\n parentParentPath.node.left === parentPath.node)\n ) {\n throw path.buildCodeFrameError(\n `Decorated private methods are not updatable, but \"#${path.node.id.name}\" is updated via this expression.`,\n );\n }\n },\n });\n }\n\n const classLocals: t.Identifier[] = [];\n let classInitInjected = false;\n const classInitCall =\n classInitLocal && t.callExpression(t.cloneNode(classInitLocal), []);\n\n const originalClass = path.node;\n\n if (classDecorators) {\n classLocals.push(classIdLocal, classInitLocal);\n const statics: (\n | t.ClassProperty\n | t.ClassPrivateProperty\n | t.ClassPrivateMethod\n )[] = [];\n let staticBlocks: t.StaticBlock[] = [];\n path.get(\"body.body\").forEach(element => {\n // Static blocks cannot be compiled to \"instance blocks\", but we can inline\n // them as IIFEs in the next property.\n if (element.isStaticBlock()) {\n staticBlocks.push(element.node);\n element.remove();\n return;\n }\n\n const isProperty =\n element.isClassProperty() || element.isClassPrivateProperty();\n\n if (\n (isProperty || element.isClassPrivateMethod()) &&\n element.node.static\n ) {\n if (isProperty && staticBlocks.length > 0) {\n const allValues: t.Expression[] = staticBlocks.map(staticBlockToIIFE);\n if (element.node.value) allValues.push(element.node.value);\n element.node.value = maybeSequenceExpression(allValues);\n staticBlocks = [];\n }\n\n element.node.static = false;\n statics.push(element.node);\n element.remove();\n }\n });\n\n if (statics.length > 0 || staticBlocks.length > 0) {\n const staticsClass = template.expression.ast`\n class extends ${state.addHelper(\"identity\")} {}\n ` as t.ClassExpression;\n staticsClass.body.body = [\n t.staticBlock([\n t.toStatement(originalClass, true) ||\n // If toStatement returns false, originalClass must be an anonymous ClassExpression,\n // because `export default @dec ...` has been handled in the export visitor before.\n t.expressionStatement(originalClass as t.ClassExpression),\n ]),\n ...statics,\n ];\n\n const constructorBody: t.Expression[] = [];\n\n const newExpr = t.newExpression(staticsClass, []);\n\n if (staticBlocks.length > 0) {\n constructorBody.push(...staticBlocks.map(staticBlockToIIFE));\n }\n if (classInitCall) {\n classInitInjected = true;\n constructorBody.push(classInitCall);\n }\n if (constructorBody.length > 0) {\n constructorBody.unshift(\n t.callExpression(t.super(), [t.cloneNode(classIdLocal)]),\n );\n\n staticsClass.body.body.push(\n t.classMethod(\n \"constructor\",\n t.identifier(\"constructor\"),\n [],\n t.blockStatement([\n t.expressionStatement(t.sequenceExpression(constructorBody)),\n ]),\n ),\n );\n } else {\n newExpr.arguments.push(t.cloneNode(classIdLocal));\n }\n\n path.replaceWith(newExpr);\n }\n }\n if (!classInitInjected && classInitCall) {\n path.node.body.body.push(\n t.staticBlock([t.expressionStatement(classInitCall)]),\n );\n }\n\n let { superClass } = originalClass;\n if (superClass && (process.env.BABEL_8_BREAKING || version === \"2023-05\")) {\n const id = path.scope.maybeGenerateMemoised(superClass);\n if (id) {\n originalClass.superClass = t.assignmentExpression(\"=\", id, superClass);\n superClass = id;\n }\n }\n\n originalClass.body.body.unshift(\n t.staticBlock(\n [\n t.expressionStatement(\n createLocalsAssignment(\n elementLocals,\n classLocals,\n elementDecorations,\n t.arrayExpression(classDecorations),\n t.numericLiteral(classDecorationsFlag),\n needsInstancePrivateBrandCheck ? lastInstancePrivateName : null,\n typeof className === \"object\" ? className : undefined,\n t.cloneNode(superClass),\n state,\n version,\n ),\n ),\n requiresStaticInit &&\n t.expressionStatement(\n t.callExpression(t.cloneNode(staticInitLocal), [\n t.thisExpression(),\n ]),\n ),\n ].filter(Boolean),\n ),\n );\n\n // When path is a ClassExpression, path.insertBefore will convert `path`\n // into a SequenceExpression\n path.insertBefore(assignments.map(expr => t.expressionStatement(expr)));\n\n if (needsDeclaraionForClassBinding) {\n path.insertBefore(\n t.variableDeclaration(\"let\", [\n t.variableDeclarator(t.cloneNode(classIdLocal)),\n ]),\n );\n }\n\n // Recrawl the scope to make sure new identifiers are properly synced\n path.scope.crawl();\n\n return path;\n}\n\nfunction createLocalsAssignment(\n elementLocals: t.Identifier[],\n classLocals: t.Identifier[],\n elementDecorations: t.ArrayExpression,\n classDecorations: t.ArrayExpression,\n classDecorationsFlag: t.NumericLiteral,\n maybePrivateBranName: t.PrivateName | null,\n setClassName: t.Identifier | t.StringLiteral | undefined,\n superClass: null | t.Expression,\n state: PluginPass,\n version: DecoratorVersionKind,\n) {\n let lhs, rhs;\n const args: t.Expression[] = [\n setClassName\n ? createSetFunctionNameCall(state, setClassName)\n : t.thisExpression(),\n elementDecorations,\n classDecorations,\n ];\n\n if (!process.env.BABEL_8_BREAKING) {\n if (\n version === \"2021-12\" ||\n (version === \"2022-03\" && !state.availableHelper(\"applyDecs2203R\"))\n ) {\n const lhs = t.arrayPattern([...elementLocals, ...classLocals]);\n const rhs = t.callExpression(\n state.addHelper(version === \"2021-12\" ? \"applyDecs\" : \"applyDecs2203\"),\n args,\n );\n return t.assignmentExpression(\"=\", lhs, rhs);\n }\n }\n\n if (process.env.BABEL_8_BREAKING || version === \"2023-05\") {\n if (\n maybePrivateBranName ||\n superClass ||\n classDecorationsFlag.value !== 0\n ) {\n args.push(classDecorationsFlag);\n }\n if (maybePrivateBranName) {\n args.push(\n template.expression.ast`\n _ => ${t.cloneNode(maybePrivateBranName)} in _\n ` as t.ArrowFunctionExpression,\n );\n } else if (superClass) {\n args.push(t.unaryExpression(\"void\", t.numericLiteral(0)));\n }\n if (superClass) args.push(superClass);\n rhs = t.callExpression(state.addHelper(\"applyDecs2305\"), args);\n } else if (version === \"2023-01\") {\n if (maybePrivateBranName) {\n args.push(\n template.expression.ast`\n _ => ${t.cloneNode(maybePrivateBranName)} in _\n ` as t.ArrowFunctionExpression,\n );\n }\n rhs = t.callExpression(state.addHelper(\"applyDecs2301\"), args);\n } else {\n rhs = t.callExpression(state.addHelper(\"applyDecs2203R\"), args);\n }\n // optimize `{ c: [classLocals] } = applyapplyDecs2203R(...)` to\n // `[classLocals] = applyapplyDecs2203R(...).c`\n if (elementLocals.length > 0) {\n if (classLocals.length > 0) {\n lhs = t.objectPattern([\n t.objectProperty(t.identifier(\"e\"), t.arrayPattern(elementLocals)),\n t.objectProperty(t.identifier(\"c\"), t.arrayPattern(classLocals)),\n ]);\n } else {\n lhs = t.arrayPattern(elementLocals);\n rhs = t.memberExpression(rhs, t.identifier(\"e\"), false, false);\n }\n } else {\n // invariant: classLocals.length > 0\n lhs = t.arrayPattern(classLocals);\n rhs = t.memberExpression(rhs, t.identifier(\"c\"), false, false);\n }\n\n return t.assignmentExpression(\"=\", lhs, rhs);\n}\n\nfunction isProtoKey(\n node: t.Identifier | t.StringLiteral | t.BigIntLiteral | t.NumericLiteral,\n) {\n return node.type === \"Identifier\"\n ? node.name === \"__proto__\"\n : node.value === \"__proto__\";\n}\n\nfunction isDecorated(node: t.Class | ClassDecoratableElement) {\n return node.decorators && node.decorators.length > 0;\n}\n\nfunction shouldTransformElement(node: ClassElement) {\n switch (node.type) {\n case \"ClassAccessorProperty\":\n return true;\n case \"ClassMethod\":\n case \"ClassProperty\":\n case \"ClassPrivateMethod\":\n case \"ClassPrivateProperty\":\n return isDecorated(node);\n default:\n return false;\n }\n}\n\nfunction shouldTransformClass(node: t.Class) {\n return isDecorated(node) || node.body.body.some(shouldTransformElement);\n}\n\n// Todo: unify name references logic with helper-function-name\nfunction NamedEvaluationVisitoryFactory(\n isAnonymous: (path: NodePath) => boolean,\n visitor: (\n path: NodePath,\n state: PluginPass,\n name:\n | string\n | t.Identifier\n | t.StringLiteral\n | t.NumericLiteral\n | t.BigIntLiteral,\n ) => void,\n) {\n function handleComputedProperty(\n propertyPath: NodePath<\n t.ObjectProperty | t.ClassProperty | t.ClassAccessorProperty\n >,\n key: t.Expression,\n state: PluginPass,\n ): t.StringLiteral | t.Identifier {\n switch (key.type) {\n case \"StringLiteral\":\n return t.stringLiteral(key.value);\n case \"NumericLiteral\":\n case \"BigIntLiteral\": {\n const keyValue = key.value + \"\";\n propertyPath.get(\"key\").replaceWith(t.stringLiteral(keyValue));\n return t.stringLiteral(keyValue);\n }\n default: {\n const ref = propertyPath.scope.maybeGenerateMemoised(key);\n propertyPath\n .get(\"key\")\n .replaceWith(\n t.assignmentExpression(\n \"=\",\n ref,\n t.callExpression(state.addHelper(\"toPropertyKey\"), [key]),\n ),\n );\n return t.cloneNode(ref);\n }\n }\n }\n return {\n VariableDeclarator(path, state) {\n const id = path.node.id;\n if (id.type === \"Identifier\") {\n const initializer = skipTransparentExprWrappers(path.get(\"init\"));\n if (isAnonymous(initializer)) {\n const name = id.name;\n visitor(initializer, state, name);\n }\n }\n },\n AssignmentExpression(path, state) {\n const id = path.node.left;\n if (id.type === \"Identifier\") {\n const initializer = skipTransparentExprWrappers(path.get(\"right\"));\n if (isAnonymous(initializer)) {\n switch (path.node.operator) {\n case \"=\":\n case \"&&=\":\n case \"||=\":\n case \"??=\":\n visitor(initializer, state, id.name);\n }\n }\n }\n },\n AssignmentPattern(path, state) {\n const id = path.node.left;\n if (id.type === \"Identifier\") {\n const initializer = skipTransparentExprWrappers(path.get(\"right\"));\n if (isAnonymous(initializer)) {\n const name = id.name;\n visitor(initializer, state, name);\n }\n }\n },\n // We listen on ObjectExpression so that we don't have to visit\n // the object properties under object patterns\n ObjectExpression(path, state) {\n for (const propertyPath of path.get(\"properties\")) {\n const { node } = propertyPath;\n if (node.type !== \"ObjectProperty\") continue;\n const id = node.key;\n const initializer = skipTransparentExprWrappers(\n propertyPath.get(\"value\"),\n );\n if (isAnonymous(initializer)) {\n if (!node.computed) {\n // 13.2.5.5 RS: PropertyDefinitionEvaluation\n if (!isProtoKey(id as t.StringLiteral | t.Identifier)) {\n if (id.type === \"Identifier\") {\n visitor(initializer, state, id.name);\n } else {\n const className = t.stringLiteral(\n (id as t.StringLiteral | t.NumericLiteral | t.BigIntLiteral)\n .value + \"\",\n );\n visitor(initializer, state, className);\n }\n }\n } else {\n const ref = handleComputedProperty(\n propertyPath as NodePath<t.ObjectProperty>,\n // The key of a computed object property must not be a private name\n id as t.Expression,\n state,\n );\n visitor(initializer, state, ref);\n }\n }\n }\n },\n ClassPrivateProperty(path, state) {\n const { node } = path;\n const initializer = skipTransparentExprWrappers(path.get(\"value\"));\n if (isAnonymous(initializer)) {\n const className = t.stringLiteral(\"#\" + node.key.id.name);\n visitor(initializer, state, className);\n }\n },\n ClassAccessorProperty(path, state) {\n const { node } = path;\n const id = node.key;\n const initializer = skipTransparentExprWrappers(path.get(\"value\"));\n if (isAnonymous(initializer)) {\n if (!node.computed) {\n if (id.type === \"Identifier\") {\n visitor(initializer, state, id.name);\n } else if (id.type === \"PrivateName\") {\n const className = t.stringLiteral(\"#\" + id.id.name);\n visitor(initializer, state, className);\n } else {\n const className = t.stringLiteral(\n (id as t.StringLiteral | t.NumericLiteral | t.BigIntLiteral)\n .value + \"\",\n );\n visitor(initializer, state, className);\n }\n } else {\n const ref = handleComputedProperty(\n path,\n // The key of a computed accessor property must not be a private name\n id as t.Expression,\n state,\n );\n visitor(initializer, state, ref);\n }\n }\n },\n ClassProperty(path, state) {\n const { node } = path;\n const id = node.key;\n const initializer = skipTransparentExprWrappers(path.get(\"value\"));\n if (isAnonymous(initializer)) {\n if (!node.computed) {\n if (id.type === \"Identifier\") {\n visitor(initializer, state, id.name);\n } else {\n const className = t.stringLiteral(\n (id as t.StringLiteral | t.NumericLiteral | t.BigIntLiteral)\n .value + \"\",\n );\n visitor(initializer, state, className);\n }\n } else {\n const ref = handleComputedProperty(path, id, state);\n visitor(initializer, state, ref);\n }\n }\n },\n } satisfies Visitor<PluginPass>;\n}\n\nfunction isDecoratedAnonymousClassExpression(path: NodePath) {\n return (\n path.isClassExpression({ id: null }) && shouldTransformClass(path.node)\n );\n}\n\nexport default function (\n { assertVersion, assumption }: PluginAPI,\n { loose }: Options,\n // TODO(Babel 8): Only keep 2023-05\n version: \"2023-05\" | \"2023-01\" | \"2022-03\" | \"2021-12\",\n): PluginObject {\n if (process.env.BABEL_8_BREAKING) {\n assertVersion(process.env.IS_PUBLISH ? PACKAGE_JSON.version : \"^7.21.0\");\n } else {\n if (version === \"2023-05\" || version === \"2023-01\") {\n assertVersion(\"^7.21.0\");\n } else if (version === \"2021-12\") {\n assertVersion(\"^7.16.0\");\n } else {\n assertVersion(\"^7.19.0\");\n }\n }\n\n const VISITED = new WeakSet<NodePath>();\n const constantSuper = assumption(\"constantSuper\") ?? loose;\n\n const namedEvaluationVisitor: Visitor<PluginPass> =\n NamedEvaluationVisitoryFactory(\n isDecoratedAnonymousClassExpression,\n visitClass,\n );\n\n function visitClass(\n path: NodePath<t.Class>,\n state: PluginPass,\n className: string | t.Identifier | t.StringLiteral | undefined,\n ) {\n if (VISITED.has(path)) return;\n const { node } = path;\n className ??= node.id?.name;\n const newPath = transformClass(\n path,\n state,\n constantSuper,\n version,\n className,\n namedEvaluationVisitor,\n );\n if (newPath) {\n VISITED.add(newPath);\n return;\n }\n VISITED.add(path);\n }\n\n return {\n name: \"proposal-decorators\",\n inherits: syntaxDecorators,\n\n visitor: {\n ExportDefaultDeclaration(path, state) {\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 isDecorated(declaration)\n ) {\n const isAnonymous = !declaration.id;\n const updatedVarDeclarationPath = splitExportDeclaration(\n path,\n ) as unknown as NodePath<t.ClassDeclaration>;\n if (isAnonymous) {\n visitClass(\n updatedVarDeclarationPath,\n state,\n t.stringLiteral(\"default\"),\n );\n }\n }\n },\n ExportNamedDeclaration(path) {\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 isDecorated(declaration)\n ) {\n splitExportDeclaration(path);\n }\n },\n\n Class(path, state) {\n visitClass(path, state, undefined);\n },\n\n ...namedEvaluationVisitor,\n },\n };\n}\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.23.5",
3
+ "version": "7.23.6",
4
4
  "author": "The Babel Team (https://babel.dev/team)",
5
5
  "license": "MIT",
6
6
  "publishConfig": {
@@ -20,9 +20,10 @@
20
20
  "decorators"
21
21
  ],
22
22
  "dependencies": {
23
- "@babel/helper-create-class-features-plugin": "^7.23.5",
23
+ "@babel/helper-create-class-features-plugin": "^7.23.6",
24
24
  "@babel/helper-plugin-utils": "^7.22.5",
25
25
  "@babel/helper-replace-supers": "^7.22.20",
26
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
26
27
  "@babel/helper-split-export-declaration": "^7.22.6",
27
28
  "@babel/plugin-syntax-decorators": "^7.23.3"
28
29
  },
@@ -30,9 +31,9 @@
30
31
  "@babel/core": "^7.0.0-0"
31
32
  },
32
33
  "devDependencies": {
33
- "@babel/core": "^7.23.5",
34
+ "@babel/core": "^7.23.6",
34
35
  "@babel/helper-plugin-test-runner": "^7.22.5",
35
- "@babel/traverse": "^7.23.5",
36
+ "@babel/traverse": "^7.23.6",
36
37
  "@types/charcodes": "^0.2.0",
37
38
  "array.prototype.concat": "^1.0.2",
38
39
  "babel-plugin-polyfill-es-shims": "^0.10.0",