typescript 5.5.0-dev.20240408 → 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.
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.20240408`;
21
+ var version = `${versionMajorMinor}.0-dev.20240409`;
22
22
 
23
23
  // src/compiler/core.ts
24
24
  var emptyArray = [];
@@ -12934,6 +12934,9 @@ function isObjectLiteralOrClassExpressionMethodOrAccessor(node) {
12934
12934
  function isIdentifierTypePredicate(predicate) {
12935
12935
  return predicate && predicate.kind === 1 /* Identifier */;
12936
12936
  }
12937
+ function isThisTypePredicate(predicate) {
12938
+ return predicate && predicate.kind === 0 /* This */;
12939
+ }
12937
12940
  function forEachPropertyAssignment(objectLiteral, key, callback, key2) {
12938
12941
  return forEach(objectLiteral == null ? void 0 : objectLiteral.properties, (property) => {
12939
12942
  if (!isPropertyAssignment(property))
@@ -48119,7 +48122,7 @@ function createTypeChecker(host) {
48119
48122
  typeToTypeNode: (type, enclosingDeclaration, flags, tracker) => withContext(enclosingDeclaration, flags, tracker, (context) => typeToTypeNodeHelper(type, context)),
48120
48123
  typePredicateToTypePredicateNode: (typePredicate, enclosingDeclaration, flags, tracker) => withContext(enclosingDeclaration, flags, tracker, (context) => typePredicateToTypePredicateNodeHelper(typePredicate, context)),
48121
48124
  expressionOrTypeToTypeNode: (expr, type, addUndefined, enclosingDeclaration, flags, tracker) => withContext(enclosingDeclaration, flags, tracker, (context) => expressionOrTypeToTypeNode(context, expr, type, addUndefined)),
48122
- 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)),
48123
48126
  serializeReturnTypeForSignature: (signature, enclosingDeclaration, flags, tracker) => withContext(enclosingDeclaration, flags, tracker, (context) => serializeReturnTypeForSignature(context, signature)),
48124
48127
  indexInfoToIndexSignatureDeclaration: (indexInfo, enclosingDeclaration, flags, tracker) => withContext(enclosingDeclaration, flags, tracker, (context) => indexInfoToIndexSignatureDeclarationHelper(
48125
48128
  indexInfo,
@@ -48142,6 +48145,18 @@ function createTypeChecker(host) {
48142
48145
  symbolTableToDeclarationStatements: (symbolTable, enclosingDeclaration, flags, tracker) => withContext(enclosingDeclaration, flags, tracker, (context) => symbolTableToDeclarationStatements(symbolTable, context)),
48143
48146
  symbolToNode: (symbol, meaning, enclosingDeclaration, flags, tracker) => withContext(enclosingDeclaration, flags, tracker, (context) => symbolToNode(symbol, context, meaning))
48144
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
+ }
48145
48160
  function expressionOrTypeToTypeNode(context, expr, type, addUndefined) {
48146
48161
  if (expr) {
48147
48162
  const typeNode = isAssertionExpression(expr) ? expr.type : isJSDocTypeAssertion(expr) ? getJSDocTypeAssertionType(expr) : void 0;
@@ -48206,6 +48221,7 @@ function createTypeChecker(host) {
48206
48221
  const moduleResolverHost = (tracker == null ? void 0 : tracker.trackSymbol) ? tracker.moduleResolverHost : flags & 134217728 /* DoNotIncludeSymbolChain */ ? createBasicNodeBuilderModuleSpecifierResolutionHost(host) : void 0;
48207
48222
  const context = {
48208
48223
  enclosingDeclaration,
48224
+ enclosingFile: enclosingDeclaration && getSourceFileOfNode(enclosingDeclaration),
48209
48225
  flags: flags || 0 /* None */,
48210
48226
  tracker: void 0,
48211
48227
  encounteredError: false,
@@ -48738,7 +48754,7 @@ function createTypeChecker(host) {
48738
48754
  if (!nodeIsSynthesized(node) && getParseTreeNode(node) === node) {
48739
48755
  return node;
48740
48756
  }
48741
- return setTextRange(factory.cloneNode(visitEachChild(
48757
+ return setTextRange2(context, factory.cloneNode(visitEachChild(
48742
48758
  node,
48743
48759
  deepCloneOrReuseNode,
48744
48760
  /*context*/
@@ -49080,7 +49096,13 @@ function createTypeChecker(host) {
49080
49096
  context.reverseMappedStack || (context.reverseMappedStack = []);
49081
49097
  context.reverseMappedStack.push(propertySymbol);
49082
49098
  }
49083
- 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 */);
49084
49106
  if (propertyIsReverseMapped) {
49085
49107
  context.reverseMappedStack.pop();
49086
49108
  }
@@ -49469,8 +49491,7 @@ function createTypeChecker(host) {
49469
49491
  function symbolToParameterDeclaration(parameterSymbol, context, preserveModifierFlags) {
49470
49492
  const parameterDeclaration = getEffectiveParameterDeclaration(parameterSymbol);
49471
49493
  const parameterType = getTypeOfSymbol(parameterSymbol);
49472
- const addUndefined = parameterDeclaration && isRequiredInitializedParameter(parameterDeclaration);
49473
- const parameterTypeNode = serializeTypeForDeclaration(context, parameterType, parameterSymbol, context.enclosingDeclaration, addUndefined);
49494
+ const parameterTypeNode = serializeTypeForDeclaration(context, parameterDeclaration, parameterType, parameterSymbol);
49474
49495
  const modifiers = !(context.flags & 8192 /* OmitParameterModifiers */) && preserveModifierFlags && parameterDeclaration && canHaveModifiers(parameterDeclaration) ? map(getModifiers(parameterDeclaration), factory.cloneNode) : void 0;
49475
49496
  const isRest = parameterDeclaration && isRestParameter(parameterDeclaration) || getCheckFlags(parameterSymbol) & 32768 /* RestParameter */;
49476
49497
  const dotDotDotToken = isRest ? factory.createToken(26 /* DotDotDotToken */) : void 0;
@@ -50062,10 +50083,12 @@ function createTypeChecker(host) {
50062
50083
  }
50063
50084
  return enclosingDeclaration;
50064
50085
  }
50065
- function serializeTypeForDeclaration(context, type, symbol, enclosingDeclaration, addUndefined) {
50086
+ function serializeTypeForDeclaration(context, declaration, type, symbol) {
50066
50087
  var _a;
50088
+ const addUndefined = declaration && (isParameter(declaration) || isJSDocParameterTag(declaration)) && requiresAddingImplicitUndefined(declaration);
50089
+ const enclosingDeclaration = context.enclosingDeclaration;
50067
50090
  if (!isErrorType(type) && enclosingDeclaration) {
50068
- const declWithExistingAnnotation = getDeclarationWithTypeAnnotation(symbol, getEnclosingDeclarationIgnoringFakeScope(enclosingDeclaration));
50091
+ const declWithExistingAnnotation = declaration && getNonlocalEffectiveTypeAnnotationNode(declaration) ? declaration : getDeclarationWithTypeAnnotation(symbol, getEnclosingDeclarationIgnoringFakeScope(enclosingDeclaration));
50069
50092
  if (declWithExistingAnnotation && !isFunctionLikeDeclaration(declWithExistingAnnotation) && !isGetAccessorDeclaration(declWithExistingAnnotation)) {
50070
50093
  const existing = getNonlocalEffectiveTypeAnnotationNode(declWithExistingAnnotation);
50071
50094
  const result2 = tryReuseExistingTypeNode(context, existing, type, declWithExistingAnnotation, addUndefined);
@@ -50078,7 +50101,7 @@ function createTypeChecker(host) {
50078
50101
  if (type.flags & 8192 /* UniqueESSymbol */ && type.symbol === symbol && (!context.enclosingDeclaration || some(symbol.declarations, (d) => getSourceFileOfNode(d) === getSourceFileOfNode(context.enclosingDeclaration)))) {
50079
50102
  context.flags |= 1048576 /* AllowUniqueESSymbolType */;
50080
50103
  }
50081
- 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]);
50082
50105
  const expr = decl && isDeclarationWithPossibleInnerTypeNodeReuse(decl) ? getPossibleTypeNodeReuseExpression(decl) : void 0;
50083
50106
  const result = expressionOrTypeToTypeNode(context, expr, type, addUndefined);
50084
50107
  context.flags = oldFlags;
@@ -50192,7 +50215,7 @@ function createTypeChecker(host) {
50192
50215
  const type = getDeclaredTypeOfSymbol(sym);
50193
50216
  const name = sym.flags & 262144 /* TypeParameter */ ? typeParameterToName(type, context) : factory.cloneNode(node2);
50194
50217
  name.symbol = sym;
50195
- return setTextRange(setEmitFlags(setOriginalNode(name, node2), 16777216 /* NoAsciiEscaping */), node2);
50218
+ return setTextRange2(context, setEmitFlags(name, 16777216 /* NoAsciiEscaping */), node2);
50196
50219
  }
50197
50220
  const updated = visitEachChild(
50198
50221
  node2,
@@ -50201,7 +50224,7 @@ function createTypeChecker(host) {
50201
50224
  void 0
50202
50225
  );
50203
50226
  if (updated !== node2) {
50204
- setTextRange(updated, node2);
50227
+ setTextRange2(context, updated, node2);
50205
50228
  }
50206
50229
  return updated;
50207
50230
  }
@@ -50215,12 +50238,12 @@ function createTypeChecker(host) {
50215
50238
  if (hadError) {
50216
50239
  return void 0;
50217
50240
  }
50218
- return transformed === existing ? setTextRange(factory.cloneNode(existing), existing) : transformed;
50241
+ return transformed;
50219
50242
  function visitExistingNodeTreeSymbols(node) {
50220
50243
  const onExitNewScope = isNewScopeNode(node) ? onEnterNewScope(node) : void 0;
50221
50244
  const result = visitExistingNodeTreeSymbolsWorker(node);
50222
50245
  onExitNewScope == null ? void 0 : onExitNewScope();
50223
- return result;
50246
+ return result === node ? setTextRange2(context, factory.cloneNode(result), node) : result;
50224
50247
  }
50225
50248
  function onEnterNewScope(node) {
50226
50249
  const oldContex = context;
@@ -50356,7 +50379,7 @@ function createTypeChecker(host) {
50356
50379
  void 0
50357
50380
  );
50358
50381
  if (visited === node) {
50359
- visited = setTextRange(factory.cloneNode(node), node);
50382
+ visited = setTextRange2(context, factory.cloneNode(node), node);
50360
50383
  }
50361
50384
  visited.type = factory.createKeywordTypeNode(133 /* AnyKeyword */);
50362
50385
  if (isParameter(node)) {
@@ -50379,11 +50402,16 @@ function createTypeChecker(host) {
50379
50402
  /*context*/
50380
50403
  void 0
50381
50404
  );
50382
- const clone = setTextRange(visited === node ? factory.cloneNode(node) : visited, node);
50405
+ const clone = setTextRange2(context, visited === node ? factory.cloneNode(node) : visited, node);
50383
50406
  const flags = getEmitFlags(clone);
50384
50407
  setEmitFlags(clone, flags | (context.flags & 1024 /* MultilineObjectLiterals */ && isTypeLiteralNode(node) ? 0 : 1 /* SingleLine */));
50385
50408
  return clone;
50386
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
+ }
50387
50415
  if (isConditionalTypeNode(node)) {
50388
50416
  const checkType = visitNode(node.checkType, visitExistingNodeTreeSymbols, isTypeNode);
50389
50417
  const disposeScope = onEnterNewScope(node);
@@ -50762,7 +50790,8 @@ function createTypeChecker(host) {
50762
50790
  );
50763
50791
  context.tracker.trackSymbol(type.symbol, context.enclosingDeclaration, 111551 /* Value */);
50764
50792
  } else {
50765
- const statement = setTextRange(
50793
+ const statement = setTextRange2(
50794
+ context,
50766
50795
  factory.createVariableStatement(
50767
50796
  /*modifiers*/
50768
50797
  void 0,
@@ -50771,7 +50800,13 @@ function createTypeChecker(host) {
50771
50800
  name,
50772
50801
  /*exclamationToken*/
50773
50802
  void 0,
50774
- serializeTypeForDeclaration(context, type, symbol, enclosingDeclaration)
50803
+ serializeTypeForDeclaration(
50804
+ context,
50805
+ /*declaration*/
50806
+ void 0,
50807
+ type,
50808
+ symbol
50809
+ )
50775
50810
  )
50776
50811
  ], flags)
50777
50812
  ),
@@ -51044,7 +51079,7 @@ function createTypeChecker(host) {
51044
51079
  const signatures = getSignaturesOfType(type, 0 /* Call */);
51045
51080
  for (const sig of signatures) {
51046
51081
  const decl = signatureToSignatureDeclarationHelper(sig, 262 /* FunctionDeclaration */, context, { name: factory.createIdentifier(localName) });
51047
- addResult(setTextRange(decl, getSignatureTextRangeLocation(sig)), modifierFlags);
51082
+ addResult(setTextRange2(context, decl, getSignatureTextRangeLocation(sig)), modifierFlags);
51048
51083
  }
51049
51084
  if (!(symbol.flags & (512 /* ValueModule */ | 1024 /* NamespaceModule */) && !!symbol.exports && !!symbol.exports.size)) {
51050
51085
  const props = filter(getPropertiesOfType(type), isNamespaceMember);
@@ -51222,7 +51257,8 @@ function createTypeChecker(host) {
51222
51257
  const indexSignatures = serializeIndexSignatures(classType, baseTypes[0]);
51223
51258
  context.enclosingDeclaration = oldEnclosing;
51224
51259
  addResult(
51225
- setTextRange(
51260
+ setTextRange2(
51261
+ context,
51226
51262
  factory.createClassDeclaration(
51227
51263
  /*modifiers*/
51228
51264
  void 0,
@@ -51582,7 +51618,13 @@ function createTypeChecker(host) {
51582
51618
  varName,
51583
51619
  /*exclamationToken*/
51584
51620
  void 0,
51585
- serializeTypeForDeclaration(context, typeToSerialize, symbol, enclosingDeclaration)
51621
+ serializeTypeForDeclaration(
51622
+ context,
51623
+ /*declaration*/
51624
+ void 0,
51625
+ typeToSerialize,
51626
+ symbol
51627
+ )
51586
51628
  )
51587
51629
  ], flags)
51588
51630
  );
@@ -51654,7 +51696,8 @@ function createTypeChecker(host) {
51654
51696
  });
51655
51697
  Debug.assert(!!setter);
51656
51698
  const paramSymbol = isFunctionLikeDeclaration(setter) ? getSignatureFromDeclaration(setter).parameters[0] : void 0;
51657
- result.push(setTextRange(
51699
+ result.push(setTextRange2(
51700
+ context,
51658
51701
  factory.createSetAccessorDeclaration(
51659
51702
  factory.createModifiersFromModifierFlags(flag),
51660
51703
  name,
@@ -51666,7 +51709,13 @@ function createTypeChecker(host) {
51666
51709
  paramSymbol ? parameterToParameterDeclarationName(paramSymbol, getEffectiveParameterDeclaration(paramSymbol), context) : "value",
51667
51710
  /*questionToken*/
51668
51711
  void 0,
51669
- 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
+ )
51670
51719
  )],
51671
51720
  /*body*/
51672
51721
  void 0
@@ -51676,12 +51725,19 @@ function createTypeChecker(host) {
51676
51725
  }
51677
51726
  if (p.flags & 32768 /* GetAccessor */) {
51678
51727
  const isPrivate2 = modifierFlags & 2 /* Private */;
51679
- result.push(setTextRange(
51728
+ result.push(setTextRange2(
51729
+ context,
51680
51730
  factory.createGetAccessorDeclaration(
51681
51731
  factory.createModifiersFromModifierFlags(flag),
51682
51732
  name,
51683
51733
  [],
51684
- 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
+ ),
51685
51741
  /*body*/
51686
51742
  void 0
51687
51743
  ),
@@ -51690,12 +51746,19 @@ function createTypeChecker(host) {
51690
51746
  }
51691
51747
  return result;
51692
51748
  } else if (p.flags & (4 /* Property */ | 3 /* Variable */ | 98304 /* Accessor */)) {
51693
- return setTextRange(
51749
+ return setTextRange2(
51750
+ context,
51694
51751
  createProperty2(
51695
51752
  factory.createModifiersFromModifierFlags((isReadonlySymbol(p) ? 8 /* Readonly */ : 0) | flag),
51696
51753
  name,
51697
51754
  p.flags & 16777216 /* Optional */ ? factory.createToken(58 /* QuestionToken */) : void 0,
51698
- 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
+ ),
51699
51762
  // TODO: https://github.com/microsoft/TypeScript/pull/32372#discussion_r328386357
51700
51763
  // interface members can't have initializers, however class members _can_
51701
51764
  /*initializer*/
@@ -51708,7 +51771,8 @@ function createTypeChecker(host) {
51708
51771
  const type = getTypeOfSymbol(p);
51709
51772
  const signatures = getSignaturesOfType(type, 0 /* Call */);
51710
51773
  if (flag & 2 /* Private */) {
51711
- return setTextRange(
51774
+ return setTextRange2(
51775
+ context,
51712
51776
  createProperty2(
51713
51777
  factory.createModifiersFromModifierFlags((isReadonlySymbol(p) ? 8 /* Readonly */ : 0) | flag),
51714
51778
  name,
@@ -51734,7 +51798,7 @@ function createTypeChecker(host) {
51734
51798
  }
51735
51799
  );
51736
51800
  const location = sig.declaration && isPrototypePropertyAssignment(sig.declaration.parent) ? sig.declaration.parent : sig.declaration;
51737
- results2.push(setTextRange(decl, location));
51801
+ results2.push(setTextRange2(context, decl, location));
51738
51802
  }
51739
51803
  return results2;
51740
51804
  }
@@ -51790,7 +51854,8 @@ function createTypeChecker(host) {
51790
51854
  }
51791
51855
  }
51792
51856
  if (privateProtected) {
51793
- return [setTextRange(
51857
+ return [setTextRange2(
51858
+ context,
51794
51859
  factory.createConstructorDeclaration(
51795
51860
  factory.createModifiersFromModifierFlags(privateProtected),
51796
51861
  /*parameters*/
@@ -51805,7 +51870,7 @@ function createTypeChecker(host) {
51805
51870
  const results2 = [];
51806
51871
  for (const sig of signatures) {
51807
51872
  const decl = signatureToSignatureDeclarationHelper(sig, outputKind, context);
51808
- results2.push(setTextRange(decl, sig.declaration));
51873
+ results2.push(setTextRange2(context, decl, sig.declaration));
51809
51874
  }
51810
51875
  return results2;
51811
51876
  }
@@ -55488,12 +55553,10 @@ function createTypeChecker(host) {
55488
55553
  const target = type.target ?? type;
55489
55554
  const typeVariable = getHomomorphicTypeVariable(target);
55490
55555
  if (typeVariable && !target.declaration.nameType) {
55491
- const constraint = getConstraintTypeFromMappedType(type);
55492
- if (constraint.flags & 4194304 /* Index */) {
55493
- const baseConstraint = getBaseConstraintOfType(constraint.type);
55494
- if (baseConstraint && everyType(baseConstraint, (t) => isArrayOrTupleType(t) || isArrayOrTupleOrIntersection(t))) {
55495
- return instantiateType(target, prependTypeMapping(typeVariable, baseConstraint, type.mapper));
55496
- }
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));
55497
55560
  }
55498
55561
  }
55499
55562
  return type;
@@ -60923,7 +60986,7 @@ function createTypeChecker(host) {
60923
60986
  const sourceTypePredicate = getTypePredicateOfSignature(source);
60924
60987
  if (sourceTypePredicate) {
60925
60988
  result &= compareTypePredicateRelatedTo(sourceTypePredicate, targetTypePredicate, reportErrors2, errorReporter, compareTypes);
60926
- } else if (isIdentifierTypePredicate(targetTypePredicate)) {
60989
+ } else if (isIdentifierTypePredicate(targetTypePredicate) || isThisTypePredicate(targetTypePredicate)) {
60927
60990
  if (reportErrors2) {
60928
60991
  errorReporter(Diagnostics.Signature_0_must_be_a_type_predicate, signatureToString(source));
60929
60992
  }
@@ -83307,9 +83370,10 @@ function createTypeChecker(host) {
83307
83370
  return false;
83308
83371
  }
83309
83372
  function declaredParameterTypeContainsUndefined(parameter) {
83310
- if (!parameter.type)
83373
+ const typeNode = getNonlocalEffectiveTypeAnnotationNode(parameter);
83374
+ if (!typeNode)
83311
83375
  return false;
83312
- const type = getTypeFromTypeNode(parameter.type);
83376
+ const type = getTypeFromTypeNode(typeNode);
83313
83377
  return containsUndefinedType(type);
83314
83378
  }
83315
83379
  function requiresAddingImplicitUndefined(parameter) {
@@ -83319,7 +83383,7 @@ function createTypeChecker(host) {
83319
83383
  return !!strictNullChecks && !isOptionalParameter(parameter) && !isJSDocParameterTag(parameter) && !!parameter.initializer && !hasSyntacticModifier(parameter, 31 /* ParameterPropertyModifier */);
83320
83384
  }
83321
83385
  function isOptionalUninitializedParameterProperty(parameter) {
83322
- return strictNullChecks && isOptionalParameter(parameter) && !parameter.initializer && hasSyntacticModifier(parameter, 31 /* ParameterPropertyModifier */);
83386
+ return strictNullChecks && isOptionalParameter(parameter) && (isJSDocParameterTag(parameter) || !parameter.initializer) && hasSyntacticModifier(parameter, 31 /* ParameterPropertyModifier */);
83323
83387
  }
83324
83388
  function isExpandoFunctionDeclaration(node) {
83325
83389
  const declaration = getParseTreeNode(node, isFunctionDeclaration);
@@ -83469,14 +83533,14 @@ function createTypeChecker(host) {
83469
83533
  return 11 /* ObjectType */;
83470
83534
  }
83471
83535
  }
83472
- function createTypeOfDeclaration(declarationIn, enclosingDeclaration, flags, tracker, addUndefined) {
83536
+ function createTypeOfDeclaration(declarationIn, enclosingDeclaration, flags, tracker) {
83473
83537
  const declaration = getParseTreeNode(declarationIn, isVariableLikeOrAccessor);
83474
83538
  if (!declaration) {
83475
83539
  return factory.createToken(133 /* AnyKeyword */);
83476
83540
  }
83477
83541
  const symbol = getSymbolOfDeclaration(declaration);
83478
83542
  const type = symbol && !(symbol.flags & (2048 /* TypeLiteral */ | 131072 /* Signature */)) ? getWidenedLiteralType(getTypeOfSymbol(symbol)) : errorType;
83479
- return nodeBuilder.serializeTypeForDeclaration(type, symbol, addUndefined, enclosingDeclaration, flags | 1024 /* MultilineObjectLiterals */, tracker);
83543
+ return nodeBuilder.serializeTypeForDeclaration(declaration, type, symbol, enclosingDeclaration, flags | 1024 /* MultilineObjectLiterals */, tracker);
83480
83544
  }
83481
83545
  function isDeclarationWithPossibleInnerTypeNodeReuse(declaration) {
83482
83546
  return isFunctionLike(declaration) || isExportAssignment(declaration) || isVariableLike(declaration);
@@ -109129,7 +109193,7 @@ function transformDeclarations(context) {
109129
109193
  case 172 /* PropertyDeclaration */:
109130
109194
  case 208 /* BindingElement */:
109131
109195
  case 260 /* VariableDeclaration */:
109132
- typeNode = resolver.createTypeOfDeclaration(node, enclosingDeclaration, declarationEmitNodeBuilderFlags, symbolTracker, shouldAddImplicitUndefined);
109196
+ typeNode = resolver.createTypeOfDeclaration(node, enclosingDeclaration, declarationEmitNodeBuilderFlags, symbolTracker);
109133
109197
  break;
109134
109198
  case 262 /* FunctionDeclaration */:
109135
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;
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.20240408`;
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";
@@ -52891,7 +52891,7 @@ function createTypeChecker(host) {
52891
52891
  typeToTypeNode: (type, enclosingDeclaration, flags, tracker) => withContext(enclosingDeclaration, flags, tracker, (context) => typeToTypeNodeHelper(type, context)),
52892
52892
  typePredicateToTypePredicateNode: (typePredicate, enclosingDeclaration, flags, tracker) => withContext(enclosingDeclaration, flags, tracker, (context) => typePredicateToTypePredicateNodeHelper(typePredicate, context)),
52893
52893
  expressionOrTypeToTypeNode: (expr, type, addUndefined, enclosingDeclaration, flags, tracker) => withContext(enclosingDeclaration, flags, tracker, (context) => expressionOrTypeToTypeNode(context, expr, type, addUndefined)),
52894
- 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)),
52895
52895
  serializeReturnTypeForSignature: (signature, enclosingDeclaration, flags, tracker) => withContext(enclosingDeclaration, flags, tracker, (context) => serializeReturnTypeForSignature(context, signature)),
52896
52896
  indexInfoToIndexSignatureDeclaration: (indexInfo, enclosingDeclaration, flags, tracker) => withContext(enclosingDeclaration, flags, tracker, (context) => indexInfoToIndexSignatureDeclarationHelper(
52897
52897
  indexInfo,
@@ -52914,6 +52914,18 @@ function createTypeChecker(host) {
52914
52914
  symbolTableToDeclarationStatements: (symbolTable, enclosingDeclaration, flags, tracker) => withContext(enclosingDeclaration, flags, tracker, (context) => symbolTableToDeclarationStatements(symbolTable, context)),
52915
52915
  symbolToNode: (symbol, meaning, enclosingDeclaration, flags, tracker) => withContext(enclosingDeclaration, flags, tracker, (context) => symbolToNode(symbol, context, meaning))
52916
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
+ }
52917
52929
  function expressionOrTypeToTypeNode(context, expr, type, addUndefined) {
52918
52930
  if (expr) {
52919
52931
  const typeNode = isAssertionExpression(expr) ? expr.type : isJSDocTypeAssertion(expr) ? getJSDocTypeAssertionType(expr) : void 0;
@@ -52978,6 +52990,7 @@ function createTypeChecker(host) {
52978
52990
  const moduleResolverHost = (tracker == null ? void 0 : tracker.trackSymbol) ? tracker.moduleResolverHost : flags & 134217728 /* DoNotIncludeSymbolChain */ ? createBasicNodeBuilderModuleSpecifierResolutionHost(host) : void 0;
52979
52991
  const context = {
52980
52992
  enclosingDeclaration,
52993
+ enclosingFile: enclosingDeclaration && getSourceFileOfNode(enclosingDeclaration),
52981
52994
  flags: flags || 0 /* None */,
52982
52995
  tracker: void 0,
52983
52996
  encounteredError: false,
@@ -53510,7 +53523,7 @@ function createTypeChecker(host) {
53510
53523
  if (!nodeIsSynthesized(node) && getParseTreeNode(node) === node) {
53511
53524
  return node;
53512
53525
  }
53513
- return setTextRange(factory.cloneNode(visitEachChild(
53526
+ return setTextRange2(context, factory.cloneNode(visitEachChild(
53514
53527
  node,
53515
53528
  deepCloneOrReuseNode,
53516
53529
  /*context*/
@@ -53852,7 +53865,13 @@ function createTypeChecker(host) {
53852
53865
  context.reverseMappedStack || (context.reverseMappedStack = []);
53853
53866
  context.reverseMappedStack.push(propertySymbol);
53854
53867
  }
53855
- 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 */);
53856
53875
  if (propertyIsReverseMapped) {
53857
53876
  context.reverseMappedStack.pop();
53858
53877
  }
@@ -54241,8 +54260,7 @@ function createTypeChecker(host) {
54241
54260
  function symbolToParameterDeclaration(parameterSymbol, context, preserveModifierFlags) {
54242
54261
  const parameterDeclaration = getEffectiveParameterDeclaration(parameterSymbol);
54243
54262
  const parameterType = getTypeOfSymbol(parameterSymbol);
54244
- const addUndefined = parameterDeclaration && isRequiredInitializedParameter(parameterDeclaration);
54245
- const parameterTypeNode = serializeTypeForDeclaration(context, parameterType, parameterSymbol, context.enclosingDeclaration, addUndefined);
54263
+ const parameterTypeNode = serializeTypeForDeclaration(context, parameterDeclaration, parameterType, parameterSymbol);
54246
54264
  const modifiers = !(context.flags & 8192 /* OmitParameterModifiers */) && preserveModifierFlags && parameterDeclaration && canHaveModifiers(parameterDeclaration) ? map(getModifiers(parameterDeclaration), factory.cloneNode) : void 0;
54247
54265
  const isRest = parameterDeclaration && isRestParameter(parameterDeclaration) || getCheckFlags(parameterSymbol) & 32768 /* RestParameter */;
54248
54266
  const dotDotDotToken = isRest ? factory.createToken(26 /* DotDotDotToken */) : void 0;
@@ -54834,10 +54852,12 @@ function createTypeChecker(host) {
54834
54852
  }
54835
54853
  return enclosingDeclaration;
54836
54854
  }
54837
- function serializeTypeForDeclaration(context, type, symbol, enclosingDeclaration, addUndefined) {
54855
+ function serializeTypeForDeclaration(context, declaration, type, symbol) {
54838
54856
  var _a;
54857
+ const addUndefined = declaration && (isParameter(declaration) || isJSDocParameterTag(declaration)) && requiresAddingImplicitUndefined(declaration);
54858
+ const enclosingDeclaration = context.enclosingDeclaration;
54839
54859
  if (!isErrorType(type) && enclosingDeclaration) {
54840
- const declWithExistingAnnotation = getDeclarationWithTypeAnnotation(symbol, getEnclosingDeclarationIgnoringFakeScope(enclosingDeclaration));
54860
+ const declWithExistingAnnotation = declaration && getNonlocalEffectiveTypeAnnotationNode(declaration) ? declaration : getDeclarationWithTypeAnnotation(symbol, getEnclosingDeclarationIgnoringFakeScope(enclosingDeclaration));
54841
54861
  if (declWithExistingAnnotation && !isFunctionLikeDeclaration(declWithExistingAnnotation) && !isGetAccessorDeclaration(declWithExistingAnnotation)) {
54842
54862
  const existing = getNonlocalEffectiveTypeAnnotationNode(declWithExistingAnnotation);
54843
54863
  const result2 = tryReuseExistingTypeNode(context, existing, type, declWithExistingAnnotation, addUndefined);
@@ -54850,7 +54870,7 @@ function createTypeChecker(host) {
54850
54870
  if (type.flags & 8192 /* UniqueESSymbol */ && type.symbol === symbol && (!context.enclosingDeclaration || some(symbol.declarations, (d) => getSourceFileOfNode(d) === getSourceFileOfNode(context.enclosingDeclaration)))) {
54851
54871
  context.flags |= 1048576 /* AllowUniqueESSymbolType */;
54852
54872
  }
54853
- 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]);
54854
54874
  const expr = decl && isDeclarationWithPossibleInnerTypeNodeReuse(decl) ? getPossibleTypeNodeReuseExpression(decl) : void 0;
54855
54875
  const result = expressionOrTypeToTypeNode(context, expr, type, addUndefined);
54856
54876
  context.flags = oldFlags;
@@ -54964,7 +54984,7 @@ function createTypeChecker(host) {
54964
54984
  const type = getDeclaredTypeOfSymbol(sym);
54965
54985
  const name = sym.flags & 262144 /* TypeParameter */ ? typeParameterToName(type, context) : factory.cloneNode(node2);
54966
54986
  name.symbol = sym;
54967
- return setTextRange(setEmitFlags(setOriginalNode(name, node2), 16777216 /* NoAsciiEscaping */), node2);
54987
+ return setTextRange2(context, setEmitFlags(name, 16777216 /* NoAsciiEscaping */), node2);
54968
54988
  }
54969
54989
  const updated = visitEachChild(
54970
54990
  node2,
@@ -54973,7 +54993,7 @@ function createTypeChecker(host) {
54973
54993
  void 0
54974
54994
  );
54975
54995
  if (updated !== node2) {
54976
- setTextRange(updated, node2);
54996
+ setTextRange2(context, updated, node2);
54977
54997
  }
54978
54998
  return updated;
54979
54999
  }
@@ -54987,12 +55007,12 @@ function createTypeChecker(host) {
54987
55007
  if (hadError) {
54988
55008
  return void 0;
54989
55009
  }
54990
- return transformed === existing ? setTextRange(factory.cloneNode(existing), existing) : transformed;
55010
+ return transformed;
54991
55011
  function visitExistingNodeTreeSymbols(node) {
54992
55012
  const onExitNewScope = isNewScopeNode(node) ? onEnterNewScope(node) : void 0;
54993
55013
  const result = visitExistingNodeTreeSymbolsWorker(node);
54994
55014
  onExitNewScope == null ? void 0 : onExitNewScope();
54995
- return result;
55015
+ return result === node ? setTextRange2(context, factory.cloneNode(result), node) : result;
54996
55016
  }
54997
55017
  function onEnterNewScope(node) {
54998
55018
  const oldContex = context;
@@ -55128,7 +55148,7 @@ function createTypeChecker(host) {
55128
55148
  void 0
55129
55149
  );
55130
55150
  if (visited === node) {
55131
- visited = setTextRange(factory.cloneNode(node), node);
55151
+ visited = setTextRange2(context, factory.cloneNode(node), node);
55132
55152
  }
55133
55153
  visited.type = factory.createKeywordTypeNode(133 /* AnyKeyword */);
55134
55154
  if (isParameter(node)) {
@@ -55151,11 +55171,16 @@ function createTypeChecker(host) {
55151
55171
  /*context*/
55152
55172
  void 0
55153
55173
  );
55154
- const clone2 = setTextRange(visited === node ? factory.cloneNode(node) : visited, node);
55174
+ const clone2 = setTextRange2(context, visited === node ? factory.cloneNode(node) : visited, node);
55155
55175
  const flags = getEmitFlags(clone2);
55156
55176
  setEmitFlags(clone2, flags | (context.flags & 1024 /* MultilineObjectLiterals */ && isTypeLiteralNode(node) ? 0 : 1 /* SingleLine */));
55157
55177
  return clone2;
55158
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
+ }
55159
55184
  if (isConditionalTypeNode(node)) {
55160
55185
  const checkType = visitNode(node.checkType, visitExistingNodeTreeSymbols, isTypeNode);
55161
55186
  const disposeScope = onEnterNewScope(node);
@@ -55534,7 +55559,8 @@ function createTypeChecker(host) {
55534
55559
  );
55535
55560
  context.tracker.trackSymbol(type.symbol, context.enclosingDeclaration, 111551 /* Value */);
55536
55561
  } else {
55537
- const statement = setTextRange(
55562
+ const statement = setTextRange2(
55563
+ context,
55538
55564
  factory.createVariableStatement(
55539
55565
  /*modifiers*/
55540
55566
  void 0,
@@ -55543,7 +55569,13 @@ function createTypeChecker(host) {
55543
55569
  name,
55544
55570
  /*exclamationToken*/
55545
55571
  void 0,
55546
- serializeTypeForDeclaration(context, type, symbol, enclosingDeclaration)
55572
+ serializeTypeForDeclaration(
55573
+ context,
55574
+ /*declaration*/
55575
+ void 0,
55576
+ type,
55577
+ symbol
55578
+ )
55547
55579
  )
55548
55580
  ], flags)
55549
55581
  ),
@@ -55816,7 +55848,7 @@ function createTypeChecker(host) {
55816
55848
  const signatures = getSignaturesOfType(type, 0 /* Call */);
55817
55849
  for (const sig of signatures) {
55818
55850
  const decl = signatureToSignatureDeclarationHelper(sig, 262 /* FunctionDeclaration */, context, { name: factory.createIdentifier(localName) });
55819
- addResult(setTextRange(decl, getSignatureTextRangeLocation(sig)), modifierFlags);
55851
+ addResult(setTextRange2(context, decl, getSignatureTextRangeLocation(sig)), modifierFlags);
55820
55852
  }
55821
55853
  if (!(symbol.flags & (512 /* ValueModule */ | 1024 /* NamespaceModule */) && !!symbol.exports && !!symbol.exports.size)) {
55822
55854
  const props = filter(getPropertiesOfType(type), isNamespaceMember);
@@ -55994,7 +56026,8 @@ function createTypeChecker(host) {
55994
56026
  const indexSignatures = serializeIndexSignatures(classType, baseTypes[0]);
55995
56027
  context.enclosingDeclaration = oldEnclosing;
55996
56028
  addResult(
55997
- setTextRange(
56029
+ setTextRange2(
56030
+ context,
55998
56031
  factory.createClassDeclaration(
55999
56032
  /*modifiers*/
56000
56033
  void 0,
@@ -56354,7 +56387,13 @@ function createTypeChecker(host) {
56354
56387
  varName,
56355
56388
  /*exclamationToken*/
56356
56389
  void 0,
56357
- serializeTypeForDeclaration(context, typeToSerialize, symbol, enclosingDeclaration)
56390
+ serializeTypeForDeclaration(
56391
+ context,
56392
+ /*declaration*/
56393
+ void 0,
56394
+ typeToSerialize,
56395
+ symbol
56396
+ )
56358
56397
  )
56359
56398
  ], flags)
56360
56399
  );
@@ -56426,7 +56465,8 @@ function createTypeChecker(host) {
56426
56465
  });
56427
56466
  Debug.assert(!!setter);
56428
56467
  const paramSymbol = isFunctionLikeDeclaration(setter) ? getSignatureFromDeclaration(setter).parameters[0] : void 0;
56429
- result.push(setTextRange(
56468
+ result.push(setTextRange2(
56469
+ context,
56430
56470
  factory.createSetAccessorDeclaration(
56431
56471
  factory.createModifiersFromModifierFlags(flag),
56432
56472
  name,
@@ -56438,7 +56478,13 @@ function createTypeChecker(host) {
56438
56478
  paramSymbol ? parameterToParameterDeclarationName(paramSymbol, getEffectiveParameterDeclaration(paramSymbol), context) : "value",
56439
56479
  /*questionToken*/
56440
56480
  void 0,
56441
- 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
+ )
56442
56488
  )],
56443
56489
  /*body*/
56444
56490
  void 0
@@ -56448,12 +56494,19 @@ function createTypeChecker(host) {
56448
56494
  }
56449
56495
  if (p.flags & 32768 /* GetAccessor */) {
56450
56496
  const isPrivate2 = modifierFlags & 2 /* Private */;
56451
- result.push(setTextRange(
56497
+ result.push(setTextRange2(
56498
+ context,
56452
56499
  factory.createGetAccessorDeclaration(
56453
56500
  factory.createModifiersFromModifierFlags(flag),
56454
56501
  name,
56455
56502
  [],
56456
- 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
+ ),
56457
56510
  /*body*/
56458
56511
  void 0
56459
56512
  ),
@@ -56462,12 +56515,19 @@ function createTypeChecker(host) {
56462
56515
  }
56463
56516
  return result;
56464
56517
  } else if (p.flags & (4 /* Property */ | 3 /* Variable */ | 98304 /* Accessor */)) {
56465
- return setTextRange(
56518
+ return setTextRange2(
56519
+ context,
56466
56520
  createProperty2(
56467
56521
  factory.createModifiersFromModifierFlags((isReadonlySymbol(p) ? 8 /* Readonly */ : 0) | flag),
56468
56522
  name,
56469
56523
  p.flags & 16777216 /* Optional */ ? factory.createToken(58 /* QuestionToken */) : void 0,
56470
- 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
+ ),
56471
56531
  // TODO: https://github.com/microsoft/TypeScript/pull/32372#discussion_r328386357
56472
56532
  // interface members can't have initializers, however class members _can_
56473
56533
  /*initializer*/
@@ -56480,7 +56540,8 @@ function createTypeChecker(host) {
56480
56540
  const type = getTypeOfSymbol(p);
56481
56541
  const signatures = getSignaturesOfType(type, 0 /* Call */);
56482
56542
  if (flag & 2 /* Private */) {
56483
- return setTextRange(
56543
+ return setTextRange2(
56544
+ context,
56484
56545
  createProperty2(
56485
56546
  factory.createModifiersFromModifierFlags((isReadonlySymbol(p) ? 8 /* Readonly */ : 0) | flag),
56486
56547
  name,
@@ -56506,7 +56567,7 @@ function createTypeChecker(host) {
56506
56567
  }
56507
56568
  );
56508
56569
  const location = sig.declaration && isPrototypePropertyAssignment(sig.declaration.parent) ? sig.declaration.parent : sig.declaration;
56509
- results2.push(setTextRange(decl, location));
56570
+ results2.push(setTextRange2(context, decl, location));
56510
56571
  }
56511
56572
  return results2;
56512
56573
  }
@@ -56562,7 +56623,8 @@ function createTypeChecker(host) {
56562
56623
  }
56563
56624
  }
56564
56625
  if (privateProtected) {
56565
- return [setTextRange(
56626
+ return [setTextRange2(
56627
+ context,
56566
56628
  factory.createConstructorDeclaration(
56567
56629
  factory.createModifiersFromModifierFlags(privateProtected),
56568
56630
  /*parameters*/
@@ -56577,7 +56639,7 @@ function createTypeChecker(host) {
56577
56639
  const results2 = [];
56578
56640
  for (const sig of signatures) {
56579
56641
  const decl = signatureToSignatureDeclarationHelper(sig, outputKind, context);
56580
- results2.push(setTextRange(decl, sig.declaration));
56642
+ results2.push(setTextRange2(context, decl, sig.declaration));
56581
56643
  }
56582
56644
  return results2;
56583
56645
  }
@@ -60260,12 +60322,10 @@ function createTypeChecker(host) {
60260
60322
  const target = type.target ?? type;
60261
60323
  const typeVariable = getHomomorphicTypeVariable(target);
60262
60324
  if (typeVariable && !target.declaration.nameType) {
60263
- const constraint = getConstraintTypeFromMappedType(type);
60264
- if (constraint.flags & 4194304 /* Index */) {
60265
- const baseConstraint = getBaseConstraintOfType(constraint.type);
60266
- if (baseConstraint && everyType(baseConstraint, (t) => isArrayOrTupleType(t) || isArrayOrTupleOrIntersection(t))) {
60267
- return instantiateType(target, prependTypeMapping(typeVariable, baseConstraint, type.mapper));
60268
- }
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));
60269
60329
  }
60270
60330
  }
60271
60331
  return type;
@@ -65695,7 +65755,7 @@ function createTypeChecker(host) {
65695
65755
  const sourceTypePredicate = getTypePredicateOfSignature(source);
65696
65756
  if (sourceTypePredicate) {
65697
65757
  result &= compareTypePredicateRelatedTo(sourceTypePredicate, targetTypePredicate, reportErrors2, errorReporter, compareTypes);
65698
- } else if (isIdentifierTypePredicate(targetTypePredicate)) {
65758
+ } else if (isIdentifierTypePredicate(targetTypePredicate) || isThisTypePredicate(targetTypePredicate)) {
65699
65759
  if (reportErrors2) {
65700
65760
  errorReporter(Diagnostics.Signature_0_must_be_a_type_predicate, signatureToString(source));
65701
65761
  }
@@ -88079,9 +88139,10 @@ function createTypeChecker(host) {
88079
88139
  return false;
88080
88140
  }
88081
88141
  function declaredParameterTypeContainsUndefined(parameter) {
88082
- if (!parameter.type)
88142
+ const typeNode = getNonlocalEffectiveTypeAnnotationNode(parameter);
88143
+ if (!typeNode)
88083
88144
  return false;
88084
- const type = getTypeFromTypeNode(parameter.type);
88145
+ const type = getTypeFromTypeNode(typeNode);
88085
88146
  return containsUndefinedType(type);
88086
88147
  }
88087
88148
  function requiresAddingImplicitUndefined(parameter) {
@@ -88091,7 +88152,7 @@ function createTypeChecker(host) {
88091
88152
  return !!strictNullChecks && !isOptionalParameter(parameter) && !isJSDocParameterTag(parameter) && !!parameter.initializer && !hasSyntacticModifier(parameter, 31 /* ParameterPropertyModifier */);
88092
88153
  }
88093
88154
  function isOptionalUninitializedParameterProperty(parameter) {
88094
- return strictNullChecks && isOptionalParameter(parameter) && !parameter.initializer && hasSyntacticModifier(parameter, 31 /* ParameterPropertyModifier */);
88155
+ return strictNullChecks && isOptionalParameter(parameter) && (isJSDocParameterTag(parameter) || !parameter.initializer) && hasSyntacticModifier(parameter, 31 /* ParameterPropertyModifier */);
88095
88156
  }
88096
88157
  function isExpandoFunctionDeclaration(node) {
88097
88158
  const declaration = getParseTreeNode(node, isFunctionDeclaration);
@@ -88241,14 +88302,14 @@ function createTypeChecker(host) {
88241
88302
  return 11 /* ObjectType */;
88242
88303
  }
88243
88304
  }
88244
- function createTypeOfDeclaration(declarationIn, enclosingDeclaration, flags, tracker, addUndefined) {
88305
+ function createTypeOfDeclaration(declarationIn, enclosingDeclaration, flags, tracker) {
88245
88306
  const declaration = getParseTreeNode(declarationIn, isVariableLikeOrAccessor);
88246
88307
  if (!declaration) {
88247
88308
  return factory.createToken(133 /* AnyKeyword */);
88248
88309
  }
88249
88310
  const symbol = getSymbolOfDeclaration(declaration);
88250
88311
  const type = symbol && !(symbol.flags & (2048 /* TypeLiteral */ | 131072 /* Signature */)) ? getWidenedLiteralType(getTypeOfSymbol(symbol)) : errorType;
88251
- return nodeBuilder.serializeTypeForDeclaration(type, symbol, addUndefined, enclosingDeclaration, flags | 1024 /* MultilineObjectLiterals */, tracker);
88312
+ return nodeBuilder.serializeTypeForDeclaration(declaration, type, symbol, enclosingDeclaration, flags | 1024 /* MultilineObjectLiterals */, tracker);
88252
88313
  }
88253
88314
  function isDeclarationWithPossibleInnerTypeNodeReuse(declaration) {
88254
88315
  return isFunctionLike(declaration) || isExportAssignment(declaration) || isVariableLike(declaration);
@@ -114088,7 +114149,7 @@ function transformDeclarations(context) {
114088
114149
  case 172 /* PropertyDeclaration */:
114089
114150
  case 208 /* BindingElement */:
114090
114151
  case 260 /* VariableDeclaration */:
114091
- typeNode = resolver.createTypeOfDeclaration(node, enclosingDeclaration, declarationEmitNodeBuilderFlags, symbolTracker, shouldAddImplicitUndefined);
114152
+ typeNode = resolver.createTypeOfDeclaration(node, enclosingDeclaration, declarationEmitNodeBuilderFlags, symbolTracker);
114092
114153
  break;
114093
114154
  case 262 /* FunctionDeclaration */:
114094
114155
  case 180 /* ConstructSignature */:
@@ -181118,6 +181179,13 @@ var ConfiguredProject2 = class extends Project3 {
181118
181179
  this.compilerHost = void 0;
181119
181180
  this.projectService.sendProjectLoadingFinishEvent(this);
181120
181181
  this.projectService.sendProjectTelemetry(this);
181182
+ if (!this.skipConfigDiagEvent && !result) {
181183
+ this.projectService.sendConfigFileDiagEvent(
181184
+ this,
181185
+ /*triggerFile*/
181186
+ void 0
181187
+ );
181188
+ }
181121
181189
  return result;
181122
181190
  }
181123
181191
  /** @internal */
@@ -181572,7 +181640,12 @@ function projectContainsInfoDirectly(project, info) {
181572
181640
  }
181573
181641
  function updateProjectIfDirty(project) {
181574
181642
  project.invalidateResolutionsOfFailedLookupLocations();
181575
- 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;
181576
181649
  }
181577
181650
  function setProjectOptionsUsed(project) {
181578
181651
  if (isConfiguredProject(project)) {
@@ -182864,6 +182937,7 @@ var _ProjectService = class _ProjectService {
182864
182937
  /** @internal */
182865
182938
  createLoadAndUpdateConfiguredProject(configFileName, reason) {
182866
182939
  const project = this.createAndLoadConfiguredProject(configFileName, reason);
182940
+ project.skipConfigDiagEvent = true;
182867
182941
  project.updateGraph();
182868
182942
  return project;
182869
182943
  }
@@ -183156,6 +183230,7 @@ var _ProjectService = class _ProjectService {
183156
183230
  const configFileName = project.getConfigFilePath();
183157
183231
  this.logger.info(`${isInitialLoad ? "Loading" : "Reloading"} configured project ${configFileName}`);
183158
183232
  this.loadConfiguredProject(project, reason);
183233
+ project.skipConfigDiagEvent = true;
183159
183234
  project.updateGraph();
183160
183235
  this.sendConfigFileDiagEvent(project, configFileName);
183161
183236
  }
@@ -183169,16 +183244,20 @@ var _ProjectService = class _ProjectService {
183169
183244
  project.cleanupProgram();
183170
183245
  project.markAsDirty();
183171
183246
  }
183247
+ /** @internal */
183172
183248
  sendConfigFileDiagEvent(project, triggerFile) {
183173
183249
  if (!this.eventHandler || this.suppressDiagnosticEvents) {
183174
183250
  return;
183175
183251
  }
183176
183252
  const diagnostics = project.getLanguageService().getCompilerOptionsDiagnostics();
183177
183253
  diagnostics.push(...project.getAllProjectErrors());
183254
+ if (!triggerFile && !!diagnostics.length === !!project.hasConfigFileDiagnostics)
183255
+ return;
183256
+ project.hasConfigFileDiagnostics = !!diagnostics.length;
183178
183257
  this.eventHandler(
183179
183258
  {
183180
183259
  eventName: ConfigFileDiagEvent,
183181
- data: { configFileName: project.getConfigFilePath(), diagnostics, triggerFile }
183260
+ data: { configFileName: project.getConfigFilePath(), diagnostics, triggerFile: triggerFile ?? project.getConfigFilePath() }
183182
183261
  }
183183
183262
  );
183184
183263
  }
@@ -183968,7 +184047,7 @@ Dynamic files must always be opened with service's current directory or service
183968
184047
  project = this.createLoadAndUpdateConfiguredProject(configFileName, `Creating possible configured project for ${info.fileName} to open`);
183969
184048
  defaultConfigProjectIsCreated = true;
183970
184049
  } else {
183971
- updateProjectIfDirty(project);
184050
+ updateConfiguredProjectWithoutConfigDiagIfDirty(project);
183972
184051
  }
183973
184052
  projectForConfigFileDiag = project.containsScriptInfo(info) ? project : void 0;
183974
184053
  retainProjects = project;
@@ -183977,7 +184056,7 @@ Dynamic files must always be opened with service's current directory or service
183977
184056
  project,
183978
184057
  info.path,
183979
184058
  (child) => {
183980
- updateProjectIfDirty(child);
184059
+ updateConfiguredProjectWithoutConfigDiagIfDirty(child);
183981
184060
  if (!isArray(retainProjects)) {
183982
184061
  retainProjects = [project, child];
183983
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.20240408",
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": "10b5059a9501000747e447cefb752c69108b594c"
114
+ "gitHead": "7a4cbfa7ea8c6b7a09a84d04bd7e45c815e8e0d1"
115
115
  }