typescript 5.4.0-dev.20231128 → 5.4.0-dev.20231130

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/tsserver.js CHANGED
@@ -545,6 +545,7 @@ __export(server_exports, {
545
545
  escapeNonAsciiString: () => escapeNonAsciiString,
546
546
  escapeSnippetText: () => escapeSnippetText,
547
547
  escapeString: () => escapeString,
548
+ escapeTemplateSubstitution: () => escapeTemplateSubstitution,
548
549
  every: () => every,
549
550
  expandPreOrPostfixIncrementOrDecrementExpression: () => expandPreOrPostfixIncrementOrDecrementExpression,
550
551
  explainFiles: () => explainFiles,
@@ -2331,7 +2332,7 @@ module.exports = __toCommonJS(server_exports);
2331
2332
 
2332
2333
  // src/compiler/corePublic.ts
2333
2334
  var versionMajorMinor = "5.4";
2334
- var version = `${versionMajorMinor}.0-dev.20231128`;
2335
+ var version = `${versionMajorMinor}.0-dev.20231130`;
2335
2336
  var Comparison = /* @__PURE__ */ ((Comparison3) => {
2336
2337
  Comparison3[Comparison3["LessThan"] = -1] = "LessThan";
2337
2338
  Comparison3[Comparison3["EqualTo"] = 0] = "EqualTo";
@@ -37122,18 +37123,7 @@ var Parser;
37122
37123
  }
37123
37124
  nextTokenJSDoc();
37124
37125
  skipWhitespace();
37125
- const p2 = getNodePos();
37126
- let name = tokenIsIdentifierOrKeyword(token()) ? parseEntityName(
37127
- /*allowReservedWords*/
37128
- true
37129
- ) : void 0;
37130
- if (name) {
37131
- while (token() === 81 /* PrivateIdentifier */) {
37132
- reScanHashToken();
37133
- nextTokenJSDoc();
37134
- name = finishNode(factory2.createJSDocMemberName(name, parseIdentifier()), p2);
37135
- }
37136
- }
37126
+ const name = parseJSDocLinkName();
37137
37127
  const text = [];
37138
37128
  while (token() !== 20 /* CloseBraceToken */ && token() !== 4 /* NewLineTrivia */ && token() !== 1 /* EndOfFileToken */) {
37139
37129
  text.push(scanner2.getTokenText());
@@ -37142,6 +37132,26 @@ var Parser;
37142
37132
  const create = linkType === "link" ? factory2.createJSDocLink : linkType === "linkcode" ? factory2.createJSDocLinkCode : factory2.createJSDocLinkPlain;
37143
37133
  return finishNode(create(name, text.join("")), start3, scanner2.getTokenEnd());
37144
37134
  }
37135
+ function parseJSDocLinkName() {
37136
+ if (tokenIsIdentifierOrKeyword(token())) {
37137
+ const pos = getNodePos();
37138
+ let name = parseIdentifierName();
37139
+ while (parseOptional(25 /* DotToken */)) {
37140
+ name = finishNode(factory2.createQualifiedName(name, token() === 81 /* PrivateIdentifier */ ? createMissingNode(
37141
+ 80 /* Identifier */,
37142
+ /*reportAtCurrentPosition*/
37143
+ false
37144
+ ) : parseIdentifier()), pos);
37145
+ }
37146
+ while (token() === 81 /* PrivateIdentifier */) {
37147
+ reScanHashToken();
37148
+ nextTokenJSDoc();
37149
+ name = finishNode(factory2.createJSDocMemberName(name, parseIdentifier()), pos);
37150
+ }
37151
+ return name;
37152
+ }
37153
+ return void 0;
37154
+ }
37145
37155
  function parseJSDocLinkPrefix() {
37146
37156
  skipWhitespaceOrAsterisk();
37147
37157
  if (token() === 19 /* OpenBraceToken */ && nextTokenJSDoc() === 60 /* AtToken */ && tokenIsIdentifierOrKeyword(nextTokenJSDoc())) {
@@ -38314,7 +38324,7 @@ var libEntries = [
38314
38324
  ["esnext.disposable", "lib.esnext.disposable.d.ts"],
38315
38325
  ["esnext.bigint", "lib.es2020.bigint.d.ts"],
38316
38326
  ["esnext.string", "lib.es2022.string.d.ts"],
38317
- ["esnext.promise", "lib.es2021.promise.d.ts"],
38327
+ ["esnext.promise", "lib.esnext.promise.d.ts"],
38318
38328
  ["esnext.weakref", "lib.es2021.weakref.d.ts"],
38319
38329
  ["esnext.decorators", "lib.esnext.decorators.d.ts"],
38320
38330
  ["decorators", "lib.decorators.d.ts"],
@@ -46457,7 +46467,7 @@ function createBinder() {
46457
46467
  }
46458
46468
  function bindSpecialPropertyAssignment(node) {
46459
46469
  var _a;
46460
- const parentSymbol = lookupSymbolForPropertyAccess(node.left.expression, container) || lookupSymbolForPropertyAccess(node.left.expression, blockScopeContainer);
46470
+ const parentSymbol = lookupSymbolForPropertyAccess(node.left.expression, blockScopeContainer) || lookupSymbolForPropertyAccess(node.left.expression, container);
46461
46471
  if (!isInJSFile(node) && !isFunctionSymbol(parentSymbol)) {
46462
46472
  return;
46463
46473
  }
@@ -46555,7 +46565,7 @@ function createBinder() {
46555
46565
  return isBinaryExpression(propertyAccess.parent) ? getParentOfBinaryExpression(propertyAccess.parent).parent.kind === 312 /* SourceFile */ : propertyAccess.parent.parent.kind === 312 /* SourceFile */;
46556
46566
  }
46557
46567
  function bindPropertyAssignment(name, propertyAccess, isPrototypeProperty, containerIsClass) {
46558
- let namespaceSymbol = lookupSymbolForPropertyAccess(name, container) || lookupSymbolForPropertyAccess(name, blockScopeContainer);
46568
+ let namespaceSymbol = lookupSymbolForPropertyAccess(name, blockScopeContainer) || lookupSymbolForPropertyAccess(name, container);
46559
46569
  const isToplevel = isTopLevelNamespaceAssignment(propertyAccess);
46560
46570
  namespaceSymbol = bindPotentiallyMissingNamespaces(namespaceSymbol, propertyAccess.expression, isToplevel, isPrototypeProperty, containerIsClass);
46561
46571
  bindPotentiallyNewExpandoMemberToNamespace(propertyAccess, namespaceSymbol, isPrototypeProperty);
@@ -59188,7 +59198,12 @@ function createTypeChecker(host) {
59188
59198
  for (const current of type.types) {
59189
59199
  for (const prop of getPropertiesOfType(current)) {
59190
59200
  if (!members.has(prop.escapedName)) {
59191
- const combinedProp = getPropertyOfUnionOrIntersectionType(type, prop.escapedName);
59201
+ const combinedProp = getPropertyOfUnionOrIntersectionType(
59202
+ type,
59203
+ prop.escapedName,
59204
+ /*skipObjectFunctionPropertyAugment*/
59205
+ !!(type.flags & 2097152 /* Intersection */)
59206
+ );
59192
59207
  if (combinedProp) {
59193
59208
  members.set(prop.escapedName, combinedProp);
59194
59209
  }
@@ -59678,13 +59693,17 @@ function createTypeChecker(host) {
59678
59693
  return result;
59679
59694
  }
59680
59695
  function getUnionOrIntersectionProperty(type, name, skipObjectFunctionPropertyAugment) {
59681
- var _a, _b;
59696
+ var _a, _b, _c;
59682
59697
  let property = ((_a = type.propertyCacheWithoutObjectFunctionPropertyAugment) == null ? void 0 : _a.get(name)) || !skipObjectFunctionPropertyAugment ? (_b = type.propertyCache) == null ? void 0 : _b.get(name) : void 0;
59683
59698
  if (!property) {
59684
59699
  property = createUnionOrIntersectionProperty(type, name, skipObjectFunctionPropertyAugment);
59685
59700
  if (property) {
59686
59701
  const properties = skipObjectFunctionPropertyAugment ? type.propertyCacheWithoutObjectFunctionPropertyAugment || (type.propertyCacheWithoutObjectFunctionPropertyAugment = createSymbolTable()) : type.propertyCache || (type.propertyCache = createSymbolTable());
59687
59702
  properties.set(name, property);
59703
+ if (skipObjectFunctionPropertyAugment && !((_c = type.propertyCache) == null ? void 0 : _c.get(name))) {
59704
+ const properties2 = type.propertyCache || (type.propertyCache = createSymbolTable());
59705
+ properties2.set(name, property);
59706
+ }
59688
59707
  }
59689
59708
  }
59690
59709
  return property;
@@ -59794,7 +59813,22 @@ function createTypeChecker(host) {
59794
59813
  }
59795
59814
  return getPropertyOfObjectType(globalObjectType, name);
59796
59815
  }
59797
- if (type.flags & 3145728 /* UnionOrIntersection */) {
59816
+ if (type.flags & 2097152 /* Intersection */) {
59817
+ const prop = getPropertyOfUnionOrIntersectionType(
59818
+ type,
59819
+ name,
59820
+ /*skipObjectFunctionPropertyAugment*/
59821
+ true
59822
+ );
59823
+ if (prop) {
59824
+ return prop;
59825
+ }
59826
+ if (!skipObjectFunctionPropertyAugment) {
59827
+ return getPropertyOfUnionOrIntersectionType(type, name, skipObjectFunctionPropertyAugment);
59828
+ }
59829
+ return void 0;
59830
+ }
59831
+ if (type.flags & 1048576 /* Union */) {
59798
59832
  return getPropertyOfUnionOrIntersectionType(type, name, skipObjectFunctionPropertyAugment);
59799
59833
  }
59800
59834
  return void 0;
@@ -68647,12 +68681,12 @@ function createTypeChecker(host) {
68647
68681
  return false;
68648
68682
  }
68649
68683
  function isValidTypeForTemplateLiteralPlaceholder(source, target) {
68650
- if (source === target || target.flags & (1 /* Any */ | 4 /* String */)) {
68651
- return true;
68652
- }
68653
68684
  if (target.flags & 2097152 /* Intersection */) {
68654
68685
  return every(target.types, (t) => t === emptyTypeLiteralType || isValidTypeForTemplateLiteralPlaceholder(source, t));
68655
68686
  }
68687
+ if (target.flags & 4 /* String */ || isTypeAssignableTo(source, target)) {
68688
+ return true;
68689
+ }
68656
68690
  if (source.flags & 128 /* StringLiteral */) {
68657
68691
  const value = source.value;
68658
68692
  return !!(target.flags & 8 /* Number */ && isValidNumberString(
@@ -68669,7 +68703,7 @@ function createTypeChecker(host) {
68669
68703
  const texts = source.texts;
68670
68704
  return texts.length === 2 && texts[0] === "" && texts[1] === "" && isTypeAssignableTo(source.types[0], target);
68671
68705
  }
68672
- return isTypeAssignableTo(source, target);
68706
+ return false;
68673
68707
  }
68674
68708
  function inferTypesFromTemplateLiteralType(source, target) {
68675
68709
  return source.flags & 128 /* StringLiteral */ ? inferFromLiteralPartsToTemplateLiteral([source.value], emptyArray, target) : source.flags & 134217728 /* TemplateLiteral */ ? arraysEqual(source.texts, target.texts) ? map(source.types, getStringLikeTypeForType) : inferFromLiteralPartsToTemplateLiteral(source.texts, source.types, target) : void 0;
@@ -71627,14 +71661,15 @@ function createTypeChecker(host) {
71627
71661
  if (declaration) {
71628
71662
  if (isBindingElement(declaration) && !declaration.initializer && !declaration.dotDotDotToken && declaration.parent.elements.length >= 2) {
71629
71663
  const parent2 = declaration.parent.parent;
71630
- if (parent2.kind === 260 /* VariableDeclaration */ && getCombinedNodeFlagsCached(declaration) & 6 /* Constant */ || parent2.kind === 169 /* Parameter */) {
71664
+ const rootDeclaration = getRootDeclaration(parent2);
71665
+ if (rootDeclaration.kind === 260 /* VariableDeclaration */ && getCombinedNodeFlagsCached(rootDeclaration) & 6 /* Constant */ || rootDeclaration.kind === 169 /* Parameter */) {
71631
71666
  const links = getNodeLinks(parent2);
71632
71667
  if (!(links.flags & 4194304 /* InCheckIdentifier */)) {
71633
71668
  links.flags |= 4194304 /* InCheckIdentifier */;
71634
71669
  const parentType = getTypeForBindingElementParent(parent2, 0 /* Normal */);
71635
71670
  const parentTypeConstraint = parentType && mapType(parentType, getBaseConstraintOrType);
71636
71671
  links.flags &= ~4194304 /* InCheckIdentifier */;
71637
- if (parentTypeConstraint && parentTypeConstraint.flags & 1048576 /* Union */ && !(parent2.kind === 169 /* Parameter */ && isSymbolAssigned(symbol))) {
71672
+ if (parentTypeConstraint && parentTypeConstraint.flags & 1048576 /* Union */ && !(rootDeclaration.kind === 169 /* Parameter */ && isSymbolAssigned(symbol))) {
71638
71673
  const pattern = declaration.parent;
71639
71674
  const narrowedType = getFlowTypeOfReference(
71640
71675
  pattern,
@@ -75807,19 +75842,9 @@ function createTypeChecker(host) {
75807
75842
  return Debug.fail();
75808
75843
  }
75809
75844
  }
75810
- function getDiagnosticSpanForCallNode(node, doNotIncludeArguments) {
75811
- let start2;
75812
- let length2;
75845
+ function getDiagnosticSpanForCallNode(node) {
75813
75846
  const sourceFile = getSourceFileOfNode(node);
75814
- if (isPropertyAccessExpression(node.expression)) {
75815
- const nameSpan = getErrorSpanForNode(sourceFile, node.expression.name);
75816
- start2 = nameSpan.start;
75817
- length2 = doNotIncludeArguments ? nameSpan.length : node.end - start2;
75818
- } else {
75819
- const expressionSpan = getErrorSpanForNode(sourceFile, node.expression);
75820
- start2 = expressionSpan.start;
75821
- length2 = doNotIncludeArguments ? expressionSpan.length : node.end - start2;
75822
- }
75847
+ const { start: start2, length: length2 } = getErrorSpanForNode(sourceFile, isPropertyAccessExpression(node.expression) ? node.expression.name : node.expression);
75823
75848
  return { start: start2, length: length2, sourceFile };
75824
75849
  }
75825
75850
  function getDiagnosticForCallNode(node, message, ...args) {
@@ -75836,6 +75861,18 @@ function createTypeChecker(host) {
75836
75861
  return createDiagnosticForNodeFromMessageChain(getSourceFileOfNode(node), node, message);
75837
75862
  }
75838
75863
  }
75864
+ function getErrorNodeForCallNode(callLike) {
75865
+ if (isCallOrNewExpression(callLike)) {
75866
+ return isPropertyAccessExpression(callLike.expression) ? callLike.expression.name : callLike.expression;
75867
+ }
75868
+ if (isTaggedTemplateExpression(callLike)) {
75869
+ return isPropertyAccessExpression(callLike.tag) ? callLike.tag.name : callLike.tag;
75870
+ }
75871
+ if (isJsxOpeningLikeElement(callLike)) {
75872
+ return callLike.tagName;
75873
+ }
75874
+ return callLike;
75875
+ }
75839
75876
  function isPromiseResolveArityError(node) {
75840
75877
  if (!isCallExpression(node) || !isIdentifier(node.expression))
75841
75878
  return false;
@@ -76137,7 +76174,7 @@ function createTypeChecker(host) {
76137
76174
  const { file, start: start2, length: length2 } = diags[0];
76138
76175
  diag2 = { file, start: start2, length: length2, code: chain.code, category: chain.category, messageText: chain, relatedInformation: related };
76139
76176
  } else {
76140
- diag2 = createDiagnosticForNodeFromMessageChain(getSourceFileOfNode(node), node, chain, related);
76177
+ diag2 = createDiagnosticForNodeFromMessageChain(getSourceFileOfNode(node), getErrorNodeForCallNode(node), chain, related);
76141
76178
  }
76142
76179
  addImplementationSuccessElaboration(candidatesForArgumentError[0], diag2);
76143
76180
  diagnostics.add(diag2);
@@ -76665,11 +76702,7 @@ function createTypeChecker(host) {
76665
76702
  addRelatedInfo(diagnostic, createDiagnosticForNode(errorTarget, relatedInfo));
76666
76703
  }
76667
76704
  if (isCallExpression(errorTarget.parent)) {
76668
- const { start: start2, length: length2 } = getDiagnosticSpanForCallNode(
76669
- errorTarget.parent,
76670
- /*doNotIncludeArguments*/
76671
- true
76672
- );
76705
+ const { start: start2, length: length2 } = getDiagnosticSpanForCallNode(errorTarget.parent);
76673
76706
  diagnostic.start = start2;
76674
76707
  diagnostic.length = length2;
76675
76708
  }
@@ -80039,16 +80072,19 @@ function createTypeChecker(host) {
80039
80072
  }
80040
80073
  }
80041
80074
  }
80042
- function getReturnTypeOfSingleNonGenericCallSignature(funcType) {
80075
+ function getNonGenericReturnTypeOfSingleCallSignature(funcType) {
80043
80076
  const signature = getSingleCallSignature(funcType);
80044
- if (signature && !signature.typeParameters) {
80045
- return getReturnTypeOfSignature(signature);
80077
+ if (signature) {
80078
+ const returnType = getReturnTypeOfSignature(signature);
80079
+ if (!signature.typeParameters || !couldContainTypeVariables(returnType)) {
80080
+ return returnType;
80081
+ }
80046
80082
  }
80047
80083
  }
80048
80084
  function getReturnTypeOfSingleNonGenericSignatureOfCallChain(expr) {
80049
80085
  const funcType = checkExpression(expr.expression);
80050
80086
  const nonOptionalType = getOptionalExpressionType(funcType, expr.expression);
80051
- const returnType = getReturnTypeOfSingleNonGenericCallSignature(funcType);
80087
+ const returnType = getNonGenericReturnTypeOfSingleCallSignature(funcType);
80052
80088
  return returnType && propagateOptionalTypeMarker(returnType, expr, nonOptionalType !== funcType);
80053
80089
  }
80054
80090
  function getTypeOfExpression(node) {
@@ -80093,7 +80129,7 @@ function createTypeChecker(host) {
80093
80129
  /*requireStringLiteralLikeArgument*/
80094
80130
  true
80095
80131
  ) && !isSymbolOrSymbolForCall(expr)) {
80096
- return isCallChain(expr) ? getReturnTypeOfSingleNonGenericSignatureOfCallChain(expr) : getReturnTypeOfSingleNonGenericCallSignature(checkNonNullExpression(expr.expression));
80132
+ return isCallChain(expr) ? getReturnTypeOfSingleNonGenericSignatureOfCallChain(expr) : getNonGenericReturnTypeOfSingleCallSignature(checkNonNullExpression(expr.expression));
80097
80133
  } else if (isAssertionExpression(expr) && !isConstTypeReference(expr.type)) {
80098
80134
  return getTypeFromTypeNode(expr.type);
80099
80135
  } else if (isLiteralExpression(node) || isBooleanLiteral(node)) {
@@ -165794,6 +165830,17 @@ function provideInlayHints(context) {
165794
165830
  visitForDisplayParts(node.type);
165795
165831
  }
165796
165832
  break;
165833
+ case 181 /* IndexSignature */:
165834
+ Debug.assertNode(node, isIndexSignatureDeclaration);
165835
+ Debug.assertEqual(node.parameters.length, 1);
165836
+ parts.push({ text: "[" });
165837
+ visitForDisplayParts(node.parameters[0]);
165838
+ parts.push({ text: "]" });
165839
+ if (node.type) {
165840
+ parts.push({ text: ": " });
165841
+ visitForDisplayParts(node.type);
165842
+ }
165843
+ break;
165797
165844
  case 173 /* MethodSignature */:
165798
165845
  Debug.assertNode(node, isMethodSignature);
165799
165846
  if ((_b = node.modifiers) == null ? void 0 : _b.length) {
@@ -165843,6 +165890,28 @@ function provideInlayHints(context) {
165843
165890
  parts.push({ text: tokenToString(node.operator) });
165844
165891
  visitForDisplayParts(node.operand);
165845
165892
  break;
165893
+ case 203 /* TemplateLiteralType */:
165894
+ Debug.assertNode(node, isTemplateLiteralTypeNode);
165895
+ visitForDisplayParts(node.head);
165896
+ node.templateSpans.forEach(visitForDisplayParts);
165897
+ break;
165898
+ case 16 /* TemplateHead */:
165899
+ Debug.assertNode(node, isTemplateHead);
165900
+ parts.push({ text: getLiteralText2(node) });
165901
+ break;
165902
+ case 204 /* TemplateLiteralTypeSpan */:
165903
+ Debug.assertNode(node, isTemplateLiteralTypeSpan);
165904
+ visitForDisplayParts(node.type);
165905
+ visitForDisplayParts(node.literal);
165906
+ break;
165907
+ case 17 /* TemplateMiddle */:
165908
+ Debug.assertNode(node, isTemplateMiddle);
165909
+ parts.push({ text: getLiteralText2(node) });
165910
+ break;
165911
+ case 18 /* TemplateTail */:
165912
+ Debug.assertNode(node, isTemplateTail);
165913
+ parts.push({ text: getLiteralText2(node) });
165914
+ break;
165846
165915
  case 197 /* ThisType */:
165847
165916
  Debug.assertNode(node, isThisTypeNode);
165848
165917
  parts.push({ text: "this" });
@@ -165870,8 +165939,22 @@ function provideInlayHints(context) {
165870
165939
  });
165871
165940
  }
165872
165941
  function getLiteralText2(node) {
165873
- if (isStringLiteral(node)) {
165874
- return quotePreference === 0 /* Single */ ? `'${escapeString(node.text, 39 /* singleQuote */)}'` : `"${escapeString(node.text, 34 /* doubleQuote */)}"`;
165942
+ switch (node.kind) {
165943
+ case 11 /* StringLiteral */:
165944
+ return quotePreference === 0 /* Single */ ? `'${escapeString(node.text, 39 /* singleQuote */)}'` : `"${escapeString(node.text, 34 /* doubleQuote */)}"`;
165945
+ case 16 /* TemplateHead */:
165946
+ case 17 /* TemplateMiddle */:
165947
+ case 18 /* TemplateTail */: {
165948
+ const rawText = node.rawText ?? escapeTemplateSubstitution(escapeString(node.text, 96 /* backtick */));
165949
+ switch (node.kind) {
165950
+ case 16 /* TemplateHead */:
165951
+ return "`" + rawText + "${";
165952
+ case 17 /* TemplateMiddle */:
165953
+ return "}" + rawText + "${";
165954
+ case 18 /* TemplateTail */:
165955
+ return "}" + rawText + "`";
165956
+ }
165957
+ }
165875
165958
  }
165876
165959
  return node.text;
165877
165960
  }
@@ -173436,6 +173519,7 @@ __export(ts_exports2, {
173436
173519
  escapeNonAsciiString: () => escapeNonAsciiString,
173437
173520
  escapeSnippetText: () => escapeSnippetText,
173438
173521
  escapeString: () => escapeString,
173522
+ escapeTemplateSubstitution: () => escapeTemplateSubstitution,
173439
173523
  every: () => every,
173440
173524
  expandPreOrPostfixIncrementOrDecrementExpression: () => expandPreOrPostfixIncrementOrDecrementExpression,
173441
173525
  explainFiles: () => explainFiles,
@@ -188227,6 +188311,7 @@ start(initializeNodeSystem(), require("os").platform());
188227
188311
  escapeNonAsciiString,
188228
188312
  escapeSnippetText,
188229
188313
  escapeString,
188314
+ escapeTemplateSubstitution,
188230
188315
  every,
188231
188316
  expandPreOrPostfixIncrementOrDecrementExpression,
188232
188317
  explainFiles,