typescript 5.5.0-dev.20240405 → 5.5.0-dev.20240409

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.
@@ -45,8 +45,12 @@ declare namespace Intl {
45
45
  source: "startRange" | "endRange" | "shared";
46
46
  }
47
47
 
48
+ type StringNumericLiteral = `${number}` | "Infinity" | "-Infinity" | "+Infinity";
49
+
48
50
  interface NumberFormat {
49
- formatRange(start: number | bigint, end: number | bigint): string;
50
- formatRangeToParts(start: number | bigint, end: number | bigint): NumberRangeFormatPart[];
51
+ format(value: number | bigint | StringNumericLiteral): string;
52
+ formatToParts(value: number | bigint | StringNumericLiteral): NumberFormatPart[];
53
+ formatRange(start: number | bigint | StringNumericLiteral, end: number | bigint | StringNumericLiteral): string;
54
+ formatRangeToParts(start: number | bigint | StringNumericLiteral, end: number | bigint | StringNumericLiteral): NumberRangeFormatPart[];
51
55
  }
52
56
  }
package/lib/tsc.js CHANGED
@@ -18,7 +18,7 @@ and limitations under the License.
18
18
 
19
19
  // src/compiler/corePublic.ts
20
20
  var versionMajorMinor = "5.5";
21
- var version = `${versionMajorMinor}.0-dev.20240405`;
21
+ var version = `${versionMajorMinor}.0-dev.20240409`;
22
22
 
23
23
  // src/compiler/core.ts
24
24
  var emptyArray = [];
@@ -9884,6 +9884,10 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
9884
9884
  return token = 23 /* OpenBracketToken */;
9885
9885
  case 93 /* closeBracket */:
9886
9886
  return token = 24 /* CloseBracketToken */;
9887
+ case 40 /* openParen */:
9888
+ return token = 21 /* OpenParenToken */;
9889
+ case 41 /* closeParen */:
9890
+ return token = 22 /* CloseParenToken */;
9887
9891
  case 60 /* lessThan */:
9888
9892
  return token = 30 /* LessThanToken */;
9889
9893
  case 62 /* greaterThan */:
@@ -12930,6 +12934,9 @@ function isObjectLiteralOrClassExpressionMethodOrAccessor(node) {
12930
12934
  function isIdentifierTypePredicate(predicate) {
12931
12935
  return predicate && predicate.kind === 1 /* Identifier */;
12932
12936
  }
12937
+ function isThisTypePredicate(predicate) {
12938
+ return predicate && predicate.kind === 0 /* This */;
12939
+ }
12933
12940
  function forEachPropertyAssignment(objectLiteral, key, callback, key2) {
12934
12941
  return forEach(objectLiteral == null ? void 0 : objectLiteral.properties, (property) => {
12935
12942
  if (!isPropertyAssignment(property))
@@ -48115,7 +48122,7 @@ function createTypeChecker(host) {
48115
48122
  typeToTypeNode: (type, enclosingDeclaration, flags, tracker) => withContext(enclosingDeclaration, flags, tracker, (context) => typeToTypeNodeHelper(type, context)),
48116
48123
  typePredicateToTypePredicateNode: (typePredicate, enclosingDeclaration, flags, tracker) => withContext(enclosingDeclaration, flags, tracker, (context) => typePredicateToTypePredicateNodeHelper(typePredicate, context)),
48117
48124
  expressionOrTypeToTypeNode: (expr, type, addUndefined, enclosingDeclaration, flags, tracker) => withContext(enclosingDeclaration, flags, tracker, (context) => expressionOrTypeToTypeNode(context, expr, type, addUndefined)),
48118
- serializeTypeForDeclaration: (type, symbol, addUndefined, enclosingDeclaration, flags, tracker) => withContext(enclosingDeclaration, flags, tracker, (context) => serializeTypeForDeclaration(context, type, symbol, enclosingDeclaration, addUndefined)),
48125
+ serializeTypeForDeclaration: (declaration, type, symbol, enclosingDeclaration, flags, tracker) => withContext(enclosingDeclaration, flags, tracker, (context) => serializeTypeForDeclaration(context, declaration, type, symbol)),
48119
48126
  serializeReturnTypeForSignature: (signature, enclosingDeclaration, flags, tracker) => withContext(enclosingDeclaration, flags, tracker, (context) => serializeReturnTypeForSignature(context, signature)),
48120
48127
  indexInfoToIndexSignatureDeclaration: (indexInfo, enclosingDeclaration, flags, tracker) => withContext(enclosingDeclaration, flags, tracker, (context) => indexInfoToIndexSignatureDeclarationHelper(
48121
48128
  indexInfo,
@@ -48138,6 +48145,18 @@ function createTypeChecker(host) {
48138
48145
  symbolTableToDeclarationStatements: (symbolTable, enclosingDeclaration, flags, tracker) => withContext(enclosingDeclaration, flags, tracker, (context) => symbolTableToDeclarationStatements(symbolTable, context)),
48139
48146
  symbolToNode: (symbol, meaning, enclosingDeclaration, flags, tracker) => withContext(enclosingDeclaration, flags, tracker, (context) => symbolToNode(symbol, context, meaning))
48140
48147
  };
48148
+ function setTextRange2(context, range, location) {
48149
+ if (!nodeIsSynthesized(range) && !(range.flags & 16 /* Synthesized */) && (!context.enclosingFile || context.enclosingFile !== getSourceFileOfNode(range))) {
48150
+ range = factory.cloneNode(range);
48151
+ }
48152
+ if (!location) {
48153
+ return range;
48154
+ }
48155
+ if (!context.enclosingFile || context.enclosingFile !== getSourceFileOfNode(getOriginalNode(location))) {
48156
+ return setOriginalNode(range, location);
48157
+ }
48158
+ return setTextRange(setOriginalNode(range, location), location);
48159
+ }
48141
48160
  function expressionOrTypeToTypeNode(context, expr, type, addUndefined) {
48142
48161
  if (expr) {
48143
48162
  const typeNode = isAssertionExpression(expr) ? expr.type : isJSDocTypeAssertion(expr) ? getJSDocTypeAssertionType(expr) : void 0;
@@ -48202,6 +48221,7 @@ function createTypeChecker(host) {
48202
48221
  const moduleResolverHost = (tracker == null ? void 0 : tracker.trackSymbol) ? tracker.moduleResolverHost : flags & 134217728 /* DoNotIncludeSymbolChain */ ? createBasicNodeBuilderModuleSpecifierResolutionHost(host) : void 0;
48203
48222
  const context = {
48204
48223
  enclosingDeclaration,
48224
+ enclosingFile: enclosingDeclaration && getSourceFileOfNode(enclosingDeclaration),
48205
48225
  flags: flags || 0 /* None */,
48206
48226
  tracker: void 0,
48207
48227
  encounteredError: false,
@@ -48734,7 +48754,7 @@ function createTypeChecker(host) {
48734
48754
  if (!nodeIsSynthesized(node) && getParseTreeNode(node) === node) {
48735
48755
  return node;
48736
48756
  }
48737
- return setTextRange(factory.cloneNode(visitEachChild(
48757
+ return setTextRange2(context, factory.cloneNode(visitEachChild(
48738
48758
  node,
48739
48759
  deepCloneOrReuseNode,
48740
48760
  /*context*/
@@ -49076,7 +49096,13 @@ function createTypeChecker(host) {
49076
49096
  context.reverseMappedStack || (context.reverseMappedStack = []);
49077
49097
  context.reverseMappedStack.push(propertySymbol);
49078
49098
  }
49079
- propertyTypeNode = propertyType ? serializeTypeForDeclaration(context, propertyType, propertySymbol, saveEnclosingDeclaration) : factory.createKeywordTypeNode(133 /* AnyKeyword */);
49099
+ propertyTypeNode = propertyType ? serializeTypeForDeclaration(
49100
+ context,
49101
+ /*declaration*/
49102
+ void 0,
49103
+ propertyType,
49104
+ propertySymbol
49105
+ ) : factory.createKeywordTypeNode(133 /* AnyKeyword */);
49080
49106
  if (propertyIsReverseMapped) {
49081
49107
  context.reverseMappedStack.pop();
49082
49108
  }
@@ -49465,8 +49491,7 @@ function createTypeChecker(host) {
49465
49491
  function symbolToParameterDeclaration(parameterSymbol, context, preserveModifierFlags) {
49466
49492
  const parameterDeclaration = getEffectiveParameterDeclaration(parameterSymbol);
49467
49493
  const parameterType = getTypeOfSymbol(parameterSymbol);
49468
- const addUndefined = parameterDeclaration && isRequiredInitializedParameter(parameterDeclaration);
49469
- const parameterTypeNode = serializeTypeForDeclaration(context, parameterType, parameterSymbol, context.enclosingDeclaration, addUndefined);
49494
+ const parameterTypeNode = serializeTypeForDeclaration(context, parameterDeclaration, parameterType, parameterSymbol);
49470
49495
  const modifiers = !(context.flags & 8192 /* OmitParameterModifiers */) && preserveModifierFlags && parameterDeclaration && canHaveModifiers(parameterDeclaration) ? map(getModifiers(parameterDeclaration), factory.cloneNode) : void 0;
49471
49496
  const isRest = parameterDeclaration && isRestParameter(parameterDeclaration) || getCheckFlags(parameterSymbol) & 32768 /* RestParameter */;
49472
49497
  const dotDotDotToken = isRest ? factory.createToken(26 /* DotDotDotToken */) : void 0;
@@ -50058,10 +50083,12 @@ function createTypeChecker(host) {
50058
50083
  }
50059
50084
  return enclosingDeclaration;
50060
50085
  }
50061
- function serializeTypeForDeclaration(context, type, symbol, enclosingDeclaration, addUndefined) {
50086
+ function serializeTypeForDeclaration(context, declaration, type, symbol) {
50062
50087
  var _a;
50088
+ const addUndefined = declaration && (isParameter(declaration) || isJSDocParameterTag(declaration)) && requiresAddingImplicitUndefined(declaration);
50089
+ const enclosingDeclaration = context.enclosingDeclaration;
50063
50090
  if (!isErrorType(type) && enclosingDeclaration) {
50064
- const declWithExistingAnnotation = getDeclarationWithTypeAnnotation(symbol, getEnclosingDeclarationIgnoringFakeScope(enclosingDeclaration));
50091
+ const declWithExistingAnnotation = declaration && getNonlocalEffectiveTypeAnnotationNode(declaration) ? declaration : getDeclarationWithTypeAnnotation(symbol, getEnclosingDeclarationIgnoringFakeScope(enclosingDeclaration));
50065
50092
  if (declWithExistingAnnotation && !isFunctionLikeDeclaration(declWithExistingAnnotation) && !isGetAccessorDeclaration(declWithExistingAnnotation)) {
50066
50093
  const existing = getNonlocalEffectiveTypeAnnotationNode(declWithExistingAnnotation);
50067
50094
  const result2 = tryReuseExistingTypeNode(context, existing, type, declWithExistingAnnotation, addUndefined);
@@ -50074,7 +50101,7 @@ function createTypeChecker(host) {
50074
50101
  if (type.flags & 8192 /* UniqueESSymbol */ && type.symbol === symbol && (!context.enclosingDeclaration || some(symbol.declarations, (d) => getSourceFileOfNode(d) === getSourceFileOfNode(context.enclosingDeclaration)))) {
50075
50102
  context.flags |= 1048576 /* AllowUniqueESSymbolType */;
50076
50103
  }
50077
- const decl = symbol.valueDeclaration ?? ((_a = symbol.declarations) == null ? void 0 : _a[0]);
50104
+ const decl = declaration ?? symbol.valueDeclaration ?? ((_a = symbol.declarations) == null ? void 0 : _a[0]);
50078
50105
  const expr = decl && isDeclarationWithPossibleInnerTypeNodeReuse(decl) ? getPossibleTypeNodeReuseExpression(decl) : void 0;
50079
50106
  const result = expressionOrTypeToTypeNode(context, expr, type, addUndefined);
50080
50107
  context.flags = oldFlags;
@@ -50188,7 +50215,7 @@ function createTypeChecker(host) {
50188
50215
  const type = getDeclaredTypeOfSymbol(sym);
50189
50216
  const name = sym.flags & 262144 /* TypeParameter */ ? typeParameterToName(type, context) : factory.cloneNode(node2);
50190
50217
  name.symbol = sym;
50191
- return setTextRange(setEmitFlags(setOriginalNode(name, node2), 16777216 /* NoAsciiEscaping */), node2);
50218
+ return setTextRange2(context, setEmitFlags(name, 16777216 /* NoAsciiEscaping */), node2);
50192
50219
  }
50193
50220
  const updated = visitEachChild(
50194
50221
  node2,
@@ -50197,7 +50224,7 @@ function createTypeChecker(host) {
50197
50224
  void 0
50198
50225
  );
50199
50226
  if (updated !== node2) {
50200
- setTextRange(updated, node2);
50227
+ setTextRange2(context, updated, node2);
50201
50228
  }
50202
50229
  return updated;
50203
50230
  }
@@ -50211,12 +50238,12 @@ function createTypeChecker(host) {
50211
50238
  if (hadError) {
50212
50239
  return void 0;
50213
50240
  }
50214
- return transformed === existing ? setTextRange(factory.cloneNode(existing), existing) : transformed;
50241
+ return transformed;
50215
50242
  function visitExistingNodeTreeSymbols(node) {
50216
50243
  const onExitNewScope = isNewScopeNode(node) ? onEnterNewScope(node) : void 0;
50217
50244
  const result = visitExistingNodeTreeSymbolsWorker(node);
50218
50245
  onExitNewScope == null ? void 0 : onExitNewScope();
50219
- return result;
50246
+ return result === node ? setTextRange2(context, factory.cloneNode(result), node) : result;
50220
50247
  }
50221
50248
  function onEnterNewScope(node) {
50222
50249
  const oldContex = context;
@@ -50352,7 +50379,7 @@ function createTypeChecker(host) {
50352
50379
  void 0
50353
50380
  );
50354
50381
  if (visited === node) {
50355
- visited = setTextRange(factory.cloneNode(node), node);
50382
+ visited = setTextRange2(context, factory.cloneNode(node), node);
50356
50383
  }
50357
50384
  visited.type = factory.createKeywordTypeNode(133 /* AnyKeyword */);
50358
50385
  if (isParameter(node)) {
@@ -50375,11 +50402,16 @@ function createTypeChecker(host) {
50375
50402
  /*context*/
50376
50403
  void 0
50377
50404
  );
50378
- const clone = setTextRange(visited === node ? factory.cloneNode(node) : visited, node);
50405
+ const clone = setTextRange2(context, visited === node ? factory.cloneNode(node) : visited, node);
50379
50406
  const flags = getEmitFlags(clone);
50380
50407
  setEmitFlags(clone, flags | (context.flags & 1024 /* MultilineObjectLiterals */ && isTypeLiteralNode(node) ? 0 : 1 /* SingleLine */));
50381
50408
  return clone;
50382
50409
  }
50410
+ if (isStringLiteral(node) && !!(context.flags & 268435456 /* UseSingleQuotesForStringLiteralType */) && !node.singleQuote) {
50411
+ const clone = factory.cloneNode(node);
50412
+ clone.singleQuote = true;
50413
+ return clone;
50414
+ }
50383
50415
  if (isConditionalTypeNode(node)) {
50384
50416
  const checkType = visitNode(node.checkType, visitExistingNodeTreeSymbols, isTypeNode);
50385
50417
  const disposeScope = onEnterNewScope(node);
@@ -50758,7 +50790,8 @@ function createTypeChecker(host) {
50758
50790
  );
50759
50791
  context.tracker.trackSymbol(type.symbol, context.enclosingDeclaration, 111551 /* Value */);
50760
50792
  } else {
50761
- const statement = setTextRange(
50793
+ const statement = setTextRange2(
50794
+ context,
50762
50795
  factory.createVariableStatement(
50763
50796
  /*modifiers*/
50764
50797
  void 0,
@@ -50767,7 +50800,13 @@ function createTypeChecker(host) {
50767
50800
  name,
50768
50801
  /*exclamationToken*/
50769
50802
  void 0,
50770
- serializeTypeForDeclaration(context, type, symbol, enclosingDeclaration)
50803
+ serializeTypeForDeclaration(
50804
+ context,
50805
+ /*declaration*/
50806
+ void 0,
50807
+ type,
50808
+ symbol
50809
+ )
50771
50810
  )
50772
50811
  ], flags)
50773
50812
  ),
@@ -51040,7 +51079,7 @@ function createTypeChecker(host) {
51040
51079
  const signatures = getSignaturesOfType(type, 0 /* Call */);
51041
51080
  for (const sig of signatures) {
51042
51081
  const decl = signatureToSignatureDeclarationHelper(sig, 262 /* FunctionDeclaration */, context, { name: factory.createIdentifier(localName) });
51043
- addResult(setTextRange(decl, getSignatureTextRangeLocation(sig)), modifierFlags);
51082
+ addResult(setTextRange2(context, decl, getSignatureTextRangeLocation(sig)), modifierFlags);
51044
51083
  }
51045
51084
  if (!(symbol.flags & (512 /* ValueModule */ | 1024 /* NamespaceModule */) && !!symbol.exports && !!symbol.exports.size)) {
51046
51085
  const props = filter(getPropertiesOfType(type), isNamespaceMember);
@@ -51218,7 +51257,8 @@ function createTypeChecker(host) {
51218
51257
  const indexSignatures = serializeIndexSignatures(classType, baseTypes[0]);
51219
51258
  context.enclosingDeclaration = oldEnclosing;
51220
51259
  addResult(
51221
- setTextRange(
51260
+ setTextRange2(
51261
+ context,
51222
51262
  factory.createClassDeclaration(
51223
51263
  /*modifiers*/
51224
51264
  void 0,
@@ -51578,7 +51618,13 @@ function createTypeChecker(host) {
51578
51618
  varName,
51579
51619
  /*exclamationToken*/
51580
51620
  void 0,
51581
- serializeTypeForDeclaration(context, typeToSerialize, symbol, enclosingDeclaration)
51621
+ serializeTypeForDeclaration(
51622
+ context,
51623
+ /*declaration*/
51624
+ void 0,
51625
+ typeToSerialize,
51626
+ symbol
51627
+ )
51582
51628
  )
51583
51629
  ], flags)
51584
51630
  );
@@ -51650,7 +51696,8 @@ function createTypeChecker(host) {
51650
51696
  });
51651
51697
  Debug.assert(!!setter);
51652
51698
  const paramSymbol = isFunctionLikeDeclaration(setter) ? getSignatureFromDeclaration(setter).parameters[0] : void 0;
51653
- result.push(setTextRange(
51699
+ result.push(setTextRange2(
51700
+ context,
51654
51701
  factory.createSetAccessorDeclaration(
51655
51702
  factory.createModifiersFromModifierFlags(flag),
51656
51703
  name,
@@ -51662,7 +51709,13 @@ function createTypeChecker(host) {
51662
51709
  paramSymbol ? parameterToParameterDeclarationName(paramSymbol, getEffectiveParameterDeclaration(paramSymbol), context) : "value",
51663
51710
  /*questionToken*/
51664
51711
  void 0,
51665
- isPrivate ? void 0 : serializeTypeForDeclaration(context, getTypeOfSymbol(p), p, enclosingDeclaration)
51712
+ isPrivate ? void 0 : serializeTypeForDeclaration(
51713
+ context,
51714
+ /*declaration*/
51715
+ void 0,
51716
+ getTypeOfSymbol(p),
51717
+ p
51718
+ )
51666
51719
  )],
51667
51720
  /*body*/
51668
51721
  void 0
@@ -51672,12 +51725,19 @@ function createTypeChecker(host) {
51672
51725
  }
51673
51726
  if (p.flags & 32768 /* GetAccessor */) {
51674
51727
  const isPrivate2 = modifierFlags & 2 /* Private */;
51675
- result.push(setTextRange(
51728
+ result.push(setTextRange2(
51729
+ context,
51676
51730
  factory.createGetAccessorDeclaration(
51677
51731
  factory.createModifiersFromModifierFlags(flag),
51678
51732
  name,
51679
51733
  [],
51680
- isPrivate2 ? void 0 : serializeTypeForDeclaration(context, getTypeOfSymbol(p), p, enclosingDeclaration),
51734
+ isPrivate2 ? void 0 : serializeTypeForDeclaration(
51735
+ context,
51736
+ /*declaration*/
51737
+ void 0,
51738
+ getTypeOfSymbol(p),
51739
+ p
51740
+ ),
51681
51741
  /*body*/
51682
51742
  void 0
51683
51743
  ),
@@ -51686,12 +51746,19 @@ function createTypeChecker(host) {
51686
51746
  }
51687
51747
  return result;
51688
51748
  } else if (p.flags & (4 /* Property */ | 3 /* Variable */ | 98304 /* Accessor */)) {
51689
- return setTextRange(
51749
+ return setTextRange2(
51750
+ context,
51690
51751
  createProperty2(
51691
51752
  factory.createModifiersFromModifierFlags((isReadonlySymbol(p) ? 8 /* Readonly */ : 0) | flag),
51692
51753
  name,
51693
51754
  p.flags & 16777216 /* Optional */ ? factory.createToken(58 /* QuestionToken */) : void 0,
51694
- isPrivate ? void 0 : serializeTypeForDeclaration(context, getWriteTypeOfSymbol(p), p, enclosingDeclaration),
51755
+ isPrivate ? void 0 : serializeTypeForDeclaration(
51756
+ context,
51757
+ /*declaration*/
51758
+ void 0,
51759
+ getWriteTypeOfSymbol(p),
51760
+ p
51761
+ ),
51695
51762
  // TODO: https://github.com/microsoft/TypeScript/pull/32372#discussion_r328386357
51696
51763
  // interface members can't have initializers, however class members _can_
51697
51764
  /*initializer*/
@@ -51704,7 +51771,8 @@ function createTypeChecker(host) {
51704
51771
  const type = getTypeOfSymbol(p);
51705
51772
  const signatures = getSignaturesOfType(type, 0 /* Call */);
51706
51773
  if (flag & 2 /* Private */) {
51707
- return setTextRange(
51774
+ return setTextRange2(
51775
+ context,
51708
51776
  createProperty2(
51709
51777
  factory.createModifiersFromModifierFlags((isReadonlySymbol(p) ? 8 /* Readonly */ : 0) | flag),
51710
51778
  name,
@@ -51730,7 +51798,7 @@ function createTypeChecker(host) {
51730
51798
  }
51731
51799
  );
51732
51800
  const location = sig.declaration && isPrototypePropertyAssignment(sig.declaration.parent) ? sig.declaration.parent : sig.declaration;
51733
- results2.push(setTextRange(decl, location));
51801
+ results2.push(setTextRange2(context, decl, location));
51734
51802
  }
51735
51803
  return results2;
51736
51804
  }
@@ -51786,7 +51854,8 @@ function createTypeChecker(host) {
51786
51854
  }
51787
51855
  }
51788
51856
  if (privateProtected) {
51789
- return [setTextRange(
51857
+ return [setTextRange2(
51858
+ context,
51790
51859
  factory.createConstructorDeclaration(
51791
51860
  factory.createModifiersFromModifierFlags(privateProtected),
51792
51861
  /*parameters*/
@@ -51801,7 +51870,7 @@ function createTypeChecker(host) {
51801
51870
  const results2 = [];
51802
51871
  for (const sig of signatures) {
51803
51872
  const decl = signatureToSignatureDeclarationHelper(sig, outputKind, context);
51804
- results2.push(setTextRange(decl, sig.declaration));
51873
+ results2.push(setTextRange2(context, decl, sig.declaration));
51805
51874
  }
51806
51875
  return results2;
51807
51876
  }
@@ -55484,12 +55553,10 @@ function createTypeChecker(host) {
55484
55553
  const target = type.target ?? type;
55485
55554
  const typeVariable = getHomomorphicTypeVariable(target);
55486
55555
  if (typeVariable && !target.declaration.nameType) {
55487
- const constraint = getConstraintTypeFromMappedType(type);
55488
- if (constraint.flags & 4194304 /* Index */) {
55489
- const baseConstraint = getBaseConstraintOfType(constraint.type);
55490
- if (baseConstraint && everyType(baseConstraint, (t) => isArrayOrTupleType(t) || isArrayOrTupleOrIntersection(t))) {
55491
- return instantiateType(target, prependTypeMapping(typeVariable, baseConstraint, type.mapper));
55492
- }
55556
+ const modifiersType = getModifiersTypeFromMappedType(type);
55557
+ const baseConstraint = isGenericMappedType(modifiersType) ? getApparentTypeOfMappedType(modifiersType) : getBaseConstraintOfType(modifiersType);
55558
+ if (baseConstraint && everyType(baseConstraint, (t) => isArrayOrTupleType(t) || isArrayOrTupleOrIntersection(t))) {
55559
+ return instantiateType(target, prependTypeMapping(typeVariable, baseConstraint, type.mapper));
55493
55560
  }
55494
55561
  }
55495
55562
  return type;
@@ -60919,7 +60986,7 @@ function createTypeChecker(host) {
60919
60986
  const sourceTypePredicate = getTypePredicateOfSignature(source);
60920
60987
  if (sourceTypePredicate) {
60921
60988
  result &= compareTypePredicateRelatedTo(sourceTypePredicate, targetTypePredicate, reportErrors2, errorReporter, compareTypes);
60922
- } else if (isIdentifierTypePredicate(targetTypePredicate)) {
60989
+ } else if (isIdentifierTypePredicate(targetTypePredicate) || isThisTypePredicate(targetTypePredicate)) {
60923
60990
  if (reportErrors2) {
60924
60991
  errorReporter(Diagnostics.Signature_0_must_be_a_type_predicate, signatureToString(source));
60925
60992
  }
@@ -83303,9 +83370,10 @@ function createTypeChecker(host) {
83303
83370
  return false;
83304
83371
  }
83305
83372
  function declaredParameterTypeContainsUndefined(parameter) {
83306
- if (!parameter.type)
83373
+ const typeNode = getNonlocalEffectiveTypeAnnotationNode(parameter);
83374
+ if (!typeNode)
83307
83375
  return false;
83308
- const type = getTypeFromTypeNode(parameter.type);
83376
+ const type = getTypeFromTypeNode(typeNode);
83309
83377
  return containsUndefinedType(type);
83310
83378
  }
83311
83379
  function requiresAddingImplicitUndefined(parameter) {
@@ -83315,7 +83383,7 @@ function createTypeChecker(host) {
83315
83383
  return !!strictNullChecks && !isOptionalParameter(parameter) && !isJSDocParameterTag(parameter) && !!parameter.initializer && !hasSyntacticModifier(parameter, 31 /* ParameterPropertyModifier */);
83316
83384
  }
83317
83385
  function isOptionalUninitializedParameterProperty(parameter) {
83318
- return strictNullChecks && isOptionalParameter(parameter) && !parameter.initializer && hasSyntacticModifier(parameter, 31 /* ParameterPropertyModifier */);
83386
+ return strictNullChecks && isOptionalParameter(parameter) && (isJSDocParameterTag(parameter) || !parameter.initializer) && hasSyntacticModifier(parameter, 31 /* ParameterPropertyModifier */);
83319
83387
  }
83320
83388
  function isExpandoFunctionDeclaration(node) {
83321
83389
  const declaration = getParseTreeNode(node, isFunctionDeclaration);
@@ -83465,14 +83533,14 @@ function createTypeChecker(host) {
83465
83533
  return 11 /* ObjectType */;
83466
83534
  }
83467
83535
  }
83468
- function createTypeOfDeclaration(declarationIn, enclosingDeclaration, flags, tracker, addUndefined) {
83536
+ function createTypeOfDeclaration(declarationIn, enclosingDeclaration, flags, tracker) {
83469
83537
  const declaration = getParseTreeNode(declarationIn, isVariableLikeOrAccessor);
83470
83538
  if (!declaration) {
83471
83539
  return factory.createToken(133 /* AnyKeyword */);
83472
83540
  }
83473
83541
  const symbol = getSymbolOfDeclaration(declaration);
83474
83542
  const type = symbol && !(symbol.flags & (2048 /* TypeLiteral */ | 131072 /* Signature */)) ? getWidenedLiteralType(getTypeOfSymbol(symbol)) : errorType;
83475
- return nodeBuilder.serializeTypeForDeclaration(type, symbol, addUndefined, enclosingDeclaration, flags | 1024 /* MultilineObjectLiterals */, tracker);
83543
+ return nodeBuilder.serializeTypeForDeclaration(declaration, type, symbol, enclosingDeclaration, flags | 1024 /* MultilineObjectLiterals */, tracker);
83476
83544
  }
83477
83545
  function isDeclarationWithPossibleInnerTypeNodeReuse(declaration) {
83478
83546
  return isFunctionLike(declaration) || isExportAssignment(declaration) || isVariableLike(declaration);
@@ -109125,7 +109193,7 @@ function transformDeclarations(context) {
109125
109193
  case 172 /* PropertyDeclaration */:
109126
109194
  case 208 /* BindingElement */:
109127
109195
  case 260 /* VariableDeclaration */:
109128
- typeNode = resolver.createTypeOfDeclaration(node, enclosingDeclaration, declarationEmitNodeBuilderFlags, symbolTracker, shouldAddImplicitUndefined);
109196
+ typeNode = resolver.createTypeOfDeclaration(node, enclosingDeclaration, declarationEmitNodeBuilderFlags, symbolTracker);
109129
109197
  break;
109130
109198
  case 262 /* FunctionDeclaration */:
109131
109199
  case 180 /* ConstructSignature */:
@@ -3233,7 +3233,6 @@ declare namespace ts {
3233
3233
  private addFilesToNonInferredProject;
3234
3234
  private updateNonInferredProjectFiles;
3235
3235
  private updateRootAndOptionsOfNonInferredProject;
3236
- private sendConfigFileDiagEvent;
3237
3236
  private getOrCreateInferredProjectForProjectRootPathIfEnabled;
3238
3237
  private getOrCreateSingleInferredProjectIfEnabled;
3239
3238
  private getOrCreateSingleInferredWithoutProjectRoot;
@@ -4134,7 +4133,7 @@ declare namespace ts {
4134
4133
  type KeywordTypeSyntaxKind = SyntaxKind.AnyKeyword | SyntaxKind.BigIntKeyword | SyntaxKind.BooleanKeyword | SyntaxKind.IntrinsicKeyword | SyntaxKind.NeverKeyword | SyntaxKind.NumberKeyword | SyntaxKind.ObjectKeyword | SyntaxKind.StringKeyword | SyntaxKind.SymbolKeyword | SyntaxKind.UndefinedKeyword | SyntaxKind.UnknownKeyword | SyntaxKind.VoidKeyword;
4135
4134
  type TokenSyntaxKind = SyntaxKind.Unknown | SyntaxKind.EndOfFileToken | TriviaSyntaxKind | LiteralSyntaxKind | PseudoLiteralSyntaxKind | PunctuationSyntaxKind | SyntaxKind.Identifier | KeywordSyntaxKind;
4136
4135
  type JsxTokenSyntaxKind = SyntaxKind.LessThanSlashToken | SyntaxKind.EndOfFileToken | SyntaxKind.ConflictMarkerTrivia | SyntaxKind.JsxText | SyntaxKind.JsxTextAllWhiteSpaces | SyntaxKind.OpenBraceToken | SyntaxKind.LessThanToken;
4137
- type JSDocSyntaxKind = SyntaxKind.EndOfFileToken | SyntaxKind.WhitespaceTrivia | SyntaxKind.AtToken | SyntaxKind.NewLineTrivia | SyntaxKind.AsteriskToken | SyntaxKind.OpenBraceToken | SyntaxKind.CloseBraceToken | SyntaxKind.LessThanToken | SyntaxKind.GreaterThanToken | SyntaxKind.OpenBracketToken | SyntaxKind.CloseBracketToken | SyntaxKind.EqualsToken | SyntaxKind.CommaToken | SyntaxKind.DotToken | SyntaxKind.Identifier | SyntaxKind.BacktickToken | SyntaxKind.HashToken | SyntaxKind.Unknown | KeywordSyntaxKind;
4136
+ type JSDocSyntaxKind = SyntaxKind.EndOfFileToken | SyntaxKind.WhitespaceTrivia | SyntaxKind.AtToken | SyntaxKind.NewLineTrivia | SyntaxKind.AsteriskToken | SyntaxKind.OpenBraceToken | SyntaxKind.CloseBraceToken | SyntaxKind.LessThanToken | SyntaxKind.GreaterThanToken | SyntaxKind.OpenBracketToken | SyntaxKind.CloseBracketToken | SyntaxKind.OpenParenToken | SyntaxKind.CloseParenToken | SyntaxKind.EqualsToken | SyntaxKind.CommaToken | SyntaxKind.DotToken | SyntaxKind.Identifier | SyntaxKind.BacktickToken | SyntaxKind.HashToken | SyntaxKind.Unknown | KeywordSyntaxKind;
4138
4137
  enum NodeFlags {
4139
4138
  None = 0,
4140
4139
  Let = 1,
package/lib/typescript.js CHANGED
@@ -2335,7 +2335,7 @@ module.exports = __toCommonJS(typescript_exports);
2335
2335
 
2336
2336
  // src/compiler/corePublic.ts
2337
2337
  var versionMajorMinor = "5.5";
2338
- var version = `${versionMajorMinor}.0-dev.20240405`;
2338
+ var version = `${versionMajorMinor}.0-dev.20240409`;
2339
2339
  var Comparison = /* @__PURE__ */ ((Comparison3) => {
2340
2340
  Comparison3[Comparison3["LessThan"] = -1] = "LessThan";
2341
2341
  Comparison3[Comparison3["EqualTo"] = 0] = "EqualTo";
@@ -13469,6 +13469,10 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
13469
13469
  return token = 23 /* OpenBracketToken */;
13470
13470
  case 93 /* closeBracket */:
13471
13471
  return token = 24 /* CloseBracketToken */;
13472
+ case 40 /* openParen */:
13473
+ return token = 21 /* OpenParenToken */;
13474
+ case 41 /* closeParen */:
13475
+ return token = 22 /* CloseParenToken */;
13472
13476
  case 60 /* lessThan */:
13473
13477
  return token = 30 /* LessThanToken */;
13474
13478
  case 62 /* greaterThan */:
@@ -52887,7 +52891,7 @@ function createTypeChecker(host) {
52887
52891
  typeToTypeNode: (type, enclosingDeclaration, flags, tracker) => withContext(enclosingDeclaration, flags, tracker, (context) => typeToTypeNodeHelper(type, context)),
52888
52892
  typePredicateToTypePredicateNode: (typePredicate, enclosingDeclaration, flags, tracker) => withContext(enclosingDeclaration, flags, tracker, (context) => typePredicateToTypePredicateNodeHelper(typePredicate, context)),
52889
52893
  expressionOrTypeToTypeNode: (expr, type, addUndefined, enclosingDeclaration, flags, tracker) => withContext(enclosingDeclaration, flags, tracker, (context) => expressionOrTypeToTypeNode(context, expr, type, addUndefined)),
52890
- serializeTypeForDeclaration: (type, symbol, addUndefined, enclosingDeclaration, flags, tracker) => withContext(enclosingDeclaration, flags, tracker, (context) => serializeTypeForDeclaration(context, type, symbol, enclosingDeclaration, addUndefined)),
52894
+ serializeTypeForDeclaration: (declaration, type, symbol, enclosingDeclaration, flags, tracker) => withContext(enclosingDeclaration, flags, tracker, (context) => serializeTypeForDeclaration(context, declaration, type, symbol)),
52891
52895
  serializeReturnTypeForSignature: (signature, enclosingDeclaration, flags, tracker) => withContext(enclosingDeclaration, flags, tracker, (context) => serializeReturnTypeForSignature(context, signature)),
52892
52896
  indexInfoToIndexSignatureDeclaration: (indexInfo, enclosingDeclaration, flags, tracker) => withContext(enclosingDeclaration, flags, tracker, (context) => indexInfoToIndexSignatureDeclarationHelper(
52893
52897
  indexInfo,
@@ -52910,6 +52914,18 @@ function createTypeChecker(host) {
52910
52914
  symbolTableToDeclarationStatements: (symbolTable, enclosingDeclaration, flags, tracker) => withContext(enclosingDeclaration, flags, tracker, (context) => symbolTableToDeclarationStatements(symbolTable, context)),
52911
52915
  symbolToNode: (symbol, meaning, enclosingDeclaration, flags, tracker) => withContext(enclosingDeclaration, flags, tracker, (context) => symbolToNode(symbol, context, meaning))
52912
52916
  };
52917
+ function setTextRange2(context, range, location) {
52918
+ if (!nodeIsSynthesized(range) && !(range.flags & 16 /* Synthesized */) && (!context.enclosingFile || context.enclosingFile !== getSourceFileOfNode(range))) {
52919
+ range = factory.cloneNode(range);
52920
+ }
52921
+ if (!location) {
52922
+ return range;
52923
+ }
52924
+ if (!context.enclosingFile || context.enclosingFile !== getSourceFileOfNode(getOriginalNode(location))) {
52925
+ return setOriginalNode(range, location);
52926
+ }
52927
+ return setTextRange(setOriginalNode(range, location), location);
52928
+ }
52913
52929
  function expressionOrTypeToTypeNode(context, expr, type, addUndefined) {
52914
52930
  if (expr) {
52915
52931
  const typeNode = isAssertionExpression(expr) ? expr.type : isJSDocTypeAssertion(expr) ? getJSDocTypeAssertionType(expr) : void 0;
@@ -52974,6 +52990,7 @@ function createTypeChecker(host) {
52974
52990
  const moduleResolverHost = (tracker == null ? void 0 : tracker.trackSymbol) ? tracker.moduleResolverHost : flags & 134217728 /* DoNotIncludeSymbolChain */ ? createBasicNodeBuilderModuleSpecifierResolutionHost(host) : void 0;
52975
52991
  const context = {
52976
52992
  enclosingDeclaration,
52993
+ enclosingFile: enclosingDeclaration && getSourceFileOfNode(enclosingDeclaration),
52977
52994
  flags: flags || 0 /* None */,
52978
52995
  tracker: void 0,
52979
52996
  encounteredError: false,
@@ -53506,7 +53523,7 @@ function createTypeChecker(host) {
53506
53523
  if (!nodeIsSynthesized(node) && getParseTreeNode(node) === node) {
53507
53524
  return node;
53508
53525
  }
53509
- return setTextRange(factory.cloneNode(visitEachChild(
53526
+ return setTextRange2(context, factory.cloneNode(visitEachChild(
53510
53527
  node,
53511
53528
  deepCloneOrReuseNode,
53512
53529
  /*context*/
@@ -53848,7 +53865,13 @@ function createTypeChecker(host) {
53848
53865
  context.reverseMappedStack || (context.reverseMappedStack = []);
53849
53866
  context.reverseMappedStack.push(propertySymbol);
53850
53867
  }
53851
- propertyTypeNode = propertyType ? serializeTypeForDeclaration(context, propertyType, propertySymbol, saveEnclosingDeclaration) : factory.createKeywordTypeNode(133 /* AnyKeyword */);
53868
+ propertyTypeNode = propertyType ? serializeTypeForDeclaration(
53869
+ context,
53870
+ /*declaration*/
53871
+ void 0,
53872
+ propertyType,
53873
+ propertySymbol
53874
+ ) : factory.createKeywordTypeNode(133 /* AnyKeyword */);
53852
53875
  if (propertyIsReverseMapped) {
53853
53876
  context.reverseMappedStack.pop();
53854
53877
  }
@@ -54237,8 +54260,7 @@ function createTypeChecker(host) {
54237
54260
  function symbolToParameterDeclaration(parameterSymbol, context, preserveModifierFlags) {
54238
54261
  const parameterDeclaration = getEffectiveParameterDeclaration(parameterSymbol);
54239
54262
  const parameterType = getTypeOfSymbol(parameterSymbol);
54240
- const addUndefined = parameterDeclaration && isRequiredInitializedParameter(parameterDeclaration);
54241
- const parameterTypeNode = serializeTypeForDeclaration(context, parameterType, parameterSymbol, context.enclosingDeclaration, addUndefined);
54263
+ const parameterTypeNode = serializeTypeForDeclaration(context, parameterDeclaration, parameterType, parameterSymbol);
54242
54264
  const modifiers = !(context.flags & 8192 /* OmitParameterModifiers */) && preserveModifierFlags && parameterDeclaration && canHaveModifiers(parameterDeclaration) ? map(getModifiers(parameterDeclaration), factory.cloneNode) : void 0;
54243
54265
  const isRest = parameterDeclaration && isRestParameter(parameterDeclaration) || getCheckFlags(parameterSymbol) & 32768 /* RestParameter */;
54244
54266
  const dotDotDotToken = isRest ? factory.createToken(26 /* DotDotDotToken */) : void 0;
@@ -54830,10 +54852,12 @@ function createTypeChecker(host) {
54830
54852
  }
54831
54853
  return enclosingDeclaration;
54832
54854
  }
54833
- function serializeTypeForDeclaration(context, type, symbol, enclosingDeclaration, addUndefined) {
54855
+ function serializeTypeForDeclaration(context, declaration, type, symbol) {
54834
54856
  var _a;
54857
+ const addUndefined = declaration && (isParameter(declaration) || isJSDocParameterTag(declaration)) && requiresAddingImplicitUndefined(declaration);
54858
+ const enclosingDeclaration = context.enclosingDeclaration;
54835
54859
  if (!isErrorType(type) && enclosingDeclaration) {
54836
- const declWithExistingAnnotation = getDeclarationWithTypeAnnotation(symbol, getEnclosingDeclarationIgnoringFakeScope(enclosingDeclaration));
54860
+ const declWithExistingAnnotation = declaration && getNonlocalEffectiveTypeAnnotationNode(declaration) ? declaration : getDeclarationWithTypeAnnotation(symbol, getEnclosingDeclarationIgnoringFakeScope(enclosingDeclaration));
54837
54861
  if (declWithExistingAnnotation && !isFunctionLikeDeclaration(declWithExistingAnnotation) && !isGetAccessorDeclaration(declWithExistingAnnotation)) {
54838
54862
  const existing = getNonlocalEffectiveTypeAnnotationNode(declWithExistingAnnotation);
54839
54863
  const result2 = tryReuseExistingTypeNode(context, existing, type, declWithExistingAnnotation, addUndefined);
@@ -54846,7 +54870,7 @@ function createTypeChecker(host) {
54846
54870
  if (type.flags & 8192 /* UniqueESSymbol */ && type.symbol === symbol && (!context.enclosingDeclaration || some(symbol.declarations, (d) => getSourceFileOfNode(d) === getSourceFileOfNode(context.enclosingDeclaration)))) {
54847
54871
  context.flags |= 1048576 /* AllowUniqueESSymbolType */;
54848
54872
  }
54849
- const decl = symbol.valueDeclaration ?? ((_a = symbol.declarations) == null ? void 0 : _a[0]);
54873
+ const decl = declaration ?? symbol.valueDeclaration ?? ((_a = symbol.declarations) == null ? void 0 : _a[0]);
54850
54874
  const expr = decl && isDeclarationWithPossibleInnerTypeNodeReuse(decl) ? getPossibleTypeNodeReuseExpression(decl) : void 0;
54851
54875
  const result = expressionOrTypeToTypeNode(context, expr, type, addUndefined);
54852
54876
  context.flags = oldFlags;
@@ -54960,7 +54984,7 @@ function createTypeChecker(host) {
54960
54984
  const type = getDeclaredTypeOfSymbol(sym);
54961
54985
  const name = sym.flags & 262144 /* TypeParameter */ ? typeParameterToName(type, context) : factory.cloneNode(node2);
54962
54986
  name.symbol = sym;
54963
- return setTextRange(setEmitFlags(setOriginalNode(name, node2), 16777216 /* NoAsciiEscaping */), node2);
54987
+ return setTextRange2(context, setEmitFlags(name, 16777216 /* NoAsciiEscaping */), node2);
54964
54988
  }
54965
54989
  const updated = visitEachChild(
54966
54990
  node2,
@@ -54969,7 +54993,7 @@ function createTypeChecker(host) {
54969
54993
  void 0
54970
54994
  );
54971
54995
  if (updated !== node2) {
54972
- setTextRange(updated, node2);
54996
+ setTextRange2(context, updated, node2);
54973
54997
  }
54974
54998
  return updated;
54975
54999
  }
@@ -54983,12 +55007,12 @@ function createTypeChecker(host) {
54983
55007
  if (hadError) {
54984
55008
  return void 0;
54985
55009
  }
54986
- return transformed === existing ? setTextRange(factory.cloneNode(existing), existing) : transformed;
55010
+ return transformed;
54987
55011
  function visitExistingNodeTreeSymbols(node) {
54988
55012
  const onExitNewScope = isNewScopeNode(node) ? onEnterNewScope(node) : void 0;
54989
55013
  const result = visitExistingNodeTreeSymbolsWorker(node);
54990
55014
  onExitNewScope == null ? void 0 : onExitNewScope();
54991
- return result;
55015
+ return result === node ? setTextRange2(context, factory.cloneNode(result), node) : result;
54992
55016
  }
54993
55017
  function onEnterNewScope(node) {
54994
55018
  const oldContex = context;
@@ -55124,7 +55148,7 @@ function createTypeChecker(host) {
55124
55148
  void 0
55125
55149
  );
55126
55150
  if (visited === node) {
55127
- visited = setTextRange(factory.cloneNode(node), node);
55151
+ visited = setTextRange2(context, factory.cloneNode(node), node);
55128
55152
  }
55129
55153
  visited.type = factory.createKeywordTypeNode(133 /* AnyKeyword */);
55130
55154
  if (isParameter(node)) {
@@ -55147,11 +55171,16 @@ function createTypeChecker(host) {
55147
55171
  /*context*/
55148
55172
  void 0
55149
55173
  );
55150
- const clone2 = setTextRange(visited === node ? factory.cloneNode(node) : visited, node);
55174
+ const clone2 = setTextRange2(context, visited === node ? factory.cloneNode(node) : visited, node);
55151
55175
  const flags = getEmitFlags(clone2);
55152
55176
  setEmitFlags(clone2, flags | (context.flags & 1024 /* MultilineObjectLiterals */ && isTypeLiteralNode(node) ? 0 : 1 /* SingleLine */));
55153
55177
  return clone2;
55154
55178
  }
55179
+ if (isStringLiteral(node) && !!(context.flags & 268435456 /* UseSingleQuotesForStringLiteralType */) && !node.singleQuote) {
55180
+ const clone2 = factory.cloneNode(node);
55181
+ clone2.singleQuote = true;
55182
+ return clone2;
55183
+ }
55155
55184
  if (isConditionalTypeNode(node)) {
55156
55185
  const checkType = visitNode(node.checkType, visitExistingNodeTreeSymbols, isTypeNode);
55157
55186
  const disposeScope = onEnterNewScope(node);
@@ -55530,7 +55559,8 @@ function createTypeChecker(host) {
55530
55559
  );
55531
55560
  context.tracker.trackSymbol(type.symbol, context.enclosingDeclaration, 111551 /* Value */);
55532
55561
  } else {
55533
- const statement = setTextRange(
55562
+ const statement = setTextRange2(
55563
+ context,
55534
55564
  factory.createVariableStatement(
55535
55565
  /*modifiers*/
55536
55566
  void 0,
@@ -55539,7 +55569,13 @@ function createTypeChecker(host) {
55539
55569
  name,
55540
55570
  /*exclamationToken*/
55541
55571
  void 0,
55542
- serializeTypeForDeclaration(context, type, symbol, enclosingDeclaration)
55572
+ serializeTypeForDeclaration(
55573
+ context,
55574
+ /*declaration*/
55575
+ void 0,
55576
+ type,
55577
+ symbol
55578
+ )
55543
55579
  )
55544
55580
  ], flags)
55545
55581
  ),
@@ -55812,7 +55848,7 @@ function createTypeChecker(host) {
55812
55848
  const signatures = getSignaturesOfType(type, 0 /* Call */);
55813
55849
  for (const sig of signatures) {
55814
55850
  const decl = signatureToSignatureDeclarationHelper(sig, 262 /* FunctionDeclaration */, context, { name: factory.createIdentifier(localName) });
55815
- addResult(setTextRange(decl, getSignatureTextRangeLocation(sig)), modifierFlags);
55851
+ addResult(setTextRange2(context, decl, getSignatureTextRangeLocation(sig)), modifierFlags);
55816
55852
  }
55817
55853
  if (!(symbol.flags & (512 /* ValueModule */ | 1024 /* NamespaceModule */) && !!symbol.exports && !!symbol.exports.size)) {
55818
55854
  const props = filter(getPropertiesOfType(type), isNamespaceMember);
@@ -55990,7 +56026,8 @@ function createTypeChecker(host) {
55990
56026
  const indexSignatures = serializeIndexSignatures(classType, baseTypes[0]);
55991
56027
  context.enclosingDeclaration = oldEnclosing;
55992
56028
  addResult(
55993
- setTextRange(
56029
+ setTextRange2(
56030
+ context,
55994
56031
  factory.createClassDeclaration(
55995
56032
  /*modifiers*/
55996
56033
  void 0,
@@ -56350,7 +56387,13 @@ function createTypeChecker(host) {
56350
56387
  varName,
56351
56388
  /*exclamationToken*/
56352
56389
  void 0,
56353
- serializeTypeForDeclaration(context, typeToSerialize, symbol, enclosingDeclaration)
56390
+ serializeTypeForDeclaration(
56391
+ context,
56392
+ /*declaration*/
56393
+ void 0,
56394
+ typeToSerialize,
56395
+ symbol
56396
+ )
56354
56397
  )
56355
56398
  ], flags)
56356
56399
  );
@@ -56422,7 +56465,8 @@ function createTypeChecker(host) {
56422
56465
  });
56423
56466
  Debug.assert(!!setter);
56424
56467
  const paramSymbol = isFunctionLikeDeclaration(setter) ? getSignatureFromDeclaration(setter).parameters[0] : void 0;
56425
- result.push(setTextRange(
56468
+ result.push(setTextRange2(
56469
+ context,
56426
56470
  factory.createSetAccessorDeclaration(
56427
56471
  factory.createModifiersFromModifierFlags(flag),
56428
56472
  name,
@@ -56434,7 +56478,13 @@ function createTypeChecker(host) {
56434
56478
  paramSymbol ? parameterToParameterDeclarationName(paramSymbol, getEffectiveParameterDeclaration(paramSymbol), context) : "value",
56435
56479
  /*questionToken*/
56436
56480
  void 0,
56437
- isPrivate ? void 0 : serializeTypeForDeclaration(context, getTypeOfSymbol(p), p, enclosingDeclaration)
56481
+ isPrivate ? void 0 : serializeTypeForDeclaration(
56482
+ context,
56483
+ /*declaration*/
56484
+ void 0,
56485
+ getTypeOfSymbol(p),
56486
+ p
56487
+ )
56438
56488
  )],
56439
56489
  /*body*/
56440
56490
  void 0
@@ -56444,12 +56494,19 @@ function createTypeChecker(host) {
56444
56494
  }
56445
56495
  if (p.flags & 32768 /* GetAccessor */) {
56446
56496
  const isPrivate2 = modifierFlags & 2 /* Private */;
56447
- result.push(setTextRange(
56497
+ result.push(setTextRange2(
56498
+ context,
56448
56499
  factory.createGetAccessorDeclaration(
56449
56500
  factory.createModifiersFromModifierFlags(flag),
56450
56501
  name,
56451
56502
  [],
56452
- isPrivate2 ? void 0 : serializeTypeForDeclaration(context, getTypeOfSymbol(p), p, enclosingDeclaration),
56503
+ isPrivate2 ? void 0 : serializeTypeForDeclaration(
56504
+ context,
56505
+ /*declaration*/
56506
+ void 0,
56507
+ getTypeOfSymbol(p),
56508
+ p
56509
+ ),
56453
56510
  /*body*/
56454
56511
  void 0
56455
56512
  ),
@@ -56458,12 +56515,19 @@ function createTypeChecker(host) {
56458
56515
  }
56459
56516
  return result;
56460
56517
  } else if (p.flags & (4 /* Property */ | 3 /* Variable */ | 98304 /* Accessor */)) {
56461
- return setTextRange(
56518
+ return setTextRange2(
56519
+ context,
56462
56520
  createProperty2(
56463
56521
  factory.createModifiersFromModifierFlags((isReadonlySymbol(p) ? 8 /* Readonly */ : 0) | flag),
56464
56522
  name,
56465
56523
  p.flags & 16777216 /* Optional */ ? factory.createToken(58 /* QuestionToken */) : void 0,
56466
- isPrivate ? void 0 : serializeTypeForDeclaration(context, getWriteTypeOfSymbol(p), p, enclosingDeclaration),
56524
+ isPrivate ? void 0 : serializeTypeForDeclaration(
56525
+ context,
56526
+ /*declaration*/
56527
+ void 0,
56528
+ getWriteTypeOfSymbol(p),
56529
+ p
56530
+ ),
56467
56531
  // TODO: https://github.com/microsoft/TypeScript/pull/32372#discussion_r328386357
56468
56532
  // interface members can't have initializers, however class members _can_
56469
56533
  /*initializer*/
@@ -56476,7 +56540,8 @@ function createTypeChecker(host) {
56476
56540
  const type = getTypeOfSymbol(p);
56477
56541
  const signatures = getSignaturesOfType(type, 0 /* Call */);
56478
56542
  if (flag & 2 /* Private */) {
56479
- return setTextRange(
56543
+ return setTextRange2(
56544
+ context,
56480
56545
  createProperty2(
56481
56546
  factory.createModifiersFromModifierFlags((isReadonlySymbol(p) ? 8 /* Readonly */ : 0) | flag),
56482
56547
  name,
@@ -56502,7 +56567,7 @@ function createTypeChecker(host) {
56502
56567
  }
56503
56568
  );
56504
56569
  const location = sig.declaration && isPrototypePropertyAssignment(sig.declaration.parent) ? sig.declaration.parent : sig.declaration;
56505
- results2.push(setTextRange(decl, location));
56570
+ results2.push(setTextRange2(context, decl, location));
56506
56571
  }
56507
56572
  return results2;
56508
56573
  }
@@ -56558,7 +56623,8 @@ function createTypeChecker(host) {
56558
56623
  }
56559
56624
  }
56560
56625
  if (privateProtected) {
56561
- return [setTextRange(
56626
+ return [setTextRange2(
56627
+ context,
56562
56628
  factory.createConstructorDeclaration(
56563
56629
  factory.createModifiersFromModifierFlags(privateProtected),
56564
56630
  /*parameters*/
@@ -56573,7 +56639,7 @@ function createTypeChecker(host) {
56573
56639
  const results2 = [];
56574
56640
  for (const sig of signatures) {
56575
56641
  const decl = signatureToSignatureDeclarationHelper(sig, outputKind, context);
56576
- results2.push(setTextRange(decl, sig.declaration));
56642
+ results2.push(setTextRange2(context, decl, sig.declaration));
56577
56643
  }
56578
56644
  return results2;
56579
56645
  }
@@ -60256,12 +60322,10 @@ function createTypeChecker(host) {
60256
60322
  const target = type.target ?? type;
60257
60323
  const typeVariable = getHomomorphicTypeVariable(target);
60258
60324
  if (typeVariable && !target.declaration.nameType) {
60259
- const constraint = getConstraintTypeFromMappedType(type);
60260
- if (constraint.flags & 4194304 /* Index */) {
60261
- const baseConstraint = getBaseConstraintOfType(constraint.type);
60262
- if (baseConstraint && everyType(baseConstraint, (t) => isArrayOrTupleType(t) || isArrayOrTupleOrIntersection(t))) {
60263
- return instantiateType(target, prependTypeMapping(typeVariable, baseConstraint, type.mapper));
60264
- }
60325
+ const modifiersType = getModifiersTypeFromMappedType(type);
60326
+ const baseConstraint = isGenericMappedType(modifiersType) ? getApparentTypeOfMappedType(modifiersType) : getBaseConstraintOfType(modifiersType);
60327
+ if (baseConstraint && everyType(baseConstraint, (t) => isArrayOrTupleType(t) || isArrayOrTupleOrIntersection(t))) {
60328
+ return instantiateType(target, prependTypeMapping(typeVariable, baseConstraint, type.mapper));
60265
60329
  }
60266
60330
  }
60267
60331
  return type;
@@ -65691,7 +65755,7 @@ function createTypeChecker(host) {
65691
65755
  const sourceTypePredicate = getTypePredicateOfSignature(source);
65692
65756
  if (sourceTypePredicate) {
65693
65757
  result &= compareTypePredicateRelatedTo(sourceTypePredicate, targetTypePredicate, reportErrors2, errorReporter, compareTypes);
65694
- } else if (isIdentifierTypePredicate(targetTypePredicate)) {
65758
+ } else if (isIdentifierTypePredicate(targetTypePredicate) || isThisTypePredicate(targetTypePredicate)) {
65695
65759
  if (reportErrors2) {
65696
65760
  errorReporter(Diagnostics.Signature_0_must_be_a_type_predicate, signatureToString(source));
65697
65761
  }
@@ -88075,9 +88139,10 @@ function createTypeChecker(host) {
88075
88139
  return false;
88076
88140
  }
88077
88141
  function declaredParameterTypeContainsUndefined(parameter) {
88078
- if (!parameter.type)
88142
+ const typeNode = getNonlocalEffectiveTypeAnnotationNode(parameter);
88143
+ if (!typeNode)
88079
88144
  return false;
88080
- const type = getTypeFromTypeNode(parameter.type);
88145
+ const type = getTypeFromTypeNode(typeNode);
88081
88146
  return containsUndefinedType(type);
88082
88147
  }
88083
88148
  function requiresAddingImplicitUndefined(parameter) {
@@ -88087,7 +88152,7 @@ function createTypeChecker(host) {
88087
88152
  return !!strictNullChecks && !isOptionalParameter(parameter) && !isJSDocParameterTag(parameter) && !!parameter.initializer && !hasSyntacticModifier(parameter, 31 /* ParameterPropertyModifier */);
88088
88153
  }
88089
88154
  function isOptionalUninitializedParameterProperty(parameter) {
88090
- return strictNullChecks && isOptionalParameter(parameter) && !parameter.initializer && hasSyntacticModifier(parameter, 31 /* ParameterPropertyModifier */);
88155
+ return strictNullChecks && isOptionalParameter(parameter) && (isJSDocParameterTag(parameter) || !parameter.initializer) && hasSyntacticModifier(parameter, 31 /* ParameterPropertyModifier */);
88091
88156
  }
88092
88157
  function isExpandoFunctionDeclaration(node) {
88093
88158
  const declaration = getParseTreeNode(node, isFunctionDeclaration);
@@ -88237,14 +88302,14 @@ function createTypeChecker(host) {
88237
88302
  return 11 /* ObjectType */;
88238
88303
  }
88239
88304
  }
88240
- function createTypeOfDeclaration(declarationIn, enclosingDeclaration, flags, tracker, addUndefined) {
88305
+ function createTypeOfDeclaration(declarationIn, enclosingDeclaration, flags, tracker) {
88241
88306
  const declaration = getParseTreeNode(declarationIn, isVariableLikeOrAccessor);
88242
88307
  if (!declaration) {
88243
88308
  return factory.createToken(133 /* AnyKeyword */);
88244
88309
  }
88245
88310
  const symbol = getSymbolOfDeclaration(declaration);
88246
88311
  const type = symbol && !(symbol.flags & (2048 /* TypeLiteral */ | 131072 /* Signature */)) ? getWidenedLiteralType(getTypeOfSymbol(symbol)) : errorType;
88247
- return nodeBuilder.serializeTypeForDeclaration(type, symbol, addUndefined, enclosingDeclaration, flags | 1024 /* MultilineObjectLiterals */, tracker);
88312
+ return nodeBuilder.serializeTypeForDeclaration(declaration, type, symbol, enclosingDeclaration, flags | 1024 /* MultilineObjectLiterals */, tracker);
88248
88313
  }
88249
88314
  function isDeclarationWithPossibleInnerTypeNodeReuse(declaration) {
88250
88315
  return isFunctionLike(declaration) || isExportAssignment(declaration) || isVariableLike(declaration);
@@ -114084,7 +114149,7 @@ function transformDeclarations(context) {
114084
114149
  case 172 /* PropertyDeclaration */:
114085
114150
  case 208 /* BindingElement */:
114086
114151
  case 260 /* VariableDeclaration */:
114087
- typeNode = resolver.createTypeOfDeclaration(node, enclosingDeclaration, declarationEmitNodeBuilderFlags, symbolTracker, shouldAddImplicitUndefined);
114152
+ typeNode = resolver.createTypeOfDeclaration(node, enclosingDeclaration, declarationEmitNodeBuilderFlags, symbolTracker);
114088
114153
  break;
114089
114154
  case 262 /* FunctionDeclaration */:
114090
114155
  case 180 /* ConstructSignature */:
@@ -181114,6 +181179,13 @@ var ConfiguredProject2 = class extends Project3 {
181114
181179
  this.compilerHost = void 0;
181115
181180
  this.projectService.sendProjectLoadingFinishEvent(this);
181116
181181
  this.projectService.sendProjectTelemetry(this);
181182
+ if (!this.skipConfigDiagEvent && !result) {
181183
+ this.projectService.sendConfigFileDiagEvent(
181184
+ this,
181185
+ /*triggerFile*/
181186
+ void 0
181187
+ );
181188
+ }
181117
181189
  return result;
181118
181190
  }
181119
181191
  /** @internal */
@@ -181568,7 +181640,12 @@ function projectContainsInfoDirectly(project, info) {
181568
181640
  }
181569
181641
  function updateProjectIfDirty(project) {
181570
181642
  project.invalidateResolutionsOfFailedLookupLocations();
181571
- return project.dirty && project.updateGraph();
181643
+ return project.dirty && !project.updateGraph();
181644
+ }
181645
+ function updateConfiguredProjectWithoutConfigDiagIfDirty(project) {
181646
+ project.skipConfigDiagEvent = true;
181647
+ updateProjectIfDirty(project);
181648
+ project.skipConfigDiagEvent = void 0;
181572
181649
  }
181573
181650
  function setProjectOptionsUsed(project) {
181574
181651
  if (isConfiguredProject(project)) {
@@ -182860,6 +182937,7 @@ var _ProjectService = class _ProjectService {
182860
182937
  /** @internal */
182861
182938
  createLoadAndUpdateConfiguredProject(configFileName, reason) {
182862
182939
  const project = this.createAndLoadConfiguredProject(configFileName, reason);
182940
+ project.skipConfigDiagEvent = true;
182863
182941
  project.updateGraph();
182864
182942
  return project;
182865
182943
  }
@@ -183152,6 +183230,7 @@ var _ProjectService = class _ProjectService {
183152
183230
  const configFileName = project.getConfigFilePath();
183153
183231
  this.logger.info(`${isInitialLoad ? "Loading" : "Reloading"} configured project ${configFileName}`);
183154
183232
  this.loadConfiguredProject(project, reason);
183233
+ project.skipConfigDiagEvent = true;
183155
183234
  project.updateGraph();
183156
183235
  this.sendConfigFileDiagEvent(project, configFileName);
183157
183236
  }
@@ -183165,16 +183244,20 @@ var _ProjectService = class _ProjectService {
183165
183244
  project.cleanupProgram();
183166
183245
  project.markAsDirty();
183167
183246
  }
183247
+ /** @internal */
183168
183248
  sendConfigFileDiagEvent(project, triggerFile) {
183169
183249
  if (!this.eventHandler || this.suppressDiagnosticEvents) {
183170
183250
  return;
183171
183251
  }
183172
183252
  const diagnostics = project.getLanguageService().getCompilerOptionsDiagnostics();
183173
183253
  diagnostics.push(...project.getAllProjectErrors());
183254
+ if (!triggerFile && !!diagnostics.length === !!project.hasConfigFileDiagnostics)
183255
+ return;
183256
+ project.hasConfigFileDiagnostics = !!diagnostics.length;
183174
183257
  this.eventHandler(
183175
183258
  {
183176
183259
  eventName: ConfigFileDiagEvent,
183177
- data: { configFileName: project.getConfigFilePath(), diagnostics, triggerFile }
183260
+ data: { configFileName: project.getConfigFilePath(), diagnostics, triggerFile: triggerFile ?? project.getConfigFilePath() }
183178
183261
  }
183179
183262
  );
183180
183263
  }
@@ -183964,7 +184047,7 @@ Dynamic files must always be opened with service's current directory or service
183964
184047
  project = this.createLoadAndUpdateConfiguredProject(configFileName, `Creating possible configured project for ${info.fileName} to open`);
183965
184048
  defaultConfigProjectIsCreated = true;
183966
184049
  } else {
183967
- updateProjectIfDirty(project);
184050
+ updateConfiguredProjectWithoutConfigDiagIfDirty(project);
183968
184051
  }
183969
184052
  projectForConfigFileDiag = project.containsScriptInfo(info) ? project : void 0;
183970
184053
  retainProjects = project;
@@ -183973,7 +184056,7 @@ Dynamic files must always be opened with service's current directory or service
183973
184056
  project,
183974
184057
  info.path,
183975
184058
  (child) => {
183976
- updateProjectIfDirty(child);
184059
+ updateConfiguredProjectWithoutConfigDiagIfDirty(child);
183977
184060
  if (!isArray(retainProjects)) {
183978
184061
  retainProjects = [project, child];
183979
184062
  } else {
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "typescript",
3
3
  "author": "Microsoft Corp.",
4
4
  "homepage": "https://www.typescriptlang.org/",
5
- "version": "5.5.0-dev.20240405",
5
+ "version": "5.5.0-dev.20240409",
6
6
  "license": "Apache-2.0",
7
7
  "description": "TypeScript is a language for application scale JavaScript development",
8
8
  "keywords": [
@@ -111,5 +111,5 @@
111
111
  "node": "20.1.0",
112
112
  "npm": "8.19.4"
113
113
  },
114
- "gitHead": "4bfb4e6450f46dd2efe6ab9224ae21fe6461129b"
114
+ "gitHead": "7a4cbfa7ea8c6b7a09a84d04bd7e45c815e8e0d1"
115
115
  }