typescript 5.4.0-dev.20240105 → 5.4.0-dev.20240106

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/tsc.js CHANGED
@@ -18,7 +18,7 @@ and limitations under the License.
18
18
 
19
19
  // src/compiler/corePublic.ts
20
20
  var versionMajorMinor = "5.4";
21
- var version = `${versionMajorMinor}.0-dev.20240105`;
21
+ var version = `${versionMajorMinor}.0-dev.20240106`;
22
22
 
23
23
  // src/compiler/core.ts
24
24
  var emptyArray = [];
@@ -10860,17 +10860,6 @@ function isMethodOrAccessor(node) {
10860
10860
  return false;
10861
10861
  }
10862
10862
  }
10863
- function isNamedClassElement(node) {
10864
- switch (node.kind) {
10865
- case 174 /* MethodDeclaration */:
10866
- case 177 /* GetAccessor */:
10867
- case 178 /* SetAccessor */:
10868
- case 172 /* PropertyDeclaration */:
10869
- return true;
10870
- default:
10871
- return false;
10872
- }
10873
- }
10874
10863
  function isModifierLike(node) {
10875
10864
  return isModifier(node) || isDecorator(node);
10876
10865
  }
@@ -93403,22 +93392,49 @@ function transformESDecorators(context) {
93403
93392
  }
93404
93393
  function createClassInfo(node) {
93405
93394
  const metadataReference = factory2.createUniqueName("_metadata", 16 /* Optimistic */ | 32 /* FileLevel */);
93406
- let instanceExtraInitializersName;
93407
- let staticExtraInitializersName;
93395
+ let instanceMethodExtraInitializersName;
93396
+ let staticMethodExtraInitializersName;
93408
93397
  let hasStaticInitializers = false;
93409
93398
  let hasNonAmbientInstanceFields = false;
93410
93399
  let hasStaticPrivateClassElements = false;
93400
+ let classThis2;
93401
+ let pendingStaticInitializers;
93402
+ let pendingInstanceInitializers;
93403
+ if (nodeIsDecorated(
93404
+ /*useLegacyDecorators*/
93405
+ false,
93406
+ node
93407
+ )) {
93408
+ const needsUniqueClassThis = some(node.members, (member) => (isPrivateIdentifierClassElementDeclaration(member) || isAutoAccessorPropertyDeclaration(member)) && hasStaticModifier(member));
93409
+ classThis2 = factory2.createUniqueName(
93410
+ "_classThis",
93411
+ needsUniqueClassThis ? 16 /* Optimistic */ | 8 /* ReservedInNestedScopes */ : 16 /* Optimistic */ | 32 /* FileLevel */
93412
+ );
93413
+ }
93411
93414
  for (const member of node.members) {
93412
- if (isNamedClassElement(member) && nodeOrChildIsDecorated(
93415
+ if (isMethodOrAccessor(member) && nodeOrChildIsDecorated(
93413
93416
  /*useLegacyDecorators*/
93414
93417
  false,
93415
93418
  member,
93416
93419
  node
93417
93420
  )) {
93418
93421
  if (hasStaticModifier(member)) {
93419
- staticExtraInitializersName ?? (staticExtraInitializersName = factory2.createUniqueName("_staticExtraInitializers", 16 /* Optimistic */ | 32 /* FileLevel */));
93422
+ if (!staticMethodExtraInitializersName) {
93423
+ staticMethodExtraInitializersName = factory2.createUniqueName("_staticExtraInitializers", 16 /* Optimistic */ | 32 /* FileLevel */);
93424
+ const initializer = emitHelpers().createRunInitializersHelper(classThis2 ?? factory2.createThis(), staticMethodExtraInitializersName);
93425
+ setSourceMapRange(initializer, node.name ?? moveRangePastDecorators(node));
93426
+ pendingStaticInitializers ?? (pendingStaticInitializers = []);
93427
+ pendingStaticInitializers.push(initializer);
93428
+ }
93420
93429
  } else {
93421
- instanceExtraInitializersName ?? (instanceExtraInitializersName = factory2.createUniqueName("_instanceExtraInitializers", 16 /* Optimistic */ | 32 /* FileLevel */));
93430
+ if (!instanceMethodExtraInitializersName) {
93431
+ instanceMethodExtraInitializersName = factory2.createUniqueName("_instanceExtraInitializers", 16 /* Optimistic */ | 32 /* FileLevel */);
93432
+ const initializer = emitHelpers().createRunInitializersHelper(factory2.createThis(), instanceMethodExtraInitializersName);
93433
+ setSourceMapRange(initializer, node.name ?? moveRangePastDecorators(node));
93434
+ pendingInstanceInitializers ?? (pendingInstanceInitializers = []);
93435
+ pendingInstanceInitializers.push(initializer);
93436
+ }
93437
+ instanceMethodExtraInitializersName ?? (instanceMethodExtraInitializersName = factory2.createUniqueName("_instanceExtraInitializers", 16 /* Optimistic */ | 32 /* FileLevel */));
93422
93438
  }
93423
93439
  }
93424
93440
  if (isClassStaticBlockDeclaration(member)) {
@@ -93435,18 +93451,21 @@ function transformESDecorators(context) {
93435
93451
  if ((isPrivateIdentifierClassElementDeclaration(member) || isAutoAccessorPropertyDeclaration(member)) && hasStaticModifier(member)) {
93436
93452
  hasStaticPrivateClassElements = true;
93437
93453
  }
93438
- if (staticExtraInitializersName && instanceExtraInitializersName && hasStaticInitializers && hasNonAmbientInstanceFields && hasStaticPrivateClassElements) {
93454
+ if (staticMethodExtraInitializersName && instanceMethodExtraInitializersName && hasStaticInitializers && hasNonAmbientInstanceFields && hasStaticPrivateClassElements) {
93439
93455
  break;
93440
93456
  }
93441
93457
  }
93442
93458
  return {
93443
93459
  class: node,
93460
+ classThis: classThis2,
93444
93461
  metadataReference,
93445
- instanceExtraInitializersName,
93446
- staticExtraInitializersName,
93462
+ instanceMethodExtraInitializersName,
93463
+ staticMethodExtraInitializersName,
93447
93464
  hasStaticInitializers,
93448
93465
  hasNonAmbientInstanceFields,
93449
- hasStaticPrivateClassElements
93466
+ hasStaticPrivateClassElements,
93467
+ pendingStaticInitializers,
93468
+ pendingInstanceInitializers
93450
93469
  };
93451
93470
  }
93452
93471
  function transformClassLike(node) {
@@ -93479,11 +93498,7 @@ function transformESDecorators(context) {
93479
93498
  classInfo2.classDecoratorsName = factory2.createUniqueName("_classDecorators", 16 /* Optimistic */ | 32 /* FileLevel */);
93480
93499
  classInfo2.classDescriptorName = factory2.createUniqueName("_classDescriptor", 16 /* Optimistic */ | 32 /* FileLevel */);
93481
93500
  classInfo2.classExtraInitializersName = factory2.createUniqueName("_classExtraInitializers", 16 /* Optimistic */ | 32 /* FileLevel */);
93482
- const needsUniqueClassThis = some(node.members, (member) => (isPrivateIdentifierClassElementDeclaration(member) || isAutoAccessorPropertyDeclaration(member)) && hasStaticModifier(member));
93483
- classInfo2.classThis = factory2.createUniqueName(
93484
- "_classThis",
93485
- needsUniqueClassThis ? 16 /* Optimistic */ | 8 /* ReservedInNestedScopes */ : 16 /* Optimistic */ | 32 /* FileLevel */
93486
- );
93501
+ Debug.assertIsDefined(classInfo2.classThis);
93487
93502
  classDefinitionStatements.push(
93488
93503
  createLet(classInfo2.classDecoratorsName, factory2.createArrayLiteralExpression(classDecorators)),
93489
93504
  createLet(classInfo2.classDescriptorName),
@@ -93515,7 +93530,9 @@ function transformESDecorators(context) {
93515
93530
  const renamedClassThis = classInfo2.classThis ?? factory2.createThis();
93516
93531
  enterClass(classInfo2);
93517
93532
  leadingBlockStatements = append(leadingBlockStatements, createMetadata(classInfo2.metadataReference, classInfo2.classSuper));
93518
- let members = visitNodes2(node.members, classElementVisitor, isClassElement);
93533
+ let members = node.members;
93534
+ members = visitNodes2(members, (node2) => isConstructorDeclaration(node2) ? node2 : classElementVisitor(node2), isClassElement);
93535
+ members = visitNodes2(members, (node2) => isConstructorDeclaration(node2) ? classElementVisitor(node2) : node2, isClassElement);
93519
93536
  if (pendingExpressions) {
93520
93537
  let outerThis;
93521
93538
  for (let expression of pendingExpressions) {
@@ -93540,7 +93557,7 @@ function transformESDecorators(context) {
93540
93557
  pendingExpressions = void 0;
93541
93558
  }
93542
93559
  exitClass();
93543
- if (classInfo2.instanceExtraInitializersName && !getFirstConstructorWithBody(node)) {
93560
+ if (some(classInfo2.pendingInstanceInitializers) && !getFirstConstructorWithBody(node)) {
93544
93561
  const initializerStatements = prepareConstructor(node, classInfo2);
93545
93562
  if (initializerStatements) {
93546
93563
  const extendsClauseElement = getEffectiveBaseTypeNode(node);
@@ -93570,14 +93587,14 @@ function transformESDecorators(context) {
93570
93587
  );
93571
93588
  }
93572
93589
  }
93573
- if (classInfo2.staticExtraInitializersName) {
93590
+ if (classInfo2.staticMethodExtraInitializersName) {
93574
93591
  classDefinitionStatements.push(
93575
- createLet(classInfo2.staticExtraInitializersName, factory2.createArrayLiteralExpression())
93592
+ createLet(classInfo2.staticMethodExtraInitializersName, factory2.createArrayLiteralExpression())
93576
93593
  );
93577
93594
  }
93578
- if (classInfo2.instanceExtraInitializersName) {
93595
+ if (classInfo2.instanceMethodExtraInitializersName) {
93579
93596
  classDefinitionStatements.push(
93580
- createLet(classInfo2.instanceExtraInitializersName, factory2.createArrayLiteralExpression())
93597
+ createLet(classInfo2.instanceMethodExtraInitializersName, factory2.createArrayLiteralExpression())
93581
93598
  );
93582
93599
  }
93583
93600
  if (classInfo2.memberInfos) {
@@ -93587,6 +93604,9 @@ function transformESDecorators(context) {
93587
93604
  if (memberInfo.memberInitializersName) {
93588
93605
  classDefinitionStatements.push(createLet(memberInfo.memberInitializersName, factory2.createArrayLiteralExpression()));
93589
93606
  }
93607
+ if (memberInfo.memberExtraInitializersName) {
93608
+ classDefinitionStatements.push(createLet(memberInfo.memberExtraInitializersName, factory2.createArrayLiteralExpression()));
93609
+ }
93590
93610
  if (memberInfo.memberDescriptorName) {
93591
93611
  classDefinitionStatements.push(createLet(memberInfo.memberDescriptorName));
93592
93612
  }
@@ -93600,6 +93620,9 @@ function transformESDecorators(context) {
93600
93620
  if (memberInfo.memberInitializersName) {
93601
93621
  classDefinitionStatements.push(createLet(memberInfo.memberInitializersName, factory2.createArrayLiteralExpression()));
93602
93622
  }
93623
+ if (memberInfo.memberExtraInitializersName) {
93624
+ classDefinitionStatements.push(createLet(memberInfo.memberExtraInitializersName, factory2.createArrayLiteralExpression()));
93625
+ }
93603
93626
  if (memberInfo.memberDescriptorName) {
93604
93627
  classDefinitionStatements.push(createLet(memberInfo.memberDescriptorName));
93605
93628
  }
@@ -93633,11 +93656,13 @@ function transformESDecorators(context) {
93633
93656
  leadingBlockStatements.push(factory2.createExpressionStatement(classReferenceAssignment));
93634
93657
  }
93635
93658
  leadingBlockStatements.push(createSymbolMetadata(renamedClassThis, classInfo2.metadataReference));
93636
- if (classInfo2.staticExtraInitializersName) {
93637
- const runStaticInitializersHelper = emitHelpers().createRunInitializersHelper(renamedClassThis, classInfo2.staticExtraInitializersName);
93638
- const runStaticInitializersStatement = factory2.createExpressionStatement(runStaticInitializersHelper);
93639
- setSourceMapRange(runStaticInitializersStatement, node.name ?? moveRangePastDecorators(node));
93640
- leadingBlockStatements = append(leadingBlockStatements, runStaticInitializersStatement);
93659
+ if (some(classInfo2.pendingStaticInitializers)) {
93660
+ for (const initializer of classInfo2.pendingStaticInitializers) {
93661
+ const initializerStatement = factory2.createExpressionStatement(initializer);
93662
+ setSourceMapRange(initializerStatement, getSourceMapRange(initializer));
93663
+ trailingBlockStatements = append(trailingBlockStatements, initializerStatement);
93664
+ }
93665
+ classInfo2.pendingStaticInitializers = void 0;
93641
93666
  }
93642
93667
  if (classInfo2.classExtraInitializersName) {
93643
93668
  const runClassInitializersHelper = emitHelpers().createRunInitializersHelper(renamedClassThis, classInfo2.classExtraInitializersName);
@@ -93868,16 +93893,14 @@ function transformESDecorators(context) {
93868
93893
  }
93869
93894
  }
93870
93895
  function prepareConstructor(_parent, classInfo2) {
93871
- if (classInfo2.instanceExtraInitializersName && !classInfo2.hasNonAmbientInstanceFields) {
93896
+ if (some(classInfo2.pendingInstanceInitializers)) {
93872
93897
  const statements = [];
93873
93898
  statements.push(
93874
93899
  factory2.createExpressionStatement(
93875
- emitHelpers().createRunInitializersHelper(
93876
- factory2.createThis(),
93877
- classInfo2.instanceExtraInitializersName
93878
- )
93900
+ factory2.inlineExpressions(classInfo2.pendingInstanceInitializers)
93879
93901
  )
93880
93902
  );
93903
+ classInfo2.pendingInstanceInitializers = void 0;
93881
93904
  return statements;
93882
93905
  }
93883
93906
  }
@@ -93957,6 +93980,7 @@ function transformESDecorators(context) {
93957
93980
  let referencedName;
93958
93981
  let name;
93959
93982
  let initializersName;
93983
+ let extraInitializersName;
93960
93984
  let thisArg;
93961
93985
  let descriptorName;
93962
93986
  if (!classInfo2) {
@@ -94014,20 +94038,22 @@ function transformESDecorators(context) {
94014
94038
  },
94015
94039
  metadata: classInfo2.metadataReference
94016
94040
  };
94017
- const extraInitializers = isStatic(member) ? classInfo2.staticExtraInitializersName ?? (classInfo2.staticExtraInitializersName = factory2.createUniqueName("_staticExtraInitializers", 16 /* Optimistic */ | 32 /* FileLevel */)) : classInfo2.instanceExtraInitializersName ?? (classInfo2.instanceExtraInitializersName = factory2.createUniqueName("_instanceExtraInitializers", 16 /* Optimistic */ | 32 /* FileLevel */));
94018
94041
  if (isMethodOrAccessor(member)) {
94042
+ const methodExtraInitializersName = isStatic(member) ? classInfo2.staticMethodExtraInitializersName : classInfo2.instanceMethodExtraInitializersName;
94043
+ Debug.assertIsDefined(methodExtraInitializersName);
94019
94044
  let descriptor;
94020
94045
  if (isPrivateIdentifierClassElementDeclaration(member) && createDescriptor) {
94021
94046
  descriptor = createDescriptor(member, visitNodes2(modifiers, (node) => tryCast(node, isAsyncModifier), isModifier));
94022
94047
  memberInfo.memberDescriptorName = descriptorName = createHelperVariable(member, "descriptor");
94023
94048
  descriptor = factory2.createAssignment(descriptorName, descriptor);
94024
94049
  }
94025
- const esDecorateExpression = emitHelpers().createESDecorateHelper(factory2.createThis(), descriptor ?? factory2.createNull(), memberDecoratorsName, context2, factory2.createNull(), extraInitializers);
94050
+ const esDecorateExpression = emitHelpers().createESDecorateHelper(factory2.createThis(), descriptor ?? factory2.createNull(), memberDecoratorsName, context2, factory2.createNull(), methodExtraInitializersName);
94026
94051
  const esDecorateStatement = factory2.createExpressionStatement(esDecorateExpression);
94027
94052
  setSourceMapRange(esDecorateStatement, moveRangePastDecorators(member));
94028
94053
  statements.push(esDecorateStatement);
94029
94054
  } else if (isPropertyDeclaration(member)) {
94030
94055
  initializersName = memberInfo.memberInitializersName ?? (memberInfo.memberInitializersName = createHelperVariable(member, "initializers"));
94056
+ extraInitializersName = memberInfo.memberExtraInitializersName ?? (memberInfo.memberExtraInitializersName = createHelperVariable(member, "extraInitializers"));
94031
94057
  if (isStatic(member)) {
94032
94058
  thisArg = classInfo2.classThis;
94033
94059
  }
@@ -94047,7 +94073,7 @@ function transformESDecorators(context) {
94047
94073
  memberDecoratorsName,
94048
94074
  context2,
94049
94075
  initializersName,
94050
- extraInitializers
94076
+ extraInitializersName
94051
94077
  );
94052
94078
  const esDecorateStatement = factory2.createExpressionStatement(esDecorateExpression);
94053
94079
  setSourceMapRange(esDecorateStatement, moveRangePastDecorators(member));
@@ -94062,7 +94088,7 @@ function transformESDecorators(context) {
94062
94088
  if (!some(modifiers) && (isMethodDeclaration(member) || isPropertyDeclaration(member))) {
94063
94089
  setEmitFlags(name, 1024 /* NoLeadingComments */);
94064
94090
  }
94065
- return { modifiers, referencedName, name, initializersName, descriptorName, thisArg };
94091
+ return { modifiers, referencedName, name, initializersName, extraInitializersName, descriptorName, thisArg };
94066
94092
  }
94067
94093
  function visitMethodDeclaration(node) {
94068
94094
  enterClassElement(node);
@@ -94135,9 +94161,27 @@ function transformESDecorators(context) {
94135
94161
  result = visitEachChild(node, visitor, context);
94136
94162
  classThis = savedClassThis;
94137
94163
  } else {
94138
- if (classInfo)
94164
+ node = visitEachChild(node, visitor, context);
94165
+ result = node;
94166
+ if (classInfo) {
94139
94167
  classInfo.hasStaticInitializers = true;
94140
- result = visitEachChild(node, visitor, context);
94168
+ if (some(classInfo.pendingStaticInitializers)) {
94169
+ const statements = [];
94170
+ for (const initializer of classInfo.pendingStaticInitializers) {
94171
+ const initializerStatement = factory2.createExpressionStatement(initializer);
94172
+ setSourceMapRange(initializerStatement, getSourceMapRange(initializer));
94173
+ statements.push(initializerStatement);
94174
+ }
94175
+ const body = factory2.createBlock(
94176
+ statements,
94177
+ /*multiLine*/
94178
+ true
94179
+ );
94180
+ const staticBlock = factory2.createClassStaticBlockDeclaration(body);
94181
+ result = [staticBlock, result];
94182
+ classInfo.pendingStaticInitializers = void 0;
94183
+ }
94184
+ }
94141
94185
  }
94142
94186
  exitClassElement();
94143
94187
  return result;
@@ -94148,7 +94192,7 @@ function transformESDecorators(context) {
94148
94192
  }
94149
94193
  enterClassElement(node);
94150
94194
  Debug.assert(!isAmbientPropertyDeclaration(node), "Not yet implemented.");
94151
- const { modifiers, name, initializersName, descriptorName, thisArg } = partialTransformClassElement(node, classInfo, hasAccessorModifier(node) ? createAccessorPropertyDescriptorObject : void 0);
94195
+ const { modifiers, name, initializersName, extraInitializersName, descriptorName, thisArg } = partialTransformClassElement(node, classInfo, hasAccessorModifier(node) ? createAccessorPropertyDescriptorObject : void 0);
94152
94196
  startLexicalEnvironment();
94153
94197
  let initializer = visitNode(node.initializer, visitor, isExpression);
94154
94198
  if (initializersName) {
@@ -94158,17 +94202,6 @@ function transformESDecorators(context) {
94158
94202
  initializer ?? factory2.createVoidZero()
94159
94203
  );
94160
94204
  }
94161
- if (!isStatic(node) && (classInfo == null ? void 0 : classInfo.instanceExtraInitializersName) && !(classInfo == null ? void 0 : classInfo.hasInjectedInstanceInitializers)) {
94162
- classInfo.hasInjectedInstanceInitializers = true;
94163
- initializer ?? (initializer = factory2.createVoidZero());
94164
- initializer = factory2.createParenthesizedExpression(factory2.createComma(
94165
- emitHelpers().createRunInitializersHelper(
94166
- factory2.createThis(),
94167
- classInfo.instanceExtraInitializersName
94168
- ),
94169
- initializer
94170
- ));
94171
- }
94172
94205
  if (isStatic(node) && classInfo && initializer) {
94173
94206
  classInfo.hasStaticInitializers = true;
94174
94207
  }
@@ -94179,6 +94212,41 @@ function transformESDecorators(context) {
94179
94212
  factory2.createReturnStatement(initializer)
94180
94213
  ]);
94181
94214
  }
94215
+ if (classInfo) {
94216
+ if (isStatic(node)) {
94217
+ initializer = injectPendingInitializers(
94218
+ classInfo,
94219
+ /*isStatic*/
94220
+ true,
94221
+ initializer
94222
+ );
94223
+ if (extraInitializersName) {
94224
+ classInfo.pendingStaticInitializers ?? (classInfo.pendingStaticInitializers = []);
94225
+ classInfo.pendingStaticInitializers.push(
94226
+ emitHelpers().createRunInitializersHelper(
94227
+ classInfo.classThis ?? factory2.createThis(),
94228
+ extraInitializersName
94229
+ )
94230
+ );
94231
+ }
94232
+ } else {
94233
+ initializer = injectPendingInitializers(
94234
+ classInfo,
94235
+ /*isStatic*/
94236
+ false,
94237
+ initializer
94238
+ );
94239
+ if (extraInitializersName) {
94240
+ classInfo.pendingInstanceInitializers ?? (classInfo.pendingInstanceInitializers = []);
94241
+ classInfo.pendingInstanceInitializers.push(
94242
+ emitHelpers().createRunInitializersHelper(
94243
+ factory2.createThis(),
94244
+ extraInitializersName
94245
+ )
94246
+ );
94247
+ }
94248
+ }
94249
+ }
94182
94250
  exitClassElement();
94183
94251
  if (hasAccessorModifier(node) && descriptorName) {
94184
94252
  const commentRange = getCommentRange(node);
@@ -94593,19 +94661,41 @@ function transformESDecorators(context) {
94593
94661
  const expression = visitNode(node.expression, visitorFunc, isExpression);
94594
94662
  return factory2.updatePartiallyEmittedExpression(node, expression);
94595
94663
  }
94596
- function injectPendingExpressions(expression) {
94597
- if (some(pendingExpressions)) {
94598
- if (isParenthesizedExpression(expression)) {
94599
- pendingExpressions.push(expression.expression);
94600
- expression = factory2.updateParenthesizedExpression(expression, factory2.inlineExpressions(pendingExpressions));
94664
+ function injectPendingExpressionsCommon(pendingExpressions2, expression) {
94665
+ if (some(pendingExpressions2)) {
94666
+ if (expression) {
94667
+ if (isParenthesizedExpression(expression)) {
94668
+ pendingExpressions2.push(expression.expression);
94669
+ expression = factory2.updateParenthesizedExpression(expression, factory2.inlineExpressions(pendingExpressions2));
94670
+ } else {
94671
+ pendingExpressions2.push(expression);
94672
+ expression = factory2.inlineExpressions(pendingExpressions2);
94673
+ }
94601
94674
  } else {
94602
- pendingExpressions.push(expression);
94603
- expression = factory2.inlineExpressions(pendingExpressions);
94675
+ expression = factory2.inlineExpressions(pendingExpressions2);
94604
94676
  }
94605
- pendingExpressions = void 0;
94606
94677
  }
94607
94678
  return expression;
94608
94679
  }
94680
+ function injectPendingExpressions(expression) {
94681
+ const result = injectPendingExpressionsCommon(pendingExpressions, expression);
94682
+ Debug.assertIsDefined(result);
94683
+ if (result !== expression) {
94684
+ pendingExpressions = void 0;
94685
+ }
94686
+ return result;
94687
+ }
94688
+ function injectPendingInitializers(classInfo2, isStatic2, expression) {
94689
+ const result = injectPendingExpressionsCommon(isStatic2 ? classInfo2.pendingStaticInitializers : classInfo2.pendingInstanceInitializers, expression);
94690
+ if (result !== expression) {
94691
+ if (isStatic2) {
94692
+ classInfo2.pendingStaticInitializers = void 0;
94693
+ } else {
94694
+ classInfo2.pendingInstanceInitializers = void 0;
94695
+ }
94696
+ }
94697
+ return result;
94698
+ }
94609
94699
  function transformAllDecoratorsOfDeclaration(allDecorators) {
94610
94700
  if (!allDecorators) {
94611
94701
  return void 0;
package/lib/tsserver.js CHANGED
@@ -2341,7 +2341,7 @@ module.exports = __toCommonJS(server_exports);
2341
2341
 
2342
2342
  // src/compiler/corePublic.ts
2343
2343
  var versionMajorMinor = "5.4";
2344
- var version = `${versionMajorMinor}.0-dev.20240105`;
2344
+ var version = `${versionMajorMinor}.0-dev.20240106`;
2345
2345
  var Comparison = /* @__PURE__ */ ((Comparison3) => {
2346
2346
  Comparison3[Comparison3["LessThan"] = -1] = "LessThan";
2347
2347
  Comparison3[Comparison3["EqualTo"] = 0] = "EqualTo";
@@ -98302,22 +98302,49 @@ function transformESDecorators(context) {
98302
98302
  }
98303
98303
  function createClassInfo(node) {
98304
98304
  const metadataReference = factory2.createUniqueName("_metadata", 16 /* Optimistic */ | 32 /* FileLevel */);
98305
- let instanceExtraInitializersName;
98306
- let staticExtraInitializersName;
98305
+ let instanceMethodExtraInitializersName;
98306
+ let staticMethodExtraInitializersName;
98307
98307
  let hasStaticInitializers = false;
98308
98308
  let hasNonAmbientInstanceFields = false;
98309
98309
  let hasStaticPrivateClassElements = false;
98310
+ let classThis2;
98311
+ let pendingStaticInitializers;
98312
+ let pendingInstanceInitializers;
98313
+ if (nodeIsDecorated(
98314
+ /*useLegacyDecorators*/
98315
+ false,
98316
+ node
98317
+ )) {
98318
+ const needsUniqueClassThis = some(node.members, (member) => (isPrivateIdentifierClassElementDeclaration(member) || isAutoAccessorPropertyDeclaration(member)) && hasStaticModifier(member));
98319
+ classThis2 = factory2.createUniqueName(
98320
+ "_classThis",
98321
+ needsUniqueClassThis ? 16 /* Optimistic */ | 8 /* ReservedInNestedScopes */ : 16 /* Optimistic */ | 32 /* FileLevel */
98322
+ );
98323
+ }
98310
98324
  for (const member of node.members) {
98311
- if (isNamedClassElement(member) && nodeOrChildIsDecorated(
98325
+ if (isMethodOrAccessor(member) && nodeOrChildIsDecorated(
98312
98326
  /*useLegacyDecorators*/
98313
98327
  false,
98314
98328
  member,
98315
98329
  node
98316
98330
  )) {
98317
98331
  if (hasStaticModifier(member)) {
98318
- staticExtraInitializersName ?? (staticExtraInitializersName = factory2.createUniqueName("_staticExtraInitializers", 16 /* Optimistic */ | 32 /* FileLevel */));
98332
+ if (!staticMethodExtraInitializersName) {
98333
+ staticMethodExtraInitializersName = factory2.createUniqueName("_staticExtraInitializers", 16 /* Optimistic */ | 32 /* FileLevel */);
98334
+ const initializer = emitHelpers().createRunInitializersHelper(classThis2 ?? factory2.createThis(), staticMethodExtraInitializersName);
98335
+ setSourceMapRange(initializer, node.name ?? moveRangePastDecorators(node));
98336
+ pendingStaticInitializers ?? (pendingStaticInitializers = []);
98337
+ pendingStaticInitializers.push(initializer);
98338
+ }
98319
98339
  } else {
98320
- instanceExtraInitializersName ?? (instanceExtraInitializersName = factory2.createUniqueName("_instanceExtraInitializers", 16 /* Optimistic */ | 32 /* FileLevel */));
98340
+ if (!instanceMethodExtraInitializersName) {
98341
+ instanceMethodExtraInitializersName = factory2.createUniqueName("_instanceExtraInitializers", 16 /* Optimistic */ | 32 /* FileLevel */);
98342
+ const initializer = emitHelpers().createRunInitializersHelper(factory2.createThis(), instanceMethodExtraInitializersName);
98343
+ setSourceMapRange(initializer, node.name ?? moveRangePastDecorators(node));
98344
+ pendingInstanceInitializers ?? (pendingInstanceInitializers = []);
98345
+ pendingInstanceInitializers.push(initializer);
98346
+ }
98347
+ instanceMethodExtraInitializersName ?? (instanceMethodExtraInitializersName = factory2.createUniqueName("_instanceExtraInitializers", 16 /* Optimistic */ | 32 /* FileLevel */));
98321
98348
  }
98322
98349
  }
98323
98350
  if (isClassStaticBlockDeclaration(member)) {
@@ -98334,18 +98361,21 @@ function transformESDecorators(context) {
98334
98361
  if ((isPrivateIdentifierClassElementDeclaration(member) || isAutoAccessorPropertyDeclaration(member)) && hasStaticModifier(member)) {
98335
98362
  hasStaticPrivateClassElements = true;
98336
98363
  }
98337
- if (staticExtraInitializersName && instanceExtraInitializersName && hasStaticInitializers && hasNonAmbientInstanceFields && hasStaticPrivateClassElements) {
98364
+ if (staticMethodExtraInitializersName && instanceMethodExtraInitializersName && hasStaticInitializers && hasNonAmbientInstanceFields && hasStaticPrivateClassElements) {
98338
98365
  break;
98339
98366
  }
98340
98367
  }
98341
98368
  return {
98342
98369
  class: node,
98370
+ classThis: classThis2,
98343
98371
  metadataReference,
98344
- instanceExtraInitializersName,
98345
- staticExtraInitializersName,
98372
+ instanceMethodExtraInitializersName,
98373
+ staticMethodExtraInitializersName,
98346
98374
  hasStaticInitializers,
98347
98375
  hasNonAmbientInstanceFields,
98348
- hasStaticPrivateClassElements
98376
+ hasStaticPrivateClassElements,
98377
+ pendingStaticInitializers,
98378
+ pendingInstanceInitializers
98349
98379
  };
98350
98380
  }
98351
98381
  function transformClassLike(node) {
@@ -98378,11 +98408,7 @@ function transformESDecorators(context) {
98378
98408
  classInfo2.classDecoratorsName = factory2.createUniqueName("_classDecorators", 16 /* Optimistic */ | 32 /* FileLevel */);
98379
98409
  classInfo2.classDescriptorName = factory2.createUniqueName("_classDescriptor", 16 /* Optimistic */ | 32 /* FileLevel */);
98380
98410
  classInfo2.classExtraInitializersName = factory2.createUniqueName("_classExtraInitializers", 16 /* Optimistic */ | 32 /* FileLevel */);
98381
- const needsUniqueClassThis = some(node.members, (member) => (isPrivateIdentifierClassElementDeclaration(member) || isAutoAccessorPropertyDeclaration(member)) && hasStaticModifier(member));
98382
- classInfo2.classThis = factory2.createUniqueName(
98383
- "_classThis",
98384
- needsUniqueClassThis ? 16 /* Optimistic */ | 8 /* ReservedInNestedScopes */ : 16 /* Optimistic */ | 32 /* FileLevel */
98385
- );
98411
+ Debug.assertIsDefined(classInfo2.classThis);
98386
98412
  classDefinitionStatements.push(
98387
98413
  createLet(classInfo2.classDecoratorsName, factory2.createArrayLiteralExpression(classDecorators)),
98388
98414
  createLet(classInfo2.classDescriptorName),
@@ -98414,7 +98440,9 @@ function transformESDecorators(context) {
98414
98440
  const renamedClassThis = classInfo2.classThis ?? factory2.createThis();
98415
98441
  enterClass(classInfo2);
98416
98442
  leadingBlockStatements = append(leadingBlockStatements, createMetadata(classInfo2.metadataReference, classInfo2.classSuper));
98417
- let members = visitNodes2(node.members, classElementVisitor, isClassElement);
98443
+ let members = node.members;
98444
+ members = visitNodes2(members, (node2) => isConstructorDeclaration(node2) ? node2 : classElementVisitor(node2), isClassElement);
98445
+ members = visitNodes2(members, (node2) => isConstructorDeclaration(node2) ? classElementVisitor(node2) : node2, isClassElement);
98418
98446
  if (pendingExpressions) {
98419
98447
  let outerThis;
98420
98448
  for (let expression of pendingExpressions) {
@@ -98439,7 +98467,7 @@ function transformESDecorators(context) {
98439
98467
  pendingExpressions = void 0;
98440
98468
  }
98441
98469
  exitClass();
98442
- if (classInfo2.instanceExtraInitializersName && !getFirstConstructorWithBody(node)) {
98470
+ if (some(classInfo2.pendingInstanceInitializers) && !getFirstConstructorWithBody(node)) {
98443
98471
  const initializerStatements = prepareConstructor(node, classInfo2);
98444
98472
  if (initializerStatements) {
98445
98473
  const extendsClauseElement = getEffectiveBaseTypeNode(node);
@@ -98469,14 +98497,14 @@ function transformESDecorators(context) {
98469
98497
  );
98470
98498
  }
98471
98499
  }
98472
- if (classInfo2.staticExtraInitializersName) {
98500
+ if (classInfo2.staticMethodExtraInitializersName) {
98473
98501
  classDefinitionStatements.push(
98474
- createLet(classInfo2.staticExtraInitializersName, factory2.createArrayLiteralExpression())
98502
+ createLet(classInfo2.staticMethodExtraInitializersName, factory2.createArrayLiteralExpression())
98475
98503
  );
98476
98504
  }
98477
- if (classInfo2.instanceExtraInitializersName) {
98505
+ if (classInfo2.instanceMethodExtraInitializersName) {
98478
98506
  classDefinitionStatements.push(
98479
- createLet(classInfo2.instanceExtraInitializersName, factory2.createArrayLiteralExpression())
98507
+ createLet(classInfo2.instanceMethodExtraInitializersName, factory2.createArrayLiteralExpression())
98480
98508
  );
98481
98509
  }
98482
98510
  if (classInfo2.memberInfos) {
@@ -98486,6 +98514,9 @@ function transformESDecorators(context) {
98486
98514
  if (memberInfo.memberInitializersName) {
98487
98515
  classDefinitionStatements.push(createLet(memberInfo.memberInitializersName, factory2.createArrayLiteralExpression()));
98488
98516
  }
98517
+ if (memberInfo.memberExtraInitializersName) {
98518
+ classDefinitionStatements.push(createLet(memberInfo.memberExtraInitializersName, factory2.createArrayLiteralExpression()));
98519
+ }
98489
98520
  if (memberInfo.memberDescriptorName) {
98490
98521
  classDefinitionStatements.push(createLet(memberInfo.memberDescriptorName));
98491
98522
  }
@@ -98499,6 +98530,9 @@ function transformESDecorators(context) {
98499
98530
  if (memberInfo.memberInitializersName) {
98500
98531
  classDefinitionStatements.push(createLet(memberInfo.memberInitializersName, factory2.createArrayLiteralExpression()));
98501
98532
  }
98533
+ if (memberInfo.memberExtraInitializersName) {
98534
+ classDefinitionStatements.push(createLet(memberInfo.memberExtraInitializersName, factory2.createArrayLiteralExpression()));
98535
+ }
98502
98536
  if (memberInfo.memberDescriptorName) {
98503
98537
  classDefinitionStatements.push(createLet(memberInfo.memberDescriptorName));
98504
98538
  }
@@ -98532,11 +98566,13 @@ function transformESDecorators(context) {
98532
98566
  leadingBlockStatements.push(factory2.createExpressionStatement(classReferenceAssignment));
98533
98567
  }
98534
98568
  leadingBlockStatements.push(createSymbolMetadata(renamedClassThis, classInfo2.metadataReference));
98535
- if (classInfo2.staticExtraInitializersName) {
98536
- const runStaticInitializersHelper = emitHelpers().createRunInitializersHelper(renamedClassThis, classInfo2.staticExtraInitializersName);
98537
- const runStaticInitializersStatement = factory2.createExpressionStatement(runStaticInitializersHelper);
98538
- setSourceMapRange(runStaticInitializersStatement, node.name ?? moveRangePastDecorators(node));
98539
- leadingBlockStatements = append(leadingBlockStatements, runStaticInitializersStatement);
98569
+ if (some(classInfo2.pendingStaticInitializers)) {
98570
+ for (const initializer of classInfo2.pendingStaticInitializers) {
98571
+ const initializerStatement = factory2.createExpressionStatement(initializer);
98572
+ setSourceMapRange(initializerStatement, getSourceMapRange(initializer));
98573
+ trailingBlockStatements = append(trailingBlockStatements, initializerStatement);
98574
+ }
98575
+ classInfo2.pendingStaticInitializers = void 0;
98540
98576
  }
98541
98577
  if (classInfo2.classExtraInitializersName) {
98542
98578
  const runClassInitializersHelper = emitHelpers().createRunInitializersHelper(renamedClassThis, classInfo2.classExtraInitializersName);
@@ -98767,16 +98803,14 @@ function transformESDecorators(context) {
98767
98803
  }
98768
98804
  }
98769
98805
  function prepareConstructor(_parent, classInfo2) {
98770
- if (classInfo2.instanceExtraInitializersName && !classInfo2.hasNonAmbientInstanceFields) {
98806
+ if (some(classInfo2.pendingInstanceInitializers)) {
98771
98807
  const statements = [];
98772
98808
  statements.push(
98773
98809
  factory2.createExpressionStatement(
98774
- emitHelpers().createRunInitializersHelper(
98775
- factory2.createThis(),
98776
- classInfo2.instanceExtraInitializersName
98777
- )
98810
+ factory2.inlineExpressions(classInfo2.pendingInstanceInitializers)
98778
98811
  )
98779
98812
  );
98813
+ classInfo2.pendingInstanceInitializers = void 0;
98780
98814
  return statements;
98781
98815
  }
98782
98816
  }
@@ -98856,6 +98890,7 @@ function transformESDecorators(context) {
98856
98890
  let referencedName;
98857
98891
  let name;
98858
98892
  let initializersName;
98893
+ let extraInitializersName;
98859
98894
  let thisArg;
98860
98895
  let descriptorName;
98861
98896
  if (!classInfo2) {
@@ -98913,20 +98948,22 @@ function transformESDecorators(context) {
98913
98948
  },
98914
98949
  metadata: classInfo2.metadataReference
98915
98950
  };
98916
- const extraInitializers = isStatic(member) ? classInfo2.staticExtraInitializersName ?? (classInfo2.staticExtraInitializersName = factory2.createUniqueName("_staticExtraInitializers", 16 /* Optimistic */ | 32 /* FileLevel */)) : classInfo2.instanceExtraInitializersName ?? (classInfo2.instanceExtraInitializersName = factory2.createUniqueName("_instanceExtraInitializers", 16 /* Optimistic */ | 32 /* FileLevel */));
98917
98951
  if (isMethodOrAccessor(member)) {
98952
+ const methodExtraInitializersName = isStatic(member) ? classInfo2.staticMethodExtraInitializersName : classInfo2.instanceMethodExtraInitializersName;
98953
+ Debug.assertIsDefined(methodExtraInitializersName);
98918
98954
  let descriptor;
98919
98955
  if (isPrivateIdentifierClassElementDeclaration(member) && createDescriptor) {
98920
98956
  descriptor = createDescriptor(member, visitNodes2(modifiers, (node) => tryCast(node, isAsyncModifier), isModifier));
98921
98957
  memberInfo.memberDescriptorName = descriptorName = createHelperVariable(member, "descriptor");
98922
98958
  descriptor = factory2.createAssignment(descriptorName, descriptor);
98923
98959
  }
98924
- const esDecorateExpression = emitHelpers().createESDecorateHelper(factory2.createThis(), descriptor ?? factory2.createNull(), memberDecoratorsName, context2, factory2.createNull(), extraInitializers);
98960
+ const esDecorateExpression = emitHelpers().createESDecorateHelper(factory2.createThis(), descriptor ?? factory2.createNull(), memberDecoratorsName, context2, factory2.createNull(), methodExtraInitializersName);
98925
98961
  const esDecorateStatement = factory2.createExpressionStatement(esDecorateExpression);
98926
98962
  setSourceMapRange(esDecorateStatement, moveRangePastDecorators(member));
98927
98963
  statements.push(esDecorateStatement);
98928
98964
  } else if (isPropertyDeclaration(member)) {
98929
98965
  initializersName = memberInfo.memberInitializersName ?? (memberInfo.memberInitializersName = createHelperVariable(member, "initializers"));
98966
+ extraInitializersName = memberInfo.memberExtraInitializersName ?? (memberInfo.memberExtraInitializersName = createHelperVariable(member, "extraInitializers"));
98930
98967
  if (isStatic(member)) {
98931
98968
  thisArg = classInfo2.classThis;
98932
98969
  }
@@ -98946,7 +98983,7 @@ function transformESDecorators(context) {
98946
98983
  memberDecoratorsName,
98947
98984
  context2,
98948
98985
  initializersName,
98949
- extraInitializers
98986
+ extraInitializersName
98950
98987
  );
98951
98988
  const esDecorateStatement = factory2.createExpressionStatement(esDecorateExpression);
98952
98989
  setSourceMapRange(esDecorateStatement, moveRangePastDecorators(member));
@@ -98961,7 +98998,7 @@ function transformESDecorators(context) {
98961
98998
  if (!some(modifiers) && (isMethodDeclaration(member) || isPropertyDeclaration(member))) {
98962
98999
  setEmitFlags(name, 1024 /* NoLeadingComments */);
98963
99000
  }
98964
- return { modifiers, referencedName, name, initializersName, descriptorName, thisArg };
99001
+ return { modifiers, referencedName, name, initializersName, extraInitializersName, descriptorName, thisArg };
98965
99002
  }
98966
99003
  function visitMethodDeclaration(node) {
98967
99004
  enterClassElement(node);
@@ -99034,9 +99071,27 @@ function transformESDecorators(context) {
99034
99071
  result = visitEachChild(node, visitor, context);
99035
99072
  classThis = savedClassThis;
99036
99073
  } else {
99037
- if (classInfo)
99074
+ node = visitEachChild(node, visitor, context);
99075
+ result = node;
99076
+ if (classInfo) {
99038
99077
  classInfo.hasStaticInitializers = true;
99039
- result = visitEachChild(node, visitor, context);
99078
+ if (some(classInfo.pendingStaticInitializers)) {
99079
+ const statements = [];
99080
+ for (const initializer of classInfo.pendingStaticInitializers) {
99081
+ const initializerStatement = factory2.createExpressionStatement(initializer);
99082
+ setSourceMapRange(initializerStatement, getSourceMapRange(initializer));
99083
+ statements.push(initializerStatement);
99084
+ }
99085
+ const body = factory2.createBlock(
99086
+ statements,
99087
+ /*multiLine*/
99088
+ true
99089
+ );
99090
+ const staticBlock = factory2.createClassStaticBlockDeclaration(body);
99091
+ result = [staticBlock, result];
99092
+ classInfo.pendingStaticInitializers = void 0;
99093
+ }
99094
+ }
99040
99095
  }
99041
99096
  exitClassElement();
99042
99097
  return result;
@@ -99047,7 +99102,7 @@ function transformESDecorators(context) {
99047
99102
  }
99048
99103
  enterClassElement(node);
99049
99104
  Debug.assert(!isAmbientPropertyDeclaration(node), "Not yet implemented.");
99050
- const { modifiers, name, initializersName, descriptorName, thisArg } = partialTransformClassElement(node, classInfo, hasAccessorModifier(node) ? createAccessorPropertyDescriptorObject : void 0);
99105
+ const { modifiers, name, initializersName, extraInitializersName, descriptorName, thisArg } = partialTransformClassElement(node, classInfo, hasAccessorModifier(node) ? createAccessorPropertyDescriptorObject : void 0);
99051
99106
  startLexicalEnvironment();
99052
99107
  let initializer = visitNode(node.initializer, visitor, isExpression);
99053
99108
  if (initializersName) {
@@ -99057,17 +99112,6 @@ function transformESDecorators(context) {
99057
99112
  initializer ?? factory2.createVoidZero()
99058
99113
  );
99059
99114
  }
99060
- if (!isStatic(node) && (classInfo == null ? void 0 : classInfo.instanceExtraInitializersName) && !(classInfo == null ? void 0 : classInfo.hasInjectedInstanceInitializers)) {
99061
- classInfo.hasInjectedInstanceInitializers = true;
99062
- initializer ?? (initializer = factory2.createVoidZero());
99063
- initializer = factory2.createParenthesizedExpression(factory2.createComma(
99064
- emitHelpers().createRunInitializersHelper(
99065
- factory2.createThis(),
99066
- classInfo.instanceExtraInitializersName
99067
- ),
99068
- initializer
99069
- ));
99070
- }
99071
99115
  if (isStatic(node) && classInfo && initializer) {
99072
99116
  classInfo.hasStaticInitializers = true;
99073
99117
  }
@@ -99078,6 +99122,41 @@ function transformESDecorators(context) {
99078
99122
  factory2.createReturnStatement(initializer)
99079
99123
  ]);
99080
99124
  }
99125
+ if (classInfo) {
99126
+ if (isStatic(node)) {
99127
+ initializer = injectPendingInitializers(
99128
+ classInfo,
99129
+ /*isStatic*/
99130
+ true,
99131
+ initializer
99132
+ );
99133
+ if (extraInitializersName) {
99134
+ classInfo.pendingStaticInitializers ?? (classInfo.pendingStaticInitializers = []);
99135
+ classInfo.pendingStaticInitializers.push(
99136
+ emitHelpers().createRunInitializersHelper(
99137
+ classInfo.classThis ?? factory2.createThis(),
99138
+ extraInitializersName
99139
+ )
99140
+ );
99141
+ }
99142
+ } else {
99143
+ initializer = injectPendingInitializers(
99144
+ classInfo,
99145
+ /*isStatic*/
99146
+ false,
99147
+ initializer
99148
+ );
99149
+ if (extraInitializersName) {
99150
+ classInfo.pendingInstanceInitializers ?? (classInfo.pendingInstanceInitializers = []);
99151
+ classInfo.pendingInstanceInitializers.push(
99152
+ emitHelpers().createRunInitializersHelper(
99153
+ factory2.createThis(),
99154
+ extraInitializersName
99155
+ )
99156
+ );
99157
+ }
99158
+ }
99159
+ }
99081
99160
  exitClassElement();
99082
99161
  if (hasAccessorModifier(node) && descriptorName) {
99083
99162
  const commentRange = getCommentRange(node);
@@ -99492,19 +99571,41 @@ function transformESDecorators(context) {
99492
99571
  const expression = visitNode(node.expression, visitorFunc, isExpression);
99493
99572
  return factory2.updatePartiallyEmittedExpression(node, expression);
99494
99573
  }
99495
- function injectPendingExpressions(expression) {
99496
- if (some(pendingExpressions)) {
99497
- if (isParenthesizedExpression(expression)) {
99498
- pendingExpressions.push(expression.expression);
99499
- expression = factory2.updateParenthesizedExpression(expression, factory2.inlineExpressions(pendingExpressions));
99574
+ function injectPendingExpressionsCommon(pendingExpressions2, expression) {
99575
+ if (some(pendingExpressions2)) {
99576
+ if (expression) {
99577
+ if (isParenthesizedExpression(expression)) {
99578
+ pendingExpressions2.push(expression.expression);
99579
+ expression = factory2.updateParenthesizedExpression(expression, factory2.inlineExpressions(pendingExpressions2));
99580
+ } else {
99581
+ pendingExpressions2.push(expression);
99582
+ expression = factory2.inlineExpressions(pendingExpressions2);
99583
+ }
99500
99584
  } else {
99501
- pendingExpressions.push(expression);
99502
- expression = factory2.inlineExpressions(pendingExpressions);
99585
+ expression = factory2.inlineExpressions(pendingExpressions2);
99503
99586
  }
99504
- pendingExpressions = void 0;
99505
99587
  }
99506
99588
  return expression;
99507
99589
  }
99590
+ function injectPendingExpressions(expression) {
99591
+ const result = injectPendingExpressionsCommon(pendingExpressions, expression);
99592
+ Debug.assertIsDefined(result);
99593
+ if (result !== expression) {
99594
+ pendingExpressions = void 0;
99595
+ }
99596
+ return result;
99597
+ }
99598
+ function injectPendingInitializers(classInfo2, isStatic2, expression) {
99599
+ const result = injectPendingExpressionsCommon(isStatic2 ? classInfo2.pendingStaticInitializers : classInfo2.pendingInstanceInitializers, expression);
99600
+ if (result !== expression) {
99601
+ if (isStatic2) {
99602
+ classInfo2.pendingStaticInitializers = void 0;
99603
+ } else {
99604
+ classInfo2.pendingInstanceInitializers = void 0;
99605
+ }
99606
+ }
99607
+ return result;
99608
+ }
99508
99609
  function transformAllDecoratorsOfDeclaration(allDecorators) {
99509
99610
  if (!allDecorators) {
99510
99611
  return void 0;
@@ -139962,11 +140063,9 @@ registerRefactor(refactorName3, {
139962
140063
  function getRangeToExtract(context, considerEmptySpans = true) {
139963
140064
  const { file, startPosition } = context;
139964
140065
  const isJS = isSourceFileJS(file);
139965
- const current = getTokenAtPosition(file, startPosition);
139966
140066
  const range = createTextRangeFromSpan(getRefactorContextSpan(context));
139967
- const cursorRequest = range.pos === range.end && considerEmptySpans;
139968
- const overlappingRange = nodeOverlapsWithStartEnd(current, file, range.pos, range.end);
139969
- const firstType = findAncestor(current, (node) => node.parent && isTypeNode(node) && !rangeContainsSkipTrivia(range, node.parent, file) && (cursorRequest || overlappingRange));
140067
+ const isCursorRequest = range.pos === range.end && considerEmptySpans;
140068
+ const firstType = getFirstTypeAt(file, startPosition, range, isCursorRequest);
139970
140069
  if (!firstType || !isTypeNode(firstType))
139971
140070
  return { error: getLocaleSpecificMessage(Diagnostics.Selection_is_not_a_valid_type_node) };
139972
140071
  const checker = context.program.getTypeChecker();
@@ -139992,6 +140091,21 @@ function getRangeToExtract(context, considerEmptySpans = true) {
139992
140091
  const typeElements = flattenTypeLiteralNodeReference(checker, selection);
139993
140092
  return { isJS, selection, enclosingNode, typeParameters, typeElements };
139994
140093
  }
140094
+ function getFirstTypeAt(file, startPosition, range, isCursorRequest) {
140095
+ const currentNodes = [
140096
+ () => getTokenAtPosition(file, startPosition),
140097
+ () => getTouchingToken(file, startPosition, () => true)
140098
+ ];
140099
+ for (const f of currentNodes) {
140100
+ const current = f();
140101
+ const overlappingRange = nodeOverlapsWithStartEnd(current, file, range.pos, range.end);
140102
+ const firstType = findAncestor(current, (node) => node.parent && isTypeNode(node) && !rangeContainsSkipTrivia(range, node.parent, file) && (isCursorRequest || overlappingRange));
140103
+ if (firstType) {
140104
+ return firstType;
140105
+ }
140106
+ }
140107
+ return void 0;
140108
+ }
139995
140109
  function flattenTypeLiteralNodeReference(checker, selection) {
139996
140110
  if (!selection)
139997
140111
  return void 0;
package/lib/typescript.js CHANGED
@@ -35,7 +35,7 @@ var ts = (() => {
35
35
  "src/compiler/corePublic.ts"() {
36
36
  "use strict";
37
37
  versionMajorMinor = "5.4";
38
- version = `${versionMajorMinor}.0-dev.20240105`;
38
+ version = `${versionMajorMinor}.0-dev.20240106`;
39
39
  Comparison = /* @__PURE__ */ ((Comparison3) => {
40
40
  Comparison3[Comparison3["LessThan"] = -1] = "LessThan";
41
41
  Comparison3[Comparison3["EqualTo"] = 0] = "EqualTo";
@@ -96262,22 +96262,49 @@ ${lanes.join("\n")}
96262
96262
  }
96263
96263
  function createClassInfo(node) {
96264
96264
  const metadataReference = factory2.createUniqueName("_metadata", 16 /* Optimistic */ | 32 /* FileLevel */);
96265
- let instanceExtraInitializersName;
96266
- let staticExtraInitializersName;
96265
+ let instanceMethodExtraInitializersName;
96266
+ let staticMethodExtraInitializersName;
96267
96267
  let hasStaticInitializers = false;
96268
96268
  let hasNonAmbientInstanceFields = false;
96269
96269
  let hasStaticPrivateClassElements = false;
96270
+ let classThis2;
96271
+ let pendingStaticInitializers;
96272
+ let pendingInstanceInitializers;
96273
+ if (nodeIsDecorated(
96274
+ /*useLegacyDecorators*/
96275
+ false,
96276
+ node
96277
+ )) {
96278
+ const needsUniqueClassThis = some(node.members, (member) => (isPrivateIdentifierClassElementDeclaration(member) || isAutoAccessorPropertyDeclaration(member)) && hasStaticModifier(member));
96279
+ classThis2 = factory2.createUniqueName(
96280
+ "_classThis",
96281
+ needsUniqueClassThis ? 16 /* Optimistic */ | 8 /* ReservedInNestedScopes */ : 16 /* Optimistic */ | 32 /* FileLevel */
96282
+ );
96283
+ }
96270
96284
  for (const member of node.members) {
96271
- if (isNamedClassElement(member) && nodeOrChildIsDecorated(
96285
+ if (isMethodOrAccessor(member) && nodeOrChildIsDecorated(
96272
96286
  /*useLegacyDecorators*/
96273
96287
  false,
96274
96288
  member,
96275
96289
  node
96276
96290
  )) {
96277
96291
  if (hasStaticModifier(member)) {
96278
- staticExtraInitializersName ?? (staticExtraInitializersName = factory2.createUniqueName("_staticExtraInitializers", 16 /* Optimistic */ | 32 /* FileLevel */));
96292
+ if (!staticMethodExtraInitializersName) {
96293
+ staticMethodExtraInitializersName = factory2.createUniqueName("_staticExtraInitializers", 16 /* Optimistic */ | 32 /* FileLevel */);
96294
+ const initializer = emitHelpers().createRunInitializersHelper(classThis2 ?? factory2.createThis(), staticMethodExtraInitializersName);
96295
+ setSourceMapRange(initializer, node.name ?? moveRangePastDecorators(node));
96296
+ pendingStaticInitializers ?? (pendingStaticInitializers = []);
96297
+ pendingStaticInitializers.push(initializer);
96298
+ }
96279
96299
  } else {
96280
- instanceExtraInitializersName ?? (instanceExtraInitializersName = factory2.createUniqueName("_instanceExtraInitializers", 16 /* Optimistic */ | 32 /* FileLevel */));
96300
+ if (!instanceMethodExtraInitializersName) {
96301
+ instanceMethodExtraInitializersName = factory2.createUniqueName("_instanceExtraInitializers", 16 /* Optimistic */ | 32 /* FileLevel */);
96302
+ const initializer = emitHelpers().createRunInitializersHelper(factory2.createThis(), instanceMethodExtraInitializersName);
96303
+ setSourceMapRange(initializer, node.name ?? moveRangePastDecorators(node));
96304
+ pendingInstanceInitializers ?? (pendingInstanceInitializers = []);
96305
+ pendingInstanceInitializers.push(initializer);
96306
+ }
96307
+ instanceMethodExtraInitializersName ?? (instanceMethodExtraInitializersName = factory2.createUniqueName("_instanceExtraInitializers", 16 /* Optimistic */ | 32 /* FileLevel */));
96281
96308
  }
96282
96309
  }
96283
96310
  if (isClassStaticBlockDeclaration(member)) {
@@ -96294,18 +96321,21 @@ ${lanes.join("\n")}
96294
96321
  if ((isPrivateIdentifierClassElementDeclaration(member) || isAutoAccessorPropertyDeclaration(member)) && hasStaticModifier(member)) {
96295
96322
  hasStaticPrivateClassElements = true;
96296
96323
  }
96297
- if (staticExtraInitializersName && instanceExtraInitializersName && hasStaticInitializers && hasNonAmbientInstanceFields && hasStaticPrivateClassElements) {
96324
+ if (staticMethodExtraInitializersName && instanceMethodExtraInitializersName && hasStaticInitializers && hasNonAmbientInstanceFields && hasStaticPrivateClassElements) {
96298
96325
  break;
96299
96326
  }
96300
96327
  }
96301
96328
  return {
96302
96329
  class: node,
96330
+ classThis: classThis2,
96303
96331
  metadataReference,
96304
- instanceExtraInitializersName,
96305
- staticExtraInitializersName,
96332
+ instanceMethodExtraInitializersName,
96333
+ staticMethodExtraInitializersName,
96306
96334
  hasStaticInitializers,
96307
96335
  hasNonAmbientInstanceFields,
96308
- hasStaticPrivateClassElements
96336
+ hasStaticPrivateClassElements,
96337
+ pendingStaticInitializers,
96338
+ pendingInstanceInitializers
96309
96339
  };
96310
96340
  }
96311
96341
  function transformClassLike(node) {
@@ -96338,11 +96368,7 @@ ${lanes.join("\n")}
96338
96368
  classInfo2.classDecoratorsName = factory2.createUniqueName("_classDecorators", 16 /* Optimistic */ | 32 /* FileLevel */);
96339
96369
  classInfo2.classDescriptorName = factory2.createUniqueName("_classDescriptor", 16 /* Optimistic */ | 32 /* FileLevel */);
96340
96370
  classInfo2.classExtraInitializersName = factory2.createUniqueName("_classExtraInitializers", 16 /* Optimistic */ | 32 /* FileLevel */);
96341
- const needsUniqueClassThis = some(node.members, (member) => (isPrivateIdentifierClassElementDeclaration(member) || isAutoAccessorPropertyDeclaration(member)) && hasStaticModifier(member));
96342
- classInfo2.classThis = factory2.createUniqueName(
96343
- "_classThis",
96344
- needsUniqueClassThis ? 16 /* Optimistic */ | 8 /* ReservedInNestedScopes */ : 16 /* Optimistic */ | 32 /* FileLevel */
96345
- );
96371
+ Debug.assertIsDefined(classInfo2.classThis);
96346
96372
  classDefinitionStatements.push(
96347
96373
  createLet(classInfo2.classDecoratorsName, factory2.createArrayLiteralExpression(classDecorators)),
96348
96374
  createLet(classInfo2.classDescriptorName),
@@ -96374,7 +96400,9 @@ ${lanes.join("\n")}
96374
96400
  const renamedClassThis = classInfo2.classThis ?? factory2.createThis();
96375
96401
  enterClass(classInfo2);
96376
96402
  leadingBlockStatements = append(leadingBlockStatements, createMetadata(classInfo2.metadataReference, classInfo2.classSuper));
96377
- let members = visitNodes2(node.members, classElementVisitor, isClassElement);
96403
+ let members = node.members;
96404
+ members = visitNodes2(members, (node2) => isConstructorDeclaration(node2) ? node2 : classElementVisitor(node2), isClassElement);
96405
+ members = visitNodes2(members, (node2) => isConstructorDeclaration(node2) ? classElementVisitor(node2) : node2, isClassElement);
96378
96406
  if (pendingExpressions) {
96379
96407
  let outerThis;
96380
96408
  for (let expression of pendingExpressions) {
@@ -96399,7 +96427,7 @@ ${lanes.join("\n")}
96399
96427
  pendingExpressions = void 0;
96400
96428
  }
96401
96429
  exitClass();
96402
- if (classInfo2.instanceExtraInitializersName && !getFirstConstructorWithBody(node)) {
96430
+ if (some(classInfo2.pendingInstanceInitializers) && !getFirstConstructorWithBody(node)) {
96403
96431
  const initializerStatements = prepareConstructor(node, classInfo2);
96404
96432
  if (initializerStatements) {
96405
96433
  const extendsClauseElement = getEffectiveBaseTypeNode(node);
@@ -96429,14 +96457,14 @@ ${lanes.join("\n")}
96429
96457
  );
96430
96458
  }
96431
96459
  }
96432
- if (classInfo2.staticExtraInitializersName) {
96460
+ if (classInfo2.staticMethodExtraInitializersName) {
96433
96461
  classDefinitionStatements.push(
96434
- createLet(classInfo2.staticExtraInitializersName, factory2.createArrayLiteralExpression())
96462
+ createLet(classInfo2.staticMethodExtraInitializersName, factory2.createArrayLiteralExpression())
96435
96463
  );
96436
96464
  }
96437
- if (classInfo2.instanceExtraInitializersName) {
96465
+ if (classInfo2.instanceMethodExtraInitializersName) {
96438
96466
  classDefinitionStatements.push(
96439
- createLet(classInfo2.instanceExtraInitializersName, factory2.createArrayLiteralExpression())
96467
+ createLet(classInfo2.instanceMethodExtraInitializersName, factory2.createArrayLiteralExpression())
96440
96468
  );
96441
96469
  }
96442
96470
  if (classInfo2.memberInfos) {
@@ -96446,6 +96474,9 @@ ${lanes.join("\n")}
96446
96474
  if (memberInfo.memberInitializersName) {
96447
96475
  classDefinitionStatements.push(createLet(memberInfo.memberInitializersName, factory2.createArrayLiteralExpression()));
96448
96476
  }
96477
+ if (memberInfo.memberExtraInitializersName) {
96478
+ classDefinitionStatements.push(createLet(memberInfo.memberExtraInitializersName, factory2.createArrayLiteralExpression()));
96479
+ }
96449
96480
  if (memberInfo.memberDescriptorName) {
96450
96481
  classDefinitionStatements.push(createLet(memberInfo.memberDescriptorName));
96451
96482
  }
@@ -96459,6 +96490,9 @@ ${lanes.join("\n")}
96459
96490
  if (memberInfo.memberInitializersName) {
96460
96491
  classDefinitionStatements.push(createLet(memberInfo.memberInitializersName, factory2.createArrayLiteralExpression()));
96461
96492
  }
96493
+ if (memberInfo.memberExtraInitializersName) {
96494
+ classDefinitionStatements.push(createLet(memberInfo.memberExtraInitializersName, factory2.createArrayLiteralExpression()));
96495
+ }
96462
96496
  if (memberInfo.memberDescriptorName) {
96463
96497
  classDefinitionStatements.push(createLet(memberInfo.memberDescriptorName));
96464
96498
  }
@@ -96492,11 +96526,13 @@ ${lanes.join("\n")}
96492
96526
  leadingBlockStatements.push(factory2.createExpressionStatement(classReferenceAssignment));
96493
96527
  }
96494
96528
  leadingBlockStatements.push(createSymbolMetadata(renamedClassThis, classInfo2.metadataReference));
96495
- if (classInfo2.staticExtraInitializersName) {
96496
- const runStaticInitializersHelper = emitHelpers().createRunInitializersHelper(renamedClassThis, classInfo2.staticExtraInitializersName);
96497
- const runStaticInitializersStatement = factory2.createExpressionStatement(runStaticInitializersHelper);
96498
- setSourceMapRange(runStaticInitializersStatement, node.name ?? moveRangePastDecorators(node));
96499
- leadingBlockStatements = append(leadingBlockStatements, runStaticInitializersStatement);
96529
+ if (some(classInfo2.pendingStaticInitializers)) {
96530
+ for (const initializer of classInfo2.pendingStaticInitializers) {
96531
+ const initializerStatement = factory2.createExpressionStatement(initializer);
96532
+ setSourceMapRange(initializerStatement, getSourceMapRange(initializer));
96533
+ trailingBlockStatements = append(trailingBlockStatements, initializerStatement);
96534
+ }
96535
+ classInfo2.pendingStaticInitializers = void 0;
96500
96536
  }
96501
96537
  if (classInfo2.classExtraInitializersName) {
96502
96538
  const runClassInitializersHelper = emitHelpers().createRunInitializersHelper(renamedClassThis, classInfo2.classExtraInitializersName);
@@ -96727,16 +96763,14 @@ ${lanes.join("\n")}
96727
96763
  }
96728
96764
  }
96729
96765
  function prepareConstructor(_parent, classInfo2) {
96730
- if (classInfo2.instanceExtraInitializersName && !classInfo2.hasNonAmbientInstanceFields) {
96766
+ if (some(classInfo2.pendingInstanceInitializers)) {
96731
96767
  const statements = [];
96732
96768
  statements.push(
96733
96769
  factory2.createExpressionStatement(
96734
- emitHelpers().createRunInitializersHelper(
96735
- factory2.createThis(),
96736
- classInfo2.instanceExtraInitializersName
96737
- )
96770
+ factory2.inlineExpressions(classInfo2.pendingInstanceInitializers)
96738
96771
  )
96739
96772
  );
96773
+ classInfo2.pendingInstanceInitializers = void 0;
96740
96774
  return statements;
96741
96775
  }
96742
96776
  }
@@ -96816,6 +96850,7 @@ ${lanes.join("\n")}
96816
96850
  let referencedName;
96817
96851
  let name;
96818
96852
  let initializersName;
96853
+ let extraInitializersName;
96819
96854
  let thisArg;
96820
96855
  let descriptorName;
96821
96856
  if (!classInfo2) {
@@ -96873,20 +96908,22 @@ ${lanes.join("\n")}
96873
96908
  },
96874
96909
  metadata: classInfo2.metadataReference
96875
96910
  };
96876
- const extraInitializers = isStatic(member) ? classInfo2.staticExtraInitializersName ?? (classInfo2.staticExtraInitializersName = factory2.createUniqueName("_staticExtraInitializers", 16 /* Optimistic */ | 32 /* FileLevel */)) : classInfo2.instanceExtraInitializersName ?? (classInfo2.instanceExtraInitializersName = factory2.createUniqueName("_instanceExtraInitializers", 16 /* Optimistic */ | 32 /* FileLevel */));
96877
96911
  if (isMethodOrAccessor(member)) {
96912
+ const methodExtraInitializersName = isStatic(member) ? classInfo2.staticMethodExtraInitializersName : classInfo2.instanceMethodExtraInitializersName;
96913
+ Debug.assertIsDefined(methodExtraInitializersName);
96878
96914
  let descriptor;
96879
96915
  if (isPrivateIdentifierClassElementDeclaration(member) && createDescriptor) {
96880
96916
  descriptor = createDescriptor(member, visitNodes2(modifiers, (node) => tryCast(node, isAsyncModifier), isModifier));
96881
96917
  memberInfo.memberDescriptorName = descriptorName = createHelperVariable(member, "descriptor");
96882
96918
  descriptor = factory2.createAssignment(descriptorName, descriptor);
96883
96919
  }
96884
- const esDecorateExpression = emitHelpers().createESDecorateHelper(factory2.createThis(), descriptor ?? factory2.createNull(), memberDecoratorsName, context2, factory2.createNull(), extraInitializers);
96920
+ const esDecorateExpression = emitHelpers().createESDecorateHelper(factory2.createThis(), descriptor ?? factory2.createNull(), memberDecoratorsName, context2, factory2.createNull(), methodExtraInitializersName);
96885
96921
  const esDecorateStatement = factory2.createExpressionStatement(esDecorateExpression);
96886
96922
  setSourceMapRange(esDecorateStatement, moveRangePastDecorators(member));
96887
96923
  statements.push(esDecorateStatement);
96888
96924
  } else if (isPropertyDeclaration(member)) {
96889
96925
  initializersName = memberInfo.memberInitializersName ?? (memberInfo.memberInitializersName = createHelperVariable(member, "initializers"));
96926
+ extraInitializersName = memberInfo.memberExtraInitializersName ?? (memberInfo.memberExtraInitializersName = createHelperVariable(member, "extraInitializers"));
96890
96927
  if (isStatic(member)) {
96891
96928
  thisArg = classInfo2.classThis;
96892
96929
  }
@@ -96906,7 +96943,7 @@ ${lanes.join("\n")}
96906
96943
  memberDecoratorsName,
96907
96944
  context2,
96908
96945
  initializersName,
96909
- extraInitializers
96946
+ extraInitializersName
96910
96947
  );
96911
96948
  const esDecorateStatement = factory2.createExpressionStatement(esDecorateExpression);
96912
96949
  setSourceMapRange(esDecorateStatement, moveRangePastDecorators(member));
@@ -96921,7 +96958,7 @@ ${lanes.join("\n")}
96921
96958
  if (!some(modifiers) && (isMethodDeclaration(member) || isPropertyDeclaration(member))) {
96922
96959
  setEmitFlags(name, 1024 /* NoLeadingComments */);
96923
96960
  }
96924
- return { modifiers, referencedName, name, initializersName, descriptorName, thisArg };
96961
+ return { modifiers, referencedName, name, initializersName, extraInitializersName, descriptorName, thisArg };
96925
96962
  }
96926
96963
  function visitMethodDeclaration(node) {
96927
96964
  enterClassElement(node);
@@ -96994,9 +97031,27 @@ ${lanes.join("\n")}
96994
97031
  result = visitEachChild(node, visitor, context);
96995
97032
  classThis = savedClassThis;
96996
97033
  } else {
96997
- if (classInfo)
97034
+ node = visitEachChild(node, visitor, context);
97035
+ result = node;
97036
+ if (classInfo) {
96998
97037
  classInfo.hasStaticInitializers = true;
96999
- result = visitEachChild(node, visitor, context);
97038
+ if (some(classInfo.pendingStaticInitializers)) {
97039
+ const statements = [];
97040
+ for (const initializer of classInfo.pendingStaticInitializers) {
97041
+ const initializerStatement = factory2.createExpressionStatement(initializer);
97042
+ setSourceMapRange(initializerStatement, getSourceMapRange(initializer));
97043
+ statements.push(initializerStatement);
97044
+ }
97045
+ const body = factory2.createBlock(
97046
+ statements,
97047
+ /*multiLine*/
97048
+ true
97049
+ );
97050
+ const staticBlock = factory2.createClassStaticBlockDeclaration(body);
97051
+ result = [staticBlock, result];
97052
+ classInfo.pendingStaticInitializers = void 0;
97053
+ }
97054
+ }
97000
97055
  }
97001
97056
  exitClassElement();
97002
97057
  return result;
@@ -97007,7 +97062,7 @@ ${lanes.join("\n")}
97007
97062
  }
97008
97063
  enterClassElement(node);
97009
97064
  Debug.assert(!isAmbientPropertyDeclaration(node), "Not yet implemented.");
97010
- const { modifiers, name, initializersName, descriptorName, thisArg } = partialTransformClassElement(node, classInfo, hasAccessorModifier(node) ? createAccessorPropertyDescriptorObject : void 0);
97065
+ const { modifiers, name, initializersName, extraInitializersName, descriptorName, thisArg } = partialTransformClassElement(node, classInfo, hasAccessorModifier(node) ? createAccessorPropertyDescriptorObject : void 0);
97011
97066
  startLexicalEnvironment();
97012
97067
  let initializer = visitNode(node.initializer, visitor, isExpression);
97013
97068
  if (initializersName) {
@@ -97017,17 +97072,6 @@ ${lanes.join("\n")}
97017
97072
  initializer ?? factory2.createVoidZero()
97018
97073
  );
97019
97074
  }
97020
- if (!isStatic(node) && (classInfo == null ? void 0 : classInfo.instanceExtraInitializersName) && !(classInfo == null ? void 0 : classInfo.hasInjectedInstanceInitializers)) {
97021
- classInfo.hasInjectedInstanceInitializers = true;
97022
- initializer ?? (initializer = factory2.createVoidZero());
97023
- initializer = factory2.createParenthesizedExpression(factory2.createComma(
97024
- emitHelpers().createRunInitializersHelper(
97025
- factory2.createThis(),
97026
- classInfo.instanceExtraInitializersName
97027
- ),
97028
- initializer
97029
- ));
97030
- }
97031
97075
  if (isStatic(node) && classInfo && initializer) {
97032
97076
  classInfo.hasStaticInitializers = true;
97033
97077
  }
@@ -97038,6 +97082,41 @@ ${lanes.join("\n")}
97038
97082
  factory2.createReturnStatement(initializer)
97039
97083
  ]);
97040
97084
  }
97085
+ if (classInfo) {
97086
+ if (isStatic(node)) {
97087
+ initializer = injectPendingInitializers(
97088
+ classInfo,
97089
+ /*isStatic*/
97090
+ true,
97091
+ initializer
97092
+ );
97093
+ if (extraInitializersName) {
97094
+ classInfo.pendingStaticInitializers ?? (classInfo.pendingStaticInitializers = []);
97095
+ classInfo.pendingStaticInitializers.push(
97096
+ emitHelpers().createRunInitializersHelper(
97097
+ classInfo.classThis ?? factory2.createThis(),
97098
+ extraInitializersName
97099
+ )
97100
+ );
97101
+ }
97102
+ } else {
97103
+ initializer = injectPendingInitializers(
97104
+ classInfo,
97105
+ /*isStatic*/
97106
+ false,
97107
+ initializer
97108
+ );
97109
+ if (extraInitializersName) {
97110
+ classInfo.pendingInstanceInitializers ?? (classInfo.pendingInstanceInitializers = []);
97111
+ classInfo.pendingInstanceInitializers.push(
97112
+ emitHelpers().createRunInitializersHelper(
97113
+ factory2.createThis(),
97114
+ extraInitializersName
97115
+ )
97116
+ );
97117
+ }
97118
+ }
97119
+ }
97041
97120
  exitClassElement();
97042
97121
  if (hasAccessorModifier(node) && descriptorName) {
97043
97122
  const commentRange = getCommentRange(node);
@@ -97452,19 +97531,41 @@ ${lanes.join("\n")}
97452
97531
  const expression = visitNode(node.expression, visitorFunc, isExpression);
97453
97532
  return factory2.updatePartiallyEmittedExpression(node, expression);
97454
97533
  }
97455
- function injectPendingExpressions(expression) {
97456
- if (some(pendingExpressions)) {
97457
- if (isParenthesizedExpression(expression)) {
97458
- pendingExpressions.push(expression.expression);
97459
- expression = factory2.updateParenthesizedExpression(expression, factory2.inlineExpressions(pendingExpressions));
97534
+ function injectPendingExpressionsCommon(pendingExpressions2, expression) {
97535
+ if (some(pendingExpressions2)) {
97536
+ if (expression) {
97537
+ if (isParenthesizedExpression(expression)) {
97538
+ pendingExpressions2.push(expression.expression);
97539
+ expression = factory2.updateParenthesizedExpression(expression, factory2.inlineExpressions(pendingExpressions2));
97540
+ } else {
97541
+ pendingExpressions2.push(expression);
97542
+ expression = factory2.inlineExpressions(pendingExpressions2);
97543
+ }
97460
97544
  } else {
97461
- pendingExpressions.push(expression);
97462
- expression = factory2.inlineExpressions(pendingExpressions);
97545
+ expression = factory2.inlineExpressions(pendingExpressions2);
97463
97546
  }
97464
- pendingExpressions = void 0;
97465
97547
  }
97466
97548
  return expression;
97467
97549
  }
97550
+ function injectPendingExpressions(expression) {
97551
+ const result = injectPendingExpressionsCommon(pendingExpressions, expression);
97552
+ Debug.assertIsDefined(result);
97553
+ if (result !== expression) {
97554
+ pendingExpressions = void 0;
97555
+ }
97556
+ return result;
97557
+ }
97558
+ function injectPendingInitializers(classInfo2, isStatic2, expression) {
97559
+ const result = injectPendingExpressionsCommon(isStatic2 ? classInfo2.pendingStaticInitializers : classInfo2.pendingInstanceInitializers, expression);
97560
+ if (result !== expression) {
97561
+ if (isStatic2) {
97562
+ classInfo2.pendingStaticInitializers = void 0;
97563
+ } else {
97564
+ classInfo2.pendingInstanceInitializers = void 0;
97565
+ }
97566
+ }
97567
+ return result;
97568
+ }
97468
97569
  function transformAllDecoratorsOfDeclaration(allDecorators) {
97469
97570
  if (!allDecorators) {
97470
97571
  return void 0;
@@ -138260,11 +138361,9 @@ ${lanes.join("\n")}
138260
138361
  function getRangeToExtract(context, considerEmptySpans = true) {
138261
138362
  const { file, startPosition } = context;
138262
138363
  const isJS = isSourceFileJS(file);
138263
- const current = getTokenAtPosition(file, startPosition);
138264
138364
  const range = createTextRangeFromSpan(getRefactorContextSpan(context));
138265
- const cursorRequest = range.pos === range.end && considerEmptySpans;
138266
- const overlappingRange = nodeOverlapsWithStartEnd(current, file, range.pos, range.end);
138267
- const firstType = findAncestor(current, (node) => node.parent && isTypeNode(node) && !rangeContainsSkipTrivia(range, node.parent, file) && (cursorRequest || overlappingRange));
138365
+ const isCursorRequest = range.pos === range.end && considerEmptySpans;
138366
+ const firstType = getFirstTypeAt(file, startPosition, range, isCursorRequest);
138268
138367
  if (!firstType || !isTypeNode(firstType))
138269
138368
  return { error: getLocaleSpecificMessage(Diagnostics.Selection_is_not_a_valid_type_node) };
138270
138369
  const checker = context.program.getTypeChecker();
@@ -138290,6 +138389,21 @@ ${lanes.join("\n")}
138290
138389
  const typeElements = flattenTypeLiteralNodeReference(checker, selection);
138291
138390
  return { isJS, selection, enclosingNode, typeParameters, typeElements };
138292
138391
  }
138392
+ function getFirstTypeAt(file, startPosition, range, isCursorRequest) {
138393
+ const currentNodes = [
138394
+ () => getTokenAtPosition(file, startPosition),
138395
+ () => getTouchingToken(file, startPosition, () => true)
138396
+ ];
138397
+ for (const f of currentNodes) {
138398
+ const current = f();
138399
+ const overlappingRange = nodeOverlapsWithStartEnd(current, file, range.pos, range.end);
138400
+ const firstType = findAncestor(current, (node) => node.parent && isTypeNode(node) && !rangeContainsSkipTrivia(range, node.parent, file) && (isCursorRequest || overlappingRange));
138401
+ if (firstType) {
138402
+ return firstType;
138403
+ }
138404
+ }
138405
+ return void 0;
138406
+ }
138293
138407
  function flattenTypeLiteralNodeReference(checker, selection) {
138294
138408
  if (!selection)
138295
138409
  return void 0;
@@ -54,7 +54,7 @@ var path = __toESM(require("path"));
54
54
 
55
55
  // src/compiler/corePublic.ts
56
56
  var versionMajorMinor = "5.4";
57
- var version = `${versionMajorMinor}.0-dev.20240105`;
57
+ var version = `${versionMajorMinor}.0-dev.20240106`;
58
58
 
59
59
  // src/compiler/core.ts
60
60
  var emptyArray = [];
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "typescript",
3
3
  "author": "Microsoft Corp.",
4
4
  "homepage": "https://www.typescriptlang.org/",
5
- "version": "5.4.0-dev.20240105",
5
+ "version": "5.4.0-dev.20240106",
6
6
  "license": "Apache-2.0",
7
7
  "description": "TypeScript is a language for application scale JavaScript development",
8
8
  "keywords": [
@@ -113,5 +113,5 @@
113
113
  "node": "20.1.0",
114
114
  "npm": "8.19.4"
115
115
  },
116
- "gitHead": "e44142048305d42ec4fc753457aa561f8e247e4f"
116
+ "gitHead": "01a51d2d017dd50d487835282b7e4a2a4f7300ab"
117
117
  }