diff --git a/lib/tsc.js b/lib/tsc.js index c5c7fb69a5dee..25cb130021d8e 100644 --- a/lib/tsc.js +++ b/lib/tsc.js @@ -67,7 +67,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) { var ts; (function (ts) { ts.versionMajorMinor = "4.0"; - ts.version = ts.versionMajorMinor + ".1-rc"; + ts.version = "4.0.2"; var NativeCollections; (function (NativeCollections) { function tryGetNativeMap() { @@ -29791,51 +29791,46 @@ var ts; configFileSpecs: spec }; function getFileNames() { - var filesSpecs; - if (ts.hasProperty(raw, "files") && !isNullOrUndefined(raw.files)) { - if (ts.isArray(raw.files)) { - filesSpecs = raw.files; - var hasReferences = ts.hasProperty(raw, "references") && !isNullOrUndefined(raw.references); - var hasZeroOrNoReferences = !hasReferences || raw.references.length === 0; - var hasExtends = ts.hasProperty(raw, "extends"); - if (filesSpecs.length === 0 && hasZeroOrNoReferences && !hasExtends) { - if (sourceFile) { - var fileName = configFileName || "tsconfig.json"; - var diagnosticMessage = ts.Diagnostics.The_files_list_in_config_file_0_is_empty; - var nodeValue = ts.firstDefined(ts.getTsConfigPropArray(sourceFile, "files"), function (property) { return property.initializer; }); - var error = nodeValue - ? ts.createDiagnosticForNodeInSourceFile(sourceFile, nodeValue, diagnosticMessage, fileName) - : ts.createCompilerDiagnostic(diagnosticMessage, fileName); - errors.push(error); - } - else { - createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.The_files_list_in_config_file_0_is_empty, configFileName || "tsconfig.json"); - } + var referencesOfRaw = getPropFromRaw("references", function (element) { return typeof element === "object"; }, "object"); + if (ts.isArray(referencesOfRaw)) { + for (var _i = 0, referencesOfRaw_1 = referencesOfRaw; _i < referencesOfRaw_1.length; _i++) { + var ref = referencesOfRaw_1[_i]; + if (typeof ref.path !== "string") { + createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "reference.path", "string"); + } + else { + (projectReferences || (projectReferences = [])).push({ + path: ts.getNormalizedAbsolutePath(ref.path, basePath), + originalPath: ref.path, + prepend: ref.prepend, + circular: ref.circular + }); } - } - else { - createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "files", "Array"); - } - } - var includeSpecs; - if (ts.hasProperty(raw, "include") && !isNullOrUndefined(raw.include)) { - if (ts.isArray(raw.include)) { - includeSpecs = raw.include; - } - else { - createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "include", "Array"); } } - var excludeSpecs; - if (ts.hasProperty(raw, "exclude") && !isNullOrUndefined(raw.exclude)) { - if (ts.isArray(raw.exclude)) { - excludeSpecs = raw.exclude; - } - else { - createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "exclude", "Array"); + var filesSpecs = toPropValue(getSpecsFromRaw("files")); + if (filesSpecs) { + var hasZeroOrNoReferences = referencesOfRaw === "no-prop" || ts.isArray(referencesOfRaw) && referencesOfRaw.length === 0; + var hasExtends = ts.hasProperty(raw, "extends"); + if (filesSpecs.length === 0 && hasZeroOrNoReferences && !hasExtends) { + if (sourceFile) { + var fileName = configFileName || "tsconfig.json"; + var diagnosticMessage = ts.Diagnostics.The_files_list_in_config_file_0_is_empty; + var nodeValue = ts.firstDefined(ts.getTsConfigPropArray(sourceFile, "files"), function (property) { return property.initializer; }); + var error = nodeValue + ? ts.createDiagnosticForNodeInSourceFile(sourceFile, nodeValue, diagnosticMessage, fileName) + : ts.createCompilerDiagnostic(diagnosticMessage, fileName); + errors.push(error); + } + else { + createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.The_files_list_in_config_file_0_is_empty, configFileName || "tsconfig.json"); + } } } - else if (raw.compilerOptions) { + var includeSpecs = toPropValue(getSpecsFromRaw("include")); + var excludeOfRaw = getSpecsFromRaw("exclude"); + var excludeSpecs = toPropValue(excludeOfRaw); + if (excludeOfRaw === "no-prop" && raw.compilerOptions) { var outDir = raw.compilerOptions.outDir; var declarationDir = raw.compilerOptions.declarationDir; if (outDir || declarationDir) { @@ -29849,28 +29844,29 @@ var ts; if (shouldReportNoInputFiles(result, canJsonReportNoInputFiles(raw), resolutionStack)) { errors.push(getErrorForNoInputFiles(result.spec, configFileName)); } - if (ts.hasProperty(raw, "references") && !isNullOrUndefined(raw.references)) { - if (ts.isArray(raw.references)) { - for (var _i = 0, _a = raw.references; _i < _a.length; _i++) { - var ref = _a[_i]; - if (typeof ref.path !== "string") { - createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "reference.path", "string"); - } - else { - (projectReferences || (projectReferences = [])).push({ - path: ts.getNormalizedAbsolutePath(ref.path, basePath), - originalPath: ref.path, - prepend: ref.prepend, - circular: ref.circular - }); - } + return result; + } + function toPropValue(specResult) { + return ts.isArray(specResult) ? specResult : undefined; + } + function getSpecsFromRaw(prop) { + return getPropFromRaw(prop, ts.isString, "string"); + } + function getPropFromRaw(prop, validateElement, elementTypeName) { + if (ts.hasProperty(raw, prop) && !isNullOrUndefined(raw[prop])) { + if (ts.isArray(raw[prop])) { + var result = raw[prop]; + if (!sourceFile && !ts.every(result, validateElement)) { + errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, prop, elementTypeName)); } + return result; } else { - createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "references", "Array"); + createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, prop, "Array"); + return "not-array"; } } - return result; + return "no-prop"; } function createCompilerDiagnosticOnlyIfJson(message, arg0, arg1) { if (!sourceFile) { @@ -30216,7 +30212,15 @@ var ts; validatedExcludeSpecs = validateSpecs(excludeSpecs, errors, true, jsonSourceFile, "exclude"); } var wildcardDirectories = getWildcardDirectories(validatedIncludeSpecs, validatedExcludeSpecs, basePath, host.useCaseSensitiveFileNames); - var spec = { filesSpecs: filesSpecs, includeSpecs: includeSpecs, excludeSpecs: excludeSpecs, validatedIncludeSpecs: validatedIncludeSpecs, validatedExcludeSpecs: validatedExcludeSpecs, wildcardDirectories: wildcardDirectories }; + var spec = { + filesSpecs: filesSpecs, + includeSpecs: includeSpecs, + excludeSpecs: excludeSpecs, + validatedFilesSpec: ts.filter(filesSpecs, ts.isString), + validatedIncludeSpecs: validatedIncludeSpecs, + validatedExcludeSpecs: validatedExcludeSpecs, + wildcardDirectories: wildcardDirectories + }; return getFileNamesFromConfigSpecs(spec, basePath, options, host, extraFileExtensions); } function getFileNamesFromConfigSpecs(spec, basePath, options, host, extraFileExtensions) { @@ -30226,12 +30230,12 @@ var ts; var literalFileMap = new ts.Map(); var wildcardFileMap = new ts.Map(); var wildCardJsonFileMap = new ts.Map(); - var filesSpecs = spec.filesSpecs, validatedIncludeSpecs = spec.validatedIncludeSpecs, validatedExcludeSpecs = spec.validatedExcludeSpecs, wildcardDirectories = spec.wildcardDirectories; + var validatedFilesSpec = spec.validatedFilesSpec, validatedIncludeSpecs = spec.validatedIncludeSpecs, validatedExcludeSpecs = spec.validatedExcludeSpecs, wildcardDirectories = spec.wildcardDirectories; var supportedExtensions = ts.getSupportedExtensions(options, extraFileExtensions); var supportedExtensionsWithJsonIfResolveJsonModule = ts.getSuppoertedExtensionsWithJsonIfResolveJsonModule(options, supportedExtensions); - if (filesSpecs) { - for (var _i = 0, filesSpecs_1 = filesSpecs; _i < filesSpecs_1.length; _i++) { - var fileName = filesSpecs_1[_i]; + if (validatedFilesSpec) { + for (var _i = 0, validatedFilesSpec_1 = validatedFilesSpec; _i < validatedFilesSpec_1.length; _i++) { + var fileName = validatedFilesSpec_1[_i]; var file = ts.getNormalizedAbsolutePath(fileName, basePath); literalFileMap.set(keyMapper(file), file); } @@ -30278,14 +30282,14 @@ var ts; } ts.getFileNamesFromConfigSpecs = getFileNamesFromConfigSpecs; function isExcludedFile(pathToCheck, spec, basePath, useCaseSensitiveFileNames, currentDirectory) { - var filesSpecs = spec.filesSpecs, validatedIncludeSpecs = spec.validatedIncludeSpecs, validatedExcludeSpecs = spec.validatedExcludeSpecs; + var validatedFilesSpec = spec.validatedFilesSpec, validatedIncludeSpecs = spec.validatedIncludeSpecs, validatedExcludeSpecs = spec.validatedExcludeSpecs; if (!ts.length(validatedIncludeSpecs) || !ts.length(validatedExcludeSpecs)) return false; basePath = ts.normalizePath(basePath); var keyMapper = ts.createGetCanonicalFileName(useCaseSensitiveFileNames); - if (filesSpecs) { - for (var _i = 0, filesSpecs_2 = filesSpecs; _i < filesSpecs_2.length; _i++) { - var fileName = filesSpecs_2[_i]; + if (validatedFilesSpec) { + for (var _i = 0, validatedFilesSpec_2 = validatedFilesSpec; _i < validatedFilesSpec_2.length; _i++) { + var fileName = validatedFilesSpec_2[_i]; if (keyMapper(ts.getNormalizedAbsolutePath(fileName, basePath)) === pathToCheck) return false; } @@ -30301,6 +30305,8 @@ var ts; ts.isExcludedFile = isExcludedFile; function validateSpecs(specs, errors, allowTrailingRecursion, jsonSourceFile, specKey) { return specs.filter(function (spec) { + if (!ts.isString(spec)) + return false; var diag = specToDiagnostic(spec, allowTrailingRecursion); if (diag !== undefined) { errors.push(createDiagnostic(diag, spec)); diff --git a/lib/tsserver.js b/lib/tsserver.js index 902b4d81f13fd..026d04465c806 100644 --- a/lib/tsserver.js +++ b/lib/tsserver.js @@ -94,7 +94,7 @@ var ts; // If changing the text in this section, be sure to test `configurePrerelease` too. ts.versionMajorMinor = "4.0"; /** The version of the TypeScript compiler release */ - ts.version = ts.versionMajorMinor + ".1-rc"; + ts.version = "4.0.2"; /* @internal */ var Comparison; (function (Comparison) { @@ -36687,51 +36687,46 @@ var ts; configFileSpecs: spec }; function getFileNames() { - var filesSpecs; - if (ts.hasProperty(raw, "files") && !isNullOrUndefined(raw.files)) { - if (ts.isArray(raw.files)) { - filesSpecs = raw.files; - var hasReferences = ts.hasProperty(raw, "references") && !isNullOrUndefined(raw.references); - var hasZeroOrNoReferences = !hasReferences || raw.references.length === 0; - var hasExtends = ts.hasProperty(raw, "extends"); - if (filesSpecs.length === 0 && hasZeroOrNoReferences && !hasExtends) { - if (sourceFile) { - var fileName = configFileName || "tsconfig.json"; - var diagnosticMessage = ts.Diagnostics.The_files_list_in_config_file_0_is_empty; - var nodeValue = ts.firstDefined(ts.getTsConfigPropArray(sourceFile, "files"), function (property) { return property.initializer; }); - var error = nodeValue - ? ts.createDiagnosticForNodeInSourceFile(sourceFile, nodeValue, diagnosticMessage, fileName) - : ts.createCompilerDiagnostic(diagnosticMessage, fileName); - errors.push(error); - } - else { - createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.The_files_list_in_config_file_0_is_empty, configFileName || "tsconfig.json"); - } + var referencesOfRaw = getPropFromRaw("references", function (element) { return typeof element === "object"; }, "object"); + if (ts.isArray(referencesOfRaw)) { + for (var _i = 0, referencesOfRaw_1 = referencesOfRaw; _i < referencesOfRaw_1.length; _i++) { + var ref = referencesOfRaw_1[_i]; + if (typeof ref.path !== "string") { + createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "reference.path", "string"); + } + else { + (projectReferences || (projectReferences = [])).push({ + path: ts.getNormalizedAbsolutePath(ref.path, basePath), + originalPath: ref.path, + prepend: ref.prepend, + circular: ref.circular + }); } - } - else { - createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "files", "Array"); - } - } - var includeSpecs; - if (ts.hasProperty(raw, "include") && !isNullOrUndefined(raw.include)) { - if (ts.isArray(raw.include)) { - includeSpecs = raw.include; - } - else { - createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "include", "Array"); } } - var excludeSpecs; - if (ts.hasProperty(raw, "exclude") && !isNullOrUndefined(raw.exclude)) { - if (ts.isArray(raw.exclude)) { - excludeSpecs = raw.exclude; - } - else { - createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "exclude", "Array"); + var filesSpecs = toPropValue(getSpecsFromRaw("files")); + if (filesSpecs) { + var hasZeroOrNoReferences = referencesOfRaw === "no-prop" || ts.isArray(referencesOfRaw) && referencesOfRaw.length === 0; + var hasExtends = ts.hasProperty(raw, "extends"); + if (filesSpecs.length === 0 && hasZeroOrNoReferences && !hasExtends) { + if (sourceFile) { + var fileName = configFileName || "tsconfig.json"; + var diagnosticMessage = ts.Diagnostics.The_files_list_in_config_file_0_is_empty; + var nodeValue = ts.firstDefined(ts.getTsConfigPropArray(sourceFile, "files"), function (property) { return property.initializer; }); + var error = nodeValue + ? ts.createDiagnosticForNodeInSourceFile(sourceFile, nodeValue, diagnosticMessage, fileName) + : ts.createCompilerDiagnostic(diagnosticMessage, fileName); + errors.push(error); + } + else { + createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.The_files_list_in_config_file_0_is_empty, configFileName || "tsconfig.json"); + } } } - else if (raw.compilerOptions) { + var includeSpecs = toPropValue(getSpecsFromRaw("include")); + var excludeOfRaw = getSpecsFromRaw("exclude"); + var excludeSpecs = toPropValue(excludeOfRaw); + if (excludeOfRaw === "no-prop" && raw.compilerOptions) { var outDir = raw.compilerOptions.outDir; var declarationDir = raw.compilerOptions.declarationDir; if (outDir || declarationDir) { @@ -36745,28 +36740,29 @@ var ts; if (shouldReportNoInputFiles(result, canJsonReportNoInputFiles(raw), resolutionStack)) { errors.push(getErrorForNoInputFiles(result.spec, configFileName)); } - if (ts.hasProperty(raw, "references") && !isNullOrUndefined(raw.references)) { - if (ts.isArray(raw.references)) { - for (var _i = 0, _a = raw.references; _i < _a.length; _i++) { - var ref = _a[_i]; - if (typeof ref.path !== "string") { - createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "reference.path", "string"); - } - else { - (projectReferences || (projectReferences = [])).push({ - path: ts.getNormalizedAbsolutePath(ref.path, basePath), - originalPath: ref.path, - prepend: ref.prepend, - circular: ref.circular - }); - } + return result; + } + function toPropValue(specResult) { + return ts.isArray(specResult) ? specResult : undefined; + } + function getSpecsFromRaw(prop) { + return getPropFromRaw(prop, ts.isString, "string"); + } + function getPropFromRaw(prop, validateElement, elementTypeName) { + if (ts.hasProperty(raw, prop) && !isNullOrUndefined(raw[prop])) { + if (ts.isArray(raw[prop])) { + var result = raw[prop]; + if (!sourceFile && !ts.every(result, validateElement)) { + errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, prop, elementTypeName)); } + return result; } else { - createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "references", "Array"); + createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, prop, "Array"); + return "not-array"; } } - return result; + return "no-prop"; } function createCompilerDiagnosticOnlyIfJson(message, arg0, arg1) { if (!sourceFile) { @@ -37191,7 +37187,15 @@ var ts; // or a recursive directory. This information is used by filesystem watchers to monitor for // new entries in these paths. var wildcardDirectories = getWildcardDirectories(validatedIncludeSpecs, validatedExcludeSpecs, basePath, host.useCaseSensitiveFileNames); - var spec = { filesSpecs: filesSpecs, includeSpecs: includeSpecs, excludeSpecs: excludeSpecs, validatedIncludeSpecs: validatedIncludeSpecs, validatedExcludeSpecs: validatedExcludeSpecs, wildcardDirectories: wildcardDirectories }; + var spec = { + filesSpecs: filesSpecs, + includeSpecs: includeSpecs, + excludeSpecs: excludeSpecs, + validatedFilesSpec: ts.filter(filesSpecs, ts.isString), + validatedIncludeSpecs: validatedIncludeSpecs, + validatedExcludeSpecs: validatedExcludeSpecs, + wildcardDirectories: wildcardDirectories + }; return getFileNamesFromConfigSpecs(spec, basePath, options, host, extraFileExtensions); } /** @@ -37220,16 +37224,16 @@ var ts; // file map with a possibly case insensitive key. We use this map to store paths matched // via wildcard of *.json kind var wildCardJsonFileMap = new ts.Map(); - var filesSpecs = spec.filesSpecs, validatedIncludeSpecs = spec.validatedIncludeSpecs, validatedExcludeSpecs = spec.validatedExcludeSpecs, wildcardDirectories = spec.wildcardDirectories; + var validatedFilesSpec = spec.validatedFilesSpec, validatedIncludeSpecs = spec.validatedIncludeSpecs, validatedExcludeSpecs = spec.validatedExcludeSpecs, wildcardDirectories = spec.wildcardDirectories; // Rather than requery this for each file and filespec, we query the supported extensions // once and store it on the expansion context. var supportedExtensions = ts.getSupportedExtensions(options, extraFileExtensions); var supportedExtensionsWithJsonIfResolveJsonModule = ts.getSuppoertedExtensionsWithJsonIfResolveJsonModule(options, supportedExtensions); // Literal files are always included verbatim. An "include" or "exclude" specification cannot // remove a literal file. - if (filesSpecs) { - for (var _i = 0, filesSpecs_1 = filesSpecs; _i < filesSpecs_1.length; _i++) { - var fileName = filesSpecs_1[_i]; + if (validatedFilesSpec) { + for (var _i = 0, validatedFilesSpec_1 = validatedFilesSpec; _i < validatedFilesSpec_1.length; _i++) { + var fileName = validatedFilesSpec_1[_i]; var file = ts.getNormalizedAbsolutePath(fileName, basePath); literalFileMap.set(keyMapper(file), file); } @@ -37288,14 +37292,14 @@ var ts; ts.getFileNamesFromConfigSpecs = getFileNamesFromConfigSpecs; /* @internal */ function isExcludedFile(pathToCheck, spec, basePath, useCaseSensitiveFileNames, currentDirectory) { - var filesSpecs = spec.filesSpecs, validatedIncludeSpecs = spec.validatedIncludeSpecs, validatedExcludeSpecs = spec.validatedExcludeSpecs; + var validatedFilesSpec = spec.validatedFilesSpec, validatedIncludeSpecs = spec.validatedIncludeSpecs, validatedExcludeSpecs = spec.validatedExcludeSpecs; if (!ts.length(validatedIncludeSpecs) || !ts.length(validatedExcludeSpecs)) return false; basePath = ts.normalizePath(basePath); var keyMapper = ts.createGetCanonicalFileName(useCaseSensitiveFileNames); - if (filesSpecs) { - for (var _i = 0, filesSpecs_2 = filesSpecs; _i < filesSpecs_2.length; _i++) { - var fileName = filesSpecs_2[_i]; + if (validatedFilesSpec) { + for (var _i = 0, validatedFilesSpec_2 = validatedFilesSpec; _i < validatedFilesSpec_2.length; _i++) { + var fileName = validatedFilesSpec_2[_i]; if (keyMapper(ts.getNormalizedAbsolutePath(fileName, basePath)) === pathToCheck) return false; } @@ -37311,6 +37315,8 @@ var ts; ts.isExcludedFile = isExcludedFile; function validateSpecs(specs, errors, allowTrailingRecursion, jsonSourceFile, specKey) { return specs.filter(function (spec) { + if (!ts.isString(spec)) + return false; var diag = specToDiagnostic(spec, allowTrailingRecursion); if (diag !== undefined) { errors.push(createDiagnostic(diag, spec)); @@ -143502,7 +143508,7 @@ var ts; kind: "" /* unknown */, kindModifiers: "" /* none */, textSpan: ts.createTextSpanFromNode(nodeForQuickInfo, sourceFile), - displayParts: typeChecker.runWithCancellationToken(cancellationToken, function (typeChecker) { return ts.typeToDisplayParts(typeChecker, type_2, ts.getContainerNode(nodeForQuickInfo)); }), + displayParts: prefixWithApproximation(typeChecker.runWithCancellationToken(cancellationToken, function (typeChecker) { return ts.typeToDisplayParts(typeChecker, type_2, ts.getContainerNode(nodeForQuickInfo)); })), documentation: type_2.symbol ? type_2.symbol.getDocumentationComment(typeChecker) : undefined, tags: type_2.symbol ? type_2.symbol.getJsDocTags() : undefined }; @@ -143514,7 +143520,7 @@ var ts; kind: symbolKind, kindModifiers: ts.SymbolDisplay.getSymbolModifiers(symbol), textSpan: ts.createTextSpanFromNode(nodeForQuickInfo, sourceFile), - displayParts: displayParts, + displayParts: prefixWithApproximation(displayParts), documentation: documentation, tags: tags, }; @@ -143541,6 +143547,12 @@ var ts; return false; } } + function prefixWithApproximation(displayParts) { + if (languageServiceMode === ts.LanguageServiceMode.Semantic) { + return displayParts; + } + return __spreadArrays([ts.textPart("(approximation)"), ts.spacePart()], displayParts); + } /// Goto definition function getDefinitionAtPosition(fileName, position) { synchronizeHostData(); diff --git a/lib/tsserverlibrary.js b/lib/tsserverlibrary.js index 37a8057370d80..12db5555690fd 100644 --- a/lib/tsserverlibrary.js +++ b/lib/tsserverlibrary.js @@ -288,7 +288,7 @@ var ts; // If changing the text in this section, be sure to test `configurePrerelease` too. ts.versionMajorMinor = "4.0"; /** The version of the TypeScript compiler release */ - ts.version = ts.versionMajorMinor + ".1-rc"; + ts.version = "4.0.2"; /* @internal */ var Comparison; (function (Comparison) { @@ -36881,51 +36881,46 @@ var ts; configFileSpecs: spec }; function getFileNames() { - var filesSpecs; - if (ts.hasProperty(raw, "files") && !isNullOrUndefined(raw.files)) { - if (ts.isArray(raw.files)) { - filesSpecs = raw.files; - var hasReferences = ts.hasProperty(raw, "references") && !isNullOrUndefined(raw.references); - var hasZeroOrNoReferences = !hasReferences || raw.references.length === 0; - var hasExtends = ts.hasProperty(raw, "extends"); - if (filesSpecs.length === 0 && hasZeroOrNoReferences && !hasExtends) { - if (sourceFile) { - var fileName = configFileName || "tsconfig.json"; - var diagnosticMessage = ts.Diagnostics.The_files_list_in_config_file_0_is_empty; - var nodeValue = ts.firstDefined(ts.getTsConfigPropArray(sourceFile, "files"), function (property) { return property.initializer; }); - var error = nodeValue - ? ts.createDiagnosticForNodeInSourceFile(sourceFile, nodeValue, diagnosticMessage, fileName) - : ts.createCompilerDiagnostic(diagnosticMessage, fileName); - errors.push(error); - } - else { - createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.The_files_list_in_config_file_0_is_empty, configFileName || "tsconfig.json"); - } + var referencesOfRaw = getPropFromRaw("references", function (element) { return typeof element === "object"; }, "object"); + if (ts.isArray(referencesOfRaw)) { + for (var _i = 0, referencesOfRaw_1 = referencesOfRaw; _i < referencesOfRaw_1.length; _i++) { + var ref = referencesOfRaw_1[_i]; + if (typeof ref.path !== "string") { + createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "reference.path", "string"); + } + else { + (projectReferences || (projectReferences = [])).push({ + path: ts.getNormalizedAbsolutePath(ref.path, basePath), + originalPath: ref.path, + prepend: ref.prepend, + circular: ref.circular + }); } - } - else { - createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "files", "Array"); - } - } - var includeSpecs; - if (ts.hasProperty(raw, "include") && !isNullOrUndefined(raw.include)) { - if (ts.isArray(raw.include)) { - includeSpecs = raw.include; - } - else { - createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "include", "Array"); } } - var excludeSpecs; - if (ts.hasProperty(raw, "exclude") && !isNullOrUndefined(raw.exclude)) { - if (ts.isArray(raw.exclude)) { - excludeSpecs = raw.exclude; - } - else { - createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "exclude", "Array"); + var filesSpecs = toPropValue(getSpecsFromRaw("files")); + if (filesSpecs) { + var hasZeroOrNoReferences = referencesOfRaw === "no-prop" || ts.isArray(referencesOfRaw) && referencesOfRaw.length === 0; + var hasExtends = ts.hasProperty(raw, "extends"); + if (filesSpecs.length === 0 && hasZeroOrNoReferences && !hasExtends) { + if (sourceFile) { + var fileName = configFileName || "tsconfig.json"; + var diagnosticMessage = ts.Diagnostics.The_files_list_in_config_file_0_is_empty; + var nodeValue = ts.firstDefined(ts.getTsConfigPropArray(sourceFile, "files"), function (property) { return property.initializer; }); + var error = nodeValue + ? ts.createDiagnosticForNodeInSourceFile(sourceFile, nodeValue, diagnosticMessage, fileName) + : ts.createCompilerDiagnostic(diagnosticMessage, fileName); + errors.push(error); + } + else { + createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.The_files_list_in_config_file_0_is_empty, configFileName || "tsconfig.json"); + } } } - else if (raw.compilerOptions) { + var includeSpecs = toPropValue(getSpecsFromRaw("include")); + var excludeOfRaw = getSpecsFromRaw("exclude"); + var excludeSpecs = toPropValue(excludeOfRaw); + if (excludeOfRaw === "no-prop" && raw.compilerOptions) { var outDir = raw.compilerOptions.outDir; var declarationDir = raw.compilerOptions.declarationDir; if (outDir || declarationDir) { @@ -36939,28 +36934,29 @@ var ts; if (shouldReportNoInputFiles(result, canJsonReportNoInputFiles(raw), resolutionStack)) { errors.push(getErrorForNoInputFiles(result.spec, configFileName)); } - if (ts.hasProperty(raw, "references") && !isNullOrUndefined(raw.references)) { - if (ts.isArray(raw.references)) { - for (var _i = 0, _a = raw.references; _i < _a.length; _i++) { - var ref = _a[_i]; - if (typeof ref.path !== "string") { - createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "reference.path", "string"); - } - else { - (projectReferences || (projectReferences = [])).push({ - path: ts.getNormalizedAbsolutePath(ref.path, basePath), - originalPath: ref.path, - prepend: ref.prepend, - circular: ref.circular - }); - } + return result; + } + function toPropValue(specResult) { + return ts.isArray(specResult) ? specResult : undefined; + } + function getSpecsFromRaw(prop) { + return getPropFromRaw(prop, ts.isString, "string"); + } + function getPropFromRaw(prop, validateElement, elementTypeName) { + if (ts.hasProperty(raw, prop) && !isNullOrUndefined(raw[prop])) { + if (ts.isArray(raw[prop])) { + var result = raw[prop]; + if (!sourceFile && !ts.every(result, validateElement)) { + errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, prop, elementTypeName)); } + return result; } else { - createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "references", "Array"); + createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, prop, "Array"); + return "not-array"; } } - return result; + return "no-prop"; } function createCompilerDiagnosticOnlyIfJson(message, arg0, arg1) { if (!sourceFile) { @@ -37385,7 +37381,15 @@ var ts; // or a recursive directory. This information is used by filesystem watchers to monitor for // new entries in these paths. var wildcardDirectories = getWildcardDirectories(validatedIncludeSpecs, validatedExcludeSpecs, basePath, host.useCaseSensitiveFileNames); - var spec = { filesSpecs: filesSpecs, includeSpecs: includeSpecs, excludeSpecs: excludeSpecs, validatedIncludeSpecs: validatedIncludeSpecs, validatedExcludeSpecs: validatedExcludeSpecs, wildcardDirectories: wildcardDirectories }; + var spec = { + filesSpecs: filesSpecs, + includeSpecs: includeSpecs, + excludeSpecs: excludeSpecs, + validatedFilesSpec: ts.filter(filesSpecs, ts.isString), + validatedIncludeSpecs: validatedIncludeSpecs, + validatedExcludeSpecs: validatedExcludeSpecs, + wildcardDirectories: wildcardDirectories + }; return getFileNamesFromConfigSpecs(spec, basePath, options, host, extraFileExtensions); } /** @@ -37414,16 +37418,16 @@ var ts; // file map with a possibly case insensitive key. We use this map to store paths matched // via wildcard of *.json kind var wildCardJsonFileMap = new ts.Map(); - var filesSpecs = spec.filesSpecs, validatedIncludeSpecs = spec.validatedIncludeSpecs, validatedExcludeSpecs = spec.validatedExcludeSpecs, wildcardDirectories = spec.wildcardDirectories; + var validatedFilesSpec = spec.validatedFilesSpec, validatedIncludeSpecs = spec.validatedIncludeSpecs, validatedExcludeSpecs = spec.validatedExcludeSpecs, wildcardDirectories = spec.wildcardDirectories; // Rather than requery this for each file and filespec, we query the supported extensions // once and store it on the expansion context. var supportedExtensions = ts.getSupportedExtensions(options, extraFileExtensions); var supportedExtensionsWithJsonIfResolveJsonModule = ts.getSuppoertedExtensionsWithJsonIfResolveJsonModule(options, supportedExtensions); // Literal files are always included verbatim. An "include" or "exclude" specification cannot // remove a literal file. - if (filesSpecs) { - for (var _i = 0, filesSpecs_1 = filesSpecs; _i < filesSpecs_1.length; _i++) { - var fileName = filesSpecs_1[_i]; + if (validatedFilesSpec) { + for (var _i = 0, validatedFilesSpec_1 = validatedFilesSpec; _i < validatedFilesSpec_1.length; _i++) { + var fileName = validatedFilesSpec_1[_i]; var file = ts.getNormalizedAbsolutePath(fileName, basePath); literalFileMap.set(keyMapper(file), file); } @@ -37482,14 +37486,14 @@ var ts; ts.getFileNamesFromConfigSpecs = getFileNamesFromConfigSpecs; /* @internal */ function isExcludedFile(pathToCheck, spec, basePath, useCaseSensitiveFileNames, currentDirectory) { - var filesSpecs = spec.filesSpecs, validatedIncludeSpecs = spec.validatedIncludeSpecs, validatedExcludeSpecs = spec.validatedExcludeSpecs; + var validatedFilesSpec = spec.validatedFilesSpec, validatedIncludeSpecs = spec.validatedIncludeSpecs, validatedExcludeSpecs = spec.validatedExcludeSpecs; if (!ts.length(validatedIncludeSpecs) || !ts.length(validatedExcludeSpecs)) return false; basePath = ts.normalizePath(basePath); var keyMapper = ts.createGetCanonicalFileName(useCaseSensitiveFileNames); - if (filesSpecs) { - for (var _i = 0, filesSpecs_2 = filesSpecs; _i < filesSpecs_2.length; _i++) { - var fileName = filesSpecs_2[_i]; + if (validatedFilesSpec) { + for (var _i = 0, validatedFilesSpec_2 = validatedFilesSpec; _i < validatedFilesSpec_2.length; _i++) { + var fileName = validatedFilesSpec_2[_i]; if (keyMapper(ts.getNormalizedAbsolutePath(fileName, basePath)) === pathToCheck) return false; } @@ -37505,6 +37509,8 @@ var ts; ts.isExcludedFile = isExcludedFile; function validateSpecs(specs, errors, allowTrailingRecursion, jsonSourceFile, specKey) { return specs.filter(function (spec) { + if (!ts.isString(spec)) + return false; var diag = specToDiagnostic(spec, allowTrailingRecursion); if (diag !== undefined) { errors.push(createDiagnostic(diag, spec)); @@ -144069,7 +144075,7 @@ var ts; kind: "" /* unknown */, kindModifiers: "" /* none */, textSpan: ts.createTextSpanFromNode(nodeForQuickInfo, sourceFile), - displayParts: typeChecker.runWithCancellationToken(cancellationToken, function (typeChecker) { return ts.typeToDisplayParts(typeChecker, type_2, ts.getContainerNode(nodeForQuickInfo)); }), + displayParts: prefixWithApproximation(typeChecker.runWithCancellationToken(cancellationToken, function (typeChecker) { return ts.typeToDisplayParts(typeChecker, type_2, ts.getContainerNode(nodeForQuickInfo)); })), documentation: type_2.symbol ? type_2.symbol.getDocumentationComment(typeChecker) : undefined, tags: type_2.symbol ? type_2.symbol.getJsDocTags() : undefined }; @@ -144081,7 +144087,7 @@ var ts; kind: symbolKind, kindModifiers: ts.SymbolDisplay.getSymbolModifiers(symbol), textSpan: ts.createTextSpanFromNode(nodeForQuickInfo, sourceFile), - displayParts: displayParts, + displayParts: prefixWithApproximation(displayParts), documentation: documentation, tags: tags, }; @@ -144108,6 +144114,12 @@ var ts; return false; } } + function prefixWithApproximation(displayParts) { + if (languageServiceMode === ts.LanguageServiceMode.Semantic) { + return displayParts; + } + return __spreadArrays([ts.textPart("(approximation)"), ts.spacePart()], displayParts); + } /// Goto definition function getDefinitionAtPosition(fileName, position) { synchronizeHostData(); diff --git a/lib/typescript.js b/lib/typescript.js index a585fc53bfb0a..b89b9f236c1f2 100644 --- a/lib/typescript.js +++ b/lib/typescript.js @@ -288,7 +288,7 @@ var ts; // If changing the text in this section, be sure to test `configurePrerelease` too. ts.versionMajorMinor = "4.0"; /** The version of the TypeScript compiler release */ - ts.version = ts.versionMajorMinor + ".1-rc"; + ts.version = "4.0.2"; /* @internal */ var Comparison; (function (Comparison) { @@ -36881,51 +36881,46 @@ var ts; configFileSpecs: spec }; function getFileNames() { - var filesSpecs; - if (ts.hasProperty(raw, "files") && !isNullOrUndefined(raw.files)) { - if (ts.isArray(raw.files)) { - filesSpecs = raw.files; - var hasReferences = ts.hasProperty(raw, "references") && !isNullOrUndefined(raw.references); - var hasZeroOrNoReferences = !hasReferences || raw.references.length === 0; - var hasExtends = ts.hasProperty(raw, "extends"); - if (filesSpecs.length === 0 && hasZeroOrNoReferences && !hasExtends) { - if (sourceFile) { - var fileName = configFileName || "tsconfig.json"; - var diagnosticMessage = ts.Diagnostics.The_files_list_in_config_file_0_is_empty; - var nodeValue = ts.firstDefined(ts.getTsConfigPropArray(sourceFile, "files"), function (property) { return property.initializer; }); - var error = nodeValue - ? ts.createDiagnosticForNodeInSourceFile(sourceFile, nodeValue, diagnosticMessage, fileName) - : ts.createCompilerDiagnostic(diagnosticMessage, fileName); - errors.push(error); - } - else { - createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.The_files_list_in_config_file_0_is_empty, configFileName || "tsconfig.json"); - } + var referencesOfRaw = getPropFromRaw("references", function (element) { return typeof element === "object"; }, "object"); + if (ts.isArray(referencesOfRaw)) { + for (var _i = 0, referencesOfRaw_1 = referencesOfRaw; _i < referencesOfRaw_1.length; _i++) { + var ref = referencesOfRaw_1[_i]; + if (typeof ref.path !== "string") { + createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "reference.path", "string"); + } + else { + (projectReferences || (projectReferences = [])).push({ + path: ts.getNormalizedAbsolutePath(ref.path, basePath), + originalPath: ref.path, + prepend: ref.prepend, + circular: ref.circular + }); } - } - else { - createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "files", "Array"); - } - } - var includeSpecs; - if (ts.hasProperty(raw, "include") && !isNullOrUndefined(raw.include)) { - if (ts.isArray(raw.include)) { - includeSpecs = raw.include; - } - else { - createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "include", "Array"); } } - var excludeSpecs; - if (ts.hasProperty(raw, "exclude") && !isNullOrUndefined(raw.exclude)) { - if (ts.isArray(raw.exclude)) { - excludeSpecs = raw.exclude; - } - else { - createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "exclude", "Array"); + var filesSpecs = toPropValue(getSpecsFromRaw("files")); + if (filesSpecs) { + var hasZeroOrNoReferences = referencesOfRaw === "no-prop" || ts.isArray(referencesOfRaw) && referencesOfRaw.length === 0; + var hasExtends = ts.hasProperty(raw, "extends"); + if (filesSpecs.length === 0 && hasZeroOrNoReferences && !hasExtends) { + if (sourceFile) { + var fileName = configFileName || "tsconfig.json"; + var diagnosticMessage = ts.Diagnostics.The_files_list_in_config_file_0_is_empty; + var nodeValue = ts.firstDefined(ts.getTsConfigPropArray(sourceFile, "files"), function (property) { return property.initializer; }); + var error = nodeValue + ? ts.createDiagnosticForNodeInSourceFile(sourceFile, nodeValue, diagnosticMessage, fileName) + : ts.createCompilerDiagnostic(diagnosticMessage, fileName); + errors.push(error); + } + else { + createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.The_files_list_in_config_file_0_is_empty, configFileName || "tsconfig.json"); + } } } - else if (raw.compilerOptions) { + var includeSpecs = toPropValue(getSpecsFromRaw("include")); + var excludeOfRaw = getSpecsFromRaw("exclude"); + var excludeSpecs = toPropValue(excludeOfRaw); + if (excludeOfRaw === "no-prop" && raw.compilerOptions) { var outDir = raw.compilerOptions.outDir; var declarationDir = raw.compilerOptions.declarationDir; if (outDir || declarationDir) { @@ -36939,28 +36934,29 @@ var ts; if (shouldReportNoInputFiles(result, canJsonReportNoInputFiles(raw), resolutionStack)) { errors.push(getErrorForNoInputFiles(result.spec, configFileName)); } - if (ts.hasProperty(raw, "references") && !isNullOrUndefined(raw.references)) { - if (ts.isArray(raw.references)) { - for (var _i = 0, _a = raw.references; _i < _a.length; _i++) { - var ref = _a[_i]; - if (typeof ref.path !== "string") { - createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "reference.path", "string"); - } - else { - (projectReferences || (projectReferences = [])).push({ - path: ts.getNormalizedAbsolutePath(ref.path, basePath), - originalPath: ref.path, - prepend: ref.prepend, - circular: ref.circular - }); - } + return result; + } + function toPropValue(specResult) { + return ts.isArray(specResult) ? specResult : undefined; + } + function getSpecsFromRaw(prop) { + return getPropFromRaw(prop, ts.isString, "string"); + } + function getPropFromRaw(prop, validateElement, elementTypeName) { + if (ts.hasProperty(raw, prop) && !isNullOrUndefined(raw[prop])) { + if (ts.isArray(raw[prop])) { + var result = raw[prop]; + if (!sourceFile && !ts.every(result, validateElement)) { + errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, prop, elementTypeName)); } + return result; } else { - createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "references", "Array"); + createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, prop, "Array"); + return "not-array"; } } - return result; + return "no-prop"; } function createCompilerDiagnosticOnlyIfJson(message, arg0, arg1) { if (!sourceFile) { @@ -37385,7 +37381,15 @@ var ts; // or a recursive directory. This information is used by filesystem watchers to monitor for // new entries in these paths. var wildcardDirectories = getWildcardDirectories(validatedIncludeSpecs, validatedExcludeSpecs, basePath, host.useCaseSensitiveFileNames); - var spec = { filesSpecs: filesSpecs, includeSpecs: includeSpecs, excludeSpecs: excludeSpecs, validatedIncludeSpecs: validatedIncludeSpecs, validatedExcludeSpecs: validatedExcludeSpecs, wildcardDirectories: wildcardDirectories }; + var spec = { + filesSpecs: filesSpecs, + includeSpecs: includeSpecs, + excludeSpecs: excludeSpecs, + validatedFilesSpec: ts.filter(filesSpecs, ts.isString), + validatedIncludeSpecs: validatedIncludeSpecs, + validatedExcludeSpecs: validatedExcludeSpecs, + wildcardDirectories: wildcardDirectories + }; return getFileNamesFromConfigSpecs(spec, basePath, options, host, extraFileExtensions); } /** @@ -37414,16 +37418,16 @@ var ts; // file map with a possibly case insensitive key. We use this map to store paths matched // via wildcard of *.json kind var wildCardJsonFileMap = new ts.Map(); - var filesSpecs = spec.filesSpecs, validatedIncludeSpecs = spec.validatedIncludeSpecs, validatedExcludeSpecs = spec.validatedExcludeSpecs, wildcardDirectories = spec.wildcardDirectories; + var validatedFilesSpec = spec.validatedFilesSpec, validatedIncludeSpecs = spec.validatedIncludeSpecs, validatedExcludeSpecs = spec.validatedExcludeSpecs, wildcardDirectories = spec.wildcardDirectories; // Rather than requery this for each file and filespec, we query the supported extensions // once and store it on the expansion context. var supportedExtensions = ts.getSupportedExtensions(options, extraFileExtensions); var supportedExtensionsWithJsonIfResolveJsonModule = ts.getSuppoertedExtensionsWithJsonIfResolveJsonModule(options, supportedExtensions); // Literal files are always included verbatim. An "include" or "exclude" specification cannot // remove a literal file. - if (filesSpecs) { - for (var _i = 0, filesSpecs_1 = filesSpecs; _i < filesSpecs_1.length; _i++) { - var fileName = filesSpecs_1[_i]; + if (validatedFilesSpec) { + for (var _i = 0, validatedFilesSpec_1 = validatedFilesSpec; _i < validatedFilesSpec_1.length; _i++) { + var fileName = validatedFilesSpec_1[_i]; var file = ts.getNormalizedAbsolutePath(fileName, basePath); literalFileMap.set(keyMapper(file), file); } @@ -37482,14 +37486,14 @@ var ts; ts.getFileNamesFromConfigSpecs = getFileNamesFromConfigSpecs; /* @internal */ function isExcludedFile(pathToCheck, spec, basePath, useCaseSensitiveFileNames, currentDirectory) { - var filesSpecs = spec.filesSpecs, validatedIncludeSpecs = spec.validatedIncludeSpecs, validatedExcludeSpecs = spec.validatedExcludeSpecs; + var validatedFilesSpec = spec.validatedFilesSpec, validatedIncludeSpecs = spec.validatedIncludeSpecs, validatedExcludeSpecs = spec.validatedExcludeSpecs; if (!ts.length(validatedIncludeSpecs) || !ts.length(validatedExcludeSpecs)) return false; basePath = ts.normalizePath(basePath); var keyMapper = ts.createGetCanonicalFileName(useCaseSensitiveFileNames); - if (filesSpecs) { - for (var _i = 0, filesSpecs_2 = filesSpecs; _i < filesSpecs_2.length; _i++) { - var fileName = filesSpecs_2[_i]; + if (validatedFilesSpec) { + for (var _i = 0, validatedFilesSpec_2 = validatedFilesSpec; _i < validatedFilesSpec_2.length; _i++) { + var fileName = validatedFilesSpec_2[_i]; if (keyMapper(ts.getNormalizedAbsolutePath(fileName, basePath)) === pathToCheck) return false; } @@ -37505,6 +37509,8 @@ var ts; ts.isExcludedFile = isExcludedFile; function validateSpecs(specs, errors, allowTrailingRecursion, jsonSourceFile, specKey) { return specs.filter(function (spec) { + if (!ts.isString(spec)) + return false; var diag = specToDiagnostic(spec, allowTrailingRecursion); if (diag !== undefined) { errors.push(createDiagnostic(diag, spec)); @@ -144069,7 +144075,7 @@ var ts; kind: "" /* unknown */, kindModifiers: "" /* none */, textSpan: ts.createTextSpanFromNode(nodeForQuickInfo, sourceFile), - displayParts: typeChecker.runWithCancellationToken(cancellationToken, function (typeChecker) { return ts.typeToDisplayParts(typeChecker, type_2, ts.getContainerNode(nodeForQuickInfo)); }), + displayParts: prefixWithApproximation(typeChecker.runWithCancellationToken(cancellationToken, function (typeChecker) { return ts.typeToDisplayParts(typeChecker, type_2, ts.getContainerNode(nodeForQuickInfo)); })), documentation: type_2.symbol ? type_2.symbol.getDocumentationComment(typeChecker) : undefined, tags: type_2.symbol ? type_2.symbol.getJsDocTags() : undefined }; @@ -144081,7 +144087,7 @@ var ts; kind: symbolKind, kindModifiers: ts.SymbolDisplay.getSymbolModifiers(symbol), textSpan: ts.createTextSpanFromNode(nodeForQuickInfo, sourceFile), - displayParts: displayParts, + displayParts: prefixWithApproximation(displayParts), documentation: documentation, tags: tags, }; @@ -144108,6 +144114,12 @@ var ts; return false; } } + function prefixWithApproximation(displayParts) { + if (languageServiceMode === ts.LanguageServiceMode.Semantic) { + return displayParts; + } + return __spreadArrays([ts.textPart("(approximation)"), ts.spacePart()], displayParts); + } /// Goto definition function getDefinitionAtPosition(fileName, position) { synchronizeHostData(); diff --git a/lib/typescriptServices.js b/lib/typescriptServices.js index b5b661a2bcb70..f297cddcb9934 100644 --- a/lib/typescriptServices.js +++ b/lib/typescriptServices.js @@ -288,7 +288,7 @@ var ts; // If changing the text in this section, be sure to test `configurePrerelease` too. ts.versionMajorMinor = "4.0"; /** The version of the TypeScript compiler release */ - ts.version = ts.versionMajorMinor + ".1-rc"; + ts.version = "4.0.2"; /* @internal */ var Comparison; (function (Comparison) { @@ -36881,51 +36881,46 @@ var ts; configFileSpecs: spec }; function getFileNames() { - var filesSpecs; - if (ts.hasProperty(raw, "files") && !isNullOrUndefined(raw.files)) { - if (ts.isArray(raw.files)) { - filesSpecs = raw.files; - var hasReferences = ts.hasProperty(raw, "references") && !isNullOrUndefined(raw.references); - var hasZeroOrNoReferences = !hasReferences || raw.references.length === 0; - var hasExtends = ts.hasProperty(raw, "extends"); - if (filesSpecs.length === 0 && hasZeroOrNoReferences && !hasExtends) { - if (sourceFile) { - var fileName = configFileName || "tsconfig.json"; - var diagnosticMessage = ts.Diagnostics.The_files_list_in_config_file_0_is_empty; - var nodeValue = ts.firstDefined(ts.getTsConfigPropArray(sourceFile, "files"), function (property) { return property.initializer; }); - var error = nodeValue - ? ts.createDiagnosticForNodeInSourceFile(sourceFile, nodeValue, diagnosticMessage, fileName) - : ts.createCompilerDiagnostic(diagnosticMessage, fileName); - errors.push(error); - } - else { - createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.The_files_list_in_config_file_0_is_empty, configFileName || "tsconfig.json"); - } + var referencesOfRaw = getPropFromRaw("references", function (element) { return typeof element === "object"; }, "object"); + if (ts.isArray(referencesOfRaw)) { + for (var _i = 0, referencesOfRaw_1 = referencesOfRaw; _i < referencesOfRaw_1.length; _i++) { + var ref = referencesOfRaw_1[_i]; + if (typeof ref.path !== "string") { + createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "reference.path", "string"); + } + else { + (projectReferences || (projectReferences = [])).push({ + path: ts.getNormalizedAbsolutePath(ref.path, basePath), + originalPath: ref.path, + prepend: ref.prepend, + circular: ref.circular + }); } - } - else { - createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "files", "Array"); - } - } - var includeSpecs; - if (ts.hasProperty(raw, "include") && !isNullOrUndefined(raw.include)) { - if (ts.isArray(raw.include)) { - includeSpecs = raw.include; - } - else { - createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "include", "Array"); } } - var excludeSpecs; - if (ts.hasProperty(raw, "exclude") && !isNullOrUndefined(raw.exclude)) { - if (ts.isArray(raw.exclude)) { - excludeSpecs = raw.exclude; - } - else { - createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "exclude", "Array"); + var filesSpecs = toPropValue(getSpecsFromRaw("files")); + if (filesSpecs) { + var hasZeroOrNoReferences = referencesOfRaw === "no-prop" || ts.isArray(referencesOfRaw) && referencesOfRaw.length === 0; + var hasExtends = ts.hasProperty(raw, "extends"); + if (filesSpecs.length === 0 && hasZeroOrNoReferences && !hasExtends) { + if (sourceFile) { + var fileName = configFileName || "tsconfig.json"; + var diagnosticMessage = ts.Diagnostics.The_files_list_in_config_file_0_is_empty; + var nodeValue = ts.firstDefined(ts.getTsConfigPropArray(sourceFile, "files"), function (property) { return property.initializer; }); + var error = nodeValue + ? ts.createDiagnosticForNodeInSourceFile(sourceFile, nodeValue, diagnosticMessage, fileName) + : ts.createCompilerDiagnostic(diagnosticMessage, fileName); + errors.push(error); + } + else { + createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.The_files_list_in_config_file_0_is_empty, configFileName || "tsconfig.json"); + } } } - else if (raw.compilerOptions) { + var includeSpecs = toPropValue(getSpecsFromRaw("include")); + var excludeOfRaw = getSpecsFromRaw("exclude"); + var excludeSpecs = toPropValue(excludeOfRaw); + if (excludeOfRaw === "no-prop" && raw.compilerOptions) { var outDir = raw.compilerOptions.outDir; var declarationDir = raw.compilerOptions.declarationDir; if (outDir || declarationDir) { @@ -36939,28 +36934,29 @@ var ts; if (shouldReportNoInputFiles(result, canJsonReportNoInputFiles(raw), resolutionStack)) { errors.push(getErrorForNoInputFiles(result.spec, configFileName)); } - if (ts.hasProperty(raw, "references") && !isNullOrUndefined(raw.references)) { - if (ts.isArray(raw.references)) { - for (var _i = 0, _a = raw.references; _i < _a.length; _i++) { - var ref = _a[_i]; - if (typeof ref.path !== "string") { - createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "reference.path", "string"); - } - else { - (projectReferences || (projectReferences = [])).push({ - path: ts.getNormalizedAbsolutePath(ref.path, basePath), - originalPath: ref.path, - prepend: ref.prepend, - circular: ref.circular - }); - } + return result; + } + function toPropValue(specResult) { + return ts.isArray(specResult) ? specResult : undefined; + } + function getSpecsFromRaw(prop) { + return getPropFromRaw(prop, ts.isString, "string"); + } + function getPropFromRaw(prop, validateElement, elementTypeName) { + if (ts.hasProperty(raw, prop) && !isNullOrUndefined(raw[prop])) { + if (ts.isArray(raw[prop])) { + var result = raw[prop]; + if (!sourceFile && !ts.every(result, validateElement)) { + errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, prop, elementTypeName)); } + return result; } else { - createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "references", "Array"); + createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, prop, "Array"); + return "not-array"; } } - return result; + return "no-prop"; } function createCompilerDiagnosticOnlyIfJson(message, arg0, arg1) { if (!sourceFile) { @@ -37385,7 +37381,15 @@ var ts; // or a recursive directory. This information is used by filesystem watchers to monitor for // new entries in these paths. var wildcardDirectories = getWildcardDirectories(validatedIncludeSpecs, validatedExcludeSpecs, basePath, host.useCaseSensitiveFileNames); - var spec = { filesSpecs: filesSpecs, includeSpecs: includeSpecs, excludeSpecs: excludeSpecs, validatedIncludeSpecs: validatedIncludeSpecs, validatedExcludeSpecs: validatedExcludeSpecs, wildcardDirectories: wildcardDirectories }; + var spec = { + filesSpecs: filesSpecs, + includeSpecs: includeSpecs, + excludeSpecs: excludeSpecs, + validatedFilesSpec: ts.filter(filesSpecs, ts.isString), + validatedIncludeSpecs: validatedIncludeSpecs, + validatedExcludeSpecs: validatedExcludeSpecs, + wildcardDirectories: wildcardDirectories + }; return getFileNamesFromConfigSpecs(spec, basePath, options, host, extraFileExtensions); } /** @@ -37414,16 +37418,16 @@ var ts; // file map with a possibly case insensitive key. We use this map to store paths matched // via wildcard of *.json kind var wildCardJsonFileMap = new ts.Map(); - var filesSpecs = spec.filesSpecs, validatedIncludeSpecs = spec.validatedIncludeSpecs, validatedExcludeSpecs = spec.validatedExcludeSpecs, wildcardDirectories = spec.wildcardDirectories; + var validatedFilesSpec = spec.validatedFilesSpec, validatedIncludeSpecs = spec.validatedIncludeSpecs, validatedExcludeSpecs = spec.validatedExcludeSpecs, wildcardDirectories = spec.wildcardDirectories; // Rather than requery this for each file and filespec, we query the supported extensions // once and store it on the expansion context. var supportedExtensions = ts.getSupportedExtensions(options, extraFileExtensions); var supportedExtensionsWithJsonIfResolveJsonModule = ts.getSuppoertedExtensionsWithJsonIfResolveJsonModule(options, supportedExtensions); // Literal files are always included verbatim. An "include" or "exclude" specification cannot // remove a literal file. - if (filesSpecs) { - for (var _i = 0, filesSpecs_1 = filesSpecs; _i < filesSpecs_1.length; _i++) { - var fileName = filesSpecs_1[_i]; + if (validatedFilesSpec) { + for (var _i = 0, validatedFilesSpec_1 = validatedFilesSpec; _i < validatedFilesSpec_1.length; _i++) { + var fileName = validatedFilesSpec_1[_i]; var file = ts.getNormalizedAbsolutePath(fileName, basePath); literalFileMap.set(keyMapper(file), file); } @@ -37482,14 +37486,14 @@ var ts; ts.getFileNamesFromConfigSpecs = getFileNamesFromConfigSpecs; /* @internal */ function isExcludedFile(pathToCheck, spec, basePath, useCaseSensitiveFileNames, currentDirectory) { - var filesSpecs = spec.filesSpecs, validatedIncludeSpecs = spec.validatedIncludeSpecs, validatedExcludeSpecs = spec.validatedExcludeSpecs; + var validatedFilesSpec = spec.validatedFilesSpec, validatedIncludeSpecs = spec.validatedIncludeSpecs, validatedExcludeSpecs = spec.validatedExcludeSpecs; if (!ts.length(validatedIncludeSpecs) || !ts.length(validatedExcludeSpecs)) return false; basePath = ts.normalizePath(basePath); var keyMapper = ts.createGetCanonicalFileName(useCaseSensitiveFileNames); - if (filesSpecs) { - for (var _i = 0, filesSpecs_2 = filesSpecs; _i < filesSpecs_2.length; _i++) { - var fileName = filesSpecs_2[_i]; + if (validatedFilesSpec) { + for (var _i = 0, validatedFilesSpec_2 = validatedFilesSpec; _i < validatedFilesSpec_2.length; _i++) { + var fileName = validatedFilesSpec_2[_i]; if (keyMapper(ts.getNormalizedAbsolutePath(fileName, basePath)) === pathToCheck) return false; } @@ -37505,6 +37509,8 @@ var ts; ts.isExcludedFile = isExcludedFile; function validateSpecs(specs, errors, allowTrailingRecursion, jsonSourceFile, specKey) { return specs.filter(function (spec) { + if (!ts.isString(spec)) + return false; var diag = specToDiagnostic(spec, allowTrailingRecursion); if (diag !== undefined) { errors.push(createDiagnostic(diag, spec)); @@ -144069,7 +144075,7 @@ var ts; kind: "" /* unknown */, kindModifiers: "" /* none */, textSpan: ts.createTextSpanFromNode(nodeForQuickInfo, sourceFile), - displayParts: typeChecker.runWithCancellationToken(cancellationToken, function (typeChecker) { return ts.typeToDisplayParts(typeChecker, type_2, ts.getContainerNode(nodeForQuickInfo)); }), + displayParts: prefixWithApproximation(typeChecker.runWithCancellationToken(cancellationToken, function (typeChecker) { return ts.typeToDisplayParts(typeChecker, type_2, ts.getContainerNode(nodeForQuickInfo)); })), documentation: type_2.symbol ? type_2.symbol.getDocumentationComment(typeChecker) : undefined, tags: type_2.symbol ? type_2.symbol.getJsDocTags() : undefined }; @@ -144081,7 +144087,7 @@ var ts; kind: symbolKind, kindModifiers: ts.SymbolDisplay.getSymbolModifiers(symbol), textSpan: ts.createTextSpanFromNode(nodeForQuickInfo, sourceFile), - displayParts: displayParts, + displayParts: prefixWithApproximation(displayParts), documentation: documentation, tags: tags, }; @@ -144108,6 +144114,12 @@ var ts; return false; } } + function prefixWithApproximation(displayParts) { + if (languageServiceMode === ts.LanguageServiceMode.Semantic) { + return displayParts; + } + return __spreadArrays([ts.textPart("(approximation)"), ts.spacePart()], displayParts); + } /// Goto definition function getDefinitionAtPosition(fileName, position) { synchronizeHostData(); diff --git a/lib/typingsInstaller.js b/lib/typingsInstaller.js index add89c734f59a..f3f435d157c2b 100644 --- a/lib/typingsInstaller.js +++ b/lib/typingsInstaller.js @@ -83,7 +83,7 @@ var ts; // If changing the text in this section, be sure to test `configurePrerelease` too. ts.versionMajorMinor = "4.0"; /** The version of the TypeScript compiler release */ - ts.version = ts.versionMajorMinor + ".1-rc"; + ts.version = "4.0.2"; /* @internal */ var Comparison; (function (Comparison) { @@ -36676,51 +36676,46 @@ var ts; configFileSpecs: spec }; function getFileNames() { - var filesSpecs; - if (ts.hasProperty(raw, "files") && !isNullOrUndefined(raw.files)) { - if (ts.isArray(raw.files)) { - filesSpecs = raw.files; - var hasReferences = ts.hasProperty(raw, "references") && !isNullOrUndefined(raw.references); - var hasZeroOrNoReferences = !hasReferences || raw.references.length === 0; - var hasExtends = ts.hasProperty(raw, "extends"); - if (filesSpecs.length === 0 && hasZeroOrNoReferences && !hasExtends) { - if (sourceFile) { - var fileName = configFileName || "tsconfig.json"; - var diagnosticMessage = ts.Diagnostics.The_files_list_in_config_file_0_is_empty; - var nodeValue = ts.firstDefined(ts.getTsConfigPropArray(sourceFile, "files"), function (property) { return property.initializer; }); - var error = nodeValue - ? ts.createDiagnosticForNodeInSourceFile(sourceFile, nodeValue, diagnosticMessage, fileName) - : ts.createCompilerDiagnostic(diagnosticMessage, fileName); - errors.push(error); - } - else { - createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.The_files_list_in_config_file_0_is_empty, configFileName || "tsconfig.json"); - } + var referencesOfRaw = getPropFromRaw("references", function (element) { return typeof element === "object"; }, "object"); + if (ts.isArray(referencesOfRaw)) { + for (var _i = 0, referencesOfRaw_1 = referencesOfRaw; _i < referencesOfRaw_1.length; _i++) { + var ref = referencesOfRaw_1[_i]; + if (typeof ref.path !== "string") { + createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "reference.path", "string"); + } + else { + (projectReferences || (projectReferences = [])).push({ + path: ts.getNormalizedAbsolutePath(ref.path, basePath), + originalPath: ref.path, + prepend: ref.prepend, + circular: ref.circular + }); } - } - else { - createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "files", "Array"); - } - } - var includeSpecs; - if (ts.hasProperty(raw, "include") && !isNullOrUndefined(raw.include)) { - if (ts.isArray(raw.include)) { - includeSpecs = raw.include; - } - else { - createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "include", "Array"); } } - var excludeSpecs; - if (ts.hasProperty(raw, "exclude") && !isNullOrUndefined(raw.exclude)) { - if (ts.isArray(raw.exclude)) { - excludeSpecs = raw.exclude; - } - else { - createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "exclude", "Array"); + var filesSpecs = toPropValue(getSpecsFromRaw("files")); + if (filesSpecs) { + var hasZeroOrNoReferences = referencesOfRaw === "no-prop" || ts.isArray(referencesOfRaw) && referencesOfRaw.length === 0; + var hasExtends = ts.hasProperty(raw, "extends"); + if (filesSpecs.length === 0 && hasZeroOrNoReferences && !hasExtends) { + if (sourceFile) { + var fileName = configFileName || "tsconfig.json"; + var diagnosticMessage = ts.Diagnostics.The_files_list_in_config_file_0_is_empty; + var nodeValue = ts.firstDefined(ts.getTsConfigPropArray(sourceFile, "files"), function (property) { return property.initializer; }); + var error = nodeValue + ? ts.createDiagnosticForNodeInSourceFile(sourceFile, nodeValue, diagnosticMessage, fileName) + : ts.createCompilerDiagnostic(diagnosticMessage, fileName); + errors.push(error); + } + else { + createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.The_files_list_in_config_file_0_is_empty, configFileName || "tsconfig.json"); + } } } - else if (raw.compilerOptions) { + var includeSpecs = toPropValue(getSpecsFromRaw("include")); + var excludeOfRaw = getSpecsFromRaw("exclude"); + var excludeSpecs = toPropValue(excludeOfRaw); + if (excludeOfRaw === "no-prop" && raw.compilerOptions) { var outDir = raw.compilerOptions.outDir; var declarationDir = raw.compilerOptions.declarationDir; if (outDir || declarationDir) { @@ -36734,28 +36729,29 @@ var ts; if (shouldReportNoInputFiles(result, canJsonReportNoInputFiles(raw), resolutionStack)) { errors.push(getErrorForNoInputFiles(result.spec, configFileName)); } - if (ts.hasProperty(raw, "references") && !isNullOrUndefined(raw.references)) { - if (ts.isArray(raw.references)) { - for (var _i = 0, _a = raw.references; _i < _a.length; _i++) { - var ref = _a[_i]; - if (typeof ref.path !== "string") { - createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "reference.path", "string"); - } - else { - (projectReferences || (projectReferences = [])).push({ - path: ts.getNormalizedAbsolutePath(ref.path, basePath), - originalPath: ref.path, - prepend: ref.prepend, - circular: ref.circular - }); - } + return result; + } + function toPropValue(specResult) { + return ts.isArray(specResult) ? specResult : undefined; + } + function getSpecsFromRaw(prop) { + return getPropFromRaw(prop, ts.isString, "string"); + } + function getPropFromRaw(prop, validateElement, elementTypeName) { + if (ts.hasProperty(raw, prop) && !isNullOrUndefined(raw[prop])) { + if (ts.isArray(raw[prop])) { + var result = raw[prop]; + if (!sourceFile && !ts.every(result, validateElement)) { + errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, prop, elementTypeName)); } + return result; } else { - createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "references", "Array"); + createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, prop, "Array"); + return "not-array"; } } - return result; + return "no-prop"; } function createCompilerDiagnosticOnlyIfJson(message, arg0, arg1) { if (!sourceFile) { @@ -37180,7 +37176,15 @@ var ts; // or a recursive directory. This information is used by filesystem watchers to monitor for // new entries in these paths. var wildcardDirectories = getWildcardDirectories(validatedIncludeSpecs, validatedExcludeSpecs, basePath, host.useCaseSensitiveFileNames); - var spec = { filesSpecs: filesSpecs, includeSpecs: includeSpecs, excludeSpecs: excludeSpecs, validatedIncludeSpecs: validatedIncludeSpecs, validatedExcludeSpecs: validatedExcludeSpecs, wildcardDirectories: wildcardDirectories }; + var spec = { + filesSpecs: filesSpecs, + includeSpecs: includeSpecs, + excludeSpecs: excludeSpecs, + validatedFilesSpec: ts.filter(filesSpecs, ts.isString), + validatedIncludeSpecs: validatedIncludeSpecs, + validatedExcludeSpecs: validatedExcludeSpecs, + wildcardDirectories: wildcardDirectories + }; return getFileNamesFromConfigSpecs(spec, basePath, options, host, extraFileExtensions); } /** @@ -37209,16 +37213,16 @@ var ts; // file map with a possibly case insensitive key. We use this map to store paths matched // via wildcard of *.json kind var wildCardJsonFileMap = new ts.Map(); - var filesSpecs = spec.filesSpecs, validatedIncludeSpecs = spec.validatedIncludeSpecs, validatedExcludeSpecs = spec.validatedExcludeSpecs, wildcardDirectories = spec.wildcardDirectories; + var validatedFilesSpec = spec.validatedFilesSpec, validatedIncludeSpecs = spec.validatedIncludeSpecs, validatedExcludeSpecs = spec.validatedExcludeSpecs, wildcardDirectories = spec.wildcardDirectories; // Rather than requery this for each file and filespec, we query the supported extensions // once and store it on the expansion context. var supportedExtensions = ts.getSupportedExtensions(options, extraFileExtensions); var supportedExtensionsWithJsonIfResolveJsonModule = ts.getSuppoertedExtensionsWithJsonIfResolveJsonModule(options, supportedExtensions); // Literal files are always included verbatim. An "include" or "exclude" specification cannot // remove a literal file. - if (filesSpecs) { - for (var _i = 0, filesSpecs_1 = filesSpecs; _i < filesSpecs_1.length; _i++) { - var fileName = filesSpecs_1[_i]; + if (validatedFilesSpec) { + for (var _i = 0, validatedFilesSpec_1 = validatedFilesSpec; _i < validatedFilesSpec_1.length; _i++) { + var fileName = validatedFilesSpec_1[_i]; var file = ts.getNormalizedAbsolutePath(fileName, basePath); literalFileMap.set(keyMapper(file), file); } @@ -37277,14 +37281,14 @@ var ts; ts.getFileNamesFromConfigSpecs = getFileNamesFromConfigSpecs; /* @internal */ function isExcludedFile(pathToCheck, spec, basePath, useCaseSensitiveFileNames, currentDirectory) { - var filesSpecs = spec.filesSpecs, validatedIncludeSpecs = spec.validatedIncludeSpecs, validatedExcludeSpecs = spec.validatedExcludeSpecs; + var validatedFilesSpec = spec.validatedFilesSpec, validatedIncludeSpecs = spec.validatedIncludeSpecs, validatedExcludeSpecs = spec.validatedExcludeSpecs; if (!ts.length(validatedIncludeSpecs) || !ts.length(validatedExcludeSpecs)) return false; basePath = ts.normalizePath(basePath); var keyMapper = ts.createGetCanonicalFileName(useCaseSensitiveFileNames); - if (filesSpecs) { - for (var _i = 0, filesSpecs_2 = filesSpecs; _i < filesSpecs_2.length; _i++) { - var fileName = filesSpecs_2[_i]; + if (validatedFilesSpec) { + for (var _i = 0, validatedFilesSpec_2 = validatedFilesSpec; _i < validatedFilesSpec_2.length; _i++) { + var fileName = validatedFilesSpec_2[_i]; if (keyMapper(ts.getNormalizedAbsolutePath(fileName, basePath)) === pathToCheck) return false; } @@ -37300,6 +37304,8 @@ var ts; ts.isExcludedFile = isExcludedFile; function validateSpecs(specs, errors, allowTrailingRecursion, jsonSourceFile, specKey) { return specs.filter(function (spec) { + if (!ts.isString(spec)) + return false; var diag = specToDiagnostic(spec, allowTrailingRecursion); if (diag !== undefined) { errors.push(createDiagnostic(diag, spec)); diff --git a/package.json b/package.json index e4e3061ef9249..06cd98e164add 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "typescript", "author": "Microsoft Corp.", "homepage": "https://www.typescriptlang.org/", - "version": "4.0.1-rc", + "version": "4.0.2", "license": "Apache-2.0", "description": "TypeScript is a language for application scale JavaScript development", "keywords": [ diff --git a/src/compiler/corePublic.ts b/src/compiler/corePublic.ts index a7f1c5047766c..1001709ba1db3 100644 --- a/src/compiler/corePublic.ts +++ b/src/compiler/corePublic.ts @@ -3,7 +3,7 @@ namespace ts { // If changing the text in this section, be sure to test `configurePrerelease` too. export const versionMajorMinor = "4.0"; /** The version of the TypeScript compiler release */ - export const version = `${versionMajorMinor}.1-rc`; + export const version = "4.0.2" as string; /** * Type of objects whose values are all of the same type.