typescript 4.9.0-dev.20220920 → 4.9.0-dev.20220922

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.20220922");
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
  }
@@ -45226,6 +45253,7 @@ var ts;
45226
45253
  }
45227
45254
  }
45228
45255
  function loadModuleFromSpecificNodeModulesDirectory(extensions, moduleName, nodeModulesDirectory, nodeModulesDirectoryExists, state, cache, redirectedReference) {
45256
+ var _a;
45229
45257
  var candidate = ts.normalizePath(ts.combinePaths(nodeModulesDirectory, moduleName));
45230
45258
  // First look for a nested package.json, as in `node_modules/foo/bar/package.json`.
45231
45259
  var packageInfo = getPackageJsonInfo(candidate, !nodeModulesDirectoryExists, state);
@@ -45240,13 +45268,7 @@ var ts;
45240
45268
  return withPackageId(packageInfo, fromDirectory);
45241
45269
  }
45242
45270
  }
45243
- var _a = parsePackageName(moduleName), packageName = _a.packageName, rest = _a.rest;
45244
45271
  var loader = function (extensions, candidate, onlyRecordFailures, state) {
45245
- var _a;
45246
- // package exports are higher priority than file/directory lookups (and, if there's exports present, blocks them)
45247
- if (packageInfo && packageInfo.contents.packageJsonContent.exports && state.features & NodeResolutionFeatures.Exports) {
45248
- return (_a = loadModuleFromExports(packageInfo, extensions, ts.combinePaths(".", rest), state, cache, redirectedReference)) === null || _a === void 0 ? void 0 : _a.value;
45249
- }
45250
45272
  var pathAndExtension = loadModuleFromFile(extensions, candidate, onlyRecordFailures, state) ||
45251
45273
  loadNodeModuleFromDirectoryWorker(extensions, candidate, onlyRecordFailures, state, packageInfo && packageInfo.contents.packageJsonContent, packageInfo && packageInfo.contents.versionPaths);
45252
45274
  if (!pathAndExtension && packageInfo
@@ -45259,19 +45281,24 @@ var ts;
45259
45281
  }
45260
45282
  return withPackageId(packageInfo, pathAndExtension);
45261
45283
  };
45262
- if (rest !== "") { // If "rest" is empty, we just did this search above.
45263
- var packageDirectory = ts.combinePaths(nodeModulesDirectory, packageName);
45264
- // Don't use a "types" or "main" from here because we're not loading the root, but a subdirectory -- just here for the packageId and path mappings.
45284
+ var _b = parsePackageName(moduleName), packageName = _b.packageName, rest = _b.rest;
45285
+ var packageDirectory = ts.combinePaths(nodeModulesDirectory, packageName);
45286
+ if (rest !== "") {
45287
+ // Previous `packageInfo` may have been from a nested package.json; ensure we have the one from the package root now.
45265
45288
  packageInfo = getPackageJsonInfo(packageDirectory, !nodeModulesDirectoryExists, state);
45266
- if (packageInfo && packageInfo.contents.versionPaths) {
45267
- if (state.traceEnabled) {
45268
- trace(state.host, ts.Diagnostics.package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_match_module_name_2, packageInfo.contents.versionPaths.version, ts.version, rest);
45269
- }
45270
- var packageDirectoryExists = nodeModulesDirectoryExists && ts.directoryProbablyExists(packageDirectory, state.host);
45271
- var fromPaths = tryLoadModuleUsingPaths(extensions, rest, packageDirectory, packageInfo.contents.versionPaths.paths, /*pathPatterns*/ undefined, loader, !packageDirectoryExists, state);
45272
- if (fromPaths) {
45273
- return fromPaths.value;
45274
- }
45289
+ }
45290
+ // package exports are higher priority than file/directory/typesVersions lookups and (and, if there's exports present, blocks them)
45291
+ if (packageInfo && packageInfo.contents.packageJsonContent.exports && state.features & NodeResolutionFeatures.Exports) {
45292
+ return (_a = loadModuleFromExports(packageInfo, extensions, ts.combinePaths(".", rest), state, cache, redirectedReference)) === null || _a === void 0 ? void 0 : _a.value;
45293
+ }
45294
+ if (rest !== "" && packageInfo && packageInfo.contents.versionPaths) {
45295
+ if (state.traceEnabled) {
45296
+ trace(state.host, ts.Diagnostics.package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_match_module_name_2, packageInfo.contents.versionPaths.version, ts.version, rest);
45297
+ }
45298
+ var packageDirectoryExists = nodeModulesDirectoryExists && ts.directoryProbablyExists(packageDirectory, state.host);
45299
+ var fromPaths = tryLoadModuleUsingPaths(extensions, rest, packageDirectory, packageInfo.contents.versionPaths.paths, /*pathPatterns*/ undefined, loader, !packageDirectoryExists, state);
45300
+ if (fromPaths) {
45301
+ return fromPaths.value;
45275
45302
  }
45276
45303
  }
45277
45304
  return loader(extensions, candidate, !nodeModulesDirectoryExists, state);
@@ -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;
@@ -55451,6 +55479,7 @@ var ts;
55451
55479
  && symbol.escapedName !== "export=" /* InternalSymbolName.ExportEquals */
55452
55480
  && !(symbol.flags & 4194304 /* SymbolFlags.Prototype */)
55453
55481
  && !(symbol.flags & 32 /* SymbolFlags.Class */)
55482
+ && !(symbol.flags & 8192 /* SymbolFlags.Method */)
55454
55483
  && !isConstMergedWithNSPrintableAsSignatureMerge) {
55455
55484
  if (propertyAsAlias) {
55456
55485
  var createdExport = serializeMaybeAliasAssignment(symbol);
@@ -60261,7 +60290,7 @@ var ts;
60261
60290
  var isInstantiation = (getTargetSymbol(prop) || prop) === (getTargetSymbol(singleProp) || singleProp);
60262
60291
  // If the symbols are instances of one another with identical types - consider the symbols
60263
60292
  // 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
60293
+ // members when intersecting a (this-)instantiations of a class with its raw base or another instance
60265
60294
  if (isInstantiation && compareProperties(singleProp, prop, function (a, b) { return a === b ? -1 /* Ternary.True */ : 0 /* Ternary.False */; }) === -1 /* Ternary.True */) {
60266
60295
  // If we merged instantiations of a generic type, we replicate the symbol parent resetting behavior we used
60267
60296
  // to do when we recorded multiple distinct symbols so that we still get, eg, `Array<T>.length` printed
@@ -60309,7 +60338,11 @@ var ts;
60309
60338
  }
60310
60339
  }
60311
60340
  }
60312
- if (!singleProp || isUnion && (propSet || checkFlags & 48 /* CheckFlags.Partial */) && checkFlags & (1024 /* CheckFlags.ContainsPrivate */ | 512 /* CheckFlags.ContainsProtected */)) {
60341
+ if (!singleProp ||
60342
+ isUnion &&
60343
+ (propSet || checkFlags & 48 /* CheckFlags.Partial */) &&
60344
+ checkFlags & (1024 /* CheckFlags.ContainsPrivate */ | 512 /* CheckFlags.ContainsProtected */) &&
60345
+ !(propSet && getCommonDeclarationsOfSymbols(ts.arrayFrom(propSet.values())))) {
60313
60346
  // No property was found, or, in a union, a property has a private or protected declaration in one
60314
60347
  // constituent, but is missing or has a different declaration in another constituent.
60315
60348
  return undefined;
@@ -60411,6 +60444,33 @@ var ts;
60411
60444
  }
60412
60445
  return property;
60413
60446
  }
60447
+ function getCommonDeclarationsOfSymbols(symbols) {
60448
+ var commonDeclarations;
60449
+ var _loop_14 = function (symbol) {
60450
+ if (!symbol.declarations) {
60451
+ return { value: undefined };
60452
+ }
60453
+ if (!commonDeclarations) {
60454
+ commonDeclarations = new ts.Set(symbol.declarations);
60455
+ return "continue";
60456
+ }
60457
+ commonDeclarations.forEach(function (declaration) {
60458
+ if (!ts.contains(symbol.declarations, declaration)) {
60459
+ commonDeclarations.delete(declaration);
60460
+ }
60461
+ });
60462
+ if (commonDeclarations.size === 0) {
60463
+ return { value: undefined };
60464
+ }
60465
+ };
60466
+ for (var _i = 0, symbols_3 = symbols; _i < symbols_3.length; _i++) {
60467
+ var symbol = symbols_3[_i];
60468
+ var state_4 = _loop_14(symbol);
60469
+ if (typeof state_4 === "object")
60470
+ return state_4.value;
60471
+ }
60472
+ return commonDeclarations;
60473
+ }
60414
60474
  function getPropertyOfUnionOrIntersectionType(type, name, skipObjectFunctionPropertyAugment) {
60415
60475
  var property = getUnionOrIntersectionProperty(type, name, skipObjectFunctionPropertyAugment);
60416
60476
  // We need to filter out partial properties in union types
@@ -61125,7 +61185,7 @@ var ts;
61125
61185
  function getIndexInfosOfIndexSymbol(indexSymbol) {
61126
61186
  if (indexSymbol.declarations) {
61127
61187
  var indexInfos_4 = [];
61128
- var _loop_14 = function (declaration) {
61188
+ var _loop_15 = function (declaration) {
61129
61189
  if (declaration.parameters.length === 1) {
61130
61190
  var parameter = declaration.parameters[0];
61131
61191
  if (parameter.type) {
@@ -61139,7 +61199,7 @@ var ts;
61139
61199
  };
61140
61200
  for (var _i = 0, _a = indexSymbol.declarations; _i < _a.length; _i++) {
61141
61201
  var declaration = _a[_i];
61142
- _loop_14(declaration);
61202
+ _loop_15(declaration);
61143
61203
  }
61144
61204
  return indexInfos_4;
61145
61205
  }
@@ -61156,7 +61216,7 @@ var ts;
61156
61216
  var _a;
61157
61217
  var inferences;
61158
61218
  if ((_a = typeParameter.symbol) === null || _a === void 0 ? void 0 : _a.declarations) {
61159
- var _loop_15 = function (declaration) {
61219
+ var _loop_16 = function (declaration) {
61160
61220
  if (declaration.parent.kind === 192 /* SyntaxKind.InferType */) {
61161
61221
  // When an 'infer T' declaration is immediately contained in a type reference node
61162
61222
  // (such as 'Foo<infer T>'), T's constraint is inferred from the constraint of the
@@ -61220,7 +61280,7 @@ var ts;
61220
61280
  };
61221
61281
  for (var _i = 0, _b = typeParameter.symbol.declarations; _i < _b.length; _i++) {
61222
61282
  var declaration = _b[_i];
61223
- _loop_15(declaration);
61283
+ _loop_16(declaration);
61224
61284
  }
61225
61285
  }
61226
61286
  return inferences && getIntersectionType(inferences);
@@ -61877,6 +61937,9 @@ var ts;
61877
61937
  function getGlobalBigIntType() {
61878
61938
  return (deferredGlobalBigIntType || (deferredGlobalBigIntType = getGlobalType("BigInt", /*arity*/ 0, /*reportErrors*/ false))) || emptyObjectType;
61879
61939
  }
61940
+ function getGlobalNaNSymbol() {
61941
+ return (deferredGlobalNaNSymbol || (deferredGlobalNaNSymbol = getGlobalValueSymbol("NaN", /*reportErrors*/ false)));
61942
+ }
61880
61943
  function getGlobalRecordSymbol() {
61881
61944
  deferredGlobalRecordSymbol || (deferredGlobalRecordSymbol = getGlobalTypeAliasSymbol("Record", /*arity*/ 2, /*reportErrors*/ true) || unknownSymbol);
61882
61945
  return deferredGlobalRecordSymbol === unknownSymbol ? undefined : deferredGlobalRecordSymbol;
@@ -62117,7 +62180,7 @@ var ts;
62117
62180
  var lastRequiredIndex = -1;
62118
62181
  var firstRestIndex = -1;
62119
62182
  var lastOptionalOrRestIndex = -1;
62120
- var _loop_16 = function (i) {
62183
+ var _loop_17 = function (i) {
62121
62184
  var type = elementTypes[i];
62122
62185
  var flags = target.elementFlags[i];
62123
62186
  if (flags & 8 /* ElementFlags.Variadic */) {
@@ -62147,9 +62210,9 @@ var ts;
62147
62210
  }
62148
62211
  };
62149
62212
  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;
62213
+ var state_5 = _loop_17(i);
62214
+ if (typeof state_5 === "object")
62215
+ return state_5.value;
62153
62216
  }
62154
62217
  // Turn optional elements preceding the last required element into required elements
62155
62218
  for (var i = 0; i < lastRequiredIndex; i++) {
@@ -62177,7 +62240,7 @@ var ts;
62177
62240
  if (flags & (2 /* ElementFlags.Optional */ | 4 /* ElementFlags.Rest */)) {
62178
62241
  lastOptionalOrRestIndex = expandedFlags.length;
62179
62242
  }
62180
- expandedTypes.push(type);
62243
+ expandedTypes.push(flags & 2 /* ElementFlags.Optional */ ? addOptionality(type, /*isProperty*/ true) : type);
62181
62244
  expandedFlags.push(flags);
62182
62245
  if (expandedDeclarations && declaration) {
62183
62246
  expandedDeclarations.push(declaration);
@@ -62343,7 +62406,7 @@ var ts;
62343
62406
  var templates = ts.filter(types, isPatternLiteralType);
62344
62407
  if (templates.length) {
62345
62408
  var i = types.length;
62346
- var _loop_17 = function () {
62409
+ var _loop_18 = function () {
62347
62410
  i--;
62348
62411
  var t = types[i];
62349
62412
  if (t.flags & 128 /* TypeFlags.StringLiteral */ && ts.some(templates, function (template) { return isTypeMatchedByTemplateLiteralType(t, template); })) {
@@ -62351,7 +62414,7 @@ var ts;
62351
62414
  }
62352
62415
  };
62353
62416
  while (i > 0) {
62354
- _loop_17();
62417
+ _loop_18();
62355
62418
  }
62356
62419
  }
62357
62420
  }
@@ -62428,14 +62491,14 @@ var ts;
62428
62491
  var namedUnions = [];
62429
62492
  addNamedUnions(namedUnions, types);
62430
62493
  var reducedTypes = [];
62431
- var _loop_18 = function (t) {
62494
+ var _loop_19 = function (t) {
62432
62495
  if (!ts.some(namedUnions, function (union) { return containsType(union.types, t); })) {
62433
62496
  reducedTypes.push(t);
62434
62497
  }
62435
62498
  };
62436
62499
  for (var _i = 0, typeSet_1 = typeSet; _i < typeSet_1.length; _i++) {
62437
62500
  var t = typeSet_1[_i];
62438
- _loop_18(t);
62501
+ _loop_19(t);
62439
62502
  }
62440
62503
  if (!aliasSymbol && namedUnions.length === 1 && reducedTypes.length === 0) {
62441
62504
  return namedUnions[0];
@@ -63665,7 +63728,7 @@ var ts;
63665
63728
  var result;
63666
63729
  var extraTypes;
63667
63730
  var tailCount = 0;
63668
- var _loop_19 = function () {
63731
+ var _loop_20 = function () {
63669
63732
  if (tailCount === 1000) {
63670
63733
  error(currentNode, ts.Diagnostics.Type_instantiation_is_excessively_deep_and_possibly_infinite);
63671
63734
  result = errorType;
@@ -63786,10 +63849,10 @@ var ts;
63786
63849
  // another (or, through recursion, possibly the same) conditional type. In the potentially tail-recursive
63787
63850
  // cases we increment the tail recursion counter and stop after 1000 iterations.
63788
63851
  while (true) {
63789
- var state_5 = _loop_19();
63790
- if (typeof state_5 === "object")
63791
- return state_5.value;
63792
- if (state_5 === "break")
63852
+ var state_6 = _loop_20();
63853
+ if (typeof state_6 === "object")
63854
+ return state_6.value;
63855
+ if (state_6 === "break")
63793
63856
  break;
63794
63857
  }
63795
63858
  return extraTypes ? getUnionType(ts.append(extraTypes, result)) : result;
@@ -66404,7 +66467,7 @@ var ts;
66404
66467
  reducedTarget = findMatchingDiscriminantType(source, target, isRelatedTo) || filterPrimitivesIfContainsNonPrimitive(target);
66405
66468
  checkTypes = reducedTarget.flags & 1048576 /* TypeFlags.Union */ ? reducedTarget.types : [reducedTarget];
66406
66469
  }
66407
- var _loop_20 = function (prop) {
66470
+ var _loop_21 = function (prop) {
66408
66471
  if (shouldCheckAsExcessProperty(prop, source.symbol) && !isIgnoredJsxProperty(source, prop)) {
66409
66472
  if (!isKnownProperty(reducedTarget, prop.escapedName, isComparingJsxAttributes)) {
66410
66473
  if (reportErrors) {
@@ -66467,9 +66530,9 @@ var ts;
66467
66530
  };
66468
66531
  for (var _i = 0, _b = getPropertiesOfType(source); _i < _b.length; _i++) {
66469
66532
  var prop = _b[_i];
66470
- var state_6 = _loop_20(prop);
66471
- if (typeof state_6 === "object")
66472
- return state_6.value;
66533
+ var state_7 = _loop_21(prop);
66534
+ if (typeof state_7 === "object")
66535
+ return state_7.value;
66473
66536
  }
66474
66537
  return false;
66475
66538
  }
@@ -67460,11 +67523,11 @@ var ts;
67460
67523
  // constituents of 'target'. If any combination does not have a match then 'source' is not relatable.
67461
67524
  var discriminantCombinations = ts.cartesianProduct(sourceDiscriminantTypes);
67462
67525
  var matchingTypes = [];
67463
- var _loop_21 = function (combination) {
67526
+ var _loop_22 = function (combination) {
67464
67527
  var hasMatch = false;
67465
67528
  outer: for (var _c = 0, _d = target.types; _c < _d.length; _c++) {
67466
67529
  var type = _d[_c];
67467
- var _loop_22 = function (i) {
67530
+ var _loop_23 = function (i) {
67468
67531
  var sourceProperty = sourcePropertiesFiltered[i];
67469
67532
  var targetProperty = getPropertyOfType(type, sourceProperty.escapedName);
67470
67533
  if (!targetProperty)
@@ -67480,8 +67543,8 @@ var ts;
67480
67543
  }
67481
67544
  };
67482
67545
  for (var i = 0; i < sourcePropertiesFiltered.length; i++) {
67483
- var state_8 = _loop_22(i);
67484
- switch (state_8) {
67546
+ var state_9 = _loop_23(i);
67547
+ switch (state_9) {
67485
67548
  case "continue-outer": continue outer;
67486
67549
  }
67487
67550
  }
@@ -67494,9 +67557,9 @@ var ts;
67494
67557
  };
67495
67558
  for (var _a = 0, discriminantCombinations_1 = discriminantCombinations; _a < discriminantCombinations_1.length; _a++) {
67496
67559
  var combination = discriminantCombinations_1[_a];
67497
- var state_7 = _loop_21(combination);
67498
- if (typeof state_7 === "object")
67499
- return state_7.value;
67560
+ var state_8 = _loop_22(combination);
67561
+ if (typeof state_8 === "object")
67562
+ return state_8.value;
67500
67563
  }
67501
67564
  // Compare the remaining non-discriminant properties of each match.
67502
67565
  var result = -1 /* Ternary.True */;
@@ -68201,7 +68264,7 @@ var ts;
68201
68264
  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
68265
  links.variances = ts.emptyArray;
68203
68266
  var variances = [];
68204
- var _loop_23 = function (tp) {
68267
+ var _loop_24 = function (tp) {
68205
68268
  var modifiers = getVarianceModifiers(tp);
68206
68269
  var variance = modifiers & 65536 /* ModifierFlags.Out */ ?
68207
68270
  modifiers & 32768 /* ModifierFlags.In */ ? 0 /* VarianceFlags.Invariant */ : 1 /* VarianceFlags.Covariant */ :
@@ -68239,7 +68302,7 @@ var ts;
68239
68302
  };
68240
68303
  for (var _i = 0, typeParameters_2 = typeParameters; _i < typeParameters_2.length; _i++) {
68241
68304
  var tp = typeParameters_2[_i];
68242
- _loop_23(tp);
68305
+ _loop_24(tp);
68243
68306
  }
68244
68307
  links.variances = variances;
68245
68308
  ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.pop({ variances: variances.map(ts.Debug.formatVariance) });
@@ -68831,7 +68894,8 @@ var ts;
68831
68894
  function getOptionalType(type, isProperty) {
68832
68895
  if (isProperty === void 0) { isProperty = false; }
68833
68896
  ts.Debug.assert(strictNullChecks);
68834
- return type.flags & 32768 /* TypeFlags.Undefined */ ? type : getUnionType([type, isProperty ? missingType : undefinedType]);
68897
+ var missingOrUndefined = isProperty ? missingType : undefinedType;
68898
+ return type.flags & 32768 /* TypeFlags.Undefined */ || type.flags & 1048576 /* TypeFlags.Union */ && type.types[0] === missingOrUndefined ? type : getUnionType([type, missingOrUndefined]);
68835
68899
  }
68836
68900
  function getGlobalNonNullableTypeInstantiation(type) {
68837
68901
  if (!deferredGlobalNonNullableTypeAlias) {
@@ -70196,7 +70260,7 @@ var ts;
70196
70260
  // upon instantiation, would collapse all the placeholders to just 'string', and an assignment check might
70197
70261
  // succeed. That would be a pointless and confusing outcome.
70198
70262
  if (matches || ts.every(target.texts, function (s) { return s.length === 0; })) {
70199
- var _loop_24 = function (i) {
70263
+ var _loop_25 = function (i) {
70200
70264
  var source_1 = matches ? matches[i] : neverType;
70201
70265
  var target_3 = types[i];
70202
70266
  // If we are inferring from a string literal type to a type variable whose constraint includes one of the
@@ -70246,7 +70310,7 @@ var ts;
70246
70310
  inferFromTypes(source_1, target_3);
70247
70311
  };
70248
70312
  for (var i = 0; i < types.length; i++) {
70249
- _loop_24(i);
70313
+ _loop_25(i);
70250
70314
  }
70251
70315
  }
70252
70316
  }
@@ -70710,7 +70774,7 @@ var ts;
70710
70774
  return name;
70711
70775
  }
70712
70776
  }
70713
- if (ts.hasOnlyExpressionInitializer(declaration)) {
70777
+ if (ts.hasOnlyExpressionInitializer(declaration) && isBlockScopedNameDeclaredBeforeUse(declaration, node.argumentExpression)) {
70714
70778
  var initializer = ts.getEffectiveInitializer(declaration);
70715
70779
  return initializer && tryGetNameFromType(getTypeOfExpression(initializer));
70716
70780
  }
@@ -70770,7 +70834,7 @@ var ts;
70770
70834
  function mapTypesByKeyProperty(types, name) {
70771
70835
  var map = new ts.Map();
70772
70836
  var count = 0;
70773
- var _loop_25 = function (type) {
70837
+ var _loop_26 = function (type) {
70774
70838
  if (type.flags & (524288 /* TypeFlags.Object */ | 2097152 /* TypeFlags.Intersection */ | 58982400 /* TypeFlags.InstantiableNonPrimitive */)) {
70775
70839
  var discriminant = getTypeOfPropertyOfType(type, name);
70776
70840
  if (discriminant) {
@@ -70796,9 +70860,9 @@ var ts;
70796
70860
  };
70797
70861
  for (var _i = 0, types_15 = types; _i < types_15.length; _i++) {
70798
70862
  var type = types_15[_i];
70799
- var state_9 = _loop_25(type);
70800
- if (typeof state_9 === "object")
70801
- return state_9.value;
70863
+ var state_10 = _loop_26(type);
70864
+ if (typeof state_10 === "object")
70865
+ return state_10.value;
70802
70866
  }
70803
70867
  return count >= 10 && count * 2 >= types.length ? map : undefined;
70804
70868
  }
@@ -77253,7 +77317,7 @@ var ts;
77253
77317
  if (spreadIndex >= 0) {
77254
77318
  // Create synthetic arguments from spreads of tuple types.
77255
77319
  var effectiveArgs_1 = args.slice(0, spreadIndex);
77256
- var _loop_26 = function (i) {
77320
+ var _loop_27 = function (i) {
77257
77321
  var arg = args[i];
77258
77322
  // We can call checkExpressionCached because spread expressions never have a contextual type.
77259
77323
  var spreadType = arg.kind === 227 /* SyntaxKind.SpreadElement */ && (flowLoopCount ? checkExpression(arg.expression) : checkExpressionCached(arg.expression));
@@ -77270,7 +77334,7 @@ var ts;
77270
77334
  }
77271
77335
  };
77272
77336
  for (var i = spreadIndex; i < args.length; i++) {
77273
- _loop_26(i);
77337
+ _loop_27(i);
77274
77338
  }
77275
77339
  return effectiveArgs_1;
77276
77340
  }
@@ -77599,7 +77663,7 @@ var ts;
77599
77663
  var min_3 = Number.MAX_VALUE;
77600
77664
  var minIndex = 0;
77601
77665
  var i_1 = 0;
77602
- var _loop_27 = function (c) {
77666
+ var _loop_28 = function (c) {
77603
77667
  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
77668
  var diags_2 = getSignatureApplicabilityError(node, args, c, assignableRelation, 0 /* CheckMode.Normal */, /*reportErrors*/ true, chain_2);
77605
77669
  if (diags_2) {
@@ -77617,7 +77681,7 @@ var ts;
77617
77681
  };
77618
77682
  for (var _a = 0, candidatesForArgumentError_1 = candidatesForArgumentError; _a < candidatesForArgumentError_1.length; _a++) {
77619
77683
  var c = candidatesForArgumentError_1[_a];
77620
- _loop_27(c);
77684
+ _loop_28(c);
77621
77685
  }
77622
77686
  var diags_3 = max > 1 ? allDiagnostics[minIndex] : ts.flatten(allDiagnostics);
77623
77687
  ts.Debug.assert(diags_3.length > 0, "No errors reported for 3 or fewer overload signatures");
@@ -77775,7 +77839,7 @@ var ts;
77775
77839
  }
77776
77840
  var _a = ts.minAndMax(candidates, getNumNonRestParameters), minArgumentCount = _a.min, maxNonRestParam = _a.max;
77777
77841
  var parameters = [];
77778
- var _loop_28 = function (i) {
77842
+ var _loop_29 = function (i) {
77779
77843
  var symbols = ts.mapDefined(candidates, function (s) { return signatureHasRestParameter(s) ?
77780
77844
  i < s.parameters.length - 1 ? s.parameters[i] : ts.last(s.parameters) :
77781
77845
  i < s.parameters.length ? s.parameters[i] : undefined; });
@@ -77783,7 +77847,7 @@ var ts;
77783
77847
  parameters.push(createCombinedSymbolFromTypes(symbols, ts.mapDefined(candidates, function (candidate) { return tryGetTypeAtPosition(candidate, i); })));
77784
77848
  };
77785
77849
  for (var i = 0; i < maxNonRestParam; i++) {
77786
- _loop_28(i);
77850
+ _loop_29(i);
77787
77851
  }
77788
77852
  var restParameterSymbols = ts.mapDefined(candidates, function (c) { return signatureHasRestParameter(c) ? ts.last(c.parameters) : undefined; });
77789
77853
  var flags = 0 /* SignatureFlags.None */;
@@ -80565,6 +80629,7 @@ var ts;
80565
80629
  var eqType = operator === 34 /* SyntaxKind.EqualsEqualsToken */ || operator === 36 /* SyntaxKind.EqualsEqualsEqualsToken */;
80566
80630
  error(errorNode, ts.Diagnostics.This_condition_will_always_return_0_since_JavaScript_compares_objects_by_reference_not_value, eqType ? "false" : "true");
80567
80631
  }
80632
+ checkNaNEquality(errorNode, operator, left, right);
80568
80633
  reportOperatorErrorUnless(function (left, right) { return isTypeEqualityComparableTo(left, right) || isTypeEqualityComparableTo(right, left); });
80569
80634
  return booleanType;
80570
80635
  case 102 /* SyntaxKind.InstanceOfKeyword */:
@@ -80770,6 +80835,26 @@ var ts;
80770
80835
  return undefined;
80771
80836
  }
80772
80837
  }
80838
+ function checkNaNEquality(errorNode, operator, left, right) {
80839
+ var isLeftNaN = isGlobalNaN(ts.skipParentheses(left));
80840
+ var isRightNaN = isGlobalNaN(ts.skipParentheses(right));
80841
+ if (isLeftNaN || isRightNaN) {
80842
+ 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 */));
80843
+ if (isLeftNaN && isRightNaN)
80844
+ return;
80845
+ var operatorString = operator === 37 /* SyntaxKind.ExclamationEqualsEqualsToken */ || operator === 35 /* SyntaxKind.ExclamationEqualsToken */ ? ts.tokenToString(53 /* SyntaxKind.ExclamationToken */) : "";
80846
+ var location = isLeftNaN ? right : left;
80847
+ var expression = ts.skipParentheses(location);
80848
+ ts.addRelatedInfo(err, ts.createDiagnosticForNode(location, ts.Diagnostics.Did_you_mean_0, "".concat(operatorString, "Number.isNaN(").concat(ts.isEntityNameExpression(expression) ? ts.entityNameToString(expression) : "...", ")")));
80849
+ }
80850
+ }
80851
+ function isGlobalNaN(expr) {
80852
+ if (ts.isIdentifier(expr) && expr.escapedText === "NaN") {
80853
+ var globalNaNSymbol = getGlobalNaNSymbol();
80854
+ return !!globalNaNSymbol && globalNaNSymbol === getResolvedSymbol(expr);
80855
+ }
80856
+ return false;
80857
+ }
80773
80858
  }
80774
80859
  function getBaseTypesIfUnrelated(leftType, rightType, isRelated) {
80775
80860
  var effectiveLeft = leftType;
@@ -81807,7 +81892,7 @@ var ts;
81807
81892
  var indexSymbol = getIndexSymbol(getSymbolOfNode(node));
81808
81893
  if (indexSymbol === null || indexSymbol === void 0 ? void 0 : indexSymbol.declarations) {
81809
81894
  var indexSignatureMap_1 = new ts.Map();
81810
- var _loop_29 = function (declaration) {
81895
+ var _loop_30 = function (declaration) {
81811
81896
  if (declaration.parameters.length === 1 && declaration.parameters[0].type) {
81812
81897
  forEachType(getTypeFromTypeNode(declaration.parameters[0].type), function (type) {
81813
81898
  var entry = indexSignatureMap_1.get(getTypeId(type));
@@ -81822,7 +81907,7 @@ var ts;
81822
81907
  };
81823
81908
  for (var _i = 0, _a = indexSymbol.declarations; _i < _a.length; _i++) {
81824
81909
  var declaration = _a[_i];
81825
- _loop_29(declaration);
81910
+ _loop_30(declaration);
81826
81911
  }
81827
81912
  indexSignatureMap_1.forEach(function (entry) {
81828
81913
  if (entry.declarations.length > 1) {
@@ -85422,7 +85507,7 @@ var ts;
85422
85507
  var propDeclaration = declaration && declaration.kind === 223 /* SyntaxKind.BinaryExpression */ ||
85423
85508
  name && name.kind === 164 /* SyntaxKind.ComputedPropertyName */ ? declaration : undefined;
85424
85509
  var localPropDeclaration = getParentOfSymbol(prop) === type.symbol ? declaration : undefined;
85425
- var _loop_30 = function (info) {
85510
+ var _loop_31 = function (info) {
85426
85511
  var localIndexDeclaration = info.declaration && getParentOfSymbol(getSymbolOfNode(info.declaration)) === type.symbol ? info.declaration : undefined;
85427
85512
  // We check only when (a) the property is declared in the containing type, or (b) the applicable index signature is declared
85428
85513
  // in the containing type, or (c) the containing type is an interface and no base interface contains both the property and
@@ -85439,7 +85524,7 @@ var ts;
85439
85524
  };
85440
85525
  for (var _i = 0, indexInfos_9 = indexInfos; _i < indexInfos_9.length; _i++) {
85441
85526
  var info = indexInfos_9[_i];
85442
- _loop_30(info);
85527
+ _loop_31(info);
85443
85528
  }
85444
85529
  }
85445
85530
  function checkIndexConstraintForIndexSignature(type, checkInfo) {
@@ -85447,7 +85532,7 @@ var ts;
85447
85532
  var indexInfos = getApplicableIndexInfos(type, checkInfo.keyType);
85448
85533
  var interfaceDeclaration = ts.getObjectFlags(type) & 2 /* ObjectFlags.Interface */ ? ts.getDeclarationOfKind(type.symbol, 261 /* SyntaxKind.InterfaceDeclaration */) : undefined;
85449
85534
  var localCheckDeclaration = declaration && getParentOfSymbol(getSymbolOfNode(declaration)) === type.symbol ? declaration : undefined;
85450
- var _loop_31 = function (info) {
85535
+ var _loop_32 = function (info) {
85451
85536
  if (info === checkInfo)
85452
85537
  return "continue";
85453
85538
  var localIndexDeclaration = info.declaration && getParentOfSymbol(getSymbolOfNode(info.declaration)) === type.symbol ? info.declaration : undefined;
@@ -85462,7 +85547,7 @@ var ts;
85462
85547
  };
85463
85548
  for (var _i = 0, indexInfos_10 = indexInfos; _i < indexInfos_10.length; _i++) {
85464
85549
  var info = indexInfos_10[_i];
85465
- _loop_31(info);
85550
+ _loop_32(info);
85466
85551
  }
85467
85552
  }
85468
85553
  function checkTypeNameIsReserved(name, message) {
@@ -85782,7 +85867,7 @@ var ts;
85782
85867
  var baseTypes = baseTypeNode && getBaseTypes(type);
85783
85868
  var baseWithThis = (baseTypes === null || baseTypes === void 0 ? void 0 : baseTypes.length) ? getTypeWithThisArgument(ts.first(baseTypes), type.thisType) : undefined;
85784
85869
  var baseStaticType = getBaseConstructorTypeOfClass(type);
85785
- var _loop_32 = function (member) {
85870
+ var _loop_33 = function (member) {
85786
85871
  if (ts.hasAmbientModifier(member)) {
85787
85872
  return "continue";
85788
85873
  }
@@ -85799,7 +85884,7 @@ var ts;
85799
85884
  };
85800
85885
  for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
85801
85886
  var member = _a[_i];
85802
- _loop_32(member);
85887
+ _loop_33(member);
85803
85888
  }
85804
85889
  }
85805
85890
  /**
@@ -85887,7 +85972,7 @@ var ts;
85887
85972
  function issueMemberSpecificError(node, typeWithThis, baseWithThis, broadDiag) {
85888
85973
  // 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
85974
  var issuedMemberError = false;
85890
- var _loop_33 = function (member) {
85975
+ var _loop_34 = function (member) {
85891
85976
  if (ts.isStatic(member)) {
85892
85977
  return "continue";
85893
85978
  }
@@ -85906,7 +85991,7 @@ var ts;
85906
85991
  };
85907
85992
  for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
85908
85993
  var member = _a[_i];
85909
- _loop_33(member);
85994
+ _loop_34(member);
85910
85995
  }
85911
85996
  if (!issuedMemberError) {
85912
85997
  // check again with diagnostics to generate a less-specific error
@@ -85977,7 +86062,7 @@ var ts;
85977
86062
  var _a, _b, _c, _d;
85978
86063
  // NOTE: assignability is checked in checkClassDeclaration
85979
86064
  var baseProperties = getPropertiesOfType(baseType);
85980
- var _loop_34 = function (baseProperty) {
86065
+ var _loop_35 = function (baseProperty) {
85981
86066
  var base = getTargetSymbol(baseProperty);
85982
86067
  if (base.flags & 4194304 /* SymbolFlags.Prototype */) {
85983
86068
  return "continue";
@@ -86087,8 +86172,8 @@ var ts;
86087
86172
  };
86088
86173
  basePropertyCheck: for (var _i = 0, baseProperties_1 = baseProperties; _i < baseProperties_1.length; _i++) {
86089
86174
  var baseProperty = baseProperties_1[_i];
86090
- var state_10 = _loop_34(baseProperty);
86091
- switch (state_10) {
86175
+ var state_11 = _loop_35(baseProperty);
86176
+ switch (state_11) {
86092
86177
  case "continue-basePropertyCheck": continue basePropertyCheck;
86093
86178
  }
86094
86179
  }
@@ -115329,6 +115414,7 @@ var ts;
115329
115414
  writeTrailingSemicolon();
115330
115415
  }
115331
115416
  function emitExportDeclaration(node) {
115417
+ emitModifiers(node, node.modifiers);
115332
115418
  var nextPos = emitTokenWithComment(93 /* SyntaxKind.ExportKeyword */, node.pos, writeKeyword, node);
115333
115419
  writeSpace();
115334
115420
  if (node.isTypeOnly) {
@@ -124931,7 +125017,7 @@ var ts;
124931
125017
  });
124932
125018
  // Sort by paths closest to importing file Name directory
124933
125019
  var sortedPaths = [];
124934
- var _loop_35 = function (directory) {
125020
+ var _loop_36 = function (directory) {
124935
125021
  var directoryStart = ts.ensureTrailingDirectorySeparator(directory);
124936
125022
  var pathsInDirectory;
124937
125023
  allFileNames.forEach(function (_a, fileName) {
@@ -124955,9 +125041,9 @@ var ts;
124955
125041
  };
124956
125042
  var out_directory_1;
124957
125043
  for (var directory = ts.getDirectoryPath(importingFileName); allFileNames.size !== 0;) {
124958
- var state_11 = _loop_35(directory);
125044
+ var state_12 = _loop_36(directory);
124959
125045
  directory = out_directory_1;
124960
- if (state_11 === "break")
125046
+ if (state_12 === "break")
124961
125047
  break;
124962
125048
  }
124963
125049
  if (allFileNames.size) {
@@ -125026,7 +125112,7 @@ var ts;
125026
125112
  }
125027
125113
  function tryGetModuleNameFromPaths(relativeToBaseUrl, paths, allowedEndings, host, compilerOptions) {
125028
125114
  for (var key in paths) {
125029
- var _loop_36 = function (patternText_1) {
125115
+ var _loop_37 = function (patternText_1) {
125030
125116
  var pattern = ts.normalizePath(patternText_1);
125031
125117
  var indexOfStar = pattern.indexOf("*");
125032
125118
  // In module resolution, if `pattern` itself has an extension, a file with that extension is looked up directly,
@@ -125093,9 +125179,9 @@ var ts;
125093
125179
  };
125094
125180
  for (var _i = 0, _a = paths[key]; _i < _a.length; _i++) {
125095
125181
  var patternText_1 = _a[_i];
125096
- var state_12 = _loop_36(patternText_1);
125097
- if (typeof state_12 === "object")
125098
- return state_12.value;
125182
+ var state_13 = _loop_37(patternText_1);
125183
+ if (typeof state_13 === "object")
125184
+ return state_13.value;
125099
125185
  }
125100
125186
  }
125101
125187
  function validateEnding(_a) {
@@ -135015,7 +135101,7 @@ var ts;
135015
135101
  return (location === null || location === void 0 ? void 0 : location.kind) === 79 /* SyntaxKind.Identifier */ ? ts.createTextSpanFromNode(location) : undefined;
135016
135102
  }
135017
135103
  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;
135104
+ 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
135105
  // Verify if the file is JSX language variant
135020
135106
  if (ts.getLanguageVariant(sourceFile.scriptKind) === 1 /* LanguageVariant.JSX */) {
135021
135107
  var completionInfo = getJsxClosingTagCompletion(location, sourceFile);
@@ -135029,7 +135115,7 @@ var ts;
135029
135115
  return undefined;
135030
135116
  }
135031
135117
  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);
135118
+ /*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
135119
  if (keywordFilters !== 0 /* KeywordCompletionFilters.None */) {
135034
135120
  for (var _i = 0, _a = getKeywordCompletions(keywordFilters, !insideJsDocTagTypeExpression && ts.isSourceFileJS(sourceFile)); _i < _a.length; _i++) {
135035
135121
  var keywordEntry = _a[_i];
@@ -135147,7 +135233,7 @@ var ts;
135147
135233
  function createCompletionEntryForLiteral(sourceFile, preferences, literal) {
135148
135234
  return { name: completionNameForLiteral(sourceFile, preferences, literal), kind: "string" /* ScriptElementKind.string */, kindModifiers: "" /* ScriptElementKindModifier.none */, sortText: Completions.SortText.LocationPriority };
135149
135235
  }
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) {
135236
+ 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
135237
  var _a, _b;
135152
135238
  var insertText;
135153
135239
  var replacementSpan = ts.getReplacementSpanForContextToken(replacementToken);
@@ -135203,8 +135289,8 @@ var ts;
135203
135289
  }
135204
135290
  if (originIsResolvedExport(origin)) {
135205
135291
  sourceDisplay = [ts.textPart(origin.moduleSpecifier)];
135206
- if (importCompletionNode) {
135207
- (_a = getInsertTextAndReplacementSpanForImportCompletion(name, importCompletionNode, contextToken, origin, useSemicolons, options, preferences), insertText = _a.insertText, replacementSpan = _a.replacementSpan);
135292
+ if (importStatementCompletion) {
135293
+ (_a = getInsertTextAndReplacementSpanForImportCompletion(name, importStatementCompletion, origin, useSemicolons, sourceFile, options, preferences), insertText = _a.insertText, replacementSpan = _a.replacementSpan);
135208
135294
  isSnippet = preferences.includeCompletionsWithSnippetText ? true : undefined;
135209
135295
  }
135210
135296
  }
@@ -135259,7 +135345,7 @@ var ts;
135259
135345
  }
135260
135346
  if (originIsExport(origin) || originIsResolvedExport(origin)) {
135261
135347
  data = originToCompletionEntryData(origin);
135262
- hasAction = !importCompletionNode;
135348
+ hasAction = !importStatementCompletion;
135263
135349
  }
135264
135350
  // TODO(drosen): Right now we just permit *all* semantic meanings when calling
135265
135351
  // 'getSymbolKind' which is permissible given that it is backwards compatible; but
@@ -135282,7 +135368,7 @@ var ts;
135282
135368
  labelDetails: labelDetails,
135283
135369
  isSnippet: isSnippet,
135284
135370
  isPackageJsonImport: originIsPackageJsonImport(origin) || undefined,
135285
- isImportStatementCompletion: !!importCompletionNode || undefined,
135371
+ isImportStatementCompletion: !!importStatementCompletion || undefined,
135286
135372
  data: data,
135287
135373
  };
135288
135374
  }
@@ -135654,19 +135740,16 @@ var ts;
135654
135740
  };
135655
135741
  return unresolvedOrigin;
135656
135742
  }
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);
135743
+ function getInsertTextAndReplacementSpanForImportCompletion(name, importStatementCompletion, origin, useSemicolons, sourceFile, options, preferences) {
135744
+ var replacementSpan = importStatementCompletion.replacementSpan;
135661
135745
  var quotedModuleSpecifier = ts.quote(sourceFile, preferences, origin.moduleSpecifier);
135662
135746
  var exportKind = origin.isDefaultExport ? 1 /* ExportKind.Default */ :
135663
135747
  origin.exportName === "export=" /* InternalSymbolName.ExportEquals */ ? 2 /* ExportKind.ExportEquals */ :
135664
135748
  0 /* ExportKind.Named */;
135665
135749
  var tabStop = preferences.includeCompletionsWithSnippetText ? "$1" : "";
135666
135750
  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 */), " ") : " ";
135751
+ var isImportSpecifierTypeOnly = importStatementCompletion.couldBeTypeOnlyImportSpecifier;
135752
+ var topLevelTypeOnlyText = importStatementCompletion.isTopLevelTypeOnly ? " ".concat(ts.tokenToString(154 /* SyntaxKind.TypeKeyword */), " ") : " ";
135670
135753
  var importSpecifierTypeOnlyText = isImportSpecifierTypeOnly ? "".concat(ts.tokenToString(154 /* SyntaxKind.TypeKeyword */), " ") : "";
135671
135754
  var suffix = useSemicolons ? ";" : "";
135672
135755
  switch (importKind) {
@@ -135700,7 +135783,7 @@ var ts;
135700
135783
  return CompletionSource.TypeOnlyAlias;
135701
135784
  }
135702
135785
  }
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) {
135786
+ 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
135787
  var _a;
135705
135788
  var start = ts.timestamp();
135706
135789
  var variableDeclaration = getVariableDeclaration(location);
@@ -135721,7 +135804,7 @@ var ts;
135721
135804
  var name = info.name, needsConvertPropertyAccess = info.needsConvertPropertyAccess;
135722
135805
  var originalSortText = (_a = symbolToSortTextMap === null || symbolToSortTextMap === void 0 ? void 0 : symbolToSortTextMap[ts.getSymbolId(symbol)]) !== null && _a !== void 0 ? _a : Completions.SortText.LocationPriority;
135723
135806
  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);
135807
+ 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
135808
  if (!entry) {
135726
135809
  continue;
135727
135810
  }
@@ -135912,7 +135995,7 @@ var ts;
135912
135995
  Completions.createCompletionDetails = createCompletionDetails;
135913
135996
  function getCompletionEntryCodeActionsAndSourceDisplay(name, location, contextToken, origin, symbol, program, host, compilerOptions, sourceFile, position, previousToken, formatContext, preferences, data, source, cancellationToken) {
135914
135997
  if (data === null || data === void 0 ? void 0 : data.moduleSpecifier) {
135915
- if (previousToken && getImportStatementCompletionInfo(contextToken || previousToken).replacementNode) {
135998
+ if (previousToken && getImportStatementCompletionInfo(contextToken || previousToken).replacementSpan) {
135916
135999
  // Import statement completion: 'import c|'
135917
136000
  return { codeActions: undefined, sourceDisplay: [ts.textPart(data.moduleSpecifier)] };
135918
136001
  }
@@ -136113,34 +136196,34 @@ var ts;
136113
136196
  var isStartingCloseTag = false;
136114
136197
  var isJsxInitializer = false;
136115
136198
  var isJsxIdentifierExpected = false;
136116
- var importCompletionNode;
136199
+ var importStatementCompletion;
136117
136200
  var location = ts.getTouchingPropertyName(sourceFile, position);
136118
136201
  var keywordFilters = 0 /* KeywordCompletionFilters.None */;
136119
136202
  var isNewIdentifierLocation = false;
136120
136203
  var flags = 0 /* CompletionInfoFlags.None */;
136121
136204
  if (contextToken) {
136122
- var importStatementCompletion = getImportStatementCompletionInfo(contextToken);
136123
- isNewIdentifierLocation = importStatementCompletion.isNewIdentifierLocation;
136124
- if (importStatementCompletion.keywordCompletion) {
136125
- if (importStatementCompletion.isKeywordOnlyCompletion) {
136205
+ var importStatementCompletionInfo = getImportStatementCompletionInfo(contextToken);
136206
+ if (importStatementCompletionInfo.keywordCompletion) {
136207
+ if (importStatementCompletionInfo.isKeywordOnlyCompletion) {
136126
136208
  return {
136127
136209
  kind: 4 /* CompletionDataKind.Keywords */,
136128
- keywordCompletions: [keywordToCompletionEntry(importStatementCompletion.keywordCompletion)],
136129
- isNewIdentifierLocation: isNewIdentifierLocation,
136210
+ keywordCompletions: [keywordToCompletionEntry(importStatementCompletionInfo.keywordCompletion)],
136211
+ isNewIdentifierLocation: importStatementCompletionInfo.isNewIdentifierLocation,
136130
136212
  };
136131
136213
  }
136132
- keywordFilters = keywordFiltersFromSyntaxKind(importStatementCompletion.keywordCompletion);
136214
+ keywordFilters = keywordFiltersFromSyntaxKind(importStatementCompletionInfo.keywordCompletion);
136133
136215
  }
136134
- if (importStatementCompletion.replacementNode && preferences.includeCompletionsForImportStatements && preferences.includeCompletionsWithInsertText) {
136216
+ if (importStatementCompletionInfo.replacementSpan && preferences.includeCompletionsForImportStatements && preferences.includeCompletionsWithInsertText) {
136135
136217
  // Import statement completions use `insertText`, and also require the `data` property of `CompletionEntryIdentifier`
136136
136218
  // added in TypeScript 4.3 to be sent back from the client during `getCompletionEntryDetails`. Since this feature
136137
136219
  // is not backward compatible with older clients, the language service defaults to disabling it, allowing newer clients
136138
136220
  // to opt in with the `includeCompletionsForImportStatements` user preference.
136139
- importCompletionNode = importStatementCompletion.replacementNode;
136140
136221
  flags |= 2 /* CompletionInfoFlags.IsImportStatementCompletion */;
136222
+ importStatementCompletion = importStatementCompletionInfo;
136223
+ isNewIdentifierLocation = importStatementCompletionInfo.isNewIdentifierLocation;
136141
136224
  }
136142
136225
  // Bail out if this is a known invalid completion location
136143
- if (!importCompletionNode && isCompletionListBlocker(contextToken)) {
136226
+ if (!importStatementCompletionInfo.replacementSpan && isCompletionListBlocker(contextToken)) {
136144
136227
  log("Returning an empty list because completion was requested in an invalid position.");
136145
136228
  return keywordFilters
136146
136229
  ? keywordCompletionData(keywordFilters, isJsOnlyLocation, isNewIdentifierDefinitionLocation())
@@ -136186,7 +136269,7 @@ var ts;
136186
136269
  return undefined;
136187
136270
  }
136188
136271
  }
136189
- else if (!importCompletionNode && sourceFile.languageVariant === 1 /* LanguageVariant.JSX */) {
136272
+ else if (!importStatementCompletion) {
136190
136273
  // <UI.Test /* completion position */ />
136191
136274
  // If the tagname is a property access expression, we will then walk up to the top most of property access expression.
136192
136275
  // Then, try to get a JSX container and its associated attributes type.
@@ -136329,7 +136412,7 @@ var ts;
136329
136412
  isTypeOnlyLocation: isTypeOnlyLocation,
136330
136413
  isJsxIdentifierExpected: isJsxIdentifierExpected,
136331
136414
  isRightOfOpenTag: isRightOfOpenTag,
136332
- importCompletionNode: importCompletionNode,
136415
+ importStatementCompletion: importStatementCompletion,
136333
136416
  hasUnresolvedAutoImports: hasUnresolvedAutoImports,
136334
136417
  flags: flags,
136335
136418
  };
@@ -136583,7 +136666,7 @@ var ts;
136583
136666
  return 1 /* GlobalsSearch.Success */;
136584
136667
  }
136585
136668
  function tryGetImportCompletionSymbols() {
136586
- if (!importCompletionNode)
136669
+ if (!importStatementCompletion)
136587
136670
  return 0 /* GlobalsSearch.Continue */;
136588
136671
  isNewIdentifierLocation = true;
136589
136672
  collectAutoImports();
@@ -136666,7 +136749,7 @@ var ts;
136666
136749
  }
136667
136750
  function shouldOfferImportCompletions() {
136668
136751
  // If already typing an import statement, provide completions for it.
136669
- if (importCompletionNode)
136752
+ if (importStatementCompletion)
136670
136753
  return true;
136671
136754
  // If current completion is for non-contextual Object literal shortahands, ignore auto-import symbols
136672
136755
  if (isNonContextualObjectLiteral)
@@ -136696,7 +136779,7 @@ var ts;
136696
136779
  }
136697
136780
  function isTypeOnlyCompletion() {
136698
136781
  return insideJsDocTagTypeExpression
136699
- || !!importCompletionNode && ts.isTypeOnlyImportOrExportDeclaration(location.parent)
136782
+ || !!importStatementCompletion && ts.isTypeOnlyImportOrExportDeclaration(location.parent)
136700
136783
  || !isContextTokenValueLocation(contextToken) &&
136701
136784
  (ts.isPossiblyTypeArgumentPosition(contextToken, sourceFile, typeChecker)
136702
136785
  || ts.isPartOfTypeNode(location)
@@ -136746,8 +136829,7 @@ var ts;
136746
136829
  flags |= 1 /* CompletionInfoFlags.MayIncludeAutoImports */;
136747
136830
  // import { type | -> token text should be blank
136748
136831
  var isAfterTypeOnlyImportSpecifierModifier = previousToken === contextToken
136749
- && importCompletionNode
136750
- && couldBeTypeOnlyImportSpecifier(importCompletionNode, contextToken);
136832
+ && importStatementCompletion;
136751
136833
  var lowerCaseTokenText = isAfterTypeOnlyImportSpecifierModifier ? "" :
136752
136834
  previousToken && ts.isIdentifier(previousToken) ? previousToken.text.toLowerCase() :
136753
136835
  "";
@@ -136755,14 +136837,14 @@ var ts;
136755
136837
  var exportInfo = ts.getExportInfoMap(sourceFile, host, program, preferences, cancellationToken);
136756
136838
  var packageJsonAutoImportProvider = (_b = host.getPackageJsonAutoImportProvider) === null || _b === void 0 ? void 0 : _b.call(host);
136757
136839
  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) {
136840
+ resolvingModuleSpecifiers("collectAutoImports", host, importSpecifierResolver || (importSpecifierResolver = ts.codefix.createImportSpecifierResolver(sourceFile, program, host, preferences)), program, position, preferences, !!importStatementCompletion, ts.isValidTypeOnlyAliasUseSite(location), function (context) {
136759
136841
  exportInfo.search(sourceFile.path,
136760
136842
  /*preferCapitalized*/ isRightOfOpenTag, function (symbolName, targetFlags) {
136761
136843
  if (!ts.isIdentifierText(symbolName, ts.getEmitScriptTarget(host.getCompilationSettings())))
136762
136844
  return false;
136763
136845
  if (!detailsEntryId && ts.isStringANonContextualKeyword(symbolName))
136764
136846
  return false;
136765
- if (!isTypeOnlyLocation && !importCompletionNode && !(targetFlags & 111551 /* SymbolFlags.Value */))
136847
+ if (!isTypeOnlyLocation && !importStatementCompletion && !(targetFlags & 111551 /* SymbolFlags.Value */))
136766
136848
  return false;
136767
136849
  if (isTypeOnlyLocation && !(targetFlags & (1536 /* SymbolFlags.Module */ | 788968 /* SymbolFlags.Type */)))
136768
136850
  return false;
@@ -136843,7 +136925,7 @@ var ts;
136843
136925
  return;
136844
136926
  }
136845
136927
  symbolToOriginInfoMap[symbols.length] = origin;
136846
- symbolToSortTextMap[symbolId] = importCompletionNode ? Completions.SortText.LocationPriority : Completions.SortText.AutoImportSuggestions;
136928
+ symbolToSortTextMap[symbolId] = importStatementCompletion ? Completions.SortText.LocationPriority : Completions.SortText.AutoImportSuggestions;
136847
136929
  symbols.push(symbol);
136848
136930
  }
136849
136931
  /* Mutates `symbols` and `symbolToOriginInfoMap`. */
@@ -138110,6 +138192,7 @@ var ts;
138110
138192
  return undefined;
138111
138193
  }
138112
138194
  function getImportStatementCompletionInfo(contextToken) {
138195
+ var _a, _b, _c;
138113
138196
  var keywordCompletion;
138114
138197
  var isKeywordOnlyCompletion = false;
138115
138198
  var candidate = getCandidate();
@@ -138117,9 +138200,9 @@ var ts;
138117
138200
  isKeywordOnlyCompletion: isKeywordOnlyCompletion,
138118
138201
  keywordCompletion: keywordCompletion,
138119
138202
  isNewIdentifierLocation: !!(candidate || keywordCompletion === 154 /* SyntaxKind.TypeKeyword */),
138120
- replacementNode: candidate && ts.rangeIsOnSingleLine(candidate, candidate.getSourceFile())
138121
- ? candidate
138122
- : undefined
138203
+ 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),
138204
+ couldBeTypeOnlyImportSpecifier: !!candidate && couldBeTypeOnlyImportSpecifier(candidate, contextToken),
138205
+ replacementSpan: getSingleLineReplacementSpanForImportCompletionNode(candidate),
138123
138206
  };
138124
138207
  function getCandidate() {
138125
138208
  var parent = contextToken.parent;
@@ -138161,14 +138244,71 @@ var ts;
138161
138244
  return undefined;
138162
138245
  }
138163
138246
  }
138247
+ function getSingleLineReplacementSpanForImportCompletionNode(node) {
138248
+ var _a, _b, _c;
138249
+ if (!node)
138250
+ return undefined;
138251
+ var top = (_a = ts.findAncestor(node, ts.or(ts.isImportDeclaration, ts.isImportEqualsDeclaration))) !== null && _a !== void 0 ? _a : node;
138252
+ var sourceFile = top.getSourceFile();
138253
+ if (ts.rangeIsOnSingleLine(top, sourceFile)) {
138254
+ return ts.createTextSpanFromNode(top, sourceFile);
138255
+ }
138256
+ // ImportKeyword was necessarily on one line; ImportSpecifier was necessarily parented in an ImportDeclaration
138257
+ ts.Debug.assert(top.kind !== 100 /* SyntaxKind.ImportKeyword */ && top.kind !== 273 /* SyntaxKind.ImportSpecifier */);
138258
+ // Guess which point in the import might actually be a later statement parsed as part of the import
138259
+ // during parser recovery - either in the middle of named imports, or the module specifier.
138260
+ var potentialSplitPoint = top.kind === 269 /* SyntaxKind.ImportDeclaration */
138261
+ ? (_c = getPotentiallyInvalidImportSpecifier((_b = top.importClause) === null || _b === void 0 ? void 0 : _b.namedBindings)) !== null && _c !== void 0 ? _c : top.moduleSpecifier
138262
+ : top.moduleReference;
138263
+ var withoutModuleSpecifier = {
138264
+ pos: top.getFirstToken().getStart(),
138265
+ end: potentialSplitPoint.pos,
138266
+ };
138267
+ // The module specifier/reference was previously found to be missing, empty, or
138268
+ // not a string literal - in this last case, it's likely that statement on a following
138269
+ // line was parsed as the module specifier of a partially-typed import, e.g.
138270
+ // import Foo|
138271
+ // interface Blah {}
138272
+ // This appears to be a multiline-import, and editors can't replace multiple lines.
138273
+ // But if everything but the "module specifier" is on one line, by this point we can
138274
+ // assume that the "module specifier" is actually just another statement, and return
138275
+ // the single-line range of the import excluding that probable statement.
138276
+ if (ts.rangeIsOnSingleLine(withoutModuleSpecifier, sourceFile)) {
138277
+ return ts.createTextSpanFromRange(withoutModuleSpecifier);
138278
+ }
138279
+ }
138280
+ // Tries to identify the first named import that is not really a named import, but rather
138281
+ // just parser recovery for a situation like:
138282
+ // import { Foo|
138283
+ // interface Bar {}
138284
+ // in which `Foo`, `interface`, and `Bar` are all parsed as import specifiers. The caller
138285
+ // will also check if this token is on a separate line from the rest of the import.
138286
+ function getPotentiallyInvalidImportSpecifier(namedBindings) {
138287
+ var _a;
138288
+ return ts.find((_a = ts.tryCast(namedBindings, ts.isNamedImports)) === null || _a === void 0 ? void 0 : _a.elements, function (e) {
138289
+ var _a;
138290
+ return !e.propertyName &&
138291
+ ts.isStringANonContextualKeyword(e.name.text) &&
138292
+ ((_a = ts.findPrecedingToken(e.name.pos, namedBindings.getSourceFile(), namedBindings)) === null || _a === void 0 ? void 0 : _a.kind) !== 27 /* SyntaxKind.CommaToken */;
138293
+ });
138294
+ }
138164
138295
  function couldBeTypeOnlyImportSpecifier(importSpecifier, contextToken) {
138165
138296
  return ts.isImportSpecifier(importSpecifier)
138166
138297
  && (importSpecifier.isTypeOnly || contextToken === importSpecifier.name && ts.isTypeKeywordTokenOrIdentifier(contextToken));
138167
138298
  }
138168
138299
  function canCompleteFromNamedBindings(namedBindings) {
138169
- return isModuleSpecifierMissingOrEmpty(namedBindings.parent.parent.moduleSpecifier)
138170
- && (ts.isNamespaceImport(namedBindings) || namedBindings.elements.length < 2)
138171
- && !namedBindings.parent.name;
138300
+ if (!isModuleSpecifierMissingOrEmpty(namedBindings.parent.parent.moduleSpecifier) || namedBindings.parent.name) {
138301
+ return false;
138302
+ }
138303
+ if (ts.isNamedImports(namedBindings)) {
138304
+ // We can only complete on named imports if there are no other named imports already,
138305
+ // but parser recovery sometimes puts later statements in the named imports list, so
138306
+ // we try to only consider the probably-valid ones.
138307
+ var invalidNamedImport = getPotentiallyInvalidImportSpecifier(namedBindings);
138308
+ var validImports = invalidNamedImport ? namedBindings.elements.indexOf(invalidNamedImport) : namedBindings.elements.length;
138309
+ return validImports < 2;
138310
+ }
138311
+ return true;
138172
138312
  }
138173
138313
  function isModuleSpecifierMissingOrEmpty(specifier) {
138174
138314
  var _a;
@@ -146203,6 +146343,10 @@ var ts;
146203
146343
  pushSelectionCommentRange(comment.pos, comment.end);
146204
146344
  }
146205
146345
  if (positionShouldSnapToNode(sourceFile, pos, node)) {
146346
+ if (ts.isFunctionBody(node)
146347
+ && ts.isFunctionLikeDeclaration(parentNode) && !ts.positionsAreOnSameLine(node.getStart(sourceFile), node.getEnd(), sourceFile)) {
146348
+ pushSelectionRange(node.getStart(sourceFile), node.getEnd());
146349
+ }
146206
146350
  // 1. Blocks are effectively redundant with SyntaxLists.
146207
146351
  // 2. TemplateSpans, along with the SyntaxLists containing them, are a somewhat unintuitive grouping
146208
146352
  // of things that should be considered independently.
@@ -156901,7 +157045,7 @@ var ts;
156901
157045
  var related = ts.find(diag.relatedInformation, function (related) { return related.code === ts.Diagnostics.This_type_parameter_might_need_an_extends_0_constraint.code; });
156902
157046
  if (related === undefined || related.file === undefined || related.start === undefined || related.length === undefined)
156903
157047
  return;
156904
- var declaration = findAncestorMatchingSpan(related.file, ts.createTextSpan(related.start, related.length));
157048
+ var declaration = codefix.findAncestorMatchingSpan(related.file, ts.createTextSpan(related.start, related.length));
156905
157049
  if (declaration === undefined)
156906
157050
  return;
156907
157051
  if (ts.isIdentifier(declaration) && ts.isTypeParameterDeclaration(declaration.parent)) {
@@ -156935,14 +157079,6 @@ var ts;
156935
157079
  }
156936
157080
  }
156937
157081
  }
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
157082
  function tryGetConstraintFromDiagnosticMessage(messageText) {
156947
157083
  var _a = ts.flattenDiagnosticMessageText(messageText, "\n", 0).match(/`extends (.*)`/) || [], _ = _a[0], constraint = _a[1];
156948
157084
  return constraint;
@@ -157823,7 +157959,7 @@ var ts;
157823
157959
  return { kind: InfoKind.TypeLikeDeclaration, token: token, call: call, modifierFlags: modifierFlags, parentDeclaration: declaration, declSourceFile: declSourceFile, isJSFile: isJSFile };
157824
157960
  }
157825
157961
  var enumDeclaration = ts.find(symbol.declarations, ts.isEnumDeclaration);
157826
- if (enumDeclaration && !ts.isPrivateIdentifier(token) && !isSourceFileFromLibrary(program, enumDeclaration.getSourceFile())) {
157962
+ if (enumDeclaration && !(leftExpressionType.flags & 1056 /* TypeFlags.EnumLike */) && !ts.isPrivateIdentifier(token) && !isSourceFileFromLibrary(program, enumDeclaration.getSourceFile())) {
157827
157963
  return { kind: InfoKind.Enum, token: token, parentDeclaration: enumDeclaration };
157828
157964
  }
157829
157965
  return undefined;
@@ -158488,6 +158624,63 @@ var ts;
158488
158624
  })(ts || (ts = {}));
158489
158625
  /* @internal */
158490
158626
  var ts;
158627
+ (function (ts) {
158628
+ var codefix;
158629
+ (function (codefix) {
158630
+ var fixId = "fixNaNEquality";
158631
+ var errorCodes = [
158632
+ ts.Diagnostics.This_condition_will_always_return_0.code,
158633
+ ];
158634
+ codefix.registerCodeFix({
158635
+ errorCodes: errorCodes,
158636
+ getCodeActions: function (context) {
158637
+ var sourceFile = context.sourceFile, span = context.span, program = context.program;
158638
+ var info = getInfo(program, sourceFile, span);
158639
+ if (info === undefined)
158640
+ return;
158641
+ var suggestion = info.suggestion, expression = info.expression, arg = info.arg;
158642
+ var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return doChange(t, sourceFile, arg, expression); });
158643
+ return [codefix.createCodeFixAction(fixId, changes, [ts.Diagnostics.Use_0, suggestion], fixId, ts.Diagnostics.Use_Number_isNaN_in_all_conditions)];
158644
+ },
158645
+ fixIds: [fixId],
158646
+ getAllCodeActions: function (context) {
158647
+ return codefix.codeFixAll(context, errorCodes, function (changes, diag) {
158648
+ var info = getInfo(context.program, diag.file, ts.createTextSpan(diag.start, diag.length));
158649
+ if (info) {
158650
+ doChange(changes, diag.file, info.arg, info.expression);
158651
+ }
158652
+ });
158653
+ }
158654
+ });
158655
+ function getInfo(program, sourceFile, span) {
158656
+ var diag = ts.find(program.getSemanticDiagnostics(sourceFile), function (diag) { return diag.start === span.start && diag.length === span.length; });
158657
+ if (diag === undefined || diag.relatedInformation === undefined)
158658
+ return;
158659
+ var related = ts.find(diag.relatedInformation, function (related) { return related.code === ts.Diagnostics.Did_you_mean_0.code; });
158660
+ if (related === undefined || related.file === undefined || related.start === undefined || related.length === undefined)
158661
+ return;
158662
+ var token = codefix.findAncestorMatchingSpan(related.file, ts.createTextSpan(related.start, related.length));
158663
+ if (token === undefined)
158664
+ return;
158665
+ if (ts.isExpression(token) && ts.isBinaryExpression(token.parent)) {
158666
+ return { suggestion: getSuggestion(related.messageText), expression: token.parent, arg: token };
158667
+ }
158668
+ return undefined;
158669
+ }
158670
+ function doChange(changes, sourceFile, arg, expression) {
158671
+ var callExpression = ts.factory.createCallExpression(ts.factory.createPropertyAccessExpression(ts.factory.createIdentifier("Number"), ts.factory.createIdentifier("isNaN")), /*typeArguments*/ undefined, [arg]);
158672
+ var operator = expression.operatorToken.kind;
158673
+ changes.replaceNode(sourceFile, expression, operator === 37 /* SyntaxKind.ExclamationEqualsEqualsToken */ || operator === 35 /* SyntaxKind.ExclamationEqualsToken */
158674
+ ? ts.factory.createPrefixUnaryExpression(53 /* SyntaxKind.ExclamationToken */, callExpression) : callExpression);
158675
+ }
158676
+ function getSuggestion(messageText) {
158677
+ var _a = ts.flattenDiagnosticMessageText(messageText, "\n", 0).match(/\'(.*)\'/) || [], _ = _a[0], suggestion = _a[1];
158678
+ return suggestion;
158679
+ }
158680
+ })(codefix = ts.codefix || (ts.codefix = {}));
158681
+ })(ts || (ts = {}));
158682
+ /* @internal */
158683
+ var ts;
158491
158684
  (function (ts) {
158492
158685
  var codefix;
158493
158686
  (function (codefix) {
@@ -161205,6 +161398,15 @@ var ts;
161205
161398
  symbols.forEach(function (s) { return importAdder.addImportFromExportedSymbol(s, /*isValidTypeOnlyUseSite*/ true); });
161206
161399
  }
161207
161400
  codefix.importSymbols = importSymbols;
161401
+ function findAncestorMatchingSpan(sourceFile, span) {
161402
+ var end = ts.textSpanEnd(span);
161403
+ var token = ts.getTokenAtPosition(sourceFile, span.start);
161404
+ while (token.end < end) {
161405
+ token = token.parent;
161406
+ }
161407
+ return token;
161408
+ }
161409
+ codefix.findAncestorMatchingSpan = findAncestorMatchingSpan;
161208
161410
  })(codefix = ts.codefix || (ts.codefix = {}));
161209
161411
  })(ts || (ts = {}));
161210
161412
  /* @internal */