diff --git a/lib/enu/diagnosticMessages.generated.json.lcg b/lib/enu/diagnosticMessages.generated.json.lcg index 0b66fd7760c..aaa5c275919 100644 --- a/lib/enu/diagnosticMessages.generated.json.lcg +++ b/lib/enu/diagnosticMessages.generated.json.lcg @@ -1209,6 +1209,12 @@ + + + + + + @@ -5679,6 +5685,12 @@ + + + + + + diff --git a/lib/tsc.js b/lib/tsc.js index 622ed4ac3a6..65b4f5eac6a 100644 --- a/lib/tsc.js +++ b/lib/tsc.js @@ -3752,6 +3752,8 @@ var ts; _0_refers_to_a_value_but_is_being_used_as_a_type_here: diag(2749, ts.DiagnosticCategory.Error, "_0_refers_to_a_value_but_is_being_used_as_a_type_here_2749", "'{0}' refers to a value, but is being used as a type here."), The_implementation_signature_is_declared_here: diag(2750, ts.DiagnosticCategory.Error, "The_implementation_signature_is_declared_here_2750", "The implementation signature is declared here."), Circularity_originates_in_type_at_this_location: diag(2751, ts.DiagnosticCategory.Error, "Circularity_originates_in_type_at_this_location_2751", "Circularity originates in type at this location."), + The_first_export_default_is_here: diag(2752, ts.DiagnosticCategory.Error, "The_first_export_default_is_here_2752", "The first export default is here."), + Another_export_default_is_here: diag(2753, ts.DiagnosticCategory.Error, "Another_export_default_is_here_2753", "Another export default is here."), Import_declaration_0_is_using_private_name_1: diag(4000, ts.DiagnosticCategory.Error, "Import_declaration_0_is_using_private_name_1_4000", "Import declaration '{0}' is using private name '{1}'."), Type_parameter_0_of_exported_class_has_or_is_using_private_name_1: diag(4002, ts.DiagnosticCategory.Error, "Type_parameter_0_of_exported_class_has_or_is_using_private_name_1_4002", "Type parameter '{0}' of exported class has or is using private name '{1}'."), Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1: diag(4004, ts.DiagnosticCategory.Error, "Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1_4004", "Type parameter '{0}' of exported interface has or is using private name '{1}'."), @@ -13025,6 +13027,19 @@ var ts; return arr.slice(index); } ts.sliceAfter = sliceAfter; + function addRelatedInfo(diagnostic) { + var _a; + var relatedInformation = []; + for (var _i = 1; _i < arguments.length; _i++) { + relatedInformation[_i - 1] = arguments[_i]; + } + if (!diagnostic.relatedInformation) { + diagnostic.relatedInformation = []; + } + (_a = diagnostic.relatedInformation).push.apply(_a, relatedInformation); + return diagnostic; + } + ts.addRelatedInfo = addRelatedInfo; function minAndMax(arr, getValue) { Debug.assert(arr.length !== 0); var min = getValue(arr[0]); @@ -22510,24 +22525,34 @@ var ts; message_1 = ts.Diagnostics.Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations; messageNeedsName_1 = false; } - if (symbol.declarations && symbol.declarations.length) { + var multipleDefaultExports_1 = false; + if (ts.length(symbol.declarations)) { if (isDefaultExport) { message_1 = ts.Diagnostics.A_module_cannot_have_multiple_default_exports; messageNeedsName_1 = false; + multipleDefaultExports_1 = true; } else { if (symbol.declarations && symbol.declarations.length && (node.kind === 254 && !node.isExportEquals)) { message_1 = ts.Diagnostics.A_module_cannot_have_multiple_default_exports; messageNeedsName_1 = false; + multipleDefaultExports_1 = true; } } } - var addError = function (decl) { - file.bindDiagnostics.push(createDiagnosticForNode(ts.getNameOfDeclaration(decl) || decl, message_1, messageNeedsName_1 ? getDisplayName(decl) : undefined)); - }; - ts.forEach(symbol.declarations, addError); - addError(node); + var declarationName_1 = ts.getNameOfDeclaration(node) || node; + var relatedInformation_1 = []; + ts.forEach(symbol.declarations, function (declaration, index) { + var decl = ts.getNameOfDeclaration(declaration) || declaration; + var diag = createDiagnosticForNode(decl, message_1, messageNeedsName_1 ? getDisplayName(declaration) : undefined); + file.bindDiagnostics.push(multipleDefaultExports_1 ? ts.addRelatedInfo(diag, createDiagnosticForNode(declarationName_1, index === 0 ? ts.Diagnostics.Another_export_default_is_here : ts.Diagnostics.and_here)) : diag); + if (multipleDefaultExports_1) { + relatedInformation_1.push(createDiagnosticForNode(decl, ts.Diagnostics.The_first_export_default_is_here)); + } + }); + var diag = createDiagnosticForNode(declarationName_1, message_1, messageNeedsName_1 ? getDisplayName(node) : undefined); + file.bindDiagnostics.push(multipleDefaultExports_1 ? ts.addRelatedInfo.apply(void 0, [diag].concat(relatedInformation_1)) : diag); symbol = createSymbol(0, name); } } @@ -25957,18 +25982,6 @@ var ts; return diagnostic; } } - function addRelatedInfo(diagnostic) { - var _a; - var relatedInformation = []; - for (var _i = 1; _i < arguments.length; _i++) { - relatedInformation[_i - 1] = arguments[_i]; - } - if (!diagnostic.relatedInformation) { - diagnostic.relatedInformation = []; - } - (_a = diagnostic.relatedInformation).push.apply(_a, relatedInformation); - return diagnostic; - } function error(location, message, arg0, arg1, arg2, arg3) { var diagnostic = location ? ts.createDiagnosticForNode(location, message, arg0, arg1, arg2, arg3) @@ -26140,7 +26153,7 @@ var ts; err.relatedInformation = err.relatedInformation || []; if (ts.length(err.relatedInformation) >= 5) continue; - addRelatedInfo(err, !ts.length(err.relatedInformation) ? ts.createDiagnosticForNode(relatedNode, ts.Diagnostics._0_was_also_declared_here, symbolName) : ts.createDiagnosticForNode(relatedNode, ts.Diagnostics.and_here)); + ts.addRelatedInfo(err, !ts.length(err.relatedInformation) ? ts.createDiagnosticForNode(relatedNode, ts.Diagnostics._0_was_also_declared_here, symbolName) : ts.createDiagnosticForNode(relatedNode, ts.Diagnostics.and_here)); } } function combineSymbolTables(first, second) { @@ -26544,7 +26557,7 @@ var ts; var suggestionName = symbolToString(suggestion); var diagnostic = error(errorLocation, suggestedNameNotFoundMessage, diagnosticName(nameArg), suggestionName); if (suggestion.valueDeclaration) { - addRelatedInfo(diagnostic, ts.createDiagnosticForNode(suggestion.valueDeclaration, ts.Diagnostics._0_is_declared_here, suggestionName)); + ts.addRelatedInfo(diagnostic, ts.createDiagnosticForNode(suggestion.valueDeclaration, ts.Diagnostics._0_is_declared_here, suggestionName)); } } } @@ -26758,7 +26771,7 @@ var ts; } } if (diagnosticMessage) { - addRelatedInfo(diagnosticMessage, ts.createDiagnosticForNode(declaration, ts.Diagnostics._0_is_declared_here, declarationName)); + ts.addRelatedInfo(diagnosticMessage, ts.createDiagnosticForNode(declaration, ts.Diagnostics._0_is_declared_here, declarationName)); } } } @@ -26905,7 +26918,7 @@ var ts; var suggestionName = symbolToString(suggestion); var diagnostic = error(name, ts.Diagnostics.Module_0_has_no_exported_member_1_Did_you_mean_2, moduleName, declarationName, suggestionName); if (suggestion.valueDeclaration) { - addRelatedInfo(diagnostic, ts.createDiagnosticForNode(suggestion.valueDeclaration, ts.Diagnostics._0_is_declared_here, suggestionName)); + ts.addRelatedInfo(diagnostic, ts.createDiagnosticForNode(suggestion.valueDeclaration, ts.Diagnostics._0_is_declared_here, suggestionName)); } } else { @@ -30185,7 +30198,7 @@ var ts; ctorReturn = getReturnTypeOfSignature(ctorSig[0]); } } - addRelatedInfo(err, ts.createDiagnosticForNode(baseConstructorType.symbol.declarations[0], ts.Diagnostics.Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1, symbolToString(baseConstructorType.symbol), typeToString(ctorReturn))); + ts.addRelatedInfo(err, ts.createDiagnosticForNode(baseConstructorType.symbol.declarations[0], ts.Diagnostics.Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1, symbolToString(baseConstructorType.symbol), typeToString(ctorReturn))); } return type.resolvedBaseConstructorType = errorType; } @@ -31015,13 +31028,22 @@ var ts; function unionSpreadIndexInfos(info1, info2) { return info1 && info2 && createIndexInfo(getUnionType([info1.type, info2.type]), info1.isReadonly || info2.isReadonly); } - function includeMixinType(type, types, index) { + function findMixins(types) { + var constructorTypeCount = ts.countWhere(types, function (t) { return getSignaturesOfType(t, 1).length > 0; }); + var mixinFlags = ts.map(types, isMixinConstructorType); + if (constructorTypeCount > 0 && constructorTypeCount === ts.countWhere(mixinFlags, function (b) { return b; })) { + var firstMixinIndex = mixinFlags.indexOf(true); + mixinFlags[firstMixinIndex] = false; + } + return mixinFlags; + } + function includeMixinType(type, types, mixinFlags, index) { var mixedTypes = []; for (var i = 0; i < types.length; i++) { if (i === index) { mixedTypes.push(type); } - else if (isMixinConstructorType(types[i])) { + else if (mixinFlags[i]) { mixedTypes.push(getReturnTypeOfSignature(getSignaturesOfType(types[i], 1)[0])); } } @@ -31033,15 +31055,16 @@ var ts; var stringIndexInfo; var numberIndexInfo; var types = type.types; - var mixinCount = ts.countWhere(types, isMixinConstructorType); + var mixinFlags = findMixins(types); + var mixinCount = ts.countWhere(mixinFlags, function (b) { return b; }); var _loop_6 = function (i) { var t = type.types[i]; - if (mixinCount === 0 || mixinCount === types.length && i === 0 || !isMixinConstructorType(t)) { + if (!mixinFlags[i]) { var signatures = getSignaturesOfType(t, 1); if (signatures.length && mixinCount > 0) { signatures = ts.map(signatures, function (s) { var clone = cloneSignature(s); - clone.resolvedReturnType = includeMixinType(getReturnTypeOfSignature(s), types, i); + clone.resolvedReturnType = includeMixinType(getReturnTypeOfSignature(s), types, mixinFlags, i); return clone; }); } @@ -31493,7 +31516,7 @@ var ts; if (errorNode) { var diagnostic = error(errorNode, ts.Diagnostics.Type_parameter_0_has_a_circular_constraint, typeToString(t)); if (currentNode && !ts.isNodeDescendantOf(errorNode, currentNode) && !ts.isNodeDescendantOf(currentNode, errorNode)) { - addRelatedInfo(diagnostic, ts.createDiagnosticForNode(currentNode, ts.Diagnostics.Circularity_originates_in_type_at_this_location)); + ts.addRelatedInfo(diagnostic, ts.createDiagnosticForNode(currentNode, ts.Diagnostics.Circularity_originates_in_type_at_this_location)); } } } @@ -33460,12 +33483,15 @@ var ts; } } if (isGenericMappedType(objectType)) { - var mapper = createTypeMapper([getTypeParameterFromMappedType(objectType)], [type.indexType]); - var templateMapper = combineTypeMappers(objectType.mapper, mapper); - return type.simplified = mapType(instantiateType(getTemplateTypeFromMappedType(objectType), templateMapper), getSimplifiedType); + return type.simplified = mapType(substituteIndexedMappedType(objectType, type.indexType), getSimplifiedType); } return type.simplified = type; } + function substituteIndexedMappedType(objectType, index) { + var mapper = createTypeMapper([getTypeParameterFromMappedType(objectType)], [index]); + var templateMapper = combineTypeMappers(objectType.mapper, mapper); + return instantiateType(getTemplateTypeFromMappedType(objectType), templateMapper); + } function getIndexedAccessType(objectType, indexType, accessNode, missingType) { if (missingType === void 0) { missingType = accessNode ? errorType : unknownType; } if (objectType === wildcardType || indexType === wildcardType) { @@ -34590,7 +34616,7 @@ var ts; var resultObj = {}; checkTypeAssignableTo(source, target, node, headMessage, undefined, resultObj); var diagnostic = resultObj.error; - addRelatedInfo(diagnostic, ts.createDiagnosticForNode(node, signatures === constructSignatures ? ts.Diagnostics.Did_you_mean_to_use_new_with_this_expression : ts.Diagnostics.Did_you_mean_to_call_this_expression)); + ts.addRelatedInfo(diagnostic, ts.createDiagnosticForNode(node, signatures === constructSignatures ? ts.Diagnostics.Did_you_mean_to_use_new_with_this_expression : ts.Diagnostics.Did_you_mean_to_call_this_expression)); return true; } } @@ -34623,7 +34649,7 @@ var ts; checkTypeRelatedTo(sourceReturn, targetReturn, relation, returnExpression, undefined, undefined, resultObj); if (resultObj.error) { if (target.symbol && ts.length(target.symbol.declarations)) { - addRelatedInfo(resultObj.error, ts.createDiagnosticForNode(target.symbol.declarations[0], ts.Diagnostics.The_expected_type_comes_from_the_return_type_of_this_signature)); + ts.addRelatedInfo(resultObj.error, ts.createDiagnosticForNode(target.symbol.declarations[0], ts.Diagnostics.The_expected_type_comes_from_the_return_type_of_this_signature)); } return true; } @@ -34661,13 +34687,13 @@ var ts; undefined; if (indexInfo && indexInfo.declaration && !ts.getSourceFileOfNode(indexInfo.declaration).hasNoDefaultLib) { issuedElaboration = true; - addRelatedInfo(reportedDiag, ts.createDiagnosticForNode(indexInfo.declaration, ts.Diagnostics.The_expected_type_comes_from_this_index_signature)); + ts.addRelatedInfo(reportedDiag, ts.createDiagnosticForNode(indexInfo.declaration, ts.Diagnostics.The_expected_type_comes_from_this_index_signature)); } } if (!issuedElaboration && (targetProp && ts.length(targetProp.declarations) || target.symbol && ts.length(target.symbol.declarations))) { var targetNode = targetProp && ts.length(targetProp.declarations) ? targetProp.declarations[0] : target.symbol.declarations[0]; if (!ts.getSourceFileOfNode(targetNode).hasNoDefaultLib) { - addRelatedInfo(reportedDiag, ts.createDiagnosticForNode(targetNode, ts.Diagnostics.The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1, propertyName && !(nameType.flags & 8192) ? ts.unescapeLeadingUnderscores(propertyName) : typeToString(nameType), typeToString(target))); + ts.addRelatedInfo(reportedDiag, ts.createDiagnosticForNode(targetNode, ts.Diagnostics.The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1, propertyName && !(nameType.flags & 8192) ? ts.unescapeLeadingUnderscores(propertyName) : typeToString(nameType), typeToString(target))); } } } @@ -35186,7 +35212,7 @@ var ts; } var diag = ts.createDiagnosticForNodeFromMessageChain(errorNode, errorInfo, relatedInformation); if (relatedInfo) { - addRelatedInfo.apply(void 0, [diag].concat(relatedInfo)); + ts.addRelatedInfo.apply(void 0, [diag].concat(relatedInfo)); } if (errorOutputContainer) { errorOutputContainer.error = diag; @@ -39308,7 +39334,7 @@ var ts; if (!ts.isSourceFile(container)) { var outsideThis = tryGetThisTypeAt(container); if (outsideThis && outsideThis !== globalThisType_1) { - addRelatedInfo(diag, ts.createDiagnosticForNode(container, ts.Diagnostics.An_outer_value_of_this_is_shadowed_by_this_container)); + ts.addRelatedInfo(diag, ts.createDiagnosticForNode(container, ts.Diagnostics.An_outer_value_of_this_is_shadowed_by_this_container)); } } } @@ -39832,7 +39858,15 @@ var ts; } function getTypeOfPropertyOfContextualType(type, name) { return mapType(type, function (t) { - if (t.flags & 3670016) { + if (isGenericMappedType(t)) { + var constraint = getConstraintTypeFromMappedType(t); + var constraintOfConstraint = getBaseConstraintOfType(constraint) || constraint; + var propertyNameType = getLiteralType(ts.unescapeLeadingUnderscores(name)); + if (isTypeAssignableTo(propertyNameType, constraintOfConstraint)) { + return substituteIndexedMappedType(t, propertyNameType); + } + } + else if (t.flags & 3670016) { var prop = getPropertyOfType(t, name); if (prop) { return getTypeOfSymbol(prop); @@ -41130,7 +41164,7 @@ var ts; diagnosticMessage = error(right, ts.Diagnostics.Class_0_used_before_its_declaration, declarationName); } if (diagnosticMessage) { - addRelatedInfo(diagnosticMessage, ts.createDiagnosticForNode(valueDeclaration, ts.Diagnostics._0_is_declared_here, declarationName)); + ts.addRelatedInfo(diagnosticMessage, ts.createDiagnosticForNode(valueDeclaration, ts.Diagnostics._0_is_declared_here, declarationName)); } } function isInPropertyInitializer(node) { @@ -41215,7 +41249,7 @@ var ts; } var resultDiagnostic = ts.createDiagnosticForNodeFromMessageChain(propNode, errorInfo); if (relatedInfo) { - addRelatedInfo(resultDiagnostic, relatedInfo); + ts.addRelatedInfo(resultDiagnostic, relatedInfo); } diagnostics.add(resultDiagnostic); } @@ -41838,25 +41872,41 @@ var ts; if (argCount <= max && hasSpreadArgument) { argCount--; } + var spanArray; var related; + var error = hasRestParameter || hasSpreadArgument ? hasRestParameter && hasSpreadArgument ? ts.Diagnostics.Expected_at_least_0_arguments_but_got_1_or_more : + hasRestParameter ? ts.Diagnostics.Expected_at_least_0_arguments_but_got_1 : + ts.Diagnostics.Expected_0_arguments_but_got_1_or_more : ts.Diagnostics.Expected_0_arguments_but_got_1; if (closestSignature && getMinArgumentCount(closestSignature) > argCount && closestSignature.declaration) { var paramDecl = closestSignature.declaration.parameters[closestSignature.thisParameter ? argCount + 1 : argCount]; if (paramDecl) { related = ts.createDiagnosticForNode(paramDecl, ts.isBindingPattern(paramDecl.name) ? ts.Diagnostics.An_argument_matching_this_binding_pattern_was_not_provided : ts.Diagnostics.An_argument_for_0_was_not_provided, !paramDecl.name ? argCount : !ts.isBindingPattern(paramDecl.name) ? ts.idText(getFirstIdentifier(paramDecl.name)) : undefined); } } - if (hasRestParameter || hasSpreadArgument) { - var error_1 = hasRestParameter && hasSpreadArgument ? ts.Diagnostics.Expected_at_least_0_arguments_but_got_1_or_more : - hasRestParameter ? ts.Diagnostics.Expected_at_least_0_arguments_but_got_1 : - ts.Diagnostics.Expected_0_arguments_but_got_1_or_more; - var diagnostic_1 = ts.createDiagnosticForNode(node, error_1, paramRange, argCount); - return related ? addRelatedInfo(diagnostic_1, related) : diagnostic_1; - } if (min < argCount && argCount < max) { return ts.createDiagnosticForNode(node, ts.Diagnostics.No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments, argCount, belowArgCount, aboveArgCount); } - var diagnostic = ts.createDiagnosticForNode(node, ts.Diagnostics.Expected_0_arguments_but_got_1, paramRange, argCount); - return related ? addRelatedInfo(diagnostic, related) : diagnostic; + if (!hasSpreadArgument && argCount < min) { + var diagnostic_1 = ts.createDiagnosticForNode(node, error, paramRange, argCount); + return related ? ts.addRelatedInfo(diagnostic_1, related) : diagnostic_1; + } + if (hasRestParameter || hasSpreadArgument) { + spanArray = ts.createNodeArray(args); + if (hasSpreadArgument && argCount) { + var nextArg = ts.elementAt(args, getSpreadArgumentIndex(args) + 1) || undefined; + spanArray = ts.createNodeArray(args.slice(max > argCount && nextArg ? args.indexOf(nextArg) : max)); + } + } + else { + spanArray = ts.createNodeArray(args.slice(max)); + } + spanArray.pos = ts.first(spanArray).pos; + spanArray.end = ts.last(spanArray).end; + if (spanArray.end === spanArray.pos) { + spanArray.end++; + } + var diagnostic = ts.createDiagnosticForNodeArray(ts.getSourceFileOfNode(node), spanArray, error, paramRange, argCount); + return related ? ts.addRelatedInfo(diagnostic, related) : diagnostic; } function getTypeArgumentArityError(node, signatures, typeArguments) { var argCount = typeArguments.length; @@ -42235,12 +42285,11 @@ var ts; var firstBase = baseTypes[0]; if (firstBase.flags & 2097152) { var types = firstBase.types; - var mixinCount = ts.countWhere(types, isMixinConstructorType); + var mixinFlags = findMixins(types); var i = 0; for (var _i = 0, _a = firstBase.types; _i < _a.length; _i++) { var intersectionMember = _a[_i]; - i++; - if (mixinCount === 0 || mixinCount === types.length && i === 0 || !isMixinConstructorType(intersectionMember)) { + if (!mixinFlags[i]) { if (ts.getObjectFlags(intersectionMember) & (1 | 2)) { if (intersectionMember.symbol === target) { return true; @@ -42250,6 +42299,7 @@ var ts; } } } + i++; } return false; } @@ -42291,7 +42341,7 @@ var ts; var diagnostic = error(node, (kind === 0 ? ts.Diagnostics.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures : ts.Diagnostics.Cannot_use_new_with_an_expression_whose_type_lacks_a_call_or_construct_signature), typeToString(apparentType)); - invocationErrorRecovery(apparentType, kind, relatedInformation ? addRelatedInfo(diagnostic, relatedInformation) : diagnostic); + invocationErrorRecovery(apparentType, kind, relatedInformation ? ts.addRelatedInfo(diagnostic, relatedInformation) : diagnostic); } function invocationErrorRecovery(apparentType, kind, diagnostic) { if (!apparentType.symbol) { @@ -42302,7 +42352,7 @@ var ts; var sigs = getSignaturesOfType(getTypeOfSymbol(getSymbolLinks(apparentType.symbol).target), kind); if (!sigs || !sigs.length) return; - addRelatedInfo(diagnostic, ts.createDiagnosticForNode(importNode, ts.Diagnostics.Type_originates_at_this_import_A_namespace_style_import_cannot_be_called_or_constructed_and_will_cause_a_failure_at_runtime_Consider_using_a_default_import_or_import_require_here_instead)); + ts.addRelatedInfo(diagnostic, ts.createDiagnosticForNode(importNode, ts.Diagnostics.Type_originates_at_this_import_A_namespace_style_import_cannot_be_called_or_constructed_and_will_cause_a_failure_at_runtime_Consider_using_a_default_import_or_import_require_here_instead)); } } function resolveTaggedTemplateExpression(node, candidatesOutArray, checkMode) { @@ -45133,7 +45183,7 @@ var ts; for (var _a = 0, signatures_6 = signatures; _a < signatures_6.length; _a++) { var signature = signatures_6[_a]; if (!isImplementationCompatibleWithOverload(bodySignature, signature)) { - addRelatedInfo(error(signature.declaration, ts.Diagnostics.This_overload_signature_is_not_compatible_with_its_implementation_signature), ts.createDiagnosticForNode(bodyDeclaration, ts.Diagnostics.The_implementation_signature_is_declared_here)); + ts.addRelatedInfo(error(signature.declaration, ts.Diagnostics.This_overload_signature_is_not_compatible_with_its_implementation_signature), ts.createDiagnosticForNode(bodyDeclaration, ts.Diagnostics.The_implementation_signature_is_declared_here)); break; } } @@ -49324,8 +49374,8 @@ var ts; } else { var list = ts.arrayFrom(conflictingSymbols.keys()).join(", "); - diagnostics.add(addRelatedInfo(ts.createDiagnosticForNode(firstFile, ts.Diagnostics.Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0, list), ts.createDiagnosticForNode(secondFile, ts.Diagnostics.Conflicts_are_in_this_file))); - diagnostics.add(addRelatedInfo(ts.createDiagnosticForNode(secondFile, ts.Diagnostics.Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0, list), ts.createDiagnosticForNode(firstFile, ts.Diagnostics.Conflicts_are_in_this_file))); + diagnostics.add(ts.addRelatedInfo(ts.createDiagnosticForNode(firstFile, ts.Diagnostics.Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0, list), ts.createDiagnosticForNode(secondFile, ts.Diagnostics.Conflicts_are_in_this_file))); + diagnostics.add(ts.addRelatedInfo(ts.createDiagnosticForNode(secondFile, ts.Diagnostics.Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0, list), ts.createDiagnosticForNode(firstFile, ts.Diagnostics.Conflicts_are_in_this_file))); } }); amalgamatedDuplicates = undefined; @@ -49715,10 +49765,10 @@ var ts; var nonSimpleParameters = getNonSimpleParameters(node.parameters); if (ts.length(nonSimpleParameters)) { ts.forEach(nonSimpleParameters, function (parameter) { - addRelatedInfo(error(parameter, ts.Diagnostics.This_parameter_is_not_allowed_with_use_strict_directive), ts.createDiagnosticForNode(useStrictDirective_1, ts.Diagnostics.use_strict_directive_used_here)); + ts.addRelatedInfo(error(parameter, ts.Diagnostics.This_parameter_is_not_allowed_with_use_strict_directive), ts.createDiagnosticForNode(useStrictDirective_1, ts.Diagnostics.use_strict_directive_used_here)); }); var diagnostics_1 = nonSimpleParameters.map(function (parameter, index) { return (index === 0 ? ts.createDiagnosticForNode(parameter, ts.Diagnostics.Non_simple_parameter_declared_here) : ts.createDiagnosticForNode(parameter, ts.Diagnostics.and_here)); }); - addRelatedInfo.apply(void 0, [error(useStrictDirective_1, ts.Diagnostics.use_strict_directive_cannot_be_used_with_non_simple_parameter_list)].concat(diagnostics_1)); + ts.addRelatedInfo.apply(void 0, [error(useStrictDirective_1, ts.Diagnostics.use_strict_directive_cannot_be_used_with_non_simple_parameter_list)].concat(diagnostics_1)); return true; } } @@ -65961,12 +66011,24 @@ var ts; return result.diagnostics; } ts.getDeclarationDiagnostics = getDeclarationDiagnostics; + function hasInternalAnnotation(range, currentSourceFile) { + var comment = currentSourceFile.text.substring(range.pos, range.end); + return ts.stringContains(comment, "@internal"); + } function isInternalDeclaration(node, currentSourceFile) { var parseTreeNode = ts.getParseTreeNode(node); + if (parseTreeNode && parseTreeNode.kind === 151) { + var paramIdx = parseTreeNode.parent.parameters.indexOf(parseTreeNode); + var previousSibling = paramIdx > 0 ? parseTreeNode.parent.parameters[paramIdx - 1] : undefined; + var text = currentSourceFile.text; + var commentRanges = previousSibling + ? ts.concatenate(ts.getTrailingCommentRanges(text, ts.skipTrivia(text, previousSibling.end + 1, false, true)), ts.getLeadingCommentRanges(text, node.pos)) + : ts.getTrailingCommentRanges(text, ts.skipTrivia(text, node.pos, false, true)); + return commentRanges && commentRanges.length && hasInternalAnnotation(ts.last(commentRanges), currentSourceFile); + } var leadingCommentRanges = parseTreeNode && ts.getLeadingCommentRangesOfNode(parseTreeNode, currentSourceFile); return !!ts.forEach(leadingCommentRanges, function (range) { - var comment = currentSourceFile.text.substring(range.pos, range.end); - return ts.stringContains(comment, "@internal"); + return hasInternalAnnotation(range, currentSourceFile); }); } ts.isInternalDeclaration = isInternalDeclaration; @@ -66743,7 +66805,7 @@ var ts; if (ctor) { var oldDiag_1 = getSymbolAccessibilityDiagnostic; parameterProperties = ts.compact(ts.flatMap(ctor.parameters, function (param) { - if (!ts.hasModifier(param, 92)) + if (!ts.hasModifier(param, 92) || shouldStripInternal(param)) return; getSymbolAccessibilityDiagnostic = ts.createGetSymbolAccessibilityDiagnosticForNode(param); if (param.name.kind === 72) { @@ -72202,11 +72264,18 @@ var ts; if (rootNames.length) { for (var _i = 0, resolvedProjectReferences_1 = resolvedProjectReferences; _i < resolvedProjectReferences_1.length; _i++) { var parsedRef = resolvedProjectReferences_1[_i]; - if (parsedRef) { - var out = parsedRef.commandLine.options.outFile || parsedRef.commandLine.options.out; - if (out) { - var dtsOutfile = ts.changeExtension(out, ".d.ts"); - processSourceFile(dtsOutfile, false, false, undefined); + if (!parsedRef) + continue; + var out = parsedRef.commandLine.options.outFile || parsedRef.commandLine.options.out; + if (out) { + processSourceFile(ts.changeExtension(out, ".d.ts"), false, false, undefined); + } + else if (ts.getEmitModuleKind(parsedRef.commandLine.options) === ts.ModuleKind.None) { + for (var _a = 0, _b = parsedRef.commandLine.fileNames; _a < _b.length; _a++) { + var fileName = _b[_a]; + if (!ts.fileExtensionIs(fileName, ".d.ts") && ts.hasTSFileExtension(fileName)) { + processSourceFile(ts.getOutputDeclarationFileName(fileName, parsedRef.commandLine), false, false, undefined); + } } } } @@ -72244,8 +72313,8 @@ var ts; ts.Debug.assert(!!missingFilePaths); if (oldProgram && host.onReleaseOldSourceFile) { var oldSourceFiles = oldProgram.getSourceFiles(); - for (var _a = 0, oldSourceFiles_1 = oldSourceFiles; _a < oldSourceFiles_1.length; _a++) { - var oldSourceFile = oldSourceFiles_1[_a]; + for (var _c = 0, oldSourceFiles_1 = oldSourceFiles; _c < oldSourceFiles_1.length; _c++) { + var oldSourceFile = oldSourceFiles_1[_c]; var newFile = getSourceFileByPath(oldSourceFile.resolvedPath); if (shouldCreateNewSourceFile || !newFile || (oldSourceFile.resolvedPath === oldSourceFile.path && newFile.resolvedPath !== oldSourceFile.path)) { @@ -77217,9 +77286,9 @@ var ts; updateOutputTimestamps(proj); return; } - var buildResult = status.type === UpToDateStatusType.OutOfDateWithPrepend ? - updateBundle(resolved) : - buildSingleProject(resolved); + var buildResult = needsBuild(status, resolved) ? + buildSingleProject(resolved) : + updateBundle(resolved); if (buildResult & BuildResultFlags.AnyErrors) return; var _a = getGlobalDependencyGraph(), referencingProjectsMap = _a.referencingProjectsMap, buildQueue = _a.buildQueue; @@ -77441,7 +77510,12 @@ var ts; return reportStatus(ts.Diagnostics.A_non_dry_build_would_update_timestamps_for_output_of_project_0, proj.options.configFilePath); } var priorNewestUpdateTime = updateOutputTimestampsWorker(proj, minimumDate, ts.Diagnostics.Updating_output_timestamps_of_project_0); - projectStatus.setValue(proj.options.configFilePath, { type: UpToDateStatusType.UpToDate, newestDeclarationFileContentChangedTime: priorNewestUpdateTime }); + var status = { + type: UpToDateStatusType.UpToDate, + newestDeclarationFileContentChangedTime: priorNewestUpdateTime, + oldestOutputFileName: getFirstProjectOutput(proj) + }; + projectStatus.setValue(proj.options.configFilePath, status); } function updateOutputTimestampsWorker(proj, priorNewestUpdateTime, verboseMessage, skipOutputs) { var outputs = getAllProjectOutputs(proj); @@ -77556,9 +77630,9 @@ var ts; reportAndStoreErrors(next, errors); continue; } - var buildResult = status.type === UpToDateStatusType.OutOfDateWithPrepend && !options.force ? - updateBundle(next) : - buildSingleProject(next); + var buildResult = needsBuild(status, next) ? + buildSingleProject(next) : + updateBundle(next); anyFailed = anyFailed || !!(buildResult & BuildResultFlags.AnyErrors); } reportErrorSummary(); @@ -77571,6 +77645,15 @@ var ts; readFileWithCache = savedReadFileWithCache; return anyFailed ? ts.ExitStatus.DiagnosticsPresent_OutputsSkipped : ts.ExitStatus.Success; } + function needsBuild(status, configFile) { + if (status.type !== UpToDateStatusType.OutOfDateWithPrepend || options.force) + return true; + var config = parseConfigFile(configFile); + return !config || + config.fileNames.length === 0 || + !!config.errors.length || + !ts.isIncrementalCompilation(config.options); + } function reportParseConfigFileDiagnostic(proj) { reportAndStoreErrors(proj, [configFileCache.getValue(proj)]); } diff --git a/lib/tsserver.js b/lib/tsserver.js index f5ec4804cf2..9100843c633 100644 --- a/lib/tsserver.js +++ b/lib/tsserver.js @@ -5807,6 +5807,8 @@ var ts; _0_refers_to_a_value_but_is_being_used_as_a_type_here: diag(2749, ts.DiagnosticCategory.Error, "_0_refers_to_a_value_but_is_being_used_as_a_type_here_2749", "'{0}' refers to a value, but is being used as a type here."), The_implementation_signature_is_declared_here: diag(2750, ts.DiagnosticCategory.Error, "The_implementation_signature_is_declared_here_2750", "The implementation signature is declared here."), Circularity_originates_in_type_at_this_location: diag(2751, ts.DiagnosticCategory.Error, "Circularity_originates_in_type_at_this_location_2751", "Circularity originates in type at this location."), + The_first_export_default_is_here: diag(2752, ts.DiagnosticCategory.Error, "The_first_export_default_is_here_2752", "The first export default is here."), + Another_export_default_is_here: diag(2753, ts.DiagnosticCategory.Error, "Another_export_default_is_here_2753", "Another export default is here."), Import_declaration_0_is_using_private_name_1: diag(4000, ts.DiagnosticCategory.Error, "Import_declaration_0_is_using_private_name_1_4000", "Import declaration '{0}' is using private name '{1}'."), Type_parameter_0_of_exported_class_has_or_is_using_private_name_1: diag(4002, ts.DiagnosticCategory.Error, "Type_parameter_0_of_exported_class_has_or_is_using_private_name_1_4002", "Type parameter '{0}' of exported class has or is using private name '{1}'."), Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1: diag(4004, ts.DiagnosticCategory.Error, "Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1_4004", "Type parameter '{0}' of exported interface has or is using private name '{1}'."), @@ -16270,6 +16272,19 @@ var ts; return arr.slice(index); } ts.sliceAfter = sliceAfter; + function addRelatedInfo(diagnostic) { + var _a; + var relatedInformation = []; + for (var _i = 1; _i < arguments.length; _i++) { + relatedInformation[_i - 1] = arguments[_i]; + } + if (!diagnostic.relatedInformation) { + diagnostic.relatedInformation = []; + } + (_a = diagnostic.relatedInformation).push.apply(_a, relatedInformation); + return diagnostic; + } + ts.addRelatedInfo = addRelatedInfo; function minAndMax(arr, getValue) { Debug.assert(arr.length !== 0); var min = getValue(arr[0]); @@ -27719,13 +27734,15 @@ var ts; message_1 = ts.Diagnostics.Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations; messageNeedsName_1 = false; } - if (symbol.declarations && symbol.declarations.length) { + var multipleDefaultExports_1 = false; + if (ts.length(symbol.declarations)) { // If the current node is a default export of some sort, then check if // there are any other default exports that we need to error on. // We'll know whether we have other default exports depending on if `symbol` already has a declaration list set. if (isDefaultExport) { message_1 = ts.Diagnostics.A_module_cannot_have_multiple_default_exports; messageNeedsName_1 = false; + multipleDefaultExports_1 = true; } else { // This is to properly report an error in the case "export default { }" is after export default of class declaration or function declaration. @@ -27736,14 +27753,22 @@ var ts; (node.kind === 254 /* ExportAssignment */ && !node.isExportEquals)) { message_1 = ts.Diagnostics.A_module_cannot_have_multiple_default_exports; messageNeedsName_1 = false; + multipleDefaultExports_1 = true; } } } - var addError = function (decl) { - file.bindDiagnostics.push(createDiagnosticForNode(ts.getNameOfDeclaration(decl) || decl, message_1, messageNeedsName_1 ? getDisplayName(decl) : undefined)); - }; - ts.forEach(symbol.declarations, addError); - addError(node); + var declarationName_1 = ts.getNameOfDeclaration(node) || node; + var relatedInformation_1 = []; + ts.forEach(symbol.declarations, function (declaration, index) { + var decl = ts.getNameOfDeclaration(declaration) || declaration; + var diag = createDiagnosticForNode(decl, message_1, messageNeedsName_1 ? getDisplayName(declaration) : undefined); + file.bindDiagnostics.push(multipleDefaultExports_1 ? ts.addRelatedInfo(diag, createDiagnosticForNode(declarationName_1, index === 0 ? ts.Diagnostics.Another_export_default_is_here : ts.Diagnostics.and_here)) : diag); + if (multipleDefaultExports_1) { + relatedInformation_1.push(createDiagnosticForNode(decl, ts.Diagnostics.The_first_export_default_is_here)); + } + }); + var diag = createDiagnosticForNode(declarationName_1, message_1, messageNeedsName_1 ? getDisplayName(node) : undefined); + file.bindDiagnostics.push(multipleDefaultExports_1 ? ts.addRelatedInfo.apply(void 0, [diag].concat(relatedInformation_1)) : diag); symbol = createSymbol(0 /* None */, name); } } @@ -31778,18 +31803,6 @@ var ts; return diagnostic; } } - function addRelatedInfo(diagnostic) { - var _a; - var relatedInformation = []; - for (var _i = 1; _i < arguments.length; _i++) { - relatedInformation[_i - 1] = arguments[_i]; - } - if (!diagnostic.relatedInformation) { - diagnostic.relatedInformation = []; - } - (_a = diagnostic.relatedInformation).push.apply(_a, relatedInformation); - return diagnostic; - } function error(location, message, arg0, arg1, arg2, arg3) { var diagnostic = location ? ts.createDiagnosticForNode(location, message, arg0, arg1, arg2, arg3) @@ -31969,7 +31982,7 @@ var ts; err.relatedInformation = err.relatedInformation || []; if (ts.length(err.relatedInformation) >= 5) continue; - addRelatedInfo(err, !ts.length(err.relatedInformation) ? ts.createDiagnosticForNode(relatedNode, ts.Diagnostics._0_was_also_declared_here, symbolName) : ts.createDiagnosticForNode(relatedNode, ts.Diagnostics.and_here)); + ts.addRelatedInfo(err, !ts.length(err.relatedInformation) ? ts.createDiagnosticForNode(relatedNode, ts.Diagnostics._0_was_also_declared_here, symbolName) : ts.createDiagnosticForNode(relatedNode, ts.Diagnostics.and_here)); } } function combineSymbolTables(first, second) { @@ -32494,7 +32507,7 @@ var ts; var suggestionName = symbolToString(suggestion); var diagnostic = error(errorLocation, suggestedNameNotFoundMessage, diagnosticName(nameArg), suggestionName); if (suggestion.valueDeclaration) { - addRelatedInfo(diagnostic, ts.createDiagnosticForNode(suggestion.valueDeclaration, ts.Diagnostics._0_is_declared_here, suggestionName)); + ts.addRelatedInfo(diagnostic, ts.createDiagnosticForNode(suggestion.valueDeclaration, ts.Diagnostics._0_is_declared_here, suggestionName)); } } } @@ -32732,7 +32745,7 @@ var ts; } } if (diagnosticMessage) { - addRelatedInfo(diagnosticMessage, ts.createDiagnosticForNode(declaration, ts.Diagnostics._0_is_declared_here, declarationName)); + ts.addRelatedInfo(diagnosticMessage, ts.createDiagnosticForNode(declaration, ts.Diagnostics._0_is_declared_here, declarationName)); } } } @@ -32916,7 +32929,7 @@ var ts; var suggestionName = symbolToString(suggestion); var diagnostic = error(name, ts.Diagnostics.Module_0_has_no_exported_member_1_Did_you_mean_2, moduleName, declarationName, suggestionName); if (suggestion.valueDeclaration) { - addRelatedInfo(diagnostic, ts.createDiagnosticForNode(suggestion.valueDeclaration, ts.Diagnostics._0_is_declared_here, suggestionName)); + ts.addRelatedInfo(diagnostic, ts.createDiagnosticForNode(suggestion.valueDeclaration, ts.Diagnostics._0_is_declared_here, suggestionName)); } } else { @@ -36551,7 +36564,7 @@ var ts; ctorReturn = getReturnTypeOfSignature(ctorSig[0]); } } - addRelatedInfo(err, ts.createDiagnosticForNode(baseConstructorType.symbol.declarations[0], ts.Diagnostics.Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1, symbolToString(baseConstructorType.symbol), typeToString(ctorReturn))); + ts.addRelatedInfo(err, ts.createDiagnosticForNode(baseConstructorType.symbol.declarations[0], ts.Diagnostics.Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1, symbolToString(baseConstructorType.symbol), typeToString(ctorReturn))); } return type.resolvedBaseConstructorType = errorType; } @@ -37539,13 +37552,22 @@ var ts; function unionSpreadIndexInfos(info1, info2) { return info1 && info2 && createIndexInfo(getUnionType([info1.type, info2.type]), info1.isReadonly || info2.isReadonly); } - function includeMixinType(type, types, index) { + function findMixins(types) { + var constructorTypeCount = ts.countWhere(types, function (t) { return getSignaturesOfType(t, 1 /* Construct */).length > 0; }); + var mixinFlags = ts.map(types, isMixinConstructorType); + if (constructorTypeCount > 0 && constructorTypeCount === ts.countWhere(mixinFlags, function (b) { return b; })) { + var firstMixinIndex = mixinFlags.indexOf(/*searchElement*/ true); + mixinFlags[firstMixinIndex] = false; + } + return mixinFlags; + } + function includeMixinType(type, types, mixinFlags, index) { var mixedTypes = []; for (var i = 0; i < types.length; i++) { if (i === index) { mixedTypes.push(type); } - else if (isMixinConstructorType(types[i])) { + else if (mixinFlags[i]) { mixedTypes.push(getReturnTypeOfSignature(getSignaturesOfType(types[i], 1 /* Construct */)[0])); } } @@ -37559,7 +37581,8 @@ var ts; var stringIndexInfo; var numberIndexInfo; var types = type.types; - var mixinCount = ts.countWhere(types, isMixinConstructorType); + var mixinFlags = findMixins(types); + var mixinCount = ts.countWhere(mixinFlags, function (b) { return b; }); var _loop_6 = function (i) { var t = type.types[i]; // When an intersection type contains mixin constructor types, the construct signatures from @@ -37567,12 +37590,12 @@ var ts; // other construct signatures in the intersection type. For example, the intersection type // '{ new(...args: any[]) => A } & { new(s: string) => B }' has a single construct signature // 'new(s: string) => A & B'. - if (mixinCount === 0 || mixinCount === types.length && i === 0 || !isMixinConstructorType(t)) { + if (!mixinFlags[i]) { var signatures = getSignaturesOfType(t, 1 /* Construct */); if (signatures.length && mixinCount > 0) { signatures = ts.map(signatures, function (s) { var clone = cloneSignature(s); - clone.resolvedReturnType = includeMixinType(getReturnTypeOfSignature(s), types, i); + clone.resolvedReturnType = includeMixinType(getReturnTypeOfSignature(s), types, mixinFlags, i); return clone; }); } @@ -38098,7 +38121,7 @@ var ts; if (errorNode) { var diagnostic = error(errorNode, ts.Diagnostics.Type_parameter_0_has_a_circular_constraint, typeToString(t)); if (currentNode && !ts.isNodeDescendantOf(errorNode, currentNode) && !ts.isNodeDescendantOf(currentNode, errorNode)) { - addRelatedInfo(diagnostic, ts.createDiagnosticForNode(currentNode, ts.Diagnostics.Circularity_originates_in_type_at_this_location)); + ts.addRelatedInfo(diagnostic, ts.createDiagnosticForNode(currentNode, ts.Diagnostics.Circularity_originates_in_type_at_this_location)); } } } @@ -40295,12 +40318,15 @@ var ts; // that substitutes the index type for P. For example, for an index access { [P in K]: Box }[X], we // construct the type Box. if (isGenericMappedType(objectType)) { - var mapper = createTypeMapper([getTypeParameterFromMappedType(objectType)], [type.indexType]); - var templateMapper = combineTypeMappers(objectType.mapper, mapper); - return type.simplified = mapType(instantiateType(getTemplateTypeFromMappedType(objectType), templateMapper), getSimplifiedType); + return type.simplified = mapType(substituteIndexedMappedType(objectType, type.indexType), getSimplifiedType); } return type.simplified = type; } + function substituteIndexedMappedType(objectType, index) { + var mapper = createTypeMapper([getTypeParameterFromMappedType(objectType)], [index]); + var templateMapper = combineTypeMappers(objectType.mapper, mapper); + return instantiateType(getTemplateTypeFromMappedType(objectType), templateMapper); + } function getIndexedAccessType(objectType, indexType, accessNode, missingType) { if (missingType === void 0) { missingType = accessNode ? errorType : unknownType; } if (objectType === wildcardType || indexType === wildcardType) { @@ -41565,7 +41591,7 @@ var ts; var resultObj = {}; checkTypeAssignableTo(source, target, node, headMessage, /*containingChain*/ undefined, resultObj); var diagnostic = resultObj.error; - addRelatedInfo(diagnostic, ts.createDiagnosticForNode(node, signatures === constructSignatures ? ts.Diagnostics.Did_you_mean_to_use_new_with_this_expression : ts.Diagnostics.Did_you_mean_to_call_this_expression)); + ts.addRelatedInfo(diagnostic, ts.createDiagnosticForNode(node, signatures === constructSignatures ? ts.Diagnostics.Did_you_mean_to_use_new_with_this_expression : ts.Diagnostics.Did_you_mean_to_call_this_expression)); return true; } } @@ -41600,7 +41626,7 @@ var ts; checkTypeRelatedTo(sourceReturn, targetReturn, relation, returnExpression, /*message*/ undefined, /*chain*/ undefined, resultObj); if (resultObj.error) { if (target.symbol && ts.length(target.symbol.declarations)) { - addRelatedInfo(resultObj.error, ts.createDiagnosticForNode(target.symbol.declarations[0], ts.Diagnostics.The_expected_type_comes_from_the_return_type_of_this_signature)); + ts.addRelatedInfo(resultObj.error, ts.createDiagnosticForNode(target.symbol.declarations[0], ts.Diagnostics.The_expected_type_comes_from_the_return_type_of_this_signature)); } return true; } @@ -41647,13 +41673,13 @@ var ts; undefined; if (indexInfo && indexInfo.declaration && !ts.getSourceFileOfNode(indexInfo.declaration).hasNoDefaultLib) { issuedElaboration = true; - addRelatedInfo(reportedDiag, ts.createDiagnosticForNode(indexInfo.declaration, ts.Diagnostics.The_expected_type_comes_from_this_index_signature)); + ts.addRelatedInfo(reportedDiag, ts.createDiagnosticForNode(indexInfo.declaration, ts.Diagnostics.The_expected_type_comes_from_this_index_signature)); } } if (!issuedElaboration && (targetProp && ts.length(targetProp.declarations) || target.symbol && ts.length(target.symbol.declarations))) { var targetNode = targetProp && ts.length(targetProp.declarations) ? targetProp.declarations[0] : target.symbol.declarations[0]; if (!ts.getSourceFileOfNode(targetNode).hasNoDefaultLib) { - addRelatedInfo(reportedDiag, ts.createDiagnosticForNode(targetNode, ts.Diagnostics.The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1, propertyName && !(nameType.flags & 8192 /* UniqueESSymbol */) ? ts.unescapeLeadingUnderscores(propertyName) : typeToString(nameType), typeToString(target))); + ts.addRelatedInfo(reportedDiag, ts.createDiagnosticForNode(targetNode, ts.Diagnostics.The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1, propertyName && !(nameType.flags & 8192 /* UniqueESSymbol */) ? ts.unescapeLeadingUnderscores(propertyName) : typeToString(nameType), typeToString(target))); } } } @@ -42219,7 +42245,7 @@ var ts; } var diag = ts.createDiagnosticForNodeFromMessageChain(errorNode, errorInfo, relatedInformation); if (relatedInfo) { - addRelatedInfo.apply(void 0, [diag].concat(relatedInfo)); + ts.addRelatedInfo.apply(void 0, [diag].concat(relatedInfo)); } if (errorOutputContainer) { errorOutputContainer.error = diag; @@ -46997,7 +47023,7 @@ var ts; if (!ts.isSourceFile(container)) { var outsideThis = tryGetThisTypeAt(container); if (outsideThis && outsideThis !== globalThisType_1) { - addRelatedInfo(diag, ts.createDiagnosticForNode(container, ts.Diagnostics.An_outer_value_of_this_is_shadowed_by_this_container)); + ts.addRelatedInfo(diag, ts.createDiagnosticForNode(container, ts.Diagnostics.An_outer_value_of_this_is_shadowed_by_this_container)); } } } @@ -47649,7 +47675,15 @@ var ts; } function getTypeOfPropertyOfContextualType(type, name) { return mapType(type, function (t) { - if (t.flags & 3670016 /* StructuredType */) { + if (isGenericMappedType(t)) { + var constraint = getConstraintTypeFromMappedType(t); + var constraintOfConstraint = getBaseConstraintOfType(constraint) || constraint; + var propertyNameType = getLiteralType(ts.unescapeLeadingUnderscores(name)); + if (isTypeAssignableTo(propertyNameType, constraintOfConstraint)) { + return substituteIndexedMappedType(t, propertyNameType); + } + } + else if (t.flags & 3670016 /* StructuredType */) { var prop = getPropertyOfType(t, name); if (prop) { return getTypeOfSymbol(prop); @@ -49222,7 +49256,7 @@ var ts; diagnosticMessage = error(right, ts.Diagnostics.Class_0_used_before_its_declaration, declarationName); } if (diagnosticMessage) { - addRelatedInfo(diagnosticMessage, ts.createDiagnosticForNode(valueDeclaration, ts.Diagnostics._0_is_declared_here, declarationName)); + ts.addRelatedInfo(diagnosticMessage, ts.createDiagnosticForNode(valueDeclaration, ts.Diagnostics._0_is_declared_here, declarationName)); } } function isInPropertyInitializer(node) { @@ -49311,7 +49345,7 @@ var ts; } var resultDiagnostic = ts.createDiagnosticForNodeFromMessageChain(propNode, errorInfo); if (relatedInfo) { - addRelatedInfo(resultDiagnostic, relatedInfo); + ts.addRelatedInfo(resultDiagnostic, relatedInfo); } diagnostics.add(resultDiagnostic); } @@ -50062,25 +50096,41 @@ var ts; if (argCount <= max && hasSpreadArgument) { argCount--; } + var spanArray; var related; + var error = hasRestParameter || hasSpreadArgument ? hasRestParameter && hasSpreadArgument ? ts.Diagnostics.Expected_at_least_0_arguments_but_got_1_or_more : + hasRestParameter ? ts.Diagnostics.Expected_at_least_0_arguments_but_got_1 : + ts.Diagnostics.Expected_0_arguments_but_got_1_or_more : ts.Diagnostics.Expected_0_arguments_but_got_1; if (closestSignature && getMinArgumentCount(closestSignature) > argCount && closestSignature.declaration) { var paramDecl = closestSignature.declaration.parameters[closestSignature.thisParameter ? argCount + 1 : argCount]; if (paramDecl) { related = ts.createDiagnosticForNode(paramDecl, ts.isBindingPattern(paramDecl.name) ? ts.Diagnostics.An_argument_matching_this_binding_pattern_was_not_provided : ts.Diagnostics.An_argument_for_0_was_not_provided, !paramDecl.name ? argCount : !ts.isBindingPattern(paramDecl.name) ? ts.idText(getFirstIdentifier(paramDecl.name)) : undefined); } } - if (hasRestParameter || hasSpreadArgument) { - var error_1 = hasRestParameter && hasSpreadArgument ? ts.Diagnostics.Expected_at_least_0_arguments_but_got_1_or_more : - hasRestParameter ? ts.Diagnostics.Expected_at_least_0_arguments_but_got_1 : - ts.Diagnostics.Expected_0_arguments_but_got_1_or_more; - var diagnostic_1 = ts.createDiagnosticForNode(node, error_1, paramRange, argCount); - return related ? addRelatedInfo(diagnostic_1, related) : diagnostic_1; - } if (min < argCount && argCount < max) { return ts.createDiagnosticForNode(node, ts.Diagnostics.No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments, argCount, belowArgCount, aboveArgCount); } - var diagnostic = ts.createDiagnosticForNode(node, ts.Diagnostics.Expected_0_arguments_but_got_1, paramRange, argCount); - return related ? addRelatedInfo(diagnostic, related) : diagnostic; + if (!hasSpreadArgument && argCount < min) { + var diagnostic_1 = ts.createDiagnosticForNode(node, error, paramRange, argCount); + return related ? ts.addRelatedInfo(diagnostic_1, related) : diagnostic_1; + } + if (hasRestParameter || hasSpreadArgument) { + spanArray = ts.createNodeArray(args); + if (hasSpreadArgument && argCount) { + var nextArg = ts.elementAt(args, getSpreadArgumentIndex(args) + 1) || undefined; + spanArray = ts.createNodeArray(args.slice(max > argCount && nextArg ? args.indexOf(nextArg) : max)); + } + } + else { + spanArray = ts.createNodeArray(args.slice(max)); + } + spanArray.pos = ts.first(spanArray).pos; + spanArray.end = ts.last(spanArray).end; + if (spanArray.end === spanArray.pos) { + spanArray.end++; + } + var diagnostic = ts.createDiagnosticForNodeArray(ts.getSourceFileOfNode(node), spanArray, error, paramRange, argCount); + return related ? ts.addRelatedInfo(diagnostic, related) : diagnostic; } function getTypeArgumentArityError(node, signatures, typeArguments) { var argCount = typeArguments.length; @@ -50593,13 +50643,12 @@ var ts; var firstBase = baseTypes[0]; if (firstBase.flags & 2097152 /* Intersection */) { var types = firstBase.types; - var mixinCount = ts.countWhere(types, isMixinConstructorType); + var mixinFlags = findMixins(types); var i = 0; for (var _i = 0, _a = firstBase.types; _i < _a.length; _i++) { var intersectionMember = _a[_i]; - i++; // We want to ignore mixin ctors - if (mixinCount === 0 || mixinCount === types.length && i === 0 || !isMixinConstructorType(intersectionMember)) { + if (!mixinFlags[i]) { if (ts.getObjectFlags(intersectionMember) & (1 /* Class */ | 2 /* Interface */)) { if (intersectionMember.symbol === target) { return true; @@ -50609,6 +50658,7 @@ var ts; } } } + i++; } return false; } @@ -50652,7 +50702,7 @@ var ts; var diagnostic = error(node, (kind === 0 /* Call */ ? ts.Diagnostics.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures : ts.Diagnostics.Cannot_use_new_with_an_expression_whose_type_lacks_a_call_or_construct_signature), typeToString(apparentType)); - invocationErrorRecovery(apparentType, kind, relatedInformation ? addRelatedInfo(diagnostic, relatedInformation) : diagnostic); + invocationErrorRecovery(apparentType, kind, relatedInformation ? ts.addRelatedInfo(diagnostic, relatedInformation) : diagnostic); } function invocationErrorRecovery(apparentType, kind, diagnostic) { if (!apparentType.symbol) { @@ -50665,7 +50715,7 @@ var ts; var sigs = getSignaturesOfType(getTypeOfSymbol(getSymbolLinks(apparentType.symbol).target), kind); if (!sigs || !sigs.length) return; - addRelatedInfo(diagnostic, ts.createDiagnosticForNode(importNode, ts.Diagnostics.Type_originates_at_this_import_A_namespace_style_import_cannot_be_called_or_constructed_and_will_cause_a_failure_at_runtime_Consider_using_a_default_import_or_import_require_here_instead)); + ts.addRelatedInfo(diagnostic, ts.createDiagnosticForNode(importNode, ts.Diagnostics.Type_originates_at_this_import_A_namespace_style_import_cannot_be_called_or_constructed_and_will_cause_a_failure_at_runtime_Consider_using_a_default_import_or_import_require_here_instead)); } } function resolveTaggedTemplateExpression(node, candidatesOutArray, checkMode) { @@ -53895,7 +53945,7 @@ var ts; for (var _a = 0, signatures_6 = signatures; _a < signatures_6.length; _a++) { var signature = signatures_6[_a]; if (!isImplementationCompatibleWithOverload(bodySignature, signature)) { - addRelatedInfo(error(signature.declaration, ts.Diagnostics.This_overload_signature_is_not_compatible_with_its_implementation_signature), ts.createDiagnosticForNode(bodyDeclaration, ts.Diagnostics.The_implementation_signature_is_declared_here)); + ts.addRelatedInfo(error(signature.declaration, ts.Diagnostics.This_overload_signature_is_not_compatible_with_its_implementation_signature), ts.createDiagnosticForNode(bodyDeclaration, ts.Diagnostics.The_implementation_signature_is_declared_here)); break; } } @@ -58869,8 +58919,8 @@ var ts; else { // Otherwise issue top-level error since the files appear very identical in terms of what they contain var list = ts.arrayFrom(conflictingSymbols.keys()).join(", "); - diagnostics.add(addRelatedInfo(ts.createDiagnosticForNode(firstFile, ts.Diagnostics.Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0, list), ts.createDiagnosticForNode(secondFile, ts.Diagnostics.Conflicts_are_in_this_file))); - diagnostics.add(addRelatedInfo(ts.createDiagnosticForNode(secondFile, ts.Diagnostics.Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0, list), ts.createDiagnosticForNode(firstFile, ts.Diagnostics.Conflicts_are_in_this_file))); + diagnostics.add(ts.addRelatedInfo(ts.createDiagnosticForNode(firstFile, ts.Diagnostics.Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0, list), ts.createDiagnosticForNode(secondFile, ts.Diagnostics.Conflicts_are_in_this_file))); + diagnostics.add(ts.addRelatedInfo(ts.createDiagnosticForNode(secondFile, ts.Diagnostics.Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0, list), ts.createDiagnosticForNode(firstFile, ts.Diagnostics.Conflicts_are_in_this_file))); } }); amalgamatedDuplicates = undefined; @@ -59266,10 +59316,10 @@ var ts; var nonSimpleParameters = getNonSimpleParameters(node.parameters); if (ts.length(nonSimpleParameters)) { ts.forEach(nonSimpleParameters, function (parameter) { - addRelatedInfo(error(parameter, ts.Diagnostics.This_parameter_is_not_allowed_with_use_strict_directive), ts.createDiagnosticForNode(useStrictDirective_1, ts.Diagnostics.use_strict_directive_used_here)); + ts.addRelatedInfo(error(parameter, ts.Diagnostics.This_parameter_is_not_allowed_with_use_strict_directive), ts.createDiagnosticForNode(useStrictDirective_1, ts.Diagnostics.use_strict_directive_used_here)); }); var diagnostics_1 = nonSimpleParameters.map(function (parameter, index) { return (index === 0 ? ts.createDiagnosticForNode(parameter, ts.Diagnostics.Non_simple_parameter_declared_here) : ts.createDiagnosticForNode(parameter, ts.Diagnostics.and_here)); }); - addRelatedInfo.apply(void 0, [error(useStrictDirective_1, ts.Diagnostics.use_strict_directive_cannot_be_used_with_non_simple_parameter_list)].concat(diagnostics_1)); + ts.addRelatedInfo.apply(void 0, [error(useStrictDirective_1, ts.Diagnostics.use_strict_directive_cannot_be_used_with_non_simple_parameter_list)].concat(diagnostics_1)); return true; } } @@ -81251,12 +81301,28 @@ var ts; return result.diagnostics; } ts.getDeclarationDiagnostics = getDeclarationDiagnostics; + function hasInternalAnnotation(range, currentSourceFile) { + var comment = currentSourceFile.text.substring(range.pos, range.end); + return ts.stringContains(comment, "@internal"); + } function isInternalDeclaration(node, currentSourceFile) { var parseTreeNode = ts.getParseTreeNode(node); + if (parseTreeNode && parseTreeNode.kind === 151 /* Parameter */) { + var paramIdx = parseTreeNode.parent.parameters.indexOf(parseTreeNode); + var previousSibling = paramIdx > 0 ? parseTreeNode.parent.parameters[paramIdx - 1] : undefined; + var text = currentSourceFile.text; + var commentRanges = previousSibling + ? ts.concatenate( + // to handle + // ... parameters, /* @internal */ + // public param: string + ts.getTrailingCommentRanges(text, ts.skipTrivia(text, previousSibling.end + 1, /* stopAfterLineBreak */ false, /* stopAtComments */ true)), ts.getLeadingCommentRanges(text, node.pos)) + : ts.getTrailingCommentRanges(text, ts.skipTrivia(text, node.pos, /* stopAfterLineBreak */ false, /* stopAtComments */ true)); + return commentRanges && commentRanges.length && hasInternalAnnotation(ts.last(commentRanges), currentSourceFile); + } var leadingCommentRanges = parseTreeNode && ts.getLeadingCommentRangesOfNode(parseTreeNode, currentSourceFile); return !!ts.forEach(leadingCommentRanges, function (range) { - var comment = currentSourceFile.text.substring(range.pos, range.end); - return ts.stringContains(comment, "@internal"); + return hasInternalAnnotation(range, currentSourceFile); }); } ts.isInternalDeclaration = isInternalDeclaration; @@ -82113,7 +82179,7 @@ var ts; if (ctor) { var oldDiag_1 = getSymbolAccessibilityDiagnostic; parameterProperties = ts.compact(ts.flatMap(ctor.parameters, function (param) { - if (!ts.hasModifier(param, 92 /* ParameterPropertyModifier */)) + if (!ts.hasModifier(param, 92 /* ParameterPropertyModifier */) || shouldStripInternal(param)) return; getSymbolAccessibilityDiagnostic = ts.createGetSymbolAccessibilityDiagnosticForNode(param); if (param.name.kind === 72 /* Identifier */) { @@ -88170,11 +88236,18 @@ var ts; if (rootNames.length) { for (var _i = 0, resolvedProjectReferences_1 = resolvedProjectReferences; _i < resolvedProjectReferences_1.length; _i++) { var parsedRef = resolvedProjectReferences_1[_i]; - if (parsedRef) { - var out = parsedRef.commandLine.options.outFile || parsedRef.commandLine.options.out; - if (out) { - var dtsOutfile = ts.changeExtension(out, ".d.ts"); - processSourceFile(dtsOutfile, /*isDefaultLib*/ false, /*ignoreNoDefaultLib*/ false, /*packageId*/ undefined); + if (!parsedRef) + continue; + var out = parsedRef.commandLine.options.outFile || parsedRef.commandLine.options.out; + if (out) { + processSourceFile(ts.changeExtension(out, ".d.ts"), /*isDefaultLib*/ false, /*ignoreNoDefaultLib*/ false, /*packageId*/ undefined); + } + else if (ts.getEmitModuleKind(parsedRef.commandLine.options) === ts.ModuleKind.None) { + for (var _a = 0, _b = parsedRef.commandLine.fileNames; _a < _b.length; _a++) { + var fileName = _b[_a]; + if (!ts.fileExtensionIs(fileName, ".d.ts" /* Dts */) && ts.hasTSFileExtension(fileName)) { + processSourceFile(ts.getOutputDeclarationFileName(fileName, parsedRef.commandLine), /*isDefaultLib*/ false, /*ignoreNoDefaultLib*/ false, /*packageId*/ undefined); + } } } } @@ -88222,8 +88295,8 @@ var ts; // not part of the new program. if (oldProgram && host.onReleaseOldSourceFile) { var oldSourceFiles = oldProgram.getSourceFiles(); - for (var _a = 0, oldSourceFiles_1 = oldSourceFiles; _a < oldSourceFiles_1.length; _a++) { - var oldSourceFile = oldSourceFiles_1[_a]; + for (var _c = 0, oldSourceFiles_1 = oldSourceFiles; _c < oldSourceFiles_1.length; _c++) { + var oldSourceFile = oldSourceFiles_1[_c]; var newFile = getSourceFileByPath(oldSourceFile.resolvedPath); if (shouldCreateNewSourceFile || !newFile || // old file wasnt redirect but new file is @@ -93992,9 +94065,9 @@ var ts; updateOutputTimestamps(proj); return; } - var buildResult = status.type === UpToDateStatusType.OutOfDateWithPrepend ? - updateBundle(resolved) : // Fake that files have been built by manipulating prepend and existing output - buildSingleProject(resolved); // Actual build + var buildResult = needsBuild(status, resolved) ? + buildSingleProject(resolved) : // Actual build + updateBundle(resolved); // Fake that files have been built by manipulating prepend and existing output if (buildResult & BuildResultFlags.AnyErrors) return; var _a = getGlobalDependencyGraph(), referencingProjectsMap = _a.referencingProjectsMap, buildQueue = _a.buildQueue; @@ -94237,7 +94310,12 @@ var ts; return reportStatus(ts.Diagnostics.A_non_dry_build_would_update_timestamps_for_output_of_project_0, proj.options.configFilePath); } var priorNewestUpdateTime = updateOutputTimestampsWorker(proj, minimumDate, ts.Diagnostics.Updating_output_timestamps_of_project_0); - projectStatus.setValue(proj.options.configFilePath, { type: UpToDateStatusType.UpToDate, newestDeclarationFileContentChangedTime: priorNewestUpdateTime }); + var status = { + type: UpToDateStatusType.UpToDate, + newestDeclarationFileContentChangedTime: priorNewestUpdateTime, + oldestOutputFileName: getFirstProjectOutput(proj) + }; + projectStatus.setValue(proj.options.configFilePath, status); } function updateOutputTimestampsWorker(proj, priorNewestUpdateTime, verboseMessage, skipOutputs) { var outputs = getAllProjectOutputs(proj); @@ -94361,9 +94439,9 @@ var ts; // Do nothing continue; } - var buildResult = status.type === UpToDateStatusType.OutOfDateWithPrepend && !options.force ? - updateBundle(next) : // Fake that files have been built by manipulating prepend and existing output - buildSingleProject(next); // Actual build + var buildResult = needsBuild(status, next) ? + buildSingleProject(next) : // Actual build + updateBundle(next); // Fake that files have been built by manipulating prepend and existing output anyFailed = anyFailed || !!(buildResult & BuildResultFlags.AnyErrors); } reportErrorSummary(); @@ -94376,6 +94454,15 @@ var ts; readFileWithCache = savedReadFileWithCache; return anyFailed ? ts.ExitStatus.DiagnosticsPresent_OutputsSkipped : ts.ExitStatus.Success; } + function needsBuild(status, configFile) { + if (status.type !== UpToDateStatusType.OutOfDateWithPrepend || options.force) + return true; + var config = parseConfigFile(configFile); + return !config || + config.fileNames.length === 0 || + !!config.errors.length || + !ts.isIncrementalCompilation(config.options); + } function reportParseConfigFileDiagnostic(proj) { reportAndStoreErrors(proj, [configFileCache.getValue(proj)]); } @@ -124147,7 +124234,8 @@ var ts; server.isScriptInfo = isScriptInfo; var Project = /** @class */ (function () { /*@internal*/ - function Project(projectName, projectKind, projectService, documentRegistry, hasExplicitListOfFiles, lastFileExceededProgramSize, compilerOptions, compileOnSaveEnabled, directoryStructureHost, currentDirectory) { + function Project( + /*@internal*/ projectName, projectKind, projectService, documentRegistry, hasExplicitListOfFiles, lastFileExceededProgramSize, compilerOptions, compileOnSaveEnabled, directoryStructureHost, currentDirectory) { var _this = this; this.projectName = projectName; this.projectKind = projectKind; diff --git a/lib/tsserverlibrary.js b/lib/tsserverlibrary.js index 3250f48a7f0..117e27c4b47 100644 --- a/lib/tsserverlibrary.js +++ b/lib/tsserverlibrary.js @@ -5806,6 +5806,8 @@ var ts; _0_refers_to_a_value_but_is_being_used_as_a_type_here: diag(2749, ts.DiagnosticCategory.Error, "_0_refers_to_a_value_but_is_being_used_as_a_type_here_2749", "'{0}' refers to a value, but is being used as a type here."), The_implementation_signature_is_declared_here: diag(2750, ts.DiagnosticCategory.Error, "The_implementation_signature_is_declared_here_2750", "The implementation signature is declared here."), Circularity_originates_in_type_at_this_location: diag(2751, ts.DiagnosticCategory.Error, "Circularity_originates_in_type_at_this_location_2751", "Circularity originates in type at this location."), + The_first_export_default_is_here: diag(2752, ts.DiagnosticCategory.Error, "The_first_export_default_is_here_2752", "The first export default is here."), + Another_export_default_is_here: diag(2753, ts.DiagnosticCategory.Error, "Another_export_default_is_here_2753", "Another export default is here."), Import_declaration_0_is_using_private_name_1: diag(4000, ts.DiagnosticCategory.Error, "Import_declaration_0_is_using_private_name_1_4000", "Import declaration '{0}' is using private name '{1}'."), Type_parameter_0_of_exported_class_has_or_is_using_private_name_1: diag(4002, ts.DiagnosticCategory.Error, "Type_parameter_0_of_exported_class_has_or_is_using_private_name_1_4002", "Type parameter '{0}' of exported class has or is using private name '{1}'."), Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1: diag(4004, ts.DiagnosticCategory.Error, "Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1_4004", "Type parameter '{0}' of exported interface has or is using private name '{1}'."), @@ -16269,6 +16271,19 @@ var ts; return arr.slice(index); } ts.sliceAfter = sliceAfter; + function addRelatedInfo(diagnostic) { + var _a; + var relatedInformation = []; + for (var _i = 1; _i < arguments.length; _i++) { + relatedInformation[_i - 1] = arguments[_i]; + } + if (!diagnostic.relatedInformation) { + diagnostic.relatedInformation = []; + } + (_a = diagnostic.relatedInformation).push.apply(_a, relatedInformation); + return diagnostic; + } + ts.addRelatedInfo = addRelatedInfo; function minAndMax(arr, getValue) { Debug.assert(arr.length !== 0); var min = getValue(arr[0]); @@ -27718,13 +27733,15 @@ var ts; message_1 = ts.Diagnostics.Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations; messageNeedsName_1 = false; } - if (symbol.declarations && symbol.declarations.length) { + var multipleDefaultExports_1 = false; + if (ts.length(symbol.declarations)) { // If the current node is a default export of some sort, then check if // there are any other default exports that we need to error on. // We'll know whether we have other default exports depending on if `symbol` already has a declaration list set. if (isDefaultExport) { message_1 = ts.Diagnostics.A_module_cannot_have_multiple_default_exports; messageNeedsName_1 = false; + multipleDefaultExports_1 = true; } else { // This is to properly report an error in the case "export default { }" is after export default of class declaration or function declaration. @@ -27735,14 +27752,22 @@ var ts; (node.kind === 254 /* ExportAssignment */ && !node.isExportEquals)) { message_1 = ts.Diagnostics.A_module_cannot_have_multiple_default_exports; messageNeedsName_1 = false; + multipleDefaultExports_1 = true; } } } - var addError = function (decl) { - file.bindDiagnostics.push(createDiagnosticForNode(ts.getNameOfDeclaration(decl) || decl, message_1, messageNeedsName_1 ? getDisplayName(decl) : undefined)); - }; - ts.forEach(symbol.declarations, addError); - addError(node); + var declarationName_1 = ts.getNameOfDeclaration(node) || node; + var relatedInformation_1 = []; + ts.forEach(symbol.declarations, function (declaration, index) { + var decl = ts.getNameOfDeclaration(declaration) || declaration; + var diag = createDiagnosticForNode(decl, message_1, messageNeedsName_1 ? getDisplayName(declaration) : undefined); + file.bindDiagnostics.push(multipleDefaultExports_1 ? ts.addRelatedInfo(diag, createDiagnosticForNode(declarationName_1, index === 0 ? ts.Diagnostics.Another_export_default_is_here : ts.Diagnostics.and_here)) : diag); + if (multipleDefaultExports_1) { + relatedInformation_1.push(createDiagnosticForNode(decl, ts.Diagnostics.The_first_export_default_is_here)); + } + }); + var diag = createDiagnosticForNode(declarationName_1, message_1, messageNeedsName_1 ? getDisplayName(node) : undefined); + file.bindDiagnostics.push(multipleDefaultExports_1 ? ts.addRelatedInfo.apply(void 0, [diag].concat(relatedInformation_1)) : diag); symbol = createSymbol(0 /* None */, name); } } @@ -31777,18 +31802,6 @@ var ts; return diagnostic; } } - function addRelatedInfo(diagnostic) { - var _a; - var relatedInformation = []; - for (var _i = 1; _i < arguments.length; _i++) { - relatedInformation[_i - 1] = arguments[_i]; - } - if (!diagnostic.relatedInformation) { - diagnostic.relatedInformation = []; - } - (_a = diagnostic.relatedInformation).push.apply(_a, relatedInformation); - return diagnostic; - } function error(location, message, arg0, arg1, arg2, arg3) { var diagnostic = location ? ts.createDiagnosticForNode(location, message, arg0, arg1, arg2, arg3) @@ -31968,7 +31981,7 @@ var ts; err.relatedInformation = err.relatedInformation || []; if (ts.length(err.relatedInformation) >= 5) continue; - addRelatedInfo(err, !ts.length(err.relatedInformation) ? ts.createDiagnosticForNode(relatedNode, ts.Diagnostics._0_was_also_declared_here, symbolName) : ts.createDiagnosticForNode(relatedNode, ts.Diagnostics.and_here)); + ts.addRelatedInfo(err, !ts.length(err.relatedInformation) ? ts.createDiagnosticForNode(relatedNode, ts.Diagnostics._0_was_also_declared_here, symbolName) : ts.createDiagnosticForNode(relatedNode, ts.Diagnostics.and_here)); } } function combineSymbolTables(first, second) { @@ -32493,7 +32506,7 @@ var ts; var suggestionName = symbolToString(suggestion); var diagnostic = error(errorLocation, suggestedNameNotFoundMessage, diagnosticName(nameArg), suggestionName); if (suggestion.valueDeclaration) { - addRelatedInfo(diagnostic, ts.createDiagnosticForNode(suggestion.valueDeclaration, ts.Diagnostics._0_is_declared_here, suggestionName)); + ts.addRelatedInfo(diagnostic, ts.createDiagnosticForNode(suggestion.valueDeclaration, ts.Diagnostics._0_is_declared_here, suggestionName)); } } } @@ -32731,7 +32744,7 @@ var ts; } } if (diagnosticMessage) { - addRelatedInfo(diagnosticMessage, ts.createDiagnosticForNode(declaration, ts.Diagnostics._0_is_declared_here, declarationName)); + ts.addRelatedInfo(diagnosticMessage, ts.createDiagnosticForNode(declaration, ts.Diagnostics._0_is_declared_here, declarationName)); } } } @@ -32915,7 +32928,7 @@ var ts; var suggestionName = symbolToString(suggestion); var diagnostic = error(name, ts.Diagnostics.Module_0_has_no_exported_member_1_Did_you_mean_2, moduleName, declarationName, suggestionName); if (suggestion.valueDeclaration) { - addRelatedInfo(diagnostic, ts.createDiagnosticForNode(suggestion.valueDeclaration, ts.Diagnostics._0_is_declared_here, suggestionName)); + ts.addRelatedInfo(diagnostic, ts.createDiagnosticForNode(suggestion.valueDeclaration, ts.Diagnostics._0_is_declared_here, suggestionName)); } } else { @@ -36550,7 +36563,7 @@ var ts; ctorReturn = getReturnTypeOfSignature(ctorSig[0]); } } - addRelatedInfo(err, ts.createDiagnosticForNode(baseConstructorType.symbol.declarations[0], ts.Diagnostics.Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1, symbolToString(baseConstructorType.symbol), typeToString(ctorReturn))); + ts.addRelatedInfo(err, ts.createDiagnosticForNode(baseConstructorType.symbol.declarations[0], ts.Diagnostics.Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1, symbolToString(baseConstructorType.symbol), typeToString(ctorReturn))); } return type.resolvedBaseConstructorType = errorType; } @@ -37538,13 +37551,22 @@ var ts; function unionSpreadIndexInfos(info1, info2) { return info1 && info2 && createIndexInfo(getUnionType([info1.type, info2.type]), info1.isReadonly || info2.isReadonly); } - function includeMixinType(type, types, index) { + function findMixins(types) { + var constructorTypeCount = ts.countWhere(types, function (t) { return getSignaturesOfType(t, 1 /* Construct */).length > 0; }); + var mixinFlags = ts.map(types, isMixinConstructorType); + if (constructorTypeCount > 0 && constructorTypeCount === ts.countWhere(mixinFlags, function (b) { return b; })) { + var firstMixinIndex = mixinFlags.indexOf(/*searchElement*/ true); + mixinFlags[firstMixinIndex] = false; + } + return mixinFlags; + } + function includeMixinType(type, types, mixinFlags, index) { var mixedTypes = []; for (var i = 0; i < types.length; i++) { if (i === index) { mixedTypes.push(type); } - else if (isMixinConstructorType(types[i])) { + else if (mixinFlags[i]) { mixedTypes.push(getReturnTypeOfSignature(getSignaturesOfType(types[i], 1 /* Construct */)[0])); } } @@ -37558,7 +37580,8 @@ var ts; var stringIndexInfo; var numberIndexInfo; var types = type.types; - var mixinCount = ts.countWhere(types, isMixinConstructorType); + var mixinFlags = findMixins(types); + var mixinCount = ts.countWhere(mixinFlags, function (b) { return b; }); var _loop_6 = function (i) { var t = type.types[i]; // When an intersection type contains mixin constructor types, the construct signatures from @@ -37566,12 +37589,12 @@ var ts; // other construct signatures in the intersection type. For example, the intersection type // '{ new(...args: any[]) => A } & { new(s: string) => B }' has a single construct signature // 'new(s: string) => A & B'. - if (mixinCount === 0 || mixinCount === types.length && i === 0 || !isMixinConstructorType(t)) { + if (!mixinFlags[i]) { var signatures = getSignaturesOfType(t, 1 /* Construct */); if (signatures.length && mixinCount > 0) { signatures = ts.map(signatures, function (s) { var clone = cloneSignature(s); - clone.resolvedReturnType = includeMixinType(getReturnTypeOfSignature(s), types, i); + clone.resolvedReturnType = includeMixinType(getReturnTypeOfSignature(s), types, mixinFlags, i); return clone; }); } @@ -38097,7 +38120,7 @@ var ts; if (errorNode) { var diagnostic = error(errorNode, ts.Diagnostics.Type_parameter_0_has_a_circular_constraint, typeToString(t)); if (currentNode && !ts.isNodeDescendantOf(errorNode, currentNode) && !ts.isNodeDescendantOf(currentNode, errorNode)) { - addRelatedInfo(diagnostic, ts.createDiagnosticForNode(currentNode, ts.Diagnostics.Circularity_originates_in_type_at_this_location)); + ts.addRelatedInfo(diagnostic, ts.createDiagnosticForNode(currentNode, ts.Diagnostics.Circularity_originates_in_type_at_this_location)); } } } @@ -40294,12 +40317,15 @@ var ts; // that substitutes the index type for P. For example, for an index access { [P in K]: Box }[X], we // construct the type Box. if (isGenericMappedType(objectType)) { - var mapper = createTypeMapper([getTypeParameterFromMappedType(objectType)], [type.indexType]); - var templateMapper = combineTypeMappers(objectType.mapper, mapper); - return type.simplified = mapType(instantiateType(getTemplateTypeFromMappedType(objectType), templateMapper), getSimplifiedType); + return type.simplified = mapType(substituteIndexedMappedType(objectType, type.indexType), getSimplifiedType); } return type.simplified = type; } + function substituteIndexedMappedType(objectType, index) { + var mapper = createTypeMapper([getTypeParameterFromMappedType(objectType)], [index]); + var templateMapper = combineTypeMappers(objectType.mapper, mapper); + return instantiateType(getTemplateTypeFromMappedType(objectType), templateMapper); + } function getIndexedAccessType(objectType, indexType, accessNode, missingType) { if (missingType === void 0) { missingType = accessNode ? errorType : unknownType; } if (objectType === wildcardType || indexType === wildcardType) { @@ -41564,7 +41590,7 @@ var ts; var resultObj = {}; checkTypeAssignableTo(source, target, node, headMessage, /*containingChain*/ undefined, resultObj); var diagnostic = resultObj.error; - addRelatedInfo(diagnostic, ts.createDiagnosticForNode(node, signatures === constructSignatures ? ts.Diagnostics.Did_you_mean_to_use_new_with_this_expression : ts.Diagnostics.Did_you_mean_to_call_this_expression)); + ts.addRelatedInfo(diagnostic, ts.createDiagnosticForNode(node, signatures === constructSignatures ? ts.Diagnostics.Did_you_mean_to_use_new_with_this_expression : ts.Diagnostics.Did_you_mean_to_call_this_expression)); return true; } } @@ -41599,7 +41625,7 @@ var ts; checkTypeRelatedTo(sourceReturn, targetReturn, relation, returnExpression, /*message*/ undefined, /*chain*/ undefined, resultObj); if (resultObj.error) { if (target.symbol && ts.length(target.symbol.declarations)) { - addRelatedInfo(resultObj.error, ts.createDiagnosticForNode(target.symbol.declarations[0], ts.Diagnostics.The_expected_type_comes_from_the_return_type_of_this_signature)); + ts.addRelatedInfo(resultObj.error, ts.createDiagnosticForNode(target.symbol.declarations[0], ts.Diagnostics.The_expected_type_comes_from_the_return_type_of_this_signature)); } return true; } @@ -41646,13 +41672,13 @@ var ts; undefined; if (indexInfo && indexInfo.declaration && !ts.getSourceFileOfNode(indexInfo.declaration).hasNoDefaultLib) { issuedElaboration = true; - addRelatedInfo(reportedDiag, ts.createDiagnosticForNode(indexInfo.declaration, ts.Diagnostics.The_expected_type_comes_from_this_index_signature)); + ts.addRelatedInfo(reportedDiag, ts.createDiagnosticForNode(indexInfo.declaration, ts.Diagnostics.The_expected_type_comes_from_this_index_signature)); } } if (!issuedElaboration && (targetProp && ts.length(targetProp.declarations) || target.symbol && ts.length(target.symbol.declarations))) { var targetNode = targetProp && ts.length(targetProp.declarations) ? targetProp.declarations[0] : target.symbol.declarations[0]; if (!ts.getSourceFileOfNode(targetNode).hasNoDefaultLib) { - addRelatedInfo(reportedDiag, ts.createDiagnosticForNode(targetNode, ts.Diagnostics.The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1, propertyName && !(nameType.flags & 8192 /* UniqueESSymbol */) ? ts.unescapeLeadingUnderscores(propertyName) : typeToString(nameType), typeToString(target))); + ts.addRelatedInfo(reportedDiag, ts.createDiagnosticForNode(targetNode, ts.Diagnostics.The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1, propertyName && !(nameType.flags & 8192 /* UniqueESSymbol */) ? ts.unescapeLeadingUnderscores(propertyName) : typeToString(nameType), typeToString(target))); } } } @@ -42218,7 +42244,7 @@ var ts; } var diag = ts.createDiagnosticForNodeFromMessageChain(errorNode, errorInfo, relatedInformation); if (relatedInfo) { - addRelatedInfo.apply(void 0, [diag].concat(relatedInfo)); + ts.addRelatedInfo.apply(void 0, [diag].concat(relatedInfo)); } if (errorOutputContainer) { errorOutputContainer.error = diag; @@ -46996,7 +47022,7 @@ var ts; if (!ts.isSourceFile(container)) { var outsideThis = tryGetThisTypeAt(container); if (outsideThis && outsideThis !== globalThisType_1) { - addRelatedInfo(diag, ts.createDiagnosticForNode(container, ts.Diagnostics.An_outer_value_of_this_is_shadowed_by_this_container)); + ts.addRelatedInfo(diag, ts.createDiagnosticForNode(container, ts.Diagnostics.An_outer_value_of_this_is_shadowed_by_this_container)); } } } @@ -47648,7 +47674,15 @@ var ts; } function getTypeOfPropertyOfContextualType(type, name) { return mapType(type, function (t) { - if (t.flags & 3670016 /* StructuredType */) { + if (isGenericMappedType(t)) { + var constraint = getConstraintTypeFromMappedType(t); + var constraintOfConstraint = getBaseConstraintOfType(constraint) || constraint; + var propertyNameType = getLiteralType(ts.unescapeLeadingUnderscores(name)); + if (isTypeAssignableTo(propertyNameType, constraintOfConstraint)) { + return substituteIndexedMappedType(t, propertyNameType); + } + } + else if (t.flags & 3670016 /* StructuredType */) { var prop = getPropertyOfType(t, name); if (prop) { return getTypeOfSymbol(prop); @@ -49221,7 +49255,7 @@ var ts; diagnosticMessage = error(right, ts.Diagnostics.Class_0_used_before_its_declaration, declarationName); } if (diagnosticMessage) { - addRelatedInfo(diagnosticMessage, ts.createDiagnosticForNode(valueDeclaration, ts.Diagnostics._0_is_declared_here, declarationName)); + ts.addRelatedInfo(diagnosticMessage, ts.createDiagnosticForNode(valueDeclaration, ts.Diagnostics._0_is_declared_here, declarationName)); } } function isInPropertyInitializer(node) { @@ -49310,7 +49344,7 @@ var ts; } var resultDiagnostic = ts.createDiagnosticForNodeFromMessageChain(propNode, errorInfo); if (relatedInfo) { - addRelatedInfo(resultDiagnostic, relatedInfo); + ts.addRelatedInfo(resultDiagnostic, relatedInfo); } diagnostics.add(resultDiagnostic); } @@ -50061,25 +50095,41 @@ var ts; if (argCount <= max && hasSpreadArgument) { argCount--; } + var spanArray; var related; + var error = hasRestParameter || hasSpreadArgument ? hasRestParameter && hasSpreadArgument ? ts.Diagnostics.Expected_at_least_0_arguments_but_got_1_or_more : + hasRestParameter ? ts.Diagnostics.Expected_at_least_0_arguments_but_got_1 : + ts.Diagnostics.Expected_0_arguments_but_got_1_or_more : ts.Diagnostics.Expected_0_arguments_but_got_1; if (closestSignature && getMinArgumentCount(closestSignature) > argCount && closestSignature.declaration) { var paramDecl = closestSignature.declaration.parameters[closestSignature.thisParameter ? argCount + 1 : argCount]; if (paramDecl) { related = ts.createDiagnosticForNode(paramDecl, ts.isBindingPattern(paramDecl.name) ? ts.Diagnostics.An_argument_matching_this_binding_pattern_was_not_provided : ts.Diagnostics.An_argument_for_0_was_not_provided, !paramDecl.name ? argCount : !ts.isBindingPattern(paramDecl.name) ? ts.idText(getFirstIdentifier(paramDecl.name)) : undefined); } } - if (hasRestParameter || hasSpreadArgument) { - var error_1 = hasRestParameter && hasSpreadArgument ? ts.Diagnostics.Expected_at_least_0_arguments_but_got_1_or_more : - hasRestParameter ? ts.Diagnostics.Expected_at_least_0_arguments_but_got_1 : - ts.Diagnostics.Expected_0_arguments_but_got_1_or_more; - var diagnostic_1 = ts.createDiagnosticForNode(node, error_1, paramRange, argCount); - return related ? addRelatedInfo(diagnostic_1, related) : diagnostic_1; - } if (min < argCount && argCount < max) { return ts.createDiagnosticForNode(node, ts.Diagnostics.No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments, argCount, belowArgCount, aboveArgCount); } - var diagnostic = ts.createDiagnosticForNode(node, ts.Diagnostics.Expected_0_arguments_but_got_1, paramRange, argCount); - return related ? addRelatedInfo(diagnostic, related) : diagnostic; + if (!hasSpreadArgument && argCount < min) { + var diagnostic_1 = ts.createDiagnosticForNode(node, error, paramRange, argCount); + return related ? ts.addRelatedInfo(diagnostic_1, related) : diagnostic_1; + } + if (hasRestParameter || hasSpreadArgument) { + spanArray = ts.createNodeArray(args); + if (hasSpreadArgument && argCount) { + var nextArg = ts.elementAt(args, getSpreadArgumentIndex(args) + 1) || undefined; + spanArray = ts.createNodeArray(args.slice(max > argCount && nextArg ? args.indexOf(nextArg) : max)); + } + } + else { + spanArray = ts.createNodeArray(args.slice(max)); + } + spanArray.pos = ts.first(spanArray).pos; + spanArray.end = ts.last(spanArray).end; + if (spanArray.end === spanArray.pos) { + spanArray.end++; + } + var diagnostic = ts.createDiagnosticForNodeArray(ts.getSourceFileOfNode(node), spanArray, error, paramRange, argCount); + return related ? ts.addRelatedInfo(diagnostic, related) : diagnostic; } function getTypeArgumentArityError(node, signatures, typeArguments) { var argCount = typeArguments.length; @@ -50592,13 +50642,12 @@ var ts; var firstBase = baseTypes[0]; if (firstBase.flags & 2097152 /* Intersection */) { var types = firstBase.types; - var mixinCount = ts.countWhere(types, isMixinConstructorType); + var mixinFlags = findMixins(types); var i = 0; for (var _i = 0, _a = firstBase.types; _i < _a.length; _i++) { var intersectionMember = _a[_i]; - i++; // We want to ignore mixin ctors - if (mixinCount === 0 || mixinCount === types.length && i === 0 || !isMixinConstructorType(intersectionMember)) { + if (!mixinFlags[i]) { if (ts.getObjectFlags(intersectionMember) & (1 /* Class */ | 2 /* Interface */)) { if (intersectionMember.symbol === target) { return true; @@ -50608,6 +50657,7 @@ var ts; } } } + i++; } return false; } @@ -50651,7 +50701,7 @@ var ts; var diagnostic = error(node, (kind === 0 /* Call */ ? ts.Diagnostics.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures : ts.Diagnostics.Cannot_use_new_with_an_expression_whose_type_lacks_a_call_or_construct_signature), typeToString(apparentType)); - invocationErrorRecovery(apparentType, kind, relatedInformation ? addRelatedInfo(diagnostic, relatedInformation) : diagnostic); + invocationErrorRecovery(apparentType, kind, relatedInformation ? ts.addRelatedInfo(diagnostic, relatedInformation) : diagnostic); } function invocationErrorRecovery(apparentType, kind, diagnostic) { if (!apparentType.symbol) { @@ -50664,7 +50714,7 @@ var ts; var sigs = getSignaturesOfType(getTypeOfSymbol(getSymbolLinks(apparentType.symbol).target), kind); if (!sigs || !sigs.length) return; - addRelatedInfo(diagnostic, ts.createDiagnosticForNode(importNode, ts.Diagnostics.Type_originates_at_this_import_A_namespace_style_import_cannot_be_called_or_constructed_and_will_cause_a_failure_at_runtime_Consider_using_a_default_import_or_import_require_here_instead)); + ts.addRelatedInfo(diagnostic, ts.createDiagnosticForNode(importNode, ts.Diagnostics.Type_originates_at_this_import_A_namespace_style_import_cannot_be_called_or_constructed_and_will_cause_a_failure_at_runtime_Consider_using_a_default_import_or_import_require_here_instead)); } } function resolveTaggedTemplateExpression(node, candidatesOutArray, checkMode) { @@ -53894,7 +53944,7 @@ var ts; for (var _a = 0, signatures_6 = signatures; _a < signatures_6.length; _a++) { var signature = signatures_6[_a]; if (!isImplementationCompatibleWithOverload(bodySignature, signature)) { - addRelatedInfo(error(signature.declaration, ts.Diagnostics.This_overload_signature_is_not_compatible_with_its_implementation_signature), ts.createDiagnosticForNode(bodyDeclaration, ts.Diagnostics.The_implementation_signature_is_declared_here)); + ts.addRelatedInfo(error(signature.declaration, ts.Diagnostics.This_overload_signature_is_not_compatible_with_its_implementation_signature), ts.createDiagnosticForNode(bodyDeclaration, ts.Diagnostics.The_implementation_signature_is_declared_here)); break; } } @@ -58868,8 +58918,8 @@ var ts; else { // Otherwise issue top-level error since the files appear very identical in terms of what they contain var list = ts.arrayFrom(conflictingSymbols.keys()).join(", "); - diagnostics.add(addRelatedInfo(ts.createDiagnosticForNode(firstFile, ts.Diagnostics.Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0, list), ts.createDiagnosticForNode(secondFile, ts.Diagnostics.Conflicts_are_in_this_file))); - diagnostics.add(addRelatedInfo(ts.createDiagnosticForNode(secondFile, ts.Diagnostics.Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0, list), ts.createDiagnosticForNode(firstFile, ts.Diagnostics.Conflicts_are_in_this_file))); + diagnostics.add(ts.addRelatedInfo(ts.createDiagnosticForNode(firstFile, ts.Diagnostics.Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0, list), ts.createDiagnosticForNode(secondFile, ts.Diagnostics.Conflicts_are_in_this_file))); + diagnostics.add(ts.addRelatedInfo(ts.createDiagnosticForNode(secondFile, ts.Diagnostics.Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0, list), ts.createDiagnosticForNode(firstFile, ts.Diagnostics.Conflicts_are_in_this_file))); } }); amalgamatedDuplicates = undefined; @@ -59265,10 +59315,10 @@ var ts; var nonSimpleParameters = getNonSimpleParameters(node.parameters); if (ts.length(nonSimpleParameters)) { ts.forEach(nonSimpleParameters, function (parameter) { - addRelatedInfo(error(parameter, ts.Diagnostics.This_parameter_is_not_allowed_with_use_strict_directive), ts.createDiagnosticForNode(useStrictDirective_1, ts.Diagnostics.use_strict_directive_used_here)); + ts.addRelatedInfo(error(parameter, ts.Diagnostics.This_parameter_is_not_allowed_with_use_strict_directive), ts.createDiagnosticForNode(useStrictDirective_1, ts.Diagnostics.use_strict_directive_used_here)); }); var diagnostics_1 = nonSimpleParameters.map(function (parameter, index) { return (index === 0 ? ts.createDiagnosticForNode(parameter, ts.Diagnostics.Non_simple_parameter_declared_here) : ts.createDiagnosticForNode(parameter, ts.Diagnostics.and_here)); }); - addRelatedInfo.apply(void 0, [error(useStrictDirective_1, ts.Diagnostics.use_strict_directive_cannot_be_used_with_non_simple_parameter_list)].concat(diagnostics_1)); + ts.addRelatedInfo.apply(void 0, [error(useStrictDirective_1, ts.Diagnostics.use_strict_directive_cannot_be_used_with_non_simple_parameter_list)].concat(diagnostics_1)); return true; } } @@ -81250,12 +81300,28 @@ var ts; return result.diagnostics; } ts.getDeclarationDiagnostics = getDeclarationDiagnostics; + function hasInternalAnnotation(range, currentSourceFile) { + var comment = currentSourceFile.text.substring(range.pos, range.end); + return ts.stringContains(comment, "@internal"); + } function isInternalDeclaration(node, currentSourceFile) { var parseTreeNode = ts.getParseTreeNode(node); + if (parseTreeNode && parseTreeNode.kind === 151 /* Parameter */) { + var paramIdx = parseTreeNode.parent.parameters.indexOf(parseTreeNode); + var previousSibling = paramIdx > 0 ? parseTreeNode.parent.parameters[paramIdx - 1] : undefined; + var text = currentSourceFile.text; + var commentRanges = previousSibling + ? ts.concatenate( + // to handle + // ... parameters, /* @internal */ + // public param: string + ts.getTrailingCommentRanges(text, ts.skipTrivia(text, previousSibling.end + 1, /* stopAfterLineBreak */ false, /* stopAtComments */ true)), ts.getLeadingCommentRanges(text, node.pos)) + : ts.getTrailingCommentRanges(text, ts.skipTrivia(text, node.pos, /* stopAfterLineBreak */ false, /* stopAtComments */ true)); + return commentRanges && commentRanges.length && hasInternalAnnotation(ts.last(commentRanges), currentSourceFile); + } var leadingCommentRanges = parseTreeNode && ts.getLeadingCommentRangesOfNode(parseTreeNode, currentSourceFile); return !!ts.forEach(leadingCommentRanges, function (range) { - var comment = currentSourceFile.text.substring(range.pos, range.end); - return ts.stringContains(comment, "@internal"); + return hasInternalAnnotation(range, currentSourceFile); }); } ts.isInternalDeclaration = isInternalDeclaration; @@ -82112,7 +82178,7 @@ var ts; if (ctor) { var oldDiag_1 = getSymbolAccessibilityDiagnostic; parameterProperties = ts.compact(ts.flatMap(ctor.parameters, function (param) { - if (!ts.hasModifier(param, 92 /* ParameterPropertyModifier */)) + if (!ts.hasModifier(param, 92 /* ParameterPropertyModifier */) || shouldStripInternal(param)) return; getSymbolAccessibilityDiagnostic = ts.createGetSymbolAccessibilityDiagnosticForNode(param); if (param.name.kind === 72 /* Identifier */) { @@ -88169,11 +88235,18 @@ var ts; if (rootNames.length) { for (var _i = 0, resolvedProjectReferences_1 = resolvedProjectReferences; _i < resolvedProjectReferences_1.length; _i++) { var parsedRef = resolvedProjectReferences_1[_i]; - if (parsedRef) { - var out = parsedRef.commandLine.options.outFile || parsedRef.commandLine.options.out; - if (out) { - var dtsOutfile = ts.changeExtension(out, ".d.ts"); - processSourceFile(dtsOutfile, /*isDefaultLib*/ false, /*ignoreNoDefaultLib*/ false, /*packageId*/ undefined); + if (!parsedRef) + continue; + var out = parsedRef.commandLine.options.outFile || parsedRef.commandLine.options.out; + if (out) { + processSourceFile(ts.changeExtension(out, ".d.ts"), /*isDefaultLib*/ false, /*ignoreNoDefaultLib*/ false, /*packageId*/ undefined); + } + else if (ts.getEmitModuleKind(parsedRef.commandLine.options) === ts.ModuleKind.None) { + for (var _a = 0, _b = parsedRef.commandLine.fileNames; _a < _b.length; _a++) { + var fileName = _b[_a]; + if (!ts.fileExtensionIs(fileName, ".d.ts" /* Dts */) && ts.hasTSFileExtension(fileName)) { + processSourceFile(ts.getOutputDeclarationFileName(fileName, parsedRef.commandLine), /*isDefaultLib*/ false, /*ignoreNoDefaultLib*/ false, /*packageId*/ undefined); + } } } } @@ -88221,8 +88294,8 @@ var ts; // not part of the new program. if (oldProgram && host.onReleaseOldSourceFile) { var oldSourceFiles = oldProgram.getSourceFiles(); - for (var _a = 0, oldSourceFiles_1 = oldSourceFiles; _a < oldSourceFiles_1.length; _a++) { - var oldSourceFile = oldSourceFiles_1[_a]; + for (var _c = 0, oldSourceFiles_1 = oldSourceFiles; _c < oldSourceFiles_1.length; _c++) { + var oldSourceFile = oldSourceFiles_1[_c]; var newFile = getSourceFileByPath(oldSourceFile.resolvedPath); if (shouldCreateNewSourceFile || !newFile || // old file wasnt redirect but new file is @@ -93991,9 +94064,9 @@ var ts; updateOutputTimestamps(proj); return; } - var buildResult = status.type === UpToDateStatusType.OutOfDateWithPrepend ? - updateBundle(resolved) : // Fake that files have been built by manipulating prepend and existing output - buildSingleProject(resolved); // Actual build + var buildResult = needsBuild(status, resolved) ? + buildSingleProject(resolved) : // Actual build + updateBundle(resolved); // Fake that files have been built by manipulating prepend and existing output if (buildResult & BuildResultFlags.AnyErrors) return; var _a = getGlobalDependencyGraph(), referencingProjectsMap = _a.referencingProjectsMap, buildQueue = _a.buildQueue; @@ -94236,7 +94309,12 @@ var ts; return reportStatus(ts.Diagnostics.A_non_dry_build_would_update_timestamps_for_output_of_project_0, proj.options.configFilePath); } var priorNewestUpdateTime = updateOutputTimestampsWorker(proj, minimumDate, ts.Diagnostics.Updating_output_timestamps_of_project_0); - projectStatus.setValue(proj.options.configFilePath, { type: UpToDateStatusType.UpToDate, newestDeclarationFileContentChangedTime: priorNewestUpdateTime }); + var status = { + type: UpToDateStatusType.UpToDate, + newestDeclarationFileContentChangedTime: priorNewestUpdateTime, + oldestOutputFileName: getFirstProjectOutput(proj) + }; + projectStatus.setValue(proj.options.configFilePath, status); } function updateOutputTimestampsWorker(proj, priorNewestUpdateTime, verboseMessage, skipOutputs) { var outputs = getAllProjectOutputs(proj); @@ -94360,9 +94438,9 @@ var ts; // Do nothing continue; } - var buildResult = status.type === UpToDateStatusType.OutOfDateWithPrepend && !options.force ? - updateBundle(next) : // Fake that files have been built by manipulating prepend and existing output - buildSingleProject(next); // Actual build + var buildResult = needsBuild(status, next) ? + buildSingleProject(next) : // Actual build + updateBundle(next); // Fake that files have been built by manipulating prepend and existing output anyFailed = anyFailed || !!(buildResult & BuildResultFlags.AnyErrors); } reportErrorSummary(); @@ -94375,6 +94453,15 @@ var ts; readFileWithCache = savedReadFileWithCache; return anyFailed ? ts.ExitStatus.DiagnosticsPresent_OutputsSkipped : ts.ExitStatus.Success; } + function needsBuild(status, configFile) { + if (status.type !== UpToDateStatusType.OutOfDateWithPrepend || options.force) + return true; + var config = parseConfigFile(configFile); + return !config || + config.fileNames.length === 0 || + !!config.errors.length || + !ts.isIncrementalCompilation(config.options); + } function reportParseConfigFileDiagnostic(proj) { reportAndStoreErrors(proj, [configFileCache.getValue(proj)]); } @@ -124146,7 +124233,8 @@ var ts; server.isScriptInfo = isScriptInfo; var Project = /** @class */ (function () { /*@internal*/ - function Project(projectName, projectKind, projectService, documentRegistry, hasExplicitListOfFiles, lastFileExceededProgramSize, compilerOptions, compileOnSaveEnabled, directoryStructureHost, currentDirectory) { + function Project( + /*@internal*/ projectName, projectKind, projectService, documentRegistry, hasExplicitListOfFiles, lastFileExceededProgramSize, compilerOptions, compileOnSaveEnabled, directoryStructureHost, currentDirectory) { var _this = this; this.projectName = projectName; this.projectKind = projectKind; diff --git a/lib/typescript.js b/lib/typescript.js index 60ac27a5b24..82e4f4ece57 100644 --- a/lib/typescript.js +++ b/lib/typescript.js @@ -5797,6 +5797,8 @@ var ts; _0_refers_to_a_value_but_is_being_used_as_a_type_here: diag(2749, ts.DiagnosticCategory.Error, "_0_refers_to_a_value_but_is_being_used_as_a_type_here_2749", "'{0}' refers to a value, but is being used as a type here."), The_implementation_signature_is_declared_here: diag(2750, ts.DiagnosticCategory.Error, "The_implementation_signature_is_declared_here_2750", "The implementation signature is declared here."), Circularity_originates_in_type_at_this_location: diag(2751, ts.DiagnosticCategory.Error, "Circularity_originates_in_type_at_this_location_2751", "Circularity originates in type at this location."), + The_first_export_default_is_here: diag(2752, ts.DiagnosticCategory.Error, "The_first_export_default_is_here_2752", "The first export default is here."), + Another_export_default_is_here: diag(2753, ts.DiagnosticCategory.Error, "Another_export_default_is_here_2753", "Another export default is here."), Import_declaration_0_is_using_private_name_1: diag(4000, ts.DiagnosticCategory.Error, "Import_declaration_0_is_using_private_name_1_4000", "Import declaration '{0}' is using private name '{1}'."), Type_parameter_0_of_exported_class_has_or_is_using_private_name_1: diag(4002, ts.DiagnosticCategory.Error, "Type_parameter_0_of_exported_class_has_or_is_using_private_name_1_4002", "Type parameter '{0}' of exported class has or is using private name '{1}'."), Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1: diag(4004, ts.DiagnosticCategory.Error, "Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1_4004", "Type parameter '{0}' of exported interface has or is using private name '{1}'."), @@ -16260,6 +16262,19 @@ var ts; return arr.slice(index); } ts.sliceAfter = sliceAfter; + function addRelatedInfo(diagnostic) { + var _a; + var relatedInformation = []; + for (var _i = 1; _i < arguments.length; _i++) { + relatedInformation[_i - 1] = arguments[_i]; + } + if (!diagnostic.relatedInformation) { + diagnostic.relatedInformation = []; + } + (_a = diagnostic.relatedInformation).push.apply(_a, relatedInformation); + return diagnostic; + } + ts.addRelatedInfo = addRelatedInfo; function minAndMax(arr, getValue) { Debug.assert(arr.length !== 0); var min = getValue(arr[0]); @@ -27709,13 +27724,15 @@ var ts; message_1 = ts.Diagnostics.Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations; messageNeedsName_1 = false; } - if (symbol.declarations && symbol.declarations.length) { + var multipleDefaultExports_1 = false; + if (ts.length(symbol.declarations)) { // If the current node is a default export of some sort, then check if // there are any other default exports that we need to error on. // We'll know whether we have other default exports depending on if `symbol` already has a declaration list set. if (isDefaultExport) { message_1 = ts.Diagnostics.A_module_cannot_have_multiple_default_exports; messageNeedsName_1 = false; + multipleDefaultExports_1 = true; } else { // This is to properly report an error in the case "export default { }" is after export default of class declaration or function declaration. @@ -27726,14 +27743,22 @@ var ts; (node.kind === 254 /* ExportAssignment */ && !node.isExportEquals)) { message_1 = ts.Diagnostics.A_module_cannot_have_multiple_default_exports; messageNeedsName_1 = false; + multipleDefaultExports_1 = true; } } } - var addError = function (decl) { - file.bindDiagnostics.push(createDiagnosticForNode(ts.getNameOfDeclaration(decl) || decl, message_1, messageNeedsName_1 ? getDisplayName(decl) : undefined)); - }; - ts.forEach(symbol.declarations, addError); - addError(node); + var declarationName_1 = ts.getNameOfDeclaration(node) || node; + var relatedInformation_1 = []; + ts.forEach(symbol.declarations, function (declaration, index) { + var decl = ts.getNameOfDeclaration(declaration) || declaration; + var diag = createDiagnosticForNode(decl, message_1, messageNeedsName_1 ? getDisplayName(declaration) : undefined); + file.bindDiagnostics.push(multipleDefaultExports_1 ? ts.addRelatedInfo(diag, createDiagnosticForNode(declarationName_1, index === 0 ? ts.Diagnostics.Another_export_default_is_here : ts.Diagnostics.and_here)) : diag); + if (multipleDefaultExports_1) { + relatedInformation_1.push(createDiagnosticForNode(decl, ts.Diagnostics.The_first_export_default_is_here)); + } + }); + var diag = createDiagnosticForNode(declarationName_1, message_1, messageNeedsName_1 ? getDisplayName(node) : undefined); + file.bindDiagnostics.push(multipleDefaultExports_1 ? ts.addRelatedInfo.apply(void 0, [diag].concat(relatedInformation_1)) : diag); symbol = createSymbol(0 /* None */, name); } } @@ -31768,18 +31793,6 @@ var ts; return diagnostic; } } - function addRelatedInfo(diagnostic) { - var _a; - var relatedInformation = []; - for (var _i = 1; _i < arguments.length; _i++) { - relatedInformation[_i - 1] = arguments[_i]; - } - if (!diagnostic.relatedInformation) { - diagnostic.relatedInformation = []; - } - (_a = diagnostic.relatedInformation).push.apply(_a, relatedInformation); - return diagnostic; - } function error(location, message, arg0, arg1, arg2, arg3) { var diagnostic = location ? ts.createDiagnosticForNode(location, message, arg0, arg1, arg2, arg3) @@ -31959,7 +31972,7 @@ var ts; err.relatedInformation = err.relatedInformation || []; if (ts.length(err.relatedInformation) >= 5) continue; - addRelatedInfo(err, !ts.length(err.relatedInformation) ? ts.createDiagnosticForNode(relatedNode, ts.Diagnostics._0_was_also_declared_here, symbolName) : ts.createDiagnosticForNode(relatedNode, ts.Diagnostics.and_here)); + ts.addRelatedInfo(err, !ts.length(err.relatedInformation) ? ts.createDiagnosticForNode(relatedNode, ts.Diagnostics._0_was_also_declared_here, symbolName) : ts.createDiagnosticForNode(relatedNode, ts.Diagnostics.and_here)); } } function combineSymbolTables(first, second) { @@ -32484,7 +32497,7 @@ var ts; var suggestionName = symbolToString(suggestion); var diagnostic = error(errorLocation, suggestedNameNotFoundMessage, diagnosticName(nameArg), suggestionName); if (suggestion.valueDeclaration) { - addRelatedInfo(diagnostic, ts.createDiagnosticForNode(suggestion.valueDeclaration, ts.Diagnostics._0_is_declared_here, suggestionName)); + ts.addRelatedInfo(diagnostic, ts.createDiagnosticForNode(suggestion.valueDeclaration, ts.Diagnostics._0_is_declared_here, suggestionName)); } } } @@ -32722,7 +32735,7 @@ var ts; } } if (diagnosticMessage) { - addRelatedInfo(diagnosticMessage, ts.createDiagnosticForNode(declaration, ts.Diagnostics._0_is_declared_here, declarationName)); + ts.addRelatedInfo(diagnosticMessage, ts.createDiagnosticForNode(declaration, ts.Diagnostics._0_is_declared_here, declarationName)); } } } @@ -32906,7 +32919,7 @@ var ts; var suggestionName = symbolToString(suggestion); var diagnostic = error(name, ts.Diagnostics.Module_0_has_no_exported_member_1_Did_you_mean_2, moduleName, declarationName, suggestionName); if (suggestion.valueDeclaration) { - addRelatedInfo(diagnostic, ts.createDiagnosticForNode(suggestion.valueDeclaration, ts.Diagnostics._0_is_declared_here, suggestionName)); + ts.addRelatedInfo(diagnostic, ts.createDiagnosticForNode(suggestion.valueDeclaration, ts.Diagnostics._0_is_declared_here, suggestionName)); } } else { @@ -36541,7 +36554,7 @@ var ts; ctorReturn = getReturnTypeOfSignature(ctorSig[0]); } } - addRelatedInfo(err, ts.createDiagnosticForNode(baseConstructorType.symbol.declarations[0], ts.Diagnostics.Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1, symbolToString(baseConstructorType.symbol), typeToString(ctorReturn))); + ts.addRelatedInfo(err, ts.createDiagnosticForNode(baseConstructorType.symbol.declarations[0], ts.Diagnostics.Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1, symbolToString(baseConstructorType.symbol), typeToString(ctorReturn))); } return type.resolvedBaseConstructorType = errorType; } @@ -37529,13 +37542,22 @@ var ts; function unionSpreadIndexInfos(info1, info2) { return info1 && info2 && createIndexInfo(getUnionType([info1.type, info2.type]), info1.isReadonly || info2.isReadonly); } - function includeMixinType(type, types, index) { + function findMixins(types) { + var constructorTypeCount = ts.countWhere(types, function (t) { return getSignaturesOfType(t, 1 /* Construct */).length > 0; }); + var mixinFlags = ts.map(types, isMixinConstructorType); + if (constructorTypeCount > 0 && constructorTypeCount === ts.countWhere(mixinFlags, function (b) { return b; })) { + var firstMixinIndex = mixinFlags.indexOf(/*searchElement*/ true); + mixinFlags[firstMixinIndex] = false; + } + return mixinFlags; + } + function includeMixinType(type, types, mixinFlags, index) { var mixedTypes = []; for (var i = 0; i < types.length; i++) { if (i === index) { mixedTypes.push(type); } - else if (isMixinConstructorType(types[i])) { + else if (mixinFlags[i]) { mixedTypes.push(getReturnTypeOfSignature(getSignaturesOfType(types[i], 1 /* Construct */)[0])); } } @@ -37549,7 +37571,8 @@ var ts; var stringIndexInfo; var numberIndexInfo; var types = type.types; - var mixinCount = ts.countWhere(types, isMixinConstructorType); + var mixinFlags = findMixins(types); + var mixinCount = ts.countWhere(mixinFlags, function (b) { return b; }); var _loop_6 = function (i) { var t = type.types[i]; // When an intersection type contains mixin constructor types, the construct signatures from @@ -37557,12 +37580,12 @@ var ts; // other construct signatures in the intersection type. For example, the intersection type // '{ new(...args: any[]) => A } & { new(s: string) => B }' has a single construct signature // 'new(s: string) => A & B'. - if (mixinCount === 0 || mixinCount === types.length && i === 0 || !isMixinConstructorType(t)) { + if (!mixinFlags[i]) { var signatures = getSignaturesOfType(t, 1 /* Construct */); if (signatures.length && mixinCount > 0) { signatures = ts.map(signatures, function (s) { var clone = cloneSignature(s); - clone.resolvedReturnType = includeMixinType(getReturnTypeOfSignature(s), types, i); + clone.resolvedReturnType = includeMixinType(getReturnTypeOfSignature(s), types, mixinFlags, i); return clone; }); } @@ -38088,7 +38111,7 @@ var ts; if (errorNode) { var diagnostic = error(errorNode, ts.Diagnostics.Type_parameter_0_has_a_circular_constraint, typeToString(t)); if (currentNode && !ts.isNodeDescendantOf(errorNode, currentNode) && !ts.isNodeDescendantOf(currentNode, errorNode)) { - addRelatedInfo(diagnostic, ts.createDiagnosticForNode(currentNode, ts.Diagnostics.Circularity_originates_in_type_at_this_location)); + ts.addRelatedInfo(diagnostic, ts.createDiagnosticForNode(currentNode, ts.Diagnostics.Circularity_originates_in_type_at_this_location)); } } } @@ -40285,12 +40308,15 @@ var ts; // that substitutes the index type for P. For example, for an index access { [P in K]: Box }[X], we // construct the type Box. if (isGenericMappedType(objectType)) { - var mapper = createTypeMapper([getTypeParameterFromMappedType(objectType)], [type.indexType]); - var templateMapper = combineTypeMappers(objectType.mapper, mapper); - return type.simplified = mapType(instantiateType(getTemplateTypeFromMappedType(objectType), templateMapper), getSimplifiedType); + return type.simplified = mapType(substituteIndexedMappedType(objectType, type.indexType), getSimplifiedType); } return type.simplified = type; } + function substituteIndexedMappedType(objectType, index) { + var mapper = createTypeMapper([getTypeParameterFromMappedType(objectType)], [index]); + var templateMapper = combineTypeMappers(objectType.mapper, mapper); + return instantiateType(getTemplateTypeFromMappedType(objectType), templateMapper); + } function getIndexedAccessType(objectType, indexType, accessNode, missingType) { if (missingType === void 0) { missingType = accessNode ? errorType : unknownType; } if (objectType === wildcardType || indexType === wildcardType) { @@ -41555,7 +41581,7 @@ var ts; var resultObj = {}; checkTypeAssignableTo(source, target, node, headMessage, /*containingChain*/ undefined, resultObj); var diagnostic = resultObj.error; - addRelatedInfo(diagnostic, ts.createDiagnosticForNode(node, signatures === constructSignatures ? ts.Diagnostics.Did_you_mean_to_use_new_with_this_expression : ts.Diagnostics.Did_you_mean_to_call_this_expression)); + ts.addRelatedInfo(diagnostic, ts.createDiagnosticForNode(node, signatures === constructSignatures ? ts.Diagnostics.Did_you_mean_to_use_new_with_this_expression : ts.Diagnostics.Did_you_mean_to_call_this_expression)); return true; } } @@ -41590,7 +41616,7 @@ var ts; checkTypeRelatedTo(sourceReturn, targetReturn, relation, returnExpression, /*message*/ undefined, /*chain*/ undefined, resultObj); if (resultObj.error) { if (target.symbol && ts.length(target.symbol.declarations)) { - addRelatedInfo(resultObj.error, ts.createDiagnosticForNode(target.symbol.declarations[0], ts.Diagnostics.The_expected_type_comes_from_the_return_type_of_this_signature)); + ts.addRelatedInfo(resultObj.error, ts.createDiagnosticForNode(target.symbol.declarations[0], ts.Diagnostics.The_expected_type_comes_from_the_return_type_of_this_signature)); } return true; } @@ -41637,13 +41663,13 @@ var ts; undefined; if (indexInfo && indexInfo.declaration && !ts.getSourceFileOfNode(indexInfo.declaration).hasNoDefaultLib) { issuedElaboration = true; - addRelatedInfo(reportedDiag, ts.createDiagnosticForNode(indexInfo.declaration, ts.Diagnostics.The_expected_type_comes_from_this_index_signature)); + ts.addRelatedInfo(reportedDiag, ts.createDiagnosticForNode(indexInfo.declaration, ts.Diagnostics.The_expected_type_comes_from_this_index_signature)); } } if (!issuedElaboration && (targetProp && ts.length(targetProp.declarations) || target.symbol && ts.length(target.symbol.declarations))) { var targetNode = targetProp && ts.length(targetProp.declarations) ? targetProp.declarations[0] : target.symbol.declarations[0]; if (!ts.getSourceFileOfNode(targetNode).hasNoDefaultLib) { - addRelatedInfo(reportedDiag, ts.createDiagnosticForNode(targetNode, ts.Diagnostics.The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1, propertyName && !(nameType.flags & 8192 /* UniqueESSymbol */) ? ts.unescapeLeadingUnderscores(propertyName) : typeToString(nameType), typeToString(target))); + ts.addRelatedInfo(reportedDiag, ts.createDiagnosticForNode(targetNode, ts.Diagnostics.The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1, propertyName && !(nameType.flags & 8192 /* UniqueESSymbol */) ? ts.unescapeLeadingUnderscores(propertyName) : typeToString(nameType), typeToString(target))); } } } @@ -42209,7 +42235,7 @@ var ts; } var diag = ts.createDiagnosticForNodeFromMessageChain(errorNode, errorInfo, relatedInformation); if (relatedInfo) { - addRelatedInfo.apply(void 0, [diag].concat(relatedInfo)); + ts.addRelatedInfo.apply(void 0, [diag].concat(relatedInfo)); } if (errorOutputContainer) { errorOutputContainer.error = diag; @@ -46987,7 +47013,7 @@ var ts; if (!ts.isSourceFile(container)) { var outsideThis = tryGetThisTypeAt(container); if (outsideThis && outsideThis !== globalThisType_1) { - addRelatedInfo(diag, ts.createDiagnosticForNode(container, ts.Diagnostics.An_outer_value_of_this_is_shadowed_by_this_container)); + ts.addRelatedInfo(diag, ts.createDiagnosticForNode(container, ts.Diagnostics.An_outer_value_of_this_is_shadowed_by_this_container)); } } } @@ -47639,7 +47665,15 @@ var ts; } function getTypeOfPropertyOfContextualType(type, name) { return mapType(type, function (t) { - if (t.flags & 3670016 /* StructuredType */) { + if (isGenericMappedType(t)) { + var constraint = getConstraintTypeFromMappedType(t); + var constraintOfConstraint = getBaseConstraintOfType(constraint) || constraint; + var propertyNameType = getLiteralType(ts.unescapeLeadingUnderscores(name)); + if (isTypeAssignableTo(propertyNameType, constraintOfConstraint)) { + return substituteIndexedMappedType(t, propertyNameType); + } + } + else if (t.flags & 3670016 /* StructuredType */) { var prop = getPropertyOfType(t, name); if (prop) { return getTypeOfSymbol(prop); @@ -49212,7 +49246,7 @@ var ts; diagnosticMessage = error(right, ts.Diagnostics.Class_0_used_before_its_declaration, declarationName); } if (diagnosticMessage) { - addRelatedInfo(diagnosticMessage, ts.createDiagnosticForNode(valueDeclaration, ts.Diagnostics._0_is_declared_here, declarationName)); + ts.addRelatedInfo(diagnosticMessage, ts.createDiagnosticForNode(valueDeclaration, ts.Diagnostics._0_is_declared_here, declarationName)); } } function isInPropertyInitializer(node) { @@ -49301,7 +49335,7 @@ var ts; } var resultDiagnostic = ts.createDiagnosticForNodeFromMessageChain(propNode, errorInfo); if (relatedInfo) { - addRelatedInfo(resultDiagnostic, relatedInfo); + ts.addRelatedInfo(resultDiagnostic, relatedInfo); } diagnostics.add(resultDiagnostic); } @@ -50052,25 +50086,41 @@ var ts; if (argCount <= max && hasSpreadArgument) { argCount--; } + var spanArray; var related; + var error = hasRestParameter || hasSpreadArgument ? hasRestParameter && hasSpreadArgument ? ts.Diagnostics.Expected_at_least_0_arguments_but_got_1_or_more : + hasRestParameter ? ts.Diagnostics.Expected_at_least_0_arguments_but_got_1 : + ts.Diagnostics.Expected_0_arguments_but_got_1_or_more : ts.Diagnostics.Expected_0_arguments_but_got_1; if (closestSignature && getMinArgumentCount(closestSignature) > argCount && closestSignature.declaration) { var paramDecl = closestSignature.declaration.parameters[closestSignature.thisParameter ? argCount + 1 : argCount]; if (paramDecl) { related = ts.createDiagnosticForNode(paramDecl, ts.isBindingPattern(paramDecl.name) ? ts.Diagnostics.An_argument_matching_this_binding_pattern_was_not_provided : ts.Diagnostics.An_argument_for_0_was_not_provided, !paramDecl.name ? argCount : !ts.isBindingPattern(paramDecl.name) ? ts.idText(getFirstIdentifier(paramDecl.name)) : undefined); } } - if (hasRestParameter || hasSpreadArgument) { - var error_1 = hasRestParameter && hasSpreadArgument ? ts.Diagnostics.Expected_at_least_0_arguments_but_got_1_or_more : - hasRestParameter ? ts.Diagnostics.Expected_at_least_0_arguments_but_got_1 : - ts.Diagnostics.Expected_0_arguments_but_got_1_or_more; - var diagnostic_1 = ts.createDiagnosticForNode(node, error_1, paramRange, argCount); - return related ? addRelatedInfo(diagnostic_1, related) : diagnostic_1; - } if (min < argCount && argCount < max) { return ts.createDiagnosticForNode(node, ts.Diagnostics.No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments, argCount, belowArgCount, aboveArgCount); } - var diagnostic = ts.createDiagnosticForNode(node, ts.Diagnostics.Expected_0_arguments_but_got_1, paramRange, argCount); - return related ? addRelatedInfo(diagnostic, related) : diagnostic; + if (!hasSpreadArgument && argCount < min) { + var diagnostic_1 = ts.createDiagnosticForNode(node, error, paramRange, argCount); + return related ? ts.addRelatedInfo(diagnostic_1, related) : diagnostic_1; + } + if (hasRestParameter || hasSpreadArgument) { + spanArray = ts.createNodeArray(args); + if (hasSpreadArgument && argCount) { + var nextArg = ts.elementAt(args, getSpreadArgumentIndex(args) + 1) || undefined; + spanArray = ts.createNodeArray(args.slice(max > argCount && nextArg ? args.indexOf(nextArg) : max)); + } + } + else { + spanArray = ts.createNodeArray(args.slice(max)); + } + spanArray.pos = ts.first(spanArray).pos; + spanArray.end = ts.last(spanArray).end; + if (spanArray.end === spanArray.pos) { + spanArray.end++; + } + var diagnostic = ts.createDiagnosticForNodeArray(ts.getSourceFileOfNode(node), spanArray, error, paramRange, argCount); + return related ? ts.addRelatedInfo(diagnostic, related) : diagnostic; } function getTypeArgumentArityError(node, signatures, typeArguments) { var argCount = typeArguments.length; @@ -50583,13 +50633,12 @@ var ts; var firstBase = baseTypes[0]; if (firstBase.flags & 2097152 /* Intersection */) { var types = firstBase.types; - var mixinCount = ts.countWhere(types, isMixinConstructorType); + var mixinFlags = findMixins(types); var i = 0; for (var _i = 0, _a = firstBase.types; _i < _a.length; _i++) { var intersectionMember = _a[_i]; - i++; // We want to ignore mixin ctors - if (mixinCount === 0 || mixinCount === types.length && i === 0 || !isMixinConstructorType(intersectionMember)) { + if (!mixinFlags[i]) { if (ts.getObjectFlags(intersectionMember) & (1 /* Class */ | 2 /* Interface */)) { if (intersectionMember.symbol === target) { return true; @@ -50599,6 +50648,7 @@ var ts; } } } + i++; } return false; } @@ -50642,7 +50692,7 @@ var ts; var diagnostic = error(node, (kind === 0 /* Call */ ? ts.Diagnostics.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures : ts.Diagnostics.Cannot_use_new_with_an_expression_whose_type_lacks_a_call_or_construct_signature), typeToString(apparentType)); - invocationErrorRecovery(apparentType, kind, relatedInformation ? addRelatedInfo(diagnostic, relatedInformation) : diagnostic); + invocationErrorRecovery(apparentType, kind, relatedInformation ? ts.addRelatedInfo(diagnostic, relatedInformation) : diagnostic); } function invocationErrorRecovery(apparentType, kind, diagnostic) { if (!apparentType.symbol) { @@ -50655,7 +50705,7 @@ var ts; var sigs = getSignaturesOfType(getTypeOfSymbol(getSymbolLinks(apparentType.symbol).target), kind); if (!sigs || !sigs.length) return; - addRelatedInfo(diagnostic, ts.createDiagnosticForNode(importNode, ts.Diagnostics.Type_originates_at_this_import_A_namespace_style_import_cannot_be_called_or_constructed_and_will_cause_a_failure_at_runtime_Consider_using_a_default_import_or_import_require_here_instead)); + ts.addRelatedInfo(diagnostic, ts.createDiagnosticForNode(importNode, ts.Diagnostics.Type_originates_at_this_import_A_namespace_style_import_cannot_be_called_or_constructed_and_will_cause_a_failure_at_runtime_Consider_using_a_default_import_or_import_require_here_instead)); } } function resolveTaggedTemplateExpression(node, candidatesOutArray, checkMode) { @@ -53885,7 +53935,7 @@ var ts; for (var _a = 0, signatures_6 = signatures; _a < signatures_6.length; _a++) { var signature = signatures_6[_a]; if (!isImplementationCompatibleWithOverload(bodySignature, signature)) { - addRelatedInfo(error(signature.declaration, ts.Diagnostics.This_overload_signature_is_not_compatible_with_its_implementation_signature), ts.createDiagnosticForNode(bodyDeclaration, ts.Diagnostics.The_implementation_signature_is_declared_here)); + ts.addRelatedInfo(error(signature.declaration, ts.Diagnostics.This_overload_signature_is_not_compatible_with_its_implementation_signature), ts.createDiagnosticForNode(bodyDeclaration, ts.Diagnostics.The_implementation_signature_is_declared_here)); break; } } @@ -58859,8 +58909,8 @@ var ts; else { // Otherwise issue top-level error since the files appear very identical in terms of what they contain var list = ts.arrayFrom(conflictingSymbols.keys()).join(", "); - diagnostics.add(addRelatedInfo(ts.createDiagnosticForNode(firstFile, ts.Diagnostics.Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0, list), ts.createDiagnosticForNode(secondFile, ts.Diagnostics.Conflicts_are_in_this_file))); - diagnostics.add(addRelatedInfo(ts.createDiagnosticForNode(secondFile, ts.Diagnostics.Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0, list), ts.createDiagnosticForNode(firstFile, ts.Diagnostics.Conflicts_are_in_this_file))); + diagnostics.add(ts.addRelatedInfo(ts.createDiagnosticForNode(firstFile, ts.Diagnostics.Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0, list), ts.createDiagnosticForNode(secondFile, ts.Diagnostics.Conflicts_are_in_this_file))); + diagnostics.add(ts.addRelatedInfo(ts.createDiagnosticForNode(secondFile, ts.Diagnostics.Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0, list), ts.createDiagnosticForNode(firstFile, ts.Diagnostics.Conflicts_are_in_this_file))); } }); amalgamatedDuplicates = undefined; @@ -59256,10 +59306,10 @@ var ts; var nonSimpleParameters = getNonSimpleParameters(node.parameters); if (ts.length(nonSimpleParameters)) { ts.forEach(nonSimpleParameters, function (parameter) { - addRelatedInfo(error(parameter, ts.Diagnostics.This_parameter_is_not_allowed_with_use_strict_directive), ts.createDiagnosticForNode(useStrictDirective_1, ts.Diagnostics.use_strict_directive_used_here)); + ts.addRelatedInfo(error(parameter, ts.Diagnostics.This_parameter_is_not_allowed_with_use_strict_directive), ts.createDiagnosticForNode(useStrictDirective_1, ts.Diagnostics.use_strict_directive_used_here)); }); var diagnostics_1 = nonSimpleParameters.map(function (parameter, index) { return (index === 0 ? ts.createDiagnosticForNode(parameter, ts.Diagnostics.Non_simple_parameter_declared_here) : ts.createDiagnosticForNode(parameter, ts.Diagnostics.and_here)); }); - addRelatedInfo.apply(void 0, [error(useStrictDirective_1, ts.Diagnostics.use_strict_directive_cannot_be_used_with_non_simple_parameter_list)].concat(diagnostics_1)); + ts.addRelatedInfo.apply(void 0, [error(useStrictDirective_1, ts.Diagnostics.use_strict_directive_cannot_be_used_with_non_simple_parameter_list)].concat(diagnostics_1)); return true; } } @@ -81241,12 +81291,28 @@ var ts; return result.diagnostics; } ts.getDeclarationDiagnostics = getDeclarationDiagnostics; + function hasInternalAnnotation(range, currentSourceFile) { + var comment = currentSourceFile.text.substring(range.pos, range.end); + return ts.stringContains(comment, "@internal"); + } function isInternalDeclaration(node, currentSourceFile) { var parseTreeNode = ts.getParseTreeNode(node); + if (parseTreeNode && parseTreeNode.kind === 151 /* Parameter */) { + var paramIdx = parseTreeNode.parent.parameters.indexOf(parseTreeNode); + var previousSibling = paramIdx > 0 ? parseTreeNode.parent.parameters[paramIdx - 1] : undefined; + var text = currentSourceFile.text; + var commentRanges = previousSibling + ? ts.concatenate( + // to handle + // ... parameters, /* @internal */ + // public param: string + ts.getTrailingCommentRanges(text, ts.skipTrivia(text, previousSibling.end + 1, /* stopAfterLineBreak */ false, /* stopAtComments */ true)), ts.getLeadingCommentRanges(text, node.pos)) + : ts.getTrailingCommentRanges(text, ts.skipTrivia(text, node.pos, /* stopAfterLineBreak */ false, /* stopAtComments */ true)); + return commentRanges && commentRanges.length && hasInternalAnnotation(ts.last(commentRanges), currentSourceFile); + } var leadingCommentRanges = parseTreeNode && ts.getLeadingCommentRangesOfNode(parseTreeNode, currentSourceFile); return !!ts.forEach(leadingCommentRanges, function (range) { - var comment = currentSourceFile.text.substring(range.pos, range.end); - return ts.stringContains(comment, "@internal"); + return hasInternalAnnotation(range, currentSourceFile); }); } ts.isInternalDeclaration = isInternalDeclaration; @@ -82103,7 +82169,7 @@ var ts; if (ctor) { var oldDiag_1 = getSymbolAccessibilityDiagnostic; parameterProperties = ts.compact(ts.flatMap(ctor.parameters, function (param) { - if (!ts.hasModifier(param, 92 /* ParameterPropertyModifier */)) + if (!ts.hasModifier(param, 92 /* ParameterPropertyModifier */) || shouldStripInternal(param)) return; getSymbolAccessibilityDiagnostic = ts.createGetSymbolAccessibilityDiagnosticForNode(param); if (param.name.kind === 72 /* Identifier */) { @@ -88160,11 +88226,18 @@ var ts; if (rootNames.length) { for (var _i = 0, resolvedProjectReferences_1 = resolvedProjectReferences; _i < resolvedProjectReferences_1.length; _i++) { var parsedRef = resolvedProjectReferences_1[_i]; - if (parsedRef) { - var out = parsedRef.commandLine.options.outFile || parsedRef.commandLine.options.out; - if (out) { - var dtsOutfile = ts.changeExtension(out, ".d.ts"); - processSourceFile(dtsOutfile, /*isDefaultLib*/ false, /*ignoreNoDefaultLib*/ false, /*packageId*/ undefined); + if (!parsedRef) + continue; + var out = parsedRef.commandLine.options.outFile || parsedRef.commandLine.options.out; + if (out) { + processSourceFile(ts.changeExtension(out, ".d.ts"), /*isDefaultLib*/ false, /*ignoreNoDefaultLib*/ false, /*packageId*/ undefined); + } + else if (ts.getEmitModuleKind(parsedRef.commandLine.options) === ts.ModuleKind.None) { + for (var _a = 0, _b = parsedRef.commandLine.fileNames; _a < _b.length; _a++) { + var fileName = _b[_a]; + if (!ts.fileExtensionIs(fileName, ".d.ts" /* Dts */) && ts.hasTSFileExtension(fileName)) { + processSourceFile(ts.getOutputDeclarationFileName(fileName, parsedRef.commandLine), /*isDefaultLib*/ false, /*ignoreNoDefaultLib*/ false, /*packageId*/ undefined); + } } } } @@ -88212,8 +88285,8 @@ var ts; // not part of the new program. if (oldProgram && host.onReleaseOldSourceFile) { var oldSourceFiles = oldProgram.getSourceFiles(); - for (var _a = 0, oldSourceFiles_1 = oldSourceFiles; _a < oldSourceFiles_1.length; _a++) { - var oldSourceFile = oldSourceFiles_1[_a]; + for (var _c = 0, oldSourceFiles_1 = oldSourceFiles; _c < oldSourceFiles_1.length; _c++) { + var oldSourceFile = oldSourceFiles_1[_c]; var newFile = getSourceFileByPath(oldSourceFile.resolvedPath); if (shouldCreateNewSourceFile || !newFile || // old file wasnt redirect but new file is @@ -93982,9 +94055,9 @@ var ts; updateOutputTimestamps(proj); return; } - var buildResult = status.type === UpToDateStatusType.OutOfDateWithPrepend ? - updateBundle(resolved) : // Fake that files have been built by manipulating prepend and existing output - buildSingleProject(resolved); // Actual build + var buildResult = needsBuild(status, resolved) ? + buildSingleProject(resolved) : // Actual build + updateBundle(resolved); // Fake that files have been built by manipulating prepend and existing output if (buildResult & BuildResultFlags.AnyErrors) return; var _a = getGlobalDependencyGraph(), referencingProjectsMap = _a.referencingProjectsMap, buildQueue = _a.buildQueue; @@ -94227,7 +94300,12 @@ var ts; return reportStatus(ts.Diagnostics.A_non_dry_build_would_update_timestamps_for_output_of_project_0, proj.options.configFilePath); } var priorNewestUpdateTime = updateOutputTimestampsWorker(proj, minimumDate, ts.Diagnostics.Updating_output_timestamps_of_project_0); - projectStatus.setValue(proj.options.configFilePath, { type: UpToDateStatusType.UpToDate, newestDeclarationFileContentChangedTime: priorNewestUpdateTime }); + var status = { + type: UpToDateStatusType.UpToDate, + newestDeclarationFileContentChangedTime: priorNewestUpdateTime, + oldestOutputFileName: getFirstProjectOutput(proj) + }; + projectStatus.setValue(proj.options.configFilePath, status); } function updateOutputTimestampsWorker(proj, priorNewestUpdateTime, verboseMessage, skipOutputs) { var outputs = getAllProjectOutputs(proj); @@ -94351,9 +94429,9 @@ var ts; // Do nothing continue; } - var buildResult = status.type === UpToDateStatusType.OutOfDateWithPrepend && !options.force ? - updateBundle(next) : // Fake that files have been built by manipulating prepend and existing output - buildSingleProject(next); // Actual build + var buildResult = needsBuild(status, next) ? + buildSingleProject(next) : // Actual build + updateBundle(next); // Fake that files have been built by manipulating prepend and existing output anyFailed = anyFailed || !!(buildResult & BuildResultFlags.AnyErrors); } reportErrorSummary(); @@ -94366,6 +94444,15 @@ var ts; readFileWithCache = savedReadFileWithCache; return anyFailed ? ts.ExitStatus.DiagnosticsPresent_OutputsSkipped : ts.ExitStatus.Success; } + function needsBuild(status, configFile) { + if (status.type !== UpToDateStatusType.OutOfDateWithPrepend || options.force) + return true; + var config = parseConfigFile(configFile); + return !config || + config.fileNames.length === 0 || + !!config.errors.length || + !ts.isIncrementalCompilation(config.options); + } function reportParseConfigFileDiagnostic(proj) { reportAndStoreErrors(proj, [configFileCache.getValue(proj)]); } diff --git a/lib/typescriptServices.js b/lib/typescriptServices.js index fbaf8beadae..c34810ba7ed 100644 --- a/lib/typescriptServices.js +++ b/lib/typescriptServices.js @@ -5797,6 +5797,8 @@ var ts; _0_refers_to_a_value_but_is_being_used_as_a_type_here: diag(2749, ts.DiagnosticCategory.Error, "_0_refers_to_a_value_but_is_being_used_as_a_type_here_2749", "'{0}' refers to a value, but is being used as a type here."), The_implementation_signature_is_declared_here: diag(2750, ts.DiagnosticCategory.Error, "The_implementation_signature_is_declared_here_2750", "The implementation signature is declared here."), Circularity_originates_in_type_at_this_location: diag(2751, ts.DiagnosticCategory.Error, "Circularity_originates_in_type_at_this_location_2751", "Circularity originates in type at this location."), + The_first_export_default_is_here: diag(2752, ts.DiagnosticCategory.Error, "The_first_export_default_is_here_2752", "The first export default is here."), + Another_export_default_is_here: diag(2753, ts.DiagnosticCategory.Error, "Another_export_default_is_here_2753", "Another export default is here."), Import_declaration_0_is_using_private_name_1: diag(4000, ts.DiagnosticCategory.Error, "Import_declaration_0_is_using_private_name_1_4000", "Import declaration '{0}' is using private name '{1}'."), Type_parameter_0_of_exported_class_has_or_is_using_private_name_1: diag(4002, ts.DiagnosticCategory.Error, "Type_parameter_0_of_exported_class_has_or_is_using_private_name_1_4002", "Type parameter '{0}' of exported class has or is using private name '{1}'."), Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1: diag(4004, ts.DiagnosticCategory.Error, "Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1_4004", "Type parameter '{0}' of exported interface has or is using private name '{1}'."), @@ -16260,6 +16262,19 @@ var ts; return arr.slice(index); } ts.sliceAfter = sliceAfter; + function addRelatedInfo(diagnostic) { + var _a; + var relatedInformation = []; + for (var _i = 1; _i < arguments.length; _i++) { + relatedInformation[_i - 1] = arguments[_i]; + } + if (!diagnostic.relatedInformation) { + diagnostic.relatedInformation = []; + } + (_a = diagnostic.relatedInformation).push.apply(_a, relatedInformation); + return diagnostic; + } + ts.addRelatedInfo = addRelatedInfo; function minAndMax(arr, getValue) { Debug.assert(arr.length !== 0); var min = getValue(arr[0]); @@ -27709,13 +27724,15 @@ var ts; message_1 = ts.Diagnostics.Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations; messageNeedsName_1 = false; } - if (symbol.declarations && symbol.declarations.length) { + var multipleDefaultExports_1 = false; + if (ts.length(symbol.declarations)) { // If the current node is a default export of some sort, then check if // there are any other default exports that we need to error on. // We'll know whether we have other default exports depending on if `symbol` already has a declaration list set. if (isDefaultExport) { message_1 = ts.Diagnostics.A_module_cannot_have_multiple_default_exports; messageNeedsName_1 = false; + multipleDefaultExports_1 = true; } else { // This is to properly report an error in the case "export default { }" is after export default of class declaration or function declaration. @@ -27726,14 +27743,22 @@ var ts; (node.kind === 254 /* ExportAssignment */ && !node.isExportEquals)) { message_1 = ts.Diagnostics.A_module_cannot_have_multiple_default_exports; messageNeedsName_1 = false; + multipleDefaultExports_1 = true; } } } - var addError = function (decl) { - file.bindDiagnostics.push(createDiagnosticForNode(ts.getNameOfDeclaration(decl) || decl, message_1, messageNeedsName_1 ? getDisplayName(decl) : undefined)); - }; - ts.forEach(symbol.declarations, addError); - addError(node); + var declarationName_1 = ts.getNameOfDeclaration(node) || node; + var relatedInformation_1 = []; + ts.forEach(symbol.declarations, function (declaration, index) { + var decl = ts.getNameOfDeclaration(declaration) || declaration; + var diag = createDiagnosticForNode(decl, message_1, messageNeedsName_1 ? getDisplayName(declaration) : undefined); + file.bindDiagnostics.push(multipleDefaultExports_1 ? ts.addRelatedInfo(diag, createDiagnosticForNode(declarationName_1, index === 0 ? ts.Diagnostics.Another_export_default_is_here : ts.Diagnostics.and_here)) : diag); + if (multipleDefaultExports_1) { + relatedInformation_1.push(createDiagnosticForNode(decl, ts.Diagnostics.The_first_export_default_is_here)); + } + }); + var diag = createDiagnosticForNode(declarationName_1, message_1, messageNeedsName_1 ? getDisplayName(node) : undefined); + file.bindDiagnostics.push(multipleDefaultExports_1 ? ts.addRelatedInfo.apply(void 0, [diag].concat(relatedInformation_1)) : diag); symbol = createSymbol(0 /* None */, name); } } @@ -31768,18 +31793,6 @@ var ts; return diagnostic; } } - function addRelatedInfo(diagnostic) { - var _a; - var relatedInformation = []; - for (var _i = 1; _i < arguments.length; _i++) { - relatedInformation[_i - 1] = arguments[_i]; - } - if (!diagnostic.relatedInformation) { - diagnostic.relatedInformation = []; - } - (_a = diagnostic.relatedInformation).push.apply(_a, relatedInformation); - return diagnostic; - } function error(location, message, arg0, arg1, arg2, arg3) { var diagnostic = location ? ts.createDiagnosticForNode(location, message, arg0, arg1, arg2, arg3) @@ -31959,7 +31972,7 @@ var ts; err.relatedInformation = err.relatedInformation || []; if (ts.length(err.relatedInformation) >= 5) continue; - addRelatedInfo(err, !ts.length(err.relatedInformation) ? ts.createDiagnosticForNode(relatedNode, ts.Diagnostics._0_was_also_declared_here, symbolName) : ts.createDiagnosticForNode(relatedNode, ts.Diagnostics.and_here)); + ts.addRelatedInfo(err, !ts.length(err.relatedInformation) ? ts.createDiagnosticForNode(relatedNode, ts.Diagnostics._0_was_also_declared_here, symbolName) : ts.createDiagnosticForNode(relatedNode, ts.Diagnostics.and_here)); } } function combineSymbolTables(first, second) { @@ -32484,7 +32497,7 @@ var ts; var suggestionName = symbolToString(suggestion); var diagnostic = error(errorLocation, suggestedNameNotFoundMessage, diagnosticName(nameArg), suggestionName); if (suggestion.valueDeclaration) { - addRelatedInfo(diagnostic, ts.createDiagnosticForNode(suggestion.valueDeclaration, ts.Diagnostics._0_is_declared_here, suggestionName)); + ts.addRelatedInfo(diagnostic, ts.createDiagnosticForNode(suggestion.valueDeclaration, ts.Diagnostics._0_is_declared_here, suggestionName)); } } } @@ -32722,7 +32735,7 @@ var ts; } } if (diagnosticMessage) { - addRelatedInfo(diagnosticMessage, ts.createDiagnosticForNode(declaration, ts.Diagnostics._0_is_declared_here, declarationName)); + ts.addRelatedInfo(diagnosticMessage, ts.createDiagnosticForNode(declaration, ts.Diagnostics._0_is_declared_here, declarationName)); } } } @@ -32906,7 +32919,7 @@ var ts; var suggestionName = symbolToString(suggestion); var diagnostic = error(name, ts.Diagnostics.Module_0_has_no_exported_member_1_Did_you_mean_2, moduleName, declarationName, suggestionName); if (suggestion.valueDeclaration) { - addRelatedInfo(diagnostic, ts.createDiagnosticForNode(suggestion.valueDeclaration, ts.Diagnostics._0_is_declared_here, suggestionName)); + ts.addRelatedInfo(diagnostic, ts.createDiagnosticForNode(suggestion.valueDeclaration, ts.Diagnostics._0_is_declared_here, suggestionName)); } } else { @@ -36541,7 +36554,7 @@ var ts; ctorReturn = getReturnTypeOfSignature(ctorSig[0]); } } - addRelatedInfo(err, ts.createDiagnosticForNode(baseConstructorType.symbol.declarations[0], ts.Diagnostics.Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1, symbolToString(baseConstructorType.symbol), typeToString(ctorReturn))); + ts.addRelatedInfo(err, ts.createDiagnosticForNode(baseConstructorType.symbol.declarations[0], ts.Diagnostics.Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1, symbolToString(baseConstructorType.symbol), typeToString(ctorReturn))); } return type.resolvedBaseConstructorType = errorType; } @@ -37529,13 +37542,22 @@ var ts; function unionSpreadIndexInfos(info1, info2) { return info1 && info2 && createIndexInfo(getUnionType([info1.type, info2.type]), info1.isReadonly || info2.isReadonly); } - function includeMixinType(type, types, index) { + function findMixins(types) { + var constructorTypeCount = ts.countWhere(types, function (t) { return getSignaturesOfType(t, 1 /* Construct */).length > 0; }); + var mixinFlags = ts.map(types, isMixinConstructorType); + if (constructorTypeCount > 0 && constructorTypeCount === ts.countWhere(mixinFlags, function (b) { return b; })) { + var firstMixinIndex = mixinFlags.indexOf(/*searchElement*/ true); + mixinFlags[firstMixinIndex] = false; + } + return mixinFlags; + } + function includeMixinType(type, types, mixinFlags, index) { var mixedTypes = []; for (var i = 0; i < types.length; i++) { if (i === index) { mixedTypes.push(type); } - else if (isMixinConstructorType(types[i])) { + else if (mixinFlags[i]) { mixedTypes.push(getReturnTypeOfSignature(getSignaturesOfType(types[i], 1 /* Construct */)[0])); } } @@ -37549,7 +37571,8 @@ var ts; var stringIndexInfo; var numberIndexInfo; var types = type.types; - var mixinCount = ts.countWhere(types, isMixinConstructorType); + var mixinFlags = findMixins(types); + var mixinCount = ts.countWhere(mixinFlags, function (b) { return b; }); var _loop_6 = function (i) { var t = type.types[i]; // When an intersection type contains mixin constructor types, the construct signatures from @@ -37557,12 +37580,12 @@ var ts; // other construct signatures in the intersection type. For example, the intersection type // '{ new(...args: any[]) => A } & { new(s: string) => B }' has a single construct signature // 'new(s: string) => A & B'. - if (mixinCount === 0 || mixinCount === types.length && i === 0 || !isMixinConstructorType(t)) { + if (!mixinFlags[i]) { var signatures = getSignaturesOfType(t, 1 /* Construct */); if (signatures.length && mixinCount > 0) { signatures = ts.map(signatures, function (s) { var clone = cloneSignature(s); - clone.resolvedReturnType = includeMixinType(getReturnTypeOfSignature(s), types, i); + clone.resolvedReturnType = includeMixinType(getReturnTypeOfSignature(s), types, mixinFlags, i); return clone; }); } @@ -38088,7 +38111,7 @@ var ts; if (errorNode) { var diagnostic = error(errorNode, ts.Diagnostics.Type_parameter_0_has_a_circular_constraint, typeToString(t)); if (currentNode && !ts.isNodeDescendantOf(errorNode, currentNode) && !ts.isNodeDescendantOf(currentNode, errorNode)) { - addRelatedInfo(diagnostic, ts.createDiagnosticForNode(currentNode, ts.Diagnostics.Circularity_originates_in_type_at_this_location)); + ts.addRelatedInfo(diagnostic, ts.createDiagnosticForNode(currentNode, ts.Diagnostics.Circularity_originates_in_type_at_this_location)); } } } @@ -40285,12 +40308,15 @@ var ts; // that substitutes the index type for P. For example, for an index access { [P in K]: Box }[X], we // construct the type Box. if (isGenericMappedType(objectType)) { - var mapper = createTypeMapper([getTypeParameterFromMappedType(objectType)], [type.indexType]); - var templateMapper = combineTypeMappers(objectType.mapper, mapper); - return type.simplified = mapType(instantiateType(getTemplateTypeFromMappedType(objectType), templateMapper), getSimplifiedType); + return type.simplified = mapType(substituteIndexedMappedType(objectType, type.indexType), getSimplifiedType); } return type.simplified = type; } + function substituteIndexedMappedType(objectType, index) { + var mapper = createTypeMapper([getTypeParameterFromMappedType(objectType)], [index]); + var templateMapper = combineTypeMappers(objectType.mapper, mapper); + return instantiateType(getTemplateTypeFromMappedType(objectType), templateMapper); + } function getIndexedAccessType(objectType, indexType, accessNode, missingType) { if (missingType === void 0) { missingType = accessNode ? errorType : unknownType; } if (objectType === wildcardType || indexType === wildcardType) { @@ -41555,7 +41581,7 @@ var ts; var resultObj = {}; checkTypeAssignableTo(source, target, node, headMessage, /*containingChain*/ undefined, resultObj); var diagnostic = resultObj.error; - addRelatedInfo(diagnostic, ts.createDiagnosticForNode(node, signatures === constructSignatures ? ts.Diagnostics.Did_you_mean_to_use_new_with_this_expression : ts.Diagnostics.Did_you_mean_to_call_this_expression)); + ts.addRelatedInfo(diagnostic, ts.createDiagnosticForNode(node, signatures === constructSignatures ? ts.Diagnostics.Did_you_mean_to_use_new_with_this_expression : ts.Diagnostics.Did_you_mean_to_call_this_expression)); return true; } } @@ -41590,7 +41616,7 @@ var ts; checkTypeRelatedTo(sourceReturn, targetReturn, relation, returnExpression, /*message*/ undefined, /*chain*/ undefined, resultObj); if (resultObj.error) { if (target.symbol && ts.length(target.symbol.declarations)) { - addRelatedInfo(resultObj.error, ts.createDiagnosticForNode(target.symbol.declarations[0], ts.Diagnostics.The_expected_type_comes_from_the_return_type_of_this_signature)); + ts.addRelatedInfo(resultObj.error, ts.createDiagnosticForNode(target.symbol.declarations[0], ts.Diagnostics.The_expected_type_comes_from_the_return_type_of_this_signature)); } return true; } @@ -41637,13 +41663,13 @@ var ts; undefined; if (indexInfo && indexInfo.declaration && !ts.getSourceFileOfNode(indexInfo.declaration).hasNoDefaultLib) { issuedElaboration = true; - addRelatedInfo(reportedDiag, ts.createDiagnosticForNode(indexInfo.declaration, ts.Diagnostics.The_expected_type_comes_from_this_index_signature)); + ts.addRelatedInfo(reportedDiag, ts.createDiagnosticForNode(indexInfo.declaration, ts.Diagnostics.The_expected_type_comes_from_this_index_signature)); } } if (!issuedElaboration && (targetProp && ts.length(targetProp.declarations) || target.symbol && ts.length(target.symbol.declarations))) { var targetNode = targetProp && ts.length(targetProp.declarations) ? targetProp.declarations[0] : target.symbol.declarations[0]; if (!ts.getSourceFileOfNode(targetNode).hasNoDefaultLib) { - addRelatedInfo(reportedDiag, ts.createDiagnosticForNode(targetNode, ts.Diagnostics.The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1, propertyName && !(nameType.flags & 8192 /* UniqueESSymbol */) ? ts.unescapeLeadingUnderscores(propertyName) : typeToString(nameType), typeToString(target))); + ts.addRelatedInfo(reportedDiag, ts.createDiagnosticForNode(targetNode, ts.Diagnostics.The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1, propertyName && !(nameType.flags & 8192 /* UniqueESSymbol */) ? ts.unescapeLeadingUnderscores(propertyName) : typeToString(nameType), typeToString(target))); } } } @@ -42209,7 +42235,7 @@ var ts; } var diag = ts.createDiagnosticForNodeFromMessageChain(errorNode, errorInfo, relatedInformation); if (relatedInfo) { - addRelatedInfo.apply(void 0, [diag].concat(relatedInfo)); + ts.addRelatedInfo.apply(void 0, [diag].concat(relatedInfo)); } if (errorOutputContainer) { errorOutputContainer.error = diag; @@ -46987,7 +47013,7 @@ var ts; if (!ts.isSourceFile(container)) { var outsideThis = tryGetThisTypeAt(container); if (outsideThis && outsideThis !== globalThisType_1) { - addRelatedInfo(diag, ts.createDiagnosticForNode(container, ts.Diagnostics.An_outer_value_of_this_is_shadowed_by_this_container)); + ts.addRelatedInfo(diag, ts.createDiagnosticForNode(container, ts.Diagnostics.An_outer_value_of_this_is_shadowed_by_this_container)); } } } @@ -47639,7 +47665,15 @@ var ts; } function getTypeOfPropertyOfContextualType(type, name) { return mapType(type, function (t) { - if (t.flags & 3670016 /* StructuredType */) { + if (isGenericMappedType(t)) { + var constraint = getConstraintTypeFromMappedType(t); + var constraintOfConstraint = getBaseConstraintOfType(constraint) || constraint; + var propertyNameType = getLiteralType(ts.unescapeLeadingUnderscores(name)); + if (isTypeAssignableTo(propertyNameType, constraintOfConstraint)) { + return substituteIndexedMappedType(t, propertyNameType); + } + } + else if (t.flags & 3670016 /* StructuredType */) { var prop = getPropertyOfType(t, name); if (prop) { return getTypeOfSymbol(prop); @@ -49212,7 +49246,7 @@ var ts; diagnosticMessage = error(right, ts.Diagnostics.Class_0_used_before_its_declaration, declarationName); } if (diagnosticMessage) { - addRelatedInfo(diagnosticMessage, ts.createDiagnosticForNode(valueDeclaration, ts.Diagnostics._0_is_declared_here, declarationName)); + ts.addRelatedInfo(diagnosticMessage, ts.createDiagnosticForNode(valueDeclaration, ts.Diagnostics._0_is_declared_here, declarationName)); } } function isInPropertyInitializer(node) { @@ -49301,7 +49335,7 @@ var ts; } var resultDiagnostic = ts.createDiagnosticForNodeFromMessageChain(propNode, errorInfo); if (relatedInfo) { - addRelatedInfo(resultDiagnostic, relatedInfo); + ts.addRelatedInfo(resultDiagnostic, relatedInfo); } diagnostics.add(resultDiagnostic); } @@ -50052,25 +50086,41 @@ var ts; if (argCount <= max && hasSpreadArgument) { argCount--; } + var spanArray; var related; + var error = hasRestParameter || hasSpreadArgument ? hasRestParameter && hasSpreadArgument ? ts.Diagnostics.Expected_at_least_0_arguments_but_got_1_or_more : + hasRestParameter ? ts.Diagnostics.Expected_at_least_0_arguments_but_got_1 : + ts.Diagnostics.Expected_0_arguments_but_got_1_or_more : ts.Diagnostics.Expected_0_arguments_but_got_1; if (closestSignature && getMinArgumentCount(closestSignature) > argCount && closestSignature.declaration) { var paramDecl = closestSignature.declaration.parameters[closestSignature.thisParameter ? argCount + 1 : argCount]; if (paramDecl) { related = ts.createDiagnosticForNode(paramDecl, ts.isBindingPattern(paramDecl.name) ? ts.Diagnostics.An_argument_matching_this_binding_pattern_was_not_provided : ts.Diagnostics.An_argument_for_0_was_not_provided, !paramDecl.name ? argCount : !ts.isBindingPattern(paramDecl.name) ? ts.idText(getFirstIdentifier(paramDecl.name)) : undefined); } } - if (hasRestParameter || hasSpreadArgument) { - var error_1 = hasRestParameter && hasSpreadArgument ? ts.Diagnostics.Expected_at_least_0_arguments_but_got_1_or_more : - hasRestParameter ? ts.Diagnostics.Expected_at_least_0_arguments_but_got_1 : - ts.Diagnostics.Expected_0_arguments_but_got_1_or_more; - var diagnostic_1 = ts.createDiagnosticForNode(node, error_1, paramRange, argCount); - return related ? addRelatedInfo(diagnostic_1, related) : diagnostic_1; - } if (min < argCount && argCount < max) { return ts.createDiagnosticForNode(node, ts.Diagnostics.No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments, argCount, belowArgCount, aboveArgCount); } - var diagnostic = ts.createDiagnosticForNode(node, ts.Diagnostics.Expected_0_arguments_but_got_1, paramRange, argCount); - return related ? addRelatedInfo(diagnostic, related) : diagnostic; + if (!hasSpreadArgument && argCount < min) { + var diagnostic_1 = ts.createDiagnosticForNode(node, error, paramRange, argCount); + return related ? ts.addRelatedInfo(diagnostic_1, related) : diagnostic_1; + } + if (hasRestParameter || hasSpreadArgument) { + spanArray = ts.createNodeArray(args); + if (hasSpreadArgument && argCount) { + var nextArg = ts.elementAt(args, getSpreadArgumentIndex(args) + 1) || undefined; + spanArray = ts.createNodeArray(args.slice(max > argCount && nextArg ? args.indexOf(nextArg) : max)); + } + } + else { + spanArray = ts.createNodeArray(args.slice(max)); + } + spanArray.pos = ts.first(spanArray).pos; + spanArray.end = ts.last(spanArray).end; + if (spanArray.end === spanArray.pos) { + spanArray.end++; + } + var diagnostic = ts.createDiagnosticForNodeArray(ts.getSourceFileOfNode(node), spanArray, error, paramRange, argCount); + return related ? ts.addRelatedInfo(diagnostic, related) : diagnostic; } function getTypeArgumentArityError(node, signatures, typeArguments) { var argCount = typeArguments.length; @@ -50583,13 +50633,12 @@ var ts; var firstBase = baseTypes[0]; if (firstBase.flags & 2097152 /* Intersection */) { var types = firstBase.types; - var mixinCount = ts.countWhere(types, isMixinConstructorType); + var mixinFlags = findMixins(types); var i = 0; for (var _i = 0, _a = firstBase.types; _i < _a.length; _i++) { var intersectionMember = _a[_i]; - i++; // We want to ignore mixin ctors - if (mixinCount === 0 || mixinCount === types.length && i === 0 || !isMixinConstructorType(intersectionMember)) { + if (!mixinFlags[i]) { if (ts.getObjectFlags(intersectionMember) & (1 /* Class */ | 2 /* Interface */)) { if (intersectionMember.symbol === target) { return true; @@ -50599,6 +50648,7 @@ var ts; } } } + i++; } return false; } @@ -50642,7 +50692,7 @@ var ts; var diagnostic = error(node, (kind === 0 /* Call */ ? ts.Diagnostics.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures : ts.Diagnostics.Cannot_use_new_with_an_expression_whose_type_lacks_a_call_or_construct_signature), typeToString(apparentType)); - invocationErrorRecovery(apparentType, kind, relatedInformation ? addRelatedInfo(diagnostic, relatedInformation) : diagnostic); + invocationErrorRecovery(apparentType, kind, relatedInformation ? ts.addRelatedInfo(diagnostic, relatedInformation) : diagnostic); } function invocationErrorRecovery(apparentType, kind, diagnostic) { if (!apparentType.symbol) { @@ -50655,7 +50705,7 @@ var ts; var sigs = getSignaturesOfType(getTypeOfSymbol(getSymbolLinks(apparentType.symbol).target), kind); if (!sigs || !sigs.length) return; - addRelatedInfo(diagnostic, ts.createDiagnosticForNode(importNode, ts.Diagnostics.Type_originates_at_this_import_A_namespace_style_import_cannot_be_called_or_constructed_and_will_cause_a_failure_at_runtime_Consider_using_a_default_import_or_import_require_here_instead)); + ts.addRelatedInfo(diagnostic, ts.createDiagnosticForNode(importNode, ts.Diagnostics.Type_originates_at_this_import_A_namespace_style_import_cannot_be_called_or_constructed_and_will_cause_a_failure_at_runtime_Consider_using_a_default_import_or_import_require_here_instead)); } } function resolveTaggedTemplateExpression(node, candidatesOutArray, checkMode) { @@ -53885,7 +53935,7 @@ var ts; for (var _a = 0, signatures_6 = signatures; _a < signatures_6.length; _a++) { var signature = signatures_6[_a]; if (!isImplementationCompatibleWithOverload(bodySignature, signature)) { - addRelatedInfo(error(signature.declaration, ts.Diagnostics.This_overload_signature_is_not_compatible_with_its_implementation_signature), ts.createDiagnosticForNode(bodyDeclaration, ts.Diagnostics.The_implementation_signature_is_declared_here)); + ts.addRelatedInfo(error(signature.declaration, ts.Diagnostics.This_overload_signature_is_not_compatible_with_its_implementation_signature), ts.createDiagnosticForNode(bodyDeclaration, ts.Diagnostics.The_implementation_signature_is_declared_here)); break; } } @@ -58859,8 +58909,8 @@ var ts; else { // Otherwise issue top-level error since the files appear very identical in terms of what they contain var list = ts.arrayFrom(conflictingSymbols.keys()).join(", "); - diagnostics.add(addRelatedInfo(ts.createDiagnosticForNode(firstFile, ts.Diagnostics.Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0, list), ts.createDiagnosticForNode(secondFile, ts.Diagnostics.Conflicts_are_in_this_file))); - diagnostics.add(addRelatedInfo(ts.createDiagnosticForNode(secondFile, ts.Diagnostics.Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0, list), ts.createDiagnosticForNode(firstFile, ts.Diagnostics.Conflicts_are_in_this_file))); + diagnostics.add(ts.addRelatedInfo(ts.createDiagnosticForNode(firstFile, ts.Diagnostics.Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0, list), ts.createDiagnosticForNode(secondFile, ts.Diagnostics.Conflicts_are_in_this_file))); + diagnostics.add(ts.addRelatedInfo(ts.createDiagnosticForNode(secondFile, ts.Diagnostics.Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0, list), ts.createDiagnosticForNode(firstFile, ts.Diagnostics.Conflicts_are_in_this_file))); } }); amalgamatedDuplicates = undefined; @@ -59256,10 +59306,10 @@ var ts; var nonSimpleParameters = getNonSimpleParameters(node.parameters); if (ts.length(nonSimpleParameters)) { ts.forEach(nonSimpleParameters, function (parameter) { - addRelatedInfo(error(parameter, ts.Diagnostics.This_parameter_is_not_allowed_with_use_strict_directive), ts.createDiagnosticForNode(useStrictDirective_1, ts.Diagnostics.use_strict_directive_used_here)); + ts.addRelatedInfo(error(parameter, ts.Diagnostics.This_parameter_is_not_allowed_with_use_strict_directive), ts.createDiagnosticForNode(useStrictDirective_1, ts.Diagnostics.use_strict_directive_used_here)); }); var diagnostics_1 = nonSimpleParameters.map(function (parameter, index) { return (index === 0 ? ts.createDiagnosticForNode(parameter, ts.Diagnostics.Non_simple_parameter_declared_here) : ts.createDiagnosticForNode(parameter, ts.Diagnostics.and_here)); }); - addRelatedInfo.apply(void 0, [error(useStrictDirective_1, ts.Diagnostics.use_strict_directive_cannot_be_used_with_non_simple_parameter_list)].concat(diagnostics_1)); + ts.addRelatedInfo.apply(void 0, [error(useStrictDirective_1, ts.Diagnostics.use_strict_directive_cannot_be_used_with_non_simple_parameter_list)].concat(diagnostics_1)); return true; } } @@ -81241,12 +81291,28 @@ var ts; return result.diagnostics; } ts.getDeclarationDiagnostics = getDeclarationDiagnostics; + function hasInternalAnnotation(range, currentSourceFile) { + var comment = currentSourceFile.text.substring(range.pos, range.end); + return ts.stringContains(comment, "@internal"); + } function isInternalDeclaration(node, currentSourceFile) { var parseTreeNode = ts.getParseTreeNode(node); + if (parseTreeNode && parseTreeNode.kind === 151 /* Parameter */) { + var paramIdx = parseTreeNode.parent.parameters.indexOf(parseTreeNode); + var previousSibling = paramIdx > 0 ? parseTreeNode.parent.parameters[paramIdx - 1] : undefined; + var text = currentSourceFile.text; + var commentRanges = previousSibling + ? ts.concatenate( + // to handle + // ... parameters, /* @internal */ + // public param: string + ts.getTrailingCommentRanges(text, ts.skipTrivia(text, previousSibling.end + 1, /* stopAfterLineBreak */ false, /* stopAtComments */ true)), ts.getLeadingCommentRanges(text, node.pos)) + : ts.getTrailingCommentRanges(text, ts.skipTrivia(text, node.pos, /* stopAfterLineBreak */ false, /* stopAtComments */ true)); + return commentRanges && commentRanges.length && hasInternalAnnotation(ts.last(commentRanges), currentSourceFile); + } var leadingCommentRanges = parseTreeNode && ts.getLeadingCommentRangesOfNode(parseTreeNode, currentSourceFile); return !!ts.forEach(leadingCommentRanges, function (range) { - var comment = currentSourceFile.text.substring(range.pos, range.end); - return ts.stringContains(comment, "@internal"); + return hasInternalAnnotation(range, currentSourceFile); }); } ts.isInternalDeclaration = isInternalDeclaration; @@ -82103,7 +82169,7 @@ var ts; if (ctor) { var oldDiag_1 = getSymbolAccessibilityDiagnostic; parameterProperties = ts.compact(ts.flatMap(ctor.parameters, function (param) { - if (!ts.hasModifier(param, 92 /* ParameterPropertyModifier */)) + if (!ts.hasModifier(param, 92 /* ParameterPropertyModifier */) || shouldStripInternal(param)) return; getSymbolAccessibilityDiagnostic = ts.createGetSymbolAccessibilityDiagnosticForNode(param); if (param.name.kind === 72 /* Identifier */) { @@ -88160,11 +88226,18 @@ var ts; if (rootNames.length) { for (var _i = 0, resolvedProjectReferences_1 = resolvedProjectReferences; _i < resolvedProjectReferences_1.length; _i++) { var parsedRef = resolvedProjectReferences_1[_i]; - if (parsedRef) { - var out = parsedRef.commandLine.options.outFile || parsedRef.commandLine.options.out; - if (out) { - var dtsOutfile = ts.changeExtension(out, ".d.ts"); - processSourceFile(dtsOutfile, /*isDefaultLib*/ false, /*ignoreNoDefaultLib*/ false, /*packageId*/ undefined); + if (!parsedRef) + continue; + var out = parsedRef.commandLine.options.outFile || parsedRef.commandLine.options.out; + if (out) { + processSourceFile(ts.changeExtension(out, ".d.ts"), /*isDefaultLib*/ false, /*ignoreNoDefaultLib*/ false, /*packageId*/ undefined); + } + else if (ts.getEmitModuleKind(parsedRef.commandLine.options) === ts.ModuleKind.None) { + for (var _a = 0, _b = parsedRef.commandLine.fileNames; _a < _b.length; _a++) { + var fileName = _b[_a]; + if (!ts.fileExtensionIs(fileName, ".d.ts" /* Dts */) && ts.hasTSFileExtension(fileName)) { + processSourceFile(ts.getOutputDeclarationFileName(fileName, parsedRef.commandLine), /*isDefaultLib*/ false, /*ignoreNoDefaultLib*/ false, /*packageId*/ undefined); + } } } } @@ -88212,8 +88285,8 @@ var ts; // not part of the new program. if (oldProgram && host.onReleaseOldSourceFile) { var oldSourceFiles = oldProgram.getSourceFiles(); - for (var _a = 0, oldSourceFiles_1 = oldSourceFiles; _a < oldSourceFiles_1.length; _a++) { - var oldSourceFile = oldSourceFiles_1[_a]; + for (var _c = 0, oldSourceFiles_1 = oldSourceFiles; _c < oldSourceFiles_1.length; _c++) { + var oldSourceFile = oldSourceFiles_1[_c]; var newFile = getSourceFileByPath(oldSourceFile.resolvedPath); if (shouldCreateNewSourceFile || !newFile || // old file wasnt redirect but new file is @@ -93982,9 +94055,9 @@ var ts; updateOutputTimestamps(proj); return; } - var buildResult = status.type === UpToDateStatusType.OutOfDateWithPrepend ? - updateBundle(resolved) : // Fake that files have been built by manipulating prepend and existing output - buildSingleProject(resolved); // Actual build + var buildResult = needsBuild(status, resolved) ? + buildSingleProject(resolved) : // Actual build + updateBundle(resolved); // Fake that files have been built by manipulating prepend and existing output if (buildResult & BuildResultFlags.AnyErrors) return; var _a = getGlobalDependencyGraph(), referencingProjectsMap = _a.referencingProjectsMap, buildQueue = _a.buildQueue; @@ -94227,7 +94300,12 @@ var ts; return reportStatus(ts.Diagnostics.A_non_dry_build_would_update_timestamps_for_output_of_project_0, proj.options.configFilePath); } var priorNewestUpdateTime = updateOutputTimestampsWorker(proj, minimumDate, ts.Diagnostics.Updating_output_timestamps_of_project_0); - projectStatus.setValue(proj.options.configFilePath, { type: UpToDateStatusType.UpToDate, newestDeclarationFileContentChangedTime: priorNewestUpdateTime }); + var status = { + type: UpToDateStatusType.UpToDate, + newestDeclarationFileContentChangedTime: priorNewestUpdateTime, + oldestOutputFileName: getFirstProjectOutput(proj) + }; + projectStatus.setValue(proj.options.configFilePath, status); } function updateOutputTimestampsWorker(proj, priorNewestUpdateTime, verboseMessage, skipOutputs) { var outputs = getAllProjectOutputs(proj); @@ -94351,9 +94429,9 @@ var ts; // Do nothing continue; } - var buildResult = status.type === UpToDateStatusType.OutOfDateWithPrepend && !options.force ? - updateBundle(next) : // Fake that files have been built by manipulating prepend and existing output - buildSingleProject(next); // Actual build + var buildResult = needsBuild(status, next) ? + buildSingleProject(next) : // Actual build + updateBundle(next); // Fake that files have been built by manipulating prepend and existing output anyFailed = anyFailed || !!(buildResult & BuildResultFlags.AnyErrors); } reportErrorSummary(); @@ -94366,6 +94444,15 @@ var ts; readFileWithCache = savedReadFileWithCache; return anyFailed ? ts.ExitStatus.DiagnosticsPresent_OutputsSkipped : ts.ExitStatus.Success; } + function needsBuild(status, configFile) { + if (status.type !== UpToDateStatusType.OutOfDateWithPrepend || options.force) + return true; + var config = parseConfigFile(configFile); + return !config || + config.fileNames.length === 0 || + !!config.errors.length || + !ts.isIncrementalCompilation(config.options); + } function reportParseConfigFileDiagnostic(proj) { reportAndStoreErrors(proj, [configFileCache.getValue(proj)]); } diff --git a/lib/typingsInstaller.js b/lib/typingsInstaller.js index 22979e8d1a3..bfec6909de2 100644 --- a/lib/typingsInstaller.js +++ b/lib/typingsInstaller.js @@ -5798,6 +5798,8 @@ var ts; _0_refers_to_a_value_but_is_being_used_as_a_type_here: diag(2749, ts.DiagnosticCategory.Error, "_0_refers_to_a_value_but_is_being_used_as_a_type_here_2749", "'{0}' refers to a value, but is being used as a type here."), The_implementation_signature_is_declared_here: diag(2750, ts.DiagnosticCategory.Error, "The_implementation_signature_is_declared_here_2750", "The implementation signature is declared here."), Circularity_originates_in_type_at_this_location: diag(2751, ts.DiagnosticCategory.Error, "Circularity_originates_in_type_at_this_location_2751", "Circularity originates in type at this location."), + The_first_export_default_is_here: diag(2752, ts.DiagnosticCategory.Error, "The_first_export_default_is_here_2752", "The first export default is here."), + Another_export_default_is_here: diag(2753, ts.DiagnosticCategory.Error, "Another_export_default_is_here_2753", "Another export default is here."), Import_declaration_0_is_using_private_name_1: diag(4000, ts.DiagnosticCategory.Error, "Import_declaration_0_is_using_private_name_1_4000", "Import declaration '{0}' is using private name '{1}'."), Type_parameter_0_of_exported_class_has_or_is_using_private_name_1: diag(4002, ts.DiagnosticCategory.Error, "Type_parameter_0_of_exported_class_has_or_is_using_private_name_1_4002", "Type parameter '{0}' of exported class has or is using private name '{1}'."), Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1: diag(4004, ts.DiagnosticCategory.Error, "Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1_4004", "Type parameter '{0}' of exported interface has or is using private name '{1}'."), @@ -16261,6 +16263,19 @@ var ts; return arr.slice(index); } ts.sliceAfter = sliceAfter; + function addRelatedInfo(diagnostic) { + var _a; + var relatedInformation = []; + for (var _i = 1; _i < arguments.length; _i++) { + relatedInformation[_i - 1] = arguments[_i]; + } + if (!diagnostic.relatedInformation) { + diagnostic.relatedInformation = []; + } + (_a = diagnostic.relatedInformation).push.apply(_a, relatedInformation); + return diagnostic; + } + ts.addRelatedInfo = addRelatedInfo; function minAndMax(arr, getValue) { Debug.assert(arr.length !== 0); var min = getValue(arr[0]); @@ -27710,13 +27725,15 @@ var ts; message_1 = ts.Diagnostics.Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations; messageNeedsName_1 = false; } - if (symbol.declarations && symbol.declarations.length) { + var multipleDefaultExports_1 = false; + if (ts.length(symbol.declarations)) { // If the current node is a default export of some sort, then check if // there are any other default exports that we need to error on. // We'll know whether we have other default exports depending on if `symbol` already has a declaration list set. if (isDefaultExport) { message_1 = ts.Diagnostics.A_module_cannot_have_multiple_default_exports; messageNeedsName_1 = false; + multipleDefaultExports_1 = true; } else { // This is to properly report an error in the case "export default { }" is after export default of class declaration or function declaration. @@ -27727,14 +27744,22 @@ var ts; (node.kind === 254 /* ExportAssignment */ && !node.isExportEquals)) { message_1 = ts.Diagnostics.A_module_cannot_have_multiple_default_exports; messageNeedsName_1 = false; + multipleDefaultExports_1 = true; } } } - var addError = function (decl) { - file.bindDiagnostics.push(createDiagnosticForNode(ts.getNameOfDeclaration(decl) || decl, message_1, messageNeedsName_1 ? getDisplayName(decl) : undefined)); - }; - ts.forEach(symbol.declarations, addError); - addError(node); + var declarationName_1 = ts.getNameOfDeclaration(node) || node; + var relatedInformation_1 = []; + ts.forEach(symbol.declarations, function (declaration, index) { + var decl = ts.getNameOfDeclaration(declaration) || declaration; + var diag = createDiagnosticForNode(decl, message_1, messageNeedsName_1 ? getDisplayName(declaration) : undefined); + file.bindDiagnostics.push(multipleDefaultExports_1 ? ts.addRelatedInfo(diag, createDiagnosticForNode(declarationName_1, index === 0 ? ts.Diagnostics.Another_export_default_is_here : ts.Diagnostics.and_here)) : diag); + if (multipleDefaultExports_1) { + relatedInformation_1.push(createDiagnosticForNode(decl, ts.Diagnostics.The_first_export_default_is_here)); + } + }); + var diag = createDiagnosticForNode(declarationName_1, message_1, messageNeedsName_1 ? getDisplayName(node) : undefined); + file.bindDiagnostics.push(multipleDefaultExports_1 ? ts.addRelatedInfo.apply(void 0, [diag].concat(relatedInformation_1)) : diag); symbol = createSymbol(0 /* None */, name); } } @@ -31769,18 +31794,6 @@ var ts; return diagnostic; } } - function addRelatedInfo(diagnostic) { - var _a; - var relatedInformation = []; - for (var _i = 1; _i < arguments.length; _i++) { - relatedInformation[_i - 1] = arguments[_i]; - } - if (!diagnostic.relatedInformation) { - diagnostic.relatedInformation = []; - } - (_a = diagnostic.relatedInformation).push.apply(_a, relatedInformation); - return diagnostic; - } function error(location, message, arg0, arg1, arg2, arg3) { var diagnostic = location ? ts.createDiagnosticForNode(location, message, arg0, arg1, arg2, arg3) @@ -31960,7 +31973,7 @@ var ts; err.relatedInformation = err.relatedInformation || []; if (ts.length(err.relatedInformation) >= 5) continue; - addRelatedInfo(err, !ts.length(err.relatedInformation) ? ts.createDiagnosticForNode(relatedNode, ts.Diagnostics._0_was_also_declared_here, symbolName) : ts.createDiagnosticForNode(relatedNode, ts.Diagnostics.and_here)); + ts.addRelatedInfo(err, !ts.length(err.relatedInformation) ? ts.createDiagnosticForNode(relatedNode, ts.Diagnostics._0_was_also_declared_here, symbolName) : ts.createDiagnosticForNode(relatedNode, ts.Diagnostics.and_here)); } } function combineSymbolTables(first, second) { @@ -32485,7 +32498,7 @@ var ts; var suggestionName = symbolToString(suggestion); var diagnostic = error(errorLocation, suggestedNameNotFoundMessage, diagnosticName(nameArg), suggestionName); if (suggestion.valueDeclaration) { - addRelatedInfo(diagnostic, ts.createDiagnosticForNode(suggestion.valueDeclaration, ts.Diagnostics._0_is_declared_here, suggestionName)); + ts.addRelatedInfo(diagnostic, ts.createDiagnosticForNode(suggestion.valueDeclaration, ts.Diagnostics._0_is_declared_here, suggestionName)); } } } @@ -32723,7 +32736,7 @@ var ts; } } if (diagnosticMessage) { - addRelatedInfo(diagnosticMessage, ts.createDiagnosticForNode(declaration, ts.Diagnostics._0_is_declared_here, declarationName)); + ts.addRelatedInfo(diagnosticMessage, ts.createDiagnosticForNode(declaration, ts.Diagnostics._0_is_declared_here, declarationName)); } } } @@ -32907,7 +32920,7 @@ var ts; var suggestionName = symbolToString(suggestion); var diagnostic = error(name, ts.Diagnostics.Module_0_has_no_exported_member_1_Did_you_mean_2, moduleName, declarationName, suggestionName); if (suggestion.valueDeclaration) { - addRelatedInfo(diagnostic, ts.createDiagnosticForNode(suggestion.valueDeclaration, ts.Diagnostics._0_is_declared_here, suggestionName)); + ts.addRelatedInfo(diagnostic, ts.createDiagnosticForNode(suggestion.valueDeclaration, ts.Diagnostics._0_is_declared_here, suggestionName)); } } else { @@ -36542,7 +36555,7 @@ var ts; ctorReturn = getReturnTypeOfSignature(ctorSig[0]); } } - addRelatedInfo(err, ts.createDiagnosticForNode(baseConstructorType.symbol.declarations[0], ts.Diagnostics.Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1, symbolToString(baseConstructorType.symbol), typeToString(ctorReturn))); + ts.addRelatedInfo(err, ts.createDiagnosticForNode(baseConstructorType.symbol.declarations[0], ts.Diagnostics.Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1, symbolToString(baseConstructorType.symbol), typeToString(ctorReturn))); } return type.resolvedBaseConstructorType = errorType; } @@ -37530,13 +37543,22 @@ var ts; function unionSpreadIndexInfos(info1, info2) { return info1 && info2 && createIndexInfo(getUnionType([info1.type, info2.type]), info1.isReadonly || info2.isReadonly); } - function includeMixinType(type, types, index) { + function findMixins(types) { + var constructorTypeCount = ts.countWhere(types, function (t) { return getSignaturesOfType(t, 1 /* Construct */).length > 0; }); + var mixinFlags = ts.map(types, isMixinConstructorType); + if (constructorTypeCount > 0 && constructorTypeCount === ts.countWhere(mixinFlags, function (b) { return b; })) { + var firstMixinIndex = mixinFlags.indexOf(/*searchElement*/ true); + mixinFlags[firstMixinIndex] = false; + } + return mixinFlags; + } + function includeMixinType(type, types, mixinFlags, index) { var mixedTypes = []; for (var i = 0; i < types.length; i++) { if (i === index) { mixedTypes.push(type); } - else if (isMixinConstructorType(types[i])) { + else if (mixinFlags[i]) { mixedTypes.push(getReturnTypeOfSignature(getSignaturesOfType(types[i], 1 /* Construct */)[0])); } } @@ -37550,7 +37572,8 @@ var ts; var stringIndexInfo; var numberIndexInfo; var types = type.types; - var mixinCount = ts.countWhere(types, isMixinConstructorType); + var mixinFlags = findMixins(types); + var mixinCount = ts.countWhere(mixinFlags, function (b) { return b; }); var _loop_6 = function (i) { var t = type.types[i]; // When an intersection type contains mixin constructor types, the construct signatures from @@ -37558,12 +37581,12 @@ var ts; // other construct signatures in the intersection type. For example, the intersection type // '{ new(...args: any[]) => A } & { new(s: string) => B }' has a single construct signature // 'new(s: string) => A & B'. - if (mixinCount === 0 || mixinCount === types.length && i === 0 || !isMixinConstructorType(t)) { + if (!mixinFlags[i]) { var signatures = getSignaturesOfType(t, 1 /* Construct */); if (signatures.length && mixinCount > 0) { signatures = ts.map(signatures, function (s) { var clone = cloneSignature(s); - clone.resolvedReturnType = includeMixinType(getReturnTypeOfSignature(s), types, i); + clone.resolvedReturnType = includeMixinType(getReturnTypeOfSignature(s), types, mixinFlags, i); return clone; }); } @@ -38089,7 +38112,7 @@ var ts; if (errorNode) { var diagnostic = error(errorNode, ts.Diagnostics.Type_parameter_0_has_a_circular_constraint, typeToString(t)); if (currentNode && !ts.isNodeDescendantOf(errorNode, currentNode) && !ts.isNodeDescendantOf(currentNode, errorNode)) { - addRelatedInfo(diagnostic, ts.createDiagnosticForNode(currentNode, ts.Diagnostics.Circularity_originates_in_type_at_this_location)); + ts.addRelatedInfo(diagnostic, ts.createDiagnosticForNode(currentNode, ts.Diagnostics.Circularity_originates_in_type_at_this_location)); } } } @@ -40286,12 +40309,15 @@ var ts; // that substitutes the index type for P. For example, for an index access { [P in K]: Box }[X], we // construct the type Box. if (isGenericMappedType(objectType)) { - var mapper = createTypeMapper([getTypeParameterFromMappedType(objectType)], [type.indexType]); - var templateMapper = combineTypeMappers(objectType.mapper, mapper); - return type.simplified = mapType(instantiateType(getTemplateTypeFromMappedType(objectType), templateMapper), getSimplifiedType); + return type.simplified = mapType(substituteIndexedMappedType(objectType, type.indexType), getSimplifiedType); } return type.simplified = type; } + function substituteIndexedMappedType(objectType, index) { + var mapper = createTypeMapper([getTypeParameterFromMappedType(objectType)], [index]); + var templateMapper = combineTypeMappers(objectType.mapper, mapper); + return instantiateType(getTemplateTypeFromMappedType(objectType), templateMapper); + } function getIndexedAccessType(objectType, indexType, accessNode, missingType) { if (missingType === void 0) { missingType = accessNode ? errorType : unknownType; } if (objectType === wildcardType || indexType === wildcardType) { @@ -41556,7 +41582,7 @@ var ts; var resultObj = {}; checkTypeAssignableTo(source, target, node, headMessage, /*containingChain*/ undefined, resultObj); var diagnostic = resultObj.error; - addRelatedInfo(diagnostic, ts.createDiagnosticForNode(node, signatures === constructSignatures ? ts.Diagnostics.Did_you_mean_to_use_new_with_this_expression : ts.Diagnostics.Did_you_mean_to_call_this_expression)); + ts.addRelatedInfo(diagnostic, ts.createDiagnosticForNode(node, signatures === constructSignatures ? ts.Diagnostics.Did_you_mean_to_use_new_with_this_expression : ts.Diagnostics.Did_you_mean_to_call_this_expression)); return true; } } @@ -41591,7 +41617,7 @@ var ts; checkTypeRelatedTo(sourceReturn, targetReturn, relation, returnExpression, /*message*/ undefined, /*chain*/ undefined, resultObj); if (resultObj.error) { if (target.symbol && ts.length(target.symbol.declarations)) { - addRelatedInfo(resultObj.error, ts.createDiagnosticForNode(target.symbol.declarations[0], ts.Diagnostics.The_expected_type_comes_from_the_return_type_of_this_signature)); + ts.addRelatedInfo(resultObj.error, ts.createDiagnosticForNode(target.symbol.declarations[0], ts.Diagnostics.The_expected_type_comes_from_the_return_type_of_this_signature)); } return true; } @@ -41638,13 +41664,13 @@ var ts; undefined; if (indexInfo && indexInfo.declaration && !ts.getSourceFileOfNode(indexInfo.declaration).hasNoDefaultLib) { issuedElaboration = true; - addRelatedInfo(reportedDiag, ts.createDiagnosticForNode(indexInfo.declaration, ts.Diagnostics.The_expected_type_comes_from_this_index_signature)); + ts.addRelatedInfo(reportedDiag, ts.createDiagnosticForNode(indexInfo.declaration, ts.Diagnostics.The_expected_type_comes_from_this_index_signature)); } } if (!issuedElaboration && (targetProp && ts.length(targetProp.declarations) || target.symbol && ts.length(target.symbol.declarations))) { var targetNode = targetProp && ts.length(targetProp.declarations) ? targetProp.declarations[0] : target.symbol.declarations[0]; if (!ts.getSourceFileOfNode(targetNode).hasNoDefaultLib) { - addRelatedInfo(reportedDiag, ts.createDiagnosticForNode(targetNode, ts.Diagnostics.The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1, propertyName && !(nameType.flags & 8192 /* UniqueESSymbol */) ? ts.unescapeLeadingUnderscores(propertyName) : typeToString(nameType), typeToString(target))); + ts.addRelatedInfo(reportedDiag, ts.createDiagnosticForNode(targetNode, ts.Diagnostics.The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1, propertyName && !(nameType.flags & 8192 /* UniqueESSymbol */) ? ts.unescapeLeadingUnderscores(propertyName) : typeToString(nameType), typeToString(target))); } } } @@ -42210,7 +42236,7 @@ var ts; } var diag = ts.createDiagnosticForNodeFromMessageChain(errorNode, errorInfo, relatedInformation); if (relatedInfo) { - addRelatedInfo.apply(void 0, [diag].concat(relatedInfo)); + ts.addRelatedInfo.apply(void 0, [diag].concat(relatedInfo)); } if (errorOutputContainer) { errorOutputContainer.error = diag; @@ -46988,7 +47014,7 @@ var ts; if (!ts.isSourceFile(container)) { var outsideThis = tryGetThisTypeAt(container); if (outsideThis && outsideThis !== globalThisType_1) { - addRelatedInfo(diag, ts.createDiagnosticForNode(container, ts.Diagnostics.An_outer_value_of_this_is_shadowed_by_this_container)); + ts.addRelatedInfo(diag, ts.createDiagnosticForNode(container, ts.Diagnostics.An_outer_value_of_this_is_shadowed_by_this_container)); } } } @@ -47640,7 +47666,15 @@ var ts; } function getTypeOfPropertyOfContextualType(type, name) { return mapType(type, function (t) { - if (t.flags & 3670016 /* StructuredType */) { + if (isGenericMappedType(t)) { + var constraint = getConstraintTypeFromMappedType(t); + var constraintOfConstraint = getBaseConstraintOfType(constraint) || constraint; + var propertyNameType = getLiteralType(ts.unescapeLeadingUnderscores(name)); + if (isTypeAssignableTo(propertyNameType, constraintOfConstraint)) { + return substituteIndexedMappedType(t, propertyNameType); + } + } + else if (t.flags & 3670016 /* StructuredType */) { var prop = getPropertyOfType(t, name); if (prop) { return getTypeOfSymbol(prop); @@ -49213,7 +49247,7 @@ var ts; diagnosticMessage = error(right, ts.Diagnostics.Class_0_used_before_its_declaration, declarationName); } if (diagnosticMessage) { - addRelatedInfo(diagnosticMessage, ts.createDiagnosticForNode(valueDeclaration, ts.Diagnostics._0_is_declared_here, declarationName)); + ts.addRelatedInfo(diagnosticMessage, ts.createDiagnosticForNode(valueDeclaration, ts.Diagnostics._0_is_declared_here, declarationName)); } } function isInPropertyInitializer(node) { @@ -49302,7 +49336,7 @@ var ts; } var resultDiagnostic = ts.createDiagnosticForNodeFromMessageChain(propNode, errorInfo); if (relatedInfo) { - addRelatedInfo(resultDiagnostic, relatedInfo); + ts.addRelatedInfo(resultDiagnostic, relatedInfo); } diagnostics.add(resultDiagnostic); } @@ -50053,25 +50087,41 @@ var ts; if (argCount <= max && hasSpreadArgument) { argCount--; } + var spanArray; var related; + var error = hasRestParameter || hasSpreadArgument ? hasRestParameter && hasSpreadArgument ? ts.Diagnostics.Expected_at_least_0_arguments_but_got_1_or_more : + hasRestParameter ? ts.Diagnostics.Expected_at_least_0_arguments_but_got_1 : + ts.Diagnostics.Expected_0_arguments_but_got_1_or_more : ts.Diagnostics.Expected_0_arguments_but_got_1; if (closestSignature && getMinArgumentCount(closestSignature) > argCount && closestSignature.declaration) { var paramDecl = closestSignature.declaration.parameters[closestSignature.thisParameter ? argCount + 1 : argCount]; if (paramDecl) { related = ts.createDiagnosticForNode(paramDecl, ts.isBindingPattern(paramDecl.name) ? ts.Diagnostics.An_argument_matching_this_binding_pattern_was_not_provided : ts.Diagnostics.An_argument_for_0_was_not_provided, !paramDecl.name ? argCount : !ts.isBindingPattern(paramDecl.name) ? ts.idText(getFirstIdentifier(paramDecl.name)) : undefined); } } - if (hasRestParameter || hasSpreadArgument) { - var error_1 = hasRestParameter && hasSpreadArgument ? ts.Diagnostics.Expected_at_least_0_arguments_but_got_1_or_more : - hasRestParameter ? ts.Diagnostics.Expected_at_least_0_arguments_but_got_1 : - ts.Diagnostics.Expected_0_arguments_but_got_1_or_more; - var diagnostic_1 = ts.createDiagnosticForNode(node, error_1, paramRange, argCount); - return related ? addRelatedInfo(diagnostic_1, related) : diagnostic_1; - } if (min < argCount && argCount < max) { return ts.createDiagnosticForNode(node, ts.Diagnostics.No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments, argCount, belowArgCount, aboveArgCount); } - var diagnostic = ts.createDiagnosticForNode(node, ts.Diagnostics.Expected_0_arguments_but_got_1, paramRange, argCount); - return related ? addRelatedInfo(diagnostic, related) : diagnostic; + if (!hasSpreadArgument && argCount < min) { + var diagnostic_1 = ts.createDiagnosticForNode(node, error, paramRange, argCount); + return related ? ts.addRelatedInfo(diagnostic_1, related) : diagnostic_1; + } + if (hasRestParameter || hasSpreadArgument) { + spanArray = ts.createNodeArray(args); + if (hasSpreadArgument && argCount) { + var nextArg = ts.elementAt(args, getSpreadArgumentIndex(args) + 1) || undefined; + spanArray = ts.createNodeArray(args.slice(max > argCount && nextArg ? args.indexOf(nextArg) : max)); + } + } + else { + spanArray = ts.createNodeArray(args.slice(max)); + } + spanArray.pos = ts.first(spanArray).pos; + spanArray.end = ts.last(spanArray).end; + if (spanArray.end === spanArray.pos) { + spanArray.end++; + } + var diagnostic = ts.createDiagnosticForNodeArray(ts.getSourceFileOfNode(node), spanArray, error, paramRange, argCount); + return related ? ts.addRelatedInfo(diagnostic, related) : diagnostic; } function getTypeArgumentArityError(node, signatures, typeArguments) { var argCount = typeArguments.length; @@ -50584,13 +50634,12 @@ var ts; var firstBase = baseTypes[0]; if (firstBase.flags & 2097152 /* Intersection */) { var types = firstBase.types; - var mixinCount = ts.countWhere(types, isMixinConstructorType); + var mixinFlags = findMixins(types); var i = 0; for (var _i = 0, _a = firstBase.types; _i < _a.length; _i++) { var intersectionMember = _a[_i]; - i++; // We want to ignore mixin ctors - if (mixinCount === 0 || mixinCount === types.length && i === 0 || !isMixinConstructorType(intersectionMember)) { + if (!mixinFlags[i]) { if (ts.getObjectFlags(intersectionMember) & (1 /* Class */ | 2 /* Interface */)) { if (intersectionMember.symbol === target) { return true; @@ -50600,6 +50649,7 @@ var ts; } } } + i++; } return false; } @@ -50643,7 +50693,7 @@ var ts; var diagnostic = error(node, (kind === 0 /* Call */ ? ts.Diagnostics.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures : ts.Diagnostics.Cannot_use_new_with_an_expression_whose_type_lacks_a_call_or_construct_signature), typeToString(apparentType)); - invocationErrorRecovery(apparentType, kind, relatedInformation ? addRelatedInfo(diagnostic, relatedInformation) : diagnostic); + invocationErrorRecovery(apparentType, kind, relatedInformation ? ts.addRelatedInfo(diagnostic, relatedInformation) : diagnostic); } function invocationErrorRecovery(apparentType, kind, diagnostic) { if (!apparentType.symbol) { @@ -50656,7 +50706,7 @@ var ts; var sigs = getSignaturesOfType(getTypeOfSymbol(getSymbolLinks(apparentType.symbol).target), kind); if (!sigs || !sigs.length) return; - addRelatedInfo(diagnostic, ts.createDiagnosticForNode(importNode, ts.Diagnostics.Type_originates_at_this_import_A_namespace_style_import_cannot_be_called_or_constructed_and_will_cause_a_failure_at_runtime_Consider_using_a_default_import_or_import_require_here_instead)); + ts.addRelatedInfo(diagnostic, ts.createDiagnosticForNode(importNode, ts.Diagnostics.Type_originates_at_this_import_A_namespace_style_import_cannot_be_called_or_constructed_and_will_cause_a_failure_at_runtime_Consider_using_a_default_import_or_import_require_here_instead)); } } function resolveTaggedTemplateExpression(node, candidatesOutArray, checkMode) { @@ -53886,7 +53936,7 @@ var ts; for (var _a = 0, signatures_6 = signatures; _a < signatures_6.length; _a++) { var signature = signatures_6[_a]; if (!isImplementationCompatibleWithOverload(bodySignature, signature)) { - addRelatedInfo(error(signature.declaration, ts.Diagnostics.This_overload_signature_is_not_compatible_with_its_implementation_signature), ts.createDiagnosticForNode(bodyDeclaration, ts.Diagnostics.The_implementation_signature_is_declared_here)); + ts.addRelatedInfo(error(signature.declaration, ts.Diagnostics.This_overload_signature_is_not_compatible_with_its_implementation_signature), ts.createDiagnosticForNode(bodyDeclaration, ts.Diagnostics.The_implementation_signature_is_declared_here)); break; } } @@ -58860,8 +58910,8 @@ var ts; else { // Otherwise issue top-level error since the files appear very identical in terms of what they contain var list = ts.arrayFrom(conflictingSymbols.keys()).join(", "); - diagnostics.add(addRelatedInfo(ts.createDiagnosticForNode(firstFile, ts.Diagnostics.Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0, list), ts.createDiagnosticForNode(secondFile, ts.Diagnostics.Conflicts_are_in_this_file))); - diagnostics.add(addRelatedInfo(ts.createDiagnosticForNode(secondFile, ts.Diagnostics.Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0, list), ts.createDiagnosticForNode(firstFile, ts.Diagnostics.Conflicts_are_in_this_file))); + diagnostics.add(ts.addRelatedInfo(ts.createDiagnosticForNode(firstFile, ts.Diagnostics.Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0, list), ts.createDiagnosticForNode(secondFile, ts.Diagnostics.Conflicts_are_in_this_file))); + diagnostics.add(ts.addRelatedInfo(ts.createDiagnosticForNode(secondFile, ts.Diagnostics.Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0, list), ts.createDiagnosticForNode(firstFile, ts.Diagnostics.Conflicts_are_in_this_file))); } }); amalgamatedDuplicates = undefined; @@ -59257,10 +59307,10 @@ var ts; var nonSimpleParameters = getNonSimpleParameters(node.parameters); if (ts.length(nonSimpleParameters)) { ts.forEach(nonSimpleParameters, function (parameter) { - addRelatedInfo(error(parameter, ts.Diagnostics.This_parameter_is_not_allowed_with_use_strict_directive), ts.createDiagnosticForNode(useStrictDirective_1, ts.Diagnostics.use_strict_directive_used_here)); + ts.addRelatedInfo(error(parameter, ts.Diagnostics.This_parameter_is_not_allowed_with_use_strict_directive), ts.createDiagnosticForNode(useStrictDirective_1, ts.Diagnostics.use_strict_directive_used_here)); }); var diagnostics_1 = nonSimpleParameters.map(function (parameter, index) { return (index === 0 ? ts.createDiagnosticForNode(parameter, ts.Diagnostics.Non_simple_parameter_declared_here) : ts.createDiagnosticForNode(parameter, ts.Diagnostics.and_here)); }); - addRelatedInfo.apply(void 0, [error(useStrictDirective_1, ts.Diagnostics.use_strict_directive_cannot_be_used_with_non_simple_parameter_list)].concat(diagnostics_1)); + ts.addRelatedInfo.apply(void 0, [error(useStrictDirective_1, ts.Diagnostics.use_strict_directive_cannot_be_used_with_non_simple_parameter_list)].concat(diagnostics_1)); return true; } } @@ -81242,12 +81292,28 @@ var ts; return result.diagnostics; } ts.getDeclarationDiagnostics = getDeclarationDiagnostics; + function hasInternalAnnotation(range, currentSourceFile) { + var comment = currentSourceFile.text.substring(range.pos, range.end); + return ts.stringContains(comment, "@internal"); + } function isInternalDeclaration(node, currentSourceFile) { var parseTreeNode = ts.getParseTreeNode(node); + if (parseTreeNode && parseTreeNode.kind === 151 /* Parameter */) { + var paramIdx = parseTreeNode.parent.parameters.indexOf(parseTreeNode); + var previousSibling = paramIdx > 0 ? parseTreeNode.parent.parameters[paramIdx - 1] : undefined; + var text = currentSourceFile.text; + var commentRanges = previousSibling + ? ts.concatenate( + // to handle + // ... parameters, /* @internal */ + // public param: string + ts.getTrailingCommentRanges(text, ts.skipTrivia(text, previousSibling.end + 1, /* stopAfterLineBreak */ false, /* stopAtComments */ true)), ts.getLeadingCommentRanges(text, node.pos)) + : ts.getTrailingCommentRanges(text, ts.skipTrivia(text, node.pos, /* stopAfterLineBreak */ false, /* stopAtComments */ true)); + return commentRanges && commentRanges.length && hasInternalAnnotation(ts.last(commentRanges), currentSourceFile); + } var leadingCommentRanges = parseTreeNode && ts.getLeadingCommentRangesOfNode(parseTreeNode, currentSourceFile); return !!ts.forEach(leadingCommentRanges, function (range) { - var comment = currentSourceFile.text.substring(range.pos, range.end); - return ts.stringContains(comment, "@internal"); + return hasInternalAnnotation(range, currentSourceFile); }); } ts.isInternalDeclaration = isInternalDeclaration; @@ -82104,7 +82170,7 @@ var ts; if (ctor) { var oldDiag_1 = getSymbolAccessibilityDiagnostic; parameterProperties = ts.compact(ts.flatMap(ctor.parameters, function (param) { - if (!ts.hasModifier(param, 92 /* ParameterPropertyModifier */)) + if (!ts.hasModifier(param, 92 /* ParameterPropertyModifier */) || shouldStripInternal(param)) return; getSymbolAccessibilityDiagnostic = ts.createGetSymbolAccessibilityDiagnosticForNode(param); if (param.name.kind === 72 /* Identifier */) { @@ -88161,11 +88227,18 @@ var ts; if (rootNames.length) { for (var _i = 0, resolvedProjectReferences_1 = resolvedProjectReferences; _i < resolvedProjectReferences_1.length; _i++) { var parsedRef = resolvedProjectReferences_1[_i]; - if (parsedRef) { - var out = parsedRef.commandLine.options.outFile || parsedRef.commandLine.options.out; - if (out) { - var dtsOutfile = ts.changeExtension(out, ".d.ts"); - processSourceFile(dtsOutfile, /*isDefaultLib*/ false, /*ignoreNoDefaultLib*/ false, /*packageId*/ undefined); + if (!parsedRef) + continue; + var out = parsedRef.commandLine.options.outFile || parsedRef.commandLine.options.out; + if (out) { + processSourceFile(ts.changeExtension(out, ".d.ts"), /*isDefaultLib*/ false, /*ignoreNoDefaultLib*/ false, /*packageId*/ undefined); + } + else if (ts.getEmitModuleKind(parsedRef.commandLine.options) === ts.ModuleKind.None) { + for (var _a = 0, _b = parsedRef.commandLine.fileNames; _a < _b.length; _a++) { + var fileName = _b[_a]; + if (!ts.fileExtensionIs(fileName, ".d.ts" /* Dts */) && ts.hasTSFileExtension(fileName)) { + processSourceFile(ts.getOutputDeclarationFileName(fileName, parsedRef.commandLine), /*isDefaultLib*/ false, /*ignoreNoDefaultLib*/ false, /*packageId*/ undefined); + } } } } @@ -88213,8 +88286,8 @@ var ts; // not part of the new program. if (oldProgram && host.onReleaseOldSourceFile) { var oldSourceFiles = oldProgram.getSourceFiles(); - for (var _a = 0, oldSourceFiles_1 = oldSourceFiles; _a < oldSourceFiles_1.length; _a++) { - var oldSourceFile = oldSourceFiles_1[_a]; + for (var _c = 0, oldSourceFiles_1 = oldSourceFiles; _c < oldSourceFiles_1.length; _c++) { + var oldSourceFile = oldSourceFiles_1[_c]; var newFile = getSourceFileByPath(oldSourceFile.resolvedPath); if (shouldCreateNewSourceFile || !newFile || // old file wasnt redirect but new file is @@ -93983,9 +94056,9 @@ var ts; updateOutputTimestamps(proj); return; } - var buildResult = status.type === UpToDateStatusType.OutOfDateWithPrepend ? - updateBundle(resolved) : // Fake that files have been built by manipulating prepend and existing output - buildSingleProject(resolved); // Actual build + var buildResult = needsBuild(status, resolved) ? + buildSingleProject(resolved) : // Actual build + updateBundle(resolved); // Fake that files have been built by manipulating prepend and existing output if (buildResult & BuildResultFlags.AnyErrors) return; var _a = getGlobalDependencyGraph(), referencingProjectsMap = _a.referencingProjectsMap, buildQueue = _a.buildQueue; @@ -94228,7 +94301,12 @@ var ts; return reportStatus(ts.Diagnostics.A_non_dry_build_would_update_timestamps_for_output_of_project_0, proj.options.configFilePath); } var priorNewestUpdateTime = updateOutputTimestampsWorker(proj, minimumDate, ts.Diagnostics.Updating_output_timestamps_of_project_0); - projectStatus.setValue(proj.options.configFilePath, { type: UpToDateStatusType.UpToDate, newestDeclarationFileContentChangedTime: priorNewestUpdateTime }); + var status = { + type: UpToDateStatusType.UpToDate, + newestDeclarationFileContentChangedTime: priorNewestUpdateTime, + oldestOutputFileName: getFirstProjectOutput(proj) + }; + projectStatus.setValue(proj.options.configFilePath, status); } function updateOutputTimestampsWorker(proj, priorNewestUpdateTime, verboseMessage, skipOutputs) { var outputs = getAllProjectOutputs(proj); @@ -94352,9 +94430,9 @@ var ts; // Do nothing continue; } - var buildResult = status.type === UpToDateStatusType.OutOfDateWithPrepend && !options.force ? - updateBundle(next) : // Fake that files have been built by manipulating prepend and existing output - buildSingleProject(next); // Actual build + var buildResult = needsBuild(status, next) ? + buildSingleProject(next) : // Actual build + updateBundle(next); // Fake that files have been built by manipulating prepend and existing output anyFailed = anyFailed || !!(buildResult & BuildResultFlags.AnyErrors); } reportErrorSummary(); @@ -94367,6 +94445,15 @@ var ts; readFileWithCache = savedReadFileWithCache; return anyFailed ? ts.ExitStatus.DiagnosticsPresent_OutputsSkipped : ts.ExitStatus.Success; } + function needsBuild(status, configFile) { + if (status.type !== UpToDateStatusType.OutOfDateWithPrepend || options.force) + return true; + var config = parseConfigFile(configFile); + return !config || + config.fileNames.length === 0 || + !!config.errors.length || + !ts.isIncrementalCompilation(config.options); + } function reportParseConfigFileDiagnostic(proj) { reportAndStoreErrors(proj, [configFileCache.getValue(proj)]); }