@@ -528,6 +528,7 @@ type Program interface {
528
528
FileExists(fileName string) bool
529
529
GetSourceFile(fileName string) *ast.SourceFile
530
530
GetEmitModuleFormatOfFile(sourceFile ast.HasFileName) core.ModuleKind
531
+ GetEmitSyntaxForUsageLocation(sourceFile ast.HasFileName, usageLocation *ast.StringLiteralLike) core.ResolutionMode
531
532
GetImpliedNodeFormatForEmit(sourceFile ast.HasFileName) core.ModuleKind
532
533
GetResolvedModule(currentSourceFile ast.HasFileName, moduleReference string, mode core.ResolutionMode) *module.ResolvedModule
533
534
GetResolvedModules() map[tspath.Path]module.ModeAwareCache[*module.ResolvedModule]
@@ -5016,7 +5017,10 @@ func (c *Checker) checkImportDeclaration(node *ast.Node) {
5016
5017
}
5017
5018
}
5018
5019
}
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) {
5020
5024
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())
5021
5025
}
5022
5026
} else if c.compilerOptions.NoUncheckedSideEffectImports.IsTrue() && importClause == nil {
@@ -5113,29 +5117,32 @@ func (c *Checker) checkImportAttributes(declaration *ast.Node) {
5113
5117
if isTypeOnly && override != core.ResolutionModeNone {
5114
5118
return // Other grammar checks do not apply to type-only imports with resolution mode assertions
5115
5119
}
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)
5120
5126
}
5127
+ return
5121
5128
}
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)
5128
5139
} 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)
5130
5141
}
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
5135
5143
}
5136
- c.grammarErrorOnNode(node, message)
5137
- return
5138
5144
}
5145
+
5139
5146
if isTypeOnly {
5140
5147
c.grammarErrorOnNode(node, core.IfElse(isImportAttributes,
5141
5148
diagnostics.Import_attributes_cannot_be_used_with_type_only_imports_or_exports,
@@ -10210,7 +10217,7 @@ func (c *Checker) checkNewTargetMetaProperty(node *ast.Node) *Type {
10210
10217
}
10211
10218
10212
10219
func (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 {
10214
10221
sourceFileMetaData := c.program.GetSourceFileMetaData(ast.GetSourceFileOfNode(node).Path())
10215
10222
if sourceFileMetaData == nil || sourceFileMetaData.ImpliedNodeFormat != core.ModuleKindESNext {
10216
10223
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
14092
14099
}
14093
14100
14094
14101
func (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
+ }
14099
14105
return core.ModuleKindNone
14100
14106
}
14101
14107
@@ -14446,7 +14452,7 @@ func (c *Checker) resolveExternalModule(location *ast.Node, moduleReference stri
14446
14452
if resolvedModule.IsExternalLibraryImport && !(tspath.ExtensionIsTs(resolvedModule.Extension) || resolvedModule.Extension == tspath.ExtensionJson) {
14447
14453
c.errorOnImplicitAnyModule(false /*isError*/, errorNode, mode, resolvedModule, moduleReference)
14448
14454
}
14449
- if c.moduleResolutionKind == core.ModuleResolutionKindNode16 || c.moduleResolutionKind == core.ModuleResolutionKindNodeNext {
14455
+ if c.moduleKind == core.ModuleKindNode16 || c.moduleKind == core.ModuleKindNode18 {
14450
14456
isSyncImport := c.program.GetDefaultResolutionModeForFile(importingSourceFile) == core.ModuleKindCommonJS && ast.FindAncestor(location, ast.IsImportCall) == nil ||
14451
14457
ast.FindAncestor(location, ast.IsImportEqualsDeclaration) != nil
14452
14458
overrideHost := ast.FindAncestor(location, ast.IsResolutionModeOverrideHost)
0 commit comments