@@ -528,6 +528,7 @@ type Program interface {
528528 FileExists(fileName string) bool
529529 GetSourceFile(fileName string) *ast.SourceFile
530530 GetEmitModuleFormatOfFile(sourceFile ast.HasFileName) core.ModuleKind
531+ GetEmitSyntaxForUsageLocation(sourceFile ast.HasFileName, usageLocation *ast.StringLiteralLike) core.ResolutionMode
531532 GetImpliedNodeFormatForEmit(sourceFile ast.HasFileName) core.ModuleKind
532533 GetResolvedModule(currentSourceFile ast.HasFileName, moduleReference string, mode core.ResolutionMode) *module.ResolvedModule
533534 GetResolvedModules() map[tspath.Path]module.ModeAwareCache[*module.ResolvedModule]
@@ -5016,7 +5017,10 @@ func (c *Checker) checkImportDeclaration(node *ast.Node) {
50165017 }
50175018 }
50185019 }
5019- if c.isOnlyImportableAsDefault(moduleSpecifier, resolvedModule) && !hasTypeJsonImportAttribute(node) {
5020+ if !importClause.IsTypeOnly() &&
5021+ core.ModuleKindNode18 <= c.moduleKind && c.moduleKind <= core.ModuleKindNodeNext &&
5022+ c.isOnlyImportableAsDefault(moduleSpecifier, resolvedModule) &&
5023+ !hasTypeJsonImportAttribute(node) {
50205024 c.error(moduleSpecifier, diagnostics.Importing_a_JSON_file_into_an_ECMAScript_module_requires_a_type_Colon_json_import_attribute_when_module_is_set_to_0, c.moduleKind.String())
50215025 }
50225026 } else if c.compilerOptions.NoUncheckedSideEffectImports.IsTrue() && importClause == nil {
@@ -5113,29 +5117,32 @@ func (c *Checker) checkImportAttributes(declaration *ast.Node) {
51135117 if isTypeOnly && override != core.ResolutionModeNone {
51145118 return // Other grammar checks do not apply to type-only imports with resolution mode assertions
51155119 }
5116- var mode core.ResolutionMode
5117- if c.moduleKind == core.ModuleKindNodeNext {
5118- if moduleSpecifier := getModuleSpecifierFromNode(declaration); moduleSpecifier != nil {
5119- mode = c.getEmitSyntaxForModuleSpecifierExpression(moduleSpecifier)
5120+
5121+ if !c.moduleKind.SupportsImportAttributes() {
5122+ if isImportAttributes {
5123+ c.grammarErrorOnNode(node, diagnostics.Import_attributes_are_only_supported_when_the_module_option_is_set_to_esnext_node18_nodenext_or_preserve)
5124+ } else {
5125+ c.grammarErrorOnNode(node, diagnostics.Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_node18_nodenext_or_preserve)
51205126 }
5127+ return
51215128 }
5122- if mode != core.ModuleKindESNext && c.moduleKind != core.ModuleKindESNext && c.moduleKind != core.ModuleKindPreserve {
5123- var message *diagnostics.Message
5124- switch {
5125- case isImportAttributes:
5126- if c.moduleKind == core.ModuleKindNodeNext {
5127- message = diagnostics.Import_attributes_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls
5129+
5130+ if c.moduleKind == core.ModuleKindNodeNext && !isImportAttributes {
5131+ c.grammarErrorOnNode(node, diagnostics.Import_assertions_have_been_replaced_by_import_attributes_Use_with_instead_of_assert)
5132+ return
5133+ }
5134+
5135+ if moduleSpecifier := getModuleSpecifierFromNode(declaration); moduleSpecifier != nil {
5136+ if c.getEmitSyntaxForModuleSpecifierExpression(moduleSpecifier) == core.ModuleKindCommonJS {
5137+ if isImportAttributes {
5138+ c.grammarErrorOnNode(node, diagnostics.Import_attributes_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls)
51285139 } else {
5129- message = diagnostics.Import_attributes_are_only_supported_when_the_module_option_is_set_to_esnext_node18_nodenext_or_preserve
5140+ c.grammarErrorOnNode(node, diagnostics.Import_assertions_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls)
51305141 }
5131- case c.moduleKind == core.ModuleKindNodeNext:
5132- message = diagnostics.Import_assertions_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls
5133- default:
5134- message = diagnostics.Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_node18_nodenext_or_preserve
5142+ return
51355143 }
5136- c.grammarErrorOnNode(node, message)
5137- return
51385144 }
5145+
51395146 if isTypeOnly {
51405147 c.grammarErrorOnNode(node, core.IfElse(isImportAttributes,
51415148 diagnostics.Import_attributes_cannot_be_used_with_type_only_imports_or_exports,
@@ -10210,7 +10217,7 @@ func (c *Checker) checkNewTargetMetaProperty(node *ast.Node) *Type {
1021010217}
1021110218
1021210219func (c *Checker) checkImportMetaProperty(node *ast.Node) *Type {
10213- if c.moduleKind == core.ModuleKindNode16 || c.moduleKind = = core.ModuleKindNodeNext {
10220+ if core.ModuleKindNode16 <= c.moduleKind && c.moduleKind < = core.ModuleKindNodeNext {
1021410221 sourceFileMetaData := c.program.GetSourceFileMetaData(ast.GetSourceFileOfNode(node).Path())
1021510222 if sourceFileMetaData == nil || sourceFileMetaData.ImpliedNodeFormat != core.ModuleKindESNext {
1021610223 c.error(node, diagnostics.The_import_meta_meta_property_is_not_allowed_in_files_which_will_build_into_CommonJS_output)
@@ -14092,10 +14099,9 @@ func (c *Checker) canHaveSyntheticDefault(file *ast.Node, moduleSymbol *ast.Symb
1409214099}
1409314100
1409414101func (c *Checker) getEmitSyntaxForModuleSpecifierExpression(usage *ast.Node) core.ResolutionMode {
14095- // !!!
14096- // if isStringLiteralLike(usage) {
14097- // return host.getEmitSyntaxForUsageLocation(ast.GetSourceFileOfNode(usage), usage)
14098- // }
14102+ if ast.IsStringLiteralLike(usage) {
14103+ return c.program.GetEmitSyntaxForUsageLocation(ast.GetSourceFileOfNode(usage), usage)
14104+ }
1409914105 return core.ModuleKindNone
1410014106}
1410114107
@@ -14446,7 +14452,7 @@ func (c *Checker) resolveExternalModule(location *ast.Node, moduleReference stri
1444614452 if resolvedModule.IsExternalLibraryImport && !(tspath.ExtensionIsTs(resolvedModule.Extension) || resolvedModule.Extension == tspath.ExtensionJson) {
1444714453 c.errorOnImplicitAnyModule(false /*isError*/, errorNode, mode, resolvedModule, moduleReference)
1444814454 }
14449- if c.moduleResolutionKind == core.ModuleResolutionKindNode16 || c.moduleResolutionKind == core.ModuleResolutionKindNodeNext {
14455+ if c.moduleKind == core.ModuleKindNode16 || c.moduleKind == core.ModuleKindNode18 {
1445014456 isSyncImport := c.program.GetDefaultResolutionModeForFile(importingSourceFile) == core.ModuleKindCommonJS && ast.FindAncestor(location, ast.IsImportCall) == nil ||
1445114457 ast.FindAncestor(location, ast.IsImportEqualsDeclaration) != nil
1445214458 overrideHost := ast.FindAncestor(location, ast.IsResolutionModeOverrideHost)
0 commit comments