@@ -2783,7 +2783,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
2783
2783
const moduleNotFoundError = !(moduleName.parent.parent.flags & NodeFlags.Ambient)
2784
2784
? Diagnostics.Invalid_module_name_in_augmentation_module_0_cannot_be_found
2785
2785
: undefined;
2786
- let mainModule = resolveExternalModuleNameWorker(moduleName, moduleName, moduleNotFoundError, /*isForAugmentation*/ true);
2786
+ let mainModule = resolveExternalModuleNameWorker(moduleName, moduleName, moduleNotFoundError, /*ignoreErrors*/ false, /* isForAugmentation*/ true);
2787
2787
if (!mainModule) {
2788
2788
return;
2789
2789
}
@@ -4547,17 +4547,17 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
4547
4547
const errorMessage = isClassic ?
4548
4548
Diagnostics.Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_nodenext_or_to_add_aliases_to_the_paths_option
4549
4549
: Diagnostics.Cannot_find_module_0_or_its_corresponding_type_declarations;
4550
- return resolveExternalModuleNameWorker(location, moduleReferenceExpression, ignoreErrors ? undefined : errorMessage);
4550
+ return resolveExternalModuleNameWorker(location, moduleReferenceExpression, ignoreErrors ? undefined : errorMessage, ignoreErrors );
4551
4551
}
4552
4552
4553
- function resolveExternalModuleNameWorker(location: Node, moduleReferenceExpression: Expression, moduleNotFoundError: DiagnosticMessage | undefined, isForAugmentation = false): Symbol | undefined {
4553
+ function resolveExternalModuleNameWorker(location: Node, moduleReferenceExpression: Expression, moduleNotFoundError: DiagnosticMessage | undefined, ignoreErrors = false, isForAugmentation = false): Symbol | undefined {
4554
4554
return isStringLiteralLike(moduleReferenceExpression)
4555
- ? resolveExternalModule(location, moduleReferenceExpression.text, moduleNotFoundError, moduleReferenceExpression, isForAugmentation)
4555
+ ? resolveExternalModule(location, moduleReferenceExpression.text, moduleNotFoundError, !ignoreErrors ? moduleReferenceExpression : undefined , isForAugmentation)
4556
4556
: undefined;
4557
4557
}
4558
4558
4559
- function resolveExternalModule(location: Node, moduleReference: string, moduleNotFoundError: DiagnosticMessage | undefined, errorNode: Node, isForAugmentation = false): Symbol | undefined {
4560
- if (startsWith(moduleReference, "@types/")) {
4559
+ function resolveExternalModule(location: Node, moduleReference: string, moduleNotFoundError: DiagnosticMessage | undefined, errorNode: Node | undefined , isForAugmentation = false): Symbol | undefined {
4560
+ if (errorNode && startsWith(moduleReference, "@types/")) {
4561
4561
const diag = Diagnostics.Cannot_import_type_declaration_files_Consider_importing_0_instead_of_1;
4562
4562
const withoutAtTypePrefix = removePrefix(moduleReference, "@types/");
4563
4563
error(errorNode, diag, withoutAtTypePrefix, moduleReference);
@@ -4581,7 +4581,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
4581
4581
const mode = contextSpecifier && isStringLiteralLike(contextSpecifier) ? host.getModeForUsageLocation(currentSourceFile, contextSpecifier) : currentSourceFile.impliedNodeFormat;
4582
4582
const moduleResolutionKind = getEmitModuleResolutionKind(compilerOptions);
4583
4583
const resolvedModule = host.getResolvedModule(currentSourceFile, moduleReference, mode)?.resolvedModule;
4584
- const resolutionDiagnostic = resolvedModule && getResolutionDiagnostic(compilerOptions, resolvedModule, currentSourceFile);
4584
+ const resolutionDiagnostic = errorNode && resolvedModule && getResolutionDiagnostic(compilerOptions, resolvedModule, currentSourceFile);
4585
4585
const sourceFile = resolvedModule
4586
4586
&& (!resolutionDiagnostic || resolutionDiagnostic === Diagnostics.Module_0_was_resolved_to_1_but_jsx_is_not_set)
4587
4587
&& host.getSourceFile(resolvedModule.resolvedFileName);
@@ -4594,7 +4594,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
4594
4594
if (resolvedModule.resolvedUsingTsExtension && isDeclarationFileName(moduleReference)) {
4595
4595
const importOrExport = findAncestor(location, isImportDeclaration)?.importClause ||
4596
4596
findAncestor(location, or(isImportEqualsDeclaration, isExportDeclaration));
4597
- if (importOrExport && !importOrExport.isTypeOnly || findAncestor(location, isImportCall)) {
4597
+ if (errorNode && importOrExport && !importOrExport.isTypeOnly || findAncestor(location, isImportCall)) {
4598
4598
error(
4599
4599
errorNode,
4600
4600
Diagnostics.A_declaration_file_cannot_be_imported_without_import_type_Did_you_mean_to_import_an_implementation_file_0_instead,
@@ -4605,17 +4605,17 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
4605
4605
else if (resolvedModule.resolvedUsingTsExtension && !shouldAllowImportingTsExtension(compilerOptions, currentSourceFile.fileName)) {
4606
4606
const importOrExport = findAncestor(location, isImportDeclaration)?.importClause ||
4607
4607
findAncestor(location, or(isImportEqualsDeclaration, isExportDeclaration));
4608
- if (!(importOrExport?.isTypeOnly || findAncestor(location, isImportTypeNode))) {
4608
+ if (errorNode && !(importOrExport?.isTypeOnly || findAncestor(location, isImportTypeNode))) {
4609
4609
const tsExtension = Debug.checkDefined(tryExtractTSExtension(moduleReference));
4610
4610
error(errorNode, Diagnostics.An_import_path_can_only_end_with_a_0_extension_when_allowImportingTsExtensions_is_enabled, tsExtension);
4611
4611
}
4612
4612
}
4613
4613
4614
4614
if (sourceFile.symbol) {
4615
- if (resolvedModule.isExternalLibraryImport && !resolutionExtensionIsTSOrJson(resolvedModule.extension)) {
4615
+ if (errorNode && resolvedModule.isExternalLibraryImport && !resolutionExtensionIsTSOrJson(resolvedModule.extension)) {
4616
4616
errorOnImplicitAnyModule(/*isError*/ false, errorNode, currentSourceFile, mode, resolvedModule, moduleReference);
4617
4617
}
4618
- if (moduleResolutionKind === ModuleResolutionKind.Node16 || moduleResolutionKind === ModuleResolutionKind.NodeNext) {
4618
+ if (errorNode && ( moduleResolutionKind === ModuleResolutionKind.Node16 || moduleResolutionKind === ModuleResolutionKind.NodeNext) ) {
4619
4619
const isSyncImport = (currentSourceFile.impliedNodeFormat === ModuleKind.CommonJS && !findAncestor(location, isImportCall)) || !!findAncestor(location, isImportEqualsDeclaration);
4620
4620
const overrideHost = findAncestor(location, l => isImportTypeNode(l) || isExportDeclaration(l) || isImportDeclaration(l));
4621
4621
// An override clause will take effect for type-only imports and import types, and allows importing the types across formats, regardless of
@@ -4680,7 +4680,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
4680
4680
// merged symbol is module declaration symbol combined with all augmentations
4681
4681
return getMergedSymbol(sourceFile.symbol);
4682
4682
}
4683
- if (moduleNotFoundError) {
4683
+ if (errorNode && moduleNotFoundError) {
4684
4684
// report errors only if it was requested
4685
4685
error(errorNode, Diagnostics.File_0_is_not_a_module, sourceFile.fileName);
4686
4686
}
@@ -4702,6 +4702,10 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
4702
4702
}
4703
4703
}
4704
4704
4705
+ if (!errorNode) {
4706
+ return undefined;
4707
+ }
4708
+
4705
4709
// May be an untyped module. If so, ignore resolutionDiagnostic.
4706
4710
if (resolvedModule && !resolutionExtensionIsTSOrJson(resolvedModule.extension) && resolutionDiagnostic === undefined || resolutionDiagnostic === Diagnostics.Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type) {
4707
4711
if (isForAugmentation) {
@@ -33078,7 +33082,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
33078
33082
? Diagnostics.Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_nodenext_or_to_add_aliases_to_the_paths_option
33079
33083
: Diagnostics.Cannot_find_module_0_or_its_corresponding_type_declarations;
33080
33084
const specifier = getJSXRuntimeImportSpecifier(file, runtimeImportSpecifier);
33081
- const mod = resolveExternalModule(specifier || location!, runtimeImportSpecifier, errorMessage, location! );
33085
+ const mod = resolveExternalModule(specifier || location!, runtimeImportSpecifier, errorMessage, location);
33082
33086
const result = mod && mod !== unknownSymbol ? getMergedSymbol(resolveSymbol(mod)) : undefined;
33083
33087
if (links) {
33084
33088
links.jsxImplicitImportContainer = result || false;
0 commit comments