typescript 5.4.0-dev.20240104 → 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/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.20240104`;
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;
@@ -147128,13 +147242,14 @@ function getPropertySymbolsFromContextualType(node, checker, contextualType, uni
147128
147242
  const symbol = contextualType.getProperty(name);
147129
147243
  return symbol ? [symbol] : emptyArray;
147130
147244
  }
147131
- const discriminatedPropertySymbols = mapDefined(contextualType.types, (t) => (isObjectLiteralExpression(node.parent) || isJsxAttributes(node.parent)) && checker.isTypeInvalidDueToUnionDiscriminant(t, node.parent) ? void 0 : t.getProperty(name));
147245
+ const filteredTypes = isObjectLiteralExpression(node.parent) || isJsxAttributes(node.parent) ? filter(contextualType.types, (t) => !checker.isTypeInvalidDueToUnionDiscriminant(t, node.parent)) : contextualType.types;
147246
+ const discriminatedPropertySymbols = mapDefined(filteredTypes, (t) => t.getProperty(name));
147132
147247
  if (unionSymbolOk && (discriminatedPropertySymbols.length === 0 || discriminatedPropertySymbols.length === contextualType.types.length)) {
147133
147248
  const symbol = contextualType.getProperty(name);
147134
147249
  if (symbol)
147135
147250
  return [symbol];
147136
147251
  }
147137
- if (discriminatedPropertySymbols.length === 0) {
147252
+ if (!filteredTypes.length && !discriminatedPropertySymbols.length) {
147138
147253
  return mapDefined(contextualType.types, (t) => t.getProperty(name));
147139
147254
  }
147140
147255
  return deduplicate(discriminatedPropertySymbols, equateValues);