typescript 4.9.0-dev.20220920 → 4.9.0-dev.20220921

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
@@ -109,7 +109,7 @@ var ts;
109
109
  // The following is baselined as a literal template type without intervention
110
110
  /** The version of the TypeScript compiler release */
111
111
  // eslint-disable-next-line @typescript-eslint/no-inferrable-types
112
- ts.version = "".concat(ts.versionMajorMinor, ".0-dev.20220920");
112
+ ts.version = "".concat(ts.versionMajorMinor, ".0-dev.20220921");
113
113
  /* @internal */
114
114
  var Comparison;
115
115
  (function (Comparison) {
@@ -3018,7 +3018,7 @@ var ts;
3018
3018
  ];
3019
3019
  for (var _i = 0, nodeConstructors_1 = nodeConstructors; _i < nodeConstructors_1.length; _i++) {
3020
3020
  var ctor = nodeConstructors_1[_i];
3021
- if (!ts.hasProperty(ctor, "__debugKind")) {
3021
+ if (!ts.hasProperty(ctor.prototype, "__debugKind")) {
3022
3022
  Object.defineProperties(ctor.prototype, {
3023
3023
  // for use with vscode-js-debug's new customDescriptionGenerator in launch.json
3024
3024
  __tsDebuggerDisplay: {
@@ -9133,6 +9133,7 @@ var ts;
9133
9133
  _0_is_an_unused_renaming_of_1_Did_you_intend_to_use_it_as_a_type_annotation: diag(2842, ts.DiagnosticCategory.Error, "_0_is_an_unused_renaming_of_1_Did_you_intend_to_use_it_as_a_type_annotation_2842", "'{0}' is an unused renaming of '{1}'. Did you intend to use it as a type annotation?"),
9134
9134
  We_can_only_write_a_type_for_0_by_adding_a_type_for_the_entire_parameter_here: diag(2843, ts.DiagnosticCategory.Error, "We_can_only_write_a_type_for_0_by_adding_a_type_for_the_entire_parameter_here_2843", "We can only write a type for '{0}' by adding a type for the entire parameter here."),
9135
9135
  Type_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor: diag(2844, ts.DiagnosticCategory.Error, "Type_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2844", "Type of instance member variable '{0}' cannot reference identifier '{1}' declared in the constructor."),
9136
+ This_condition_will_always_return_0: diag(2845, ts.DiagnosticCategory.Error, "This_condition_will_always_return_0_2845", "This condition will always return '{0}'."),
9136
9137
  Import_declaration_0_is_using_private_name_1: diag(4000, ts.DiagnosticCategory.Error, "Import_declaration_0_is_using_private_name_1_4000", "Import declaration '{0}' is using private name '{1}'."),
9137
9138
  Type_parameter_0_of_exported_class_has_or_is_using_private_name_1: diag(4002, ts.DiagnosticCategory.Error, "Type_parameter_0_of_exported_class_has_or_is_using_private_name_1_4002", "Type parameter '{0}' of exported class has or is using private name '{1}'."),
9138
9139
  Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1: diag(4004, ts.DiagnosticCategory.Error, "Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1_4004", "Type parameter '{0}' of exported interface has or is using private name '{1}'."),
@@ -10075,6 +10076,8 @@ var ts;
10075
10076
  Delete_unused_param_tag_0: diag(95171, ts.DiagnosticCategory.Message, "Delete_unused_param_tag_0_95171", "Delete unused '@param' tag '{0}'"),
10076
10077
  Delete_all_unused_param_tags: diag(95172, ts.DiagnosticCategory.Message, "Delete_all_unused_param_tags_95172", "Delete all unused '@param' tags"),
10077
10078
  Rename_param_tag_name_0_to_1: diag(95173, ts.DiagnosticCategory.Message, "Rename_param_tag_name_0_to_1_95173", "Rename '@param' tag name '{0}' to '{1}'"),
10079
+ Use_0: diag(95174, ts.DiagnosticCategory.Message, "Use_0_95174", "Use `{0}`."),
10080
+ Use_Number_isNaN_in_all_conditions: diag(95175, ts.DiagnosticCategory.Message, "Use_Number_isNaN_in_all_conditions_95175", "Use `Number.isNaN` in all conditions."),
10078
10081
  No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer: diag(18004, ts.DiagnosticCategory.Error, "No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer_18004", "No value exists in scope for the shorthand property '{0}'. Either declare one or provide an initializer."),
10079
10082
  Classes_may_not_have_a_field_named_constructor: diag(18006, ts.DiagnosticCategory.Error, "Classes_may_not_have_a_field_named_constructor_18006", "Classes may not have a field named 'constructor'."),
10080
10083
  JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array: diag(18007, ts.DiagnosticCategory.Error, "JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array_18007", "JSX expressions may not use the comma operator. Did you mean to write an array?"),
@@ -11897,12 +11900,36 @@ var ts;
11897
11900
  pos++;
11898
11901
  return token = 0 /* SyntaxKind.Unknown */;
11899
11902
  }
11900
- if (isIdentifierStart(codePointAt(text, pos + 1), languageVersion)) {
11903
+ var charAfterHash = codePointAt(text, pos + 1);
11904
+ if (charAfterHash === 92 /* CharacterCodes.backslash */) {
11901
11905
  pos++;
11902
- scanIdentifier(codePointAt(text, pos), languageVersion);
11906
+ var extendedCookedChar_1 = peekExtendedUnicodeEscape();
11907
+ if (extendedCookedChar_1 >= 0 && isIdentifierStart(extendedCookedChar_1, languageVersion)) {
11908
+ pos += 3;
11909
+ tokenFlags |= 8 /* TokenFlags.ExtendedUnicodeEscape */;
11910
+ tokenValue = "#" + scanExtendedUnicodeEscape() + scanIdentifierParts();
11911
+ return token = 80 /* SyntaxKind.PrivateIdentifier */;
11912
+ }
11913
+ var cookedChar_1 = peekUnicodeEscape();
11914
+ if (cookedChar_1 >= 0 && isIdentifierStart(cookedChar_1, languageVersion)) {
11915
+ pos += 6;
11916
+ tokenFlags |= 1024 /* TokenFlags.UnicodeEscape */;
11917
+ tokenValue = "#" + String.fromCharCode(cookedChar_1) + scanIdentifierParts();
11918
+ return token = 80 /* SyntaxKind.PrivateIdentifier */;
11919
+ }
11920
+ pos--;
11921
+ }
11922
+ if (isIdentifierStart(charAfterHash, languageVersion)) {
11923
+ pos++;
11924
+ // We're relying on scanIdentifier's behavior and adjusting the token kind after the fact.
11925
+ // Notably absent from this block is the fact that calling a function named "scanIdentifier",
11926
+ // but identifiers don't include '#', and that function doesn't deal with it at all.
11927
+ // This works because 'scanIdentifier' tries to reuse source characters and builds up substrings;
11928
+ // however, it starts at the 'tokenPos' which includes the '#', and will "accidentally" prepend the '#' for us.
11929
+ scanIdentifier(charAfterHash, languageVersion);
11903
11930
  }
11904
11931
  else {
11905
- tokenValue = String.fromCharCode(codePointAt(text, pos));
11932
+ tokenValue = "#";
11906
11933
  error(ts.Diagnostics.Invalid_character, pos++, charSize(ch));
11907
11934
  }
11908
11935
  return token = 80 /* SyntaxKind.PrivateIdentifier */;
@@ -33140,7 +33167,7 @@ var ts;
33140
33167
  }
33141
33168
  function parsePrivateIdentifier() {
33142
33169
  var pos = getNodePos();
33143
- var node = factory.createPrivateIdentifier(internPrivateIdentifier(scanner.getTokenText()));
33170
+ var node = factory.createPrivateIdentifier(internPrivateIdentifier(scanner.getTokenValue()));
33144
33171
  nextToken();
33145
33172
  return finishNode(node, pos);
33146
33173
  }
@@ -49773,6 +49800,7 @@ var ts;
49773
49800
  var deferredGlobalOmitSymbol;
49774
49801
  var deferredGlobalAwaitedSymbol;
49775
49802
  var deferredGlobalBigIntType;
49803
+ var deferredGlobalNaNSymbol;
49776
49804
  var deferredGlobalRecordSymbol;
49777
49805
  var allPotentiallyUnusedIdentifiers = new ts.Map(); // key is file name
49778
49806
  var flowLoopStart = 0;
@@ -60261,7 +60289,7 @@ var ts;
60261
60289
  var isInstantiation = (getTargetSymbol(prop) || prop) === (getTargetSymbol(singleProp) || singleProp);
60262
60290
  // If the symbols are instances of one another with identical types - consider the symbols
60263
60291
  // equivalent and just use the first one, which thus allows us to avoid eliding private
60264
- // members when intersecting a (this-)instantiations of a class with it's raw base or another instance
60292
+ // members when intersecting a (this-)instantiations of a class with its raw base or another instance
60265
60293
  if (isInstantiation && compareProperties(singleProp, prop, function (a, b) { return a === b ? -1 /* Ternary.True */ : 0 /* Ternary.False */; }) === -1 /* Ternary.True */) {
60266
60294
  // If we merged instantiations of a generic type, we replicate the symbol parent resetting behavior we used
60267
60295
  // to do when we recorded multiple distinct symbols so that we still get, eg, `Array<T>.length` printed
@@ -60309,7 +60337,11 @@ var ts;
60309
60337
  }
60310
60338
  }
60311
60339
  }
60312
- if (!singleProp || isUnion && (propSet || checkFlags & 48 /* CheckFlags.Partial */) && checkFlags & (1024 /* CheckFlags.ContainsPrivate */ | 512 /* CheckFlags.ContainsProtected */)) {
60340
+ if (!singleProp ||
60341
+ isUnion &&
60342
+ (propSet || checkFlags & 48 /* CheckFlags.Partial */) &&
60343
+ checkFlags & (1024 /* CheckFlags.ContainsPrivate */ | 512 /* CheckFlags.ContainsProtected */) &&
60344
+ !(propSet && getCommonDeclarationsOfSymbols(ts.arrayFrom(propSet.values())))) {
60313
60345
  // No property was found, or, in a union, a property has a private or protected declaration in one
60314
60346
  // constituent, but is missing or has a different declaration in another constituent.
60315
60347
  return undefined;
@@ -60411,6 +60443,33 @@ var ts;
60411
60443
  }
60412
60444
  return property;
60413
60445
  }
60446
+ function getCommonDeclarationsOfSymbols(symbols) {
60447
+ var commonDeclarations;
60448
+ var _loop_14 = function (symbol) {
60449
+ if (!symbol.declarations) {
60450
+ return { value: undefined };
60451
+ }
60452
+ if (!commonDeclarations) {
60453
+ commonDeclarations = new ts.Set(symbol.declarations);
60454
+ return "continue";
60455
+ }
60456
+ commonDeclarations.forEach(function (declaration) {
60457
+ if (!ts.contains(symbol.declarations, declaration)) {
60458
+ commonDeclarations.delete(declaration);
60459
+ }
60460
+ });
60461
+ if (commonDeclarations.size === 0) {
60462
+ return { value: undefined };
60463
+ }
60464
+ };
60465
+ for (var _i = 0, symbols_3 = symbols; _i < symbols_3.length; _i++) {
60466
+ var symbol = symbols_3[_i];
60467
+ var state_4 = _loop_14(symbol);
60468
+ if (typeof state_4 === "object")
60469
+ return state_4.value;
60470
+ }
60471
+ return commonDeclarations;
60472
+ }
60414
60473
  function getPropertyOfUnionOrIntersectionType(type, name, skipObjectFunctionPropertyAugment) {
60415
60474
  var property = getUnionOrIntersectionProperty(type, name, skipObjectFunctionPropertyAugment);
60416
60475
  // We need to filter out partial properties in union types
@@ -61125,7 +61184,7 @@ var ts;
61125
61184
  function getIndexInfosOfIndexSymbol(indexSymbol) {
61126
61185
  if (indexSymbol.declarations) {
61127
61186
  var indexInfos_4 = [];
61128
- var _loop_14 = function (declaration) {
61187
+ var _loop_15 = function (declaration) {
61129
61188
  if (declaration.parameters.length === 1) {
61130
61189
  var parameter = declaration.parameters[0];
61131
61190
  if (parameter.type) {
@@ -61139,7 +61198,7 @@ var ts;
61139
61198
  };
61140
61199
  for (var _i = 0, _a = indexSymbol.declarations; _i < _a.length; _i++) {
61141
61200
  var declaration = _a[_i];
61142
- _loop_14(declaration);
61201
+ _loop_15(declaration);
61143
61202
  }
61144
61203
  return indexInfos_4;
61145
61204
  }
@@ -61156,7 +61215,7 @@ var ts;
61156
61215
  var _a;
61157
61216
  var inferences;
61158
61217
  if ((_a = typeParameter.symbol) === null || _a === void 0 ? void 0 : _a.declarations) {
61159
- var _loop_15 = function (declaration) {
61218
+ var _loop_16 = function (declaration) {
61160
61219
  if (declaration.parent.kind === 192 /* SyntaxKind.InferType */) {
61161
61220
  // When an 'infer T' declaration is immediately contained in a type reference node
61162
61221
  // (such as 'Foo<infer T>'), T's constraint is inferred from the constraint of the
@@ -61220,7 +61279,7 @@ var ts;
61220
61279
  };
61221
61280
  for (var _i = 0, _b = typeParameter.symbol.declarations; _i < _b.length; _i++) {
61222
61281
  var declaration = _b[_i];
61223
- _loop_15(declaration);
61282
+ _loop_16(declaration);
61224
61283
  }
61225
61284
  }
61226
61285
  return inferences && getIntersectionType(inferences);
@@ -61877,6 +61936,9 @@ var ts;
61877
61936
  function getGlobalBigIntType() {
61878
61937
  return (deferredGlobalBigIntType || (deferredGlobalBigIntType = getGlobalType("BigInt", /*arity*/ 0, /*reportErrors*/ false))) || emptyObjectType;
61879
61938
  }
61939
+ function getGlobalNaNSymbol() {
61940
+ return (deferredGlobalNaNSymbol || (deferredGlobalNaNSymbol = getGlobalValueSymbol("NaN", /*reportErrors*/ false)));
61941
+ }
61880
61942
  function getGlobalRecordSymbol() {
61881
61943
  deferredGlobalRecordSymbol || (deferredGlobalRecordSymbol = getGlobalTypeAliasSymbol("Record", /*arity*/ 2, /*reportErrors*/ true) || unknownSymbol);
61882
61944
  return deferredGlobalRecordSymbol === unknownSymbol ? undefined : deferredGlobalRecordSymbol;
@@ -62117,7 +62179,7 @@ var ts;
62117
62179
  var lastRequiredIndex = -1;
62118
62180
  var firstRestIndex = -1;
62119
62181
  var lastOptionalOrRestIndex = -1;
62120
- var _loop_16 = function (i) {
62182
+ var _loop_17 = function (i) {
62121
62183
  var type = elementTypes[i];
62122
62184
  var flags = target.elementFlags[i];
62123
62185
  if (flags & 8 /* ElementFlags.Variadic */) {
@@ -62147,9 +62209,9 @@ var ts;
62147
62209
  }
62148
62210
  };
62149
62211
  for (var i = 0; i < elementTypes.length; i++) {
62150
- var state_4 = _loop_16(i);
62151
- if (typeof state_4 === "object")
62152
- return state_4.value;
62212
+ var state_5 = _loop_17(i);
62213
+ if (typeof state_5 === "object")
62214
+ return state_5.value;
62153
62215
  }
62154
62216
  // Turn optional elements preceding the last required element into required elements
62155
62217
  for (var i = 0; i < lastRequiredIndex; i++) {
@@ -62177,7 +62239,7 @@ var ts;
62177
62239
  if (flags & (2 /* ElementFlags.Optional */ | 4 /* ElementFlags.Rest */)) {
62178
62240
  lastOptionalOrRestIndex = expandedFlags.length;
62179
62241
  }
62180
- expandedTypes.push(type);
62242
+ expandedTypes.push(flags & 2 /* ElementFlags.Optional */ ? addOptionality(type, /*isProperty*/ true) : type);
62181
62243
  expandedFlags.push(flags);
62182
62244
  if (expandedDeclarations && declaration) {
62183
62245
  expandedDeclarations.push(declaration);
@@ -62343,7 +62405,7 @@ var ts;
62343
62405
  var templates = ts.filter(types, isPatternLiteralType);
62344
62406
  if (templates.length) {
62345
62407
  var i = types.length;
62346
- var _loop_17 = function () {
62408
+ var _loop_18 = function () {
62347
62409
  i--;
62348
62410
  var t = types[i];
62349
62411
  if (t.flags & 128 /* TypeFlags.StringLiteral */ && ts.some(templates, function (template) { return isTypeMatchedByTemplateLiteralType(t, template); })) {
@@ -62351,7 +62413,7 @@ var ts;
62351
62413
  }
62352
62414
  };
62353
62415
  while (i > 0) {
62354
- _loop_17();
62416
+ _loop_18();
62355
62417
  }
62356
62418
  }
62357
62419
  }
@@ -62428,14 +62490,14 @@ var ts;
62428
62490
  var namedUnions = [];
62429
62491
  addNamedUnions(namedUnions, types);
62430
62492
  var reducedTypes = [];
62431
- var _loop_18 = function (t) {
62493
+ var _loop_19 = function (t) {
62432
62494
  if (!ts.some(namedUnions, function (union) { return containsType(union.types, t); })) {
62433
62495
  reducedTypes.push(t);
62434
62496
  }
62435
62497
  };
62436
62498
  for (var _i = 0, typeSet_1 = typeSet; _i < typeSet_1.length; _i++) {
62437
62499
  var t = typeSet_1[_i];
62438
- _loop_18(t);
62500
+ _loop_19(t);
62439
62501
  }
62440
62502
  if (!aliasSymbol && namedUnions.length === 1 && reducedTypes.length === 0) {
62441
62503
  return namedUnions[0];
@@ -63665,7 +63727,7 @@ var ts;
63665
63727
  var result;
63666
63728
  var extraTypes;
63667
63729
  var tailCount = 0;
63668
- var _loop_19 = function () {
63730
+ var _loop_20 = function () {
63669
63731
  if (tailCount === 1000) {
63670
63732
  error(currentNode, ts.Diagnostics.Type_instantiation_is_excessively_deep_and_possibly_infinite);
63671
63733
  result = errorType;
@@ -63786,10 +63848,10 @@ var ts;
63786
63848
  // another (or, through recursion, possibly the same) conditional type. In the potentially tail-recursive
63787
63849
  // cases we increment the tail recursion counter and stop after 1000 iterations.
63788
63850
  while (true) {
63789
- var state_5 = _loop_19();
63790
- if (typeof state_5 === "object")
63791
- return state_5.value;
63792
- if (state_5 === "break")
63851
+ var state_6 = _loop_20();
63852
+ if (typeof state_6 === "object")
63853
+ return state_6.value;
63854
+ if (state_6 === "break")
63793
63855
  break;
63794
63856
  }
63795
63857
  return extraTypes ? getUnionType(ts.append(extraTypes, result)) : result;
@@ -66404,7 +66466,7 @@ var ts;
66404
66466
  reducedTarget = findMatchingDiscriminantType(source, target, isRelatedTo) || filterPrimitivesIfContainsNonPrimitive(target);
66405
66467
  checkTypes = reducedTarget.flags & 1048576 /* TypeFlags.Union */ ? reducedTarget.types : [reducedTarget];
66406
66468
  }
66407
- var _loop_20 = function (prop) {
66469
+ var _loop_21 = function (prop) {
66408
66470
  if (shouldCheckAsExcessProperty(prop, source.symbol) && !isIgnoredJsxProperty(source, prop)) {
66409
66471
  if (!isKnownProperty(reducedTarget, prop.escapedName, isComparingJsxAttributes)) {
66410
66472
  if (reportErrors) {
@@ -66467,9 +66529,9 @@ var ts;
66467
66529
  };
66468
66530
  for (var _i = 0, _b = getPropertiesOfType(source); _i < _b.length; _i++) {
66469
66531
  var prop = _b[_i];
66470
- var state_6 = _loop_20(prop);
66471
- if (typeof state_6 === "object")
66472
- return state_6.value;
66532
+ var state_7 = _loop_21(prop);
66533
+ if (typeof state_7 === "object")
66534
+ return state_7.value;
66473
66535
  }
66474
66536
  return false;
66475
66537
  }
@@ -67460,11 +67522,11 @@ var ts;
67460
67522
  // constituents of 'target'. If any combination does not have a match then 'source' is not relatable.
67461
67523
  var discriminantCombinations = ts.cartesianProduct(sourceDiscriminantTypes);
67462
67524
  var matchingTypes = [];
67463
- var _loop_21 = function (combination) {
67525
+ var _loop_22 = function (combination) {
67464
67526
  var hasMatch = false;
67465
67527
  outer: for (var _c = 0, _d = target.types; _c < _d.length; _c++) {
67466
67528
  var type = _d[_c];
67467
- var _loop_22 = function (i) {
67529
+ var _loop_23 = function (i) {
67468
67530
  var sourceProperty = sourcePropertiesFiltered[i];
67469
67531
  var targetProperty = getPropertyOfType(type, sourceProperty.escapedName);
67470
67532
  if (!targetProperty)
@@ -67480,8 +67542,8 @@ var ts;
67480
67542
  }
67481
67543
  };
67482
67544
  for (var i = 0; i < sourcePropertiesFiltered.length; i++) {
67483
- var state_8 = _loop_22(i);
67484
- switch (state_8) {
67545
+ var state_9 = _loop_23(i);
67546
+ switch (state_9) {
67485
67547
  case "continue-outer": continue outer;
67486
67548
  }
67487
67549
  }
@@ -67494,9 +67556,9 @@ var ts;
67494
67556
  };
67495
67557
  for (var _a = 0, discriminantCombinations_1 = discriminantCombinations; _a < discriminantCombinations_1.length; _a++) {
67496
67558
  var combination = discriminantCombinations_1[_a];
67497
- var state_7 = _loop_21(combination);
67498
- if (typeof state_7 === "object")
67499
- return state_7.value;
67559
+ var state_8 = _loop_22(combination);
67560
+ if (typeof state_8 === "object")
67561
+ return state_8.value;
67500
67562
  }
67501
67563
  // Compare the remaining non-discriminant properties of each match.
67502
67564
  var result = -1 /* Ternary.True */;
@@ -68201,7 +68263,7 @@ var ts;
68201
68263
  ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.push("checkTypes" /* tracing.Phase.CheckTypes */, "getVariancesWorker", { arity: typeParameters.length, id: getTypeId(getDeclaredTypeOfSymbol(symbol)) });
68202
68264
  links.variances = ts.emptyArray;
68203
68265
  var variances = [];
68204
- var _loop_23 = function (tp) {
68266
+ var _loop_24 = function (tp) {
68205
68267
  var modifiers = getVarianceModifiers(tp);
68206
68268
  var variance = modifiers & 65536 /* ModifierFlags.Out */ ?
68207
68269
  modifiers & 32768 /* ModifierFlags.In */ ? 0 /* VarianceFlags.Invariant */ : 1 /* VarianceFlags.Covariant */ :
@@ -68239,7 +68301,7 @@ var ts;
68239
68301
  };
68240
68302
  for (var _i = 0, typeParameters_2 = typeParameters; _i < typeParameters_2.length; _i++) {
68241
68303
  var tp = typeParameters_2[_i];
68242
- _loop_23(tp);
68304
+ _loop_24(tp);
68243
68305
  }
68244
68306
  links.variances = variances;
68245
68307
  ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.pop({ variances: variances.map(ts.Debug.formatVariance) });
@@ -68831,7 +68893,8 @@ var ts;
68831
68893
  function getOptionalType(type, isProperty) {
68832
68894
  if (isProperty === void 0) { isProperty = false; }
68833
68895
  ts.Debug.assert(strictNullChecks);
68834
- return type.flags & 32768 /* TypeFlags.Undefined */ ? type : getUnionType([type, isProperty ? missingType : undefinedType]);
68896
+ var missingOrUndefined = isProperty ? missingType : undefinedType;
68897
+ return type.flags & 32768 /* TypeFlags.Undefined */ || type.flags & 1048576 /* TypeFlags.Union */ && type.types[0] === missingOrUndefined ? type : getUnionType([type, missingOrUndefined]);
68835
68898
  }
68836
68899
  function getGlobalNonNullableTypeInstantiation(type) {
68837
68900
  if (!deferredGlobalNonNullableTypeAlias) {
@@ -70196,7 +70259,7 @@ var ts;
70196
70259
  // upon instantiation, would collapse all the placeholders to just 'string', and an assignment check might
70197
70260
  // succeed. That would be a pointless and confusing outcome.
70198
70261
  if (matches || ts.every(target.texts, function (s) { return s.length === 0; })) {
70199
- var _loop_24 = function (i) {
70262
+ var _loop_25 = function (i) {
70200
70263
  var source_1 = matches ? matches[i] : neverType;
70201
70264
  var target_3 = types[i];
70202
70265
  // If we are inferring from a string literal type to a type variable whose constraint includes one of the
@@ -70246,7 +70309,7 @@ var ts;
70246
70309
  inferFromTypes(source_1, target_3);
70247
70310
  };
70248
70311
  for (var i = 0; i < types.length; i++) {
70249
- _loop_24(i);
70312
+ _loop_25(i);
70250
70313
  }
70251
70314
  }
70252
70315
  }
@@ -70710,7 +70773,7 @@ var ts;
70710
70773
  return name;
70711
70774
  }
70712
70775
  }
70713
- if (ts.hasOnlyExpressionInitializer(declaration)) {
70776
+ if (ts.hasOnlyExpressionInitializer(declaration) && isBlockScopedNameDeclaredBeforeUse(declaration, node.argumentExpression)) {
70714
70777
  var initializer = ts.getEffectiveInitializer(declaration);
70715
70778
  return initializer && tryGetNameFromType(getTypeOfExpression(initializer));
70716
70779
  }
@@ -70770,7 +70833,7 @@ var ts;
70770
70833
  function mapTypesByKeyProperty(types, name) {
70771
70834
  var map = new ts.Map();
70772
70835
  var count = 0;
70773
- var _loop_25 = function (type) {
70836
+ var _loop_26 = function (type) {
70774
70837
  if (type.flags & (524288 /* TypeFlags.Object */ | 2097152 /* TypeFlags.Intersection */ | 58982400 /* TypeFlags.InstantiableNonPrimitive */)) {
70775
70838
  var discriminant = getTypeOfPropertyOfType(type, name);
70776
70839
  if (discriminant) {
@@ -70796,9 +70859,9 @@ var ts;
70796
70859
  };
70797
70860
  for (var _i = 0, types_15 = types; _i < types_15.length; _i++) {
70798
70861
  var type = types_15[_i];
70799
- var state_9 = _loop_25(type);
70800
- if (typeof state_9 === "object")
70801
- return state_9.value;
70862
+ var state_10 = _loop_26(type);
70863
+ if (typeof state_10 === "object")
70864
+ return state_10.value;
70802
70865
  }
70803
70866
  return count >= 10 && count * 2 >= types.length ? map : undefined;
70804
70867
  }
@@ -77253,7 +77316,7 @@ var ts;
77253
77316
  if (spreadIndex >= 0) {
77254
77317
  // Create synthetic arguments from spreads of tuple types.
77255
77318
  var effectiveArgs_1 = args.slice(0, spreadIndex);
77256
- var _loop_26 = function (i) {
77319
+ var _loop_27 = function (i) {
77257
77320
  var arg = args[i];
77258
77321
  // We can call checkExpressionCached because spread expressions never have a contextual type.
77259
77322
  var spreadType = arg.kind === 227 /* SyntaxKind.SpreadElement */ && (flowLoopCount ? checkExpression(arg.expression) : checkExpressionCached(arg.expression));
@@ -77270,7 +77333,7 @@ var ts;
77270
77333
  }
77271
77334
  };
77272
77335
  for (var i = spreadIndex; i < args.length; i++) {
77273
- _loop_26(i);
77336
+ _loop_27(i);
77274
77337
  }
77275
77338
  return effectiveArgs_1;
77276
77339
  }
@@ -77599,7 +77662,7 @@ var ts;
77599
77662
  var min_3 = Number.MAX_VALUE;
77600
77663
  var minIndex = 0;
77601
77664
  var i_1 = 0;
77602
- var _loop_27 = function (c) {
77665
+ var _loop_28 = function (c) {
77603
77666
  var chain_2 = function () { return ts.chainDiagnosticMessages(/*details*/ undefined, ts.Diagnostics.Overload_0_of_1_2_gave_the_following_error, i_1 + 1, candidates.length, signatureToString(c)); };
77604
77667
  var diags_2 = getSignatureApplicabilityError(node, args, c, assignableRelation, 0 /* CheckMode.Normal */, /*reportErrors*/ true, chain_2);
77605
77668
  if (diags_2) {
@@ -77617,7 +77680,7 @@ var ts;
77617
77680
  };
77618
77681
  for (var _a = 0, candidatesForArgumentError_1 = candidatesForArgumentError; _a < candidatesForArgumentError_1.length; _a++) {
77619
77682
  var c = candidatesForArgumentError_1[_a];
77620
- _loop_27(c);
77683
+ _loop_28(c);
77621
77684
  }
77622
77685
  var diags_3 = max > 1 ? allDiagnostics[minIndex] : ts.flatten(allDiagnostics);
77623
77686
  ts.Debug.assert(diags_3.length > 0, "No errors reported for 3 or fewer overload signatures");
@@ -77775,7 +77838,7 @@ var ts;
77775
77838
  }
77776
77839
  var _a = ts.minAndMax(candidates, getNumNonRestParameters), minArgumentCount = _a.min, maxNonRestParam = _a.max;
77777
77840
  var parameters = [];
77778
- var _loop_28 = function (i) {
77841
+ var _loop_29 = function (i) {
77779
77842
  var symbols = ts.mapDefined(candidates, function (s) { return signatureHasRestParameter(s) ?
77780
77843
  i < s.parameters.length - 1 ? s.parameters[i] : ts.last(s.parameters) :
77781
77844
  i < s.parameters.length ? s.parameters[i] : undefined; });
@@ -77783,7 +77846,7 @@ var ts;
77783
77846
  parameters.push(createCombinedSymbolFromTypes(symbols, ts.mapDefined(candidates, function (candidate) { return tryGetTypeAtPosition(candidate, i); })));
77784
77847
  };
77785
77848
  for (var i = 0; i < maxNonRestParam; i++) {
77786
- _loop_28(i);
77849
+ _loop_29(i);
77787
77850
  }
77788
77851
  var restParameterSymbols = ts.mapDefined(candidates, function (c) { return signatureHasRestParameter(c) ? ts.last(c.parameters) : undefined; });
77789
77852
  var flags = 0 /* SignatureFlags.None */;
@@ -80565,6 +80628,7 @@ var ts;
80565
80628
  var eqType = operator === 34 /* SyntaxKind.EqualsEqualsToken */ || operator === 36 /* SyntaxKind.EqualsEqualsEqualsToken */;
80566
80629
  error(errorNode, ts.Diagnostics.This_condition_will_always_return_0_since_JavaScript_compares_objects_by_reference_not_value, eqType ? "false" : "true");
80567
80630
  }
80631
+ checkNaNEquality(errorNode, operator, left, right);
80568
80632
  reportOperatorErrorUnless(function (left, right) { return isTypeEqualityComparableTo(left, right) || isTypeEqualityComparableTo(right, left); });
80569
80633
  return booleanType;
80570
80634
  case 102 /* SyntaxKind.InstanceOfKeyword */:
@@ -80770,6 +80834,26 @@ var ts;
80770
80834
  return undefined;
80771
80835
  }
80772
80836
  }
80837
+ function checkNaNEquality(errorNode, operator, left, right) {
80838
+ var isLeftNaN = isGlobalNaN(ts.skipParentheses(left));
80839
+ var isRightNaN = isGlobalNaN(ts.skipParentheses(right));
80840
+ if (isLeftNaN || isRightNaN) {
80841
+ var err = error(errorNode, ts.Diagnostics.This_condition_will_always_return_0, ts.tokenToString(operator === 36 /* SyntaxKind.EqualsEqualsEqualsToken */ || operator === 34 /* SyntaxKind.EqualsEqualsToken */ ? 95 /* SyntaxKind.FalseKeyword */ : 110 /* SyntaxKind.TrueKeyword */));
80842
+ if (isLeftNaN && isRightNaN)
80843
+ return;
80844
+ var operatorString = operator === 37 /* SyntaxKind.ExclamationEqualsEqualsToken */ || operator === 35 /* SyntaxKind.ExclamationEqualsToken */ ? ts.tokenToString(53 /* SyntaxKind.ExclamationToken */) : "";
80845
+ var location = isLeftNaN ? right : left;
80846
+ var expression = ts.skipParentheses(location);
80847
+ ts.addRelatedInfo(err, ts.createDiagnosticForNode(location, ts.Diagnostics.Did_you_mean_0, "".concat(operatorString, "Number.isNaN(").concat(ts.isEntityNameExpression(expression) ? ts.entityNameToString(expression) : "...", ")")));
80848
+ }
80849
+ }
80850
+ function isGlobalNaN(expr) {
80851
+ if (ts.isIdentifier(expr) && expr.escapedText === "NaN") {
80852
+ var globalNaNSymbol = getGlobalNaNSymbol();
80853
+ return !!globalNaNSymbol && globalNaNSymbol === getResolvedSymbol(expr);
80854
+ }
80855
+ return false;
80856
+ }
80773
80857
  }
80774
80858
  function getBaseTypesIfUnrelated(leftType, rightType, isRelated) {
80775
80859
  var effectiveLeft = leftType;
@@ -81807,7 +81891,7 @@ var ts;
81807
81891
  var indexSymbol = getIndexSymbol(getSymbolOfNode(node));
81808
81892
  if (indexSymbol === null || indexSymbol === void 0 ? void 0 : indexSymbol.declarations) {
81809
81893
  var indexSignatureMap_1 = new ts.Map();
81810
- var _loop_29 = function (declaration) {
81894
+ var _loop_30 = function (declaration) {
81811
81895
  if (declaration.parameters.length === 1 && declaration.parameters[0].type) {
81812
81896
  forEachType(getTypeFromTypeNode(declaration.parameters[0].type), function (type) {
81813
81897
  var entry = indexSignatureMap_1.get(getTypeId(type));
@@ -81822,7 +81906,7 @@ var ts;
81822
81906
  };
81823
81907
  for (var _i = 0, _a = indexSymbol.declarations; _i < _a.length; _i++) {
81824
81908
  var declaration = _a[_i];
81825
- _loop_29(declaration);
81909
+ _loop_30(declaration);
81826
81910
  }
81827
81911
  indexSignatureMap_1.forEach(function (entry) {
81828
81912
  if (entry.declarations.length > 1) {
@@ -85422,7 +85506,7 @@ var ts;
85422
85506
  var propDeclaration = declaration && declaration.kind === 223 /* SyntaxKind.BinaryExpression */ ||
85423
85507
  name && name.kind === 164 /* SyntaxKind.ComputedPropertyName */ ? declaration : undefined;
85424
85508
  var localPropDeclaration = getParentOfSymbol(prop) === type.symbol ? declaration : undefined;
85425
- var _loop_30 = function (info) {
85509
+ var _loop_31 = function (info) {
85426
85510
  var localIndexDeclaration = info.declaration && getParentOfSymbol(getSymbolOfNode(info.declaration)) === type.symbol ? info.declaration : undefined;
85427
85511
  // We check only when (a) the property is declared in the containing type, or (b) the applicable index signature is declared
85428
85512
  // in the containing type, or (c) the containing type is an interface and no base interface contains both the property and
@@ -85439,7 +85523,7 @@ var ts;
85439
85523
  };
85440
85524
  for (var _i = 0, indexInfos_9 = indexInfos; _i < indexInfos_9.length; _i++) {
85441
85525
  var info = indexInfos_9[_i];
85442
- _loop_30(info);
85526
+ _loop_31(info);
85443
85527
  }
85444
85528
  }
85445
85529
  function checkIndexConstraintForIndexSignature(type, checkInfo) {
@@ -85447,7 +85531,7 @@ var ts;
85447
85531
  var indexInfos = getApplicableIndexInfos(type, checkInfo.keyType);
85448
85532
  var interfaceDeclaration = ts.getObjectFlags(type) & 2 /* ObjectFlags.Interface */ ? ts.getDeclarationOfKind(type.symbol, 261 /* SyntaxKind.InterfaceDeclaration */) : undefined;
85449
85533
  var localCheckDeclaration = declaration && getParentOfSymbol(getSymbolOfNode(declaration)) === type.symbol ? declaration : undefined;
85450
- var _loop_31 = function (info) {
85534
+ var _loop_32 = function (info) {
85451
85535
  if (info === checkInfo)
85452
85536
  return "continue";
85453
85537
  var localIndexDeclaration = info.declaration && getParentOfSymbol(getSymbolOfNode(info.declaration)) === type.symbol ? info.declaration : undefined;
@@ -85462,7 +85546,7 @@ var ts;
85462
85546
  };
85463
85547
  for (var _i = 0, indexInfos_10 = indexInfos; _i < indexInfos_10.length; _i++) {
85464
85548
  var info = indexInfos_10[_i];
85465
- _loop_31(info);
85549
+ _loop_32(info);
85466
85550
  }
85467
85551
  }
85468
85552
  function checkTypeNameIsReserved(name, message) {
@@ -85782,7 +85866,7 @@ var ts;
85782
85866
  var baseTypes = baseTypeNode && getBaseTypes(type);
85783
85867
  var baseWithThis = (baseTypes === null || baseTypes === void 0 ? void 0 : baseTypes.length) ? getTypeWithThisArgument(ts.first(baseTypes), type.thisType) : undefined;
85784
85868
  var baseStaticType = getBaseConstructorTypeOfClass(type);
85785
- var _loop_32 = function (member) {
85869
+ var _loop_33 = function (member) {
85786
85870
  if (ts.hasAmbientModifier(member)) {
85787
85871
  return "continue";
85788
85872
  }
@@ -85799,7 +85883,7 @@ var ts;
85799
85883
  };
85800
85884
  for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
85801
85885
  var member = _a[_i];
85802
- _loop_32(member);
85886
+ _loop_33(member);
85803
85887
  }
85804
85888
  }
85805
85889
  /**
@@ -85887,7 +85971,7 @@ var ts;
85887
85971
  function issueMemberSpecificError(node, typeWithThis, baseWithThis, broadDiag) {
85888
85972
  // iterate over all implemented properties and issue errors on each one which isn't compatible, rather than the class as a whole, if possible
85889
85973
  var issuedMemberError = false;
85890
- var _loop_33 = function (member) {
85974
+ var _loop_34 = function (member) {
85891
85975
  if (ts.isStatic(member)) {
85892
85976
  return "continue";
85893
85977
  }
@@ -85906,7 +85990,7 @@ var ts;
85906
85990
  };
85907
85991
  for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
85908
85992
  var member = _a[_i];
85909
- _loop_33(member);
85993
+ _loop_34(member);
85910
85994
  }
85911
85995
  if (!issuedMemberError) {
85912
85996
  // check again with diagnostics to generate a less-specific error
@@ -85977,7 +86061,7 @@ var ts;
85977
86061
  var _a, _b, _c, _d;
85978
86062
  // NOTE: assignability is checked in checkClassDeclaration
85979
86063
  var baseProperties = getPropertiesOfType(baseType);
85980
- var _loop_34 = function (baseProperty) {
86064
+ var _loop_35 = function (baseProperty) {
85981
86065
  var base = getTargetSymbol(baseProperty);
85982
86066
  if (base.flags & 4194304 /* SymbolFlags.Prototype */) {
85983
86067
  return "continue";
@@ -86087,8 +86171,8 @@ var ts;
86087
86171
  };
86088
86172
  basePropertyCheck: for (var _i = 0, baseProperties_1 = baseProperties; _i < baseProperties_1.length; _i++) {
86089
86173
  var baseProperty = baseProperties_1[_i];
86090
- var state_10 = _loop_34(baseProperty);
86091
- switch (state_10) {
86174
+ var state_11 = _loop_35(baseProperty);
86175
+ switch (state_11) {
86092
86176
  case "continue-basePropertyCheck": continue basePropertyCheck;
86093
86177
  }
86094
86178
  }
@@ -124931,7 +125015,7 @@ var ts;
124931
125015
  });
124932
125016
  // Sort by paths closest to importing file Name directory
124933
125017
  var sortedPaths = [];
124934
- var _loop_35 = function (directory) {
125018
+ var _loop_36 = function (directory) {
124935
125019
  var directoryStart = ts.ensureTrailingDirectorySeparator(directory);
124936
125020
  var pathsInDirectory;
124937
125021
  allFileNames.forEach(function (_a, fileName) {
@@ -124955,9 +125039,9 @@ var ts;
124955
125039
  };
124956
125040
  var out_directory_1;
124957
125041
  for (var directory = ts.getDirectoryPath(importingFileName); allFileNames.size !== 0;) {
124958
- var state_11 = _loop_35(directory);
125042
+ var state_12 = _loop_36(directory);
124959
125043
  directory = out_directory_1;
124960
- if (state_11 === "break")
125044
+ if (state_12 === "break")
124961
125045
  break;
124962
125046
  }
124963
125047
  if (allFileNames.size) {
@@ -125026,7 +125110,7 @@ var ts;
125026
125110
  }
125027
125111
  function tryGetModuleNameFromPaths(relativeToBaseUrl, paths, allowedEndings, host, compilerOptions) {
125028
125112
  for (var key in paths) {
125029
- var _loop_36 = function (patternText_1) {
125113
+ var _loop_37 = function (patternText_1) {
125030
125114
  var pattern = ts.normalizePath(patternText_1);
125031
125115
  var indexOfStar = pattern.indexOf("*");
125032
125116
  // In module resolution, if `pattern` itself has an extension, a file with that extension is looked up directly,
@@ -125093,9 +125177,9 @@ var ts;
125093
125177
  };
125094
125178
  for (var _i = 0, _a = paths[key]; _i < _a.length; _i++) {
125095
125179
  var patternText_1 = _a[_i];
125096
- var state_12 = _loop_36(patternText_1);
125097
- if (typeof state_12 === "object")
125098
- return state_12.value;
125180
+ var state_13 = _loop_37(patternText_1);
125181
+ if (typeof state_13 === "object")
125182
+ return state_13.value;
125099
125183
  }
125100
125184
  }
125101
125185
  function validateEnding(_a) {
@@ -135015,7 +135099,7 @@ var ts;
135015
135099
  return (location === null || location === void 0 ? void 0 : location.kind) === 79 /* SyntaxKind.Identifier */ ? ts.createTextSpanFromNode(location) : undefined;
135016
135100
  }
135017
135101
  function completionInfoFromData(sourceFile, host, program, compilerOptions, log, completionData, preferences, formatContext, position) {
135018
- var symbols = completionData.symbols, contextToken = completionData.contextToken, completionKind = completionData.completionKind, isInSnippetScope = completionData.isInSnippetScope, isNewIdentifierLocation = completionData.isNewIdentifierLocation, location = completionData.location, propertyAccessToConvert = completionData.propertyAccessToConvert, keywordFilters = completionData.keywordFilters, literals = completionData.literals, symbolToOriginInfoMap = completionData.symbolToOriginInfoMap, recommendedCompletion = completionData.recommendedCompletion, isJsxInitializer = completionData.isJsxInitializer, isTypeOnlyLocation = completionData.isTypeOnlyLocation, isJsxIdentifierExpected = completionData.isJsxIdentifierExpected, isRightOfOpenTag = completionData.isRightOfOpenTag, importCompletionNode = completionData.importCompletionNode, insideJsDocTagTypeExpression = completionData.insideJsDocTagTypeExpression, symbolToSortTextMap = completionData.symbolToSortTextMap, hasUnresolvedAutoImports = completionData.hasUnresolvedAutoImports;
135102
+ var symbols = completionData.symbols, contextToken = completionData.contextToken, completionKind = completionData.completionKind, isInSnippetScope = completionData.isInSnippetScope, isNewIdentifierLocation = completionData.isNewIdentifierLocation, location = completionData.location, propertyAccessToConvert = completionData.propertyAccessToConvert, keywordFilters = completionData.keywordFilters, literals = completionData.literals, symbolToOriginInfoMap = completionData.symbolToOriginInfoMap, recommendedCompletion = completionData.recommendedCompletion, isJsxInitializer = completionData.isJsxInitializer, isTypeOnlyLocation = completionData.isTypeOnlyLocation, isJsxIdentifierExpected = completionData.isJsxIdentifierExpected, isRightOfOpenTag = completionData.isRightOfOpenTag, importStatementCompletion = completionData.importStatementCompletion, insideJsDocTagTypeExpression = completionData.insideJsDocTagTypeExpression, symbolToSortTextMap = completionData.symbolToSortTextMap, hasUnresolvedAutoImports = completionData.hasUnresolvedAutoImports;
135019
135103
  // Verify if the file is JSX language variant
135020
135104
  if (ts.getLanguageVariant(sourceFile.scriptKind) === 1 /* LanguageVariant.JSX */) {
135021
135105
  var completionInfo = getJsxClosingTagCompletion(location, sourceFile);
@@ -135029,7 +135113,7 @@ var ts;
135029
135113
  return undefined;
135030
135114
  }
135031
135115
  var uniqueNames = getCompletionEntriesFromSymbols(symbols, entries,
135032
- /*replacementToken*/ undefined, contextToken, location, sourceFile, host, program, ts.getEmitScriptTarget(compilerOptions), log, completionKind, preferences, compilerOptions, formatContext, isTypeOnlyLocation, propertyAccessToConvert, isJsxIdentifierExpected, isJsxInitializer, importCompletionNode, recommendedCompletion, symbolToOriginInfoMap, symbolToSortTextMap, isJsxIdentifierExpected, isRightOfOpenTag);
135116
+ /*replacementToken*/ undefined, contextToken, location, sourceFile, host, program, ts.getEmitScriptTarget(compilerOptions), log, completionKind, preferences, compilerOptions, formatContext, isTypeOnlyLocation, propertyAccessToConvert, isJsxIdentifierExpected, isJsxInitializer, importStatementCompletion, recommendedCompletion, symbolToOriginInfoMap, symbolToSortTextMap, isJsxIdentifierExpected, isRightOfOpenTag);
135033
135117
  if (keywordFilters !== 0 /* KeywordCompletionFilters.None */) {
135034
135118
  for (var _i = 0, _a = getKeywordCompletions(keywordFilters, !insideJsDocTagTypeExpression && ts.isSourceFileJS(sourceFile)); _i < _a.length; _i++) {
135035
135119
  var keywordEntry = _a[_i];
@@ -135147,7 +135231,7 @@ var ts;
135147
135231
  function createCompletionEntryForLiteral(sourceFile, preferences, literal) {
135148
135232
  return { name: completionNameForLiteral(sourceFile, preferences, literal), kind: "string" /* ScriptElementKind.string */, kindModifiers: "" /* ScriptElementKindModifier.none */, sortText: Completions.SortText.LocationPriority };
135149
135233
  }
135150
- function createCompletionEntry(symbol, sortText, replacementToken, contextToken, location, sourceFile, host, program, name, needsConvertPropertyAccess, origin, recommendedCompletion, propertyAccessToConvert, isJsxInitializer, importCompletionNode, useSemicolons, options, preferences, completionKind, formatContext, isJsxIdentifierExpected, isRightOfOpenTag) {
135234
+ function createCompletionEntry(symbol, sortText, replacementToken, contextToken, location, sourceFile, host, program, name, needsConvertPropertyAccess, origin, recommendedCompletion, propertyAccessToConvert, isJsxInitializer, importStatementCompletion, useSemicolons, options, preferences, completionKind, formatContext, isJsxIdentifierExpected, isRightOfOpenTag) {
135151
135235
  var _a, _b;
135152
135236
  var insertText;
135153
135237
  var replacementSpan = ts.getReplacementSpanForContextToken(replacementToken);
@@ -135203,8 +135287,8 @@ var ts;
135203
135287
  }
135204
135288
  if (originIsResolvedExport(origin)) {
135205
135289
  sourceDisplay = [ts.textPart(origin.moduleSpecifier)];
135206
- if (importCompletionNode) {
135207
- (_a = getInsertTextAndReplacementSpanForImportCompletion(name, importCompletionNode, contextToken, origin, useSemicolons, options, preferences), insertText = _a.insertText, replacementSpan = _a.replacementSpan);
135290
+ if (importStatementCompletion) {
135291
+ (_a = getInsertTextAndReplacementSpanForImportCompletion(name, importStatementCompletion, origin, useSemicolons, sourceFile, options, preferences), insertText = _a.insertText, replacementSpan = _a.replacementSpan);
135208
135292
  isSnippet = preferences.includeCompletionsWithSnippetText ? true : undefined;
135209
135293
  }
135210
135294
  }
@@ -135259,7 +135343,7 @@ var ts;
135259
135343
  }
135260
135344
  if (originIsExport(origin) || originIsResolvedExport(origin)) {
135261
135345
  data = originToCompletionEntryData(origin);
135262
- hasAction = !importCompletionNode;
135346
+ hasAction = !importStatementCompletion;
135263
135347
  }
135264
135348
  // TODO(drosen): Right now we just permit *all* semantic meanings when calling
135265
135349
  // 'getSymbolKind' which is permissible given that it is backwards compatible; but
@@ -135282,7 +135366,7 @@ var ts;
135282
135366
  labelDetails: labelDetails,
135283
135367
  isSnippet: isSnippet,
135284
135368
  isPackageJsonImport: originIsPackageJsonImport(origin) || undefined,
135285
- isImportStatementCompletion: !!importCompletionNode || undefined,
135369
+ isImportStatementCompletion: !!importStatementCompletion || undefined,
135286
135370
  data: data,
135287
135371
  };
135288
135372
  }
@@ -135654,19 +135738,16 @@ var ts;
135654
135738
  };
135655
135739
  return unresolvedOrigin;
135656
135740
  }
135657
- function getInsertTextAndReplacementSpanForImportCompletion(name, importCompletionNode, contextToken, origin, useSemicolons, options, preferences) {
135658
- var _a, _b, _c;
135659
- var sourceFile = importCompletionNode.getSourceFile();
135660
- var replacementSpan = ts.createTextSpanFromNode(ts.findAncestor(importCompletionNode, ts.or(ts.isImportDeclaration, ts.isImportEqualsDeclaration)) || importCompletionNode, sourceFile);
135741
+ function getInsertTextAndReplacementSpanForImportCompletion(name, importStatementCompletion, origin, useSemicolons, sourceFile, options, preferences) {
135742
+ var replacementSpan = importStatementCompletion.replacementSpan;
135661
135743
  var quotedModuleSpecifier = ts.quote(sourceFile, preferences, origin.moduleSpecifier);
135662
135744
  var exportKind = origin.isDefaultExport ? 1 /* ExportKind.Default */ :
135663
135745
  origin.exportName === "export=" /* InternalSymbolName.ExportEquals */ ? 2 /* ExportKind.ExportEquals */ :
135664
135746
  0 /* ExportKind.Named */;
135665
135747
  var tabStop = preferences.includeCompletionsWithSnippetText ? "$1" : "";
135666
135748
  var importKind = ts.codefix.getImportKind(sourceFile, exportKind, options, /*forceImportKeyword*/ true);
135667
- var isTopLevelTypeOnly = ((_b = (_a = ts.tryCast(importCompletionNode, ts.isImportDeclaration)) === null || _a === void 0 ? void 0 : _a.importClause) === null || _b === void 0 ? void 0 : _b.isTypeOnly) || ((_c = ts.tryCast(importCompletionNode, ts.isImportEqualsDeclaration)) === null || _c === void 0 ? void 0 : _c.isTypeOnly);
135668
- var isImportSpecifierTypeOnly = couldBeTypeOnlyImportSpecifier(importCompletionNode, contextToken);
135669
- var topLevelTypeOnlyText = isTopLevelTypeOnly ? " ".concat(ts.tokenToString(154 /* SyntaxKind.TypeKeyword */), " ") : " ";
135749
+ var isImportSpecifierTypeOnly = importStatementCompletion.couldBeTypeOnlyImportSpecifier;
135750
+ var topLevelTypeOnlyText = importStatementCompletion.isTopLevelTypeOnly ? " ".concat(ts.tokenToString(154 /* SyntaxKind.TypeKeyword */), " ") : " ";
135670
135751
  var importSpecifierTypeOnlyText = isImportSpecifierTypeOnly ? "".concat(ts.tokenToString(154 /* SyntaxKind.TypeKeyword */), " ") : "";
135671
135752
  var suffix = useSemicolons ? ";" : "";
135672
135753
  switch (importKind) {
@@ -135700,7 +135781,7 @@ var ts;
135700
135781
  return CompletionSource.TypeOnlyAlias;
135701
135782
  }
135702
135783
  }
135703
- function getCompletionEntriesFromSymbols(symbols, entries, replacementToken, contextToken, location, sourceFile, host, program, target, log, kind, preferences, compilerOptions, formatContext, isTypeOnlyLocation, propertyAccessToConvert, jsxIdentifierExpected, isJsxInitializer, importCompletionNode, recommendedCompletion, symbolToOriginInfoMap, symbolToSortTextMap, isJsxIdentifierExpected, isRightOfOpenTag) {
135784
+ function getCompletionEntriesFromSymbols(symbols, entries, replacementToken, contextToken, location, sourceFile, host, program, target, log, kind, preferences, compilerOptions, formatContext, isTypeOnlyLocation, propertyAccessToConvert, jsxIdentifierExpected, isJsxInitializer, importStatementCompletion, recommendedCompletion, symbolToOriginInfoMap, symbolToSortTextMap, isJsxIdentifierExpected, isRightOfOpenTag) {
135704
135785
  var _a;
135705
135786
  var start = ts.timestamp();
135706
135787
  var variableDeclaration = getVariableDeclaration(location);
@@ -135721,7 +135802,7 @@ var ts;
135721
135802
  var name = info.name, needsConvertPropertyAccess = info.needsConvertPropertyAccess;
135722
135803
  var originalSortText = (_a = symbolToSortTextMap === null || symbolToSortTextMap === void 0 ? void 0 : symbolToSortTextMap[ts.getSymbolId(symbol)]) !== null && _a !== void 0 ? _a : Completions.SortText.LocationPriority;
135723
135804
  var sortText = (isDeprecated(symbol, typeChecker) ? Completions.SortText.Deprecated(originalSortText) : originalSortText);
135724
- var entry = createCompletionEntry(symbol, sortText, replacementToken, contextToken, location, sourceFile, host, program, name, needsConvertPropertyAccess, origin, recommendedCompletion, propertyAccessToConvert, isJsxInitializer, importCompletionNode, useSemicolons, compilerOptions, preferences, kind, formatContext, isJsxIdentifierExpected, isRightOfOpenTag);
135805
+ var entry = createCompletionEntry(symbol, sortText, replacementToken, contextToken, location, sourceFile, host, program, name, needsConvertPropertyAccess, origin, recommendedCompletion, propertyAccessToConvert, isJsxInitializer, importStatementCompletion, useSemicolons, compilerOptions, preferences, kind, formatContext, isJsxIdentifierExpected, isRightOfOpenTag);
135725
135806
  if (!entry) {
135726
135807
  continue;
135727
135808
  }
@@ -135912,7 +135993,7 @@ var ts;
135912
135993
  Completions.createCompletionDetails = createCompletionDetails;
135913
135994
  function getCompletionEntryCodeActionsAndSourceDisplay(name, location, contextToken, origin, symbol, program, host, compilerOptions, sourceFile, position, previousToken, formatContext, preferences, data, source, cancellationToken) {
135914
135995
  if (data === null || data === void 0 ? void 0 : data.moduleSpecifier) {
135915
- if (previousToken && getImportStatementCompletionInfo(contextToken || previousToken).replacementNode) {
135996
+ if (previousToken && getImportStatementCompletionInfo(contextToken || previousToken).replacementSpan) {
135916
135997
  // Import statement completion: 'import c|'
135917
135998
  return { codeActions: undefined, sourceDisplay: [ts.textPart(data.moduleSpecifier)] };
135918
135999
  }
@@ -136113,34 +136194,34 @@ var ts;
136113
136194
  var isStartingCloseTag = false;
136114
136195
  var isJsxInitializer = false;
136115
136196
  var isJsxIdentifierExpected = false;
136116
- var importCompletionNode;
136197
+ var importStatementCompletion;
136117
136198
  var location = ts.getTouchingPropertyName(sourceFile, position);
136118
136199
  var keywordFilters = 0 /* KeywordCompletionFilters.None */;
136119
136200
  var isNewIdentifierLocation = false;
136120
136201
  var flags = 0 /* CompletionInfoFlags.None */;
136121
136202
  if (contextToken) {
136122
- var importStatementCompletion = getImportStatementCompletionInfo(contextToken);
136123
- isNewIdentifierLocation = importStatementCompletion.isNewIdentifierLocation;
136124
- if (importStatementCompletion.keywordCompletion) {
136125
- if (importStatementCompletion.isKeywordOnlyCompletion) {
136203
+ var importStatementCompletionInfo = getImportStatementCompletionInfo(contextToken);
136204
+ if (importStatementCompletionInfo.keywordCompletion) {
136205
+ if (importStatementCompletionInfo.isKeywordOnlyCompletion) {
136126
136206
  return {
136127
136207
  kind: 4 /* CompletionDataKind.Keywords */,
136128
- keywordCompletions: [keywordToCompletionEntry(importStatementCompletion.keywordCompletion)],
136129
- isNewIdentifierLocation: isNewIdentifierLocation,
136208
+ keywordCompletions: [keywordToCompletionEntry(importStatementCompletionInfo.keywordCompletion)],
136209
+ isNewIdentifierLocation: importStatementCompletionInfo.isNewIdentifierLocation,
136130
136210
  };
136131
136211
  }
136132
- keywordFilters = keywordFiltersFromSyntaxKind(importStatementCompletion.keywordCompletion);
136212
+ keywordFilters = keywordFiltersFromSyntaxKind(importStatementCompletionInfo.keywordCompletion);
136133
136213
  }
136134
- if (importStatementCompletion.replacementNode && preferences.includeCompletionsForImportStatements && preferences.includeCompletionsWithInsertText) {
136214
+ if (importStatementCompletionInfo.replacementSpan && preferences.includeCompletionsForImportStatements && preferences.includeCompletionsWithInsertText) {
136135
136215
  // Import statement completions use `insertText`, and also require the `data` property of `CompletionEntryIdentifier`
136136
136216
  // added in TypeScript 4.3 to be sent back from the client during `getCompletionEntryDetails`. Since this feature
136137
136217
  // is not backward compatible with older clients, the language service defaults to disabling it, allowing newer clients
136138
136218
  // to opt in with the `includeCompletionsForImportStatements` user preference.
136139
- importCompletionNode = importStatementCompletion.replacementNode;
136140
136219
  flags |= 2 /* CompletionInfoFlags.IsImportStatementCompletion */;
136220
+ importStatementCompletion = importStatementCompletionInfo;
136221
+ isNewIdentifierLocation = importStatementCompletionInfo.isNewIdentifierLocation;
136141
136222
  }
136142
136223
  // Bail out if this is a known invalid completion location
136143
- if (!importCompletionNode && isCompletionListBlocker(contextToken)) {
136224
+ if (!importStatementCompletionInfo.replacementSpan && isCompletionListBlocker(contextToken)) {
136144
136225
  log("Returning an empty list because completion was requested in an invalid position.");
136145
136226
  return keywordFilters
136146
136227
  ? keywordCompletionData(keywordFilters, isJsOnlyLocation, isNewIdentifierDefinitionLocation())
@@ -136186,7 +136267,7 @@ var ts;
136186
136267
  return undefined;
136187
136268
  }
136188
136269
  }
136189
- else if (!importCompletionNode && sourceFile.languageVariant === 1 /* LanguageVariant.JSX */) {
136270
+ else if (!importStatementCompletion) {
136190
136271
  // <UI.Test /* completion position */ />
136191
136272
  // If the tagname is a property access expression, we will then walk up to the top most of property access expression.
136192
136273
  // Then, try to get a JSX container and its associated attributes type.
@@ -136329,7 +136410,7 @@ var ts;
136329
136410
  isTypeOnlyLocation: isTypeOnlyLocation,
136330
136411
  isJsxIdentifierExpected: isJsxIdentifierExpected,
136331
136412
  isRightOfOpenTag: isRightOfOpenTag,
136332
- importCompletionNode: importCompletionNode,
136413
+ importStatementCompletion: importStatementCompletion,
136333
136414
  hasUnresolvedAutoImports: hasUnresolvedAutoImports,
136334
136415
  flags: flags,
136335
136416
  };
@@ -136583,7 +136664,7 @@ var ts;
136583
136664
  return 1 /* GlobalsSearch.Success */;
136584
136665
  }
136585
136666
  function tryGetImportCompletionSymbols() {
136586
- if (!importCompletionNode)
136667
+ if (!importStatementCompletion)
136587
136668
  return 0 /* GlobalsSearch.Continue */;
136588
136669
  isNewIdentifierLocation = true;
136589
136670
  collectAutoImports();
@@ -136666,7 +136747,7 @@ var ts;
136666
136747
  }
136667
136748
  function shouldOfferImportCompletions() {
136668
136749
  // If already typing an import statement, provide completions for it.
136669
- if (importCompletionNode)
136750
+ if (importStatementCompletion)
136670
136751
  return true;
136671
136752
  // If current completion is for non-contextual Object literal shortahands, ignore auto-import symbols
136672
136753
  if (isNonContextualObjectLiteral)
@@ -136696,7 +136777,7 @@ var ts;
136696
136777
  }
136697
136778
  function isTypeOnlyCompletion() {
136698
136779
  return insideJsDocTagTypeExpression
136699
- || !!importCompletionNode && ts.isTypeOnlyImportOrExportDeclaration(location.parent)
136780
+ || !!importStatementCompletion && ts.isTypeOnlyImportOrExportDeclaration(location.parent)
136700
136781
  || !isContextTokenValueLocation(contextToken) &&
136701
136782
  (ts.isPossiblyTypeArgumentPosition(contextToken, sourceFile, typeChecker)
136702
136783
  || ts.isPartOfTypeNode(location)
@@ -136746,8 +136827,7 @@ var ts;
136746
136827
  flags |= 1 /* CompletionInfoFlags.MayIncludeAutoImports */;
136747
136828
  // import { type | -> token text should be blank
136748
136829
  var isAfterTypeOnlyImportSpecifierModifier = previousToken === contextToken
136749
- && importCompletionNode
136750
- && couldBeTypeOnlyImportSpecifier(importCompletionNode, contextToken);
136830
+ && importStatementCompletion;
136751
136831
  var lowerCaseTokenText = isAfterTypeOnlyImportSpecifierModifier ? "" :
136752
136832
  previousToken && ts.isIdentifier(previousToken) ? previousToken.text.toLowerCase() :
136753
136833
  "";
@@ -136755,14 +136835,14 @@ var ts;
136755
136835
  var exportInfo = ts.getExportInfoMap(sourceFile, host, program, preferences, cancellationToken);
136756
136836
  var packageJsonAutoImportProvider = (_b = host.getPackageJsonAutoImportProvider) === null || _b === void 0 ? void 0 : _b.call(host);
136757
136837
  var packageJsonFilter = detailsEntryId ? undefined : ts.createPackageJsonImportFilter(sourceFile, preferences, host);
136758
- resolvingModuleSpecifiers("collectAutoImports", host, importSpecifierResolver || (importSpecifierResolver = ts.codefix.createImportSpecifierResolver(sourceFile, program, host, preferences)), program, position, preferences, !!importCompletionNode, ts.isValidTypeOnlyAliasUseSite(location), function (context) {
136838
+ resolvingModuleSpecifiers("collectAutoImports", host, importSpecifierResolver || (importSpecifierResolver = ts.codefix.createImportSpecifierResolver(sourceFile, program, host, preferences)), program, position, preferences, !!importStatementCompletion, ts.isValidTypeOnlyAliasUseSite(location), function (context) {
136759
136839
  exportInfo.search(sourceFile.path,
136760
136840
  /*preferCapitalized*/ isRightOfOpenTag, function (symbolName, targetFlags) {
136761
136841
  if (!ts.isIdentifierText(symbolName, ts.getEmitScriptTarget(host.getCompilationSettings())))
136762
136842
  return false;
136763
136843
  if (!detailsEntryId && ts.isStringANonContextualKeyword(symbolName))
136764
136844
  return false;
136765
- if (!isTypeOnlyLocation && !importCompletionNode && !(targetFlags & 111551 /* SymbolFlags.Value */))
136845
+ if (!isTypeOnlyLocation && !importStatementCompletion && !(targetFlags & 111551 /* SymbolFlags.Value */))
136766
136846
  return false;
136767
136847
  if (isTypeOnlyLocation && !(targetFlags & (1536 /* SymbolFlags.Module */ | 788968 /* SymbolFlags.Type */)))
136768
136848
  return false;
@@ -136843,7 +136923,7 @@ var ts;
136843
136923
  return;
136844
136924
  }
136845
136925
  symbolToOriginInfoMap[symbols.length] = origin;
136846
- symbolToSortTextMap[symbolId] = importCompletionNode ? Completions.SortText.LocationPriority : Completions.SortText.AutoImportSuggestions;
136926
+ symbolToSortTextMap[symbolId] = importStatementCompletion ? Completions.SortText.LocationPriority : Completions.SortText.AutoImportSuggestions;
136847
136927
  symbols.push(symbol);
136848
136928
  }
136849
136929
  /* Mutates `symbols` and `symbolToOriginInfoMap`. */
@@ -138110,6 +138190,7 @@ var ts;
138110
138190
  return undefined;
138111
138191
  }
138112
138192
  function getImportStatementCompletionInfo(contextToken) {
138193
+ var _a, _b, _c;
138113
138194
  var keywordCompletion;
138114
138195
  var isKeywordOnlyCompletion = false;
138115
138196
  var candidate = getCandidate();
@@ -138117,9 +138198,9 @@ var ts;
138117
138198
  isKeywordOnlyCompletion: isKeywordOnlyCompletion,
138118
138199
  keywordCompletion: keywordCompletion,
138119
138200
  isNewIdentifierLocation: !!(candidate || keywordCompletion === 154 /* SyntaxKind.TypeKeyword */),
138120
- replacementNode: candidate && ts.rangeIsOnSingleLine(candidate, candidate.getSourceFile())
138121
- ? candidate
138122
- : undefined
138201
+ isTopLevelTypeOnly: !!((_b = (_a = ts.tryCast(candidate, ts.isImportDeclaration)) === null || _a === void 0 ? void 0 : _a.importClause) === null || _b === void 0 ? void 0 : _b.isTypeOnly) || !!((_c = ts.tryCast(candidate, ts.isImportEqualsDeclaration)) === null || _c === void 0 ? void 0 : _c.isTypeOnly),
138202
+ couldBeTypeOnlyImportSpecifier: !!candidate && couldBeTypeOnlyImportSpecifier(candidate, contextToken),
138203
+ replacementSpan: getSingleLineReplacementSpanForImportCompletionNode(candidate),
138123
138204
  };
138124
138205
  function getCandidate() {
138125
138206
  var parent = contextToken.parent;
@@ -138161,14 +138242,71 @@ var ts;
138161
138242
  return undefined;
138162
138243
  }
138163
138244
  }
138245
+ function getSingleLineReplacementSpanForImportCompletionNode(node) {
138246
+ var _a, _b, _c;
138247
+ if (!node)
138248
+ return undefined;
138249
+ var top = (_a = ts.findAncestor(node, ts.or(ts.isImportDeclaration, ts.isImportEqualsDeclaration))) !== null && _a !== void 0 ? _a : node;
138250
+ var sourceFile = top.getSourceFile();
138251
+ if (ts.rangeIsOnSingleLine(top, sourceFile)) {
138252
+ return ts.createTextSpanFromNode(top, sourceFile);
138253
+ }
138254
+ // ImportKeyword was necessarily on one line; ImportSpecifier was necessarily parented in an ImportDeclaration
138255
+ ts.Debug.assert(top.kind !== 100 /* SyntaxKind.ImportKeyword */ && top.kind !== 273 /* SyntaxKind.ImportSpecifier */);
138256
+ // Guess which point in the import might actually be a later statement parsed as part of the import
138257
+ // during parser recovery - either in the middle of named imports, or the module specifier.
138258
+ var potentialSplitPoint = top.kind === 269 /* SyntaxKind.ImportDeclaration */
138259
+ ? (_c = getPotentiallyInvalidImportSpecifier((_b = top.importClause) === null || _b === void 0 ? void 0 : _b.namedBindings)) !== null && _c !== void 0 ? _c : top.moduleSpecifier
138260
+ : top.moduleReference;
138261
+ var withoutModuleSpecifier = {
138262
+ pos: top.getFirstToken().getStart(),
138263
+ end: potentialSplitPoint.pos,
138264
+ };
138265
+ // The module specifier/reference was previously found to be missing, empty, or
138266
+ // not a string literal - in this last case, it's likely that statement on a following
138267
+ // line was parsed as the module specifier of a partially-typed import, e.g.
138268
+ // import Foo|
138269
+ // interface Blah {}
138270
+ // This appears to be a multiline-import, and editors can't replace multiple lines.
138271
+ // But if everything but the "module specifier" is on one line, by this point we can
138272
+ // assume that the "module specifier" is actually just another statement, and return
138273
+ // the single-line range of the import excluding that probable statement.
138274
+ if (ts.rangeIsOnSingleLine(withoutModuleSpecifier, sourceFile)) {
138275
+ return ts.createTextSpanFromRange(withoutModuleSpecifier);
138276
+ }
138277
+ }
138278
+ // Tries to identify the first named import that is not really a named import, but rather
138279
+ // just parser recovery for a situation like:
138280
+ // import { Foo|
138281
+ // interface Bar {}
138282
+ // in which `Foo`, `interface`, and `Bar` are all parsed as import specifiers. The caller
138283
+ // will also check if this token is on a separate line from the rest of the import.
138284
+ function getPotentiallyInvalidImportSpecifier(namedBindings) {
138285
+ var _a;
138286
+ return ts.find((_a = ts.tryCast(namedBindings, ts.isNamedImports)) === null || _a === void 0 ? void 0 : _a.elements, function (e) {
138287
+ var _a;
138288
+ return !e.propertyName &&
138289
+ ts.isStringANonContextualKeyword(e.name.text) &&
138290
+ ((_a = ts.findPrecedingToken(e.name.pos, namedBindings.getSourceFile(), namedBindings)) === null || _a === void 0 ? void 0 : _a.kind) !== 27 /* SyntaxKind.CommaToken */;
138291
+ });
138292
+ }
138164
138293
  function couldBeTypeOnlyImportSpecifier(importSpecifier, contextToken) {
138165
138294
  return ts.isImportSpecifier(importSpecifier)
138166
138295
  && (importSpecifier.isTypeOnly || contextToken === importSpecifier.name && ts.isTypeKeywordTokenOrIdentifier(contextToken));
138167
138296
  }
138168
138297
  function canCompleteFromNamedBindings(namedBindings) {
138169
- return isModuleSpecifierMissingOrEmpty(namedBindings.parent.parent.moduleSpecifier)
138170
- && (ts.isNamespaceImport(namedBindings) || namedBindings.elements.length < 2)
138171
- && !namedBindings.parent.name;
138298
+ if (!isModuleSpecifierMissingOrEmpty(namedBindings.parent.parent.moduleSpecifier) || namedBindings.parent.name) {
138299
+ return false;
138300
+ }
138301
+ if (ts.isNamedImports(namedBindings)) {
138302
+ // We can only complete on named imports if there are no other named imports already,
138303
+ // but parser recovery sometimes puts later statements in the named imports list, so
138304
+ // we try to only consider the probably-valid ones.
138305
+ var invalidNamedImport = getPotentiallyInvalidImportSpecifier(namedBindings);
138306
+ var validImports = invalidNamedImport ? namedBindings.elements.indexOf(invalidNamedImport) : namedBindings.elements.length;
138307
+ return validImports < 2;
138308
+ }
138309
+ return true;
138172
138310
  }
138173
138311
  function isModuleSpecifierMissingOrEmpty(specifier) {
138174
138312
  var _a;
@@ -156901,7 +157039,7 @@ var ts;
156901
157039
  var related = ts.find(diag.relatedInformation, function (related) { return related.code === ts.Diagnostics.This_type_parameter_might_need_an_extends_0_constraint.code; });
156902
157040
  if (related === undefined || related.file === undefined || related.start === undefined || related.length === undefined)
156903
157041
  return;
156904
- var declaration = findAncestorMatchingSpan(related.file, ts.createTextSpan(related.start, related.length));
157042
+ var declaration = codefix.findAncestorMatchingSpan(related.file, ts.createTextSpan(related.start, related.length));
156905
157043
  if (declaration === undefined)
156906
157044
  return;
156907
157045
  if (ts.isIdentifier(declaration) && ts.isTypeParameterDeclaration(declaration.parent)) {
@@ -156935,14 +157073,6 @@ var ts;
156935
157073
  }
156936
157074
  }
156937
157075
  }
156938
- function findAncestorMatchingSpan(sourceFile, span) {
156939
- var end = ts.textSpanEnd(span);
156940
- var token = ts.getTokenAtPosition(sourceFile, span.start);
156941
- while (token.end < end) {
156942
- token = token.parent;
156943
- }
156944
- return token;
156945
- }
156946
157076
  function tryGetConstraintFromDiagnosticMessage(messageText) {
156947
157077
  var _a = ts.flattenDiagnosticMessageText(messageText, "\n", 0).match(/`extends (.*)`/) || [], _ = _a[0], constraint = _a[1];
156948
157078
  return constraint;
@@ -158488,6 +158618,63 @@ var ts;
158488
158618
  })(ts || (ts = {}));
158489
158619
  /* @internal */
158490
158620
  var ts;
158621
+ (function (ts) {
158622
+ var codefix;
158623
+ (function (codefix) {
158624
+ var fixId = "fixNaNEquality";
158625
+ var errorCodes = [
158626
+ ts.Diagnostics.This_condition_will_always_return_0.code,
158627
+ ];
158628
+ codefix.registerCodeFix({
158629
+ errorCodes: errorCodes,
158630
+ getCodeActions: function (context) {
158631
+ var sourceFile = context.sourceFile, span = context.span, program = context.program;
158632
+ var info = getInfo(program, sourceFile, span);
158633
+ if (info === undefined)
158634
+ return;
158635
+ var suggestion = info.suggestion, expression = info.expression, arg = info.arg;
158636
+ var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return doChange(t, sourceFile, arg, expression); });
158637
+ return [codefix.createCodeFixAction(fixId, changes, [ts.Diagnostics.Use_0, suggestion], fixId, ts.Diagnostics.Use_Number_isNaN_in_all_conditions)];
158638
+ },
158639
+ fixIds: [fixId],
158640
+ getAllCodeActions: function (context) {
158641
+ return codefix.codeFixAll(context, errorCodes, function (changes, diag) {
158642
+ var info = getInfo(context.program, diag.file, ts.createTextSpan(diag.start, diag.length));
158643
+ if (info) {
158644
+ doChange(changes, diag.file, info.arg, info.expression);
158645
+ }
158646
+ });
158647
+ }
158648
+ });
158649
+ function getInfo(program, sourceFile, span) {
158650
+ var diag = ts.find(program.getSemanticDiagnostics(sourceFile), function (diag) { return diag.start === span.start && diag.length === span.length; });
158651
+ if (diag === undefined || diag.relatedInformation === undefined)
158652
+ return;
158653
+ var related = ts.find(diag.relatedInformation, function (related) { return related.code === ts.Diagnostics.Did_you_mean_0.code; });
158654
+ if (related === undefined || related.file === undefined || related.start === undefined || related.length === undefined)
158655
+ return;
158656
+ var token = codefix.findAncestorMatchingSpan(related.file, ts.createTextSpan(related.start, related.length));
158657
+ if (token === undefined)
158658
+ return;
158659
+ if (ts.isExpression(token) && ts.isBinaryExpression(token.parent)) {
158660
+ return { suggestion: getSuggestion(related.messageText), expression: token.parent, arg: token };
158661
+ }
158662
+ return undefined;
158663
+ }
158664
+ function doChange(changes, sourceFile, arg, expression) {
158665
+ var callExpression = ts.factory.createCallExpression(ts.factory.createPropertyAccessExpression(ts.factory.createIdentifier("Number"), ts.factory.createIdentifier("isNaN")), /*typeArguments*/ undefined, [arg]);
158666
+ var operator = expression.operatorToken.kind;
158667
+ changes.replaceNode(sourceFile, expression, operator === 37 /* SyntaxKind.ExclamationEqualsEqualsToken */ || operator === 35 /* SyntaxKind.ExclamationEqualsToken */
158668
+ ? ts.factory.createPrefixUnaryExpression(53 /* SyntaxKind.ExclamationToken */, callExpression) : callExpression);
158669
+ }
158670
+ function getSuggestion(messageText) {
158671
+ var _a = ts.flattenDiagnosticMessageText(messageText, "\n", 0).match(/\'(.*)\'/) || [], _ = _a[0], suggestion = _a[1];
158672
+ return suggestion;
158673
+ }
158674
+ })(codefix = ts.codefix || (ts.codefix = {}));
158675
+ })(ts || (ts = {}));
158676
+ /* @internal */
158677
+ var ts;
158491
158678
  (function (ts) {
158492
158679
  var codefix;
158493
158680
  (function (codefix) {
@@ -161205,6 +161392,15 @@ var ts;
161205
161392
  symbols.forEach(function (s) { return importAdder.addImportFromExportedSymbol(s, /*isValidTypeOnlyUseSite*/ true); });
161206
161393
  }
161207
161394
  codefix.importSymbols = importSymbols;
161395
+ function findAncestorMatchingSpan(sourceFile, span) {
161396
+ var end = ts.textSpanEnd(span);
161397
+ var token = ts.getTokenAtPosition(sourceFile, span.start);
161398
+ while (token.end < end) {
161399
+ token = token.parent;
161400
+ }
161401
+ return token;
161402
+ }
161403
+ codefix.findAncestorMatchingSpan = findAncestorMatchingSpan;
161208
161404
  })(codefix = ts.codefix || (ts.codefix = {}));
161209
161405
  })(ts || (ts = {}));
161210
161406
  /* @internal */