From c5de6b57b7f09a6d17eb4a5dab91ecf8f5b25f29 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Sat, 30 Sep 2023 00:14:41 +0000 Subject: [PATCH] Update LKG --- lib/tsc.js | 166 +++++- lib/tsserver.js | 1172 ++++++--------------------------------- lib/typescript.d.ts | 5 +- lib/typescript.js | 1172 ++++++--------------------------------- lib/typingsInstaller.js | 9 +- 5 files changed, 497 insertions(+), 2027 deletions(-) diff --git a/lib/tsc.js b/lib/tsc.js index b0135bdb9788d..de544cf91f77d 100644 --- a/lib/tsc.js +++ b/lib/tsc.js @@ -6202,7 +6202,7 @@ var Diagnostics = { An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type: diag(2356, 1 /* Error */, "An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type_2356", "An arithmetic operand must be of type 'any', 'number', 'bigint' or an enum type."), The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access: diag(2357, 1 /* Error */, "The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access_2357", "The operand of an increment or decrement operator must be a variable or a property access."), The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_parameter: diag(2358, 1 /* Error */, "The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_paramete_2358", "The left-hand side of an 'instanceof' expression must be of type 'any', an object type or a type parameter."), - The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_Function_interface_type: diag(2359, 1 /* Error */, "The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_F_2359", "The right-hand side of an 'instanceof' expression must be of type 'any' or of a type assignable to the 'Function' interface type."), + The_right_hand_side_of_an_instanceof_expression_must_be_either_of_type_any_a_class_function_or_other_type_assignable_to_the_Function_interface_type_or_an_object_type_with_a_Symbol_hasInstance_method: diag(2359, 1 /* Error */, "The_right_hand_side_of_an_instanceof_expression_must_be_either_of_type_any_a_class_function_or_other_2359", "The right-hand side of an 'instanceof' expression must be either of type 'any', a class, function, or other type assignable to the 'Function' interface type, or an object type with a 'Symbol.hasInstance' method."), The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type: diag(2362, 1 /* Error */, "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2362", "The left-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type."), The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type: diag(2363, 1 /* Error */, "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2363", "The right-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type."), The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access: diag(2364, 1 /* Error */, "The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access_2364", "The left-hand side of an assignment expression must be a variable or a property access."), @@ -6651,6 +6651,8 @@ var Diagnostics = { Import_attributes_cannot_be_used_with_type_only_imports_or_exports: diag(2857, 1 /* Error */, "Import_attributes_cannot_be_used_with_type_only_imports_or_exports_2857", "Import attributes cannot be used with type-only imports or exports."), Import_attribute_values_must_be_string_literal_expressions: diag(2858, 1 /* Error */, "Import_attribute_values_must_be_string_literal_expressions_2858", "Import attribute values must be string literal expressions."), Excessive_complexity_comparing_types_0_and_1: diag(2859, 1 /* Error */, "Excessive_complexity_comparing_types_0_and_1_2859", "Excessive complexity comparing types '{0}' and '{1}'."), + The_left_hand_side_of_an_instanceof_expression_must_be_assignable_to_the_first_argument_of_the_right_hand_side_s_Symbol_hasInstance_method: diag(2860, 1 /* Error */, "The_left_hand_side_of_an_instanceof_expression_must_be_assignable_to_the_first_argument_of_the_right_2860", "The left-hand side of an 'instanceof' expression must be assignable to the first argument of the right-hand side's '[Symbol.hasInstance]' method."), + An_object_s_Symbol_hasInstance_method_must_return_a_boolean_value_for_it_to_be_used_on_the_right_hand_side_of_an_instanceof_expression: diag(2861, 1 /* Error */, "An_object_s_Symbol_hasInstance_method_must_return_a_boolean_value_for_it_to_be_used_on_the_right_han_2861", "An object's '[Symbol.hasInstance]' method must return a boolean value for it to be used on the right-hand side of an 'instanceof' expression."), Import_declaration_0_is_using_private_name_1: diag(4e3, 1 /* Error */, "Import_declaration_0_is_using_private_name_1_4000", "Import declaration '{0}' is using private name '{1}'."), Type_parameter_0_of_exported_class_has_or_is_using_private_name_1: diag(4002, 1 /* Error */, "Type_parameter_0_of_exported_class_has_or_is_using_private_name_1_4002", "Type parameter '{0}' of exported class has or is using private name '{1}'."), Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1: diag(4004, 1 /* Error */, "Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1_4004", "Type parameter '{0}' of exported interface has or is using private name '{1}'."), @@ -10813,7 +10815,14 @@ function isAccessor(node) { function isAutoAccessorPropertyDeclaration(node) { return isPropertyDeclaration(node) && hasAccessorModifier(node); } -function isClassFieldAndNotAutoAccessor(node) { +function isClassInstanceProperty(node) { + if (isInJSFile(node) && isExpandoPropertyDeclaration(node)) { + return (!isBindableStaticAccessExpression(node) || !isPrototypeAccess(node.expression)) && !isBindableStaticNameExpression( + node, + /*excludeThisKeyword*/ + true + ); + } return node.parent && isClassLike(node.parent) && isPropertyDeclaration(node) && !hasAccessorModifier(node); } function isMethodOrAccessor(node) { @@ -13076,6 +13085,8 @@ function getInvokedExpression(node) { case 286 /* JsxOpeningElement */: case 285 /* JsxSelfClosingElement */: return node.tagName; + case 226 /* BinaryExpression */: + return node.right; default: return node.expression; } @@ -15582,6 +15593,12 @@ function isRightSideOfAccessExpression(node) { function isRightSideOfQualifiedNameOrPropertyAccessOrJSDocMemberName(node) { return isQualifiedName(node.parent) && node.parent.right === node || isPropertyAccessExpression(node.parent) && node.parent.name === node || isJSDocMemberName(node.parent) && node.parent.right === node; } +function isInstanceOfExpression(node) { + return isBinaryExpression(node) && node.operatorToken.kind === 104 /* InstanceOfKeyword */; +} +function isRightSideOfInstanceofExpression(node) { + return isInstanceOfExpression(node.parent) && node === node.parent.right; +} function isEmptyObjectLiteral(expression) { return expression.kind === 210 /* ObjectLiteralExpression */ && expression.properties.length === 0; } @@ -43069,9 +43086,8 @@ var CheckMode = /* @__PURE__ */ ((CheckMode3) => { CheckMode3[CheckMode3["SkipContextSensitive"] = 4] = "SkipContextSensitive"; CheckMode3[CheckMode3["SkipGenericFunctions"] = 8] = "SkipGenericFunctions"; CheckMode3[CheckMode3["IsForSignatureHelp"] = 16] = "IsForSignatureHelp"; - CheckMode3[CheckMode3["IsForStringLiteralArgumentCompletions"] = 32] = "IsForStringLiteralArgumentCompletions"; - CheckMode3[CheckMode3["RestBindingElement"] = 64] = "RestBindingElement"; - CheckMode3[CheckMode3["TypeOnly"] = 128] = "TypeOnly"; + CheckMode3[CheckMode3["RestBindingElement"] = 32] = "RestBindingElement"; + CheckMode3[CheckMode3["TypeOnly"] = 64] = "TypeOnly"; return CheckMode3; })(CheckMode || {}); var SignatureCheckMode = /* @__PURE__ */ ((SignatureCheckMode3) => { @@ -43558,7 +43574,7 @@ function createTypeChecker(host) { candidates, /*argumentCount*/ void 0, - 32 /* IsForStringLiteralArgumentCompletions */ + 0 /* Normal */ )); for (const candidate of candidates) { candidatesSet.add(candidate); @@ -51593,7 +51609,7 @@ function createTypeChecker(host) { return type.flags & (128 /* StringLiteral */ | 256 /* NumberLiteral */) ? "" + type.value : void 0; } function getTypeForBindingElement(declaration) { - const checkMode = declaration.dotDotDotToken ? 64 /* RestBindingElement */ : 0 /* Normal */; + const checkMode = declaration.dotDotDotToken ? 32 /* RestBindingElement */ : 0 /* Normal */; const parentType = getTypeForBindingElementParent(declaration.parent.parent, checkMode); return parentType && getBindingElementTypeFromParentType( declaration, @@ -63760,7 +63776,7 @@ function createTypeChecker(host) { if (!couldContainTypeVariables(target)) { return; } - if (source === wildcardType) { + if (source === wildcardType || source === blockedStringType) { const savePropagationType = propagationType; propagationType = source; inferFromTypes(target, target); @@ -63817,6 +63833,10 @@ function createTypeChecker(host) { return; } if (!inference.isFixed) { + const candidate = propagationType || source; + if (candidate === blockedStringType) { + return; + } if (inference.priority === void 0 || priority < inference.priority) { inference.candidates = void 0; inference.contraCandidates = void 0; @@ -63824,7 +63844,6 @@ function createTypeChecker(host) { inference.priority = priority; } if (priority === inference.priority) { - const candidate = propagationType || source; if (contravariant && !bivariant) { if (!contains(inference.contraCandidates, candidate)) { inference.contraCandidates = append(inference.contraCandidates, candidate); @@ -64396,7 +64415,7 @@ function createTypeChecker(host) { const constraint = getConstraintOfTypeParameter(inference.typeParameter); if (constraint) { const instantiatedConstraint = instantiateType(constraint, context.nonFixingMapper); - if (!inferredType || inferredType === blockedStringType || !context.compareTypes(inferredType, getTypeWithThisArgument(instantiatedConstraint, inferredType))) { + if (!inferredType || !context.compareTypes(inferredType, getTypeWithThisArgument(instantiatedConstraint, inferredType))) { inference.inferredType = fallbackType && context.compareTypes(fallbackType, getTypeWithThisArgument(instantiatedConstraint, fallbackType)) ? fallbackType : instantiatedConstraint; } } @@ -65247,7 +65266,10 @@ function createTypeChecker(host) { let signature = links.effectsSignature; if (signature === void 0) { let funcType; - if (node.parent.kind === 244 /* ExpressionStatement */) { + if (isBinaryExpression(node)) { + const rightType = checkNonNullExpression(node.right); + funcType = getSymbolHasInstanceMethodOfObjectType(rightType); + } else if (node.parent.kind === 244 /* ExpressionStatement */) { funcType = getTypeOfDottedName( node.expression, /*diagnostic*/ @@ -66271,7 +66293,22 @@ function createTypeChecker(host) { } return type; } - const rightType = getTypeOfExpression(expr.right); + const right = expr.right; + const rightType = getTypeOfExpression(right); + if (!isTypeDerivedFrom(rightType, globalObjectType)) { + return type; + } + const signature = getEffectsSignature(expr); + const predicate = signature && getTypePredicateOfSignature(signature); + if (predicate && predicate.kind === 1 /* Identifier */ && predicate.parameterIndex === 0) { + return getNarrowedType( + type, + predicate.type, + assumeTrue, + /*checkDerived*/ + true + ); + } if (!isTypeDerivedFrom(rightType, globalFunctionType)) { return type; } @@ -66523,7 +66560,7 @@ function createTypeChecker(host) { return type.flags & 2097152 /* Intersection */ ? some(type.types, isGenericTypeWithoutNullableConstraint) : !!(type.flags & 465829888 /* Instantiable */ && !maybeTypeOfKind(getBaseConstraintOrType(type), 98304 /* Nullable */)); } function hasContextualTypeWithNoGenericTypes(node, checkMode) { - const contextualType = (isIdentifier(node) || isPropertyAccessExpression(node) || isElementAccessExpression(node)) && !((isJsxOpeningElement(node.parent) || isJsxSelfClosingElement(node.parent)) && node.parent.tagName === node) && (checkMode && checkMode & 64 /* RestBindingElement */ ? getContextualType(node, 8 /* SkipBindingPatterns */) : getContextualType( + const contextualType = (isIdentifier(node) || isPropertyAccessExpression(node) || isElementAccessExpression(node)) && !((isJsxOpeningElement(node.parent) || isJsxSelfClosingElement(node.parent)) && node.parent.tagName === node) && (checkMode && checkMode & 32 /* RestBindingElement */ ? getContextualType(node, 8 /* SkipBindingPatterns */) : getContextualType( node, /*contextFlags*/ void 0 @@ -67283,7 +67320,7 @@ function createTypeChecker(host) { function getContextualTypeForBindingElement(declaration, contextFlags) { const parent = declaration.parent.parent; const name = declaration.propertyName || declaration.name; - const parentType = getContextualTypeForVariableLikeDeclaration(parent, contextFlags) || parent.kind !== 208 /* BindingElement */ && parent.initializer && checkDeclarationInitializer(parent, declaration.dotDotDotToken ? 64 /* RestBindingElement */ : 0 /* Normal */); + const parentType = getContextualTypeForVariableLikeDeclaration(parent, contextFlags) || parent.kind !== 208 /* BindingElement */ && parent.initializer && checkDeclarationInitializer(parent, declaration.dotDotDotToken ? 32 /* RestBindingElement */ : 0 /* Normal */); if (!parentType || isBindingPattern(name) || isComputedNonLiteralName(name)) return void 0; if (parent.name.kind === 207 /* ArrayBindingPattern */) { @@ -69266,7 +69303,7 @@ function createTypeChecker(host) { } return false; } - if (!(flags & 32 /* Static */) && ((_a = prop.declarations) == null ? void 0 : _a.some(isClassFieldAndNotAutoAccessor))) { + if (!(flags & 32 /* Static */) && ((_a = prop.declarations) == null ? void 0 : _a.some(isClassInstanceProperty))) { if (errorNode) { error(errorNode, Diagnostics.Class_field_0_defined_by_the_parent_class_is_not_accessible_in_the_child_class_via_super, symbolToString(prop)); } @@ -70129,7 +70166,9 @@ function createTypeChecker(host) { checkExpression(node.template); } else if (isJsxOpeningLikeElement(node)) { checkExpression(node.attributes); - } else if (node.kind !== 170 /* Decorator */) { + } else if (isBinaryExpression(node)) { + checkExpression(node.left); + } else if (isCallOrNewExpression(node)) { forEach(node.arguments, (argument) => { checkExpression(argument); }); @@ -70202,6 +70241,8 @@ function createTypeChecker(host) { } } else if (node.kind === 170 /* Decorator */) { argCount = getDecoratorArgumentCount(node, signature); + } else if (node.kind === 226 /* BinaryExpression */) { + argCount = 1; } else if (isJsxOpeningLikeElement(node)) { callIsIncomplete = node.attributes.end === node.end; if (callIsIncomplete) { @@ -70301,13 +70342,13 @@ function createTypeChecker(host) { return voidType; } const thisArgumentType = checkExpression(thisArgumentNode); - return isOptionalChainRoot(thisArgumentNode.parent) ? getNonNullableType(thisArgumentType) : isOptionalChain(thisArgumentNode.parent) ? removeOptionalTypeMarker(thisArgumentType) : thisArgumentType; + return isRightSideOfInstanceofExpression(thisArgumentNode) ? thisArgumentType : isOptionalChainRoot(thisArgumentNode.parent) ? getNonNullableType(thisArgumentType) : isOptionalChain(thisArgumentNode.parent) ? removeOptionalTypeMarker(thisArgumentType) : thisArgumentType; } function inferTypeArguments(node, signature, args, checkMode, context) { if (isJsxOpeningLikeElement(node)) { return inferJsxTypeArguments(node, signature, checkMode, context); } - if (node.kind !== 170 /* Decorator */) { + if (node.kind !== 170 /* Decorator */ && node.kind !== 226 /* BinaryExpression */) { const skipBindingPatterns = every(signature.typeParameters, (p) => !!getDefaultFromTypeParameter(p)); const contextualType = getContextualType(node, skipBindingPatterns ? 8 /* SkipBindingPatterns */ : 0 /* None */); if (contextualType) { @@ -70344,7 +70385,7 @@ function createTypeChecker(host) { } for (let i = 0; i < argCount; i++) { const arg = args[i]; - if (arg.kind !== 232 /* OmittedExpression */ && !(checkMode & 32 /* IsForStringLiteralArgumentCompletions */ && hasSkipDirectInferenceFlag(arg))) { + if (arg.kind !== 232 /* OmittedExpression */) { const paramType = getTypeAtPosition(signature, i); if (couldContainTypeVariables(paramType)) { const argType = checkExpressionWithContextualType(arg, paramType, context, checkMode); @@ -70636,6 +70677,9 @@ function createTypeChecker(host) { } } function getThisArgumentOfCall(node) { + if (node.kind === 226 /* BinaryExpression */) { + return node.right; + } const expression = node.kind === 213 /* CallExpression */ ? node.expression : node.kind === 215 /* TaggedTemplateExpression */ ? node.tag : node.kind === 170 /* Decorator */ && !legacyDecorators ? node.expression : void 0; if (expression) { const callee = skipOuterExpressions(expression); @@ -70664,6 +70708,9 @@ function createTypeChecker(host) { if (node.kind === 170 /* Decorator */) { return getEffectiveDecoratorArguments(node); } + if (node.kind === 226 /* BinaryExpression */) { + return [node.left]; + } if (isJsxOpeningLikeElement(node)) { return node.attributes.properties.length > 0 || isJsxOpeningElement(node) && node.parent.children.length > 0 ? [node.attributes] : emptyArray; } @@ -70933,9 +70980,10 @@ function createTypeChecker(host) { const isTaggedTemplate = node.kind === 215 /* TaggedTemplateExpression */; const isDecorator2 = node.kind === 170 /* Decorator */; const isJsxOpeningOrSelfClosingElement = isJsxOpeningLikeElement(node); + const isInstanceof = node.kind === 226 /* BinaryExpression */; const reportErrors2 = !isInferencePartiallyBlocked && !candidatesOutArray; let typeArguments; - if (!isDecorator2 && !isSuperCall(node)) { + if (!isDecorator2 && !isInstanceof && !isSuperCall(node)) { typeArguments = node.typeArguments; if (isTaggedTemplate || isJsxOpeningOrSelfClosingElement || node.expression.kind !== 108 /* SuperKeyword */) { forEach(typeArguments, checkSourceElement); @@ -70947,7 +70995,6 @@ function createTypeChecker(host) { const args = getEffectiveCallArguments(node); const isSingleNonGenericCandidate = candidates.length === 1 && !candidates[0].typeParameters; let argCheckMode = !isDecorator2 && !isSingleNonGenericCandidate && some(args, isContextSensitive) ? 4 /* SkipContextSensitive */ : 0 /* Normal */; - argCheckMode |= checkMode & 32 /* IsForStringLiteralArgumentCompletions */; let candidatesForArgumentError; let candidateForArgumentArityError; let candidateForTypeArgumentError; @@ -70965,6 +71012,9 @@ function createTypeChecker(host) { result = getCandidateForOverloadFailure(node, candidates, args, !!candidatesOutArray, checkMode); getNodeLinks(node).resolvedSignature = result; if (reportErrors2) { + if (!headMessage && isInstanceof) { + headMessage = Diagnostics.The_left_hand_side_of_an_instanceof_expression_must_be_assignable_to_the_first_argument_of_the_right_hand_side_s_Symbol_hasInstance_method; + } if (candidatesForArgumentError) { if (candidatesForArgumentError.length === 1 || candidatesForArgumentError.length > 3) { const last2 = candidatesForArgumentError[candidatesForArgumentError.length - 1]; @@ -71751,6 +71801,30 @@ function createTypeChecker(host) { } return resolveCall(node, signatures, candidatesOutArray, checkMode, 0 /* None */); } + function resolveInstanceofExpression(node, candidatesOutArray, checkMode) { + const rightType = checkExpression(node.right); + if (!isTypeAny(rightType)) { + const hasInstanceMethodType = getSymbolHasInstanceMethodOfObjectType(rightType); + if (hasInstanceMethodType) { + const apparentType = getApparentType(hasInstanceMethodType); + if (isErrorType(apparentType)) { + return resolveErrorCall(node); + } + const callSignatures = getSignaturesOfType(apparentType, 0 /* Call */); + const constructSignatures = getSignaturesOfType(apparentType, 1 /* Construct */); + if (isUntypedFunctionCall(hasInstanceMethodType, apparentType, callSignatures.length, constructSignatures.length)) { + return resolveUntypedCall(node); + } + if (callSignatures.length) { + return resolveCall(node, callSignatures, candidatesOutArray, checkMode, 0 /* None */); + } + } else if (!(typeHasCallOrConstructSignatures(rightType) || isTypeSubtypeOf(rightType, globalFunctionType))) { + error(node.right, Diagnostics.The_right_hand_side_of_an_instanceof_expression_must_be_either_of_type_any_a_class_function_or_other_type_assignable_to_the_Function_interface_type_or_an_object_type_with_a_Symbol_hasInstance_method); + return resolveErrorCall(node); + } + } + return anySignature; + } function isPotentiallyUncalledDecorator(decorator, signatures) { return signatures.length && every(signatures, (signature) => signature.minArgumentCount === 0 && !signatureHasRestParameter(signature) && signature.parameters.length < getDecoratorArgumentCount(decorator, signature)); } @@ -71767,6 +71841,8 @@ function createTypeChecker(host) { case 286 /* JsxOpeningElement */: case 285 /* JsxSelfClosingElement */: return resolveJsxOpeningLikeElement(node, candidatesOutArray, checkMode); + case 226 /* BinaryExpression */: + return resolveInstanceofExpression(node, candidatesOutArray, checkMode); } Debug.assertNever(node, "Branch in 'resolveSignature' should be unreachable."); } @@ -73725,16 +73801,35 @@ function createTypeChecker(host) { function isConstEnumSymbol(symbol) { return (symbol.flags & 128 /* ConstEnum */) !== 0; } - function checkInstanceOfExpression(left, right, leftType, rightType) { + function getSymbolHasInstanceMethodOfObjectType(type) { + const hasInstancePropertyName = getPropertyNameForKnownSymbolName("hasInstance"); + const hasInstanceProperty = getPropertyOfObjectType(type, hasInstancePropertyName); + if (hasInstanceProperty) { + const hasInstancePropertyType = getTypeOfSymbol(hasInstanceProperty); + if (hasInstancePropertyType && getSignaturesOfType(hasInstancePropertyType, 0 /* Call */).length !== 0) { + return hasInstancePropertyType; + } + } + } + function checkInstanceOfExpression(left, right, leftType, rightType, checkMode) { if (leftType === silentNeverType || rightType === silentNeverType) { return silentNeverType; } if (!isTypeAny(leftType) && allTypesAssignableToKind(leftType, 402784252 /* Primitive */)) { error(left, Diagnostics.The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_parameter); } - if (!(isTypeAny(rightType) || typeHasCallOrConstructSignatures(rightType) || isTypeSubtypeOf(rightType, globalFunctionType))) { - error(right, Diagnostics.The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_Function_interface_type); + Debug.assert(isInstanceOfExpression(left.parent)); + const signature = getResolvedSignature( + left.parent, + /*candidatesOutArray*/ + void 0, + checkMode + ); + if (signature === resolvingSignature) { + return silentNeverType; } + const returnType = getReturnTypeOfSignature(signature); + checkTypeAssignableTo(returnType, booleanType, right, Diagnostics.An_object_s_Symbol_hasInstance_method_must_return_a_boolean_value_for_it_to_be_used_on_the_right_hand_side_of_an_instanceof_expression); return booleanType; } function hasEmptyObjectIntersection(type) { @@ -74272,7 +74367,7 @@ function createTypeChecker(host) { case 36 /* ExclamationEqualsToken */: case 37 /* EqualsEqualsEqualsToken */: case 38 /* ExclamationEqualsEqualsToken */: - if (!(checkMode && checkMode & 128 /* TypeOnly */)) { + if (!(checkMode && checkMode & 64 /* TypeOnly */)) { if ((isLiteralExpressionOfObject(left) || isLiteralExpressionOfObject(right)) && // only report for === and !== in JS, not == or != (!isInJSFile(left) || (operator === 37 /* EqualsEqualsEqualsToken */ || operator === 38 /* ExclamationEqualsEqualsToken */))) { const eqType = operator === 35 /* EqualsEqualsToken */ || operator === 37 /* EqualsEqualsEqualsToken */; @@ -74283,7 +74378,7 @@ function createTypeChecker(host) { } return booleanType; case 104 /* InstanceOfKeyword */: - return checkInstanceOfExpression(left, right, leftType, rightType); + return checkInstanceOfExpression(left, right, leftType, rightType, checkMode); case 103 /* InKeyword */: return checkInExpression(left, right, leftType, rightType); case 56 /* AmpersandAmpersandToken */: @@ -74920,7 +75015,7 @@ function createTypeChecker(host) { } } const startInvocationCount = flowInvocationCount; - const type = checkExpression(node, 128 /* TypeOnly */); + const type = checkExpression(node, 64 /* TypeOnly */); if (flowInvocationCount !== startInvocationCount) { const cache = flowTypeCache || (flowTypeCache = []); cache[getNodeId(node)] = type; @@ -77386,7 +77481,7 @@ function createTypeChecker(host) { checkComputedPropertyName(node.propertyName); } const parent = node.parent.parent; - const parentCheckMode = node.dotDotDotToken ? 64 /* RestBindingElement */ : 0 /* Normal */; + const parentCheckMode = node.dotDotDotToken ? 32 /* RestBindingElement */ : 0 /* Normal */; const parentType = getTypeForBindingElementParent(parent, parentCheckMode); const name = node.propertyName || node.name; if (parentType && !isBindingPattern(name)) { @@ -79603,7 +79698,7 @@ function createTypeChecker(host) { } if (isConstantVariable(symbol)) { const declaration = symbol.valueDeclaration; - if (declaration && !declaration.type && declaration.initializer && (!location || declaration !== location && isBlockScopedNameDeclaredBeforeUse(declaration, location))) { + if (declaration && isVariableDeclaration(declaration) && !declaration.type && declaration.initializer && (!location || declaration !== location && isBlockScopedNameDeclaredBeforeUse(declaration, location))) { return evaluate(declaration.initializer, declaration); } } @@ -80695,6 +80790,12 @@ function createTypeChecker(host) { case 234 /* AsExpression */: case 217 /* ParenthesizedExpression */: checkAssertionDeferred(node); + break; + case 226 /* BinaryExpression */: + if (isInstanceOfExpression(node)) { + resolveUntypedCall(node); + } + break; } currentNode = saveCurrentNode; (_b = tracing) == null ? void 0 : _b.pop(); @@ -81311,6 +81412,13 @@ function createTypeChecker(host) { case 102 /* ImportKeyword */: case 105 /* NewKeyword */: return isMetaProperty(node.parent) ? checkMetaPropertyKeyword(node.parent).symbol : void 0; + case 104 /* InstanceOfKeyword */: + if (isBinaryExpression(node.parent)) { + const type = getTypeOfExpression(node.parent.right); + const hasInstanceMethodType = getSymbolHasInstanceMethodOfObjectType(type); + return (hasInstanceMethodType == null ? void 0 : hasInstanceMethodType.symbol) ?? type.symbol; + } + return void 0; case 236 /* MetaProperty */: return checkExpression(node).symbol; case 295 /* JsxNamespacedName */: diff --git a/lib/tsserver.js b/lib/tsserver.js index 269d478654b86..01baa73140352 100644 --- a/lib/tsserver.js +++ b/lib/tsserver.js @@ -61,7 +61,6 @@ __export(server_exports, { ConfigFileProgramReloadLevel: () => ConfigFileProgramReloadLevel, ContainerFlags: () => ContainerFlags, ContextFlags: () => ContextFlags, - CoreServicesShimHostAdapter: () => CoreServicesShimHostAdapter, Debug: () => Debug, DiagnosticCategory: () => DiagnosticCategory, Diagnostics: () => Diagnostics, @@ -110,7 +109,6 @@ __export(server_exports, { JsxFlags: () => JsxFlags, JsxReferenceKind: () => JsxReferenceKind, LanguageServiceMode: () => LanguageServiceMode, - LanguageServiceShimHostAdapter: () => LanguageServiceShimHostAdapter, LanguageVariant: () => LanguageVariant, LexicalEnvironmentFlags: () => LexicalEnvironmentFlags, ListFormat: () => ListFormat, @@ -184,7 +182,6 @@ __export(server_exports, { TypeMapKind: () => TypeMapKind, TypePredicateKind: () => TypePredicateKind, TypeReferenceSerializationKind: () => TypeReferenceSerializationKind, - TypeScriptServicesFactory: () => TypeScriptServicesFactory, UnionReduction: () => UnionReduction, UpToDateStatusType: () => UpToDateStatusType, VarianceFlags: () => VarianceFlags, @@ -1256,7 +1253,7 @@ __export(server_exports, { isClassDeclaration: () => isClassDeclaration, isClassElement: () => isClassElement, isClassExpression: () => isClassExpression, - isClassFieldAndNotAutoAccessor: () => isClassFieldAndNotAutoAccessor, + isClassInstanceProperty: () => isClassInstanceProperty, isClassLike: () => isClassLike, isClassMemberModifier: () => isClassMemberModifier, isClassNamedEvaluationHelperBlock: () => isClassNamedEvaluationHelperBlock, @@ -1447,6 +1444,7 @@ __export(server_exports, { isInsideJsxElementOrAttribute: () => isInsideJsxElementOrAttribute, isInsideNodeModules: () => isInsideNodeModules, isInsideTemplateLiteral: () => isInsideTemplateLiteral, + isInstanceOfExpression: () => isInstanceOfExpression, isInstantiatedModule: () => isInstantiatedModule, isInterfaceDeclaration: () => isInterfaceDeclaration, isInternalDeclaration: () => isInternalDeclaration, @@ -1704,6 +1702,7 @@ __export(server_exports, { isReturnStatement: () => isReturnStatement, isReturnStatementWithFixablePromiseHandler: () => isReturnStatementWithFixablePromiseHandler, isRightSideOfAccessExpression: () => isRightSideOfAccessExpression, + isRightSideOfInstanceofExpression: () => isRightSideOfInstanceofExpression, isRightSideOfPropertyAccess: () => isRightSideOfPropertyAccess, isRightSideOfQualifiedName: () => isRightSideOfQualifiedName, isRightSideOfQualifiedNameOrPropertyAccess: () => isRightSideOfQualifiedNameOrPropertyAccess, @@ -2028,7 +2027,6 @@ __export(server_exports, { readJson: () => readJson, readJsonConfigFile: () => readJsonConfigFile, readJsonOrUndefined: () => readJsonOrUndefined, - realizeDiagnostics: () => realizeDiagnostics, reduceEachLeadingCommentRange: () => reduceEachLeadingCommentRange, reduceEachTrailingCommentRange: () => reduceEachTrailingCommentRange, reduceLeft: () => reduceLeft, @@ -7427,12 +7425,12 @@ var commentPragmas = { kind: 4 /* MultiLine */ } }; -var JSDocParsingMode = /* @__PURE__ */ ((JSDocParsingMode7) => { - JSDocParsingMode7[JSDocParsingMode7["ParseAll"] = 0] = "ParseAll"; - JSDocParsingMode7[JSDocParsingMode7["ParseNone"] = 1] = "ParseNone"; - JSDocParsingMode7[JSDocParsingMode7["ParseForTypeErrors"] = 2] = "ParseForTypeErrors"; - JSDocParsingMode7[JSDocParsingMode7["ParseForTypeInfo"] = 3] = "ParseForTypeInfo"; - return JSDocParsingMode7; +var JSDocParsingMode = /* @__PURE__ */ ((JSDocParsingMode6) => { + JSDocParsingMode6[JSDocParsingMode6["ParseAll"] = 0] = "ParseAll"; + JSDocParsingMode6[JSDocParsingMode6["ParseNone"] = 1] = "ParseNone"; + JSDocParsingMode6[JSDocParsingMode6["ParseForTypeErrors"] = 2] = "ParseForTypeErrors"; + JSDocParsingMode6[JSDocParsingMode6["ParseForTypeInfo"] = 3] = "ParseForTypeInfo"; + return JSDocParsingMode6; })(JSDocParsingMode || {}); // src/compiler/sys.ts @@ -9732,7 +9730,7 @@ var Diagnostics = { An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type: diag(2356, 1 /* Error */, "An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type_2356", "An arithmetic operand must be of type 'any', 'number', 'bigint' or an enum type."), The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access: diag(2357, 1 /* Error */, "The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access_2357", "The operand of an increment or decrement operator must be a variable or a property access."), The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_parameter: diag(2358, 1 /* Error */, "The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_paramete_2358", "The left-hand side of an 'instanceof' expression must be of type 'any', an object type or a type parameter."), - The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_Function_interface_type: diag(2359, 1 /* Error */, "The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_F_2359", "The right-hand side of an 'instanceof' expression must be of type 'any' or of a type assignable to the 'Function' interface type."), + The_right_hand_side_of_an_instanceof_expression_must_be_either_of_type_any_a_class_function_or_other_type_assignable_to_the_Function_interface_type_or_an_object_type_with_a_Symbol_hasInstance_method: diag(2359, 1 /* Error */, "The_right_hand_side_of_an_instanceof_expression_must_be_either_of_type_any_a_class_function_or_other_2359", "The right-hand side of an 'instanceof' expression must be either of type 'any', a class, function, or other type assignable to the 'Function' interface type, or an object type with a 'Symbol.hasInstance' method."), The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type: diag(2362, 1 /* Error */, "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2362", "The left-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type."), The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type: diag(2363, 1 /* Error */, "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2363", "The right-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type."), The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access: diag(2364, 1 /* Error */, "The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access_2364", "The left-hand side of an assignment expression must be a variable or a property access."), @@ -10181,6 +10179,8 @@ var Diagnostics = { Import_attributes_cannot_be_used_with_type_only_imports_or_exports: diag(2857, 1 /* Error */, "Import_attributes_cannot_be_used_with_type_only_imports_or_exports_2857", "Import attributes cannot be used with type-only imports or exports."), Import_attribute_values_must_be_string_literal_expressions: diag(2858, 1 /* Error */, "Import_attribute_values_must_be_string_literal_expressions_2858", "Import attribute values must be string literal expressions."), Excessive_complexity_comparing_types_0_and_1: diag(2859, 1 /* Error */, "Excessive_complexity_comparing_types_0_and_1_2859", "Excessive complexity comparing types '{0}' and '{1}'."), + The_left_hand_side_of_an_instanceof_expression_must_be_assignable_to_the_first_argument_of_the_right_hand_side_s_Symbol_hasInstance_method: diag(2860, 1 /* Error */, "The_left_hand_side_of_an_instanceof_expression_must_be_assignable_to_the_first_argument_of_the_right_2860", "The left-hand side of an 'instanceof' expression must be assignable to the first argument of the right-hand side's '[Symbol.hasInstance]' method."), + An_object_s_Symbol_hasInstance_method_must_return_a_boolean_value_for_it_to_be_used_on_the_right_hand_side_of_an_instanceof_expression: diag(2861, 1 /* Error */, "An_object_s_Symbol_hasInstance_method_must_return_a_boolean_value_for_it_to_be_used_on_the_right_han_2861", "An object's '[Symbol.hasInstance]' method must return a boolean value for it to be used on the right-hand side of an 'instanceof' expression."), Import_declaration_0_is_using_private_name_1: diag(4e3, 1 /* Error */, "Import_declaration_0_is_using_private_name_1_4000", "Import declaration '{0}' is using private name '{1}'."), Type_parameter_0_of_exported_class_has_or_is_using_private_name_1: diag(4002, 1 /* Error */, "Type_parameter_0_of_exported_class_has_or_is_using_private_name_1_4002", "Type parameter '{0}' of exported class has or is using private name '{1}'."), Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1: diag(4004, 1 /* Error */, "Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1_4004", "Type parameter '{0}' of exported interface has or is using private name '{1}'."), @@ -14486,7 +14486,14 @@ function isAccessor(node) { function isAutoAccessorPropertyDeclaration(node) { return isPropertyDeclaration(node) && hasAccessorModifier(node); } -function isClassFieldAndNotAutoAccessor(node) { +function isClassInstanceProperty(node) { + if (isInJSFile(node) && isExpandoPropertyDeclaration(node)) { + return (!isBindableStaticAccessExpression(node) || !isPrototypeAccess(node.expression)) && !isBindableStaticNameExpression( + node, + /*excludeThisKeyword*/ + true + ); + } return node.parent && isClassLike(node.parent) && isPropertyDeclaration(node) && !hasAccessorModifier(node); } function isMethodOrAccessor(node) { @@ -16919,6 +16926,8 @@ function getInvokedExpression(node) { case 286 /* JsxOpeningElement */: case 285 /* JsxSelfClosingElement */: return node.tagName; + case 226 /* BinaryExpression */: + return node.right; default: return node.expression; } @@ -19575,6 +19584,12 @@ function isRightSideOfAccessExpression(node) { function isRightSideOfQualifiedNameOrPropertyAccessOrJSDocMemberName(node) { return isQualifiedName(node.parent) && node.parent.right === node || isPropertyAccessExpression(node.parent) && node.parent.name === node || isJSDocMemberName(node.parent) && node.parent.right === node; } +function isInstanceOfExpression(node) { + return isBinaryExpression(node) && node.operatorToken.kind === 104 /* InstanceOfKeyword */; +} +function isRightSideOfInstanceofExpression(node) { + return isInstanceOfExpression(node.parent) && node === node.parent.right; +} function isEmptyObjectLiteral(expression) { return expression.kind === 210 /* ObjectLiteralExpression */ && expression.properties.length === 0; } @@ -47783,9 +47798,8 @@ var CheckMode = /* @__PURE__ */ ((CheckMode3) => { CheckMode3[CheckMode3["SkipContextSensitive"] = 4] = "SkipContextSensitive"; CheckMode3[CheckMode3["SkipGenericFunctions"] = 8] = "SkipGenericFunctions"; CheckMode3[CheckMode3["IsForSignatureHelp"] = 16] = "IsForSignatureHelp"; - CheckMode3[CheckMode3["IsForStringLiteralArgumentCompletions"] = 32] = "IsForStringLiteralArgumentCompletions"; - CheckMode3[CheckMode3["RestBindingElement"] = 64] = "RestBindingElement"; - CheckMode3[CheckMode3["TypeOnly"] = 128] = "TypeOnly"; + CheckMode3[CheckMode3["RestBindingElement"] = 32] = "RestBindingElement"; + CheckMode3[CheckMode3["TypeOnly"] = 64] = "TypeOnly"; return CheckMode3; })(CheckMode || {}); var SignatureCheckMode = /* @__PURE__ */ ((SignatureCheckMode3) => { @@ -48272,7 +48286,7 @@ function createTypeChecker(host) { candidates, /*argumentCount*/ void 0, - 32 /* IsForStringLiteralArgumentCompletions */ + 0 /* Normal */ )); for (const candidate of candidates) { candidatesSet.add(candidate); @@ -56307,7 +56321,7 @@ function createTypeChecker(host) { return type.flags & (128 /* StringLiteral */ | 256 /* NumberLiteral */) ? "" + type.value : void 0; } function getTypeForBindingElement(declaration) { - const checkMode = declaration.dotDotDotToken ? 64 /* RestBindingElement */ : 0 /* Normal */; + const checkMode = declaration.dotDotDotToken ? 32 /* RestBindingElement */ : 0 /* Normal */; const parentType = getTypeForBindingElementParent(declaration.parent.parent, checkMode); return parentType && getBindingElementTypeFromParentType( declaration, @@ -68474,7 +68488,7 @@ function createTypeChecker(host) { if (!couldContainTypeVariables(target)) { return; } - if (source === wildcardType) { + if (source === wildcardType || source === blockedStringType) { const savePropagationType = propagationType; propagationType = source; inferFromTypes(target, target); @@ -68531,6 +68545,10 @@ function createTypeChecker(host) { return; } if (!inference.isFixed) { + const candidate = propagationType || source; + if (candidate === blockedStringType) { + return; + } if (inference.priority === void 0 || priority < inference.priority) { inference.candidates = void 0; inference.contraCandidates = void 0; @@ -68538,7 +68556,6 @@ function createTypeChecker(host) { inference.priority = priority; } if (priority === inference.priority) { - const candidate = propagationType || source; if (contravariant && !bivariant) { if (!contains(inference.contraCandidates, candidate)) { inference.contraCandidates = append(inference.contraCandidates, candidate); @@ -69110,7 +69127,7 @@ function createTypeChecker(host) { const constraint = getConstraintOfTypeParameter(inference.typeParameter); if (constraint) { const instantiatedConstraint = instantiateType(constraint, context.nonFixingMapper); - if (!inferredType || inferredType === blockedStringType || !context.compareTypes(inferredType, getTypeWithThisArgument(instantiatedConstraint, inferredType))) { + if (!inferredType || !context.compareTypes(inferredType, getTypeWithThisArgument(instantiatedConstraint, inferredType))) { inference.inferredType = fallbackType && context.compareTypes(fallbackType, getTypeWithThisArgument(instantiatedConstraint, fallbackType)) ? fallbackType : instantiatedConstraint; } } @@ -69961,7 +69978,10 @@ function createTypeChecker(host) { let signature = links.effectsSignature; if (signature === void 0) { let funcType; - if (node.parent.kind === 244 /* ExpressionStatement */) { + if (isBinaryExpression(node)) { + const rightType = checkNonNullExpression(node.right); + funcType = getSymbolHasInstanceMethodOfObjectType(rightType); + } else if (node.parent.kind === 244 /* ExpressionStatement */) { funcType = getTypeOfDottedName( node.expression, /*diagnostic*/ @@ -70985,7 +71005,22 @@ function createTypeChecker(host) { } return type; } - const rightType = getTypeOfExpression(expr.right); + const right = expr.right; + const rightType = getTypeOfExpression(right); + if (!isTypeDerivedFrom(rightType, globalObjectType)) { + return type; + } + const signature = getEffectsSignature(expr); + const predicate = signature && getTypePredicateOfSignature(signature); + if (predicate && predicate.kind === 1 /* Identifier */ && predicate.parameterIndex === 0) { + return getNarrowedType( + type, + predicate.type, + assumeTrue, + /*checkDerived*/ + true + ); + } if (!isTypeDerivedFrom(rightType, globalFunctionType)) { return type; } @@ -71237,7 +71272,7 @@ function createTypeChecker(host) { return type.flags & 2097152 /* Intersection */ ? some(type.types, isGenericTypeWithoutNullableConstraint) : !!(type.flags & 465829888 /* Instantiable */ && !maybeTypeOfKind(getBaseConstraintOrType(type), 98304 /* Nullable */)); } function hasContextualTypeWithNoGenericTypes(node, checkMode) { - const contextualType = (isIdentifier(node) || isPropertyAccessExpression(node) || isElementAccessExpression(node)) && !((isJsxOpeningElement(node.parent) || isJsxSelfClosingElement(node.parent)) && node.parent.tagName === node) && (checkMode && checkMode & 64 /* RestBindingElement */ ? getContextualType2(node, 8 /* SkipBindingPatterns */) : getContextualType2( + const contextualType = (isIdentifier(node) || isPropertyAccessExpression(node) || isElementAccessExpression(node)) && !((isJsxOpeningElement(node.parent) || isJsxSelfClosingElement(node.parent)) && node.parent.tagName === node) && (checkMode && checkMode & 32 /* RestBindingElement */ ? getContextualType2(node, 8 /* SkipBindingPatterns */) : getContextualType2( node, /*contextFlags*/ void 0 @@ -71997,7 +72032,7 @@ function createTypeChecker(host) { function getContextualTypeForBindingElement(declaration, contextFlags) { const parent2 = declaration.parent.parent; const name = declaration.propertyName || declaration.name; - const parentType = getContextualTypeForVariableLikeDeclaration(parent2, contextFlags) || parent2.kind !== 208 /* BindingElement */ && parent2.initializer && checkDeclarationInitializer(parent2, declaration.dotDotDotToken ? 64 /* RestBindingElement */ : 0 /* Normal */); + const parentType = getContextualTypeForVariableLikeDeclaration(parent2, contextFlags) || parent2.kind !== 208 /* BindingElement */ && parent2.initializer && checkDeclarationInitializer(parent2, declaration.dotDotDotToken ? 32 /* RestBindingElement */ : 0 /* Normal */); if (!parentType || isBindingPattern(name) || isComputedNonLiteralName(name)) return void 0; if (parent2.name.kind === 207 /* ArrayBindingPattern */) { @@ -73980,7 +74015,7 @@ function createTypeChecker(host) { } return false; } - if (!(flags & 32 /* Static */) && ((_a = prop.declarations) == null ? void 0 : _a.some(isClassFieldAndNotAutoAccessor))) { + if (!(flags & 32 /* Static */) && ((_a = prop.declarations) == null ? void 0 : _a.some(isClassInstanceProperty))) { if (errorNode) { error2(errorNode, Diagnostics.Class_field_0_defined_by_the_parent_class_is_not_accessible_in_the_child_class_via_super, symbolToString(prop)); } @@ -74843,7 +74878,9 @@ function createTypeChecker(host) { checkExpression(node.template); } else if (isJsxOpeningLikeElement(node)) { checkExpression(node.attributes); - } else if (node.kind !== 170 /* Decorator */) { + } else if (isBinaryExpression(node)) { + checkExpression(node.left); + } else if (isCallOrNewExpression(node)) { forEach(node.arguments, (argument) => { checkExpression(argument); }); @@ -74916,6 +74953,8 @@ function createTypeChecker(host) { } } else if (node.kind === 170 /* Decorator */) { argCount = getDecoratorArgumentCount(node, signature); + } else if (node.kind === 226 /* BinaryExpression */) { + argCount = 1; } else if (isJsxOpeningLikeElement(node)) { callIsIncomplete = node.attributes.end === node.end; if (callIsIncomplete) { @@ -75015,13 +75054,13 @@ function createTypeChecker(host) { return voidType; } const thisArgumentType = checkExpression(thisArgumentNode); - return isOptionalChainRoot(thisArgumentNode.parent) ? getNonNullableType(thisArgumentType) : isOptionalChain(thisArgumentNode.parent) ? removeOptionalTypeMarker(thisArgumentType) : thisArgumentType; + return isRightSideOfInstanceofExpression(thisArgumentNode) ? thisArgumentType : isOptionalChainRoot(thisArgumentNode.parent) ? getNonNullableType(thisArgumentType) : isOptionalChain(thisArgumentNode.parent) ? removeOptionalTypeMarker(thisArgumentType) : thisArgumentType; } function inferTypeArguments(node, signature, args, checkMode, context) { if (isJsxOpeningLikeElement(node)) { return inferJsxTypeArguments(node, signature, checkMode, context); } - if (node.kind !== 170 /* Decorator */) { + if (node.kind !== 170 /* Decorator */ && node.kind !== 226 /* BinaryExpression */) { const skipBindingPatterns = every(signature.typeParameters, (p) => !!getDefaultFromTypeParameter(p)); const contextualType = getContextualType2(node, skipBindingPatterns ? 8 /* SkipBindingPatterns */ : 0 /* None */); if (contextualType) { @@ -75058,7 +75097,7 @@ function createTypeChecker(host) { } for (let i = 0; i < argCount; i++) { const arg = args[i]; - if (arg.kind !== 232 /* OmittedExpression */ && !(checkMode & 32 /* IsForStringLiteralArgumentCompletions */ && hasSkipDirectInferenceFlag(arg))) { + if (arg.kind !== 232 /* OmittedExpression */) { const paramType = getTypeAtPosition(signature, i); if (couldContainTypeVariables(paramType)) { const argType = checkExpressionWithContextualType(arg, paramType, context, checkMode); @@ -75350,6 +75389,9 @@ function createTypeChecker(host) { } } function getThisArgumentOfCall(node) { + if (node.kind === 226 /* BinaryExpression */) { + return node.right; + } const expression = node.kind === 213 /* CallExpression */ ? node.expression : node.kind === 215 /* TaggedTemplateExpression */ ? node.tag : node.kind === 170 /* Decorator */ && !legacyDecorators ? node.expression : void 0; if (expression) { const callee = skipOuterExpressions(expression); @@ -75378,6 +75420,9 @@ function createTypeChecker(host) { if (node.kind === 170 /* Decorator */) { return getEffectiveDecoratorArguments(node); } + if (node.kind === 226 /* BinaryExpression */) { + return [node.left]; + } if (isJsxOpeningLikeElement(node)) { return node.attributes.properties.length > 0 || isJsxOpeningElement(node) && node.parent.children.length > 0 ? [node.attributes] : emptyArray; } @@ -75647,9 +75692,10 @@ function createTypeChecker(host) { const isTaggedTemplate = node.kind === 215 /* TaggedTemplateExpression */; const isDecorator2 = node.kind === 170 /* Decorator */; const isJsxOpeningOrSelfClosingElement = isJsxOpeningLikeElement(node); + const isInstanceof = node.kind === 226 /* BinaryExpression */; const reportErrors2 = !isInferencePartiallyBlocked && !candidatesOutArray; let typeArguments; - if (!isDecorator2 && !isSuperCall(node)) { + if (!isDecorator2 && !isInstanceof && !isSuperCall(node)) { typeArguments = node.typeArguments; if (isTaggedTemplate || isJsxOpeningOrSelfClosingElement || node.expression.kind !== 108 /* SuperKeyword */) { forEach(typeArguments, checkSourceElement); @@ -75661,7 +75707,6 @@ function createTypeChecker(host) { const args = getEffectiveCallArguments(node); const isSingleNonGenericCandidate = candidates.length === 1 && !candidates[0].typeParameters; let argCheckMode = !isDecorator2 && !isSingleNonGenericCandidate && some(args, isContextSensitive) ? 4 /* SkipContextSensitive */ : 0 /* Normal */; - argCheckMode |= checkMode & 32 /* IsForStringLiteralArgumentCompletions */; let candidatesForArgumentError; let candidateForArgumentArityError; let candidateForTypeArgumentError; @@ -75679,6 +75724,9 @@ function createTypeChecker(host) { result = getCandidateForOverloadFailure(node, candidates, args, !!candidatesOutArray, checkMode); getNodeLinks(node).resolvedSignature = result; if (reportErrors2) { + if (!headMessage && isInstanceof) { + headMessage = Diagnostics.The_left_hand_side_of_an_instanceof_expression_must_be_assignable_to_the_first_argument_of_the_right_hand_side_s_Symbol_hasInstance_method; + } if (candidatesForArgumentError) { if (candidatesForArgumentError.length === 1 || candidatesForArgumentError.length > 3) { const last2 = candidatesForArgumentError[candidatesForArgumentError.length - 1]; @@ -76465,6 +76513,30 @@ function createTypeChecker(host) { } return resolveCall(node, signatures, candidatesOutArray, checkMode, 0 /* None */); } + function resolveInstanceofExpression(node, candidatesOutArray, checkMode) { + const rightType = checkExpression(node.right); + if (!isTypeAny(rightType)) { + const hasInstanceMethodType = getSymbolHasInstanceMethodOfObjectType(rightType); + if (hasInstanceMethodType) { + const apparentType = getApparentType(hasInstanceMethodType); + if (isErrorType(apparentType)) { + return resolveErrorCall(node); + } + const callSignatures = getSignaturesOfType(apparentType, 0 /* Call */); + const constructSignatures = getSignaturesOfType(apparentType, 1 /* Construct */); + if (isUntypedFunctionCall(hasInstanceMethodType, apparentType, callSignatures.length, constructSignatures.length)) { + return resolveUntypedCall(node); + } + if (callSignatures.length) { + return resolveCall(node, callSignatures, candidatesOutArray, checkMode, 0 /* None */); + } + } else if (!(typeHasCallOrConstructSignatures(rightType) || isTypeSubtypeOf(rightType, globalFunctionType))) { + error2(node.right, Diagnostics.The_right_hand_side_of_an_instanceof_expression_must_be_either_of_type_any_a_class_function_or_other_type_assignable_to_the_Function_interface_type_or_an_object_type_with_a_Symbol_hasInstance_method); + return resolveErrorCall(node); + } + } + return anySignature; + } function isPotentiallyUncalledDecorator(decorator, signatures) { return signatures.length && every(signatures, (signature) => signature.minArgumentCount === 0 && !signatureHasRestParameter(signature) && signature.parameters.length < getDecoratorArgumentCount(decorator, signature)); } @@ -76481,6 +76553,8 @@ function createTypeChecker(host) { case 286 /* JsxOpeningElement */: case 285 /* JsxSelfClosingElement */: return resolveJsxOpeningLikeElement(node, candidatesOutArray, checkMode); + case 226 /* BinaryExpression */: + return resolveInstanceofExpression(node, candidatesOutArray, checkMode); } Debug.assertNever(node, "Branch in 'resolveSignature' should be unreachable."); } @@ -78439,16 +78513,35 @@ function createTypeChecker(host) { function isConstEnumSymbol(symbol) { return (symbol.flags & 128 /* ConstEnum */) !== 0; } - function checkInstanceOfExpression(left, right, leftType, rightType) { + function getSymbolHasInstanceMethodOfObjectType(type) { + const hasInstancePropertyName = getPropertyNameForKnownSymbolName("hasInstance"); + const hasInstanceProperty = getPropertyOfObjectType(type, hasInstancePropertyName); + if (hasInstanceProperty) { + const hasInstancePropertyType = getTypeOfSymbol(hasInstanceProperty); + if (hasInstancePropertyType && getSignaturesOfType(hasInstancePropertyType, 0 /* Call */).length !== 0) { + return hasInstancePropertyType; + } + } + } + function checkInstanceOfExpression(left, right, leftType, rightType, checkMode) { if (leftType === silentNeverType || rightType === silentNeverType) { return silentNeverType; } if (!isTypeAny(leftType) && allTypesAssignableToKind(leftType, 402784252 /* Primitive */)) { error2(left, Diagnostics.The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_parameter); } - if (!(isTypeAny(rightType) || typeHasCallOrConstructSignatures(rightType) || isTypeSubtypeOf(rightType, globalFunctionType))) { - error2(right, Diagnostics.The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_Function_interface_type); + Debug.assert(isInstanceOfExpression(left.parent)); + const signature = getResolvedSignature( + left.parent, + /*candidatesOutArray*/ + void 0, + checkMode + ); + if (signature === resolvingSignature) { + return silentNeverType; } + const returnType = getReturnTypeOfSignature(signature); + checkTypeAssignableTo(returnType, booleanType, right, Diagnostics.An_object_s_Symbol_hasInstance_method_must_return_a_boolean_value_for_it_to_be_used_on_the_right_hand_side_of_an_instanceof_expression); return booleanType; } function hasEmptyObjectIntersection(type) { @@ -78986,7 +79079,7 @@ function createTypeChecker(host) { case 36 /* ExclamationEqualsToken */: case 37 /* EqualsEqualsEqualsToken */: case 38 /* ExclamationEqualsEqualsToken */: - if (!(checkMode && checkMode & 128 /* TypeOnly */)) { + if (!(checkMode && checkMode & 64 /* TypeOnly */)) { if ((isLiteralExpressionOfObject(left) || isLiteralExpressionOfObject(right)) && // only report for === and !== in JS, not == or != (!isInJSFile(left) || (operator === 37 /* EqualsEqualsEqualsToken */ || operator === 38 /* ExclamationEqualsEqualsToken */))) { const eqType = operator === 35 /* EqualsEqualsToken */ || operator === 37 /* EqualsEqualsEqualsToken */; @@ -78997,7 +79090,7 @@ function createTypeChecker(host) { } return booleanType; case 104 /* InstanceOfKeyword */: - return checkInstanceOfExpression(left, right, leftType, rightType); + return checkInstanceOfExpression(left, right, leftType, rightType, checkMode); case 103 /* InKeyword */: return checkInExpression(left, right, leftType, rightType); case 56 /* AmpersandAmpersandToken */: @@ -79634,7 +79727,7 @@ function createTypeChecker(host) { } } const startInvocationCount = flowInvocationCount; - const type = checkExpression(node, 128 /* TypeOnly */); + const type = checkExpression(node, 64 /* TypeOnly */); if (flowInvocationCount !== startInvocationCount) { const cache = flowTypeCache || (flowTypeCache = []); cache[getNodeId(node)] = type; @@ -82100,7 +82193,7 @@ function createTypeChecker(host) { checkComputedPropertyName(node.propertyName); } const parent2 = node.parent.parent; - const parentCheckMode = node.dotDotDotToken ? 64 /* RestBindingElement */ : 0 /* Normal */; + const parentCheckMode = node.dotDotDotToken ? 32 /* RestBindingElement */ : 0 /* Normal */; const parentType = getTypeForBindingElementParent(parent2, parentCheckMode); const name = node.propertyName || node.name; if (parentType && !isBindingPattern(name)) { @@ -84317,7 +84410,7 @@ function createTypeChecker(host) { } if (isConstantVariable(symbol)) { const declaration = symbol.valueDeclaration; - if (declaration && !declaration.type && declaration.initializer && (!location || declaration !== location && isBlockScopedNameDeclaredBeforeUse(declaration, location))) { + if (declaration && isVariableDeclaration(declaration) && !declaration.type && declaration.initializer && (!location || declaration !== location && isBlockScopedNameDeclaredBeforeUse(declaration, location))) { return evaluate(declaration.initializer, declaration); } } @@ -85409,6 +85502,12 @@ function createTypeChecker(host) { case 234 /* AsExpression */: case 217 /* ParenthesizedExpression */: checkAssertionDeferred(node); + break; + case 226 /* BinaryExpression */: + if (isInstanceOfExpression(node)) { + resolveUntypedCall(node); + } + break; } currentNode = saveCurrentNode; (_b = tracing) == null ? void 0 : _b.pop(); @@ -86025,6 +86124,13 @@ function createTypeChecker(host) { case 102 /* ImportKeyword */: case 105 /* NewKeyword */: return isMetaProperty(node.parent) ? checkMetaPropertyKeyword(node.parent).symbol : void 0; + case 104 /* InstanceOfKeyword */: + if (isBinaryExpression(node.parent)) { + const type = getTypeOfExpression(node.parent.right); + const hasInstanceMethodType = getSymbolHasInstanceMethodOfObjectType(type); + return (hasInstanceMethodType == null ? void 0 : hasInstanceMethodType.symbol) ?? type.symbol; + } + return void 0; case 236 /* MetaProperty */: return checkExpression(node).symbol; case 295 /* JsxNamespacedName */: @@ -130495,10 +130601,10 @@ var LanguageServiceMode = /* @__PURE__ */ ((LanguageServiceMode2) => { return LanguageServiceMode2; })(LanguageServiceMode || {}); var emptyOptions = {}; -var SemanticClassificationFormat = /* @__PURE__ */ ((SemanticClassificationFormat3) => { - SemanticClassificationFormat3["Original"] = "original"; - SemanticClassificationFormat3["TwentyTwenty"] = "2020"; - return SemanticClassificationFormat3; +var SemanticClassificationFormat = /* @__PURE__ */ ((SemanticClassificationFormat2) => { + SemanticClassificationFormat2["Original"] = "original"; + SemanticClassificationFormat2["TwentyTwenty"] = "2020"; + return SemanticClassificationFormat2; })(SemanticClassificationFormat || {}); var OrganizeImportsMode = /* @__PURE__ */ ((OrganizeImportsMode3) => { OrganizeImportsMode3["All"] = "All"; @@ -130615,15 +130721,15 @@ var OutputFileType = /* @__PURE__ */ ((OutputFileType2) => { OutputFileType2[OutputFileType2["Declaration"] = 2] = "Declaration"; return OutputFileType2; })(OutputFileType || {}); -var EndOfLineState = /* @__PURE__ */ ((EndOfLineState3) => { - EndOfLineState3[EndOfLineState3["None"] = 0] = "None"; - EndOfLineState3[EndOfLineState3["InMultiLineCommentTrivia"] = 1] = "InMultiLineCommentTrivia"; - EndOfLineState3[EndOfLineState3["InSingleQuoteStringLiteral"] = 2] = "InSingleQuoteStringLiteral"; - EndOfLineState3[EndOfLineState3["InDoubleQuoteStringLiteral"] = 3] = "InDoubleQuoteStringLiteral"; - EndOfLineState3[EndOfLineState3["InTemplateHeadOrNoSubstitutionTemplate"] = 4] = "InTemplateHeadOrNoSubstitutionTemplate"; - EndOfLineState3[EndOfLineState3["InTemplateMiddleOrTail"] = 5] = "InTemplateMiddleOrTail"; - EndOfLineState3[EndOfLineState3["InTemplateSubstitutionPosition"] = 6] = "InTemplateSubstitutionPosition"; - return EndOfLineState3; +var EndOfLineState = /* @__PURE__ */ ((EndOfLineState2) => { + EndOfLineState2[EndOfLineState2["None"] = 0] = "None"; + EndOfLineState2[EndOfLineState2["InMultiLineCommentTrivia"] = 1] = "InMultiLineCommentTrivia"; + EndOfLineState2[EndOfLineState2["InSingleQuoteStringLiteral"] = 2] = "InSingleQuoteStringLiteral"; + EndOfLineState2[EndOfLineState2["InDoubleQuoteStringLiteral"] = 3] = "InDoubleQuoteStringLiteral"; + EndOfLineState2[EndOfLineState2["InTemplateHeadOrNoSubstitutionTemplate"] = 4] = "InTemplateHeadOrNoSubstitutionTemplate"; + EndOfLineState2[EndOfLineState2["InTemplateMiddleOrTail"] = 5] = "InTemplateMiddleOrTail"; + EndOfLineState2[EndOfLineState2["InTemplateSubstitutionPosition"] = 6] = "InTemplateSubstitutionPosition"; + return EndOfLineState2; })(EndOfLineState || {}); var TokenClass = /* @__PURE__ */ ((TokenClass2) => { TokenClass2[TokenClass2["Punctuation"] = 0] = "Punctuation"; @@ -145432,926 +145538,6 @@ function transform(source, transformers, compilerOptions) { return result; } -// src/services/shims.ts -var debugObjectHost = function() { - return this; -}(); -function logInternalError(logger, err) { - if (logger) { - logger.log("*INTERNAL ERROR* - Exception in typescript services: " + err.message); - } -} -var ScriptSnapshotShimAdapter = class { - constructor(scriptSnapshotShim) { - this.scriptSnapshotShim = scriptSnapshotShim; - } - getText(start2, end) { - return this.scriptSnapshotShim.getText(start2, end); - } - getLength() { - return this.scriptSnapshotShim.getLength(); - } - getChangeRange(oldSnapshot) { - const oldSnapshotShim = oldSnapshot; - const encoded = this.scriptSnapshotShim.getChangeRange(oldSnapshotShim.scriptSnapshotShim); - if (encoded === null) { - return null; - } - const decoded = JSON.parse(encoded); - return createTextChangeRange( - createTextSpan(decoded.span.start, decoded.span.length), - decoded.newLength - ); - } - dispose() { - if ("dispose" in this.scriptSnapshotShim) { - this.scriptSnapshotShim.dispose(); - } - } -}; -var LanguageServiceShimHostAdapter = class { - constructor(shimHost) { - this.shimHost = shimHost; - this.loggingEnabled = false; - this.tracingEnabled = false; - if ("getModuleResolutionsForFile" in this.shimHost) { - this.resolveModuleNames = (moduleNames, containingFile) => { - const resolutionsInFile = JSON.parse(this.shimHost.getModuleResolutionsForFile(containingFile)); - return map(moduleNames, (name) => { - const result = getProperty(resolutionsInFile, name); - return result ? { resolvedFileName: result, extension: extensionFromPath(result), isExternalLibraryImport: false } : void 0; - }); - }; - } - if ("directoryExists" in this.shimHost) { - this.directoryExists = (directoryName) => this.shimHost.directoryExists(directoryName); - } - if ("getTypeReferenceDirectiveResolutionsForFile" in this.shimHost) { - this.resolveTypeReferenceDirectives = (typeDirectiveNames, containingFile) => { - const typeDirectivesForFile = JSON.parse(this.shimHost.getTypeReferenceDirectiveResolutionsForFile(containingFile)); - return map(typeDirectiveNames, (name) => getProperty(typeDirectivesForFile, isString(name) ? name : toFileNameLowerCase(name.fileName))); - }; - } - if ("jsDocParsingMode" in this.shimHost) { - this.jsDocParsingMode = this.shimHost.jsDocParsingMode; - } - } - log(s) { - if (this.loggingEnabled) { - this.shimHost.log(s); - } - } - trace(s) { - if (this.tracingEnabled) { - this.shimHost.trace(s); - } - } - error(s) { - this.shimHost.error(s); - } - getProjectVersion() { - if (!this.shimHost.getProjectVersion) { - return void 0; - } - return this.shimHost.getProjectVersion(); - } - getTypeRootsVersion() { - if (!this.shimHost.getTypeRootsVersion) { - return 0; - } - return this.shimHost.getTypeRootsVersion(); - } - useCaseSensitiveFileNames() { - return this.shimHost.useCaseSensitiveFileNames ? this.shimHost.useCaseSensitiveFileNames() : false; - } - getCompilationSettings() { - const settingsJson = this.shimHost.getCompilationSettings(); - if (settingsJson === null || settingsJson === "") { - throw Error("LanguageServiceShimHostAdapter.getCompilationSettings: empty compilationSettings"); - } - const compilerOptions = JSON.parse(settingsJson); - compilerOptions.allowNonTsExtensions = true; - return compilerOptions; - } - getScriptFileNames() { - const encoded = this.shimHost.getScriptFileNames(); - return JSON.parse(encoded); - } - getScriptSnapshot(fileName) { - const scriptSnapshot = this.shimHost.getScriptSnapshot(fileName); - return scriptSnapshot && new ScriptSnapshotShimAdapter(scriptSnapshot); - } - getScriptKind(fileName) { - if ("getScriptKind" in this.shimHost) { - return this.shimHost.getScriptKind(fileName); - } else { - return 0 /* Unknown */; - } - } - getScriptVersion(fileName) { - return this.shimHost.getScriptVersion(fileName); - } - getLocalizedDiagnosticMessages() { - const diagnosticMessagesJson = this.shimHost.getLocalizedDiagnosticMessages(); - if (diagnosticMessagesJson === null || diagnosticMessagesJson === "") { - return null; - } - try { - return JSON.parse(diagnosticMessagesJson); - } catch (e) { - this.log(e.description || "diagnosticMessages.generated.json has invalid JSON format"); - return null; - } - } - getCancellationToken() { - const hostCancellationToken = this.shimHost.getCancellationToken(); - return new ThrottledCancellationToken(hostCancellationToken); - } - getCurrentDirectory() { - return this.shimHost.getCurrentDirectory(); - } - getDirectories(path) { - return JSON.parse(this.shimHost.getDirectories(path)); - } - getDefaultLibFileName(options) { - return this.shimHost.getDefaultLibFileName(JSON.stringify(options)); - } - readDirectory(path, extensions, exclude, include, depth) { - const pattern = getFileMatcherPatterns(path, exclude, include, this.shimHost.useCaseSensitiveFileNames(), this.shimHost.getCurrentDirectory()); - return JSON.parse(this.shimHost.readDirectory( - path, - JSON.stringify(extensions), - JSON.stringify(pattern.basePaths), - pattern.excludePattern, - pattern.includeFilePattern, - pattern.includeDirectoryPattern, - depth - )); - } - readFile(path, encoding) { - return this.shimHost.readFile(path, encoding); - } - fileExists(path) { - return this.shimHost.fileExists(path); - } -}; -var CoreServicesShimHostAdapter = class { - constructor(shimHost) { - this.shimHost = shimHost; - this.useCaseSensitiveFileNames = this.shimHost.useCaseSensitiveFileNames ? this.shimHost.useCaseSensitiveFileNames() : false; - if ("directoryExists" in this.shimHost) { - this.directoryExists = (directoryName) => this.shimHost.directoryExists(directoryName); - } else { - this.directoryExists = void 0; - } - if ("realpath" in this.shimHost) { - this.realpath = (path) => this.shimHost.realpath(path); - } else { - this.realpath = void 0; - } - } - readDirectory(rootDir, extensions, exclude, include, depth) { - const pattern = getFileMatcherPatterns(rootDir, exclude, include, this.shimHost.useCaseSensitiveFileNames(), this.shimHost.getCurrentDirectory()); - return JSON.parse(this.shimHost.readDirectory( - rootDir, - JSON.stringify(extensions), - JSON.stringify(pattern.basePaths), - pattern.excludePattern, - pattern.includeFilePattern, - pattern.includeDirectoryPattern, - depth - )); - } - fileExists(fileName) { - return this.shimHost.fileExists(fileName); - } - readFile(fileName) { - return this.shimHost.readFile(fileName); - } - getDirectories(path) { - return JSON.parse(this.shimHost.getDirectories(path)); - } -}; -function simpleForwardCall(logger, actionDescription2, action, logPerformance) { - let start2; - if (logPerformance) { - logger.log(actionDescription2); - start2 = timestamp(); - } - const result = action(); - if (logPerformance) { - const end = timestamp(); - logger.log(`${actionDescription2} completed in ${end - start2} msec`); - if (isString(result)) { - let str = result; - if (str.length > 128) { - str = str.substring(0, 128) + "..."; - } - logger.log(` result.length=${str.length}, result='${JSON.stringify(str)}'`); - } - } - return result; -} -function forwardJSONCall(logger, actionDescription2, action, logPerformance) { - return forwardCall( - logger, - actionDescription2, - /*returnJson*/ - true, - action, - logPerformance - ); -} -function forwardCall(logger, actionDescription2, returnJson, action, logPerformance) { - try { - const result = simpleForwardCall(logger, actionDescription2, action, logPerformance); - return returnJson ? JSON.stringify({ result }) : result; - } catch (err) { - if (err instanceof OperationCanceledException) { - return JSON.stringify({ canceled: true }); - } - logInternalError(logger, err); - err.description = actionDescription2; - return JSON.stringify({ error: err }); - } -} -var ShimBase = class { - constructor(factory2) { - this.factory = factory2; - factory2.registerShim(this); - } - dispose(_dummy) { - this.factory.unregisterShim(this); - } -}; -function realizeDiagnostics(diagnostics, newLine) { - return diagnostics.map((d) => realizeDiagnostic(d, newLine)); -} -function realizeDiagnostic(diagnostic, newLine) { - return { - message: flattenDiagnosticMessageText(diagnostic.messageText, newLine), - start: diagnostic.start, - // TODO: GH#18217 - length: diagnostic.length, - // TODO: GH#18217 - category: diagnosticCategoryName(diagnostic), - code: diagnostic.code, - reportsUnnecessary: diagnostic.reportsUnnecessary, - reportsDeprecated: diagnostic.reportsDeprecated - }; -} -var LanguageServiceShimObject = class extends ShimBase { - constructor(factory2, host, languageService) { - super(factory2); - this.host = host; - this.languageService = languageService; - this.logPerformance = false; - this.logger = this.host; - } - forwardJSONCall(actionDescription2, action) { - return forwardJSONCall(this.logger, actionDescription2, action, this.logPerformance); - } - /// DISPOSE - /** - * Ensure (almost) deterministic release of internal Javascript resources when - * some external native objects holds onto us (e.g. Com/Interop). - */ - dispose(dummy) { - this.logger.log("dispose()"); - this.languageService.dispose(); - this.languageService = null; - if (debugObjectHost && debugObjectHost.CollectGarbage) { - debugObjectHost.CollectGarbage(); - this.logger.log("CollectGarbage()"); - } - this.logger = null; - super.dispose(dummy); - } - /// REFRESH - /** - * Update the list of scripts known to the compiler - */ - refresh(throwOnError) { - this.forwardJSONCall( - `refresh(${throwOnError})`, - () => null - // eslint-disable-line no-null/no-null - ); - } - cleanupSemanticCache() { - this.forwardJSONCall( - "cleanupSemanticCache()", - () => { - this.languageService.cleanupSemanticCache(); - return null; - } - ); - } - realizeDiagnostics(diagnostics) { - const newLine = getNewLineOrDefaultFromHost( - this.host, - /*formatSettings*/ - void 0 - ); - return realizeDiagnostics(diagnostics, newLine); - } - getSyntacticClassifications(fileName, start2, length2) { - return this.forwardJSONCall( - `getSyntacticClassifications('${fileName}', ${start2}, ${length2})`, - () => this.languageService.getSyntacticClassifications(fileName, createTextSpan(start2, length2)) - ); - } - getSemanticClassifications(fileName, start2, length2) { - return this.forwardJSONCall( - `getSemanticClassifications('${fileName}', ${start2}, ${length2})`, - () => this.languageService.getSemanticClassifications(fileName, createTextSpan(start2, length2)) - ); - } - getEncodedSyntacticClassifications(fileName, start2, length2) { - return this.forwardJSONCall( - `getEncodedSyntacticClassifications('${fileName}', ${start2}, ${length2})`, - // directly serialize the spans out to a string. This is much faster to decode - // on the managed side versus a full JSON array. - () => convertClassifications(this.languageService.getEncodedSyntacticClassifications(fileName, createTextSpan(start2, length2))) - ); - } - getEncodedSemanticClassifications(fileName, start2, length2) { - return this.forwardJSONCall( - `getEncodedSemanticClassifications('${fileName}', ${start2}, ${length2})`, - // directly serialize the spans out to a string. This is much faster to decode - // on the managed side versus a full JSON array. - () => convertClassifications(this.languageService.getEncodedSemanticClassifications(fileName, createTextSpan(start2, length2))) - ); - } - getSyntacticDiagnostics(fileName) { - return this.forwardJSONCall( - `getSyntacticDiagnostics('${fileName}')`, - () => { - const diagnostics = this.languageService.getSyntacticDiagnostics(fileName); - return this.realizeDiagnostics(diagnostics); - } - ); - } - getSemanticDiagnostics(fileName) { - return this.forwardJSONCall( - `getSemanticDiagnostics('${fileName}')`, - () => { - const diagnostics = this.languageService.getSemanticDiagnostics(fileName); - return this.realizeDiagnostics(diagnostics); - } - ); - } - getSuggestionDiagnostics(fileName) { - return this.forwardJSONCall(`getSuggestionDiagnostics('${fileName}')`, () => this.realizeDiagnostics(this.languageService.getSuggestionDiagnostics(fileName))); - } - getCompilerOptionsDiagnostics() { - return this.forwardJSONCall( - "getCompilerOptionsDiagnostics()", - () => { - const diagnostics = this.languageService.getCompilerOptionsDiagnostics(); - return this.realizeDiagnostics(diagnostics); - } - ); - } - /// QUICKINFO - /** - * Computes a string representation of the type at the requested position - * in the active file. - */ - getQuickInfoAtPosition(fileName, position) { - return this.forwardJSONCall( - `getQuickInfoAtPosition('${fileName}', ${position})`, - () => this.languageService.getQuickInfoAtPosition(fileName, position) - ); - } - /// NAMEORDOTTEDNAMESPAN - /** - * Computes span information of the name or dotted name at the requested position - * in the active file. - */ - getNameOrDottedNameSpan(fileName, startPos, endPos) { - return this.forwardJSONCall( - `getNameOrDottedNameSpan('${fileName}', ${startPos}, ${endPos})`, - () => this.languageService.getNameOrDottedNameSpan(fileName, startPos, endPos) - ); - } - /** - * STATEMENTSPAN - * Computes span information of statement at the requested position in the active file. - */ - getBreakpointStatementAtPosition(fileName, position) { - return this.forwardJSONCall( - `getBreakpointStatementAtPosition('${fileName}', ${position})`, - () => this.languageService.getBreakpointStatementAtPosition(fileName, position) - ); - } - /// SIGNATUREHELP - getSignatureHelpItems(fileName, position, options) { - return this.forwardJSONCall( - `getSignatureHelpItems('${fileName}', ${position})`, - () => this.languageService.getSignatureHelpItems(fileName, position, options) - ); - } - /// GOTO DEFINITION - /** - * Computes the definition location and file for the symbol - * at the requested position. - */ - getDefinitionAtPosition(fileName, position) { - return this.forwardJSONCall( - `getDefinitionAtPosition('${fileName}', ${position})`, - () => this.languageService.getDefinitionAtPosition(fileName, position) - ); - } - /** - * Computes the definition location and file for the symbol - * at the requested position. - */ - getDefinitionAndBoundSpan(fileName, position) { - return this.forwardJSONCall( - `getDefinitionAndBoundSpan('${fileName}', ${position})`, - () => this.languageService.getDefinitionAndBoundSpan(fileName, position) - ); - } - /// GOTO Type - /** - * Computes the definition location of the type of the symbol - * at the requested position. - */ - getTypeDefinitionAtPosition(fileName, position) { - return this.forwardJSONCall( - `getTypeDefinitionAtPosition('${fileName}', ${position})`, - () => this.languageService.getTypeDefinitionAtPosition(fileName, position) - ); - } - /// GOTO Implementation - /** - * Computes the implementation location of the symbol - * at the requested position. - */ - getImplementationAtPosition(fileName, position) { - return this.forwardJSONCall( - `getImplementationAtPosition('${fileName}', ${position})`, - () => this.languageService.getImplementationAtPosition(fileName, position) - ); - } - getRenameInfo(fileName, position, preferences) { - return this.forwardJSONCall( - `getRenameInfo('${fileName}', ${position})`, - () => this.languageService.getRenameInfo(fileName, position, preferences) - ); - } - getSmartSelectionRange(fileName, position) { - return this.forwardJSONCall( - `getSmartSelectionRange('${fileName}', ${position})`, - () => this.languageService.getSmartSelectionRange(fileName, position) - ); - } - findRenameLocations(fileName, position, findInStrings, findInComments, preferences) { - return this.forwardJSONCall( - `findRenameLocations('${fileName}', ${position}, ${findInStrings}, ${findInComments})`, - () => this.languageService.findRenameLocations(fileName, position, findInStrings, findInComments, preferences) - ); - } - /// GET BRACE MATCHING - getBraceMatchingAtPosition(fileName, position) { - return this.forwardJSONCall( - `getBraceMatchingAtPosition('${fileName}', ${position})`, - () => this.languageService.getBraceMatchingAtPosition(fileName, position) - ); - } - isValidBraceCompletionAtPosition(fileName, position, openingBrace) { - return this.forwardJSONCall( - `isValidBraceCompletionAtPosition('${fileName}', ${position}, ${openingBrace})`, - () => this.languageService.isValidBraceCompletionAtPosition(fileName, position, openingBrace) - ); - } - getSpanOfEnclosingComment(fileName, position, onlyMultiLine) { - return this.forwardJSONCall( - `getSpanOfEnclosingComment('${fileName}', ${position})`, - () => this.languageService.getSpanOfEnclosingComment(fileName, position, onlyMultiLine) - ); - } - /// GET SMART INDENT - getIndentationAtPosition(fileName, position, options) { - return this.forwardJSONCall( - `getIndentationAtPosition('${fileName}', ${position})`, - () => { - const localOptions = JSON.parse(options); - return this.languageService.getIndentationAtPosition(fileName, position, localOptions); - } - ); - } - /// GET REFERENCES - getReferencesAtPosition(fileName, position) { - return this.forwardJSONCall( - `getReferencesAtPosition('${fileName}', ${position})`, - () => this.languageService.getReferencesAtPosition(fileName, position) - ); - } - findReferences(fileName, position) { - return this.forwardJSONCall( - `findReferences('${fileName}', ${position})`, - () => this.languageService.findReferences(fileName, position) - ); - } - getFileReferences(fileName) { - return this.forwardJSONCall( - `getFileReferences('${fileName})`, - () => this.languageService.getFileReferences(fileName) - ); - } - getDocumentHighlights(fileName, position, filesToSearch) { - return this.forwardJSONCall( - `getDocumentHighlights('${fileName}', ${position})`, - () => { - const results = this.languageService.getDocumentHighlights(fileName, position, JSON.parse(filesToSearch)); - const normalizedName = toFileNameLowerCase(normalizeSlashes(fileName)); - return filter(results, (r) => toFileNameLowerCase(normalizeSlashes(r.fileName)) === normalizedName); - } - ); - } - /// COMPLETION LISTS - /** - * Get a string based representation of the completions - * to provide at the given source position and providing a member completion - * list if requested. - */ - getCompletionsAtPosition(fileName, position, preferences, formattingSettings) { - return this.forwardJSONCall( - `getCompletionsAtPosition('${fileName}', ${position}, ${preferences}, ${formattingSettings})`, - () => this.languageService.getCompletionsAtPosition(fileName, position, preferences, formattingSettings) - ); - } - /** Get a string based representation of a completion list entry details */ - getCompletionEntryDetails(fileName, position, entryName, formatOptions, source, preferences, data) { - return this.forwardJSONCall( - `getCompletionEntryDetails('${fileName}', ${position}, '${entryName}')`, - () => { - const localOptions = formatOptions === void 0 ? void 0 : JSON.parse(formatOptions); - return this.languageService.getCompletionEntryDetails(fileName, position, entryName, localOptions, source, preferences, data); - } - ); - } - getFormattingEditsForRange(fileName, start2, end, options) { - return this.forwardJSONCall( - `getFormattingEditsForRange('${fileName}', ${start2}, ${end})`, - () => { - const localOptions = JSON.parse(options); - return this.languageService.getFormattingEditsForRange(fileName, start2, end, localOptions); - } - ); - } - getFormattingEditsForDocument(fileName, options) { - return this.forwardJSONCall( - `getFormattingEditsForDocument('${fileName}')`, - () => { - const localOptions = JSON.parse(options); - return this.languageService.getFormattingEditsForDocument(fileName, localOptions); - } - ); - } - getFormattingEditsAfterKeystroke(fileName, position, key, options) { - return this.forwardJSONCall( - `getFormattingEditsAfterKeystroke('${fileName}', ${position}, '${key}')`, - () => { - const localOptions = JSON.parse(options); - return this.languageService.getFormattingEditsAfterKeystroke(fileName, position, key, localOptions); - } - ); - } - getDocCommentTemplateAtPosition(fileName, position, options, formatOptions) { - return this.forwardJSONCall( - `getDocCommentTemplateAtPosition('${fileName}', ${position})`, - () => this.languageService.getDocCommentTemplateAtPosition(fileName, position, options, formatOptions) - ); - } - /// NAVIGATE TO - /** Return a list of symbols that are interesting to navigate to */ - getNavigateToItems(searchValue, maxResultCount, fileName) { - return this.forwardJSONCall( - `getNavigateToItems('${searchValue}', ${maxResultCount}, ${fileName})`, - () => this.languageService.getNavigateToItems(searchValue, maxResultCount, fileName) - ); - } - getNavigationBarItems(fileName) { - return this.forwardJSONCall( - `getNavigationBarItems('${fileName}')`, - () => this.languageService.getNavigationBarItems(fileName) - ); - } - getNavigationTree(fileName) { - return this.forwardJSONCall( - `getNavigationTree('${fileName}')`, - () => this.languageService.getNavigationTree(fileName) - ); - } - getOutliningSpans(fileName) { - return this.forwardJSONCall( - `getOutliningSpans('${fileName}')`, - () => this.languageService.getOutliningSpans(fileName) - ); - } - getTodoComments(fileName, descriptors) { - return this.forwardJSONCall( - `getTodoComments('${fileName}')`, - () => this.languageService.getTodoComments(fileName, JSON.parse(descriptors)) - ); - } - /// CALL HIERARCHY - prepareCallHierarchy(fileName, position) { - return this.forwardJSONCall( - `prepareCallHierarchy('${fileName}', ${position})`, - () => this.languageService.prepareCallHierarchy(fileName, position) - ); - } - provideCallHierarchyIncomingCalls(fileName, position) { - return this.forwardJSONCall( - `provideCallHierarchyIncomingCalls('${fileName}', ${position})`, - () => this.languageService.provideCallHierarchyIncomingCalls(fileName, position) - ); - } - provideCallHierarchyOutgoingCalls(fileName, position) { - return this.forwardJSONCall( - `provideCallHierarchyOutgoingCalls('${fileName}', ${position})`, - () => this.languageService.provideCallHierarchyOutgoingCalls(fileName, position) - ); - } - provideInlayHints(fileName, span, preference) { - return this.forwardJSONCall( - `provideInlayHints('${fileName}', '${JSON.stringify(span)}', ${JSON.stringify(preference)})`, - () => this.languageService.provideInlayHints(fileName, span, preference) - ); - } - /// Emit - getEmitOutput(fileName) { - return this.forwardJSONCall( - `getEmitOutput('${fileName}')`, - () => { - const { diagnostics, ...rest } = this.languageService.getEmitOutput(fileName); - return { ...rest, diagnostics: this.realizeDiagnostics(diagnostics) }; - } - ); - } - getEmitOutputObject(fileName) { - return forwardCall( - this.logger, - `getEmitOutput('${fileName}')`, - /*returnJson*/ - false, - () => this.languageService.getEmitOutput(fileName), - this.logPerformance - ); - } - toggleLineComment(fileName, textRange) { - return this.forwardJSONCall( - `toggleLineComment('${fileName}', '${JSON.stringify(textRange)}')`, - () => this.languageService.toggleLineComment(fileName, textRange) - ); - } - toggleMultilineComment(fileName, textRange) { - return this.forwardJSONCall( - `toggleMultilineComment('${fileName}', '${JSON.stringify(textRange)}')`, - () => this.languageService.toggleMultilineComment(fileName, textRange) - ); - } - commentSelection(fileName, textRange) { - return this.forwardJSONCall( - `commentSelection('${fileName}', '${JSON.stringify(textRange)}')`, - () => this.languageService.commentSelection(fileName, textRange) - ); - } - uncommentSelection(fileName, textRange) { - return this.forwardJSONCall( - `uncommentSelection('${fileName}', '${JSON.stringify(textRange)}')`, - () => this.languageService.uncommentSelection(fileName, textRange) - ); - } -}; -function convertClassifications(classifications) { - return { spans: classifications.spans.join(","), endOfLineState: classifications.endOfLineState }; -} -var ClassifierShimObject = class extends ShimBase { - constructor(factory2, logger) { - super(factory2); - this.logger = logger; - this.logPerformance = false; - this.classifier = createClassifier(); - } - getEncodedLexicalClassifications(text, lexState, syntacticClassifierAbsent = false) { - return forwardJSONCall(this.logger, "getEncodedLexicalClassifications", () => convertClassifications(this.classifier.getEncodedLexicalClassifications(text, lexState, syntacticClassifierAbsent)), this.logPerformance); - } - /// COLORIZATION - getClassificationsForLine(text, lexState, classifyKeywordsInGenerics = false) { - const classification = this.classifier.getClassificationsForLine(text, lexState, classifyKeywordsInGenerics); - let result = ""; - for (const item of classification.entries) { - result += item.length + "\n"; - result += item.classification + "\n"; - } - result += classification.finalLexState; - return result; - } -}; -var CoreServicesShimObject = class extends ShimBase { - constructor(factory2, logger, host) { - super(factory2); - this.logger = logger; - this.host = host; - this.logPerformance = false; - } - forwardJSONCall(actionDescription2, action) { - return forwardJSONCall(this.logger, actionDescription2, action, this.logPerformance); - } - resolveModuleName(fileName, moduleName, compilerOptionsJson) { - return this.forwardJSONCall(`resolveModuleName('${fileName}')`, () => { - const compilerOptions = JSON.parse(compilerOptionsJson); - const result = resolveModuleName(moduleName, normalizeSlashes(fileName), compilerOptions, this.host); - let resolvedFileName = result.resolvedModule ? result.resolvedModule.resolvedFileName : void 0; - if (result.resolvedModule && result.resolvedModule.extension !== ".ts" /* Ts */ && result.resolvedModule.extension !== ".tsx" /* Tsx */ && result.resolvedModule.extension !== ".d.ts" /* Dts */) { - resolvedFileName = void 0; - } - return { - resolvedFileName, - failedLookupLocations: result.failedLookupLocations, - affectingLocations: result.affectingLocations - }; - }); - } - resolveTypeReferenceDirective(fileName, typeReferenceDirective, compilerOptionsJson) { - return this.forwardJSONCall(`resolveTypeReferenceDirective(${fileName})`, () => { - const compilerOptions = JSON.parse(compilerOptionsJson); - const result = resolveTypeReferenceDirective(typeReferenceDirective, normalizeSlashes(fileName), compilerOptions, this.host); - return { - resolvedFileName: result.resolvedTypeReferenceDirective ? result.resolvedTypeReferenceDirective.resolvedFileName : void 0, - primary: result.resolvedTypeReferenceDirective ? result.resolvedTypeReferenceDirective.primary : true, - failedLookupLocations: result.failedLookupLocations - }; - }); - } - getPreProcessedFileInfo(fileName, sourceTextSnapshot) { - return this.forwardJSONCall( - `getPreProcessedFileInfo('${fileName}')`, - () => { - const result = preProcessFile( - getSnapshotText(sourceTextSnapshot), - /*readImportFiles*/ - true, - /*detectJavaScriptImports*/ - true - ); - return { - referencedFiles: this.convertFileReferences(result.referencedFiles), - importedFiles: this.convertFileReferences(result.importedFiles), - ambientExternalModules: result.ambientExternalModules, - isLibFile: result.isLibFile, - typeReferenceDirectives: this.convertFileReferences(result.typeReferenceDirectives), - libReferenceDirectives: this.convertFileReferences(result.libReferenceDirectives) - }; - } - ); - } - getAutomaticTypeDirectiveNames(compilerOptionsJson) { - return this.forwardJSONCall( - `getAutomaticTypeDirectiveNames('${compilerOptionsJson}')`, - () => { - const compilerOptions = JSON.parse(compilerOptionsJson); - return getAutomaticTypeDirectiveNames(compilerOptions, this.host); - } - ); - } - convertFileReferences(refs) { - if (!refs) { - return void 0; - } - const result = []; - for (const ref of refs) { - result.push({ - path: normalizeSlashes(ref.fileName), - position: ref.pos, - length: ref.end - ref.pos - }); - } - return result; - } - getTSConfigFileInfo(fileName, sourceTextSnapshot) { - return this.forwardJSONCall( - `getTSConfigFileInfo('${fileName}')`, - () => { - const result = parseJsonText(fileName, getSnapshotText(sourceTextSnapshot)); - const normalizedFileName = normalizeSlashes(fileName); - const configFile = parseJsonSourceFileConfigFileContent( - result, - this.host, - getDirectoryPath(normalizedFileName), - /*existingOptions*/ - {}, - normalizedFileName - ); - return { - options: configFile.options, - typeAcquisition: configFile.typeAcquisition, - files: configFile.fileNames, - raw: configFile.raw, - errors: realizeDiagnostics([...result.parseDiagnostics, ...configFile.errors], "\r\n") - }; - } - ); - } - getDefaultCompilationSettings() { - return this.forwardJSONCall( - "getDefaultCompilationSettings()", - () => getDefaultCompilerOptions2() - ); - } - discoverTypings(discoverTypingsJson) { - const getCanonicalFileName = createGetCanonicalFileName( - /*useCaseSensitiveFileNames*/ - false - ); - return this.forwardJSONCall("discoverTypings()", () => { - const info = JSON.parse(discoverTypingsJson); - if (this.safeList === void 0) { - this.safeList = ts_JsTyping_exports.loadSafeList(this.host, toPath(info.safeListPath, info.safeListPath, getCanonicalFileName)); - } - return ts_JsTyping_exports.discoverTypings( - this.host, - (msg) => this.logger.log(msg), - info.fileNames, - toPath(info.projectRootPath, info.projectRootPath, getCanonicalFileName), - this.safeList, - info.packageNameToTypingLocation, - info.typeAcquisition, - info.unresolvedImports, - info.typesRegistry, - emptyOptions - ); - }); - } -}; -var TypeScriptServicesFactory = class { - constructor() { - this._shims = []; - } - /* - * Returns script API version. - */ - getServicesVersion() { - return servicesVersion; - } - createLanguageServiceShim(host) { - try { - if (this.documentRegistry === void 0) { - this.documentRegistry = createDocumentRegistry(host.useCaseSensitiveFileNames && host.useCaseSensitiveFileNames(), host.getCurrentDirectory()); - } - const hostAdapter = new LanguageServiceShimHostAdapter(host); - const languageService = createLanguageService( - hostAdapter, - this.documentRegistry, - /*syntaxOnlyOrLanguageServiceMode*/ - false - ); - return new LanguageServiceShimObject(this, host, languageService); - } catch (err) { - logInternalError(host, err); - throw err; - } - } - createClassifierShim(logger) { - try { - return new ClassifierShimObject(this, logger); - } catch (err) { - logInternalError(logger, err); - throw err; - } - } - createCoreServicesShim(host) { - try { - const adapter = new CoreServicesShimHostAdapter(host); - return new CoreServicesShimObject(this, host, adapter); - } catch (err) { - logInternalError(host, err); - throw err; - } - } - close() { - clear(this._shims); - this.documentRegistry = void 0; - } - registerShim(shim) { - this._shims.push(shim); - } - unregisterShim(shim) { - for (let i = 0; i < this._shims.length; i++) { - if (this._shims[i] === shim) { - delete this._shims[i]; - return; - } - } - throw new Error("Invalid operation"); - } -}; - // src/services/_namespaces/ts.BreakpointResolver.ts var ts_BreakpointResolver_exports = {}; __export(ts_BreakpointResolver_exports, { @@ -165201,14 +164387,14 @@ function provideInlayHints(context) { if (isModuleReferenceType(declarationType)) { return; } - const hints = typeToInlayHintParts(declarationType); - if (hints) { - const hintText = typeof hints === "string" ? hints : hints.map((part) => part.text).join(""); + const hintParts = typeToInlayHintParts(declarationType); + if (hintParts) { + const hintText = typeof hintParts === "string" ? hintParts : hintParts.map((part) => part.text).join(""); const isVariableNameMatchesType = preferences.includeInlayVariableTypeHintsWhenTypeMatchesName === false && equateStringsCaseInsensitive(decl.name.getText(), hintText); if (isVariableNameMatchesType) { return; } - addTypeHints(hints, decl.name.end); + addTypeHints(hintParts, decl.name.end); } } function visitCallOrNewExpression(expr) { @@ -165316,9 +164502,9 @@ function provideInlayHints(context) { if (isModuleReferenceType(returnType)) { return; } - const hint = typeToInlayHintParts(returnType); - if (hint) { - addTypeHints(hint, getTypeAnnotationPosition(decl)); + const hintParts = typeToInlayHintParts(returnType); + if (hintParts) { + addTypeHints(hintParts, getTypeAnnotationPosition(decl)); } } function getTypeAnnotationPosition(decl) { @@ -165342,14 +164528,14 @@ function provideInlayHints(context) { if (effectiveTypeAnnotation) { continue; } - const typeDisplayString = getParameterDeclarationTypeDisplayString(signature.parameters[i]); - if (!typeDisplayString) { + const typeHints = getParameterDeclarationTypeHints(signature.parameters[i]); + if (!typeHints) { continue; } - addTypeHints(typeDisplayString, param.questionToken ? param.questionToken.end : param.name.end); + addTypeHints(typeHints, param.questionToken ? param.questionToken.end : param.name.end); } } - function getParameterDeclarationTypeDisplayString(symbol) { + function getParameterDeclarationTypeHints(symbol) { const valueDeclaration = symbol.valueDeclaration; if (!valueDeclaration || !isParameter(valueDeclaration)) { return void 0; @@ -165358,7 +164544,7 @@ function provideInlayHints(context) { if (isModuleReferenceType(signatureParamType)) { return void 0; } - return printTypeInSingleLine(signatureParamType); + return typeToInlayHintParts(signatureParamType); } function printTypeInSingleLine(type) { const flags = 70221824 /* IgnoreErrors */ | 1048576 /* AllowUniqueESSymbolType */ | 16384 /* UseAliasDefinedOutsideCurrentScope */; @@ -172750,7 +171936,6 @@ __export(ts_exports2, { ConfigFileProgramReloadLevel: () => ConfigFileProgramReloadLevel, ContainerFlags: () => ContainerFlags, ContextFlags: () => ContextFlags, - CoreServicesShimHostAdapter: () => CoreServicesShimHostAdapter, Debug: () => Debug, DiagnosticCategory: () => DiagnosticCategory, Diagnostics: () => Diagnostics, @@ -172799,7 +171984,6 @@ __export(ts_exports2, { JsxFlags: () => JsxFlags, JsxReferenceKind: () => JsxReferenceKind, LanguageServiceMode: () => LanguageServiceMode, - LanguageServiceShimHostAdapter: () => LanguageServiceShimHostAdapter, LanguageVariant: () => LanguageVariant, LexicalEnvironmentFlags: () => LexicalEnvironmentFlags, ListFormat: () => ListFormat, @@ -172873,7 +172057,6 @@ __export(ts_exports2, { TypeMapKind: () => TypeMapKind, TypePredicateKind: () => TypePredicateKind, TypeReferenceSerializationKind: () => TypeReferenceSerializationKind, - TypeScriptServicesFactory: () => TypeScriptServicesFactory, UnionReduction: () => UnionReduction, UpToDateStatusType: () => UpToDateStatusType, VarianceFlags: () => VarianceFlags, @@ -173945,7 +173128,7 @@ __export(ts_exports2, { isClassDeclaration: () => isClassDeclaration, isClassElement: () => isClassElement, isClassExpression: () => isClassExpression, - isClassFieldAndNotAutoAccessor: () => isClassFieldAndNotAutoAccessor, + isClassInstanceProperty: () => isClassInstanceProperty, isClassLike: () => isClassLike, isClassMemberModifier: () => isClassMemberModifier, isClassNamedEvaluationHelperBlock: () => isClassNamedEvaluationHelperBlock, @@ -174136,6 +173319,7 @@ __export(ts_exports2, { isInsideJsxElementOrAttribute: () => isInsideJsxElementOrAttribute, isInsideNodeModules: () => isInsideNodeModules, isInsideTemplateLiteral: () => isInsideTemplateLiteral, + isInstanceOfExpression: () => isInstanceOfExpression, isInstantiatedModule: () => isInstantiatedModule, isInterfaceDeclaration: () => isInterfaceDeclaration, isInternalDeclaration: () => isInternalDeclaration, @@ -174393,6 +173577,7 @@ __export(ts_exports2, { isReturnStatement: () => isReturnStatement, isReturnStatementWithFixablePromiseHandler: () => isReturnStatementWithFixablePromiseHandler, isRightSideOfAccessExpression: () => isRightSideOfAccessExpression, + isRightSideOfInstanceofExpression: () => isRightSideOfInstanceofExpression, isRightSideOfPropertyAccess: () => isRightSideOfPropertyAccess, isRightSideOfQualifiedName: () => isRightSideOfQualifiedName, isRightSideOfQualifiedNameOrPropertyAccess: () => isRightSideOfQualifiedNameOrPropertyAccess, @@ -174717,7 +173902,6 @@ __export(ts_exports2, { readJson: () => readJson, readJsonConfigFile: () => readJsonConfigFile, readJsonOrUndefined: () => readJsonOrUndefined, - realizeDiagnostics: () => realizeDiagnostics, reduceEachLeadingCommentRange: () => reduceEachLeadingCommentRange, reduceEachTrailingCommentRange: () => reduceEachTrailingCommentRange, reduceLeft: () => reduceLeft, @@ -187431,7 +186615,6 @@ start(initializeNodeSystem(), require("os").platform()); ConfigFileProgramReloadLevel, ContainerFlags, ContextFlags, - CoreServicesShimHostAdapter, Debug, DiagnosticCategory, Diagnostics, @@ -187480,7 +186663,6 @@ start(initializeNodeSystem(), require("os").platform()); JsxFlags, JsxReferenceKind, LanguageServiceMode, - LanguageServiceShimHostAdapter, LanguageVariant, LexicalEnvironmentFlags, ListFormat, @@ -187554,7 +186736,6 @@ start(initializeNodeSystem(), require("os").platform()); TypeMapKind, TypePredicateKind, TypeReferenceSerializationKind, - TypeScriptServicesFactory, UnionReduction, UpToDateStatusType, VarianceFlags, @@ -188626,7 +187807,7 @@ start(initializeNodeSystem(), require("os").platform()); isClassDeclaration, isClassElement, isClassExpression, - isClassFieldAndNotAutoAccessor, + isClassInstanceProperty, isClassLike, isClassMemberModifier, isClassNamedEvaluationHelperBlock, @@ -188817,6 +187998,7 @@ start(initializeNodeSystem(), require("os").platform()); isInsideJsxElementOrAttribute, isInsideNodeModules, isInsideTemplateLiteral, + isInstanceOfExpression, isInstantiatedModule, isInterfaceDeclaration, isInternalDeclaration, @@ -189074,6 +188256,7 @@ start(initializeNodeSystem(), require("os").platform()); isReturnStatement, isReturnStatementWithFixablePromiseHandler, isRightSideOfAccessExpression, + isRightSideOfInstanceofExpression, isRightSideOfPropertyAccess, isRightSideOfQualifiedName, isRightSideOfQualifiedNameOrPropertyAccess, @@ -189398,7 +188581,6 @@ start(initializeNodeSystem(), require("os").platform()); readJson, readJsonConfigFile, readJsonOrUndefined, - realizeDiagnostics, reduceEachLeadingCommentRange, reduceEachTrailingCommentRange, reduceLeft, diff --git a/lib/typescript.d.ts b/lib/typescript.d.ts index 34d2f5cfbc90d..8f70f7cfa107a 100644 --- a/lib/typescript.d.ts +++ b/lib/typescript.d.ts @@ -5646,7 +5646,10 @@ declare namespace ts { readonly typeArguments?: NodeArray; readonly template: TemplateLiteral; } - type CallLikeExpression = CallExpression | NewExpression | TaggedTemplateExpression | Decorator | JsxOpeningLikeElement; + interface InstanceofExpression extends BinaryExpression { + readonly operatorToken: Token; + } + type CallLikeExpression = CallExpression | NewExpression | TaggedTemplateExpression | Decorator | JsxOpeningLikeElement | InstanceofExpression; interface AsExpression extends Expression { readonly kind: SyntaxKind.AsExpression; readonly expression: Expression; diff --git a/lib/typescript.js b/lib/typescript.js index 06f3755429ff8..b266047f4d991 100644 --- a/lib/typescript.js +++ b/lib/typescript.js @@ -5186,12 +5186,12 @@ ${lanes.join("\n")} kind: 4 /* MultiLine */ } }; - JSDocParsingMode = /* @__PURE__ */ ((JSDocParsingMode7) => { - JSDocParsingMode7[JSDocParsingMode7["ParseAll"] = 0] = "ParseAll"; - JSDocParsingMode7[JSDocParsingMode7["ParseNone"] = 1] = "ParseNone"; - JSDocParsingMode7[JSDocParsingMode7["ParseForTypeErrors"] = 2] = "ParseForTypeErrors"; - JSDocParsingMode7[JSDocParsingMode7["ParseForTypeInfo"] = 3] = "ParseForTypeInfo"; - return JSDocParsingMode7; + JSDocParsingMode = /* @__PURE__ */ ((JSDocParsingMode6) => { + JSDocParsingMode6[JSDocParsingMode6["ParseAll"] = 0] = "ParseAll"; + JSDocParsingMode6[JSDocParsingMode6["ParseNone"] = 1] = "ParseNone"; + JSDocParsingMode6[JSDocParsingMode6["ParseForTypeErrors"] = 2] = "ParseForTypeErrors"; + JSDocParsingMode6[JSDocParsingMode6["ParseForTypeInfo"] = 3] = "ParseForTypeInfo"; + return JSDocParsingMode6; })(JSDocParsingMode || {}); } }); @@ -7512,7 +7512,7 @@ ${lanes.join("\n")} An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type: diag(2356, 1 /* Error */, "An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type_2356", "An arithmetic operand must be of type 'any', 'number', 'bigint' or an enum type."), The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access: diag(2357, 1 /* Error */, "The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access_2357", "The operand of an increment or decrement operator must be a variable or a property access."), The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_parameter: diag(2358, 1 /* Error */, "The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_paramete_2358", "The left-hand side of an 'instanceof' expression must be of type 'any', an object type or a type parameter."), - The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_Function_interface_type: diag(2359, 1 /* Error */, "The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_F_2359", "The right-hand side of an 'instanceof' expression must be of type 'any' or of a type assignable to the 'Function' interface type."), + The_right_hand_side_of_an_instanceof_expression_must_be_either_of_type_any_a_class_function_or_other_type_assignable_to_the_Function_interface_type_or_an_object_type_with_a_Symbol_hasInstance_method: diag(2359, 1 /* Error */, "The_right_hand_side_of_an_instanceof_expression_must_be_either_of_type_any_a_class_function_or_other_2359", "The right-hand side of an 'instanceof' expression must be either of type 'any', a class, function, or other type assignable to the 'Function' interface type, or an object type with a 'Symbol.hasInstance' method."), The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type: diag(2362, 1 /* Error */, "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2362", "The left-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type."), The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type: diag(2363, 1 /* Error */, "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2363", "The right-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type."), The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access: diag(2364, 1 /* Error */, "The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access_2364", "The left-hand side of an assignment expression must be a variable or a property access."), @@ -7961,6 +7961,8 @@ ${lanes.join("\n")} Import_attributes_cannot_be_used_with_type_only_imports_or_exports: diag(2857, 1 /* Error */, "Import_attributes_cannot_be_used_with_type_only_imports_or_exports_2857", "Import attributes cannot be used with type-only imports or exports."), Import_attribute_values_must_be_string_literal_expressions: diag(2858, 1 /* Error */, "Import_attribute_values_must_be_string_literal_expressions_2858", "Import attribute values must be string literal expressions."), Excessive_complexity_comparing_types_0_and_1: diag(2859, 1 /* Error */, "Excessive_complexity_comparing_types_0_and_1_2859", "Excessive complexity comparing types '{0}' and '{1}'."), + The_left_hand_side_of_an_instanceof_expression_must_be_assignable_to_the_first_argument_of_the_right_hand_side_s_Symbol_hasInstance_method: diag(2860, 1 /* Error */, "The_left_hand_side_of_an_instanceof_expression_must_be_assignable_to_the_first_argument_of_the_right_2860", "The left-hand side of an 'instanceof' expression must be assignable to the first argument of the right-hand side's '[Symbol.hasInstance]' method."), + An_object_s_Symbol_hasInstance_method_must_return_a_boolean_value_for_it_to_be_used_on_the_right_hand_side_of_an_instanceof_expression: diag(2861, 1 /* Error */, "An_object_s_Symbol_hasInstance_method_must_return_a_boolean_value_for_it_to_be_used_on_the_right_han_2861", "An object's '[Symbol.hasInstance]' method must return a boolean value for it to be used on the right-hand side of an 'instanceof' expression."), Import_declaration_0_is_using_private_name_1: diag(4e3, 1 /* Error */, "Import_declaration_0_is_using_private_name_1_4000", "Import declaration '{0}' is using private name '{1}'."), Type_parameter_0_of_exported_class_has_or_is_using_private_name_1: diag(4002, 1 /* Error */, "Type_parameter_0_of_exported_class_has_or_is_using_private_name_1_4002", "Type parameter '{0}' of exported class has or is using private name '{1}'."), Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1: diag(4004, 1 /* Error */, "Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1_4004", "Type parameter '{0}' of exported interface has or is using private name '{1}'."), @@ -12273,7 +12275,14 @@ ${lanes.join("\n")} function isAutoAccessorPropertyDeclaration(node) { return isPropertyDeclaration(node) && hasAccessorModifier(node); } - function isClassFieldAndNotAutoAccessor(node) { + function isClassInstanceProperty(node) { + if (isInJSFile(node) && isExpandoPropertyDeclaration(node)) { + return (!isBindableStaticAccessExpression(node) || !isPrototypeAccess(node.expression)) && !isBindableStaticNameExpression( + node, + /*excludeThisKeyword*/ + true + ); + } return node.parent && isClassLike(node.parent) && isPropertyDeclaration(node) && !hasAccessorModifier(node); } function isMethodOrAccessor(node) { @@ -14300,6 +14309,8 @@ ${lanes.join("\n")} case 286 /* JsxOpeningElement */: case 285 /* JsxSelfClosingElement */: return node.tagName; + case 226 /* BinaryExpression */: + return node.right; default: return node.expression; } @@ -16877,6 +16888,12 @@ ${lanes.join("\n")} function isRightSideOfQualifiedNameOrPropertyAccessOrJSDocMemberName(node) { return isQualifiedName(node.parent) && node.parent.right === node || isPropertyAccessExpression(node.parent) && node.parent.name === node || isJSDocMemberName(node.parent) && node.parent.right === node; } + function isInstanceOfExpression(node) { + return isBinaryExpression(node) && node.operatorToken.kind === 104 /* InstanceOfKeyword */; + } + function isRightSideOfInstanceofExpression(node) { + return isInstanceOfExpression(node.parent) && node === node.parent.right; + } function isEmptyObjectLiteral(expression) { return expression.kind === 210 /* ObjectLiteralExpression */ && expression.properties.length === 0; } @@ -46036,7 +46053,7 @@ ${lanes.join("\n")} candidates, /*argumentCount*/ void 0, - 32 /* IsForStringLiteralArgumentCompletions */ + 0 /* Normal */ )); for (const candidate of candidates) { candidatesSet.add(candidate); @@ -54071,7 +54088,7 @@ ${lanes.join("\n")} return type.flags & (128 /* StringLiteral */ | 256 /* NumberLiteral */) ? "" + type.value : void 0; } function getTypeForBindingElement(declaration) { - const checkMode = declaration.dotDotDotToken ? 64 /* RestBindingElement */ : 0 /* Normal */; + const checkMode = declaration.dotDotDotToken ? 32 /* RestBindingElement */ : 0 /* Normal */; const parentType = getTypeForBindingElementParent(declaration.parent.parent, checkMode); return parentType && getBindingElementTypeFromParentType( declaration, @@ -66238,7 +66255,7 @@ ${lanes.join("\n")} if (!couldContainTypeVariables(target)) { return; } - if (source === wildcardType) { + if (source === wildcardType || source === blockedStringType) { const savePropagationType = propagationType; propagationType = source; inferFromTypes(target, target); @@ -66295,6 +66312,10 @@ ${lanes.join("\n")} return; } if (!inference.isFixed) { + const candidate = propagationType || source; + if (candidate === blockedStringType) { + return; + } if (inference.priority === void 0 || priority < inference.priority) { inference.candidates = void 0; inference.contraCandidates = void 0; @@ -66302,7 +66323,6 @@ ${lanes.join("\n")} inference.priority = priority; } if (priority === inference.priority) { - const candidate = propagationType || source; if (contravariant && !bivariant) { if (!contains(inference.contraCandidates, candidate)) { inference.contraCandidates = append(inference.contraCandidates, candidate); @@ -66874,7 +66894,7 @@ ${lanes.join("\n")} const constraint = getConstraintOfTypeParameter(inference.typeParameter); if (constraint) { const instantiatedConstraint = instantiateType(constraint, context.nonFixingMapper); - if (!inferredType || inferredType === blockedStringType || !context.compareTypes(inferredType, getTypeWithThisArgument(instantiatedConstraint, inferredType))) { + if (!inferredType || !context.compareTypes(inferredType, getTypeWithThisArgument(instantiatedConstraint, inferredType))) { inference.inferredType = fallbackType && context.compareTypes(fallbackType, getTypeWithThisArgument(instantiatedConstraint, fallbackType)) ? fallbackType : instantiatedConstraint; } } @@ -67725,7 +67745,10 @@ ${lanes.join("\n")} let signature = links.effectsSignature; if (signature === void 0) { let funcType; - if (node.parent.kind === 244 /* ExpressionStatement */) { + if (isBinaryExpression(node)) { + const rightType = checkNonNullExpression(node.right); + funcType = getSymbolHasInstanceMethodOfObjectType(rightType); + } else if (node.parent.kind === 244 /* ExpressionStatement */) { funcType = getTypeOfDottedName( node.expression, /*diagnostic*/ @@ -68749,7 +68772,22 @@ ${lanes.join("\n")} } return type; } - const rightType = getTypeOfExpression(expr.right); + const right = expr.right; + const rightType = getTypeOfExpression(right); + if (!isTypeDerivedFrom(rightType, globalObjectType)) { + return type; + } + const signature = getEffectsSignature(expr); + const predicate = signature && getTypePredicateOfSignature(signature); + if (predicate && predicate.kind === 1 /* Identifier */ && predicate.parameterIndex === 0) { + return getNarrowedType( + type, + predicate.type, + assumeTrue, + /*checkDerived*/ + true + ); + } if (!isTypeDerivedFrom(rightType, globalFunctionType)) { return type; } @@ -69001,7 +69039,7 @@ ${lanes.join("\n")} return type.flags & 2097152 /* Intersection */ ? some(type.types, isGenericTypeWithoutNullableConstraint) : !!(type.flags & 465829888 /* Instantiable */ && !maybeTypeOfKind(getBaseConstraintOrType(type), 98304 /* Nullable */)); } function hasContextualTypeWithNoGenericTypes(node, checkMode) { - const contextualType = (isIdentifier(node) || isPropertyAccessExpression(node) || isElementAccessExpression(node)) && !((isJsxOpeningElement(node.parent) || isJsxSelfClosingElement(node.parent)) && node.parent.tagName === node) && (checkMode && checkMode & 64 /* RestBindingElement */ ? getContextualType2(node, 8 /* SkipBindingPatterns */) : getContextualType2( + const contextualType = (isIdentifier(node) || isPropertyAccessExpression(node) || isElementAccessExpression(node)) && !((isJsxOpeningElement(node.parent) || isJsxSelfClosingElement(node.parent)) && node.parent.tagName === node) && (checkMode && checkMode & 32 /* RestBindingElement */ ? getContextualType2(node, 8 /* SkipBindingPatterns */) : getContextualType2( node, /*contextFlags*/ void 0 @@ -69761,7 +69799,7 @@ ${lanes.join("\n")} function getContextualTypeForBindingElement(declaration, contextFlags) { const parent2 = declaration.parent.parent; const name = declaration.propertyName || declaration.name; - const parentType = getContextualTypeForVariableLikeDeclaration(parent2, contextFlags) || parent2.kind !== 208 /* BindingElement */ && parent2.initializer && checkDeclarationInitializer(parent2, declaration.dotDotDotToken ? 64 /* RestBindingElement */ : 0 /* Normal */); + const parentType = getContextualTypeForVariableLikeDeclaration(parent2, contextFlags) || parent2.kind !== 208 /* BindingElement */ && parent2.initializer && checkDeclarationInitializer(parent2, declaration.dotDotDotToken ? 32 /* RestBindingElement */ : 0 /* Normal */); if (!parentType || isBindingPattern(name) || isComputedNonLiteralName(name)) return void 0; if (parent2.name.kind === 207 /* ArrayBindingPattern */) { @@ -71744,7 +71782,7 @@ ${lanes.join("\n")} } return false; } - if (!(flags & 32 /* Static */) && ((_a = prop.declarations) == null ? void 0 : _a.some(isClassFieldAndNotAutoAccessor))) { + if (!(flags & 32 /* Static */) && ((_a = prop.declarations) == null ? void 0 : _a.some(isClassInstanceProperty))) { if (errorNode) { error2(errorNode, Diagnostics.Class_field_0_defined_by_the_parent_class_is_not_accessible_in_the_child_class_via_super, symbolToString(prop)); } @@ -72607,7 +72645,9 @@ ${lanes.join("\n")} checkExpression(node.template); } else if (isJsxOpeningLikeElement(node)) { checkExpression(node.attributes); - } else if (node.kind !== 170 /* Decorator */) { + } else if (isBinaryExpression(node)) { + checkExpression(node.left); + } else if (isCallOrNewExpression(node)) { forEach(node.arguments, (argument) => { checkExpression(argument); }); @@ -72680,6 +72720,8 @@ ${lanes.join("\n")} } } else if (node.kind === 170 /* Decorator */) { argCount = getDecoratorArgumentCount(node, signature); + } else if (node.kind === 226 /* BinaryExpression */) { + argCount = 1; } else if (isJsxOpeningLikeElement(node)) { callIsIncomplete = node.attributes.end === node.end; if (callIsIncomplete) { @@ -72779,13 +72821,13 @@ ${lanes.join("\n")} return voidType; } const thisArgumentType = checkExpression(thisArgumentNode); - return isOptionalChainRoot(thisArgumentNode.parent) ? getNonNullableType(thisArgumentType) : isOptionalChain(thisArgumentNode.parent) ? removeOptionalTypeMarker(thisArgumentType) : thisArgumentType; + return isRightSideOfInstanceofExpression(thisArgumentNode) ? thisArgumentType : isOptionalChainRoot(thisArgumentNode.parent) ? getNonNullableType(thisArgumentType) : isOptionalChain(thisArgumentNode.parent) ? removeOptionalTypeMarker(thisArgumentType) : thisArgumentType; } function inferTypeArguments(node, signature, args, checkMode, context) { if (isJsxOpeningLikeElement(node)) { return inferJsxTypeArguments(node, signature, checkMode, context); } - if (node.kind !== 170 /* Decorator */) { + if (node.kind !== 170 /* Decorator */ && node.kind !== 226 /* BinaryExpression */) { const skipBindingPatterns = every(signature.typeParameters, (p) => !!getDefaultFromTypeParameter(p)); const contextualType = getContextualType2(node, skipBindingPatterns ? 8 /* SkipBindingPatterns */ : 0 /* None */); if (contextualType) { @@ -72822,7 +72864,7 @@ ${lanes.join("\n")} } for (let i = 0; i < argCount; i++) { const arg = args[i]; - if (arg.kind !== 232 /* OmittedExpression */ && !(checkMode & 32 /* IsForStringLiteralArgumentCompletions */ && hasSkipDirectInferenceFlag(arg))) { + if (arg.kind !== 232 /* OmittedExpression */) { const paramType = getTypeAtPosition(signature, i); if (couldContainTypeVariables(paramType)) { const argType = checkExpressionWithContextualType(arg, paramType, context, checkMode); @@ -73114,6 +73156,9 @@ ${lanes.join("\n")} } } function getThisArgumentOfCall(node) { + if (node.kind === 226 /* BinaryExpression */) { + return node.right; + } const expression = node.kind === 213 /* CallExpression */ ? node.expression : node.kind === 215 /* TaggedTemplateExpression */ ? node.tag : node.kind === 170 /* Decorator */ && !legacyDecorators ? node.expression : void 0; if (expression) { const callee = skipOuterExpressions(expression); @@ -73142,6 +73187,9 @@ ${lanes.join("\n")} if (node.kind === 170 /* Decorator */) { return getEffectiveDecoratorArguments(node); } + if (node.kind === 226 /* BinaryExpression */) { + return [node.left]; + } if (isJsxOpeningLikeElement(node)) { return node.attributes.properties.length > 0 || isJsxOpeningElement(node) && node.parent.children.length > 0 ? [node.attributes] : emptyArray; } @@ -73411,9 +73459,10 @@ ${lanes.join("\n")} const isTaggedTemplate = node.kind === 215 /* TaggedTemplateExpression */; const isDecorator2 = node.kind === 170 /* Decorator */; const isJsxOpeningOrSelfClosingElement = isJsxOpeningLikeElement(node); + const isInstanceof = node.kind === 226 /* BinaryExpression */; const reportErrors2 = !isInferencePartiallyBlocked && !candidatesOutArray; let typeArguments; - if (!isDecorator2 && !isSuperCall(node)) { + if (!isDecorator2 && !isInstanceof && !isSuperCall(node)) { typeArguments = node.typeArguments; if (isTaggedTemplate || isJsxOpeningOrSelfClosingElement || node.expression.kind !== 108 /* SuperKeyword */) { forEach(typeArguments, checkSourceElement); @@ -73425,7 +73474,6 @@ ${lanes.join("\n")} const args = getEffectiveCallArguments(node); const isSingleNonGenericCandidate = candidates.length === 1 && !candidates[0].typeParameters; let argCheckMode = !isDecorator2 && !isSingleNonGenericCandidate && some(args, isContextSensitive) ? 4 /* SkipContextSensitive */ : 0 /* Normal */; - argCheckMode |= checkMode & 32 /* IsForStringLiteralArgumentCompletions */; let candidatesForArgumentError; let candidateForArgumentArityError; let candidateForTypeArgumentError; @@ -73443,6 +73491,9 @@ ${lanes.join("\n")} result = getCandidateForOverloadFailure(node, candidates, args, !!candidatesOutArray, checkMode); getNodeLinks(node).resolvedSignature = result; if (reportErrors2) { + if (!headMessage && isInstanceof) { + headMessage = Diagnostics.The_left_hand_side_of_an_instanceof_expression_must_be_assignable_to_the_first_argument_of_the_right_hand_side_s_Symbol_hasInstance_method; + } if (candidatesForArgumentError) { if (candidatesForArgumentError.length === 1 || candidatesForArgumentError.length > 3) { const last2 = candidatesForArgumentError[candidatesForArgumentError.length - 1]; @@ -74229,6 +74280,30 @@ ${lanes.join("\n")} } return resolveCall(node, signatures, candidatesOutArray, checkMode, 0 /* None */); } + function resolveInstanceofExpression(node, candidatesOutArray, checkMode) { + const rightType = checkExpression(node.right); + if (!isTypeAny(rightType)) { + const hasInstanceMethodType = getSymbolHasInstanceMethodOfObjectType(rightType); + if (hasInstanceMethodType) { + const apparentType = getApparentType(hasInstanceMethodType); + if (isErrorType(apparentType)) { + return resolveErrorCall(node); + } + const callSignatures = getSignaturesOfType(apparentType, 0 /* Call */); + const constructSignatures = getSignaturesOfType(apparentType, 1 /* Construct */); + if (isUntypedFunctionCall(hasInstanceMethodType, apparentType, callSignatures.length, constructSignatures.length)) { + return resolveUntypedCall(node); + } + if (callSignatures.length) { + return resolveCall(node, callSignatures, candidatesOutArray, checkMode, 0 /* None */); + } + } else if (!(typeHasCallOrConstructSignatures(rightType) || isTypeSubtypeOf(rightType, globalFunctionType))) { + error2(node.right, Diagnostics.The_right_hand_side_of_an_instanceof_expression_must_be_either_of_type_any_a_class_function_or_other_type_assignable_to_the_Function_interface_type_or_an_object_type_with_a_Symbol_hasInstance_method); + return resolveErrorCall(node); + } + } + return anySignature; + } function isPotentiallyUncalledDecorator(decorator, signatures) { return signatures.length && every(signatures, (signature) => signature.minArgumentCount === 0 && !signatureHasRestParameter(signature) && signature.parameters.length < getDecoratorArgumentCount(decorator, signature)); } @@ -74245,6 +74320,8 @@ ${lanes.join("\n")} case 286 /* JsxOpeningElement */: case 285 /* JsxSelfClosingElement */: return resolveJsxOpeningLikeElement(node, candidatesOutArray, checkMode); + case 226 /* BinaryExpression */: + return resolveInstanceofExpression(node, candidatesOutArray, checkMode); } Debug.assertNever(node, "Branch in 'resolveSignature' should be unreachable."); } @@ -76203,16 +76280,35 @@ ${lanes.join("\n")} function isConstEnumSymbol(symbol) { return (symbol.flags & 128 /* ConstEnum */) !== 0; } - function checkInstanceOfExpression(left, right, leftType, rightType) { + function getSymbolHasInstanceMethodOfObjectType(type) { + const hasInstancePropertyName = getPropertyNameForKnownSymbolName("hasInstance"); + const hasInstanceProperty = getPropertyOfObjectType(type, hasInstancePropertyName); + if (hasInstanceProperty) { + const hasInstancePropertyType = getTypeOfSymbol(hasInstanceProperty); + if (hasInstancePropertyType && getSignaturesOfType(hasInstancePropertyType, 0 /* Call */).length !== 0) { + return hasInstancePropertyType; + } + } + } + function checkInstanceOfExpression(left, right, leftType, rightType, checkMode) { if (leftType === silentNeverType || rightType === silentNeverType) { return silentNeverType; } if (!isTypeAny(leftType) && allTypesAssignableToKind(leftType, 402784252 /* Primitive */)) { error2(left, Diagnostics.The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_parameter); } - if (!(isTypeAny(rightType) || typeHasCallOrConstructSignatures(rightType) || isTypeSubtypeOf(rightType, globalFunctionType))) { - error2(right, Diagnostics.The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_Function_interface_type); + Debug.assert(isInstanceOfExpression(left.parent)); + const signature = getResolvedSignature( + left.parent, + /*candidatesOutArray*/ + void 0, + checkMode + ); + if (signature === resolvingSignature) { + return silentNeverType; } + const returnType = getReturnTypeOfSignature(signature); + checkTypeAssignableTo(returnType, booleanType, right, Diagnostics.An_object_s_Symbol_hasInstance_method_must_return_a_boolean_value_for_it_to_be_used_on_the_right_hand_side_of_an_instanceof_expression); return booleanType; } function hasEmptyObjectIntersection(type) { @@ -76750,7 +76846,7 @@ ${lanes.join("\n")} case 36 /* ExclamationEqualsToken */: case 37 /* EqualsEqualsEqualsToken */: case 38 /* ExclamationEqualsEqualsToken */: - if (!(checkMode && checkMode & 128 /* TypeOnly */)) { + if (!(checkMode && checkMode & 64 /* TypeOnly */)) { if ((isLiteralExpressionOfObject(left) || isLiteralExpressionOfObject(right)) && // only report for === and !== in JS, not == or != (!isInJSFile(left) || (operator === 37 /* EqualsEqualsEqualsToken */ || operator === 38 /* ExclamationEqualsEqualsToken */))) { const eqType = operator === 35 /* EqualsEqualsToken */ || operator === 37 /* EqualsEqualsEqualsToken */; @@ -76761,7 +76857,7 @@ ${lanes.join("\n")} } return booleanType; case 104 /* InstanceOfKeyword */: - return checkInstanceOfExpression(left, right, leftType, rightType); + return checkInstanceOfExpression(left, right, leftType, rightType, checkMode); case 103 /* InKeyword */: return checkInExpression(left, right, leftType, rightType); case 56 /* AmpersandAmpersandToken */: @@ -77398,7 +77494,7 @@ ${lanes.join("\n")} } } const startInvocationCount = flowInvocationCount; - const type = checkExpression(node, 128 /* TypeOnly */); + const type = checkExpression(node, 64 /* TypeOnly */); if (flowInvocationCount !== startInvocationCount) { const cache = flowTypeCache || (flowTypeCache = []); cache[getNodeId(node)] = type; @@ -79864,7 +79960,7 @@ ${lanes.join("\n")} checkComputedPropertyName(node.propertyName); } const parent2 = node.parent.parent; - const parentCheckMode = node.dotDotDotToken ? 64 /* RestBindingElement */ : 0 /* Normal */; + const parentCheckMode = node.dotDotDotToken ? 32 /* RestBindingElement */ : 0 /* Normal */; const parentType = getTypeForBindingElementParent(parent2, parentCheckMode); const name = node.propertyName || node.name; if (parentType && !isBindingPattern(name)) { @@ -82081,7 +82177,7 @@ ${lanes.join("\n")} } if (isConstantVariable(symbol)) { const declaration = symbol.valueDeclaration; - if (declaration && !declaration.type && declaration.initializer && (!location || declaration !== location && isBlockScopedNameDeclaredBeforeUse(declaration, location))) { + if (declaration && isVariableDeclaration(declaration) && !declaration.type && declaration.initializer && (!location || declaration !== location && isBlockScopedNameDeclaredBeforeUse(declaration, location))) { return evaluate(declaration.initializer, declaration); } } @@ -83173,6 +83269,12 @@ ${lanes.join("\n")} case 234 /* AsExpression */: case 217 /* ParenthesizedExpression */: checkAssertionDeferred(node); + break; + case 226 /* BinaryExpression */: + if (isInstanceOfExpression(node)) { + resolveUntypedCall(node); + } + break; } currentNode = saveCurrentNode; (_b = tracing) == null ? void 0 : _b.pop(); @@ -83789,6 +83891,13 @@ ${lanes.join("\n")} case 102 /* ImportKeyword */: case 105 /* NewKeyword */: return isMetaProperty(node.parent) ? checkMetaPropertyKeyword(node.parent).symbol : void 0; + case 104 /* InstanceOfKeyword */: + if (isBinaryExpression(node.parent)) { + const type = getTypeOfExpression(node.parent.right); + const hasInstanceMethodType = getSymbolHasInstanceMethodOfObjectType(type); + return (hasInstanceMethodType == null ? void 0 : hasInstanceMethodType.symbol) ?? type.symbol; + } + return void 0; case 236 /* MetaProperty */: return checkExpression(node).symbol; case 295 /* JsxNamespacedName */: @@ -86686,9 +86795,8 @@ ${lanes.join("\n")} CheckMode3[CheckMode3["SkipContextSensitive"] = 4] = "SkipContextSensitive"; CheckMode3[CheckMode3["SkipGenericFunctions"] = 8] = "SkipGenericFunctions"; CheckMode3[CheckMode3["IsForSignatureHelp"] = 16] = "IsForSignatureHelp"; - CheckMode3[CheckMode3["IsForStringLiteralArgumentCompletions"] = 32] = "IsForStringLiteralArgumentCompletions"; - CheckMode3[CheckMode3["RestBindingElement"] = 64] = "RestBindingElement"; - CheckMode3[CheckMode3["TypeOnly"] = 128] = "TypeOnly"; + CheckMode3[CheckMode3["RestBindingElement"] = 32] = "RestBindingElement"; + CheckMode3[CheckMode3["TypeOnly"] = 64] = "TypeOnly"; return CheckMode3; })(CheckMode || {}); SignatureCheckMode = /* @__PURE__ */ ((SignatureCheckMode3) => { @@ -128824,10 +128932,10 @@ ${lanes.join("\n")} return LanguageServiceMode2; })(LanguageServiceMode || {}); emptyOptions = {}; - SemanticClassificationFormat = /* @__PURE__ */ ((SemanticClassificationFormat3) => { - SemanticClassificationFormat3["Original"] = "original"; - SemanticClassificationFormat3["TwentyTwenty"] = "2020"; - return SemanticClassificationFormat3; + SemanticClassificationFormat = /* @__PURE__ */ ((SemanticClassificationFormat2) => { + SemanticClassificationFormat2["Original"] = "original"; + SemanticClassificationFormat2["TwentyTwenty"] = "2020"; + return SemanticClassificationFormat2; })(SemanticClassificationFormat || {}); OrganizeImportsMode = /* @__PURE__ */ ((OrganizeImportsMode3) => { OrganizeImportsMode3["All"] = "All"; @@ -128918,15 +129026,15 @@ ${lanes.join("\n")} OutputFileType2[OutputFileType2["Declaration"] = 2] = "Declaration"; return OutputFileType2; })(OutputFileType || {}); - EndOfLineState = /* @__PURE__ */ ((EndOfLineState3) => { - EndOfLineState3[EndOfLineState3["None"] = 0] = "None"; - EndOfLineState3[EndOfLineState3["InMultiLineCommentTrivia"] = 1] = "InMultiLineCommentTrivia"; - EndOfLineState3[EndOfLineState3["InSingleQuoteStringLiteral"] = 2] = "InSingleQuoteStringLiteral"; - EndOfLineState3[EndOfLineState3["InDoubleQuoteStringLiteral"] = 3] = "InDoubleQuoteStringLiteral"; - EndOfLineState3[EndOfLineState3["InTemplateHeadOrNoSubstitutionTemplate"] = 4] = "InTemplateHeadOrNoSubstitutionTemplate"; - EndOfLineState3[EndOfLineState3["InTemplateMiddleOrTail"] = 5] = "InTemplateMiddleOrTail"; - EndOfLineState3[EndOfLineState3["InTemplateSubstitutionPosition"] = 6] = "InTemplateSubstitutionPosition"; - return EndOfLineState3; + EndOfLineState = /* @__PURE__ */ ((EndOfLineState2) => { + EndOfLineState2[EndOfLineState2["None"] = 0] = "None"; + EndOfLineState2[EndOfLineState2["InMultiLineCommentTrivia"] = 1] = "InMultiLineCommentTrivia"; + EndOfLineState2[EndOfLineState2["InSingleQuoteStringLiteral"] = 2] = "InSingleQuoteStringLiteral"; + EndOfLineState2[EndOfLineState2["InDoubleQuoteStringLiteral"] = 3] = "InDoubleQuoteStringLiteral"; + EndOfLineState2[EndOfLineState2["InTemplateHeadOrNoSubstitutionTemplate"] = 4] = "InTemplateHeadOrNoSubstitutionTemplate"; + EndOfLineState2[EndOfLineState2["InTemplateMiddleOrTail"] = 5] = "InTemplateMiddleOrTail"; + EndOfLineState2[EndOfLineState2["InTemplateSubstitutionPosition"] = 6] = "InTemplateSubstitutionPosition"; + return EndOfLineState2; })(EndOfLineState || {}); TokenClass = /* @__PURE__ */ ((TokenClass2) => { TokenClass2[TokenClass2["Punctuation"] = 0] = "Punctuation"; @@ -144058,933 +144166,6 @@ ${newComment.split("\n").map((c) => ` * ${c}`).join("\n")} } }); - // src/services/shims.ts - function logInternalError(logger, err) { - if (logger) { - logger.log("*INTERNAL ERROR* - Exception in typescript services: " + err.message); - } - } - function simpleForwardCall(logger, actionDescription2, action, logPerformance) { - let start; - if (logPerformance) { - logger.log(actionDescription2); - start = timestamp(); - } - const result = action(); - if (logPerformance) { - const end = timestamp(); - logger.log(`${actionDescription2} completed in ${end - start} msec`); - if (isString(result)) { - let str = result; - if (str.length > 128) { - str = str.substring(0, 128) + "..."; - } - logger.log(` result.length=${str.length}, result='${JSON.stringify(str)}'`); - } - } - return result; - } - function forwardJSONCall(logger, actionDescription2, action, logPerformance) { - return forwardCall( - logger, - actionDescription2, - /*returnJson*/ - true, - action, - logPerformance - ); - } - function forwardCall(logger, actionDescription2, returnJson, action, logPerformance) { - try { - const result = simpleForwardCall(logger, actionDescription2, action, logPerformance); - return returnJson ? JSON.stringify({ result }) : result; - } catch (err) { - if (err instanceof OperationCanceledException) { - return JSON.stringify({ canceled: true }); - } - logInternalError(logger, err); - err.description = actionDescription2; - return JSON.stringify({ error: err }); - } - } - function realizeDiagnostics(diagnostics, newLine) { - return diagnostics.map((d) => realizeDiagnostic(d, newLine)); - } - function realizeDiagnostic(diagnostic, newLine) { - return { - message: flattenDiagnosticMessageText(diagnostic.messageText, newLine), - start: diagnostic.start, - // TODO: GH#18217 - length: diagnostic.length, - // TODO: GH#18217 - category: diagnosticCategoryName(diagnostic), - code: diagnostic.code, - reportsUnnecessary: diagnostic.reportsUnnecessary, - reportsDeprecated: diagnostic.reportsDeprecated - }; - } - function convertClassifications(classifications) { - return { spans: classifications.spans.join(","), endOfLineState: classifications.endOfLineState }; - } - var debugObjectHost, ScriptSnapshotShimAdapter, LanguageServiceShimHostAdapter, CoreServicesShimHostAdapter, ShimBase, LanguageServiceShimObject, ClassifierShimObject, CoreServicesShimObject, TypeScriptServicesFactory; - var init_shims = __esm({ - "src/services/shims.ts"() { - "use strict"; - init_ts4(); - debugObjectHost = function() { - return this; - }(); - ScriptSnapshotShimAdapter = class { - constructor(scriptSnapshotShim) { - this.scriptSnapshotShim = scriptSnapshotShim; - } - getText(start, end) { - return this.scriptSnapshotShim.getText(start, end); - } - getLength() { - return this.scriptSnapshotShim.getLength(); - } - getChangeRange(oldSnapshot) { - const oldSnapshotShim = oldSnapshot; - const encoded = this.scriptSnapshotShim.getChangeRange(oldSnapshotShim.scriptSnapshotShim); - if (encoded === null) { - return null; - } - const decoded = JSON.parse(encoded); - return createTextChangeRange( - createTextSpan(decoded.span.start, decoded.span.length), - decoded.newLength - ); - } - dispose() { - if ("dispose" in this.scriptSnapshotShim) { - this.scriptSnapshotShim.dispose(); - } - } - }; - LanguageServiceShimHostAdapter = class { - constructor(shimHost) { - this.shimHost = shimHost; - this.loggingEnabled = false; - this.tracingEnabled = false; - if ("getModuleResolutionsForFile" in this.shimHost) { - this.resolveModuleNames = (moduleNames, containingFile) => { - const resolutionsInFile = JSON.parse(this.shimHost.getModuleResolutionsForFile(containingFile)); - return map(moduleNames, (name) => { - const result = getProperty(resolutionsInFile, name); - return result ? { resolvedFileName: result, extension: extensionFromPath(result), isExternalLibraryImport: false } : void 0; - }); - }; - } - if ("directoryExists" in this.shimHost) { - this.directoryExists = (directoryName) => this.shimHost.directoryExists(directoryName); - } - if ("getTypeReferenceDirectiveResolutionsForFile" in this.shimHost) { - this.resolveTypeReferenceDirectives = (typeDirectiveNames, containingFile) => { - const typeDirectivesForFile = JSON.parse(this.shimHost.getTypeReferenceDirectiveResolutionsForFile(containingFile)); - return map(typeDirectiveNames, (name) => getProperty(typeDirectivesForFile, isString(name) ? name : toFileNameLowerCase(name.fileName))); - }; - } - if ("jsDocParsingMode" in this.shimHost) { - this.jsDocParsingMode = this.shimHost.jsDocParsingMode; - } - } - log(s) { - if (this.loggingEnabled) { - this.shimHost.log(s); - } - } - trace(s) { - if (this.tracingEnabled) { - this.shimHost.trace(s); - } - } - error(s) { - this.shimHost.error(s); - } - getProjectVersion() { - if (!this.shimHost.getProjectVersion) { - return void 0; - } - return this.shimHost.getProjectVersion(); - } - getTypeRootsVersion() { - if (!this.shimHost.getTypeRootsVersion) { - return 0; - } - return this.shimHost.getTypeRootsVersion(); - } - useCaseSensitiveFileNames() { - return this.shimHost.useCaseSensitiveFileNames ? this.shimHost.useCaseSensitiveFileNames() : false; - } - getCompilationSettings() { - const settingsJson = this.shimHost.getCompilationSettings(); - if (settingsJson === null || settingsJson === "") { - throw Error("LanguageServiceShimHostAdapter.getCompilationSettings: empty compilationSettings"); - } - const compilerOptions = JSON.parse(settingsJson); - compilerOptions.allowNonTsExtensions = true; - return compilerOptions; - } - getScriptFileNames() { - const encoded = this.shimHost.getScriptFileNames(); - return JSON.parse(encoded); - } - getScriptSnapshot(fileName) { - const scriptSnapshot = this.shimHost.getScriptSnapshot(fileName); - return scriptSnapshot && new ScriptSnapshotShimAdapter(scriptSnapshot); - } - getScriptKind(fileName) { - if ("getScriptKind" in this.shimHost) { - return this.shimHost.getScriptKind(fileName); - } else { - return 0 /* Unknown */; - } - } - getScriptVersion(fileName) { - return this.shimHost.getScriptVersion(fileName); - } - getLocalizedDiagnosticMessages() { - const diagnosticMessagesJson = this.shimHost.getLocalizedDiagnosticMessages(); - if (diagnosticMessagesJson === null || diagnosticMessagesJson === "") { - return null; - } - try { - return JSON.parse(diagnosticMessagesJson); - } catch (e) { - this.log(e.description || "diagnosticMessages.generated.json has invalid JSON format"); - return null; - } - } - getCancellationToken() { - const hostCancellationToken = this.shimHost.getCancellationToken(); - return new ThrottledCancellationToken(hostCancellationToken); - } - getCurrentDirectory() { - return this.shimHost.getCurrentDirectory(); - } - getDirectories(path) { - return JSON.parse(this.shimHost.getDirectories(path)); - } - getDefaultLibFileName(options) { - return this.shimHost.getDefaultLibFileName(JSON.stringify(options)); - } - readDirectory(path, extensions, exclude, include, depth) { - const pattern = getFileMatcherPatterns(path, exclude, include, this.shimHost.useCaseSensitiveFileNames(), this.shimHost.getCurrentDirectory()); - return JSON.parse(this.shimHost.readDirectory( - path, - JSON.stringify(extensions), - JSON.stringify(pattern.basePaths), - pattern.excludePattern, - pattern.includeFilePattern, - pattern.includeDirectoryPattern, - depth - )); - } - readFile(path, encoding) { - return this.shimHost.readFile(path, encoding); - } - fileExists(path) { - return this.shimHost.fileExists(path); - } - }; - CoreServicesShimHostAdapter = class { - constructor(shimHost) { - this.shimHost = shimHost; - this.useCaseSensitiveFileNames = this.shimHost.useCaseSensitiveFileNames ? this.shimHost.useCaseSensitiveFileNames() : false; - if ("directoryExists" in this.shimHost) { - this.directoryExists = (directoryName) => this.shimHost.directoryExists(directoryName); - } else { - this.directoryExists = void 0; - } - if ("realpath" in this.shimHost) { - this.realpath = (path) => this.shimHost.realpath(path); - } else { - this.realpath = void 0; - } - } - readDirectory(rootDir, extensions, exclude, include, depth) { - const pattern = getFileMatcherPatterns(rootDir, exclude, include, this.shimHost.useCaseSensitiveFileNames(), this.shimHost.getCurrentDirectory()); - return JSON.parse(this.shimHost.readDirectory( - rootDir, - JSON.stringify(extensions), - JSON.stringify(pattern.basePaths), - pattern.excludePattern, - pattern.includeFilePattern, - pattern.includeDirectoryPattern, - depth - )); - } - fileExists(fileName) { - return this.shimHost.fileExists(fileName); - } - readFile(fileName) { - return this.shimHost.readFile(fileName); - } - getDirectories(path) { - return JSON.parse(this.shimHost.getDirectories(path)); - } - }; - ShimBase = class { - constructor(factory2) { - this.factory = factory2; - factory2.registerShim(this); - } - dispose(_dummy) { - this.factory.unregisterShim(this); - } - }; - LanguageServiceShimObject = class extends ShimBase { - constructor(factory2, host, languageService) { - super(factory2); - this.host = host; - this.languageService = languageService; - this.logPerformance = false; - this.logger = this.host; - } - forwardJSONCall(actionDescription2, action) { - return forwardJSONCall(this.logger, actionDescription2, action, this.logPerformance); - } - /// DISPOSE - /** - * Ensure (almost) deterministic release of internal Javascript resources when - * some external native objects holds onto us (e.g. Com/Interop). - */ - dispose(dummy) { - this.logger.log("dispose()"); - this.languageService.dispose(); - this.languageService = null; - if (debugObjectHost && debugObjectHost.CollectGarbage) { - debugObjectHost.CollectGarbage(); - this.logger.log("CollectGarbage()"); - } - this.logger = null; - super.dispose(dummy); - } - /// REFRESH - /** - * Update the list of scripts known to the compiler - */ - refresh(throwOnError) { - this.forwardJSONCall( - `refresh(${throwOnError})`, - () => null - // eslint-disable-line no-null/no-null - ); - } - cleanupSemanticCache() { - this.forwardJSONCall( - "cleanupSemanticCache()", - () => { - this.languageService.cleanupSemanticCache(); - return null; - } - ); - } - realizeDiagnostics(diagnostics) { - const newLine = getNewLineOrDefaultFromHost( - this.host, - /*formatSettings*/ - void 0 - ); - return realizeDiagnostics(diagnostics, newLine); - } - getSyntacticClassifications(fileName, start, length2) { - return this.forwardJSONCall( - `getSyntacticClassifications('${fileName}', ${start}, ${length2})`, - () => this.languageService.getSyntacticClassifications(fileName, createTextSpan(start, length2)) - ); - } - getSemanticClassifications(fileName, start, length2) { - return this.forwardJSONCall( - `getSemanticClassifications('${fileName}', ${start}, ${length2})`, - () => this.languageService.getSemanticClassifications(fileName, createTextSpan(start, length2)) - ); - } - getEncodedSyntacticClassifications(fileName, start, length2) { - return this.forwardJSONCall( - `getEncodedSyntacticClassifications('${fileName}', ${start}, ${length2})`, - // directly serialize the spans out to a string. This is much faster to decode - // on the managed side versus a full JSON array. - () => convertClassifications(this.languageService.getEncodedSyntacticClassifications(fileName, createTextSpan(start, length2))) - ); - } - getEncodedSemanticClassifications(fileName, start, length2) { - return this.forwardJSONCall( - `getEncodedSemanticClassifications('${fileName}', ${start}, ${length2})`, - // directly serialize the spans out to a string. This is much faster to decode - // on the managed side versus a full JSON array. - () => convertClassifications(this.languageService.getEncodedSemanticClassifications(fileName, createTextSpan(start, length2))) - ); - } - getSyntacticDiagnostics(fileName) { - return this.forwardJSONCall( - `getSyntacticDiagnostics('${fileName}')`, - () => { - const diagnostics = this.languageService.getSyntacticDiagnostics(fileName); - return this.realizeDiagnostics(diagnostics); - } - ); - } - getSemanticDiagnostics(fileName) { - return this.forwardJSONCall( - `getSemanticDiagnostics('${fileName}')`, - () => { - const diagnostics = this.languageService.getSemanticDiagnostics(fileName); - return this.realizeDiagnostics(diagnostics); - } - ); - } - getSuggestionDiagnostics(fileName) { - return this.forwardJSONCall(`getSuggestionDiagnostics('${fileName}')`, () => this.realizeDiagnostics(this.languageService.getSuggestionDiagnostics(fileName))); - } - getCompilerOptionsDiagnostics() { - return this.forwardJSONCall( - "getCompilerOptionsDiagnostics()", - () => { - const diagnostics = this.languageService.getCompilerOptionsDiagnostics(); - return this.realizeDiagnostics(diagnostics); - } - ); - } - /// QUICKINFO - /** - * Computes a string representation of the type at the requested position - * in the active file. - */ - getQuickInfoAtPosition(fileName, position) { - return this.forwardJSONCall( - `getQuickInfoAtPosition('${fileName}', ${position})`, - () => this.languageService.getQuickInfoAtPosition(fileName, position) - ); - } - /// NAMEORDOTTEDNAMESPAN - /** - * Computes span information of the name or dotted name at the requested position - * in the active file. - */ - getNameOrDottedNameSpan(fileName, startPos, endPos) { - return this.forwardJSONCall( - `getNameOrDottedNameSpan('${fileName}', ${startPos}, ${endPos})`, - () => this.languageService.getNameOrDottedNameSpan(fileName, startPos, endPos) - ); - } - /** - * STATEMENTSPAN - * Computes span information of statement at the requested position in the active file. - */ - getBreakpointStatementAtPosition(fileName, position) { - return this.forwardJSONCall( - `getBreakpointStatementAtPosition('${fileName}', ${position})`, - () => this.languageService.getBreakpointStatementAtPosition(fileName, position) - ); - } - /// SIGNATUREHELP - getSignatureHelpItems(fileName, position, options) { - return this.forwardJSONCall( - `getSignatureHelpItems('${fileName}', ${position})`, - () => this.languageService.getSignatureHelpItems(fileName, position, options) - ); - } - /// GOTO DEFINITION - /** - * Computes the definition location and file for the symbol - * at the requested position. - */ - getDefinitionAtPosition(fileName, position) { - return this.forwardJSONCall( - `getDefinitionAtPosition('${fileName}', ${position})`, - () => this.languageService.getDefinitionAtPosition(fileName, position) - ); - } - /** - * Computes the definition location and file for the symbol - * at the requested position. - */ - getDefinitionAndBoundSpan(fileName, position) { - return this.forwardJSONCall( - `getDefinitionAndBoundSpan('${fileName}', ${position})`, - () => this.languageService.getDefinitionAndBoundSpan(fileName, position) - ); - } - /// GOTO Type - /** - * Computes the definition location of the type of the symbol - * at the requested position. - */ - getTypeDefinitionAtPosition(fileName, position) { - return this.forwardJSONCall( - `getTypeDefinitionAtPosition('${fileName}', ${position})`, - () => this.languageService.getTypeDefinitionAtPosition(fileName, position) - ); - } - /// GOTO Implementation - /** - * Computes the implementation location of the symbol - * at the requested position. - */ - getImplementationAtPosition(fileName, position) { - return this.forwardJSONCall( - `getImplementationAtPosition('${fileName}', ${position})`, - () => this.languageService.getImplementationAtPosition(fileName, position) - ); - } - getRenameInfo(fileName, position, preferences) { - return this.forwardJSONCall( - `getRenameInfo('${fileName}', ${position})`, - () => this.languageService.getRenameInfo(fileName, position, preferences) - ); - } - getSmartSelectionRange(fileName, position) { - return this.forwardJSONCall( - `getSmartSelectionRange('${fileName}', ${position})`, - () => this.languageService.getSmartSelectionRange(fileName, position) - ); - } - findRenameLocations(fileName, position, findInStrings, findInComments, preferences) { - return this.forwardJSONCall( - `findRenameLocations('${fileName}', ${position}, ${findInStrings}, ${findInComments})`, - () => this.languageService.findRenameLocations(fileName, position, findInStrings, findInComments, preferences) - ); - } - /// GET BRACE MATCHING - getBraceMatchingAtPosition(fileName, position) { - return this.forwardJSONCall( - `getBraceMatchingAtPosition('${fileName}', ${position})`, - () => this.languageService.getBraceMatchingAtPosition(fileName, position) - ); - } - isValidBraceCompletionAtPosition(fileName, position, openingBrace) { - return this.forwardJSONCall( - `isValidBraceCompletionAtPosition('${fileName}', ${position}, ${openingBrace})`, - () => this.languageService.isValidBraceCompletionAtPosition(fileName, position, openingBrace) - ); - } - getSpanOfEnclosingComment(fileName, position, onlyMultiLine) { - return this.forwardJSONCall( - `getSpanOfEnclosingComment('${fileName}', ${position})`, - () => this.languageService.getSpanOfEnclosingComment(fileName, position, onlyMultiLine) - ); - } - /// GET SMART INDENT - getIndentationAtPosition(fileName, position, options) { - return this.forwardJSONCall( - `getIndentationAtPosition('${fileName}', ${position})`, - () => { - const localOptions = JSON.parse(options); - return this.languageService.getIndentationAtPosition(fileName, position, localOptions); - } - ); - } - /// GET REFERENCES - getReferencesAtPosition(fileName, position) { - return this.forwardJSONCall( - `getReferencesAtPosition('${fileName}', ${position})`, - () => this.languageService.getReferencesAtPosition(fileName, position) - ); - } - findReferences(fileName, position) { - return this.forwardJSONCall( - `findReferences('${fileName}', ${position})`, - () => this.languageService.findReferences(fileName, position) - ); - } - getFileReferences(fileName) { - return this.forwardJSONCall( - `getFileReferences('${fileName})`, - () => this.languageService.getFileReferences(fileName) - ); - } - getDocumentHighlights(fileName, position, filesToSearch) { - return this.forwardJSONCall( - `getDocumentHighlights('${fileName}', ${position})`, - () => { - const results = this.languageService.getDocumentHighlights(fileName, position, JSON.parse(filesToSearch)); - const normalizedName = toFileNameLowerCase(normalizeSlashes(fileName)); - return filter(results, (r) => toFileNameLowerCase(normalizeSlashes(r.fileName)) === normalizedName); - } - ); - } - /// COMPLETION LISTS - /** - * Get a string based representation of the completions - * to provide at the given source position and providing a member completion - * list if requested. - */ - getCompletionsAtPosition(fileName, position, preferences, formattingSettings) { - return this.forwardJSONCall( - `getCompletionsAtPosition('${fileName}', ${position}, ${preferences}, ${formattingSettings})`, - () => this.languageService.getCompletionsAtPosition(fileName, position, preferences, formattingSettings) - ); - } - /** Get a string based representation of a completion list entry details */ - getCompletionEntryDetails(fileName, position, entryName, formatOptions, source, preferences, data) { - return this.forwardJSONCall( - `getCompletionEntryDetails('${fileName}', ${position}, '${entryName}')`, - () => { - const localOptions = formatOptions === void 0 ? void 0 : JSON.parse(formatOptions); - return this.languageService.getCompletionEntryDetails(fileName, position, entryName, localOptions, source, preferences, data); - } - ); - } - getFormattingEditsForRange(fileName, start, end, options) { - return this.forwardJSONCall( - `getFormattingEditsForRange('${fileName}', ${start}, ${end})`, - () => { - const localOptions = JSON.parse(options); - return this.languageService.getFormattingEditsForRange(fileName, start, end, localOptions); - } - ); - } - getFormattingEditsForDocument(fileName, options) { - return this.forwardJSONCall( - `getFormattingEditsForDocument('${fileName}')`, - () => { - const localOptions = JSON.parse(options); - return this.languageService.getFormattingEditsForDocument(fileName, localOptions); - } - ); - } - getFormattingEditsAfterKeystroke(fileName, position, key, options) { - return this.forwardJSONCall( - `getFormattingEditsAfterKeystroke('${fileName}', ${position}, '${key}')`, - () => { - const localOptions = JSON.parse(options); - return this.languageService.getFormattingEditsAfterKeystroke(fileName, position, key, localOptions); - } - ); - } - getDocCommentTemplateAtPosition(fileName, position, options, formatOptions) { - return this.forwardJSONCall( - `getDocCommentTemplateAtPosition('${fileName}', ${position})`, - () => this.languageService.getDocCommentTemplateAtPosition(fileName, position, options, formatOptions) - ); - } - /// NAVIGATE TO - /** Return a list of symbols that are interesting to navigate to */ - getNavigateToItems(searchValue, maxResultCount, fileName) { - return this.forwardJSONCall( - `getNavigateToItems('${searchValue}', ${maxResultCount}, ${fileName})`, - () => this.languageService.getNavigateToItems(searchValue, maxResultCount, fileName) - ); - } - getNavigationBarItems(fileName) { - return this.forwardJSONCall( - `getNavigationBarItems('${fileName}')`, - () => this.languageService.getNavigationBarItems(fileName) - ); - } - getNavigationTree(fileName) { - return this.forwardJSONCall( - `getNavigationTree('${fileName}')`, - () => this.languageService.getNavigationTree(fileName) - ); - } - getOutliningSpans(fileName) { - return this.forwardJSONCall( - `getOutliningSpans('${fileName}')`, - () => this.languageService.getOutliningSpans(fileName) - ); - } - getTodoComments(fileName, descriptors) { - return this.forwardJSONCall( - `getTodoComments('${fileName}')`, - () => this.languageService.getTodoComments(fileName, JSON.parse(descriptors)) - ); - } - /// CALL HIERARCHY - prepareCallHierarchy(fileName, position) { - return this.forwardJSONCall( - `prepareCallHierarchy('${fileName}', ${position})`, - () => this.languageService.prepareCallHierarchy(fileName, position) - ); - } - provideCallHierarchyIncomingCalls(fileName, position) { - return this.forwardJSONCall( - `provideCallHierarchyIncomingCalls('${fileName}', ${position})`, - () => this.languageService.provideCallHierarchyIncomingCalls(fileName, position) - ); - } - provideCallHierarchyOutgoingCalls(fileName, position) { - return this.forwardJSONCall( - `provideCallHierarchyOutgoingCalls('${fileName}', ${position})`, - () => this.languageService.provideCallHierarchyOutgoingCalls(fileName, position) - ); - } - provideInlayHints(fileName, span, preference) { - return this.forwardJSONCall( - `provideInlayHints('${fileName}', '${JSON.stringify(span)}', ${JSON.stringify(preference)})`, - () => this.languageService.provideInlayHints(fileName, span, preference) - ); - } - /// Emit - getEmitOutput(fileName) { - return this.forwardJSONCall( - `getEmitOutput('${fileName}')`, - () => { - const { diagnostics, ...rest } = this.languageService.getEmitOutput(fileName); - return { ...rest, diagnostics: this.realizeDiagnostics(diagnostics) }; - } - ); - } - getEmitOutputObject(fileName) { - return forwardCall( - this.logger, - `getEmitOutput('${fileName}')`, - /*returnJson*/ - false, - () => this.languageService.getEmitOutput(fileName), - this.logPerformance - ); - } - toggleLineComment(fileName, textRange) { - return this.forwardJSONCall( - `toggleLineComment('${fileName}', '${JSON.stringify(textRange)}')`, - () => this.languageService.toggleLineComment(fileName, textRange) - ); - } - toggleMultilineComment(fileName, textRange) { - return this.forwardJSONCall( - `toggleMultilineComment('${fileName}', '${JSON.stringify(textRange)}')`, - () => this.languageService.toggleMultilineComment(fileName, textRange) - ); - } - commentSelection(fileName, textRange) { - return this.forwardJSONCall( - `commentSelection('${fileName}', '${JSON.stringify(textRange)}')`, - () => this.languageService.commentSelection(fileName, textRange) - ); - } - uncommentSelection(fileName, textRange) { - return this.forwardJSONCall( - `uncommentSelection('${fileName}', '${JSON.stringify(textRange)}')`, - () => this.languageService.uncommentSelection(fileName, textRange) - ); - } - }; - ClassifierShimObject = class extends ShimBase { - constructor(factory2, logger) { - super(factory2); - this.logger = logger; - this.logPerformance = false; - this.classifier = createClassifier(); - } - getEncodedLexicalClassifications(text, lexState, syntacticClassifierAbsent = false) { - return forwardJSONCall(this.logger, "getEncodedLexicalClassifications", () => convertClassifications(this.classifier.getEncodedLexicalClassifications(text, lexState, syntacticClassifierAbsent)), this.logPerformance); - } - /// COLORIZATION - getClassificationsForLine(text, lexState, classifyKeywordsInGenerics = false) { - const classification = this.classifier.getClassificationsForLine(text, lexState, classifyKeywordsInGenerics); - let result = ""; - for (const item of classification.entries) { - result += item.length + "\n"; - result += item.classification + "\n"; - } - result += classification.finalLexState; - return result; - } - }; - CoreServicesShimObject = class extends ShimBase { - constructor(factory2, logger, host) { - super(factory2); - this.logger = logger; - this.host = host; - this.logPerformance = false; - } - forwardJSONCall(actionDescription2, action) { - return forwardJSONCall(this.logger, actionDescription2, action, this.logPerformance); - } - resolveModuleName(fileName, moduleName, compilerOptionsJson) { - return this.forwardJSONCall(`resolveModuleName('${fileName}')`, () => { - const compilerOptions = JSON.parse(compilerOptionsJson); - const result = resolveModuleName(moduleName, normalizeSlashes(fileName), compilerOptions, this.host); - let resolvedFileName = result.resolvedModule ? result.resolvedModule.resolvedFileName : void 0; - if (result.resolvedModule && result.resolvedModule.extension !== ".ts" /* Ts */ && result.resolvedModule.extension !== ".tsx" /* Tsx */ && result.resolvedModule.extension !== ".d.ts" /* Dts */) { - resolvedFileName = void 0; - } - return { - resolvedFileName, - failedLookupLocations: result.failedLookupLocations, - affectingLocations: result.affectingLocations - }; - }); - } - resolveTypeReferenceDirective(fileName, typeReferenceDirective, compilerOptionsJson) { - return this.forwardJSONCall(`resolveTypeReferenceDirective(${fileName})`, () => { - const compilerOptions = JSON.parse(compilerOptionsJson); - const result = resolveTypeReferenceDirective(typeReferenceDirective, normalizeSlashes(fileName), compilerOptions, this.host); - return { - resolvedFileName: result.resolvedTypeReferenceDirective ? result.resolvedTypeReferenceDirective.resolvedFileName : void 0, - primary: result.resolvedTypeReferenceDirective ? result.resolvedTypeReferenceDirective.primary : true, - failedLookupLocations: result.failedLookupLocations - }; - }); - } - getPreProcessedFileInfo(fileName, sourceTextSnapshot) { - return this.forwardJSONCall( - `getPreProcessedFileInfo('${fileName}')`, - () => { - const result = preProcessFile( - getSnapshotText(sourceTextSnapshot), - /*readImportFiles*/ - true, - /*detectJavaScriptImports*/ - true - ); - return { - referencedFiles: this.convertFileReferences(result.referencedFiles), - importedFiles: this.convertFileReferences(result.importedFiles), - ambientExternalModules: result.ambientExternalModules, - isLibFile: result.isLibFile, - typeReferenceDirectives: this.convertFileReferences(result.typeReferenceDirectives), - libReferenceDirectives: this.convertFileReferences(result.libReferenceDirectives) - }; - } - ); - } - getAutomaticTypeDirectiveNames(compilerOptionsJson) { - return this.forwardJSONCall( - `getAutomaticTypeDirectiveNames('${compilerOptionsJson}')`, - () => { - const compilerOptions = JSON.parse(compilerOptionsJson); - return getAutomaticTypeDirectiveNames(compilerOptions, this.host); - } - ); - } - convertFileReferences(refs) { - if (!refs) { - return void 0; - } - const result = []; - for (const ref of refs) { - result.push({ - path: normalizeSlashes(ref.fileName), - position: ref.pos, - length: ref.end - ref.pos - }); - } - return result; - } - getTSConfigFileInfo(fileName, sourceTextSnapshot) { - return this.forwardJSONCall( - `getTSConfigFileInfo('${fileName}')`, - () => { - const result = parseJsonText(fileName, getSnapshotText(sourceTextSnapshot)); - const normalizedFileName = normalizeSlashes(fileName); - const configFile = parseJsonSourceFileConfigFileContent( - result, - this.host, - getDirectoryPath(normalizedFileName), - /*existingOptions*/ - {}, - normalizedFileName - ); - return { - options: configFile.options, - typeAcquisition: configFile.typeAcquisition, - files: configFile.fileNames, - raw: configFile.raw, - errors: realizeDiagnostics([...result.parseDiagnostics, ...configFile.errors], "\r\n") - }; - } - ); - } - getDefaultCompilationSettings() { - return this.forwardJSONCall( - "getDefaultCompilationSettings()", - () => getDefaultCompilerOptions2() - ); - } - discoverTypings(discoverTypingsJson) { - const getCanonicalFileName = createGetCanonicalFileName( - /*useCaseSensitiveFileNames*/ - false - ); - return this.forwardJSONCall("discoverTypings()", () => { - const info = JSON.parse(discoverTypingsJson); - if (this.safeList === void 0) { - this.safeList = ts_JsTyping_exports.loadSafeList(this.host, toPath(info.safeListPath, info.safeListPath, getCanonicalFileName)); - } - return ts_JsTyping_exports.discoverTypings( - this.host, - (msg) => this.logger.log(msg), - info.fileNames, - toPath(info.projectRootPath, info.projectRootPath, getCanonicalFileName), - this.safeList, - info.packageNameToTypingLocation, - info.typeAcquisition, - info.unresolvedImports, - info.typesRegistry, - emptyOptions - ); - }); - } - }; - TypeScriptServicesFactory = class { - constructor() { - this._shims = []; - } - /* - * Returns script API version. - */ - getServicesVersion() { - return servicesVersion; - } - createLanguageServiceShim(host) { - try { - if (this.documentRegistry === void 0) { - this.documentRegistry = createDocumentRegistry(host.useCaseSensitiveFileNames && host.useCaseSensitiveFileNames(), host.getCurrentDirectory()); - } - const hostAdapter = new LanguageServiceShimHostAdapter(host); - const languageService = createLanguageService( - hostAdapter, - this.documentRegistry, - /*syntaxOnlyOrLanguageServiceMode*/ - false - ); - return new LanguageServiceShimObject(this, host, languageService); - } catch (err) { - logInternalError(host, err); - throw err; - } - } - createClassifierShim(logger) { - try { - return new ClassifierShimObject(this, logger); - } catch (err) { - logInternalError(logger, err); - throw err; - } - } - createCoreServicesShim(host) { - try { - const adapter = new CoreServicesShimHostAdapter(host); - return new CoreServicesShimObject(this, host, adapter); - } catch (err) { - logInternalError(host, err); - throw err; - } - } - close() { - clear(this._shims); - this.documentRegistry = void 0; - } - registerShim(shim) { - this._shims.push(shim); - } - unregisterShim(shim) { - for (let i = 0; i < this._shims.length; i++) { - if (this._shims[i] === shim) { - delete this._shims[i]; - return; - } - } - throw new Error("Invalid operation"); - } - }; - } - }); - // src/services/breakpoints.ts function spanInSourceFileAtLocation(sourceFile, position) { if (sourceFile.isDeclarationFile) { @@ -164551,14 +163732,14 @@ ${newComment.split("\n").map((c) => ` * ${c}`).join("\n")} if (isModuleReferenceType(declarationType)) { return; } - const hints = typeToInlayHintParts(declarationType); - if (hints) { - const hintText = typeof hints === "string" ? hints : hints.map((part) => part.text).join(""); + const hintParts = typeToInlayHintParts(declarationType); + if (hintParts) { + const hintText = typeof hintParts === "string" ? hintParts : hintParts.map((part) => part.text).join(""); const isVariableNameMatchesType = preferences.includeInlayVariableTypeHintsWhenTypeMatchesName === false && equateStringsCaseInsensitive(decl.name.getText(), hintText); if (isVariableNameMatchesType) { return; } - addTypeHints(hints, decl.name.end); + addTypeHints(hintParts, decl.name.end); } } function visitCallOrNewExpression(expr) { @@ -164666,9 +163847,9 @@ ${newComment.split("\n").map((c) => ` * ${c}`).join("\n")} if (isModuleReferenceType(returnType)) { return; } - const hint = typeToInlayHintParts(returnType); - if (hint) { - addTypeHints(hint, getTypeAnnotationPosition(decl)); + const hintParts = typeToInlayHintParts(returnType); + if (hintParts) { + addTypeHints(hintParts, getTypeAnnotationPosition(decl)); } } function getTypeAnnotationPosition(decl) { @@ -164692,14 +163873,14 @@ ${newComment.split("\n").map((c) => ` * ${c}`).join("\n")} if (effectiveTypeAnnotation) { continue; } - const typeDisplayString = getParameterDeclarationTypeDisplayString(signature.parameters[i]); - if (!typeDisplayString) { + const typeHints = getParameterDeclarationTypeHints(signature.parameters[i]); + if (!typeHints) { continue; } - addTypeHints(typeDisplayString, param.questionToken ? param.questionToken.end : param.name.end); + addTypeHints(typeHints, param.questionToken ? param.questionToken.end : param.name.end); } } - function getParameterDeclarationTypeDisplayString(symbol) { + function getParameterDeclarationTypeHints(symbol) { const valueDeclaration = symbol.valueDeclaration; if (!valueDeclaration || !isParameter(valueDeclaration)) { return void 0; @@ -164708,7 +163889,7 @@ ${newComment.split("\n").map((c) => ` * ${c}`).join("\n")} if (isModuleReferenceType(signatureParamType)) { return void 0; } - return printTypeInSingleLine(signatureParamType); + return typeToInlayHintParts(signatureParamType); } function printTypeInSingleLine(type) { const flags = 70221824 /* IgnoreErrors */ | 1048576 /* AllowUniqueESSymbolType */ | 16384 /* UseAliasDefinedOutsideCurrentScope */; @@ -172273,7 +171454,6 @@ ${options.prefix}` : "\n" : options.prefix init_transpile(); init_services(); init_transform(); - init_shims(); init_ts_BreakpointResolver(); init_ts_CallHierarchy(); init_ts_classifier(); @@ -184049,7 +183229,6 @@ ${e.message}`; ConfigFileProgramReloadLevel: () => ConfigFileProgramReloadLevel, ContainerFlags: () => ContainerFlags, ContextFlags: () => ContextFlags, - CoreServicesShimHostAdapter: () => CoreServicesShimHostAdapter, Debug: () => Debug, DiagnosticCategory: () => DiagnosticCategory, Diagnostics: () => Diagnostics, @@ -184098,7 +183277,6 @@ ${e.message}`; JsxFlags: () => JsxFlags, JsxReferenceKind: () => JsxReferenceKind, LanguageServiceMode: () => LanguageServiceMode, - LanguageServiceShimHostAdapter: () => LanguageServiceShimHostAdapter, LanguageVariant: () => LanguageVariant, LexicalEnvironmentFlags: () => LexicalEnvironmentFlags, ListFormat: () => ListFormat, @@ -184172,7 +183350,6 @@ ${e.message}`; TypeMapKind: () => TypeMapKind, TypePredicateKind: () => TypePredicateKind, TypeReferenceSerializationKind: () => TypeReferenceSerializationKind, - TypeScriptServicesFactory: () => TypeScriptServicesFactory, UnionReduction: () => UnionReduction, UpToDateStatusType: () => UpToDateStatusType, VarianceFlags: () => VarianceFlags, @@ -185244,7 +184421,7 @@ ${e.message}`; isClassDeclaration: () => isClassDeclaration, isClassElement: () => isClassElement, isClassExpression: () => isClassExpression, - isClassFieldAndNotAutoAccessor: () => isClassFieldAndNotAutoAccessor, + isClassInstanceProperty: () => isClassInstanceProperty, isClassLike: () => isClassLike, isClassMemberModifier: () => isClassMemberModifier, isClassNamedEvaluationHelperBlock: () => isClassNamedEvaluationHelperBlock, @@ -185435,6 +184612,7 @@ ${e.message}`; isInsideJsxElementOrAttribute: () => isInsideJsxElementOrAttribute, isInsideNodeModules: () => isInsideNodeModules, isInsideTemplateLiteral: () => isInsideTemplateLiteral, + isInstanceOfExpression: () => isInstanceOfExpression, isInstantiatedModule: () => isInstantiatedModule, isInterfaceDeclaration: () => isInterfaceDeclaration, isInternalDeclaration: () => isInternalDeclaration, @@ -185692,6 +184870,7 @@ ${e.message}`; isReturnStatement: () => isReturnStatement, isReturnStatementWithFixablePromiseHandler: () => isReturnStatementWithFixablePromiseHandler, isRightSideOfAccessExpression: () => isRightSideOfAccessExpression, + isRightSideOfInstanceofExpression: () => isRightSideOfInstanceofExpression, isRightSideOfPropertyAccess: () => isRightSideOfPropertyAccess, isRightSideOfQualifiedName: () => isRightSideOfQualifiedName, isRightSideOfQualifiedNameOrPropertyAccess: () => isRightSideOfQualifiedNameOrPropertyAccess, @@ -186016,7 +185195,6 @@ ${e.message}`; readJson: () => readJson, readJsonConfigFile: () => readJsonConfigFile, readJsonOrUndefined: () => readJsonOrUndefined, - realizeDiagnostics: () => realizeDiagnostics, reduceEachLeadingCommentRange: () => reduceEachLeadingCommentRange, reduceEachTrailingCommentRange: () => reduceEachTrailingCommentRange, reduceLeft: () => reduceLeft, @@ -186458,7 +185636,6 @@ ${e.message}`; ConfigFileProgramReloadLevel: () => ConfigFileProgramReloadLevel, ContainerFlags: () => ContainerFlags, ContextFlags: () => ContextFlags, - CoreServicesShimHostAdapter: () => CoreServicesShimHostAdapter, Debug: () => Debug, DiagnosticCategory: () => DiagnosticCategory, Diagnostics: () => Diagnostics, @@ -186507,7 +185684,6 @@ ${e.message}`; JsxFlags: () => JsxFlags, JsxReferenceKind: () => JsxReferenceKind, LanguageServiceMode: () => LanguageServiceMode, - LanguageServiceShimHostAdapter: () => LanguageServiceShimHostAdapter, LanguageVariant: () => LanguageVariant, LexicalEnvironmentFlags: () => LexicalEnvironmentFlags, ListFormat: () => ListFormat, @@ -186581,7 +185757,6 @@ ${e.message}`; TypeMapKind: () => TypeMapKind, TypePredicateKind: () => TypePredicateKind, TypeReferenceSerializationKind: () => TypeReferenceSerializationKind, - TypeScriptServicesFactory: () => TypeScriptServicesFactory, UnionReduction: () => UnionReduction, UpToDateStatusType: () => UpToDateStatusType, VarianceFlags: () => VarianceFlags, @@ -187653,7 +186828,7 @@ ${e.message}`; isClassDeclaration: () => isClassDeclaration, isClassElement: () => isClassElement, isClassExpression: () => isClassExpression, - isClassFieldAndNotAutoAccessor: () => isClassFieldAndNotAutoAccessor, + isClassInstanceProperty: () => isClassInstanceProperty, isClassLike: () => isClassLike, isClassMemberModifier: () => isClassMemberModifier, isClassNamedEvaluationHelperBlock: () => isClassNamedEvaluationHelperBlock, @@ -187844,6 +187019,7 @@ ${e.message}`; isInsideJsxElementOrAttribute: () => isInsideJsxElementOrAttribute, isInsideNodeModules: () => isInsideNodeModules, isInsideTemplateLiteral: () => isInsideTemplateLiteral, + isInstanceOfExpression: () => isInstanceOfExpression, isInstantiatedModule: () => isInstantiatedModule, isInterfaceDeclaration: () => isInterfaceDeclaration, isInternalDeclaration: () => isInternalDeclaration, @@ -188101,6 +187277,7 @@ ${e.message}`; isReturnStatement: () => isReturnStatement, isReturnStatementWithFixablePromiseHandler: () => isReturnStatementWithFixablePromiseHandler, isRightSideOfAccessExpression: () => isRightSideOfAccessExpression, + isRightSideOfInstanceofExpression: () => isRightSideOfInstanceofExpression, isRightSideOfPropertyAccess: () => isRightSideOfPropertyAccess, isRightSideOfQualifiedName: () => isRightSideOfQualifiedName, isRightSideOfQualifiedNameOrPropertyAccess: () => isRightSideOfQualifiedNameOrPropertyAccess, @@ -188425,7 +187602,6 @@ ${e.message}`; readJson: () => readJson, readJsonConfigFile: () => readJsonConfigFile, readJsonOrUndefined: () => readJsonOrUndefined, - realizeDiagnostics: () => realizeDiagnostics, reduceEachLeadingCommentRange: () => reduceEachLeadingCommentRange, reduceEachTrailingCommentRange: () => reduceEachTrailingCommentRange, reduceLeft: () => reduceLeft, diff --git a/lib/typingsInstaller.js b/lib/typingsInstaller.js index 9e1490f99ba2c..6d41c54b5ed0d 100644 --- a/lib/typingsInstaller.js +++ b/lib/typingsInstaller.js @@ -5579,7 +5579,7 @@ var Diagnostics = { An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type: diag(2356, 1 /* Error */, "An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type_2356", "An arithmetic operand must be of type 'any', 'number', 'bigint' or an enum type."), The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access: diag(2357, 1 /* Error */, "The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access_2357", "The operand of an increment or decrement operator must be a variable or a property access."), The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_parameter: diag(2358, 1 /* Error */, "The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_paramete_2358", "The left-hand side of an 'instanceof' expression must be of type 'any', an object type or a type parameter."), - The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_Function_interface_type: diag(2359, 1 /* Error */, "The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_F_2359", "The right-hand side of an 'instanceof' expression must be of type 'any' or of a type assignable to the 'Function' interface type."), + The_right_hand_side_of_an_instanceof_expression_must_be_either_of_type_any_a_class_function_or_other_type_assignable_to_the_Function_interface_type_or_an_object_type_with_a_Symbol_hasInstance_method: diag(2359, 1 /* Error */, "The_right_hand_side_of_an_instanceof_expression_must_be_either_of_type_any_a_class_function_or_other_2359", "The right-hand side of an 'instanceof' expression must be either of type 'any', a class, function, or other type assignable to the 'Function' interface type, or an object type with a 'Symbol.hasInstance' method."), The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type: diag(2362, 1 /* Error */, "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2362", "The left-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type."), The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type: diag(2363, 1 /* Error */, "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2363", "The right-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type."), The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access: diag(2364, 1 /* Error */, "The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access_2364", "The left-hand side of an assignment expression must be a variable or a property access."), @@ -6028,6 +6028,8 @@ var Diagnostics = { Import_attributes_cannot_be_used_with_type_only_imports_or_exports: diag(2857, 1 /* Error */, "Import_attributes_cannot_be_used_with_type_only_imports_or_exports_2857", "Import attributes cannot be used with type-only imports or exports."), Import_attribute_values_must_be_string_literal_expressions: diag(2858, 1 /* Error */, "Import_attribute_values_must_be_string_literal_expressions_2858", "Import attribute values must be string literal expressions."), Excessive_complexity_comparing_types_0_and_1: diag(2859, 1 /* Error */, "Excessive_complexity_comparing_types_0_and_1_2859", "Excessive complexity comparing types '{0}' and '{1}'."), + The_left_hand_side_of_an_instanceof_expression_must_be_assignable_to_the_first_argument_of_the_right_hand_side_s_Symbol_hasInstance_method: diag(2860, 1 /* Error */, "The_left_hand_side_of_an_instanceof_expression_must_be_assignable_to_the_first_argument_of_the_right_2860", "The left-hand side of an 'instanceof' expression must be assignable to the first argument of the right-hand side's '[Symbol.hasInstance]' method."), + An_object_s_Symbol_hasInstance_method_must_return_a_boolean_value_for_it_to_be_used_on_the_right_hand_side_of_an_instanceof_expression: diag(2861, 1 /* Error */, "An_object_s_Symbol_hasInstance_method_must_return_a_boolean_value_for_it_to_be_used_on_the_right_han_2861", "An object's '[Symbol.hasInstance]' method must return a boolean value for it to be used on the right-hand side of an 'instanceof' expression."), Import_declaration_0_is_using_private_name_1: diag(4e3, 1 /* Error */, "Import_declaration_0_is_using_private_name_1_4000", "Import declaration '{0}' is using private name '{1}'."), Type_parameter_0_of_exported_class_has_or_is_using_private_name_1: diag(4002, 1 /* Error */, "Type_parameter_0_of_exported_class_has_or_is_using_private_name_1_4002", "Type parameter '{0}' of exported class has or is using private name '{1}'."), Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1: diag(4004, 1 /* Error */, "Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1_4004", "Type parameter '{0}' of exported interface has or is using private name '{1}'."), @@ -29182,9 +29184,8 @@ var CheckMode = /* @__PURE__ */ ((CheckMode3) => { CheckMode3[CheckMode3["SkipContextSensitive"] = 4] = "SkipContextSensitive"; CheckMode3[CheckMode3["SkipGenericFunctions"] = 8] = "SkipGenericFunctions"; CheckMode3[CheckMode3["IsForSignatureHelp"] = 16] = "IsForSignatureHelp"; - CheckMode3[CheckMode3["IsForStringLiteralArgumentCompletions"] = 32] = "IsForStringLiteralArgumentCompletions"; - CheckMode3[CheckMode3["RestBindingElement"] = 64] = "RestBindingElement"; - CheckMode3[CheckMode3["TypeOnly"] = 128] = "TypeOnly"; + CheckMode3[CheckMode3["RestBindingElement"] = 32] = "RestBindingElement"; + CheckMode3[CheckMode3["TypeOnly"] = 64] = "TypeOnly"; return CheckMode3; })(CheckMode || {}); var SignatureCheckMode = /* @__PURE__ */ ((SignatureCheckMode3) => {