From 66f4788bf4b8b4806f4150af8c6fb6a46badf03b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=B3=C3=B0i=20Karlsson?= Date: Sun, 16 Mar 2025 17:04:23 +0100 Subject: [PATCH 01/30] Set implied node format during source file creation --- internal/ast/ast.go | 8 ++- internal/ast/utilities.go | 54 ++++++++++++-- internal/checker/checker.go | 41 ++++++----- internal/compiler/fileloader.go | 2 +- internal/compiler/host.go | 12 +++- internal/compiler/program.go | 4 ++ internal/ls/host.go | 3 +- internal/ls/languageservice.go | 5 +- internal/project/project.go | 3 +- internal/testutil/harnessutil/harnessutil.go | 7 +- internal/transformers/importelision_test.go | 20 ++++-- ...nthesizedDefault(module=esnext).errors.txt | 20 ++++++ ...izedDefault(module=esnext).errors.txt.diff | 35 ++++----- ...oSynthesizedDefault(module=esnext).symbols | 4 -- ...hesizedDefault(module=esnext).symbols.diff | 16 +---- ...mNoSynthesizedDefault(module=esnext).types | 26 +++---- ...nthesizedDefault(module=esnext).types.diff | 48 ------------- ...hesizedDefault(module=preserve).errors.txt | 20 ++++++ ...edDefault(module=preserve).errors.txt.diff | 35 ++++----- ...ynthesizedDefault(module=preserve).symbols | 4 -- ...sizedDefault(module=preserve).symbols.diff | 16 +---- ...oSynthesizedDefault(module=preserve).types | 26 +++---- ...hesizedDefault(module=preserve).types.diff | 48 ------------- .../compiler/modulePreserve4.errors.txt | 25 ++++++- .../compiler/modulePreserve4.errors.txt.diff | 43 ++++++----- .../submodule/compiler/modulePreserve4.types | 4 +- .../compiler/modulePreserve4.types.diff | 22 +----- .../nodeModulesAllowJs1(module=node16).types | 72 +++++++++---------- ...eModulesAllowJs1(module=node16).types.diff | 72 +++++++++---------- ...nodeModulesAllowJs1(module=nodenext).types | 72 +++++++++---------- ...odulesAllowJs1(module=nodenext).types.diff | 72 +++++++++---------- ...ExportAssignment(module=node16).errors.txt | 5 +- ...tAssignment(module=node16).errors.txt.diff | 9 ++- ...portAssignment(module=nodenext).errors.txt | 5 +- ...ssignment(module=nodenext).errors.txt.diff | 9 ++- ...edNameCollisions(module=node16).errors.txt | 35 +++++++++ ...eCollisions(module=node16).errors.txt.diff | 54 +++++--------- ...NameCollisions(module=nodenext).errors.txt | 35 +++++++++ ...ollisions(module=nodenext).errors.txt.diff | 54 +++++--------- ...wJsTopLevelAwait(module=node16).errors.txt | 8 +-- ...pLevelAwait(module=node16).errors.txt.diff | 18 ++--- ...sTopLevelAwait(module=nodenext).errors.txt | 8 +-- ...evelAwait(module=nodenext).errors.txt.diff | 18 ++--- ...tFileAlwaysHasDefault(module=node16).types | 4 +- ...AlwaysHasDefault(module=node16).types.diff | 4 +- ...ileAlwaysHasDefault(module=nodenext).types | 4 +- ...waysHasDefault(module=nodenext).types.diff | 4 +- ...nEmitDynamicImportWithPackageExports.types | 16 ++--- ...DynamicImportWithPackageExports.types.diff | 33 +-------- ...xportAssignments(module=node16).errors.txt | 5 +- ...Assignments(module=node16).errors.txt.diff | 17 ----- ...ortAssignments(module=nodenext).errors.txt | 5 +- ...signments(module=nodenext).errors.txt.diff | 17 ----- ...ksSpecifierResolution(module=node16).types | 6 +- ...cifierResolution(module=node16).types.diff | 9 +-- ...SpecifierResolution(module=nodenext).types | 6 +- ...fierResolution(module=nodenext).types.diff | 9 +-- ...rGenerationConditions(module=node16).types | 6 +- ...rationConditions(module=node16).types.diff | 9 +-- ...enerationConditions(module=nodenext).types | 6 +- ...tionConditions(module=nodenext).types.diff | 9 +-- ...erGenerationDirectory(module=node16).types | 6 +- ...erationDirectory(module=node16).types.diff | 9 +-- ...GenerationDirectory(module=nodenext).types | 6 +- ...ationDirectory(module=nodenext).types.diff | 9 +-- ...fierGenerationPattern(module=node16).types | 6 +- ...enerationPattern(module=node16).types.diff | 9 +-- ...erGenerationPattern(module=nodenext).types | 6 +- ...erationPattern(module=nodenext).types.diff | 9 +-- ...edNameCollisions(module=node16).errors.txt | 35 +++++++++ ...eCollisions(module=node16).errors.txt.diff | 54 +++++--------- ...NameCollisions(module=nodenext).errors.txt | 35 +++++++++ ...ollisions(module=nodenext).errors.txt.diff | 54 +++++--------- ...portAssertions(module=nodenext).errors.txt | 5 +- ...ssertions(module=nodenext).errors.txt.diff | 6 +- ...portAttributes(module=nodenext).errors.txt | 5 +- ...ttributes(module=nodenext).errors.txt.diff | 6 +- ...clarationEmit1(module=nodenext).errors.txt | 20 +----- ...tionEmit1(module=nodenext).errors.txt.diff | 26 ++----- ...clarationEmit2(module=nodenext).errors.txt | 20 +----- ...tionEmit2(module=nodenext).errors.txt.diff | 20 +----- ...clarationEmit1(module=nodenext).errors.txt | 20 +----- ...tionEmit1(module=nodenext).errors.txt.diff | 26 ++----- ...clarationEmit2(module=nodenext).errors.txt | 20 +----- ...tionEmit2(module=nodenext).errors.txt.diff | 20 +----- ...esolveJsonModule(module=node16).errors.txt | 10 +-- ...eJsonModule(module=node16).errors.txt.diff | 27 +------ ...esResolveJsonModule(module=node16).symbols | 12 ++-- ...olveJsonModule(module=node16).symbols.diff | 14 ++-- ...ulesResolveJsonModule(module=node16).types | 36 +++++----- ...esolveJsonModule(module=node16).types.diff | 62 +--------------- ...olveJsonModule(module=nodenext).errors.txt | 22 +----- ...sonModule(module=nodenext).errors.txt.diff | 22 +----- ...ResolveJsonModule(module=nodenext).symbols | 12 ++-- ...veJsonModule(module=nodenext).symbols.diff | 14 ++-- ...esResolveJsonModule(module=nodenext).types | 36 +++++----- ...olveJsonModule(module=nodenext).types.diff | 58 ++------------- ...SynchronousCallErrors(module=node16).types | 12 ++-- ...ronousCallErrors(module=node16).types.diff | 12 ++-- ...nchronousCallErrors(module=nodenext).types | 12 ++-- ...nousCallErrors(module=nodenext).types.diff | 12 ++-- ...lesTopLevelAwait(module=node16).errors.txt | 8 +-- ...pLevelAwait(module=node16).errors.txt.diff | 18 ++--- ...sTopLevelAwait(module=nodenext).errors.txt | 8 +-- ...evelAwait(module=nodenext).errors.txt.diff | 18 ++--- ...DeclarationEmit7(module=node16).errors.txt | 5 +- ...rationEmit7(module=node16).errors.txt.diff | 5 +- ...odeDeclarationEmit7(module=node16).symbols | 2 + ...clarationEmit7(module=node16).symbols.diff | 4 +- ...eModeDeclarationEmit7(module=node16).types | 12 ++-- ...DeclarationEmit7(module=node16).types.diff | 16 ++--- ...clarationEmit7(module=nodenext).errors.txt | 5 +- ...tionEmit7(module=nodenext).errors.txt.diff | 5 +- ...eDeclarationEmit7(module=nodenext).symbols | 2 + ...arationEmit7(module=nodenext).symbols.diff | 4 +- ...odeDeclarationEmit7(module=nodenext).types | 12 ++-- ...clarationEmit7(module=nodenext).types.diff | 16 ++--- 117 files changed, 895 insertions(+), 1316 deletions(-) create mode 100644 testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=esnext).errors.txt delete mode 100644 testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=esnext).types.diff create mode 100644 testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=preserve).errors.txt delete mode 100644 testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=preserve).types.diff create mode 100644 testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsGeneratedNameCollisions(module=node16).errors.txt create mode 100644 testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsGeneratedNameCollisions(module=nodenext).errors.txt delete mode 100644 testdata/baselines/reference/submodule/conformance/nodeModulesExportAssignments(module=node16).errors.txt.diff delete mode 100644 testdata/baselines/reference/submodule/conformance/nodeModulesExportAssignments(module=nodenext).errors.txt.diff create mode 100644 testdata/baselines/reference/submodule/conformance/nodeModulesGeneratedNameCollisions(module=node16).errors.txt create mode 100644 testdata/baselines/reference/submodule/conformance/nodeModulesGeneratedNameCollisions(module=nodenext).errors.txt diff --git a/internal/ast/ast.go b/internal/ast/ast.go index 9acacd6396..d276e7601b 100644 --- a/internal/ast/ast.go +++ b/internal/ast/ast.go @@ -6,6 +6,7 @@ import ( "sync" "sync/atomic" + "github.com/microsoft/typescript-go/internal/compiler/packagejson" "github.com/microsoft/typescript-go/internal/core" "github.com/microsoft/typescript-go/internal/tspath" ) @@ -8696,6 +8697,11 @@ type SourceFile struct { TypeReferenceDirectives []*FileReference LibReferenceDirectives []*FileReference + // Fields set by compiler host + + PackageJsonScope *packagejson.InfoCacheEntry + ImpliedNodeFormat core.ModuleKind + // Fields set by binder isBound atomic.Bool @@ -8723,7 +8729,6 @@ type SourceFile struct { // !!! - ImpliedNodeFormat core.ModuleKind CommonJsModuleIndicator *Node ExternalModuleIndicator *Node JsGlobalAugmentations SymbolTable @@ -8809,6 +8814,7 @@ func (node *SourceFile) copyFrom(other *SourceFile) { node.TypeReferenceDirectives = other.TypeReferenceDirectives node.LibReferenceDirectives = other.LibReferenceDirectives node.ImpliedNodeFormat = other.ImpliedNodeFormat + node.PackageJsonScope = other.PackageJsonScope node.CommonJsModuleIndicator = other.CommonJsModuleIndicator node.ExternalModuleIndicator = other.ExternalModuleIndicator node.JsGlobalAugmentations = other.JsGlobalAugmentations diff --git a/internal/ast/utilities.go b/internal/ast/utilities.go index e8262ce04f..0e3c450350 100644 --- a/internal/ast/utilities.go +++ b/internal/ast/utilities.go @@ -2364,22 +2364,62 @@ func GetEmitModuleFormatOfFileWorker(sourceFile *SourceFile, options *core.Compi func GetImpliedNodeFormatForEmitWorker(sourceFile *SourceFile, options *core.CompilerOptions) core.ResolutionMode { moduleKind := options.GetEmitModuleKind() - if core.ModuleKindNode16 <= moduleKind && moduleKind <= core.ModuleKindNodeNext { + shouldLookupFromPackageJson := core.ModuleKindNode16 <= moduleKind && moduleKind <= core.ModuleKindNodeNext || strings.Contains(string(sourceFile.Path()), "/node_modules/") + var packageJsonMode core.ResolutionMode + if shouldLookupFromPackageJson { + packageJsonMode = core.IfElse(sourceFile.PackageJsonScope != nil && sourceFile.PackageJsonScope.Contents.Type.Value == "module", core.ModuleKindESNext, core.ModuleKindCommonJS) + } + + if core.ModuleKindNode16 <= moduleKind && moduleKind <= core.ModuleKindNodeNext && !shouldLookupFromPackageJson { return sourceFile.ImpliedNodeFormat } - if sourceFile.ImpliedNodeFormat == core.ModuleKindCommonJS && - ( /*sourceFile.packageJsonScope.contents.packageJsonContent.type == "commonjs" ||*/ // !!! - tspath.FileExtensionIsOneOf(sourceFile.FileName(), []string{tspath.ExtensionCjs, tspath.ExtensionCts})) { + + if packageJsonMode == core.ModuleKindCommonJS || + tspath.FileExtensionIsOneOf(sourceFile.FileName(), []string{tspath.ExtensionCjs, tspath.ExtensionCts}) { return core.ModuleKindCommonJS } - if sourceFile.ImpliedNodeFormat == core.ModuleKindESNext && - ( /*sourceFile.packageJsonScope?.contents.packageJsonContent.type === "module" ||*/ // !!! - tspath.FileExtensionIsOneOf(sourceFile.fileName, []string{tspath.ExtensionMjs, tspath.ExtensionMts})) { + if packageJsonMode == core.ModuleKindESNext || + tspath.FileExtensionIsOneOf(sourceFile.fileName, []string{tspath.ExtensionMjs, tspath.ExtensionMts}) { return core.ModuleKindESNext } return core.ModuleKindNone } +func shouldTransformImportCallWorker(sourceFile *SourceFile, options *core.CompilerOptions) bool { + moduleKind := options.GetEmitModuleKind() + if core.ModuleKindNode16 <= moduleKind && moduleKind <= core.ModuleKindNodeNext || moduleKind == core.ModuleKindPreserve { + return false + } + return GetEmitModuleFormatOfFileWorker(sourceFile, options) < core.ModuleKindES2015 +} + +func GetEmitSyntaxForUsageLocationWorker(file *SourceFile, usage *Expression, options *core.CompilerOptions) core.ModuleKind { + if options == nil { + // This should always be provided, but we try to fail somewhat + // gracefully to allow projects like ts-node time to update. + return core.ModuleKindNone + } + + var exprParentParent *Node + exprContainingNode := WalkUpParenthesizedExpressions(usage.Parent) + if exprContainingNode != nil { + exprParentParent = exprContainingNode.Parent + } + if exprParentParent != nil && IsImportEqualsDeclaration(usage.Parent) { + return core.IfElse(shouldTransformImportCallWorker(file, options), core.ModuleKindCommonJS, core.ModuleKindESNext) + } + // If we're in --module preserve on an input file, we know that an import + // is an import. But if this is a declaration file, we'd prefer to use the + // impliedNodeFormat. Since we want things to be consistent between the two, + // we need to issue errors when the user writes ESM syntax in a definitely-CJS + // file, until/unless declaration emit can indicate a true ESM import. On the + // other hand, writing CJS syntax in a definitely-ESM file is fine, since declaration + // emit preserves the CJS syntax. + fileEmitMode := GetEmitModuleFormatOfFileWorker(file, options) + emitModuleKindIsNonNodeEsm := fileEmitMode >= core.ModuleKindES2015 && fileEmitMode <= core.ModuleKindESNext + return core.IfElse(fileEmitMode == core.ModuleKindCommonJS, core.ModuleKindCommonJS, core.IfElse(emitModuleKindIsNonNodeEsm || fileEmitMode == core.ModuleKindPreserve, core.ModuleKindESNext, core.ModuleKindNone)) +} + func GetDeclarationContainer(node *Node) *Node { return FindAncestor(GetRootDeclaration(node), func(node *Node) bool { switch node.Kind { diff --git a/internal/checker/checker.go b/internal/checker/checker.go index ec83d74faf..84b4d69da0 100644 --- a/internal/checker/checker.go +++ b/internal/checker/checker.go @@ -512,6 +512,7 @@ type Program interface { SourceFiles() []*ast.SourceFile BindSourceFiles() GetEmitModuleFormatOfFile(sourceFile *ast.SourceFile) core.ModuleKind + GetEmitSyntaxForUsageLocation(sourceFile *ast.SourceFile, usage *ast.Expression) core.ResolutionMode GetImpliedNodeFormatForEmit(sourceFile *ast.SourceFile) core.ModuleKind GetResolvedModule(currentSourceFile *ast.SourceFile, moduleReference string) *ast.SourceFile } @@ -13749,23 +13750,22 @@ func (c *Checker) isOnlyImportableAsDefault(usage *ast.Node, resolvedModule *ast } func (c *Checker) canHaveSyntheticDefault(file *ast.Node, moduleSymbol *ast.Symbol, dontResolveAlias bool, usage *ast.Node) bool { - // !!! - // var usageMode ResolutionMode - // if file != nil { - // usageMode = c.getEmitSyntaxForModuleSpecifierExpression(usage) - // } - // if file != nil && usageMode != core.ModuleKindNone { - // targetMode := host.getImpliedNodeFormatForEmit(file) - // if usageMode == core.ModuleKindESNext && targetMode == core.ModuleKindCommonJS && core.ModuleKindNode16 <= c.moduleKind && c.moduleKind <= core.ModuleKindNodeNext { - // // In Node.js, CommonJS modules always have a synthetic default when imported into ESM - // return true - // } - // if usageMode == core.ModuleKindESNext && targetMode == core.ModuleKindESNext { - // // No matter what the `module` setting is, if we're confident that both files - // // are ESM, there cannot be a synthetic default. - // return false - // } - // } + var usageMode core.ResolutionMode + if file != nil { + usageMode = c.getEmitSyntaxForModuleSpecifierExpression(usage) + } + if file != nil && usageMode != core.ModuleKindNone { + targetMode := c.program.GetImpliedNodeFormatForEmit(file.AsSourceFile()) + if usageMode == core.ModuleKindESNext && targetMode == core.ModuleKindCommonJS && core.ModuleKindNode16 <= c.moduleKind && c.moduleKind <= core.ModuleKindNodeNext { + // In Node.js, CommonJS modules always have a synthetic default when imported into ESM + return true + } + if usageMode == core.ModuleKindESNext && targetMode == core.ModuleKindESNext { + // No matter what the `module` setting is, if we're confident that both files + // are ESM, there cannot be a synthetic default. + return false + } + } if !c.allowSyntheticDefaultImports { return false } @@ -13794,10 +13794,9 @@ func (c *Checker) canHaveSyntheticDefault(file *ast.Node, moduleSymbol *ast.Symb } func (c *Checker) getEmitSyntaxForModuleSpecifierExpression(usage *ast.Node) core.ResolutionMode { - // !!! - // if isStringLiteralLike(usage) { - // return host.getEmitSyntaxForUsageLocation(ast.GetSourceFileOfNode(usage), usage) - // } + if ast.IsStringLiteralLike(usage) { + return c.program.GetEmitSyntaxForUsageLocation(ast.GetSourceFileOfNode(usage), usage) + } return core.ModuleKindNone } diff --git a/internal/compiler/fileloader.go b/internal/compiler/fileloader.go index 0b35e5d91a..ea7fcd35e3 100644 --- a/internal/compiler/fileloader.go +++ b/internal/compiler/fileloader.go @@ -223,7 +223,7 @@ func (t *parseTask) start(loader *fileLoader) { func (p *fileLoader) parseSourceFile(fileName string) *ast.SourceFile { path := tspath.ToPath(fileName, p.host.GetCurrentDirectory(), p.host.FS().UseCaseSensitiveFileNames()) - sourceFile := p.host.GetSourceFile(fileName, path, p.compilerOptions.GetEmitScriptTarget()) + sourceFile := p.host.GetSourceFile(fileName, path, p.compilerOptions.GetEmitScriptTarget(), p.resolver.GetPackageScopeForPath(string(path))) return sourceFile } diff --git a/internal/compiler/host.go b/internal/compiler/host.go index 073be18e69..b5aa39080c 100644 --- a/internal/compiler/host.go +++ b/internal/compiler/host.go @@ -2,6 +2,7 @@ package compiler import ( "github.com/microsoft/typescript-go/internal/ast" + "github.com/microsoft/typescript-go/internal/compiler/packagejson" "github.com/microsoft/typescript-go/internal/core" "github.com/microsoft/typescript-go/internal/parser" "github.com/microsoft/typescript-go/internal/scanner" @@ -15,7 +16,7 @@ type CompilerHost interface { GetCurrentDirectory() string NewLine() string Trace(msg string) - GetSourceFile(fileName string, path tspath.Path, languageVersion core.ScriptTarget) *ast.SourceFile + GetSourceFile(fileName string, path tspath.Path, languageVersion core.ScriptTarget, packageJsonScope *packagejson.InfoCacheEntry) *ast.SourceFile } type FileInfo struct { @@ -68,10 +69,15 @@ func (h *compilerHost) Trace(msg string) { //!!! TODO: implement } -func (h *compilerHost) GetSourceFile(fileName string, path tspath.Path, languageVersion core.ScriptTarget) *ast.SourceFile { +func (h *compilerHost) GetSourceFile(fileName string, path tspath.Path, languageVersion core.ScriptTarget, packageJsonScope *packagejson.InfoCacheEntry) *ast.SourceFile { text, _ := h.FS().ReadFile(fileName) if tspath.FileExtensionIs(fileName, tspath.ExtensionJson) { return parser.ParseJSONText(fileName, path, text) } - return parser.ParseSourceFile(fileName, path, text, languageVersion, scanner.JSDocParsingModeParseForTypeErrors) + file := parser.ParseSourceFile(fileName, path, text, languageVersion, scanner.JSDocParsingModeParseForTypeErrors) + file.PackageJsonScope = packageJsonScope + if h.options != nil { + file.ImpliedNodeFormat = ast.GetImpliedNodeFormatForEmitWorker(file, h.options) + } + return file } diff --git a/internal/compiler/program.go b/internal/compiler/program.go index 91754a537b..01685ea57d 100644 --- a/internal/compiler/program.go +++ b/internal/compiler/program.go @@ -418,6 +418,10 @@ func (p *Program) GetImpliedNodeFormatForEmit(sourceFile *ast.SourceFile) core.R return ast.GetImpliedNodeFormatForEmitWorker(sourceFile, p.compilerOptions) } +func (p *Program) GetEmitSyntaxForUsageLocation(sourceFile *ast.SourceFile, usage *ast.Expression) core.ResolutionMode { + return ast.GetEmitSyntaxForUsageLocationWorker(sourceFile, usage, p.compilerOptions) +} + func (p *Program) CommonSourceDirectory() string { p.commonSourceDirectoryOnce.Do(func() { var files []string diff --git a/internal/ls/host.go b/internal/ls/host.go index af0a8a226a..32c9800654 100644 --- a/internal/ls/host.go +++ b/internal/ls/host.go @@ -3,6 +3,7 @@ package ls import ( "github.com/microsoft/typescript-go/internal/ast" "github.com/microsoft/typescript-go/internal/compiler" + "github.com/microsoft/typescript-go/internal/compiler/packagejson" "github.com/microsoft/typescript-go/internal/core" "github.com/microsoft/typescript-go/internal/tspath" "github.com/microsoft/typescript-go/internal/vfs" @@ -19,7 +20,7 @@ type Host interface { GetRootFileNames() []string // GetCompilerOptions was called GetCompilationSettings in the original code. GetCompilerOptions() *core.CompilerOptions - GetSourceFile(fileName string, path tspath.Path, languageVersion core.ScriptTarget) *ast.SourceFile + GetSourceFile(fileName string, path tspath.Path, languageVersion core.ScriptTarget, packageJsonScope *packagejson.InfoCacheEntry) *ast.SourceFile // This responsibility was moved from the language service to the project, // because they were bidirectionally interdependent. GetProgram() *compiler.Program diff --git a/internal/ls/languageservice.go b/internal/ls/languageservice.go index 815278749b..05d8c5c625 100644 --- a/internal/ls/languageservice.go +++ b/internal/ls/languageservice.go @@ -3,6 +3,7 @@ package ls import ( "github.com/microsoft/typescript-go/internal/ast" "github.com/microsoft/typescript-go/internal/compiler" + "github.com/microsoft/typescript-go/internal/compiler/packagejson" "github.com/microsoft/typescript-go/internal/core" "github.com/microsoft/typescript-go/internal/tspath" "github.com/microsoft/typescript-go/internal/vfs" @@ -46,8 +47,8 @@ func (l *LanguageService) Trace(msg string) { } // GetSourceFile implements compiler.CompilerHost. -func (l *LanguageService) GetSourceFile(fileName string, path tspath.Path, languageVersion core.ScriptTarget) *ast.SourceFile { - return l.host.GetSourceFile(fileName, path, languageVersion) +func (l *LanguageService) GetSourceFile(fileName string, path tspath.Path, languageVersion core.ScriptTarget, packageJsonScope *packagejson.InfoCacheEntry) *ast.SourceFile { + return l.host.GetSourceFile(fileName, path, languageVersion, packageJsonScope) } // GetProgram updates the program if the project version has changed. diff --git a/internal/project/project.go b/internal/project/project.go index 372a1db721..d0b562a104 100644 --- a/internal/project/project.go +++ b/internal/project/project.go @@ -8,6 +8,7 @@ import ( "github.com/microsoft/typescript-go/internal/ast" "github.com/microsoft/typescript-go/internal/collections" "github.com/microsoft/typescript-go/internal/compiler" + "github.com/microsoft/typescript-go/internal/compiler/packagejson" "github.com/microsoft/typescript-go/internal/core" "github.com/microsoft/typescript-go/internal/ls" "github.com/microsoft/typescript-go/internal/tspath" @@ -124,7 +125,7 @@ func (p *Project) GetRootFileNames() []string { } // GetSourceFile implements LanguageServiceHost. -func (p *Project) GetSourceFile(fileName string, path tspath.Path, languageVersion core.ScriptTarget) *ast.SourceFile { +func (p *Project) GetSourceFile(fileName string, path tspath.Path, languageVersion core.ScriptTarget, packageJsonScope *packagejson.InfoCacheEntry) *ast.SourceFile { scriptKind := p.getScriptKind(fileName) if scriptInfo := p.getOrCreateScriptInfoAndAttachToProject(fileName, scriptKind); scriptInfo != nil { var ( diff --git a/internal/testutil/harnessutil/harnessutil.go b/internal/testutil/harnessutil/harnessutil.go index af238cb117..d1372a7bf9 100644 --- a/internal/testutil/harnessutil/harnessutil.go +++ b/internal/testutil/harnessutil/harnessutil.go @@ -16,6 +16,7 @@ import ( "github.com/microsoft/typescript-go/internal/ast" "github.com/microsoft/typescript-go/internal/bundled" "github.com/microsoft/typescript-go/internal/compiler" + "github.com/microsoft/typescript-go/internal/compiler/packagejson" "github.com/microsoft/typescript-go/internal/core" "github.com/microsoft/typescript-go/internal/parser" "github.com/microsoft/typescript-go/internal/repo" @@ -355,7 +356,7 @@ type cachedCompilerHost struct { var sourceFileCache sync.Map -func (h *cachedCompilerHost) GetSourceFile(fileName string, path tspath.Path, languageVersion core.ScriptTarget) *ast.SourceFile { +func (h *cachedCompilerHost) GetSourceFile(fileName string, path tspath.Path, languageVersion core.ScriptTarget, packageJsonScope *packagejson.InfoCacheEntry) *ast.SourceFile { text, _ := h.FS().ReadFile(fileName) type sourceFileCacheKey struct { @@ -385,6 +386,10 @@ func (h *cachedCompilerHost) GetSourceFile(fileName string, path tspath.Path, la } else { // !!! JSDocParsingMode sourceFile = parser.ParseSourceFile(fileName, path, text, languageVersion, scanner.JSDocParsingModeParseAll) + sourceFile.PackageJsonScope = packageJsonScope + if h.options != nil { + sourceFile.ImpliedNodeFormat = ast.GetEmitModuleFormatOfFileWorker(sourceFile, h.options) + } } result, _ := sourceFileCache.LoadOrStore(key, sourceFile) diff --git a/internal/transformers/importelision_test.go b/internal/transformers/importelision_test.go index a6a80868af..ecf49b1692 100644 --- a/internal/transformers/importelision_test.go +++ b/internal/transformers/importelision_test.go @@ -13,12 +13,13 @@ import ( ) type fakeProgram struct { - singleThreaded bool - compilerOptions *core.CompilerOptions - files []*ast.SourceFile - getEmitModuleFormatOfFile func(sourceFile *ast.SourceFile) core.ModuleKind - getImpliedNodeFormatForEmit func(sourceFile *ast.SourceFile) core.ModuleKind - getResolvedModule func(currentSourceFile *ast.SourceFile, moduleReference string) *ast.SourceFile + singleThreaded bool + compilerOptions *core.CompilerOptions + files []*ast.SourceFile + getEmitModuleFormatOfFile func(sourceFile *ast.SourceFile) core.ModuleKind + getEmitSyntaxForUsageLocation func(sourceFile *ast.SourceFile, usage *ast.Expression) core.ResolutionMode + getImpliedNodeFormatForEmit func(sourceFile *ast.SourceFile) core.ModuleKind + getResolvedModule func(currentSourceFile *ast.SourceFile, moduleReference string) *ast.SourceFile } func (p *fakeProgram) Options() *core.CompilerOptions { @@ -45,6 +46,10 @@ func (p *fakeProgram) GetEmitModuleFormatOfFile(sourceFile *ast.SourceFile) core return p.getEmitModuleFormatOfFile(sourceFile) } +func (p *fakeProgram) GetEmitSyntaxForUsageLocation(sourceFile *ast.SourceFile, usage *ast.Expression) core.ResolutionMode { + return p.getEmitSyntaxForUsageLocation(sourceFile, usage) +} + func (p *fakeProgram) GetImpliedNodeFormatForEmit(sourceFile *ast.SourceFile) core.ModuleKind { return p.getImpliedNodeFormatForEmit(sourceFile) } @@ -108,6 +113,9 @@ func TestImportElision(t *testing.T) { getEmitModuleFormatOfFile: func(sourceFile *ast.SourceFile) core.ModuleKind { return core.ModuleKindESNext }, + getEmitSyntaxForUsageLocation: func(sourceFile *ast.SourceFile, usage *ast.Expression) core.ResolutionMode { + return core.ResolutionModeESM + }, getImpliedNodeFormatForEmit: func(sourceFile *ast.SourceFile) core.ModuleKind { return core.ModuleKindESNext }, diff --git a/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=esnext).errors.txt b/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=esnext).errors.txt new file mode 100644 index 0000000000..243d584233 --- /dev/null +++ b/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=esnext).errors.txt @@ -0,0 +1,20 @@ +/index.ts(7,8): error TS2339: Property 'default' does not exist on type 'typeof import("/node_modules/mdast-util-to-string/index")'. + + +==== /node_modules/mdast-util-to-string/package.json (0 errors) ==== + { "type": "module" } + +==== /node_modules/mdast-util-to-string/index.d.ts (0 errors) ==== + export function toString(): string; + +==== /index.ts (1 errors) ==== + import mdast, { toString } from 'mdast-util-to-string'; + mdast; + mdast.toString(); + + const mdast2 = await import('mdast-util-to-string'); + mdast2.toString(); + mdast2.default; + ~~~~~~~ +!!! error TS2339: Property 'default' does not exist on type 'typeof import("/node_modules/mdast-util-to-string/index")'. + \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=esnext).errors.txt.diff b/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=esnext).errors.txt.diff index 597c1fbc0d..b2a75ee920 100644 --- a/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=esnext).errors.txt.diff +++ b/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=esnext).errors.txt.diff @@ -1,28 +1,19 @@ --- old.esmNoSynthesizedDefault(module=esnext).errors.txt +++ new.esmNoSynthesizedDefault(module=esnext).errors.txt -@@= skipped -0, +-1 lines =@@ +@@= skipped -0, +0 lines =@@ -/index.ts(1,8): error TS1192: Module '"/node_modules/mdast-util-to-string/index"' has no default export. --/index.ts(7,8): error TS2339: Property 'default' does not exist on type 'typeof import("/node_modules/mdast-util-to-string/index")'. -- -- --==== /node_modules/mdast-util-to-string/package.json (0 errors) ==== -- { "type": "module" } -- --==== /node_modules/mdast-util-to-string/index.d.ts (0 errors) ==== -- export function toString(): string; -- + /index.ts(7,8): error TS2339: Property 'default' does not exist on type 'typeof import("/node_modules/mdast-util-to-string/index")'. + + +@@= skipped -7, +6 lines =@@ + ==== /node_modules/mdast-util-to-string/index.d.ts (0 errors) ==== + export function toString(): string; + -==== /index.ts (2 errors) ==== -- import mdast, { toString } from 'mdast-util-to-string'; ++==== /index.ts (1 errors) ==== + import mdast, { toString } from 'mdast-util-to-string'; - ~~~~~ -!!! error TS1192: Module '"/node_modules/mdast-util-to-string/index"' has no default export. -- mdast; -- mdast.toString(); -- -- const mdast2 = await import('mdast-util-to-string'); -- mdast2.toString(); -- mdast2.default; -- ~~~~~~~ --!!! error TS2339: Property 'default' does not exist on type 'typeof import("/node_modules/mdast-util-to-string/index")'. -- -@@= skipped --1, +1 lines =@@ -+ + mdast; + mdast.toString(); + diff --git a/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=esnext).symbols b/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=esnext).symbols index 7a96977509..240b767551 100644 --- a/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=esnext).symbols +++ b/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=esnext).symbols @@ -13,9 +13,7 @@ mdast; >mdast : Symbol(mdast, Decl(index.ts, 0, 6)) mdast.toString(); ->mdast.toString : Symbol(toString, Decl(index.d.ts, 0, 0)) >mdast : Symbol(mdast, Decl(index.ts, 0, 6)) ->toString : Symbol(toString, Decl(index.d.ts, 0, 0)) const mdast2 = await import('mdast-util-to-string'); >mdast2 : Symbol(mdast2, Decl(index.ts, 4, 5)) @@ -26,7 +24,5 @@ mdast2.toString(); >toString : Symbol(toString, Decl(index.d.ts, 0, 0)) mdast2.default; ->mdast2.default : Symbol(default) >mdast2 : Symbol(mdast2, Decl(index.ts, 4, 5)) ->default : Symbol(default) diff --git a/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=esnext).symbols.diff b/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=esnext).symbols.diff index 9c53ca38b5..bc72e2559a 100644 --- a/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=esnext).symbols.diff +++ b/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=esnext).symbols.diff @@ -1,12 +1,6 @@ --- old.esmNoSynthesizedDefault(module=esnext).symbols +++ new.esmNoSynthesizedDefault(module=esnext).symbols -@@= skipped -12, +12 lines =@@ - >mdast : Symbol(mdast, Decl(index.ts, 0, 6)) - - mdast.toString(); -+>mdast.toString : Symbol(toString, Decl(index.d.ts, 0, 0)) - >mdast : Symbol(mdast, Decl(index.ts, 0, 6)) -+>toString : Symbol(toString, Decl(index.d.ts, 0, 0)) +@@= skipped -16, +16 lines =@@ const mdast2 = await import('mdast-util-to-string'); >mdast2 : Symbol(mdast2, Decl(index.ts, 4, 5)) @@ -14,11 +8,3 @@ mdast2.toString(); >mdast2.toString : Symbol(toString, Decl(index.d.ts, 0, 0)) -@@= skipped -12, +13 lines =@@ - >toString : Symbol(toString, Decl(index.d.ts, 0, 0)) - - mdast2.default; -+>mdast2.default : Symbol(default) - >mdast2 : Symbol(mdast2, Decl(index.ts, 4, 5)) -+>default : Symbol(default) - diff --git a/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=esnext).types b/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=esnext).types index 50ada7a0d3..804af336dc 100644 --- a/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=esnext).types +++ b/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=esnext).types @@ -6,32 +6,32 @@ export function toString(): string; === /index.ts === import mdast, { toString } from 'mdast-util-to-string'; ->mdast : typeof import("/node_modules/mdast-util-to-string/index") +>mdast : any >toString : () => string mdast; ->mdast : typeof import("/node_modules/mdast-util-to-string/index") +>mdast : any mdast.toString(); ->mdast.toString() : string ->mdast.toString : () => string ->mdast : typeof import("/node_modules/mdast-util-to-string/index") ->toString : () => string +>mdast.toString() : any +>mdast.toString : any +>mdast : any +>toString : any const mdast2 = await import('mdast-util-to-string'); ->mdast2 : { toString: () => string; default: typeof import("/node_modules/mdast-util-to-string/index"); } ->await import('mdast-util-to-string') : { toString: () => string; default: typeof import("/node_modules/mdast-util-to-string/index"); } ->import('mdast-util-to-string') : Promise<{ toString: () => string; default: typeof import("/node_modules/mdast-util-to-string/index"); }> +>mdast2 : typeof import("/node_modules/mdast-util-to-string/index") +>await import('mdast-util-to-string') : typeof import("/node_modules/mdast-util-to-string/index") +>import('mdast-util-to-string') : Promise >'mdast-util-to-string' : "mdast-util-to-string" mdast2.toString(); >mdast2.toString() : string >mdast2.toString : () => string ->mdast2 : { toString: () => string; default: typeof import("/node_modules/mdast-util-to-string/index"); } +>mdast2 : typeof import("/node_modules/mdast-util-to-string/index") >toString : () => string mdast2.default; ->mdast2.default : typeof import("/node_modules/mdast-util-to-string/index") ->mdast2 : { toString: () => string; default: typeof import("/node_modules/mdast-util-to-string/index"); } ->default : typeof import("/node_modules/mdast-util-to-string/index") +>mdast2.default : any +>mdast2 : typeof import("/node_modules/mdast-util-to-string/index") +>default : any diff --git a/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=esnext).types.diff b/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=esnext).types.diff deleted file mode 100644 index b3305c6b1d..0000000000 --- a/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=esnext).types.diff +++ /dev/null @@ -1,48 +0,0 @@ ---- old.esmNoSynthesizedDefault(module=esnext).types -+++ new.esmNoSynthesizedDefault(module=esnext).types -@@= skipped -5, +5 lines =@@ - - === /index.ts === - import mdast, { toString } from 'mdast-util-to-string'; -->mdast : any -+>mdast : typeof import("/node_modules/mdast-util-to-string/index") - >toString : () => string - - mdast; -->mdast : any -+>mdast : typeof import("/node_modules/mdast-util-to-string/index") - - mdast.toString(); -->mdast.toString() : any -->mdast.toString : any -->mdast : any -->toString : any -+>mdast.toString() : string -+>mdast.toString : () => string -+>mdast : typeof import("/node_modules/mdast-util-to-string/index") -+>toString : () => string - - const mdast2 = await import('mdast-util-to-string'); -->mdast2 : typeof import("/node_modules/mdast-util-to-string/index") -->await import('mdast-util-to-string') : typeof import("/node_modules/mdast-util-to-string/index") -->import('mdast-util-to-string') : Promise -+>mdast2 : { toString: () => string; default: typeof import("/node_modules/mdast-util-to-string/index"); } -+>await import('mdast-util-to-string') : { toString: () => string; default: typeof import("/node_modules/mdast-util-to-string/index"); } -+>import('mdast-util-to-string') : Promise<{ toString: () => string; default: typeof import("/node_modules/mdast-util-to-string/index"); }> - >'mdast-util-to-string' : "mdast-util-to-string" - - mdast2.toString(); - >mdast2.toString() : string - >mdast2.toString : () => string -->mdast2 : typeof import("/node_modules/mdast-util-to-string/index") -+>mdast2 : { toString: () => string; default: typeof import("/node_modules/mdast-util-to-string/index"); } - >toString : () => string - - mdast2.default; -->mdast2.default : any -->mdast2 : typeof import("/node_modules/mdast-util-to-string/index") -->default : any -+>mdast2.default : typeof import("/node_modules/mdast-util-to-string/index") -+>mdast2 : { toString: () => string; default: typeof import("/node_modules/mdast-util-to-string/index"); } -+>default : typeof import("/node_modules/mdast-util-to-string/index") - diff --git a/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=preserve).errors.txt b/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=preserve).errors.txt new file mode 100644 index 0000000000..243d584233 --- /dev/null +++ b/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=preserve).errors.txt @@ -0,0 +1,20 @@ +/index.ts(7,8): error TS2339: Property 'default' does not exist on type 'typeof import("/node_modules/mdast-util-to-string/index")'. + + +==== /node_modules/mdast-util-to-string/package.json (0 errors) ==== + { "type": "module" } + +==== /node_modules/mdast-util-to-string/index.d.ts (0 errors) ==== + export function toString(): string; + +==== /index.ts (1 errors) ==== + import mdast, { toString } from 'mdast-util-to-string'; + mdast; + mdast.toString(); + + const mdast2 = await import('mdast-util-to-string'); + mdast2.toString(); + mdast2.default; + ~~~~~~~ +!!! error TS2339: Property 'default' does not exist on type 'typeof import("/node_modules/mdast-util-to-string/index")'. + \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=preserve).errors.txt.diff b/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=preserve).errors.txt.diff index 6489822525..67d9d6ad09 100644 --- a/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=preserve).errors.txt.diff +++ b/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=preserve).errors.txt.diff @@ -1,28 +1,19 @@ --- old.esmNoSynthesizedDefault(module=preserve).errors.txt +++ new.esmNoSynthesizedDefault(module=preserve).errors.txt -@@= skipped -0, +-1 lines =@@ +@@= skipped -0, +0 lines =@@ -/index.ts(1,8): error TS1192: Module '"/node_modules/mdast-util-to-string/index"' has no default export. --/index.ts(7,8): error TS2339: Property 'default' does not exist on type 'typeof import("/node_modules/mdast-util-to-string/index")'. -- -- --==== /node_modules/mdast-util-to-string/package.json (0 errors) ==== -- { "type": "module" } -- --==== /node_modules/mdast-util-to-string/index.d.ts (0 errors) ==== -- export function toString(): string; -- + /index.ts(7,8): error TS2339: Property 'default' does not exist on type 'typeof import("/node_modules/mdast-util-to-string/index")'. + + +@@= skipped -7, +6 lines =@@ + ==== /node_modules/mdast-util-to-string/index.d.ts (0 errors) ==== + export function toString(): string; + -==== /index.ts (2 errors) ==== -- import mdast, { toString } from 'mdast-util-to-string'; ++==== /index.ts (1 errors) ==== + import mdast, { toString } from 'mdast-util-to-string'; - ~~~~~ -!!! error TS1192: Module '"/node_modules/mdast-util-to-string/index"' has no default export. -- mdast; -- mdast.toString(); -- -- const mdast2 = await import('mdast-util-to-string'); -- mdast2.toString(); -- mdast2.default; -- ~~~~~~~ --!!! error TS2339: Property 'default' does not exist on type 'typeof import("/node_modules/mdast-util-to-string/index")'. -- -@@= skipped --1, +1 lines =@@ -+ + mdast; + mdast.toString(); + diff --git a/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=preserve).symbols b/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=preserve).symbols index 7a96977509..240b767551 100644 --- a/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=preserve).symbols +++ b/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=preserve).symbols @@ -13,9 +13,7 @@ mdast; >mdast : Symbol(mdast, Decl(index.ts, 0, 6)) mdast.toString(); ->mdast.toString : Symbol(toString, Decl(index.d.ts, 0, 0)) >mdast : Symbol(mdast, Decl(index.ts, 0, 6)) ->toString : Symbol(toString, Decl(index.d.ts, 0, 0)) const mdast2 = await import('mdast-util-to-string'); >mdast2 : Symbol(mdast2, Decl(index.ts, 4, 5)) @@ -26,7 +24,5 @@ mdast2.toString(); >toString : Symbol(toString, Decl(index.d.ts, 0, 0)) mdast2.default; ->mdast2.default : Symbol(default) >mdast2 : Symbol(mdast2, Decl(index.ts, 4, 5)) ->default : Symbol(default) diff --git a/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=preserve).symbols.diff b/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=preserve).symbols.diff index 2e11f50934..fd54b643c2 100644 --- a/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=preserve).symbols.diff +++ b/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=preserve).symbols.diff @@ -1,12 +1,6 @@ --- old.esmNoSynthesizedDefault(module=preserve).symbols +++ new.esmNoSynthesizedDefault(module=preserve).symbols -@@= skipped -12, +12 lines =@@ - >mdast : Symbol(mdast, Decl(index.ts, 0, 6)) - - mdast.toString(); -+>mdast.toString : Symbol(toString, Decl(index.d.ts, 0, 0)) - >mdast : Symbol(mdast, Decl(index.ts, 0, 6)) -+>toString : Symbol(toString, Decl(index.d.ts, 0, 0)) +@@= skipped -16, +16 lines =@@ const mdast2 = await import('mdast-util-to-string'); >mdast2 : Symbol(mdast2, Decl(index.ts, 4, 5)) @@ -14,11 +8,3 @@ mdast2.toString(); >mdast2.toString : Symbol(toString, Decl(index.d.ts, 0, 0)) -@@= skipped -12, +13 lines =@@ - >toString : Symbol(toString, Decl(index.d.ts, 0, 0)) - - mdast2.default; -+>mdast2.default : Symbol(default) - >mdast2 : Symbol(mdast2, Decl(index.ts, 4, 5)) -+>default : Symbol(default) - diff --git a/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=preserve).types b/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=preserve).types index 50ada7a0d3..804af336dc 100644 --- a/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=preserve).types +++ b/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=preserve).types @@ -6,32 +6,32 @@ export function toString(): string; === /index.ts === import mdast, { toString } from 'mdast-util-to-string'; ->mdast : typeof import("/node_modules/mdast-util-to-string/index") +>mdast : any >toString : () => string mdast; ->mdast : typeof import("/node_modules/mdast-util-to-string/index") +>mdast : any mdast.toString(); ->mdast.toString() : string ->mdast.toString : () => string ->mdast : typeof import("/node_modules/mdast-util-to-string/index") ->toString : () => string +>mdast.toString() : any +>mdast.toString : any +>mdast : any +>toString : any const mdast2 = await import('mdast-util-to-string'); ->mdast2 : { toString: () => string; default: typeof import("/node_modules/mdast-util-to-string/index"); } ->await import('mdast-util-to-string') : { toString: () => string; default: typeof import("/node_modules/mdast-util-to-string/index"); } ->import('mdast-util-to-string') : Promise<{ toString: () => string; default: typeof import("/node_modules/mdast-util-to-string/index"); }> +>mdast2 : typeof import("/node_modules/mdast-util-to-string/index") +>await import('mdast-util-to-string') : typeof import("/node_modules/mdast-util-to-string/index") +>import('mdast-util-to-string') : Promise >'mdast-util-to-string' : "mdast-util-to-string" mdast2.toString(); >mdast2.toString() : string >mdast2.toString : () => string ->mdast2 : { toString: () => string; default: typeof import("/node_modules/mdast-util-to-string/index"); } +>mdast2 : typeof import("/node_modules/mdast-util-to-string/index") >toString : () => string mdast2.default; ->mdast2.default : typeof import("/node_modules/mdast-util-to-string/index") ->mdast2 : { toString: () => string; default: typeof import("/node_modules/mdast-util-to-string/index"); } ->default : typeof import("/node_modules/mdast-util-to-string/index") +>mdast2.default : any +>mdast2 : typeof import("/node_modules/mdast-util-to-string/index") +>default : any diff --git a/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=preserve).types.diff b/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=preserve).types.diff deleted file mode 100644 index 0ab0ec0cac..0000000000 --- a/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=preserve).types.diff +++ /dev/null @@ -1,48 +0,0 @@ ---- old.esmNoSynthesizedDefault(module=preserve).types -+++ new.esmNoSynthesizedDefault(module=preserve).types -@@= skipped -5, +5 lines =@@ - - === /index.ts === - import mdast, { toString } from 'mdast-util-to-string'; -->mdast : any -+>mdast : typeof import("/node_modules/mdast-util-to-string/index") - >toString : () => string - - mdast; -->mdast : any -+>mdast : typeof import("/node_modules/mdast-util-to-string/index") - - mdast.toString(); -->mdast.toString() : any -->mdast.toString : any -->mdast : any -->toString : any -+>mdast.toString() : string -+>mdast.toString : () => string -+>mdast : typeof import("/node_modules/mdast-util-to-string/index") -+>toString : () => string - - const mdast2 = await import('mdast-util-to-string'); -->mdast2 : typeof import("/node_modules/mdast-util-to-string/index") -->await import('mdast-util-to-string') : typeof import("/node_modules/mdast-util-to-string/index") -->import('mdast-util-to-string') : Promise -+>mdast2 : { toString: () => string; default: typeof import("/node_modules/mdast-util-to-string/index"); } -+>await import('mdast-util-to-string') : { toString: () => string; default: typeof import("/node_modules/mdast-util-to-string/index"); } -+>import('mdast-util-to-string') : Promise<{ toString: () => string; default: typeof import("/node_modules/mdast-util-to-string/index"); }> - >'mdast-util-to-string' : "mdast-util-to-string" - - mdast2.toString(); - >mdast2.toString() : string - >mdast2.toString : () => string -->mdast2 : typeof import("/node_modules/mdast-util-to-string/index") -+>mdast2 : { toString: () => string; default: typeof import("/node_modules/mdast-util-to-string/index"); } - >toString : () => string - - mdast2.default; -->mdast2.default : any -->mdast2 : typeof import("/node_modules/mdast-util-to-string/index") -->default : any -+>mdast2.default : typeof import("/node_modules/mdast-util-to-string/index") -+>mdast2 : { toString: () => string; default: typeof import("/node_modules/mdast-util-to-string/index"); } -+>default : typeof import("/node_modules/mdast-util-to-string/index") - diff --git a/testdata/baselines/reference/submodule/compiler/modulePreserve4.errors.txt b/testdata/baselines/reference/submodule/compiler/modulePreserve4.errors.txt index b458497d9a..278f546051 100644 --- a/testdata/baselines/reference/submodule/compiler/modulePreserve4.errors.txt +++ b/testdata/baselines/reference/submodule/compiler/modulePreserve4.errors.txt @@ -1,4 +1,5 @@ /a.js(2,1): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. +/f.cts(1,1): error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. /g.js(1,1): error TS2304: Cannot find name 'exports'. /main1.ts(1,13): error TS2305: Module '"/a"' has no exported member 'y'. /main1.ts(3,12): error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. @@ -10,12 +11,18 @@ /main2.mts(5,12): error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. /main2.mts(19,16): error TS2306: File '/g.js' is not a module. /main2.mts(20,21): error TS2306: File '/g.js' is not a module. +/main3.cjs(1,10): error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. /main3.cjs(1,13): error TS2305: Module '"/a"' has no exported member 'y'. /main3.cjs(3,12): error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. +/main3.cjs(5,8): error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. /main3.cjs(6,12): error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. +/main3.cjs(8,8): error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. /main3.cjs(9,12): error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. +/main3.cjs(10,8): error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. /main3.cjs(11,12): error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. +/main3.cjs(12,8): error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. /main3.cjs(13,12): error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. +/main3.cjs(14,8): error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. /main3.cjs(15,12): error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. /main3.cjs(17,16): error TS2306: File '/g.js' is not a module. /main3.cjs(18,12): error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. @@ -43,8 +50,10 @@ ==== /e.mts (0 errors) ==== export = 0; -==== /f.cts (0 errors) ==== +==== /f.cts (1 errors) ==== export default 0; + ~~~~~~~~~~~~~~~~~ +!!! error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. ==== /g.js (1 errors) ==== exports.default = 0; @@ -127,8 +136,10 @@ ~~~~~ !!! error TS2306: File '/g.js' is not a module. -==== /main3.cjs (9 errors) ==== +==== /main3.cjs (15 errors) ==== import { x, y } from "./a"; // No y + ~ +!!! error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. ~ !!! error TS2305: Module '"/a"' has no exported member 'y'. import a1 = require("./a"); // Error in JS @@ -137,23 +148,33 @@ !!! error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. import b1 from "./b"; // 0 + ~~ +!!! error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. const b2 = require("./b"); // { default: 0 } ~~~~~~~ !!! error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. import c1 from "./c"; // { default: [Function: default] } + ~~ +!!! error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. const c2 = require("./c"); // { default: [Function: default] } ~~~~~~~ !!! error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. import d1 from "./d"; // [Function: default] + ~~ +!!! error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. const d2 = require("./d"); // [Function: default] ~~~~~~~ !!! error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. import e1 from "./e.mjs"; // 0 + ~~ +!!! error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. const e2 = require("./e.mjs"); // 0 ~~~~~~~ !!! error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. import f1 from "./f.cjs"; // 0 + ~~ +!!! error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. const f2 = require("./f.cjs"); // { default: 0 } ~~~~~~~ !!! error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. diff --git a/testdata/baselines/reference/submodule/compiler/modulePreserve4.errors.txt.diff b/testdata/baselines/reference/submodule/compiler/modulePreserve4.errors.txt.diff index 3c77f6459f..b474fc781d 100644 --- a/testdata/baselines/reference/submodule/compiler/modulePreserve4.errors.txt.diff +++ b/testdata/baselines/reference/submodule/compiler/modulePreserve4.errors.txt.diff @@ -2,7 +2,7 @@ +++ new.modulePreserve4.errors.txt @@= skipped -0, +0 lines =@@ /a.js(2,1): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. --/f.cts(1,1): error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. + /f.cts(1,1): error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. -/main1.ts(1,13): error TS2305: Module '"./a"' has no exported member 'y'. +/g.js(1,1): error TS2304: Cannot find name 'exports'. +/main1.ts(1,13): error TS2305: Module '"/a"' has no exported member 'y'. @@ -27,12 +27,18 @@ -/main3.cjs(17,8): error TS1293: ESM syntax is not allowed in a CommonJS module when 'module' is set to 'preserve'. +/main2.mts(19,16): error TS2306: File '/g.js' is not a module. +/main2.mts(20,21): error TS2306: File '/g.js' is not a module. ++/main3.cjs(1,10): error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. +/main3.cjs(1,13): error TS2305: Module '"/a"' has no exported member 'y'. +/main3.cjs(3,12): error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. ++/main3.cjs(5,8): error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. +/main3.cjs(6,12): error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. ++/main3.cjs(8,8): error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. +/main3.cjs(9,12): error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. ++/main3.cjs(10,8): error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. +/main3.cjs(11,12): error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. ++/main3.cjs(12,8): error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. +/main3.cjs(13,12): error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. ++/main3.cjs(14,8): error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. +/main3.cjs(15,12): error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. +/main3.cjs(17,16): error TS2306: File '/g.js' is not a module. +/main3.cjs(18,12): error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. @@ -41,15 +47,9 @@ ==== /a.js (1 errors) ==== -@@= skipped -38, +42 lines =@@ - ==== /e.mts (0 errors) ==== - export = 0; - --==== /f.cts (1 errors) ==== -+==== /f.cts (0 errors) ==== - export default 0; -- ~~~~~~~~~~~~~~~~~ --!!! error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. +@@= skipped -43, +54 lines =@@ + ~~~~~~~~~~~~~~~~~ + !!! error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. -==== /g.js (0 errors) ==== +==== /g.js (1 errors) ==== @@ -66,7 +66,7 @@ import a1 = require("./a"); // { x: 0 } const a2 = require("./a"); // Error in TS ~~~~~~~ -@@= skipped -38, +38 lines =@@ +@@= skipped -33, +35 lines =@@ d3.default(); import e1 from "./e.mjs"; // 0 @@ -112,10 +112,12 @@ + ~~~~~ +!!! error TS2306: File '/g.js' is not a module. - ==== /main3.cjs (9 errors) ==== +-==== /main3.cjs (9 errors) ==== ++==== /main3.cjs (15 errors) ==== import { x, y } from "./a"; // No y -- ~ + ~ -!!! error TS1293: ESM syntax is not allowed in a CommonJS module when 'module' is set to 'preserve'. ++!!! error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. ~ -!!! error TS2305: Module '"./a"' has no exported member 'y'. +!!! error TS2305: Module '"/a"' has no exported member 'y'. @@ -127,33 +129,38 @@ +!!! error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. import b1 from "./b"; // 0 -- ~~ + ~~ -!!! error TS1293: ESM syntax is not allowed in a CommonJS module when 'module' is set to 'preserve'. ++!!! error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. const b2 = require("./b"); // { default: 0 } + ~~~~~~~ +!!! error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. import c1 from "./c"; // { default: [Function: default] } -- ~~ + ~~ -!!! error TS1293: ESM syntax is not allowed in a CommonJS module when 'module' is set to 'preserve'. ++!!! error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. const c2 = require("./c"); // { default: [Function: default] } + ~~~~~~~ +!!! error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. import d1 from "./d"; // [Function: default] -- ~~ + ~~ -!!! error TS1293: ESM syntax is not allowed in a CommonJS module when 'module' is set to 'preserve'. ++!!! error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. const d2 = require("./d"); // [Function: default] + ~~~~~~~ +!!! error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. import e1 from "./e.mjs"; // 0 -- ~~ + ~~ -!!! error TS1293: ESM syntax is not allowed in a CommonJS module when 'module' is set to 'preserve'. ++!!! error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. const e2 = require("./e.mjs"); // 0 + ~~~~~~~ +!!! error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. import f1 from "./f.cjs"; // 0 -- ~~ + ~~ -!!! error TS1293: ESM syntax is not allowed in a CommonJS module when 'module' is set to 'preserve'. ++!!! error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. const f2 = require("./f.cjs"); // { default: 0 } + ~~~~~~~ +!!! error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. diff --git a/testdata/baselines/reference/submodule/compiler/modulePreserve4.types b/testdata/baselines/reference/submodule/compiler/modulePreserve4.types index 9d260f3529..7ac808077c 100644 --- a/testdata/baselines/reference/submodule/compiler/modulePreserve4.types +++ b/testdata/baselines/reference/submodule/compiler/modulePreserve4.types @@ -135,7 +135,7 @@ d3.default(); >default : () => void import e1 from "./e.mjs"; // 0 ->e1 : 0 +>e1 : any import e2 = require("./e.mjs"); // 0 >e2 : 0 @@ -212,7 +212,7 @@ import d2 = require("./d"); // [Function: default] >d2 : () => void import e1 from "./e.mjs"; // 0 ->e1 : 0 +>e1 : any import e2 = require("./e.mjs"); // 0 >e2 : 0 diff --git a/testdata/baselines/reference/submodule/compiler/modulePreserve4.types.diff b/testdata/baselines/reference/submodule/compiler/modulePreserve4.types.diff index a033c92c10..4889c52ecb 100644 --- a/testdata/baselines/reference/submodule/compiler/modulePreserve4.types.diff +++ b/testdata/baselines/reference/submodule/compiler/modulePreserve4.types.diff @@ -69,16 +69,7 @@ >default : 0 import c1 from "./c"; // { default: [Function: default] } -@@= skipped -72, +72 lines =@@ - >default : () => void - - import e1 from "./e.mjs"; // 0 -->e1 : any -+>e1 : 0 - - import e2 = require("./e.mjs"); // 0 - >e2 : 0 -@@= skipped -9, +9 lines =@@ +@@= skipped -81, +81 lines =@@ >f1 : 0 import f2 = require("./f.cjs"); // { default: 0 } @@ -147,16 +138,7 @@ import c1 from "./c"; // { default: [Function: default] } >c1 : { default: () => void; } -@@= skipped -15, +15 lines =@@ - >d2 : () => void - - import e1 from "./e.mjs"; // 0 -->e1 : any -+>e1 : 0 - - import e2 = require("./e.mjs"); // 0 - >e2 : 0 -@@= skipped -9, +9 lines =@@ +@@= skipped -24, +24 lines =@@ >f1 : 0 import f2 = require("./f.cjs"); // { default: 0 } diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJs1(module=node16).types b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJs1(module=node16).types index 629022de76..0a0415bc60 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJs1(module=node16).types +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJs1(module=node16).types @@ -334,33 +334,33 @@ const _m36 = import("./index"); >"./index" : "./index" const _m37 = import("./subfolder"); ->_m37 : Promise ->import("./subfolder") : Promise +>_m37 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>import("./subfolder") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder" : "./subfolder" const _m38 = import("./subfolder/"); ->_m38 : Promise ->import("./subfolder/") : Promise +>_m38 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>import("./subfolder/") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder/" : "./subfolder/" const _m39 = import("./subfolder/index"); ->_m39 : Promise ->import("./subfolder/index") : Promise +>_m39 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>import("./subfolder/index") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder/index" : "./subfolder/index" const _m40 = import("./subfolder2"); ->_m40 : Promise ->import("./subfolder2") : Promise +>_m40 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>import("./subfolder2") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2" : "./subfolder2" const _m41 = import("./subfolder2/"); ->_m41 : Promise ->import("./subfolder2/") : Promise +>_m41 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>import("./subfolder2/") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2/" : "./subfolder2/" const _m42 = import("./subfolder2/index"); ->_m42 : Promise ->import("./subfolder2/index") : Promise +>_m42 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>import("./subfolder2/index") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2/index" : "./subfolder2/index" const _m43 = import("./subfolder2/another"); @@ -640,33 +640,33 @@ const _m36 = import("./index"); >"./index" : "./index" const _m37 = import("./subfolder"); ->_m37 : Promise ->import("./subfolder") : Promise +>_m37 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>import("./subfolder") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder" : "./subfolder" const _m38 = import("./subfolder/"); ->_m38 : Promise ->import("./subfolder/") : Promise +>_m38 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>import("./subfolder/") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder/" : "./subfolder/" const _m39 = import("./subfolder/index"); ->_m39 : Promise ->import("./subfolder/index") : Promise +>_m39 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>import("./subfolder/index") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder/index" : "./subfolder/index" const _m40 = import("./subfolder2"); ->_m40 : Promise ->import("./subfolder2") : Promise +>_m40 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>import("./subfolder2") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2" : "./subfolder2" const _m41 = import("./subfolder2/"); ->_m41 : Promise ->import("./subfolder2/") : Promise +>_m41 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>import("./subfolder2/") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2/" : "./subfolder2/" const _m42 = import("./subfolder2/index"); ->_m42 : Promise ->import("./subfolder2/index") : Promise +>_m42 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>import("./subfolder2/index") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2/index" : "./subfolder2/index" const _m43 = import("./subfolder2/another"); @@ -945,33 +945,33 @@ const _m36 = import("./index"); >"./index" : "./index" const _m37 = import("./subfolder"); ->_m37 : Promise ->import("./subfolder") : Promise +>_m37 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>import("./subfolder") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder" : "./subfolder" const _m38 = import("./subfolder/"); ->_m38 : Promise ->import("./subfolder/") : Promise +>_m38 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>import("./subfolder/") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder/" : "./subfolder/" const _m39 = import("./subfolder/index"); ->_m39 : Promise ->import("./subfolder/index") : Promise +>_m39 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>import("./subfolder/index") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder/index" : "./subfolder/index" const _m40 = import("./subfolder2"); ->_m40 : Promise ->import("./subfolder2") : Promise +>_m40 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>import("./subfolder2") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2" : "./subfolder2" const _m41 = import("./subfolder2/"); ->_m41 : Promise ->import("./subfolder2/") : Promise +>_m41 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>import("./subfolder2/") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2/" : "./subfolder2/" const _m42 = import("./subfolder2/index"); ->_m42 : Promise ->import("./subfolder2/index") : Promise +>_m42 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>import("./subfolder2/index") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2/index" : "./subfolder2/index" const _m43 = import("./subfolder2/another"); diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJs1(module=node16).types.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJs1(module=node16).types.diff index 47f1cfe2e7..a52a3dd671 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJs1(module=node16).types.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJs1(module=node16).types.diff @@ -329,43 +329,43 @@ const _m37 = import("./subfolder"); ->_m37 : Promise ->import("./subfolder") : Promise -+>_m37 : Promise -+>import("./subfolder") : Promise ++>_m37 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>import("./subfolder") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder" : "./subfolder" const _m38 = import("./subfolder/"); ->_m38 : Promise ->import("./subfolder/") : Promise -+>_m38 : Promise -+>import("./subfolder/") : Promise ++>_m38 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>import("./subfolder/") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder/" : "./subfolder/" const _m39 = import("./subfolder/index"); ->_m39 : Promise ->import("./subfolder/index") : Promise -+>_m39 : Promise -+>import("./subfolder/index") : Promise ++>_m39 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>import("./subfolder/index") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder/index" : "./subfolder/index" const _m40 = import("./subfolder2"); ->_m40 : Promise ->import("./subfolder2") : Promise -+>_m40 : Promise -+>import("./subfolder2") : Promise ++>_m40 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>import("./subfolder2") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2" : "./subfolder2" const _m41 = import("./subfolder2/"); ->_m41 : Promise ->import("./subfolder2/") : Promise -+>_m41 : Promise -+>import("./subfolder2/") : Promise ++>_m41 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>import("./subfolder2/") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2/" : "./subfolder2/" const _m42 = import("./subfolder2/index"); ->_m42 : Promise ->import("./subfolder2/index") : Promise -+>_m42 : Promise -+>import("./subfolder2/index") : Promise ++>_m42 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>import("./subfolder2/index") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2/index" : "./subfolder2/index" const _m43 = import("./subfolder2/another"); @@ -719,43 +719,43 @@ const _m37 = import("./subfolder"); ->_m37 : Promise ->import("./subfolder") : Promise -+>_m37 : Promise -+>import("./subfolder") : Promise ++>_m37 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>import("./subfolder") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder" : "./subfolder" const _m38 = import("./subfolder/"); ->_m38 : Promise ->import("./subfolder/") : Promise -+>_m38 : Promise -+>import("./subfolder/") : Promise ++>_m38 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>import("./subfolder/") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder/" : "./subfolder/" const _m39 = import("./subfolder/index"); ->_m39 : Promise ->import("./subfolder/index") : Promise -+>_m39 : Promise -+>import("./subfolder/index") : Promise ++>_m39 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>import("./subfolder/index") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder/index" : "./subfolder/index" const _m40 = import("./subfolder2"); ->_m40 : Promise ->import("./subfolder2") : Promise -+>_m40 : Promise -+>import("./subfolder2") : Promise ++>_m40 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>import("./subfolder2") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2" : "./subfolder2" const _m41 = import("./subfolder2/"); ->_m41 : Promise ->import("./subfolder2/") : Promise -+>_m41 : Promise -+>import("./subfolder2/") : Promise ++>_m41 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>import("./subfolder2/") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2/" : "./subfolder2/" const _m42 = import("./subfolder2/index"); ->_m42 : Promise ->import("./subfolder2/index") : Promise -+>_m42 : Promise -+>import("./subfolder2/index") : Promise ++>_m42 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>import("./subfolder2/index") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2/index" : "./subfolder2/index" const _m43 = import("./subfolder2/another"); @@ -1109,43 +1109,43 @@ const _m37 = import("./subfolder"); ->_m37 : Promise ->import("./subfolder") : Promise -+>_m37 : Promise -+>import("./subfolder") : Promise ++>_m37 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>import("./subfolder") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder" : "./subfolder" const _m38 = import("./subfolder/"); ->_m38 : Promise ->import("./subfolder/") : Promise -+>_m38 : Promise -+>import("./subfolder/") : Promise ++>_m38 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>import("./subfolder/") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder/" : "./subfolder/" const _m39 = import("./subfolder/index"); ->_m39 : Promise ->import("./subfolder/index") : Promise -+>_m39 : Promise -+>import("./subfolder/index") : Promise ++>_m39 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>import("./subfolder/index") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder/index" : "./subfolder/index" const _m40 = import("./subfolder2"); ->_m40 : Promise ->import("./subfolder2") : Promise -+>_m40 : Promise -+>import("./subfolder2") : Promise ++>_m40 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>import("./subfolder2") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2" : "./subfolder2" const _m41 = import("./subfolder2/"); ->_m41 : Promise ->import("./subfolder2/") : Promise -+>_m41 : Promise -+>import("./subfolder2/") : Promise ++>_m41 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>import("./subfolder2/") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2/" : "./subfolder2/" const _m42 = import("./subfolder2/index"); ->_m42 : Promise ->import("./subfolder2/index") : Promise -+>_m42 : Promise -+>import("./subfolder2/index") : Promise ++>_m42 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>import("./subfolder2/index") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2/index" : "./subfolder2/index" const _m43 = import("./subfolder2/another"); diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJs1(module=nodenext).types b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJs1(module=nodenext).types index 629022de76..0a0415bc60 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJs1(module=nodenext).types +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJs1(module=nodenext).types @@ -334,33 +334,33 @@ const _m36 = import("./index"); >"./index" : "./index" const _m37 = import("./subfolder"); ->_m37 : Promise ->import("./subfolder") : Promise +>_m37 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>import("./subfolder") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder" : "./subfolder" const _m38 = import("./subfolder/"); ->_m38 : Promise ->import("./subfolder/") : Promise +>_m38 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>import("./subfolder/") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder/" : "./subfolder/" const _m39 = import("./subfolder/index"); ->_m39 : Promise ->import("./subfolder/index") : Promise +>_m39 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>import("./subfolder/index") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder/index" : "./subfolder/index" const _m40 = import("./subfolder2"); ->_m40 : Promise ->import("./subfolder2") : Promise +>_m40 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>import("./subfolder2") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2" : "./subfolder2" const _m41 = import("./subfolder2/"); ->_m41 : Promise ->import("./subfolder2/") : Promise +>_m41 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>import("./subfolder2/") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2/" : "./subfolder2/" const _m42 = import("./subfolder2/index"); ->_m42 : Promise ->import("./subfolder2/index") : Promise +>_m42 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>import("./subfolder2/index") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2/index" : "./subfolder2/index" const _m43 = import("./subfolder2/another"); @@ -640,33 +640,33 @@ const _m36 = import("./index"); >"./index" : "./index" const _m37 = import("./subfolder"); ->_m37 : Promise ->import("./subfolder") : Promise +>_m37 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>import("./subfolder") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder" : "./subfolder" const _m38 = import("./subfolder/"); ->_m38 : Promise ->import("./subfolder/") : Promise +>_m38 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>import("./subfolder/") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder/" : "./subfolder/" const _m39 = import("./subfolder/index"); ->_m39 : Promise ->import("./subfolder/index") : Promise +>_m39 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>import("./subfolder/index") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder/index" : "./subfolder/index" const _m40 = import("./subfolder2"); ->_m40 : Promise ->import("./subfolder2") : Promise +>_m40 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>import("./subfolder2") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2" : "./subfolder2" const _m41 = import("./subfolder2/"); ->_m41 : Promise ->import("./subfolder2/") : Promise +>_m41 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>import("./subfolder2/") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2/" : "./subfolder2/" const _m42 = import("./subfolder2/index"); ->_m42 : Promise ->import("./subfolder2/index") : Promise +>_m42 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>import("./subfolder2/index") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2/index" : "./subfolder2/index" const _m43 = import("./subfolder2/another"); @@ -945,33 +945,33 @@ const _m36 = import("./index"); >"./index" : "./index" const _m37 = import("./subfolder"); ->_m37 : Promise ->import("./subfolder") : Promise +>_m37 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>import("./subfolder") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder" : "./subfolder" const _m38 = import("./subfolder/"); ->_m38 : Promise ->import("./subfolder/") : Promise +>_m38 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>import("./subfolder/") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder/" : "./subfolder/" const _m39 = import("./subfolder/index"); ->_m39 : Promise ->import("./subfolder/index") : Promise +>_m39 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>import("./subfolder/index") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder/index" : "./subfolder/index" const _m40 = import("./subfolder2"); ->_m40 : Promise ->import("./subfolder2") : Promise +>_m40 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>import("./subfolder2") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2" : "./subfolder2" const _m41 = import("./subfolder2/"); ->_m41 : Promise ->import("./subfolder2/") : Promise +>_m41 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>import("./subfolder2/") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2/" : "./subfolder2/" const _m42 = import("./subfolder2/index"); ->_m42 : Promise ->import("./subfolder2/index") : Promise +>_m42 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>import("./subfolder2/index") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2/index" : "./subfolder2/index" const _m43 = import("./subfolder2/another"); diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJs1(module=nodenext).types.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJs1(module=nodenext).types.diff index 1efbd7d99f..2a5e0ae13e 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJs1(module=nodenext).types.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJs1(module=nodenext).types.diff @@ -329,43 +329,43 @@ const _m37 = import("./subfolder"); ->_m37 : Promise ->import("./subfolder") : Promise -+>_m37 : Promise -+>import("./subfolder") : Promise ++>_m37 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>import("./subfolder") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder" : "./subfolder" const _m38 = import("./subfolder/"); ->_m38 : Promise ->import("./subfolder/") : Promise -+>_m38 : Promise -+>import("./subfolder/") : Promise ++>_m38 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>import("./subfolder/") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder/" : "./subfolder/" const _m39 = import("./subfolder/index"); ->_m39 : Promise ->import("./subfolder/index") : Promise -+>_m39 : Promise -+>import("./subfolder/index") : Promise ++>_m39 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>import("./subfolder/index") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder/index" : "./subfolder/index" const _m40 = import("./subfolder2"); ->_m40 : Promise ->import("./subfolder2") : Promise -+>_m40 : Promise -+>import("./subfolder2") : Promise ++>_m40 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>import("./subfolder2") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2" : "./subfolder2" const _m41 = import("./subfolder2/"); ->_m41 : Promise ->import("./subfolder2/") : Promise -+>_m41 : Promise -+>import("./subfolder2/") : Promise ++>_m41 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>import("./subfolder2/") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2/" : "./subfolder2/" const _m42 = import("./subfolder2/index"); ->_m42 : Promise ->import("./subfolder2/index") : Promise -+>_m42 : Promise -+>import("./subfolder2/index") : Promise ++>_m42 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>import("./subfolder2/index") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2/index" : "./subfolder2/index" const _m43 = import("./subfolder2/another"); @@ -719,43 +719,43 @@ const _m37 = import("./subfolder"); ->_m37 : Promise ->import("./subfolder") : Promise -+>_m37 : Promise -+>import("./subfolder") : Promise ++>_m37 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>import("./subfolder") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder" : "./subfolder" const _m38 = import("./subfolder/"); ->_m38 : Promise ->import("./subfolder/") : Promise -+>_m38 : Promise -+>import("./subfolder/") : Promise ++>_m38 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>import("./subfolder/") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder/" : "./subfolder/" const _m39 = import("./subfolder/index"); ->_m39 : Promise ->import("./subfolder/index") : Promise -+>_m39 : Promise -+>import("./subfolder/index") : Promise ++>_m39 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>import("./subfolder/index") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder/index" : "./subfolder/index" const _m40 = import("./subfolder2"); ->_m40 : Promise ->import("./subfolder2") : Promise -+>_m40 : Promise -+>import("./subfolder2") : Promise ++>_m40 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>import("./subfolder2") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2" : "./subfolder2" const _m41 = import("./subfolder2/"); ->_m41 : Promise ->import("./subfolder2/") : Promise -+>_m41 : Promise -+>import("./subfolder2/") : Promise ++>_m41 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>import("./subfolder2/") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2/" : "./subfolder2/" const _m42 = import("./subfolder2/index"); ->_m42 : Promise ->import("./subfolder2/index") : Promise -+>_m42 : Promise -+>import("./subfolder2/index") : Promise ++>_m42 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>import("./subfolder2/index") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2/index" : "./subfolder2/index" const _m43 = import("./subfolder2/another"); @@ -1109,43 +1109,43 @@ const _m37 = import("./subfolder"); ->_m37 : Promise ->import("./subfolder") : Promise -+>_m37 : Promise -+>import("./subfolder") : Promise ++>_m37 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>import("./subfolder") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder" : "./subfolder" const _m38 = import("./subfolder/"); ->_m38 : Promise ->import("./subfolder/") : Promise -+>_m38 : Promise -+>import("./subfolder/") : Promise ++>_m38 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>import("./subfolder/") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder/" : "./subfolder/" const _m39 = import("./subfolder/index"); ->_m39 : Promise ->import("./subfolder/index") : Promise -+>_m39 : Promise -+>import("./subfolder/index") : Promise ++>_m39 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>import("./subfolder/index") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder/index" : "./subfolder/index" const _m40 = import("./subfolder2"); ->_m40 : Promise ->import("./subfolder2") : Promise -+>_m40 : Promise -+>import("./subfolder2") : Promise ++>_m40 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>import("./subfolder2") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2" : "./subfolder2" const _m41 = import("./subfolder2/"); ->_m41 : Promise ->import("./subfolder2/") : Promise -+>_m41 : Promise -+>import("./subfolder2/") : Promise ++>_m41 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>import("./subfolder2/") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2/" : "./subfolder2/" const _m42 = import("./subfolder2/index"); ->_m42 : Promise ->import("./subfolder2/index") : Promise -+>_m42 : Promise -+>import("./subfolder2/index") : Promise ++>_m42 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>import("./subfolder2/index") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2/index" : "./subfolder2/index" const _m43 = import("./subfolder2/another"); diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=node16).errors.txt b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=node16).errors.txt index 4658ca6470..5c37afd462 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=node16).errors.txt +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=node16).errors.txt @@ -1,15 +1,12 @@ file.js(4,1): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. index.js(3,1): error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. subfolder/file.js(3,1): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. -subfolder/index.js(3,1): error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. -==== subfolder/index.js (1 errors) ==== +==== subfolder/index.js (0 errors) ==== // cjs format file const a = {}; export = a; - ~~~~~~~~~~~ -!!! error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. ==== subfolder/file.js (1 errors) ==== // cjs format file const a = {}; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=node16).errors.txt.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=node16).errors.txt.diff index 15bd703c3b..f8742c3560 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=node16).errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=node16).errors.txt.diff @@ -6,17 +6,16 @@ -index.js(3,1): error TS8003: 'export =' can only be used in TypeScript files. -subfolder/index.js(3,1): error TS8003: 'export =' can only be used in TypeScript files. +subfolder/file.js(3,1): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. -+subfolder/index.js(3,1): error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. - ==== subfolder/index.js (1 errors) ==== -@@= skipped -8, +8 lines =@@ +-==== subfolder/index.js (1 errors) ==== ++==== subfolder/index.js (0 errors) ==== + // cjs format file const a = {}; export = a; - ~~~~~~~~~~~ +- ~~~~~~~~~~~ -!!! error TS8003: 'export =' can only be used in TypeScript files. -==== subfolder/file.js (0 errors) ==== -+!!! error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. +==== subfolder/file.js (1 errors) ==== // cjs format file const a = {}; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=nodenext).errors.txt b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=nodenext).errors.txt index 4658ca6470..5c37afd462 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=nodenext).errors.txt +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=nodenext).errors.txt @@ -1,15 +1,12 @@ file.js(4,1): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. index.js(3,1): error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. subfolder/file.js(3,1): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. -subfolder/index.js(3,1): error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. -==== subfolder/index.js (1 errors) ==== +==== subfolder/index.js (0 errors) ==== // cjs format file const a = {}; export = a; - ~~~~~~~~~~~ -!!! error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. ==== subfolder/file.js (1 errors) ==== // cjs format file const a = {}; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=nodenext).errors.txt.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=nodenext).errors.txt.diff index c72353b77b..be2cd40e6d 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=nodenext).errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=nodenext).errors.txt.diff @@ -6,17 +6,16 @@ -index.js(3,1): error TS8003: 'export =' can only be used in TypeScript files. -subfolder/index.js(3,1): error TS8003: 'export =' can only be used in TypeScript files. +subfolder/file.js(3,1): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. -+subfolder/index.js(3,1): error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. - ==== subfolder/index.js (1 errors) ==== -@@= skipped -8, +8 lines =@@ +-==== subfolder/index.js (1 errors) ==== ++==== subfolder/index.js (0 errors) ==== + // cjs format file const a = {}; export = a; - ~~~~~~~~~~~ +- ~~~~~~~~~~~ -!!! error TS8003: 'export =' can only be used in TypeScript files. -==== subfolder/file.js (0 errors) ==== -+!!! error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. +==== subfolder/file.js (1 errors) ==== // cjs format file const a = {}; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsGeneratedNameCollisions(module=node16).errors.txt b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsGeneratedNameCollisions(module=node16).errors.txt new file mode 100644 index 0000000000..6bdf1d41c6 --- /dev/null +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsGeneratedNameCollisions(module=node16).errors.txt @@ -0,0 +1,35 @@ +subfolder/index.js(2,10): error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. +subfolder/index.js(3,7): error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. +subfolder/index.js(5,14): error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. + + +==== subfolder/index.js (3 errors) ==== + // cjs format file + function require() {} + ~~~~~~~ +!!! error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. + const exports = {}; + ~~~~~~~ +!!! error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. + class Object {} + export const __esModule = false; + ~~~~~~~~~~ +!!! error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. + export {require, exports, Object}; +==== index.js (0 errors) ==== + // esm format file + function require() {} + const exports = {}; + class Object {} + export const __esModule = false; + export {require, exports, Object}; +==== package.json (0 errors) ==== + { + "name": "package", + "private": true, + "type": "module" + } +==== subfolder/package.json (0 errors) ==== + { + "type": "commonjs" + } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsGeneratedNameCollisions(module=node16).errors.txt.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsGeneratedNameCollisions(module=node16).errors.txt.diff index 9e6b831947..25d9a57b84 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsGeneratedNameCollisions(module=node16).errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsGeneratedNameCollisions(module=node16).errors.txt.diff @@ -1,43 +1,23 @@ --- old.nodeModulesAllowJsGeneratedNameCollisions(module=node16).errors.txt +++ new.nodeModulesAllowJsGeneratedNameCollisions(module=node16).errors.txt -@@= skipped -0, +-1 lines =@@ --subfolder/index.js(2,10): error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. --subfolder/index.js(3,7): error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. +@@= skipped -0, +0 lines =@@ + subfolder/index.js(2,10): error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. + subfolder/index.js(3,7): error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. -subfolder/index.js(4,7): error TS2725: Class name cannot be 'Object' when targeting ES5 with module Node16. --subfolder/index.js(5,14): error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. -- -- + subfolder/index.js(5,14): error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. + + -==== subfolder/index.js (4 errors) ==== -- // cjs format file -- function require() {} -- ~~~~~~~ --!!! error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. -- const exports = {}; -- ~~~~~~~ --!!! error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. -- class Object {} ++==== subfolder/index.js (3 errors) ==== + // cjs format file + function require() {} + ~~~~~~~ +@@= skipped -12, +11 lines =@@ + ~~~~~~~ + !!! error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. + class Object {} - ~~~~~~ -!!! error TS2725: Class name cannot be 'Object' when targeting ES5 with module Node16. -- export const __esModule = false; -- ~~~~~~~~~~ --!!! error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. -- export {require, exports, Object}; --==== index.js (0 errors) ==== -- // esm format file -- function require() {} -- const exports = {}; -- class Object {} -- export const __esModule = false; -- export {require, exports, Object}; --==== package.json (0 errors) ==== -- { -- "name": "package", -- "private": true, -- "type": "module" -- } --==== subfolder/package.json (0 errors) ==== -- { -- "type": "commonjs" -- } -@@= skipped --1, +1 lines =@@ -+ + export const __esModule = false; + ~~~~~~~~~~ + !!! error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsGeneratedNameCollisions(module=nodenext).errors.txt b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsGeneratedNameCollisions(module=nodenext).errors.txt new file mode 100644 index 0000000000..6bdf1d41c6 --- /dev/null +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsGeneratedNameCollisions(module=nodenext).errors.txt @@ -0,0 +1,35 @@ +subfolder/index.js(2,10): error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. +subfolder/index.js(3,7): error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. +subfolder/index.js(5,14): error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. + + +==== subfolder/index.js (3 errors) ==== + // cjs format file + function require() {} + ~~~~~~~ +!!! error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. + const exports = {}; + ~~~~~~~ +!!! error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. + class Object {} + export const __esModule = false; + ~~~~~~~~~~ +!!! error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. + export {require, exports, Object}; +==== index.js (0 errors) ==== + // esm format file + function require() {} + const exports = {}; + class Object {} + export const __esModule = false; + export {require, exports, Object}; +==== package.json (0 errors) ==== + { + "name": "package", + "private": true, + "type": "module" + } +==== subfolder/package.json (0 errors) ==== + { + "type": "commonjs" + } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsGeneratedNameCollisions(module=nodenext).errors.txt.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsGeneratedNameCollisions(module=nodenext).errors.txt.diff index 86755eb715..1f1bbb88a1 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsGeneratedNameCollisions(module=nodenext).errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsGeneratedNameCollisions(module=nodenext).errors.txt.diff @@ -1,43 +1,23 @@ --- old.nodeModulesAllowJsGeneratedNameCollisions(module=nodenext).errors.txt +++ new.nodeModulesAllowJsGeneratedNameCollisions(module=nodenext).errors.txt -@@= skipped -0, +-1 lines =@@ --subfolder/index.js(2,10): error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. --subfolder/index.js(3,7): error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. +@@= skipped -0, +0 lines =@@ + subfolder/index.js(2,10): error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. + subfolder/index.js(3,7): error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. -subfolder/index.js(4,7): error TS2725: Class name cannot be 'Object' when targeting ES5 with module NodeNext. --subfolder/index.js(5,14): error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. -- -- + subfolder/index.js(5,14): error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. + + -==== subfolder/index.js (4 errors) ==== -- // cjs format file -- function require() {} -- ~~~~~~~ --!!! error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. -- const exports = {}; -- ~~~~~~~ --!!! error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. -- class Object {} ++==== subfolder/index.js (3 errors) ==== + // cjs format file + function require() {} + ~~~~~~~ +@@= skipped -12, +11 lines =@@ + ~~~~~~~ + !!! error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. + class Object {} - ~~~~~~ -!!! error TS2725: Class name cannot be 'Object' when targeting ES5 with module NodeNext. -- export const __esModule = false; -- ~~~~~~~~~~ --!!! error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. -- export {require, exports, Object}; --==== index.js (0 errors) ==== -- // esm format file -- function require() {} -- const exports = {}; -- class Object {} -- export const __esModule = false; -- export {require, exports, Object}; --==== package.json (0 errors) ==== -- { -- "name": "package", -- "private": true, -- "type": "module" -- } --==== subfolder/package.json (0 errors) ==== -- { -- "type": "commonjs" -- } -@@= skipped --1, +1 lines =@@ -+ + export const __esModule = false; + ~~~~~~~~~~ + !!! error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsTopLevelAwait(module=node16).errors.txt b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsTopLevelAwait(module=node16).errors.txt index 976ff9888e..6d1336b928 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsTopLevelAwait(module=node16).errors.txt +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsTopLevelAwait(module=node16).errors.txt @@ -1,18 +1,18 @@ index.js(2,11): error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. index.js(4,5): error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. -subfolder/index.js(2,11): error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. -subfolder/index.js(4,5): error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. +subfolder/index.js(2,11): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. +subfolder/index.js(4,5): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. ==== subfolder/index.js (2 errors) ==== // cjs format file const x = await 1; ~~~~~ -!!! error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. +!!! error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. export {x}; for await (const y of []) {} ~~~~~ -!!! error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. +!!! error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. ==== index.js (2 errors) ==== // esm format file const x = await 1; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsTopLevelAwait(module=node16).errors.txt.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsTopLevelAwait(module=node16).errors.txt.diff index 7937e01c9a..6c1f3f9504 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsTopLevelAwait(module=node16).errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsTopLevelAwait(module=node16).errors.txt.diff @@ -1,26 +1,16 @@ --- old.nodeModulesAllowJsTopLevelAwait(module=node16).errors.txt +++ new.nodeModulesAllowJsTopLevelAwait(module=node16).errors.txt @@= skipped -0, +0 lines =@@ --subfolder/index.js(2,11): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. --subfolder/index.js(4,5): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. +index.js(2,11): error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. +index.js(4,5): error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. -+subfolder/index.js(2,11): error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. -+subfolder/index.js(4,5): error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. + subfolder/index.js(2,11): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. + subfolder/index.js(4,5): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. - - ==== subfolder/index.js (2 errors) ==== - // cjs format file - const x = await 1; - ~~~~~ --!!! error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. -+!!! error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. - export {x}; +@@= skipped -10, +12 lines =@@ for await (const y of []) {} ~~~~~ --!!! error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. + !!! error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. -==== index.js (0 errors) ==== -+!!! error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. +==== index.js (2 errors) ==== // esm format file const x = await 1; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsTopLevelAwait(module=nodenext).errors.txt b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsTopLevelAwait(module=nodenext).errors.txt index 976ff9888e..6d1336b928 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsTopLevelAwait(module=nodenext).errors.txt +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsTopLevelAwait(module=nodenext).errors.txt @@ -1,18 +1,18 @@ index.js(2,11): error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. index.js(4,5): error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. -subfolder/index.js(2,11): error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. -subfolder/index.js(4,5): error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. +subfolder/index.js(2,11): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. +subfolder/index.js(4,5): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. ==== subfolder/index.js (2 errors) ==== // cjs format file const x = await 1; ~~~~~ -!!! error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. +!!! error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. export {x}; for await (const y of []) {} ~~~~~ -!!! error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. +!!! error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. ==== index.js (2 errors) ==== // esm format file const x = await 1; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsTopLevelAwait(module=nodenext).errors.txt.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsTopLevelAwait(module=nodenext).errors.txt.diff index 99931fe104..88f10c32f6 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsTopLevelAwait(module=nodenext).errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsTopLevelAwait(module=nodenext).errors.txt.diff @@ -1,26 +1,16 @@ --- old.nodeModulesAllowJsTopLevelAwait(module=nodenext).errors.txt +++ new.nodeModulesAllowJsTopLevelAwait(module=nodenext).errors.txt @@= skipped -0, +0 lines =@@ --subfolder/index.js(2,11): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. --subfolder/index.js(4,5): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. +index.js(2,11): error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. +index.js(4,5): error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. -+subfolder/index.js(2,11): error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. -+subfolder/index.js(4,5): error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. + subfolder/index.js(2,11): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. + subfolder/index.js(4,5): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. - - ==== subfolder/index.js (2 errors) ==== - // cjs format file - const x = await 1; - ~~~~~ --!!! error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. -+!!! error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. - export {x}; +@@= skipped -10, +12 lines =@@ for await (const y of []) {} ~~~~~ --!!! error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. + !!! error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. -==== index.js (0 errors) ==== -+!!! error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. +==== index.js (2 errors) ==== // esm format file const x = await 1; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesCjsFormatFileAlwaysHasDefault(module=node16).types b/testdata/baselines/reference/submodule/conformance/nodeModulesCjsFormatFileAlwaysHasDefault(module=node16).types index ff082de1b8..ab01d22c9d 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesCjsFormatFileAlwaysHasDefault(module=node16).types +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesCjsFormatFileAlwaysHasDefault(module=node16).types @@ -9,8 +9,8 @@ export const a = 1; === index.ts === // esm format file import mod from "./subfolder/index.js"; ->mod : any +>mod : typeof import("subfolder/index") mod; ->mod : any +>mod : typeof import("subfolder/index") diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesCjsFormatFileAlwaysHasDefault(module=node16).types.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesCjsFormatFileAlwaysHasDefault(module=node16).types.diff index 8e9dc99119..d68c2b4d4c 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesCjsFormatFileAlwaysHasDefault(module=node16).types.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesCjsFormatFileAlwaysHasDefault(module=node16).types.diff @@ -5,9 +5,9 @@ // esm format file import mod from "./subfolder/index.js"; ->mod : typeof mod -+>mod : any ++>mod : typeof import("subfolder/index") mod; ->mod : typeof mod -+>mod : any ++>mod : typeof import("subfolder/index") diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesCjsFormatFileAlwaysHasDefault(module=nodenext).types b/testdata/baselines/reference/submodule/conformance/nodeModulesCjsFormatFileAlwaysHasDefault(module=nodenext).types index ff082de1b8..ab01d22c9d 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesCjsFormatFileAlwaysHasDefault(module=nodenext).types +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesCjsFormatFileAlwaysHasDefault(module=nodenext).types @@ -9,8 +9,8 @@ export const a = 1; === index.ts === // esm format file import mod from "./subfolder/index.js"; ->mod : any +>mod : typeof import("subfolder/index") mod; ->mod : any +>mod : typeof import("subfolder/index") diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesCjsFormatFileAlwaysHasDefault(module=nodenext).types.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesCjsFormatFileAlwaysHasDefault(module=nodenext).types.diff index d966785431..1e069638b9 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesCjsFormatFileAlwaysHasDefault(module=nodenext).types.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesCjsFormatFileAlwaysHasDefault(module=nodenext).types.diff @@ -5,9 +5,9 @@ // esm format file import mod from "./subfolder/index.js"; ->mod : typeof mod -+>mod : any ++>mod : typeof import("subfolder/index") mod; ->mod : typeof mod -+>mod : any ++>mod : typeof import("subfolder/index") diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesDeclarationEmitDynamicImportWithPackageExports.types b/testdata/baselines/reference/submodule/conformance/nodeModulesDeclarationEmitDynamicImportWithPackageExports.types index 8cea062325..2663ff2c3b 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesDeclarationEmitDynamicImportWithPackageExports.types +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesDeclarationEmitDynamicImportWithPackageExports.types @@ -15,9 +15,9 @@ export {}; === other.ts === // esm format file export const a = await import("package/cjs"); ->a : typeof import("index") ->await import("package/cjs") : typeof import("index") ->import("package/cjs") : Promise +>a : { default: typeof import("index"); } +>await import("package/cjs") : { default: typeof import("index"); } +>import("package/cjs") : Promise<{ default: typeof import("index"); }> >"package/cjs" : "package/cjs" export const b = await import("package/mjs"); @@ -55,9 +55,9 @@ export const e = await import("inner/mjs"); === other.mts === // esm format file export const a = await import("package/cjs"); ->a : typeof import("index") ->await import("package/cjs") : typeof import("index") ->import("package/cjs") : Promise +>a : { default: typeof import("index"); } +>await import("package/cjs") : { default: typeof import("index"); } +>import("package/cjs") : Promise<{ default: typeof import("index"); }> >"package/cjs" : "package/cjs" export const b = await import("package/mjs"); @@ -95,8 +95,8 @@ export const e = await import("inner/mjs"); === other.cts === // cjs format file, no TLA export const a = import("package/cjs"); ->a : Promise ->import("package/cjs") : Promise +>a : Promise<{ default: typeof import("index"); }> +>import("package/cjs") : Promise<{ default: typeof import("index"); }> >"package/cjs" : "package/cjs" export const b = import("package/mjs"); diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesDeclarationEmitDynamicImportWithPackageExports.types.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesDeclarationEmitDynamicImportWithPackageExports.types.diff index dff2497a3d..719b678e20 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesDeclarationEmitDynamicImportWithPackageExports.types.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesDeclarationEmitDynamicImportWithPackageExports.types.diff @@ -1,19 +1,6 @@ --- old.nodeModulesDeclarationEmitDynamicImportWithPackageExports.types +++ new.nodeModulesDeclarationEmitDynamicImportWithPackageExports.types -@@= skipped -14, +14 lines =@@ - === other.ts === - // esm format file - export const a = await import("package/cjs"); -->a : { default: typeof import("index"); } -->await import("package/cjs") : { default: typeof import("index"); } -->import("package/cjs") : Promise<{ default: typeof import("index"); }> -+>a : typeof import("index") -+>await import("package/cjs") : typeof import("index") -+>import("package/cjs") : Promise - >"package/cjs" : "package/cjs" - - export const b = await import("package/mjs"); -@@= skipped -18, +18 lines =@@ +@@= skipped -32, +32 lines =@@ >"package" : "package" export const f = await import("inner"); @@ -46,17 +33,6 @@ >"inner/mjs" : "inner/mjs" === other.mts === - // esm format file - export const a = await import("package/cjs"); -->a : { default: typeof import("index"); } -->await import("package/cjs") : { default: typeof import("index"); } -->import("package/cjs") : Promise<{ default: typeof import("index"); }> -+>a : typeof import("index") -+>await import("package/cjs") : typeof import("index") -+>import("package/cjs") : Promise - >"package/cjs" : "package/cjs" - - export const b = await import("package/mjs"); @@= skipped -40, +40 lines =@@ >"package" : "package" @@ -90,12 +66,7 @@ >"inner/mjs" : "inner/mjs" === other.cts === - // cjs format file, no TLA - export const a = import("package/cjs"); -->a : Promise<{ default: typeof import("index"); }> -->import("package/cjs") : Promise<{ default: typeof import("index"); }> -+>a : Promise -+>import("package/cjs") : Promise +@@= skipped -27, +27 lines =@@ >"package/cjs" : "package/cjs" export const b = import("package/mjs"); diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesExportAssignments(module=node16).errors.txt b/testdata/baselines/reference/submodule/conformance/nodeModulesExportAssignments(module=node16).errors.txt index 0b39eaa7b4..edb49c7a61 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesExportAssignments(module=node16).errors.txt +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesExportAssignments(module=node16).errors.txt @@ -1,13 +1,10 @@ index.ts(3,1): error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. -subfolder/index.ts(3,1): error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. -==== subfolder/index.ts (1 errors) ==== +==== subfolder/index.ts (0 errors) ==== // cjs format file const a = {}; export = a; - ~~~~~~~~~~~ -!!! error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. ==== index.ts (1 errors) ==== // esm format file const a = {}; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesExportAssignments(module=node16).errors.txt.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesExportAssignments(module=node16).errors.txt.diff deleted file mode 100644 index 903e9f9ca1..0000000000 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesExportAssignments(module=node16).errors.txt.diff +++ /dev/null @@ -1,17 +0,0 @@ ---- old.nodeModulesExportAssignments(module=node16).errors.txt -+++ new.nodeModulesExportAssignments(module=node16).errors.txt -@@= skipped -0, +0 lines =@@ - index.ts(3,1): error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. -+subfolder/index.ts(3,1): error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. - - --==== subfolder/index.ts (0 errors) ==== -+==== subfolder/index.ts (1 errors) ==== - // cjs format file - const a = {}; - export = a; -+ ~~~~~~~~~~~ -+!!! error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. - ==== index.ts (1 errors) ==== - // esm format file - const a = {}; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesExportAssignments(module=nodenext).errors.txt b/testdata/baselines/reference/submodule/conformance/nodeModulesExportAssignments(module=nodenext).errors.txt index 0b39eaa7b4..edb49c7a61 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesExportAssignments(module=nodenext).errors.txt +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesExportAssignments(module=nodenext).errors.txt @@ -1,13 +1,10 @@ index.ts(3,1): error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. -subfolder/index.ts(3,1): error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. -==== subfolder/index.ts (1 errors) ==== +==== subfolder/index.ts (0 errors) ==== // cjs format file const a = {}; export = a; - ~~~~~~~~~~~ -!!! error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. ==== index.ts (1 errors) ==== // esm format file const a = {}; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesExportAssignments(module=nodenext).errors.txt.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesExportAssignments(module=nodenext).errors.txt.diff deleted file mode 100644 index 6efa30090b..0000000000 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesExportAssignments(module=nodenext).errors.txt.diff +++ /dev/null @@ -1,17 +0,0 @@ ---- old.nodeModulesExportAssignments(module=nodenext).errors.txt -+++ new.nodeModulesExportAssignments(module=nodenext).errors.txt -@@= skipped -0, +0 lines =@@ - index.ts(3,1): error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. -+subfolder/index.ts(3,1): error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. - - --==== subfolder/index.ts (0 errors) ==== -+==== subfolder/index.ts (1 errors) ==== - // cjs format file - const a = {}; - export = a; -+ ~~~~~~~~~~~ -+!!! error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. - ==== index.ts (1 errors) ==== - // esm format file - const a = {}; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsBlocksSpecifierResolution(module=node16).types b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsBlocksSpecifierResolution(module=node16).types index e894828bb8..93fe0cea51 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsBlocksSpecifierResolution(module=node16).types +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsBlocksSpecifierResolution(module=node16).types @@ -9,9 +9,9 @@ export const a = (await import("inner")).x(); >a : Thing >(await import("inner")).x() : Thing >(await import("inner")).x : () => Thing ->(await import("inner")) : { x: () => Thing; default: typeof import("node_modules/inner/index"); } ->await import("inner") : { x: () => Thing; default: typeof import("node_modules/inner/index"); } ->import("inner") : Promise<{ x: () => Thing; default: typeof import("node_modules/inner/index"); }> +>(await import("inner")) : typeof import("node_modules/inner/index") +>await import("inner") : typeof import("node_modules/inner/index") +>import("inner") : Promise >"inner" : "inner" >x : () => Thing diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsBlocksSpecifierResolution(module=node16).types.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsBlocksSpecifierResolution(module=node16).types.diff index 75a9749b65..bafe8eae39 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsBlocksSpecifierResolution(module=node16).types.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsBlocksSpecifierResolution(module=node16).types.diff @@ -7,15 +7,12 @@ ->a : import("node_modules/inner/other").Thing ->(await import("inner")).x() : import("node_modules/inner/other").Thing ->(await import("inner")).x : () => import("node_modules/inner/other").Thing -->(await import("inner")) : typeof import("node_modules/inner/index") -->await import("inner") : typeof import("node_modules/inner/index") -->import("inner") : Promise +>a : Thing +>(await import("inner")).x() : Thing +>(await import("inner")).x : () => Thing -+>(await import("inner")) : { x: () => Thing; default: typeof import("node_modules/inner/index"); } -+>await import("inner") : { x: () => Thing; default: typeof import("node_modules/inner/index"); } -+>import("inner") : Promise<{ x: () => Thing; default: typeof import("node_modules/inner/index"); }> + >(await import("inner")) : typeof import("node_modules/inner/index") + >await import("inner") : typeof import("node_modules/inner/index") + >import("inner") : Promise >"inner" : "inner" ->x : () => import("node_modules/inner/other").Thing +>x : () => Thing diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsBlocksSpecifierResolution(module=nodenext).types b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsBlocksSpecifierResolution(module=nodenext).types index e894828bb8..93fe0cea51 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsBlocksSpecifierResolution(module=nodenext).types +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsBlocksSpecifierResolution(module=nodenext).types @@ -9,9 +9,9 @@ export const a = (await import("inner")).x(); >a : Thing >(await import("inner")).x() : Thing >(await import("inner")).x : () => Thing ->(await import("inner")) : { x: () => Thing; default: typeof import("node_modules/inner/index"); } ->await import("inner") : { x: () => Thing; default: typeof import("node_modules/inner/index"); } ->import("inner") : Promise<{ x: () => Thing; default: typeof import("node_modules/inner/index"); }> +>(await import("inner")) : typeof import("node_modules/inner/index") +>await import("inner") : typeof import("node_modules/inner/index") +>import("inner") : Promise >"inner" : "inner" >x : () => Thing diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsBlocksSpecifierResolution(module=nodenext).types.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsBlocksSpecifierResolution(module=nodenext).types.diff index 2773192041..150af50ebe 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsBlocksSpecifierResolution(module=nodenext).types.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsBlocksSpecifierResolution(module=nodenext).types.diff @@ -7,15 +7,12 @@ ->a : import("node_modules/inner/other").Thing ->(await import("inner")).x() : import("node_modules/inner/other").Thing ->(await import("inner")).x : () => import("node_modules/inner/other").Thing -->(await import("inner")) : typeof import("node_modules/inner/index") -->await import("inner") : typeof import("node_modules/inner/index") -->import("inner") : Promise +>a : Thing +>(await import("inner")).x() : Thing +>(await import("inner")).x : () => Thing -+>(await import("inner")) : { x: () => Thing; default: typeof import("node_modules/inner/index"); } -+>await import("inner") : { x: () => Thing; default: typeof import("node_modules/inner/index"); } -+>import("inner") : Promise<{ x: () => Thing; default: typeof import("node_modules/inner/index"); }> + >(await import("inner")) : typeof import("node_modules/inner/index") + >await import("inner") : typeof import("node_modules/inner/index") + >import("inner") : Promise >"inner" : "inner" ->x : () => import("node_modules/inner/other").Thing +>x : () => Thing diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationConditions(module=node16).types b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationConditions(module=node16).types index 6d9ae78438..6cbbb5acd9 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationConditions(module=node16).types +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationConditions(module=node16).types @@ -9,9 +9,9 @@ export const a = (await import("inner")).x(); >a : Thing >(await import("inner")).x() : Thing >(await import("inner")).x : () => Thing ->(await import("inner")) : { x: () => Thing; default: typeof import("node_modules/inner/index"); } ->await import("inner") : { x: () => Thing; default: typeof import("node_modules/inner/index"); } ->import("inner") : Promise<{ x: () => Thing; default: typeof import("node_modules/inner/index"); }> +>(await import("inner")) : typeof import("node_modules/inner/index") +>await import("inner") : typeof import("node_modules/inner/index") +>import("inner") : Promise >"inner" : "inner" >x : () => Thing diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationConditions(module=node16).types.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationConditions(module=node16).types.diff index d225c644ac..1752c94a62 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationConditions(module=node16).types.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationConditions(module=node16).types.diff @@ -7,15 +7,12 @@ ->a : import("node_modules/inner/other").Thing ->(await import("inner")).x() : import("node_modules/inner/other").Thing ->(await import("inner")).x : () => import("node_modules/inner/other").Thing -->(await import("inner")) : typeof import("node_modules/inner/index") -->await import("inner") : typeof import("node_modules/inner/index") -->import("inner") : Promise +>a : Thing +>(await import("inner")).x() : Thing +>(await import("inner")).x : () => Thing -+>(await import("inner")) : { x: () => Thing; default: typeof import("node_modules/inner/index"); } -+>await import("inner") : { x: () => Thing; default: typeof import("node_modules/inner/index"); } -+>import("inner") : Promise<{ x: () => Thing; default: typeof import("node_modules/inner/index"); }> + >(await import("inner")) : typeof import("node_modules/inner/index") + >await import("inner") : typeof import("node_modules/inner/index") + >import("inner") : Promise >"inner" : "inner" ->x : () => import("node_modules/inner/other").Thing +>x : () => Thing diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationConditions(module=nodenext).types b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationConditions(module=nodenext).types index 6d9ae78438..6cbbb5acd9 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationConditions(module=nodenext).types +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationConditions(module=nodenext).types @@ -9,9 +9,9 @@ export const a = (await import("inner")).x(); >a : Thing >(await import("inner")).x() : Thing >(await import("inner")).x : () => Thing ->(await import("inner")) : { x: () => Thing; default: typeof import("node_modules/inner/index"); } ->await import("inner") : { x: () => Thing; default: typeof import("node_modules/inner/index"); } ->import("inner") : Promise<{ x: () => Thing; default: typeof import("node_modules/inner/index"); }> +>(await import("inner")) : typeof import("node_modules/inner/index") +>await import("inner") : typeof import("node_modules/inner/index") +>import("inner") : Promise >"inner" : "inner" >x : () => Thing diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationConditions(module=nodenext).types.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationConditions(module=nodenext).types.diff index 85bc5d1f35..3502d7be71 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationConditions(module=nodenext).types.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationConditions(module=nodenext).types.diff @@ -7,15 +7,12 @@ ->a : import("node_modules/inner/other").Thing ->(await import("inner")).x() : import("node_modules/inner/other").Thing ->(await import("inner")).x : () => import("node_modules/inner/other").Thing -->(await import("inner")) : typeof import("node_modules/inner/index") -->await import("inner") : typeof import("node_modules/inner/index") -->import("inner") : Promise +>a : Thing +>(await import("inner")).x() : Thing +>(await import("inner")).x : () => Thing -+>(await import("inner")) : { x: () => Thing; default: typeof import("node_modules/inner/index"); } -+>await import("inner") : { x: () => Thing; default: typeof import("node_modules/inner/index"); } -+>import("inner") : Promise<{ x: () => Thing; default: typeof import("node_modules/inner/index"); }> + >(await import("inner")) : typeof import("node_modules/inner/index") + >await import("inner") : typeof import("node_modules/inner/index") + >import("inner") : Promise >"inner" : "inner" ->x : () => import("node_modules/inner/other").Thing +>x : () => Thing diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationDirectory(module=node16).types b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationDirectory(module=node16).types index 1f30c73f1d..ed2a1ac666 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationDirectory(module=node16).types +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationDirectory(module=node16).types @@ -9,9 +9,9 @@ export const a = (await import("inner/index.js")).x(); >a : Thing >(await import("inner/index.js")).x() : Thing >(await import("inner/index.js")).x : () => Thing ->(await import("inner/index.js")) : { x: () => Thing; default: typeof import("node_modules/inner/index"); } ->await import("inner/index.js") : { x: () => Thing; default: typeof import("node_modules/inner/index"); } ->import("inner/index.js") : Promise<{ x: () => Thing; default: typeof import("node_modules/inner/index"); }> +>(await import("inner/index.js")) : typeof import("node_modules/inner/index") +>await import("inner/index.js") : typeof import("node_modules/inner/index") +>import("inner/index.js") : Promise >"inner/index.js" : "inner/index.js" >x : () => Thing diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationDirectory(module=node16).types.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationDirectory(module=node16).types.diff index 0d6220817f..02f78e4d22 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationDirectory(module=node16).types.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationDirectory(module=node16).types.diff @@ -7,15 +7,12 @@ ->a : import("node_modules/inner/other").Thing ->(await import("inner/index.js")).x() : import("node_modules/inner/other").Thing ->(await import("inner/index.js")).x : () => import("node_modules/inner/other").Thing -->(await import("inner/index.js")) : typeof import("node_modules/inner/index") -->await import("inner/index.js") : typeof import("node_modules/inner/index") -->import("inner/index.js") : Promise +>a : Thing +>(await import("inner/index.js")).x() : Thing +>(await import("inner/index.js")).x : () => Thing -+>(await import("inner/index.js")) : { x: () => Thing; default: typeof import("node_modules/inner/index"); } -+>await import("inner/index.js") : { x: () => Thing; default: typeof import("node_modules/inner/index"); } -+>import("inner/index.js") : Promise<{ x: () => Thing; default: typeof import("node_modules/inner/index"); }> + >(await import("inner/index.js")) : typeof import("node_modules/inner/index") + >await import("inner/index.js") : typeof import("node_modules/inner/index") + >import("inner/index.js") : Promise >"inner/index.js" : "inner/index.js" ->x : () => import("node_modules/inner/other").Thing +>x : () => Thing diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationDirectory(module=nodenext).types b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationDirectory(module=nodenext).types index 1f30c73f1d..ed2a1ac666 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationDirectory(module=nodenext).types +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationDirectory(module=nodenext).types @@ -9,9 +9,9 @@ export const a = (await import("inner/index.js")).x(); >a : Thing >(await import("inner/index.js")).x() : Thing >(await import("inner/index.js")).x : () => Thing ->(await import("inner/index.js")) : { x: () => Thing; default: typeof import("node_modules/inner/index"); } ->await import("inner/index.js") : { x: () => Thing; default: typeof import("node_modules/inner/index"); } ->import("inner/index.js") : Promise<{ x: () => Thing; default: typeof import("node_modules/inner/index"); }> +>(await import("inner/index.js")) : typeof import("node_modules/inner/index") +>await import("inner/index.js") : typeof import("node_modules/inner/index") +>import("inner/index.js") : Promise >"inner/index.js" : "inner/index.js" >x : () => Thing diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationDirectory(module=nodenext).types.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationDirectory(module=nodenext).types.diff index b51824da4a..0966ec6fa2 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationDirectory(module=nodenext).types.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationDirectory(module=nodenext).types.diff @@ -7,15 +7,12 @@ ->a : import("node_modules/inner/other").Thing ->(await import("inner/index.js")).x() : import("node_modules/inner/other").Thing ->(await import("inner/index.js")).x : () => import("node_modules/inner/other").Thing -->(await import("inner/index.js")) : typeof import("node_modules/inner/index") -->await import("inner/index.js") : typeof import("node_modules/inner/index") -->import("inner/index.js") : Promise +>a : Thing +>(await import("inner/index.js")).x() : Thing +>(await import("inner/index.js")).x : () => Thing -+>(await import("inner/index.js")) : { x: () => Thing; default: typeof import("node_modules/inner/index"); } -+>await import("inner/index.js") : { x: () => Thing; default: typeof import("node_modules/inner/index"); } -+>import("inner/index.js") : Promise<{ x: () => Thing; default: typeof import("node_modules/inner/index"); }> + >(await import("inner/index.js")) : typeof import("node_modules/inner/index") + >await import("inner/index.js") : typeof import("node_modules/inner/index") + >import("inner/index.js") : Promise >"inner/index.js" : "inner/index.js" ->x : () => import("node_modules/inner/other").Thing +>x : () => Thing diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationPattern(module=node16).types b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationPattern(module=node16).types index f3ac551e51..fe2fc09d73 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationPattern(module=node16).types +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationPattern(module=node16).types @@ -9,9 +9,9 @@ export const a = (await import("inner/index.js")).x(); >a : Thing >(await import("inner/index.js")).x() : Thing >(await import("inner/index.js")).x : () => Thing ->(await import("inner/index.js")) : { x: () => Thing; default: typeof import("node_modules/inner/index"); } ->await import("inner/index.js") : { x: () => Thing; default: typeof import("node_modules/inner/index"); } ->import("inner/index.js") : Promise<{ x: () => Thing; default: typeof import("node_modules/inner/index"); }> +>(await import("inner/index.js")) : typeof import("node_modules/inner/index") +>await import("inner/index.js") : typeof import("node_modules/inner/index") +>import("inner/index.js") : Promise >"inner/index.js" : "inner/index.js" >x : () => Thing diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationPattern(module=node16).types.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationPattern(module=node16).types.diff index 67c9122645..fc3a231366 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationPattern(module=node16).types.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationPattern(module=node16).types.diff @@ -7,15 +7,12 @@ ->a : import("node_modules/inner/other").Thing ->(await import("inner/index.js")).x() : import("node_modules/inner/other").Thing ->(await import("inner/index.js")).x : () => import("node_modules/inner/other").Thing -->(await import("inner/index.js")) : typeof import("node_modules/inner/index") -->await import("inner/index.js") : typeof import("node_modules/inner/index") -->import("inner/index.js") : Promise +>a : Thing +>(await import("inner/index.js")).x() : Thing +>(await import("inner/index.js")).x : () => Thing -+>(await import("inner/index.js")) : { x: () => Thing; default: typeof import("node_modules/inner/index"); } -+>await import("inner/index.js") : { x: () => Thing; default: typeof import("node_modules/inner/index"); } -+>import("inner/index.js") : Promise<{ x: () => Thing; default: typeof import("node_modules/inner/index"); }> + >(await import("inner/index.js")) : typeof import("node_modules/inner/index") + >await import("inner/index.js") : typeof import("node_modules/inner/index") + >import("inner/index.js") : Promise >"inner/index.js" : "inner/index.js" ->x : () => import("node_modules/inner/other").Thing +>x : () => Thing diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationPattern(module=nodenext).types b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationPattern(module=nodenext).types index f3ac551e51..fe2fc09d73 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationPattern(module=nodenext).types +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationPattern(module=nodenext).types @@ -9,9 +9,9 @@ export const a = (await import("inner/index.js")).x(); >a : Thing >(await import("inner/index.js")).x() : Thing >(await import("inner/index.js")).x : () => Thing ->(await import("inner/index.js")) : { x: () => Thing; default: typeof import("node_modules/inner/index"); } ->await import("inner/index.js") : { x: () => Thing; default: typeof import("node_modules/inner/index"); } ->import("inner/index.js") : Promise<{ x: () => Thing; default: typeof import("node_modules/inner/index"); }> +>(await import("inner/index.js")) : typeof import("node_modules/inner/index") +>await import("inner/index.js") : typeof import("node_modules/inner/index") +>import("inner/index.js") : Promise >"inner/index.js" : "inner/index.js" >x : () => Thing diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationPattern(module=nodenext).types.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationPattern(module=nodenext).types.diff index a3851fa498..6137eb5725 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationPattern(module=nodenext).types.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationPattern(module=nodenext).types.diff @@ -7,15 +7,12 @@ ->a : import("node_modules/inner/other").Thing ->(await import("inner/index.js")).x() : import("node_modules/inner/other").Thing ->(await import("inner/index.js")).x : () => import("node_modules/inner/other").Thing -->(await import("inner/index.js")) : typeof import("node_modules/inner/index") -->await import("inner/index.js") : typeof import("node_modules/inner/index") -->import("inner/index.js") : Promise +>a : Thing +>(await import("inner/index.js")).x() : Thing +>(await import("inner/index.js")).x : () => Thing -+>(await import("inner/index.js")) : { x: () => Thing; default: typeof import("node_modules/inner/index"); } -+>await import("inner/index.js") : { x: () => Thing; default: typeof import("node_modules/inner/index"); } -+>import("inner/index.js") : Promise<{ x: () => Thing; default: typeof import("node_modules/inner/index"); }> + >(await import("inner/index.js")) : typeof import("node_modules/inner/index") + >await import("inner/index.js") : typeof import("node_modules/inner/index") + >import("inner/index.js") : Promise >"inner/index.js" : "inner/index.js" ->x : () => import("node_modules/inner/other").Thing +>x : () => Thing diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesGeneratedNameCollisions(module=node16).errors.txt b/testdata/baselines/reference/submodule/conformance/nodeModulesGeneratedNameCollisions(module=node16).errors.txt new file mode 100644 index 0000000000..cba5d90874 --- /dev/null +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesGeneratedNameCollisions(module=node16).errors.txt @@ -0,0 +1,35 @@ +subfolder/index.ts(2,10): error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. +subfolder/index.ts(3,7): error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. +subfolder/index.ts(5,14): error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. + + +==== subfolder/index.ts (3 errors) ==== + // cjs format file + function require() {} + ~~~~~~~ +!!! error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. + const exports = {}; + ~~~~~~~ +!!! error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. + class Object {} + export const __esModule = false; + ~~~~~~~~~~ +!!! error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. + export {require, exports, Object}; +==== index.ts (0 errors) ==== + // esm format file + function require() {} + const exports = {}; + class Object {} + export const __esModule = false; + export {require, exports, Object}; +==== package.json (0 errors) ==== + { + "name": "package", + "private": true, + "type": "module" + } +==== subfolder/package.json (0 errors) ==== + { + "type": "commonjs" + } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesGeneratedNameCollisions(module=node16).errors.txt.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesGeneratedNameCollisions(module=node16).errors.txt.diff index 96bc456916..818a4590d6 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesGeneratedNameCollisions(module=node16).errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesGeneratedNameCollisions(module=node16).errors.txt.diff @@ -1,43 +1,23 @@ --- old.nodeModulesGeneratedNameCollisions(module=node16).errors.txt +++ new.nodeModulesGeneratedNameCollisions(module=node16).errors.txt -@@= skipped -0, +-1 lines =@@ --subfolder/index.ts(2,10): error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. --subfolder/index.ts(3,7): error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. +@@= skipped -0, +0 lines =@@ + subfolder/index.ts(2,10): error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. + subfolder/index.ts(3,7): error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. -subfolder/index.ts(4,7): error TS2725: Class name cannot be 'Object' when targeting ES5 with module Node16. --subfolder/index.ts(5,14): error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. -- -- + subfolder/index.ts(5,14): error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. + + -==== subfolder/index.ts (4 errors) ==== -- // cjs format file -- function require() {} -- ~~~~~~~ --!!! error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. -- const exports = {}; -- ~~~~~~~ --!!! error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. -- class Object {} ++==== subfolder/index.ts (3 errors) ==== + // cjs format file + function require() {} + ~~~~~~~ +@@= skipped -12, +11 lines =@@ + ~~~~~~~ + !!! error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. + class Object {} - ~~~~~~ -!!! error TS2725: Class name cannot be 'Object' when targeting ES5 with module Node16. -- export const __esModule = false; -- ~~~~~~~~~~ --!!! error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. -- export {require, exports, Object}; --==== index.ts (0 errors) ==== -- // esm format file -- function require() {} -- const exports = {}; -- class Object {} -- export const __esModule = false; -- export {require, exports, Object}; --==== package.json (0 errors) ==== -- { -- "name": "package", -- "private": true, -- "type": "module" -- } --==== subfolder/package.json (0 errors) ==== -- { -- "type": "commonjs" -- } -@@= skipped --1, +1 lines =@@ -+ + export const __esModule = false; + ~~~~~~~~~~ + !!! error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesGeneratedNameCollisions(module=nodenext).errors.txt b/testdata/baselines/reference/submodule/conformance/nodeModulesGeneratedNameCollisions(module=nodenext).errors.txt new file mode 100644 index 0000000000..cba5d90874 --- /dev/null +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesGeneratedNameCollisions(module=nodenext).errors.txt @@ -0,0 +1,35 @@ +subfolder/index.ts(2,10): error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. +subfolder/index.ts(3,7): error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. +subfolder/index.ts(5,14): error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. + + +==== subfolder/index.ts (3 errors) ==== + // cjs format file + function require() {} + ~~~~~~~ +!!! error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. + const exports = {}; + ~~~~~~~ +!!! error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. + class Object {} + export const __esModule = false; + ~~~~~~~~~~ +!!! error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. + export {require, exports, Object}; +==== index.ts (0 errors) ==== + // esm format file + function require() {} + const exports = {}; + class Object {} + export const __esModule = false; + export {require, exports, Object}; +==== package.json (0 errors) ==== + { + "name": "package", + "private": true, + "type": "module" + } +==== subfolder/package.json (0 errors) ==== + { + "type": "commonjs" + } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesGeneratedNameCollisions(module=nodenext).errors.txt.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesGeneratedNameCollisions(module=nodenext).errors.txt.diff index a0ffe6084d..5887fb5182 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesGeneratedNameCollisions(module=nodenext).errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesGeneratedNameCollisions(module=nodenext).errors.txt.diff @@ -1,43 +1,23 @@ --- old.nodeModulesGeneratedNameCollisions(module=nodenext).errors.txt +++ new.nodeModulesGeneratedNameCollisions(module=nodenext).errors.txt -@@= skipped -0, +-1 lines =@@ --subfolder/index.ts(2,10): error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. --subfolder/index.ts(3,7): error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. +@@= skipped -0, +0 lines =@@ + subfolder/index.ts(2,10): error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. + subfolder/index.ts(3,7): error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. -subfolder/index.ts(4,7): error TS2725: Class name cannot be 'Object' when targeting ES5 with module NodeNext. --subfolder/index.ts(5,14): error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. -- -- + subfolder/index.ts(5,14): error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. + + -==== subfolder/index.ts (4 errors) ==== -- // cjs format file -- function require() {} -- ~~~~~~~ --!!! error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. -- const exports = {}; -- ~~~~~~~ --!!! error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. -- class Object {} ++==== subfolder/index.ts (3 errors) ==== + // cjs format file + function require() {} + ~~~~~~~ +@@= skipped -12, +11 lines =@@ + ~~~~~~~ + !!! error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. + class Object {} - ~~~~~~ -!!! error TS2725: Class name cannot be 'Object' when targeting ES5 with module NodeNext. -- export const __esModule = false; -- ~~~~~~~~~~ --!!! error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. -- export {require, exports, Object}; --==== index.ts (0 errors) ==== -- // esm format file -- function require() {} -- const exports = {}; -- class Object {} -- export const __esModule = false; -- export {require, exports, Object}; --==== package.json (0 errors) ==== -- { -- "name": "package", -- "private": true, -- "type": "module" -- } --==== subfolder/package.json (0 errors) ==== -- { -- "type": "commonjs" -- } -@@= skipped --1, +1 lines =@@ -+ + export const __esModule = false; + ~~~~~~~~~~ + !!! error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssertions(module=nodenext).errors.txt b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssertions(module=nodenext).errors.txt index a7b4c5fd9c..703e398c11 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssertions(module=nodenext).errors.txt +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssertions(module=nodenext).errors.txt @@ -1,14 +1,11 @@ error TS2468: Cannot find global value 'Promise'. -index.ts(1,35): error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. otherc.cts(1,35): error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. otherc.cts(2,15): error TS2712: A dynamic import call in ES5 requires the 'Promise' constructor. Make sure you have a declaration for the 'Promise' constructor or include 'ES2015' in your '--lib' option. !!! error TS2468: Cannot find global value 'Promise'. -==== index.ts (1 errors) ==== +==== index.ts (0 errors) ==== import json from "./package.json" assert { type: "json" }; - ~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. ==== otherc.cts (2 errors) ==== import json from "./package.json" assert { type: "json" }; // should error, cjs mode imports don't support assertions ~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssertions(module=nodenext).errors.txt.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssertions(module=nodenext).errors.txt.diff index 9407852a02..18fb9360b1 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssertions(module=nodenext).errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssertions(module=nodenext).errors.txt.diff @@ -2,18 +2,14 @@ +++ new.nodeModulesImportAssertions(module=nodenext).errors.txt @@= skipped -0, +0 lines =@@ +error TS2468: Cannot find global value 'Promise'. -+index.ts(1,35): error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. otherc.cts(1,35): error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. +otherc.cts(2,15): error TS2712: A dynamic import call in ES5 requires the 'Promise' constructor. Make sure you have a declaration for the 'Promise' constructor or include 'ES2015' in your '--lib' option. --==== index.ts (0 errors) ==== +!!! error TS2468: Cannot find global value 'Promise'. -+==== index.ts (1 errors) ==== + ==== index.ts (0 errors) ==== import json from "./package.json" assert { type: "json" }; -==== otherc.cts (1 errors) ==== -+ ~~~~~~~~~~~~~~~~~~~~~~~ -+!!! error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. +==== otherc.cts (2 errors) ==== import json from "./package.json" assert { type: "json" }; // should error, cjs mode imports don't support assertions ~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributes(module=nodenext).errors.txt b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributes(module=nodenext).errors.txt index b72480c724..0b41a035cd 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributes(module=nodenext).errors.txt +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributes(module=nodenext).errors.txt @@ -1,14 +1,11 @@ error TS2468: Cannot find global value 'Promise'. -index.ts(1,35): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. otherc.cts(1,35): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. otherc.cts(2,15): error TS2712: A dynamic import call in ES5 requires the 'Promise' constructor. Make sure you have a declaration for the 'Promise' constructor or include 'ES2015' in your '--lib' option. !!! error TS2468: Cannot find global value 'Promise'. -==== index.ts (1 errors) ==== +==== index.ts (0 errors) ==== import json from "./package.json" with { type: "json" }; - ~~~~~~~~~~~~~~~~~~~~~ -!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. ==== otherc.cts (2 errors) ==== import json from "./package.json" with { type: "json" }; // should error, cjs mode imports don't support attributes ~~~~~~~~~~~~~~~~~~~~~ diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributes(module=nodenext).errors.txt.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributes(module=nodenext).errors.txt.diff index c5b8f90749..806b29e938 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributes(module=nodenext).errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributes(module=nodenext).errors.txt.diff @@ -2,18 +2,14 @@ +++ new.nodeModulesImportAttributes(module=nodenext).errors.txt @@= skipped -0, +0 lines =@@ +error TS2468: Cannot find global value 'Promise'. -+index.ts(1,35): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. otherc.cts(1,35): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. +otherc.cts(2,15): error TS2712: A dynamic import call in ES5 requires the 'Promise' constructor. Make sure you have a declaration for the 'Promise' constructor or include 'ES2015' in your '--lib' option. --==== index.ts (0 errors) ==== +!!! error TS2468: Cannot find global value 'Promise'. -+==== index.ts (1 errors) ==== + ==== index.ts (0 errors) ==== import json from "./package.json" with { type: "json" }; -==== otherc.cts (1 errors) ==== -+ ~~~~~~~~~~~~~~~~~~~~~ -+!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. +==== otherc.cts (2 errors) ==== import json from "./package.json" with { type: "json" }; // should error, cjs mode imports don't support attributes ~~~~~~~~~~~~~~~~~~~~~ diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributesModeDeclarationEmit1(module=nodenext).errors.txt b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributesModeDeclarationEmit1(module=nodenext).errors.txt index 76af3803c0..0e3302de08 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributesModeDeclarationEmit1(module=nodenext).errors.txt +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributesModeDeclarationEmit1(module=nodenext).errors.txt @@ -1,62 +1,44 @@ /index.ts(1,45): error TS1454: `resolution-mode` can only be set for type-only imports. -/index.ts(1,45): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. /index.ts(2,15): error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. /index.ts(2,44): error TS1454: `resolution-mode` can only be set for type-only imports. -/index.ts(2,44): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. /index.ts(6,50): error TS1454: `resolution-mode` can only be set for type-only imports. -/index.ts(6,50): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. /index.ts(7,14): error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. /index.ts(7,49): error TS1454: `resolution-mode` can only be set for type-only imports. -/index.ts(7,49): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. /index.ts(10,45): error TS1454: `resolution-mode` can only be set for type-only imports. -/index.ts(10,45): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. /index.ts(11,15): error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. /index.ts(11,44): error TS1454: `resolution-mode` can only be set for type-only imports. -/index.ts(11,44): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. -==== /index.ts (15 errors) ==== +==== /index.ts (9 errors) ==== import type { RequireInterface } from "pkg" with { "resolution-mode": "require" }; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS1454: `resolution-mode` can only be set for type-only imports. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. import type { ImportInterface } from "pkg" with { "resolution-mode": "import" }; ~~~~~~~~~~~~~~~ !!! error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS1454: `resolution-mode` can only be set for type-only imports. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. export interface LocalInterface extends RequireInterface, ImportInterface {} import {type RequireInterface as Req} from "pkg" with { "resolution-mode": "require" }; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS1454: `resolution-mode` can only be set for type-only imports. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. import {type ImportInterface as Imp} from "pkg" with { "resolution-mode": "import" }; ~~~~~~~~~~~~~~~ !!! error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS1454: `resolution-mode` can only be set for type-only imports. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. export interface Loc extends Req, Imp {} export type { RequireInterface } from "pkg" with { "resolution-mode": "require" }; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS1454: `resolution-mode` can only be set for type-only imports. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. export type { ImportInterface } from "pkg" with { "resolution-mode": "import" }; ~~~~~~~~~~~~~~~ !!! error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS1454: `resolution-mode` can only be set for type-only imports. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. ==== /node_modules/pkg/package.json (0 errors) ==== { diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributesModeDeclarationEmit1(module=nodenext).errors.txt.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributesModeDeclarationEmit1(module=nodenext).errors.txt.diff index cfc28d8c20..36523e951a 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributesModeDeclarationEmit1(module=nodenext).errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributesModeDeclarationEmit1(module=nodenext).errors.txt.diff @@ -1,68 +1,54 @@ --- old.nodeModulesImportAttributesModeDeclarationEmit1(module=nodenext).errors.txt +++ new.nodeModulesImportAttributesModeDeclarationEmit1(module=nodenext).errors.txt @@= skipped -0, +0 lines =@@ +-/index.ts(6,50): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. +-/index.ts(7,14): error TS2305: Module '"pkg"' has no exported member 'ImportInterface'. +-/index.ts(7,49): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. +/index.ts(1,45): error TS1454: `resolution-mode` can only be set for type-only imports. -+/index.ts(1,45): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. +/index.ts(2,15): error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. +/index.ts(2,44): error TS1454: `resolution-mode` can only be set for type-only imports. -+/index.ts(2,44): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. +/index.ts(6,50): error TS1454: `resolution-mode` can only be set for type-only imports. - /index.ts(6,50): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. --/index.ts(7,14): error TS2305: Module '"pkg"' has no exported member 'ImportInterface'. +/index.ts(7,14): error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. +/index.ts(7,49): error TS1454: `resolution-mode` can only be set for type-only imports. - /index.ts(7,49): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. +/index.ts(10,45): error TS1454: `resolution-mode` can only be set for type-only imports. -+/index.ts(10,45): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. +/index.ts(11,15): error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. +/index.ts(11,44): error TS1454: `resolution-mode` can only be set for type-only imports. -+/index.ts(11,44): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. -==== /index.ts (3 errors) ==== -+==== /index.ts (15 errors) ==== ++==== /index.ts (9 errors) ==== import type { RequireInterface } from "pkg" with { "resolution-mode": "require" }; + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS1454: `resolution-mode` can only be set for type-only imports. -+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -+!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. import type { ImportInterface } from "pkg" with { "resolution-mode": "import" }; + ~~~~~~~~~~~~~~~ +!!! error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS1454: `resolution-mode` can only be set for type-only imports. -+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -+!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. export interface LocalInterface extends RequireInterface, ImportInterface {} import {type RequireInterface as Req} from "pkg" with { "resolution-mode": "require" }; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +-!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. +!!! error TS1454: `resolution-mode` can only be set for type-only imports. -+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - !!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. import {type ImportInterface as Imp} from "pkg" with { "resolution-mode": "import" }; ~~~~~~~~~~~~~~~ -!!! error TS2305: Module '"pkg"' has no exported member 'ImportInterface'. +!!! error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +-!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. +!!! error TS1454: `resolution-mode` can only be set for type-only imports. -+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - !!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. export interface Loc extends Req, Imp {} export type { RequireInterface } from "pkg" with { "resolution-mode": "require" }; + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS1454: `resolution-mode` can only be set for type-only imports. -+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -+!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. export type { ImportInterface } from "pkg" with { "resolution-mode": "import" }; + ~~~~~~~~~~~~~~~ +!!! error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS1454: `resolution-mode` can only be set for type-only imports. -+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -+!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. ==== /node_modules/pkg/package.json (0 errors) ==== { diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributesModeDeclarationEmit2(module=nodenext).errors.txt b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributesModeDeclarationEmit2(module=nodenext).errors.txt index 168ee62846..cb559511e0 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributesModeDeclarationEmit2(module=nodenext).errors.txt +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributesModeDeclarationEmit2(module=nodenext).errors.txt @@ -1,62 +1,44 @@ /index.ts(1,45): error TS1454: `resolution-mode` can only be set for type-only imports. -/index.ts(1,45): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. /index.ts(2,15): error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. /index.ts(2,44): error TS1454: `resolution-mode` can only be set for type-only imports. -/index.ts(2,44): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. /index.ts(6,50): error TS1454: `resolution-mode` can only be set for type-only imports. -/index.ts(6,50): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. /index.ts(7,14): error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. /index.ts(7,49): error TS1454: `resolution-mode` can only be set for type-only imports. -/index.ts(7,49): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. /index.ts(10,45): error TS1454: `resolution-mode` can only be set for type-only imports. -/index.ts(10,45): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. /index.ts(11,15): error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. /index.ts(11,44): error TS1454: `resolution-mode` can only be set for type-only imports. -/index.ts(11,44): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. -==== /index.ts (15 errors) ==== +==== /index.ts (9 errors) ==== import type { RequireInterface } from "pkg" with { "resolution-mode": "require" }; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS1454: `resolution-mode` can only be set for type-only imports. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. import type { ImportInterface } from "pkg" with { "resolution-mode": "import" }; ~~~~~~~~~~~~~~~ !!! error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS1454: `resolution-mode` can only be set for type-only imports. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. export interface LocalInterface extends RequireInterface, ImportInterface {} import {type RequireInterface as Req} from "pkg" with { "resolution-mode": "require" }; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS1454: `resolution-mode` can only be set for type-only imports. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. import {type ImportInterface as Imp} from "pkg" with { "resolution-mode": "import" }; ~~~~~~~~~~~~~~~ !!! error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS1454: `resolution-mode` can only be set for type-only imports. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. export interface Loc extends Req, Imp {} export type { RequireInterface } from "pkg" with { "resolution-mode": "require" }; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS1454: `resolution-mode` can only be set for type-only imports. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. export type { ImportInterface } from "pkg" with { "resolution-mode": "import" }; ~~~~~~~~~~~~~~~ !!! error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS1454: `resolution-mode` can only be set for type-only imports. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. ==== /node_modules/pkg/package.json (0 errors) ==== { diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributesModeDeclarationEmit2(module=nodenext).errors.txt.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributesModeDeclarationEmit2(module=nodenext).errors.txt.diff index 1008147de9..074dc27588 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributesModeDeclarationEmit2(module=nodenext).errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributesModeDeclarationEmit2(module=nodenext).errors.txt.diff @@ -3,36 +3,26 @@ @@= skipped -0, +0 lines =@@ -/index.ts(6,14): error TS2305: Module '"pkg"' has no exported member 'RequireInterface'. +/index.ts(1,45): error TS1454: `resolution-mode` can only be set for type-only imports. -+/index.ts(1,45): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. +/index.ts(2,15): error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. +/index.ts(2,44): error TS1454: `resolution-mode` can only be set for type-only imports. -+/index.ts(2,44): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. /index.ts(6,50): error TS1454: `resolution-mode` can only be set for type-only imports. -+/index.ts(6,50): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. +/index.ts(7,14): error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. /index.ts(7,49): error TS1454: `resolution-mode` can only be set for type-only imports. -+/index.ts(7,49): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. +/index.ts(10,45): error TS1454: `resolution-mode` can only be set for type-only imports. -+/index.ts(10,45): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. +/index.ts(11,15): error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. +/index.ts(11,44): error TS1454: `resolution-mode` can only be set for type-only imports. -+/index.ts(11,44): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. -==== /index.ts (3 errors) ==== -+==== /index.ts (15 errors) ==== ++==== /index.ts (9 errors) ==== import type { RequireInterface } from "pkg" with { "resolution-mode": "require" }; + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS1454: `resolution-mode` can only be set for type-only imports. -+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -+!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. import type { ImportInterface } from "pkg" with { "resolution-mode": "import" }; + ~~~~~~~~~~~~~~~ +!!! error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS1454: `resolution-mode` can only be set for type-only imports. -+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -+!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. export interface LocalInterface extends RequireInterface, ImportInterface {} @@ -41,29 +31,21 @@ -!!! error TS2305: Module '"pkg"' has no exported member 'RequireInterface'. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS1454: `resolution-mode` can only be set for type-only imports. -+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -+!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. import {type ImportInterface as Imp} from "pkg" with { "resolution-mode": "import" }; + ~~~~~~~~~~~~~~~ +!!! error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS1454: `resolution-mode` can only be set for type-only imports. -+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -+!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. export interface Loc extends Req, Imp {} export type { RequireInterface } from "pkg" with { "resolution-mode": "require" }; + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS1454: `resolution-mode` can only be set for type-only imports. -+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -+!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. export type { ImportInterface } from "pkg" with { "resolution-mode": "import" }; + ~~~~~~~~~~~~~~~ +!!! error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS1454: `resolution-mode` can only be set for type-only imports. -+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -+!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. ==== /node_modules/pkg/package.json (0 errors) ==== { diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportModeDeclarationEmit1(module=nodenext).errors.txt b/testdata/baselines/reference/submodule/conformance/nodeModulesImportModeDeclarationEmit1(module=nodenext).errors.txt index 7d296c16e2..82907f53fc 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportModeDeclarationEmit1(module=nodenext).errors.txt +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportModeDeclarationEmit1(module=nodenext).errors.txt @@ -1,62 +1,44 @@ /index.ts(1,45): error TS1454: `resolution-mode` can only be set for type-only imports. -/index.ts(1,45): error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. /index.ts(2,15): error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. /index.ts(2,44): error TS1454: `resolution-mode` can only be set for type-only imports. -/index.ts(2,44): error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. /index.ts(6,50): error TS1454: `resolution-mode` can only be set for type-only imports. -/index.ts(6,50): error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. /index.ts(7,14): error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. /index.ts(7,49): error TS1454: `resolution-mode` can only be set for type-only imports. -/index.ts(7,49): error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. /index.ts(10,45): error TS1454: `resolution-mode` can only be set for type-only imports. -/index.ts(10,45): error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. /index.ts(11,15): error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. /index.ts(11,44): error TS1454: `resolution-mode` can only be set for type-only imports. -/index.ts(11,44): error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. -==== /index.ts (15 errors) ==== +==== /index.ts (9 errors) ==== import type { RequireInterface } from "pkg" assert { "resolution-mode": "require" }; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS1454: `resolution-mode` can only be set for type-only imports. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. import type { ImportInterface } from "pkg" assert { "resolution-mode": "import" }; ~~~~~~~~~~~~~~~ !!! error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS1454: `resolution-mode` can only be set for type-only imports. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. export interface LocalInterface extends RequireInterface, ImportInterface {} import {type RequireInterface as Req} from "pkg" assert { "resolution-mode": "require" }; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS1454: `resolution-mode` can only be set for type-only imports. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. import {type ImportInterface as Imp} from "pkg" assert { "resolution-mode": "import" }; ~~~~~~~~~~~~~~~ !!! error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS1454: `resolution-mode` can only be set for type-only imports. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. export interface Loc extends Req, Imp {} export type { RequireInterface } from "pkg" assert { "resolution-mode": "require" }; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS1454: `resolution-mode` can only be set for type-only imports. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. export type { ImportInterface } from "pkg" assert { "resolution-mode": "import" }; ~~~~~~~~~~~~~~~ !!! error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS1454: `resolution-mode` can only be set for type-only imports. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. ==== /node_modules/pkg/package.json (0 errors) ==== { diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportModeDeclarationEmit1(module=nodenext).errors.txt.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesImportModeDeclarationEmit1(module=nodenext).errors.txt.diff index 176fdae116..8dbec6f543 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportModeDeclarationEmit1(module=nodenext).errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportModeDeclarationEmit1(module=nodenext).errors.txt.diff @@ -1,68 +1,54 @@ --- old.nodeModulesImportModeDeclarationEmit1(module=nodenext).errors.txt +++ new.nodeModulesImportModeDeclarationEmit1(module=nodenext).errors.txt @@= skipped -0, +0 lines =@@ +-/index.ts(6,50): error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. +-/index.ts(7,14): error TS2305: Module '"pkg"' has no exported member 'ImportInterface'. +-/index.ts(7,49): error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. +/index.ts(1,45): error TS1454: `resolution-mode` can only be set for type-only imports. -+/index.ts(1,45): error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. +/index.ts(2,15): error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. +/index.ts(2,44): error TS1454: `resolution-mode` can only be set for type-only imports. -+/index.ts(2,44): error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. +/index.ts(6,50): error TS1454: `resolution-mode` can only be set for type-only imports. - /index.ts(6,50): error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. --/index.ts(7,14): error TS2305: Module '"pkg"' has no exported member 'ImportInterface'. +/index.ts(7,14): error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. +/index.ts(7,49): error TS1454: `resolution-mode` can only be set for type-only imports. - /index.ts(7,49): error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. +/index.ts(10,45): error TS1454: `resolution-mode` can only be set for type-only imports. -+/index.ts(10,45): error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. +/index.ts(11,15): error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. +/index.ts(11,44): error TS1454: `resolution-mode` can only be set for type-only imports. -+/index.ts(11,44): error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. -==== /index.ts (3 errors) ==== -+==== /index.ts (15 errors) ==== ++==== /index.ts (9 errors) ==== import type { RequireInterface } from "pkg" assert { "resolution-mode": "require" }; + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS1454: `resolution-mode` can only be set for type-only imports. -+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -+!!! error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. import type { ImportInterface } from "pkg" assert { "resolution-mode": "import" }; + ~~~~~~~~~~~~~~~ +!!! error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS1454: `resolution-mode` can only be set for type-only imports. -+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -+!!! error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. export interface LocalInterface extends RequireInterface, ImportInterface {} import {type RequireInterface as Req} from "pkg" assert { "resolution-mode": "require" }; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +-!!! error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. +!!! error TS1454: `resolution-mode` can only be set for type-only imports. -+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - !!! error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. import {type ImportInterface as Imp} from "pkg" assert { "resolution-mode": "import" }; ~~~~~~~~~~~~~~~ -!!! error TS2305: Module '"pkg"' has no exported member 'ImportInterface'. +!!! error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +-!!! error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. +!!! error TS1454: `resolution-mode` can only be set for type-only imports. -+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - !!! error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. export interface Loc extends Req, Imp {} export type { RequireInterface } from "pkg" assert { "resolution-mode": "require" }; + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS1454: `resolution-mode` can only be set for type-only imports. -+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -+!!! error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. export type { ImportInterface } from "pkg" assert { "resolution-mode": "import" }; + ~~~~~~~~~~~~~~~ +!!! error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS1454: `resolution-mode` can only be set for type-only imports. -+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -+!!! error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. ==== /node_modules/pkg/package.json (0 errors) ==== { diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportModeDeclarationEmit2(module=nodenext).errors.txt b/testdata/baselines/reference/submodule/conformance/nodeModulesImportModeDeclarationEmit2(module=nodenext).errors.txt index 84050248b9..9f1a0f208a 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportModeDeclarationEmit2(module=nodenext).errors.txt +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportModeDeclarationEmit2(module=nodenext).errors.txt @@ -1,62 +1,44 @@ /index.ts(1,45): error TS1454: `resolution-mode` can only be set for type-only imports. -/index.ts(1,45): error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. /index.ts(2,15): error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. /index.ts(2,44): error TS1454: `resolution-mode` can only be set for type-only imports. -/index.ts(2,44): error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. /index.ts(6,50): error TS1454: `resolution-mode` can only be set for type-only imports. -/index.ts(6,50): error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. /index.ts(7,14): error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. /index.ts(7,49): error TS1454: `resolution-mode` can only be set for type-only imports. -/index.ts(7,49): error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. /index.ts(10,45): error TS1454: `resolution-mode` can only be set for type-only imports. -/index.ts(10,45): error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. /index.ts(11,15): error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. /index.ts(11,44): error TS1454: `resolution-mode` can only be set for type-only imports. -/index.ts(11,44): error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. -==== /index.ts (15 errors) ==== +==== /index.ts (9 errors) ==== import type { RequireInterface } from "pkg" assert { "resolution-mode": "require" }; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS1454: `resolution-mode` can only be set for type-only imports. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. import type { ImportInterface } from "pkg" assert { "resolution-mode": "import" }; ~~~~~~~~~~~~~~~ !!! error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS1454: `resolution-mode` can only be set for type-only imports. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. export interface LocalInterface extends RequireInterface, ImportInterface {} import {type RequireInterface as Req} from "pkg" assert { "resolution-mode": "require" }; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS1454: `resolution-mode` can only be set for type-only imports. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. import {type ImportInterface as Imp} from "pkg" assert { "resolution-mode": "import" }; ~~~~~~~~~~~~~~~ !!! error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS1454: `resolution-mode` can only be set for type-only imports. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. export interface Loc extends Req, Imp {} export type { RequireInterface } from "pkg" assert { "resolution-mode": "require" }; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS1454: `resolution-mode` can only be set for type-only imports. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. export type { ImportInterface } from "pkg" assert { "resolution-mode": "import" }; ~~~~~~~~~~~~~~~ !!! error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS1454: `resolution-mode` can only be set for type-only imports. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. ==== /node_modules/pkg/package.json (0 errors) ==== { diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportModeDeclarationEmit2(module=nodenext).errors.txt.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesImportModeDeclarationEmit2(module=nodenext).errors.txt.diff index 7ec698d28e..dc69697ac5 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportModeDeclarationEmit2(module=nodenext).errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportModeDeclarationEmit2(module=nodenext).errors.txt.diff @@ -3,36 +3,26 @@ @@= skipped -0, +0 lines =@@ -/index.ts(6,14): error TS2305: Module '"pkg"' has no exported member 'RequireInterface'. +/index.ts(1,45): error TS1454: `resolution-mode` can only be set for type-only imports. -+/index.ts(1,45): error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. +/index.ts(2,15): error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. +/index.ts(2,44): error TS1454: `resolution-mode` can only be set for type-only imports. -+/index.ts(2,44): error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. /index.ts(6,50): error TS1454: `resolution-mode` can only be set for type-only imports. -+/index.ts(6,50): error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. +/index.ts(7,14): error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. /index.ts(7,49): error TS1454: `resolution-mode` can only be set for type-only imports. -+/index.ts(7,49): error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. +/index.ts(10,45): error TS1454: `resolution-mode` can only be set for type-only imports. -+/index.ts(10,45): error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. +/index.ts(11,15): error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. +/index.ts(11,44): error TS1454: `resolution-mode` can only be set for type-only imports. -+/index.ts(11,44): error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. -==== /index.ts (3 errors) ==== -+==== /index.ts (15 errors) ==== ++==== /index.ts (9 errors) ==== import type { RequireInterface } from "pkg" assert { "resolution-mode": "require" }; + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS1454: `resolution-mode` can only be set for type-only imports. -+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -+!!! error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. import type { ImportInterface } from "pkg" assert { "resolution-mode": "import" }; + ~~~~~~~~~~~~~~~ +!!! error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS1454: `resolution-mode` can only be set for type-only imports. -+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -+!!! error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. export interface LocalInterface extends RequireInterface, ImportInterface {} @@ -41,29 +31,21 @@ -!!! error TS2305: Module '"pkg"' has no exported member 'RequireInterface'. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS1454: `resolution-mode` can only be set for type-only imports. -+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -+!!! error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. import {type ImportInterface as Imp} from "pkg" assert { "resolution-mode": "import" }; + ~~~~~~~~~~~~~~~ +!!! error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS1454: `resolution-mode` can only be set for type-only imports. -+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -+!!! error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. export interface Loc extends Req, Imp {} export type { RequireInterface } from "pkg" assert { "resolution-mode": "require" }; + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS1454: `resolution-mode` can only be set for type-only imports. -+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -+!!! error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. export type { ImportInterface } from "pkg" assert { "resolution-mode": "import" }; + ~~~~~~~~~~~~~~~ +!!! error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS1454: `resolution-mode` can only be set for type-only imports. -+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -+!!! error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. ==== /node_modules/pkg/package.json (0 errors) ==== { diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=node16).errors.txt b/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=node16).errors.txt index 262511f8f6..a5ec1a567a 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=node16).errors.txt +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=node16).errors.txt @@ -1,13 +1,11 @@ index.cts(5,33): error TS2339: Property 'name' does not exist on type 'string'. index.mts(1,34): error TS2823: Import attributes are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'. index.mts(3,38): error TS2823: Import attributes are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'. -index.mts(5,33): error TS2339: Property 'name' does not exist on type 'string'. index.ts(1,34): error TS2823: Import attributes are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'. index.ts(3,38): error TS2823: Import attributes are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'. -index.ts(5,33): error TS2339: Property 'name' does not exist on type 'string'. -==== index.ts (3 errors) ==== +==== index.ts (2 errors) ==== import pkg from "./package.json" with { type: "json" }; ~~~~~~~~~~~~~~~~~~~~~ !!! error TS2823: Import attributes are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'. @@ -17,8 +15,6 @@ index.ts(5,33): error TS2339: Property 'name' does not exist on type 'string'. !!! error TS2823: Import attributes are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'. export const thing = ns; export const name2 = ns.default.name; - ~~~~ -!!! error TS2339: Property 'name' does not exist on type 'string'. ==== index.cts (1 errors) ==== import pkg from "./package.json"; export const name = pkg.name; @@ -27,7 +23,7 @@ index.ts(5,33): error TS2339: Property 'name' does not exist on type 'string'. export const name2 = ns.default.name; ~~~~ !!! error TS2339: Property 'name' does not exist on type 'string'. -==== index.mts (3 errors) ==== +==== index.mts (2 errors) ==== import pkg from "./package.json" with { type: "json" }; ~~~~~~~~~~~~~~~~~~~~~ !!! error TS2823: Import attributes are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'. @@ -37,8 +33,6 @@ index.ts(5,33): error TS2339: Property 'name' does not exist on type 'string'. !!! error TS2823: Import attributes are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'. export const thing = ns; export const name2 = ns.default.name; - ~~~~ -!!! error TS2339: Property 'name' does not exist on type 'string'. ==== package.json (0 errors) ==== { "name": "pkg", diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=node16).errors.txt.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=node16).errors.txt.diff index 44db5aa3bc..782136541f 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=node16).errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=node16).errors.txt.diff @@ -4,43 +4,20 @@ +index.cts(5,33): error TS2339: Property 'name' does not exist on type 'string'. index.mts(1,34): error TS2823: Import attributes are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'. index.mts(3,38): error TS2823: Import attributes are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'. -+index.mts(5,33): error TS2339: Property 'name' does not exist on type 'string'. index.ts(1,34): error TS2823: Import attributes are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'. - index.ts(3,38): error TS2823: Import attributes are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'. -+index.ts(5,33): error TS2339: Property 'name' does not exist on type 'string'. - - --==== index.ts (2 errors) ==== -+==== index.ts (3 errors) ==== - import pkg from "./package.json" with { type: "json" }; - ~~~~~~~~~~~~~~~~~~~~~ - !!! error TS2823: Import attributes are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'. -@@= skipped -13, +16 lines =@@ +@@= skipped -13, +14 lines =@@ !!! error TS2823: Import attributes are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'. export const thing = ns; export const name2 = ns.default.name; -==== index.cts (0 errors) ==== -+ ~~~~ -+!!! error TS2339: Property 'name' does not exist on type 'string'. +==== index.cts (1 errors) ==== import pkg from "./package.json"; export const name = pkg.name; import * as ns from "./package.json"; export const thing = ns; export const name2 = ns.default.name; --==== index.mts (2 errors) ==== + ~~~~ +!!! error TS2339: Property 'name' does not exist on type 'string'. -+==== index.mts (3 errors) ==== + ==== index.mts (2 errors) ==== import pkg from "./package.json" with { type: "json" }; ~~~~~~~~~~~~~~~~~~~~~ - !!! error TS2823: Import attributes are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'. -@@= skipped -16, +20 lines =@@ - !!! error TS2823: Import attributes are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'. - export const thing = ns; - export const name2 = ns.default.name; -+ ~~~~ -+!!! error TS2339: Property 'name' does not exist on type 'string'. - ==== package.json (0 errors) ==== - { - "name": "pkg", diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=node16).symbols b/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=node16).symbols index 609d7f9ac3..cf7756f81c 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=node16).symbols +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=node16).symbols @@ -19,9 +19,11 @@ export const thing = ns; export const name2 = ns.default.name; >name2 : Symbol(name2, Decl(index.ts, 4, 12)) ->ns.default : Symbol(default, Decl(package.json, 3, 21)) +>ns.default.name : Symbol(name, Decl(package.json, 0, 1)) +>ns.default : Symbol(default) >ns : Symbol(ns, Decl(index.ts, 2, 6)) ->default : Symbol(default, Decl(package.json, 3, 21)) +>default : Symbol(default) +>name : Symbol(name, Decl(package.json, 0, 1)) === index.cts === import pkg from "./package.json"; @@ -65,9 +67,11 @@ export const thing = ns; export const name2 = ns.default.name; >name2 : Symbol(name2, Decl(index.mts, 4, 12)) ->ns.default : Symbol(default, Decl(package.json, 3, 21)) +>ns.default.name : Symbol(name, Decl(package.json, 0, 1)) +>ns.default : Symbol(default) >ns : Symbol(ns, Decl(index.mts, 2, 6)) ->default : Symbol(default, Decl(package.json, 3, 21)) +>default : Symbol(default) +>name : Symbol(name, Decl(package.json, 0, 1)) === package.json === { diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=node16).symbols.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=node16).symbols.diff index 7dfb69d859..0ee8ec7b38 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=node16).symbols.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=node16).symbols.diff @@ -18,15 +18,17 @@ >name2 : Symbol(name2, Decl(index.ts, 4, 12)) ->ns.default.name : Symbol("name", Decl(package.json, 0, 1)) ->ns.default : Symbol("package") -+>ns.default : Symbol(default, Decl(package.json, 3, 21)) ++>ns.default.name : Symbol(name, Decl(package.json, 0, 1)) ++>ns.default : Symbol(default) >ns : Symbol(ns, Decl(index.ts, 2, 6)) ->default : Symbol("package") ->name : Symbol("name", Decl(package.json, 0, 1)) -+>default : Symbol(default, Decl(package.json, 3, 21)) ++>default : Symbol(default) ++>name : Symbol(name, Decl(package.json, 0, 1)) === index.cts === import pkg from "./package.json"; -@@= skipped -12, +10 lines =@@ +@@= skipped -12, +12 lines =@@ export const name = pkg.name; >name : Symbol(name, Decl(index.cts, 1, 12)) @@ -70,11 +72,13 @@ >name2 : Symbol(name2, Decl(index.mts, 4, 12)) ->ns.default.name : Symbol("name", Decl(package.json, 0, 1)) ->ns.default : Symbol("package") -+>ns.default : Symbol(default, Decl(package.json, 3, 21)) ++>ns.default.name : Symbol(name, Decl(package.json, 0, 1)) ++>ns.default : Symbol(default) >ns : Symbol(ns, Decl(index.mts, 2, 6)) ->default : Symbol("package") ->name : Symbol("name", Decl(package.json, 0, 1)) -+>default : Symbol(default, Decl(package.json, 3, 21)) ++>default : Symbol(default) ++>name : Symbol(name, Decl(package.json, 0, 1)) === package.json === { diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=node16).types b/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=node16).types index 016230ef6f..8fd2b5dc73 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=node16).types +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=node16).types @@ -12,20 +12,20 @@ export const name = pkg.name; >name : string import * as ns from "./package.json" with { type: "json" }; ->ns : { name: string; version: string; type: string; default: string; } +>ns : { default: { name: string; version: string; type: string; default: string; }; } >type : any export const thing = ns; ->thing : { name: string; version: string; type: string; default: string; } ->ns : { name: string; version: string; type: string; default: string; } +>thing : { default: { name: string; version: string; type: string; default: string; }; } +>ns : { default: { name: string; version: string; type: string; default: string; }; } export const name2 = ns.default.name; ->name2 : any ->ns.default.name : any ->ns.default : string ->ns : { name: string; version: string; type: string; default: string; } ->default : string ->name : any +>name2 : string +>ns.default.name : string +>ns.default : { name: string; version: string; type: string; default: string; } +>ns : { default: { name: string; version: string; type: string; default: string; }; } +>default : { name: string; version: string; type: string; default: string; } +>name : string === index.cts === import pkg from "./package.json"; @@ -64,20 +64,20 @@ export const name = pkg.name; >name : string import * as ns from "./package.json" with { type: "json" }; ->ns : { name: string; version: string; type: string; default: string; } +>ns : { default: { name: string; version: string; type: string; default: string; }; } >type : any export const thing = ns; ->thing : { name: string; version: string; type: string; default: string; } ->ns : { name: string; version: string; type: string; default: string; } +>thing : { default: { name: string; version: string; type: string; default: string; }; } +>ns : { default: { name: string; version: string; type: string; default: string; }; } export const name2 = ns.default.name; ->name2 : any ->ns.default.name : any ->ns.default : string ->ns : { name: string; version: string; type: string; default: string; } ->default : string ->name : any +>name2 : string +>ns.default.name : string +>ns.default : { name: string; version: string; type: string; default: string; } +>ns : { default: { name: string; version: string; type: string; default: string; }; } +>default : { name: string; version: string; type: string; default: string; } +>name : string === package.json === { diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=node16).types.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=node16).types.diff index 3f3db6d145..b1f3da3287 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=node16).types.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=node16).types.diff @@ -1,36 +1,6 @@ --- old.nodeModulesResolveJsonModule(module=node16).types +++ new.nodeModulesResolveJsonModule(module=node16).types -@@= skipped -11, +11 lines =@@ - >name : string - - import * as ns from "./package.json" with { type: "json" }; -->ns : { default: { name: string; version: string; type: string; default: string; }; } -+>ns : { name: string; version: string; type: string; default: string; } - >type : any - - export const thing = ns; -->thing : { default: { name: string; version: string; type: string; default: string; }; } -->ns : { default: { name: string; version: string; type: string; default: string; }; } -+>thing : { name: string; version: string; type: string; default: string; } -+>ns : { name: string; version: string; type: string; default: string; } - - export const name2 = ns.default.name; -->name2 : string -->ns.default.name : string -->ns.default : { name: string; version: string; type: string; default: string; } -->ns : { default: { name: string; version: string; type: string; default: string; }; } -->default : { name: string; version: string; type: string; default: string; } -->name : string -+>name2 : any -+>ns.default.name : any -+>ns.default : string -+>ns : { name: string; version: string; type: string; default: string; } -+>default : string -+>name : any - - === index.cts === - import pkg from "./package.json"; -@@= skipped -26, +26 lines =@@ +@@= skipped -37, +37 lines =@@ >name : string import * as ns from "./package.json"; @@ -59,33 +29,3 @@ === index.mts === import pkg from "./package.json" with { type: "json" }; -@@= skipped -26, +26 lines =@@ - >name : string - - import * as ns from "./package.json" with { type: "json" }; -->ns : { default: { name: string; version: string; type: string; default: string; }; } -+>ns : { name: string; version: string; type: string; default: string; } - >type : any - - export const thing = ns; -->thing : { default: { name: string; version: string; type: string; default: string; }; } -->ns : { default: { name: string; version: string; type: string; default: string; }; } -+>thing : { name: string; version: string; type: string; default: string; } -+>ns : { name: string; version: string; type: string; default: string; } - - export const name2 = ns.default.name; -->name2 : string -->ns.default.name : string -->ns.default : { name: string; version: string; type: string; default: string; } -->ns : { default: { name: string; version: string; type: string; default: string; }; } -->default : { name: string; version: string; type: string; default: string; } -->name : string -+>name2 : any -+>ns.default.name : any -+>ns.default : string -+>ns : { name: string; version: string; type: string; default: string; } -+>default : string -+>name : any - - === package.json === - { diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=nodenext).errors.txt b/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=nodenext).errors.txt index 96d31a39cb..10ebcd6562 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=nodenext).errors.txt +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=nodenext).errors.txt @@ -1,24 +1,12 @@ index.cts(5,33): error TS2339: Property 'name' does not exist on type 'string'. -index.mts(1,34): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. -index.mts(3,38): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. -index.mts(5,33): error TS2339: Property 'name' does not exist on type 'string'. -index.ts(1,34): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. -index.ts(3,38): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. -index.ts(5,33): error TS2339: Property 'name' does not exist on type 'string'. -==== index.ts (3 errors) ==== +==== index.ts (0 errors) ==== import pkg from "./package.json" with { type: "json" }; - ~~~~~~~~~~~~~~~~~~~~~ -!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. export const name = pkg.name; import * as ns from "./package.json" with { type: "json" }; - ~~~~~~~~~~~~~~~~~~~~~ -!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. export const thing = ns; export const name2 = ns.default.name; - ~~~~ -!!! error TS2339: Property 'name' does not exist on type 'string'. ==== index.cts (1 errors) ==== import pkg from "./package.json"; export const name = pkg.name; @@ -27,18 +15,12 @@ index.ts(5,33): error TS2339: Property 'name' does not exist on type 'string'. export const name2 = ns.default.name; ~~~~ !!! error TS2339: Property 'name' does not exist on type 'string'. -==== index.mts (3 errors) ==== +==== index.mts (0 errors) ==== import pkg from "./package.json" with { type: "json" }; - ~~~~~~~~~~~~~~~~~~~~~ -!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. export const name = pkg.name; import * as ns from "./package.json" with { type: "json" }; - ~~~~~~~~~~~~~~~~~~~~~ -!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. export const thing = ns; export const name2 = ns.default.name; - ~~~~ -!!! error TS2339: Property 'name' does not exist on type 'string'. ==== package.json (0 errors) ==== { "name": "pkg", diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=nodenext).errors.txt.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=nodenext).errors.txt.diff index b56bccce22..abae0dff61 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=nodenext).errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=nodenext).errors.txt.diff @@ -4,26 +4,14 @@ - @@= skipped --1, +1 lines =@@ +index.cts(5,33): error TS2339: Property 'name' does not exist on type 'string'. -+index.mts(1,34): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. -+index.mts(3,38): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. -+index.mts(5,33): error TS2339: Property 'name' does not exist on type 'string'. -+index.ts(1,34): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. -+index.ts(3,38): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. -+index.ts(5,33): error TS2339: Property 'name' does not exist on type 'string'. + + -+==== index.ts (3 errors) ==== ++==== index.ts (0 errors) ==== + import pkg from "./package.json" with { type: "json" }; -+ ~~~~~~~~~~~~~~~~~~~~~ -+!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. + export const name = pkg.name; + import * as ns from "./package.json" with { type: "json" }; -+ ~~~~~~~~~~~~~~~~~~~~~ -+!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. + export const thing = ns; + export const name2 = ns.default.name; -+ ~~~~ -+!!! error TS2339: Property 'name' does not exist on type 'string'. +==== index.cts (1 errors) ==== + import pkg from "./package.json"; + export const name = pkg.name; @@ -32,18 +20,12 @@ + export const name2 = ns.default.name; + ~~~~ +!!! error TS2339: Property 'name' does not exist on type 'string'. -+==== index.mts (3 errors) ==== ++==== index.mts (0 errors) ==== + import pkg from "./package.json" with { type: "json" }; -+ ~~~~~~~~~~~~~~~~~~~~~ -+!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. + export const name = pkg.name; + import * as ns from "./package.json" with { type: "json" }; -+ ~~~~~~~~~~~~~~~~~~~~~ -+!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. + export const thing = ns; + export const name2 = ns.default.name; -+ ~~~~ -+!!! error TS2339: Property 'name' does not exist on type 'string'. +==== package.json (0 errors) ==== + { + "name": "pkg", diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=nodenext).symbols b/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=nodenext).symbols index 609d7f9ac3..cf7756f81c 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=nodenext).symbols +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=nodenext).symbols @@ -19,9 +19,11 @@ export const thing = ns; export const name2 = ns.default.name; >name2 : Symbol(name2, Decl(index.ts, 4, 12)) ->ns.default : Symbol(default, Decl(package.json, 3, 21)) +>ns.default.name : Symbol(name, Decl(package.json, 0, 1)) +>ns.default : Symbol(default) >ns : Symbol(ns, Decl(index.ts, 2, 6)) ->default : Symbol(default, Decl(package.json, 3, 21)) +>default : Symbol(default) +>name : Symbol(name, Decl(package.json, 0, 1)) === index.cts === import pkg from "./package.json"; @@ -65,9 +67,11 @@ export const thing = ns; export const name2 = ns.default.name; >name2 : Symbol(name2, Decl(index.mts, 4, 12)) ->ns.default : Symbol(default, Decl(package.json, 3, 21)) +>ns.default.name : Symbol(name, Decl(package.json, 0, 1)) +>ns.default : Symbol(default) >ns : Symbol(ns, Decl(index.mts, 2, 6)) ->default : Symbol(default, Decl(package.json, 3, 21)) +>default : Symbol(default) +>name : Symbol(name, Decl(package.json, 0, 1)) === package.json === { diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=nodenext).symbols.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=nodenext).symbols.diff index 8b6f89c946..2e0b0e18ab 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=nodenext).symbols.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=nodenext).symbols.diff @@ -18,15 +18,17 @@ >name2 : Symbol(name2, Decl(index.ts, 4, 12)) ->ns.default.name : Symbol("name", Decl(package.json, 0, 1)) ->ns.default : Symbol("package") -+>ns.default : Symbol(default, Decl(package.json, 3, 21)) ++>ns.default.name : Symbol(name, Decl(package.json, 0, 1)) ++>ns.default : Symbol(default) >ns : Symbol(ns, Decl(index.ts, 2, 6)) ->default : Symbol("package") ->name : Symbol("name", Decl(package.json, 0, 1)) -+>default : Symbol(default, Decl(package.json, 3, 21)) ++>default : Symbol(default) ++>name : Symbol(name, Decl(package.json, 0, 1)) === index.cts === import pkg from "./package.json"; -@@= skipped -12, +10 lines =@@ +@@= skipped -12, +12 lines =@@ export const name = pkg.name; >name : Symbol(name, Decl(index.cts, 1, 12)) @@ -70,11 +72,13 @@ >name2 : Symbol(name2, Decl(index.mts, 4, 12)) ->ns.default.name : Symbol("name", Decl(package.json, 0, 1)) ->ns.default : Symbol("package") -+>ns.default : Symbol(default, Decl(package.json, 3, 21)) ++>ns.default.name : Symbol(name, Decl(package.json, 0, 1)) ++>ns.default : Symbol(default) >ns : Symbol(ns, Decl(index.mts, 2, 6)) ->default : Symbol("package") ->name : Symbol("name", Decl(package.json, 0, 1)) -+>default : Symbol(default, Decl(package.json, 3, 21)) ++>default : Symbol(default) ++>name : Symbol(name, Decl(package.json, 0, 1)) === package.json === { diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=nodenext).types b/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=nodenext).types index 016230ef6f..8fd2b5dc73 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=nodenext).types +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=nodenext).types @@ -12,20 +12,20 @@ export const name = pkg.name; >name : string import * as ns from "./package.json" with { type: "json" }; ->ns : { name: string; version: string; type: string; default: string; } +>ns : { default: { name: string; version: string; type: string; default: string; }; } >type : any export const thing = ns; ->thing : { name: string; version: string; type: string; default: string; } ->ns : { name: string; version: string; type: string; default: string; } +>thing : { default: { name: string; version: string; type: string; default: string; }; } +>ns : { default: { name: string; version: string; type: string; default: string; }; } export const name2 = ns.default.name; ->name2 : any ->ns.default.name : any ->ns.default : string ->ns : { name: string; version: string; type: string; default: string; } ->default : string ->name : any +>name2 : string +>ns.default.name : string +>ns.default : { name: string; version: string; type: string; default: string; } +>ns : { default: { name: string; version: string; type: string; default: string; }; } +>default : { name: string; version: string; type: string; default: string; } +>name : string === index.cts === import pkg from "./package.json"; @@ -64,20 +64,20 @@ export const name = pkg.name; >name : string import * as ns from "./package.json" with { type: "json" }; ->ns : { name: string; version: string; type: string; default: string; } +>ns : { default: { name: string; version: string; type: string; default: string; }; } >type : any export const thing = ns; ->thing : { name: string; version: string; type: string; default: string; } ->ns : { name: string; version: string; type: string; default: string; } +>thing : { default: { name: string; version: string; type: string; default: string; }; } +>ns : { default: { name: string; version: string; type: string; default: string; }; } export const name2 = ns.default.name; ->name2 : any ->ns.default.name : any ->ns.default : string ->ns : { name: string; version: string; type: string; default: string; } ->default : string ->name : any +>name2 : string +>ns.default.name : string +>ns.default : { name: string; version: string; type: string; default: string; } +>ns : { default: { name: string; version: string; type: string; default: string; }; } +>default : { name: string; version: string; type: string; default: string; } +>name : string === package.json === { diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=nodenext).types.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=nodenext).types.diff index 3682e8780e..f6392fd166 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=nodenext).types.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=nodenext).types.diff @@ -9,38 +9,16 @@ export const name = pkg.name; >name : string -@@= skipped -9, +9 lines =@@ - >name : string +@@= skipped -10, +10 lines =@@ import * as ns from "./package.json" with { type: "json" }; -->ns : { default: { name: string; version: string; type: string; default: string; }; } + >ns : { default: { name: string; version: string; type: string; default: string; }; } ->type : error -+>ns : { name: string; version: string; type: string; default: string; } +>type : any export const thing = ns; -->thing : { default: { name: string; version: string; type: string; default: string; }; } -->ns : { default: { name: string; version: string; type: string; default: string; }; } -+>thing : { name: string; version: string; type: string; default: string; } -+>ns : { name: string; version: string; type: string; default: string; } - - export const name2 = ns.default.name; -->name2 : string -->ns.default.name : string -->ns.default : { name: string; version: string; type: string; default: string; } -->ns : { default: { name: string; version: string; type: string; default: string; }; } -->default : { name: string; version: string; type: string; default: string; } -->name : string -+>name2 : any -+>ns.default.name : any -+>ns.default : string -+>ns : { name: string; version: string; type: string; default: string; } -+>default : string -+>name : any - - === index.cts === - import pkg from "./package.json"; -@@= skipped -26, +26 lines =@@ + >thing : { default: { name: string; version: string; type: string; default: string; }; } +@@= skipped -25, +25 lines =@@ >name : string import * as ns from "./package.json"; @@ -75,34 +53,12 @@ export const name = pkg.name; >name : string -@@= skipped -26, +26 lines =@@ - >name : string +@@= skipped -27, +27 lines =@@ import * as ns from "./package.json" with { type: "json" }; -->ns : { default: { name: string; version: string; type: string; default: string; }; } + >ns : { default: { name: string; version: string; type: string; default: string; }; } ->type : error -+>ns : { name: string; version: string; type: string; default: string; } +>type : any export const thing = ns; -->thing : { default: { name: string; version: string; type: string; default: string; }; } -->ns : { default: { name: string; version: string; type: string; default: string; }; } -+>thing : { name: string; version: string; type: string; default: string; } -+>ns : { name: string; version: string; type: string; default: string; } - - export const name2 = ns.default.name; -->name2 : string -->ns.default.name : string -->ns.default : { name: string; version: string; type: string; default: string; } -->ns : { default: { name: string; version: string; type: string; default: string; }; } -->default : { name: string; version: string; type: string; default: string; } -->name : string -+>name2 : any -+>ns.default.name : any -+>ns.default : string -+>ns : { name: string; version: string; type: string; default: string; } -+>default : string -+>name : any - - === package.json === - { + >thing : { default: { name: string; version: string; type: string; default: string; }; } diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesSynchronousCallErrors(module=node16).types b/testdata/baselines/reference/submodule/conformance/nodeModulesSynchronousCallErrors(module=node16).types index f344e2e0c9..080ae7e227 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesSynchronousCallErrors(module=node16).types +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesSynchronousCallErrors(module=node16).types @@ -25,9 +25,9 @@ export async function f() { >"../index.js" : "../index.js" const mod4 = await import ("./index.js"); ->mod4 : typeof import("subfolder/index") ->await import ("./index.js") : typeof import("subfolder/index") ->import ("./index.js") : Promise +>mod4 : { f: () => Promise; default: typeof import("subfolder/index"); } +>await import ("./index.js") : { f: () => Promise; default: typeof import("subfolder/index"); } +>import ("./index.js") : Promise<{ f: () => Promise; default: typeof import("subfolder/index"); }> >"./index.js" : "./index.js" h(); @@ -59,9 +59,9 @@ export async function h() { >"./index.js" : "./index.js" const mod4 = await import ("./subfolder/index.js"); ->mod4 : typeof import("subfolder/index") ->await import ("./subfolder/index.js") : typeof import("subfolder/index") ->import ("./subfolder/index.js") : Promise +>mod4 : { f: () => Promise; default: typeof import("subfolder/index"); } +>await import ("./subfolder/index.js") : { f: () => Promise; default: typeof import("subfolder/index"); } +>import ("./subfolder/index.js") : Promise<{ f: () => Promise; default: typeof import("subfolder/index"); }> >"./subfolder/index.js" : "./subfolder/index.js" f(); diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesSynchronousCallErrors(module=node16).types.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesSynchronousCallErrors(module=node16).types.diff index 529271bc97..031e02fc3a 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesSynchronousCallErrors(module=node16).types.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesSynchronousCallErrors(module=node16).types.diff @@ -31,9 +31,9 @@ ->mod4 : { default: typeof mod2; f(): Promise; } ->await import ("./index.js") : { default: typeof mod2; f(): Promise; } ->import ("./index.js") : Promise<{ default: typeof mod2; f(): Promise; }> -+>mod4 : typeof import("subfolder/index") -+>await import ("./index.js") : typeof import("subfolder/index") -+>import ("./index.js") : Promise ++>mod4 : { f: () => Promise; default: typeof import("subfolder/index"); } ++>await import ("./index.js") : { f: () => Promise; default: typeof import("subfolder/index"); } ++>import ("./index.js") : Promise<{ f: () => Promise; default: typeof import("subfolder/index"); }> >"./index.js" : "./index.js" h(); @@ -67,9 +67,9 @@ ->mod4 : { default: typeof mod2; f(): Promise; } ->await import ("./subfolder/index.js") : { default: typeof mod2; f(): Promise; } ->import ("./subfolder/index.js") : Promise<{ default: typeof mod2; f(): Promise; }> -+>mod4 : typeof import("subfolder/index") -+>await import ("./subfolder/index.js") : typeof import("subfolder/index") -+>import ("./subfolder/index.js") : Promise ++>mod4 : { f: () => Promise; default: typeof import("subfolder/index"); } ++>await import ("./subfolder/index.js") : { f: () => Promise; default: typeof import("subfolder/index"); } ++>import ("./subfolder/index.js") : Promise<{ f: () => Promise; default: typeof import("subfolder/index"); }> >"./subfolder/index.js" : "./subfolder/index.js" f(); diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesSynchronousCallErrors(module=nodenext).types b/testdata/baselines/reference/submodule/conformance/nodeModulesSynchronousCallErrors(module=nodenext).types index f344e2e0c9..080ae7e227 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesSynchronousCallErrors(module=nodenext).types +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesSynchronousCallErrors(module=nodenext).types @@ -25,9 +25,9 @@ export async function f() { >"../index.js" : "../index.js" const mod4 = await import ("./index.js"); ->mod4 : typeof import("subfolder/index") ->await import ("./index.js") : typeof import("subfolder/index") ->import ("./index.js") : Promise +>mod4 : { f: () => Promise; default: typeof import("subfolder/index"); } +>await import ("./index.js") : { f: () => Promise; default: typeof import("subfolder/index"); } +>import ("./index.js") : Promise<{ f: () => Promise; default: typeof import("subfolder/index"); }> >"./index.js" : "./index.js" h(); @@ -59,9 +59,9 @@ export async function h() { >"./index.js" : "./index.js" const mod4 = await import ("./subfolder/index.js"); ->mod4 : typeof import("subfolder/index") ->await import ("./subfolder/index.js") : typeof import("subfolder/index") ->import ("./subfolder/index.js") : Promise +>mod4 : { f: () => Promise; default: typeof import("subfolder/index"); } +>await import ("./subfolder/index.js") : { f: () => Promise; default: typeof import("subfolder/index"); } +>import ("./subfolder/index.js") : Promise<{ f: () => Promise; default: typeof import("subfolder/index"); }> >"./subfolder/index.js" : "./subfolder/index.js" f(); diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesSynchronousCallErrors(module=nodenext).types.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesSynchronousCallErrors(module=nodenext).types.diff index 14a785cb8a..38f3cc4b55 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesSynchronousCallErrors(module=nodenext).types.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesSynchronousCallErrors(module=nodenext).types.diff @@ -31,9 +31,9 @@ ->mod4 : { default: typeof mod2; f(): Promise; } ->await import ("./index.js") : { default: typeof mod2; f(): Promise; } ->import ("./index.js") : Promise<{ default: typeof mod2; f(): Promise; }> -+>mod4 : typeof import("subfolder/index") -+>await import ("./index.js") : typeof import("subfolder/index") -+>import ("./index.js") : Promise ++>mod4 : { f: () => Promise; default: typeof import("subfolder/index"); } ++>await import ("./index.js") : { f: () => Promise; default: typeof import("subfolder/index"); } ++>import ("./index.js") : Promise<{ f: () => Promise; default: typeof import("subfolder/index"); }> >"./index.js" : "./index.js" h(); @@ -67,9 +67,9 @@ ->mod4 : { default: typeof mod2; f(): Promise; } ->await import ("./subfolder/index.js") : { default: typeof mod2; f(): Promise; } ->import ("./subfolder/index.js") : Promise<{ default: typeof mod2; f(): Promise; }> -+>mod4 : typeof import("subfolder/index") -+>await import ("./subfolder/index.js") : typeof import("subfolder/index") -+>import ("./subfolder/index.js") : Promise ++>mod4 : { f: () => Promise; default: typeof import("subfolder/index"); } ++>await import ("./subfolder/index.js") : { f: () => Promise; default: typeof import("subfolder/index"); } ++>import ("./subfolder/index.js") : Promise<{ f: () => Promise; default: typeof import("subfolder/index"); }> >"./subfolder/index.js" : "./subfolder/index.js" f(); diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesTopLevelAwait(module=node16).errors.txt b/testdata/baselines/reference/submodule/conformance/nodeModulesTopLevelAwait(module=node16).errors.txt index bde172d3b2..3a11425d12 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesTopLevelAwait(module=node16).errors.txt +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesTopLevelAwait(module=node16).errors.txt @@ -1,18 +1,18 @@ index.ts(2,11): error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. index.ts(4,5): error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. -subfolder/index.ts(2,11): error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. -subfolder/index.ts(4,5): error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. +subfolder/index.ts(2,11): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. +subfolder/index.ts(4,5): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. ==== subfolder/index.ts (2 errors) ==== // cjs format file const x = await 1; ~~~~~ -!!! error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. +!!! error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. export {x}; for await (const y of []) {} ~~~~~ -!!! error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. +!!! error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. ==== index.ts (2 errors) ==== // esm format file const x = await 1; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesTopLevelAwait(module=node16).errors.txt.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesTopLevelAwait(module=node16).errors.txt.diff index eca066cf58..ba9340836a 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesTopLevelAwait(module=node16).errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesTopLevelAwait(module=node16).errors.txt.diff @@ -1,26 +1,16 @@ --- old.nodeModulesTopLevelAwait(module=node16).errors.txt +++ new.nodeModulesTopLevelAwait(module=node16).errors.txt @@= skipped -0, +0 lines =@@ --subfolder/index.ts(2,11): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. --subfolder/index.ts(4,5): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. +index.ts(2,11): error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. +index.ts(4,5): error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. -+subfolder/index.ts(2,11): error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. -+subfolder/index.ts(4,5): error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. + subfolder/index.ts(2,11): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. + subfolder/index.ts(4,5): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. - - ==== subfolder/index.ts (2 errors) ==== - // cjs format file - const x = await 1; - ~~~~~ --!!! error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. -+!!! error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. - export {x}; +@@= skipped -10, +12 lines =@@ for await (const y of []) {} ~~~~~ --!!! error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. + !!! error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. -==== index.ts (0 errors) ==== -+!!! error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. +==== index.ts (2 errors) ==== // esm format file const x = await 1; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesTopLevelAwait(module=nodenext).errors.txt b/testdata/baselines/reference/submodule/conformance/nodeModulesTopLevelAwait(module=nodenext).errors.txt index bde172d3b2..3a11425d12 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesTopLevelAwait(module=nodenext).errors.txt +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesTopLevelAwait(module=nodenext).errors.txt @@ -1,18 +1,18 @@ index.ts(2,11): error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. index.ts(4,5): error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. -subfolder/index.ts(2,11): error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. -subfolder/index.ts(4,5): error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. +subfolder/index.ts(2,11): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. +subfolder/index.ts(4,5): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. ==== subfolder/index.ts (2 errors) ==== // cjs format file const x = await 1; ~~~~~ -!!! error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. +!!! error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. export {x}; for await (const y of []) {} ~~~~~ -!!! error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. +!!! error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. ==== index.ts (2 errors) ==== // esm format file const x = await 1; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesTopLevelAwait(module=nodenext).errors.txt.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesTopLevelAwait(module=nodenext).errors.txt.diff index 2de2cd7757..9dd8637042 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesTopLevelAwait(module=nodenext).errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesTopLevelAwait(module=nodenext).errors.txt.diff @@ -1,26 +1,16 @@ --- old.nodeModulesTopLevelAwait(module=nodenext).errors.txt +++ new.nodeModulesTopLevelAwait(module=nodenext).errors.txt @@= skipped -0, +0 lines =@@ --subfolder/index.ts(2,11): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. --subfolder/index.ts(4,5): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. +index.ts(2,11): error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. +index.ts(4,5): error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. -+subfolder/index.ts(2,11): error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. -+subfolder/index.ts(4,5): error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. + subfolder/index.ts(2,11): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. + subfolder/index.ts(4,5): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. - - ==== subfolder/index.ts (2 errors) ==== - // cjs format file - const x = await 1; - ~~~~~ --!!! error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. -+!!! error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. - export {x}; +@@= skipped -10, +12 lines =@@ for await (const y of []) {} ~~~~~ --!!! error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. + !!! error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. -==== index.ts (0 errors) ==== -+!!! error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. +==== index.ts (2 errors) ==== // esm format file const x = await 1; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=node16).errors.txt b/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=node16).errors.txt index d6ecea604b..cb66aee40e 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=node16).errors.txt +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=node16).errors.txt @@ -1,14 +1,11 @@ -/index.ts(4,28): error TS2339: Property 'default' does not exist on type 'RequireInterface'. /sub1/uses.ts(2,16): error TS2552: Cannot find name 'getInterI'. Did you mean 'getInterR'? -==== /index.ts (1 errors) ==== +==== /index.ts (0 errors) ==== // only an esm file can `import` both kinds of files import obj1 from "./sub1/uses.js" import obj2 from "./sub2/uses.js" export default [obj1, obj2.default] as const; - ~~~~~~~ -!!! error TS2339: Property 'default' does not exist on type 'RequireInterface'. ==== /node_modules/pkg/package.json (0 errors) ==== { "name": "pkg", diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=node16).errors.txt.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=node16).errors.txt.diff index 8b181d94d3..be8b701382 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=node16).errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=node16).errors.txt.diff @@ -3,17 +3,14 @@ @@= skipped -0, +-1 lines =@@ - @@= skipped --1, +1 lines =@@ -+/index.ts(4,28): error TS2339: Property 'default' does not exist on type 'RequireInterface'. +/sub1/uses.ts(2,16): error TS2552: Cannot find name 'getInterI'. Did you mean 'getInterR'? + + -+==== /index.ts (1 errors) ==== ++==== /index.ts (0 errors) ==== + // only an esm file can `import` both kinds of files + import obj1 from "./sub1/uses.js" + import obj2 from "./sub2/uses.js" + export default [obj1, obj2.default] as const; -+ ~~~~~~~ -+!!! error TS2339: Property 'default' does not exist on type 'RequireInterface'. +==== /node_modules/pkg/package.json (0 errors) ==== + { + "name": "pkg", diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=node16).symbols b/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=node16).symbols index caebc3574f..34d06d7884 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=node16).symbols +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=node16).symbols @@ -10,7 +10,9 @@ import obj2 from "./sub2/uses.js" export default [obj1, obj2.default] as const; >obj1 : Symbol(obj1, Decl(index.ts, 1, 6)) +>obj2.default : Symbol(default, Decl(uses.ts, 0, 0)) >obj2 : Symbol(obj2, Decl(index.ts, 2, 6)) +>default : Symbol(default, Decl(uses.ts, 0, 0)) >const : Symbol(const) === /node_modules/pkg/require.d.ts === diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=node16).symbols.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=node16).symbols.diff index ac6812e2de..5ebe46a6e2 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=node16).symbols.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=node16).symbols.diff @@ -5,8 +5,10 @@ export default [obj1, obj2.default] as const; >obj1 : Symbol(obj1, Decl(index.ts, 1, 6)) ->obj2.default : Symbol(obj2.default, Decl(uses.ts, 0, 0)) ++>obj2.default : Symbol(default, Decl(uses.ts, 0, 0)) >obj2 : Symbol(obj2, Decl(index.ts, 2, 6)) ->default : Symbol(obj2.default, Decl(uses.ts, 0, 0)) ++>default : Symbol(default, Decl(uses.ts, 0, 0)) >const : Symbol(const) -=== /node_modules/pkg/import.d.ts === @@ -25,7 +27,7 @@ === /node_modules/pkg/require.d.ts === export {}; declare global { -@@= skipped -25, +10 lines =@@ +@@= skipped -25, +12 lines =@@ interface RequireInterface { _r: any; } >RequireInterface : Symbol(RequireInterface, Decl(require.d.ts, 1, 16)) diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=node16).types b/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=node16).types index 4ad321ffbe..20a621929d 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=node16).types +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=node16).types @@ -6,15 +6,15 @@ import obj1 from "./sub1/uses.js" >obj1 : any import obj2 from "./sub2/uses.js" ->obj2 : RequireInterface +>obj2 : typeof import("/sub2/uses") export default [obj1, obj2.default] as const; ->[obj1, obj2.default] as const : [any, any] ->[obj1, obj2.default] : [any, any] +>[obj1, obj2.default] as const : [any, RequireInterface] +>[obj1, obj2.default] : [any, RequireInterface] >obj1 : any ->obj2.default : any ->obj2 : RequireInterface ->default : any +>obj2.default : RequireInterface +>obj2 : typeof import("/sub2/uses") +>default : RequireInterface === /node_modules/pkg/require.d.ts === export {}; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=node16).types.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=node16).types.diff index abfa498090..a6a06b80de 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=node16).types.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=node16).types.diff @@ -9,21 +9,19 @@ import obj2 from "./sub2/uses.js" ->obj2 : typeof obj2 -+>obj2 : RequireInterface ++>obj2 : typeof import("/sub2/uses") export default [obj1, obj2.default] as const; ->[obj1, obj2.default] as const : readonly [ImportInterface, RequireInterface] ->[obj1, obj2.default] : readonly [ImportInterface, RequireInterface] ->obj1 : ImportInterface -->obj2.default : RequireInterface -->obj2 : typeof obj2 -->default : RequireInterface -+>[obj1, obj2.default] as const : [any, any] -+>[obj1, obj2.default] : [any, any] ++>[obj1, obj2.default] as const : [any, RequireInterface] ++>[obj1, obj2.default] : [any, RequireInterface] +>obj1 : any -+>obj2.default : any -+>obj2 : RequireInterface -+>default : any + >obj2.default : RequireInterface +->obj2 : typeof obj2 ++>obj2 : typeof import("/sub2/uses") + >default : RequireInterface -=== /node_modules/pkg/import.d.ts === -export {}; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=nodenext).errors.txt b/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=nodenext).errors.txt index d6ecea604b..cb66aee40e 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=nodenext).errors.txt +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=nodenext).errors.txt @@ -1,14 +1,11 @@ -/index.ts(4,28): error TS2339: Property 'default' does not exist on type 'RequireInterface'. /sub1/uses.ts(2,16): error TS2552: Cannot find name 'getInterI'. Did you mean 'getInterR'? -==== /index.ts (1 errors) ==== +==== /index.ts (0 errors) ==== // only an esm file can `import` both kinds of files import obj1 from "./sub1/uses.js" import obj2 from "./sub2/uses.js" export default [obj1, obj2.default] as const; - ~~~~~~~ -!!! error TS2339: Property 'default' does not exist on type 'RequireInterface'. ==== /node_modules/pkg/package.json (0 errors) ==== { "name": "pkg", diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=nodenext).errors.txt.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=nodenext).errors.txt.diff index 1146b04e51..2dd186d295 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=nodenext).errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=nodenext).errors.txt.diff @@ -3,17 +3,14 @@ @@= skipped -0, +-1 lines =@@ - @@= skipped --1, +1 lines =@@ -+/index.ts(4,28): error TS2339: Property 'default' does not exist on type 'RequireInterface'. +/sub1/uses.ts(2,16): error TS2552: Cannot find name 'getInterI'. Did you mean 'getInterR'? + + -+==== /index.ts (1 errors) ==== ++==== /index.ts (0 errors) ==== + // only an esm file can `import` both kinds of files + import obj1 from "./sub1/uses.js" + import obj2 from "./sub2/uses.js" + export default [obj1, obj2.default] as const; -+ ~~~~~~~ -+!!! error TS2339: Property 'default' does not exist on type 'RequireInterface'. +==== /node_modules/pkg/package.json (0 errors) ==== + { + "name": "pkg", diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=nodenext).symbols b/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=nodenext).symbols index caebc3574f..34d06d7884 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=nodenext).symbols +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=nodenext).symbols @@ -10,7 +10,9 @@ import obj2 from "./sub2/uses.js" export default [obj1, obj2.default] as const; >obj1 : Symbol(obj1, Decl(index.ts, 1, 6)) +>obj2.default : Symbol(default, Decl(uses.ts, 0, 0)) >obj2 : Symbol(obj2, Decl(index.ts, 2, 6)) +>default : Symbol(default, Decl(uses.ts, 0, 0)) >const : Symbol(const) === /node_modules/pkg/require.d.ts === diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=nodenext).symbols.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=nodenext).symbols.diff index 80dd9551b8..8743e30fed 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=nodenext).symbols.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=nodenext).symbols.diff @@ -5,8 +5,10 @@ export default [obj1, obj2.default] as const; >obj1 : Symbol(obj1, Decl(index.ts, 1, 6)) ->obj2.default : Symbol(obj2.default, Decl(uses.ts, 0, 0)) ++>obj2.default : Symbol(default, Decl(uses.ts, 0, 0)) >obj2 : Symbol(obj2, Decl(index.ts, 2, 6)) ->default : Symbol(obj2.default, Decl(uses.ts, 0, 0)) ++>default : Symbol(default, Decl(uses.ts, 0, 0)) >const : Symbol(const) -=== /node_modules/pkg/import.d.ts === @@ -25,7 +27,7 @@ === /node_modules/pkg/require.d.ts === export {}; declare global { -@@= skipped -25, +10 lines =@@ +@@= skipped -25, +12 lines =@@ interface RequireInterface { _r: any; } >RequireInterface : Symbol(RequireInterface, Decl(require.d.ts, 1, 16)) diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=nodenext).types b/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=nodenext).types index 4ad321ffbe..20a621929d 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=nodenext).types +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=nodenext).types @@ -6,15 +6,15 @@ import obj1 from "./sub1/uses.js" >obj1 : any import obj2 from "./sub2/uses.js" ->obj2 : RequireInterface +>obj2 : typeof import("/sub2/uses") export default [obj1, obj2.default] as const; ->[obj1, obj2.default] as const : [any, any] ->[obj1, obj2.default] : [any, any] +>[obj1, obj2.default] as const : [any, RequireInterface] +>[obj1, obj2.default] : [any, RequireInterface] >obj1 : any ->obj2.default : any ->obj2 : RequireInterface ->default : any +>obj2.default : RequireInterface +>obj2 : typeof import("/sub2/uses") +>default : RequireInterface === /node_modules/pkg/require.d.ts === export {}; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=nodenext).types.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=nodenext).types.diff index f3c21bc060..4559f1f25d 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=nodenext).types.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=nodenext).types.diff @@ -9,21 +9,19 @@ import obj2 from "./sub2/uses.js" ->obj2 : typeof obj2 -+>obj2 : RequireInterface ++>obj2 : typeof import("/sub2/uses") export default [obj1, obj2.default] as const; ->[obj1, obj2.default] as const : readonly [ImportInterface, RequireInterface] ->[obj1, obj2.default] : readonly [ImportInterface, RequireInterface] ->obj1 : ImportInterface -->obj2.default : RequireInterface -->obj2 : typeof obj2 -->default : RequireInterface -+>[obj1, obj2.default] as const : [any, any] -+>[obj1, obj2.default] : [any, any] ++>[obj1, obj2.default] as const : [any, RequireInterface] ++>[obj1, obj2.default] : [any, RequireInterface] +>obj1 : any -+>obj2.default : any -+>obj2 : RequireInterface -+>default : any + >obj2.default : RequireInterface +->obj2 : typeof obj2 ++>obj2 : typeof import("/sub2/uses") + >default : RequireInterface -=== /node_modules/pkg/import.d.ts === -export {}; From fb0f304c0f376f2a96bd0b1476df0129b69d9738 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=B3=C3=B0i=20Karlsson?= Date: Sun, 16 Mar 2025 22:16:48 +0100 Subject: [PATCH 02/30] Move into file loader --- internal/ast/ast.go | 2 +- internal/ast/utilities.go | 13 ++-- internal/compiler/fileloader.go | 5 +- internal/compiler/host.go | 12 +--- internal/ls/host.go | 3 +- internal/ls/languageservice.go | 5 +- internal/project/project.go | 3 +- internal/testutil/harnessutil/harnessutil.go | 7 +- .../compiler/dynamicImportsDeclaration.types | 22 +++--- .../dynamicImportsDeclaration.types.diff | 48 ------------- .../nodeModules1(module=node16).types | 72 +++++++++---------- .../nodeModules1(module=node16).types.diff | 72 +++++++++---------- .../nodeModules1(module=nodenext).types | 72 +++++++++---------- .../nodeModules1(module=nodenext).types.diff | 72 +++++++++---------- ...SynchronousCallErrors(module=node16).types | 12 ++-- ...ronousCallErrors(module=node16).types.diff | 12 ++-- ...nchronousCallErrors(module=nodenext).types | 12 ++-- ...nousCallErrors(module=nodenext).types.diff | 12 ++-- ...dulesImportAssertions(module=node16).types | 4 +- ...ImportAssertions(module=node16).types.diff | 13 ---- ...lesImportAssertions(module=nodenext).types | 4 +- ...portAssertions(module=nodenext).types.diff | 13 ---- ...dulesImportAttributes(module=node16).types | 4 +- ...ImportAttributes(module=node16).types.diff | 13 ---- ...lesImportAttributes(module=nodenext).types | 4 +- ...portAttributes(module=nodenext).types.diff | 13 ---- ...clarationEmit1(module=nodenext).errors.txt | 20 +++++- ...tionEmit1(module=nodenext).errors.txt.diff | 26 +++++-- ...clarationEmit1(module=nodenext).errors.txt | 20 +++++- ...tionEmit1(module=nodenext).errors.txt.diff | 26 +++++-- 30 files changed, 287 insertions(+), 329 deletions(-) delete mode 100644 testdata/baselines/reference/submodule/compiler/dynamicImportsDeclaration.types.diff delete mode 100644 testdata/baselines/reference/submodule/conformance/nodeModulesImportAssertions(module=node16).types.diff delete mode 100644 testdata/baselines/reference/submodule/conformance/nodeModulesImportAssertions(module=nodenext).types.diff delete mode 100644 testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributes(module=node16).types.diff delete mode 100644 testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributes(module=nodenext).types.diff diff --git a/internal/ast/ast.go b/internal/ast/ast.go index d276e7601b..8a2998b837 100644 --- a/internal/ast/ast.go +++ b/internal/ast/ast.go @@ -8697,7 +8697,7 @@ type SourceFile struct { TypeReferenceDirectives []*FileReference LibReferenceDirectives []*FileReference - // Fields set by compiler host + // Fields set by file loader PackageJsonScope *packagejson.InfoCacheEntry ImpliedNodeFormat core.ModuleKind diff --git a/internal/ast/utilities.go b/internal/ast/utilities.go index 0e3c450350..6fa3abe5ca 100644 --- a/internal/ast/utilities.go +++ b/internal/ast/utilities.go @@ -2401,11 +2401,16 @@ func GetEmitSyntaxForUsageLocationWorker(file *SourceFile, usage *Expression, op } var exprParentParent *Node - exprContainingNode := WalkUpParenthesizedExpressions(usage.Parent) - if exprContainingNode != nil { - exprParentParent = exprContainingNode.Parent + exprParentContainingNode := WalkUpParenthesizedExpressions(usage.Parent) + if exprParentContainingNode != nil { + exprParentParent = exprParentContainingNode.Parent } - if exprParentParent != nil && IsImportEqualsDeclaration(usage.Parent) { + + if exprParentParent != nil && IsImportEqualsDeclaration(exprParentParent) || IsRequireCall(usage.Parent, false /*requireStringLiteralLikeArgument*/) { + return core.ModuleKindCommonJS + } + + if IsImportCall(exprParentContainingNode) { return core.IfElse(shouldTransformImportCallWorker(file, options), core.ModuleKindCommonJS, core.ModuleKindESNext) } // If we're in --module preserve on an input file, we know that an import diff --git a/internal/compiler/fileloader.go b/internal/compiler/fileloader.go index ea7fcd35e3..072a98bfd0 100644 --- a/internal/compiler/fileloader.go +++ b/internal/compiler/fileloader.go @@ -223,7 +223,10 @@ func (t *parseTask) start(loader *fileLoader) { func (p *fileLoader) parseSourceFile(fileName string) *ast.SourceFile { path := tspath.ToPath(fileName, p.host.GetCurrentDirectory(), p.host.FS().UseCaseSensitiveFileNames()) - sourceFile := p.host.GetSourceFile(fileName, path, p.compilerOptions.GetEmitScriptTarget(), p.resolver.GetPackageScopeForPath(string(path))) + sourceFile := p.host.GetSourceFile(fileName, path, p.compilerOptions.GetEmitScriptTarget()) + sourceFile.PackageJsonScope = p.resolver.GetPackageScopeForPath(string(path)) + sourceFile.ImpliedNodeFormat = ast.GetImpliedNodeFormatForEmitWorker(sourceFile, p.compilerOptions) + return sourceFile } diff --git a/internal/compiler/host.go b/internal/compiler/host.go index b5aa39080c..073be18e69 100644 --- a/internal/compiler/host.go +++ b/internal/compiler/host.go @@ -2,7 +2,6 @@ package compiler import ( "github.com/microsoft/typescript-go/internal/ast" - "github.com/microsoft/typescript-go/internal/compiler/packagejson" "github.com/microsoft/typescript-go/internal/core" "github.com/microsoft/typescript-go/internal/parser" "github.com/microsoft/typescript-go/internal/scanner" @@ -16,7 +15,7 @@ type CompilerHost interface { GetCurrentDirectory() string NewLine() string Trace(msg string) - GetSourceFile(fileName string, path tspath.Path, languageVersion core.ScriptTarget, packageJsonScope *packagejson.InfoCacheEntry) *ast.SourceFile + GetSourceFile(fileName string, path tspath.Path, languageVersion core.ScriptTarget) *ast.SourceFile } type FileInfo struct { @@ -69,15 +68,10 @@ func (h *compilerHost) Trace(msg string) { //!!! TODO: implement } -func (h *compilerHost) GetSourceFile(fileName string, path tspath.Path, languageVersion core.ScriptTarget, packageJsonScope *packagejson.InfoCacheEntry) *ast.SourceFile { +func (h *compilerHost) GetSourceFile(fileName string, path tspath.Path, languageVersion core.ScriptTarget) *ast.SourceFile { text, _ := h.FS().ReadFile(fileName) if tspath.FileExtensionIs(fileName, tspath.ExtensionJson) { return parser.ParseJSONText(fileName, path, text) } - file := parser.ParseSourceFile(fileName, path, text, languageVersion, scanner.JSDocParsingModeParseForTypeErrors) - file.PackageJsonScope = packageJsonScope - if h.options != nil { - file.ImpliedNodeFormat = ast.GetImpliedNodeFormatForEmitWorker(file, h.options) - } - return file + return parser.ParseSourceFile(fileName, path, text, languageVersion, scanner.JSDocParsingModeParseForTypeErrors) } diff --git a/internal/ls/host.go b/internal/ls/host.go index 32c9800654..af0a8a226a 100644 --- a/internal/ls/host.go +++ b/internal/ls/host.go @@ -3,7 +3,6 @@ package ls import ( "github.com/microsoft/typescript-go/internal/ast" "github.com/microsoft/typescript-go/internal/compiler" - "github.com/microsoft/typescript-go/internal/compiler/packagejson" "github.com/microsoft/typescript-go/internal/core" "github.com/microsoft/typescript-go/internal/tspath" "github.com/microsoft/typescript-go/internal/vfs" @@ -20,7 +19,7 @@ type Host interface { GetRootFileNames() []string // GetCompilerOptions was called GetCompilationSettings in the original code. GetCompilerOptions() *core.CompilerOptions - GetSourceFile(fileName string, path tspath.Path, languageVersion core.ScriptTarget, packageJsonScope *packagejson.InfoCacheEntry) *ast.SourceFile + GetSourceFile(fileName string, path tspath.Path, languageVersion core.ScriptTarget) *ast.SourceFile // This responsibility was moved from the language service to the project, // because they were bidirectionally interdependent. GetProgram() *compiler.Program diff --git a/internal/ls/languageservice.go b/internal/ls/languageservice.go index 05d8c5c625..815278749b 100644 --- a/internal/ls/languageservice.go +++ b/internal/ls/languageservice.go @@ -3,7 +3,6 @@ package ls import ( "github.com/microsoft/typescript-go/internal/ast" "github.com/microsoft/typescript-go/internal/compiler" - "github.com/microsoft/typescript-go/internal/compiler/packagejson" "github.com/microsoft/typescript-go/internal/core" "github.com/microsoft/typescript-go/internal/tspath" "github.com/microsoft/typescript-go/internal/vfs" @@ -47,8 +46,8 @@ func (l *LanguageService) Trace(msg string) { } // GetSourceFile implements compiler.CompilerHost. -func (l *LanguageService) GetSourceFile(fileName string, path tspath.Path, languageVersion core.ScriptTarget, packageJsonScope *packagejson.InfoCacheEntry) *ast.SourceFile { - return l.host.GetSourceFile(fileName, path, languageVersion, packageJsonScope) +func (l *LanguageService) GetSourceFile(fileName string, path tspath.Path, languageVersion core.ScriptTarget) *ast.SourceFile { + return l.host.GetSourceFile(fileName, path, languageVersion) } // GetProgram updates the program if the project version has changed. diff --git a/internal/project/project.go b/internal/project/project.go index d0b562a104..372a1db721 100644 --- a/internal/project/project.go +++ b/internal/project/project.go @@ -8,7 +8,6 @@ import ( "github.com/microsoft/typescript-go/internal/ast" "github.com/microsoft/typescript-go/internal/collections" "github.com/microsoft/typescript-go/internal/compiler" - "github.com/microsoft/typescript-go/internal/compiler/packagejson" "github.com/microsoft/typescript-go/internal/core" "github.com/microsoft/typescript-go/internal/ls" "github.com/microsoft/typescript-go/internal/tspath" @@ -125,7 +124,7 @@ func (p *Project) GetRootFileNames() []string { } // GetSourceFile implements LanguageServiceHost. -func (p *Project) GetSourceFile(fileName string, path tspath.Path, languageVersion core.ScriptTarget, packageJsonScope *packagejson.InfoCacheEntry) *ast.SourceFile { +func (p *Project) GetSourceFile(fileName string, path tspath.Path, languageVersion core.ScriptTarget) *ast.SourceFile { scriptKind := p.getScriptKind(fileName) if scriptInfo := p.getOrCreateScriptInfoAndAttachToProject(fileName, scriptKind); scriptInfo != nil { var ( diff --git a/internal/testutil/harnessutil/harnessutil.go b/internal/testutil/harnessutil/harnessutil.go index d1372a7bf9..af238cb117 100644 --- a/internal/testutil/harnessutil/harnessutil.go +++ b/internal/testutil/harnessutil/harnessutil.go @@ -16,7 +16,6 @@ import ( "github.com/microsoft/typescript-go/internal/ast" "github.com/microsoft/typescript-go/internal/bundled" "github.com/microsoft/typescript-go/internal/compiler" - "github.com/microsoft/typescript-go/internal/compiler/packagejson" "github.com/microsoft/typescript-go/internal/core" "github.com/microsoft/typescript-go/internal/parser" "github.com/microsoft/typescript-go/internal/repo" @@ -356,7 +355,7 @@ type cachedCompilerHost struct { var sourceFileCache sync.Map -func (h *cachedCompilerHost) GetSourceFile(fileName string, path tspath.Path, languageVersion core.ScriptTarget, packageJsonScope *packagejson.InfoCacheEntry) *ast.SourceFile { +func (h *cachedCompilerHost) GetSourceFile(fileName string, path tspath.Path, languageVersion core.ScriptTarget) *ast.SourceFile { text, _ := h.FS().ReadFile(fileName) type sourceFileCacheKey struct { @@ -386,10 +385,6 @@ func (h *cachedCompilerHost) GetSourceFile(fileName string, path tspath.Path, la } else { // !!! JSDocParsingMode sourceFile = parser.ParseSourceFile(fileName, path, text, languageVersion, scanner.JSDocParsingModeParseAll) - sourceFile.PackageJsonScope = packageJsonScope - if h.options != nil { - sourceFile.ImpliedNodeFormat = ast.GetEmitModuleFormatOfFileWorker(sourceFile, h.options) - } } result, _ := sourceFileCache.LoadOrStore(key, sourceFile) diff --git a/testdata/baselines/reference/submodule/compiler/dynamicImportsDeclaration.types b/testdata/baselines/reference/submodule/compiler/dynamicImportsDeclaration.types index 45277435ad..c1ba031243 100644 --- a/testdata/baselines/reference/submodule/compiler/dynamicImportsDeclaration.types +++ b/testdata/baselines/reference/submodule/compiler/dynamicImportsDeclaration.types @@ -14,11 +14,11 @@ export default 'fallback'; === /index.ts === export const mod = await (async () => { ->mod : typeof import("/case0") | typeof import("/case1") | typeof import("/caseFallback") ->await (async () => { const x: number = 0; switch (x) { case 0: return await import("./case0.js"); case 1: return await import("./case1.js"); default: return await import("./caseFallback.js"); }})() : typeof import("/case0") | typeof import("/case1") | typeof import("/caseFallback") ->(async () => { const x: number = 0; switch (x) { case 0: return await import("./case0.js"); case 1: return await import("./case1.js"); default: return await import("./caseFallback.js"); }})() : Promise ->(async () => { const x: number = 0; switch (x) { case 0: return await import("./case0.js"); case 1: return await import("./case1.js"); default: return await import("./caseFallback.js"); }}) : () => Promise ->async () => { const x: number = 0; switch (x) { case 0: return await import("./case0.js"); case 1: return await import("./case1.js"); default: return await import("./caseFallback.js"); }} : () => Promise +>mod : { default: typeof import("/case0"); } | { default: typeof import("/case1"); } | { default: typeof import("/caseFallback"); } +>await (async () => { const x: number = 0; switch (x) { case 0: return await import("./case0.js"); case 1: return await import("./case1.js"); default: return await import("./caseFallback.js"); }})() : { default: typeof import("/case0"); } | { default: typeof import("/case1"); } | { default: typeof import("/caseFallback"); } +>(async () => { const x: number = 0; switch (x) { case 0: return await import("./case0.js"); case 1: return await import("./case1.js"); default: return await import("./caseFallback.js"); }})() : Promise<{ default: typeof import("/case0"); } | { default: typeof import("/case1"); } | { default: typeof import("/caseFallback"); }> +>(async () => { const x: number = 0; switch (x) { case 0: return await import("./case0.js"); case 1: return await import("./case1.js"); default: return await import("./caseFallback.js"); }}) : () => Promise<{ default: typeof import("/case0"); } | { default: typeof import("/case1"); } | { default: typeof import("/caseFallback"); }> +>async () => { const x: number = 0; switch (x) { case 0: return await import("./case0.js"); case 1: return await import("./case1.js"); default: return await import("./caseFallback.js"); }} : () => Promise<{ default: typeof import("/case0"); } | { default: typeof import("/case1"); } | { default: typeof import("/caseFallback"); }> const x: number = 0; >x : number @@ -31,22 +31,22 @@ export const mod = await (async () => { >0 : 0 return await import("./case0.js"); ->await import("./case0.js") : typeof import("/case0") ->import("./case0.js") : Promise +>await import("./case0.js") : { default: typeof import("/case0"); } +>import("./case0.js") : Promise<{ default: typeof import("/case0"); }> >"./case0.js" : "./case0.js" case 1: >1 : 1 return await import("./case1.js"); ->await import("./case1.js") : typeof import("/case1") ->import("./case1.js") : Promise +>await import("./case1.js") : { default: typeof import("/case1"); } +>import("./case1.js") : Promise<{ default: typeof import("/case1"); }> >"./case1.js" : "./case1.js" default: return await import("./caseFallback.js"); ->await import("./caseFallback.js") : typeof import("/caseFallback") ->import("./caseFallback.js") : Promise +>await import("./caseFallback.js") : { default: typeof import("/caseFallback"); } +>import("./caseFallback.js") : Promise<{ default: typeof import("/caseFallback"); }> >"./caseFallback.js" : "./caseFallback.js" } })(); diff --git a/testdata/baselines/reference/submodule/compiler/dynamicImportsDeclaration.types.diff b/testdata/baselines/reference/submodule/compiler/dynamicImportsDeclaration.types.diff deleted file mode 100644 index 93c9b2e233..0000000000 --- a/testdata/baselines/reference/submodule/compiler/dynamicImportsDeclaration.types.diff +++ /dev/null @@ -1,48 +0,0 @@ ---- old.dynamicImportsDeclaration.types -+++ new.dynamicImportsDeclaration.types -@@= skipped -13, +13 lines =@@ - - === /index.ts === - export const mod = await (async () => { -->mod : { default: typeof import("/case0"); } | { default: typeof import("/case1"); } | { default: typeof import("/caseFallback"); } -->await (async () => { const x: number = 0; switch (x) { case 0: return await import("./case0.js"); case 1: return await import("./case1.js"); default: return await import("./caseFallback.js"); }})() : { default: typeof import("/case0"); } | { default: typeof import("/case1"); } | { default: typeof import("/caseFallback"); } -->(async () => { const x: number = 0; switch (x) { case 0: return await import("./case0.js"); case 1: return await import("./case1.js"); default: return await import("./caseFallback.js"); }})() : Promise<{ default: typeof import("/case0"); } | { default: typeof import("/case1"); } | { default: typeof import("/caseFallback"); }> -->(async () => { const x: number = 0; switch (x) { case 0: return await import("./case0.js"); case 1: return await import("./case1.js"); default: return await import("./caseFallback.js"); }}) : () => Promise<{ default: typeof import("/case0"); } | { default: typeof import("/case1"); } | { default: typeof import("/caseFallback"); }> -->async () => { const x: number = 0; switch (x) { case 0: return await import("./case0.js"); case 1: return await import("./case1.js"); default: return await import("./caseFallback.js"); }} : () => Promise<{ default: typeof import("/case0"); } | { default: typeof import("/case1"); } | { default: typeof import("/caseFallback"); }> -+>mod : typeof import("/case0") | typeof import("/case1") | typeof import("/caseFallback") -+>await (async () => { const x: number = 0; switch (x) { case 0: return await import("./case0.js"); case 1: return await import("./case1.js"); default: return await import("./caseFallback.js"); }})() : typeof import("/case0") | typeof import("/case1") | typeof import("/caseFallback") -+>(async () => { const x: number = 0; switch (x) { case 0: return await import("./case0.js"); case 1: return await import("./case1.js"); default: return await import("./caseFallback.js"); }})() : Promise -+>(async () => { const x: number = 0; switch (x) { case 0: return await import("./case0.js"); case 1: return await import("./case1.js"); default: return await import("./caseFallback.js"); }}) : () => Promise -+>async () => { const x: number = 0; switch (x) { case 0: return await import("./case0.js"); case 1: return await import("./case1.js"); default: return await import("./caseFallback.js"); }} : () => Promise - - const x: number = 0; - >x : number -@@= skipped -17, +17 lines =@@ - >0 : 0 - - return await import("./case0.js"); -->await import("./case0.js") : { default: typeof import("/case0"); } -->import("./case0.js") : Promise<{ default: typeof import("/case0"); }> -+>await import("./case0.js") : typeof import("/case0") -+>import("./case0.js") : Promise - >"./case0.js" : "./case0.js" - - case 1: - >1 : 1 - - return await import("./case1.js"); -->await import("./case1.js") : { default: typeof import("/case1"); } -->import("./case1.js") : Promise<{ default: typeof import("/case1"); }> -+>await import("./case1.js") : typeof import("/case1") -+>import("./case1.js") : Promise - >"./case1.js" : "./case1.js" - - default: - return await import("./caseFallback.js"); -->await import("./caseFallback.js") : { default: typeof import("/caseFallback"); } -->import("./caseFallback.js") : Promise<{ default: typeof import("/caseFallback"); }> -+>await import("./caseFallback.js") : typeof import("/caseFallback") -+>import("./caseFallback.js") : Promise - >"./caseFallback.js" : "./caseFallback.js" - } - })(); diff --git a/testdata/baselines/reference/submodule/conformance/nodeModules1(module=node16).types b/testdata/baselines/reference/submodule/conformance/nodeModules1(module=node16).types index 501c69d176..82bc51c2d3 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModules1(module=node16).types +++ b/testdata/baselines/reference/submodule/conformance/nodeModules1(module=node16).types @@ -334,33 +334,33 @@ const _m36 = import("./index"); >"./index" : "./index" const _m37 = import("./subfolder"); ->_m37 : Promise ->import("./subfolder") : Promise +>_m37 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>import("./subfolder") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder" : "./subfolder" const _m38 = import("./subfolder/"); ->_m38 : Promise ->import("./subfolder/") : Promise +>_m38 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>import("./subfolder/") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder/" : "./subfolder/" const _m39 = import("./subfolder/index"); ->_m39 : Promise ->import("./subfolder/index") : Promise +>_m39 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>import("./subfolder/index") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder/index" : "./subfolder/index" const _m40 = import("./subfolder2"); ->_m40 : Promise ->import("./subfolder2") : Promise +>_m40 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>import("./subfolder2") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2" : "./subfolder2" const _m41 = import("./subfolder2/"); ->_m41 : Promise ->import("./subfolder2/") : Promise +>_m41 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>import("./subfolder2/") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2/" : "./subfolder2/" const _m42 = import("./subfolder2/index"); ->_m42 : Promise ->import("./subfolder2/index") : Promise +>_m42 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>import("./subfolder2/index") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2/index" : "./subfolder2/index" const _m43 = import("./subfolder2/another"); @@ -640,33 +640,33 @@ const _m36 = import("./index"); >"./index" : "./index" const _m37 = import("./subfolder"); ->_m37 : Promise ->import("./subfolder") : Promise +>_m37 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>import("./subfolder") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder" : "./subfolder" const _m38 = import("./subfolder/"); ->_m38 : Promise ->import("./subfolder/") : Promise +>_m38 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>import("./subfolder/") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder/" : "./subfolder/" const _m39 = import("./subfolder/index"); ->_m39 : Promise ->import("./subfolder/index") : Promise +>_m39 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>import("./subfolder/index") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder/index" : "./subfolder/index" const _m40 = import("./subfolder2"); ->_m40 : Promise ->import("./subfolder2") : Promise +>_m40 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>import("./subfolder2") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2" : "./subfolder2" const _m41 = import("./subfolder2/"); ->_m41 : Promise ->import("./subfolder2/") : Promise +>_m41 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>import("./subfolder2/") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2/" : "./subfolder2/" const _m42 = import("./subfolder2/index"); ->_m42 : Promise ->import("./subfolder2/index") : Promise +>_m42 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>import("./subfolder2/index") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2/index" : "./subfolder2/index" const _m43 = import("./subfolder2/another"); @@ -945,33 +945,33 @@ const _m36 = import("./index"); >"./index" : "./index" const _m37 = import("./subfolder"); ->_m37 : Promise ->import("./subfolder") : Promise +>_m37 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>import("./subfolder") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder" : "./subfolder" const _m38 = import("./subfolder/"); ->_m38 : Promise ->import("./subfolder/") : Promise +>_m38 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>import("./subfolder/") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder/" : "./subfolder/" const _m39 = import("./subfolder/index"); ->_m39 : Promise ->import("./subfolder/index") : Promise +>_m39 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>import("./subfolder/index") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder/index" : "./subfolder/index" const _m40 = import("./subfolder2"); ->_m40 : Promise ->import("./subfolder2") : Promise +>_m40 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>import("./subfolder2") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2" : "./subfolder2" const _m41 = import("./subfolder2/"); ->_m41 : Promise ->import("./subfolder2/") : Promise +>_m41 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>import("./subfolder2/") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2/" : "./subfolder2/" const _m42 = import("./subfolder2/index"); ->_m42 : Promise ->import("./subfolder2/index") : Promise +>_m42 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>import("./subfolder2/index") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2/index" : "./subfolder2/index" const _m43 = import("./subfolder2/another"); diff --git a/testdata/baselines/reference/submodule/conformance/nodeModules1(module=node16).types.diff b/testdata/baselines/reference/submodule/conformance/nodeModules1(module=node16).types.diff index 53703d7093..9af64d171d 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModules1(module=node16).types.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModules1(module=node16).types.diff @@ -329,43 +329,43 @@ const _m37 = import("./subfolder"); ->_m37 : Promise ->import("./subfolder") : Promise -+>_m37 : Promise -+>import("./subfolder") : Promise ++>_m37 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>import("./subfolder") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder" : "./subfolder" const _m38 = import("./subfolder/"); ->_m38 : Promise ->import("./subfolder/") : Promise -+>_m38 : Promise -+>import("./subfolder/") : Promise ++>_m38 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>import("./subfolder/") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder/" : "./subfolder/" const _m39 = import("./subfolder/index"); ->_m39 : Promise ->import("./subfolder/index") : Promise -+>_m39 : Promise -+>import("./subfolder/index") : Promise ++>_m39 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>import("./subfolder/index") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder/index" : "./subfolder/index" const _m40 = import("./subfolder2"); ->_m40 : Promise ->import("./subfolder2") : Promise -+>_m40 : Promise -+>import("./subfolder2") : Promise ++>_m40 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>import("./subfolder2") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2" : "./subfolder2" const _m41 = import("./subfolder2/"); ->_m41 : Promise ->import("./subfolder2/") : Promise -+>_m41 : Promise -+>import("./subfolder2/") : Promise ++>_m41 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>import("./subfolder2/") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2/" : "./subfolder2/" const _m42 = import("./subfolder2/index"); ->_m42 : Promise ->import("./subfolder2/index") : Promise -+>_m42 : Promise -+>import("./subfolder2/index") : Promise ++>_m42 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>import("./subfolder2/index") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2/index" : "./subfolder2/index" const _m43 = import("./subfolder2/another"); @@ -719,43 +719,43 @@ const _m37 = import("./subfolder"); ->_m37 : Promise ->import("./subfolder") : Promise -+>_m37 : Promise -+>import("./subfolder") : Promise ++>_m37 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>import("./subfolder") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder" : "./subfolder" const _m38 = import("./subfolder/"); ->_m38 : Promise ->import("./subfolder/") : Promise -+>_m38 : Promise -+>import("./subfolder/") : Promise ++>_m38 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>import("./subfolder/") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder/" : "./subfolder/" const _m39 = import("./subfolder/index"); ->_m39 : Promise ->import("./subfolder/index") : Promise -+>_m39 : Promise -+>import("./subfolder/index") : Promise ++>_m39 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>import("./subfolder/index") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder/index" : "./subfolder/index" const _m40 = import("./subfolder2"); ->_m40 : Promise ->import("./subfolder2") : Promise -+>_m40 : Promise -+>import("./subfolder2") : Promise ++>_m40 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>import("./subfolder2") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2" : "./subfolder2" const _m41 = import("./subfolder2/"); ->_m41 : Promise ->import("./subfolder2/") : Promise -+>_m41 : Promise -+>import("./subfolder2/") : Promise ++>_m41 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>import("./subfolder2/") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2/" : "./subfolder2/" const _m42 = import("./subfolder2/index"); ->_m42 : Promise ->import("./subfolder2/index") : Promise -+>_m42 : Promise -+>import("./subfolder2/index") : Promise ++>_m42 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>import("./subfolder2/index") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2/index" : "./subfolder2/index" const _m43 = import("./subfolder2/another"); @@ -1109,43 +1109,43 @@ const _m37 = import("./subfolder"); ->_m37 : Promise ->import("./subfolder") : Promise -+>_m37 : Promise -+>import("./subfolder") : Promise ++>_m37 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>import("./subfolder") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder" : "./subfolder" const _m38 = import("./subfolder/"); ->_m38 : Promise ->import("./subfolder/") : Promise -+>_m38 : Promise -+>import("./subfolder/") : Promise ++>_m38 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>import("./subfolder/") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder/" : "./subfolder/" const _m39 = import("./subfolder/index"); ->_m39 : Promise ->import("./subfolder/index") : Promise -+>_m39 : Promise -+>import("./subfolder/index") : Promise ++>_m39 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>import("./subfolder/index") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder/index" : "./subfolder/index" const _m40 = import("./subfolder2"); ->_m40 : Promise ->import("./subfolder2") : Promise -+>_m40 : Promise -+>import("./subfolder2") : Promise ++>_m40 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>import("./subfolder2") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2" : "./subfolder2" const _m41 = import("./subfolder2/"); ->_m41 : Promise ->import("./subfolder2/") : Promise -+>_m41 : Promise -+>import("./subfolder2/") : Promise ++>_m41 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>import("./subfolder2/") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2/" : "./subfolder2/" const _m42 = import("./subfolder2/index"); ->_m42 : Promise ->import("./subfolder2/index") : Promise -+>_m42 : Promise -+>import("./subfolder2/index") : Promise ++>_m42 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>import("./subfolder2/index") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2/index" : "./subfolder2/index" const _m43 = import("./subfolder2/another"); diff --git a/testdata/baselines/reference/submodule/conformance/nodeModules1(module=nodenext).types b/testdata/baselines/reference/submodule/conformance/nodeModules1(module=nodenext).types index 501c69d176..82bc51c2d3 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModules1(module=nodenext).types +++ b/testdata/baselines/reference/submodule/conformance/nodeModules1(module=nodenext).types @@ -334,33 +334,33 @@ const _m36 = import("./index"); >"./index" : "./index" const _m37 = import("./subfolder"); ->_m37 : Promise ->import("./subfolder") : Promise +>_m37 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>import("./subfolder") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder" : "./subfolder" const _m38 = import("./subfolder/"); ->_m38 : Promise ->import("./subfolder/") : Promise +>_m38 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>import("./subfolder/") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder/" : "./subfolder/" const _m39 = import("./subfolder/index"); ->_m39 : Promise ->import("./subfolder/index") : Promise +>_m39 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>import("./subfolder/index") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder/index" : "./subfolder/index" const _m40 = import("./subfolder2"); ->_m40 : Promise ->import("./subfolder2") : Promise +>_m40 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>import("./subfolder2") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2" : "./subfolder2" const _m41 = import("./subfolder2/"); ->_m41 : Promise ->import("./subfolder2/") : Promise +>_m41 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>import("./subfolder2/") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2/" : "./subfolder2/" const _m42 = import("./subfolder2/index"); ->_m42 : Promise ->import("./subfolder2/index") : Promise +>_m42 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>import("./subfolder2/index") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2/index" : "./subfolder2/index" const _m43 = import("./subfolder2/another"); @@ -640,33 +640,33 @@ const _m36 = import("./index"); >"./index" : "./index" const _m37 = import("./subfolder"); ->_m37 : Promise ->import("./subfolder") : Promise +>_m37 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>import("./subfolder") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder" : "./subfolder" const _m38 = import("./subfolder/"); ->_m38 : Promise ->import("./subfolder/") : Promise +>_m38 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>import("./subfolder/") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder/" : "./subfolder/" const _m39 = import("./subfolder/index"); ->_m39 : Promise ->import("./subfolder/index") : Promise +>_m39 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>import("./subfolder/index") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder/index" : "./subfolder/index" const _m40 = import("./subfolder2"); ->_m40 : Promise ->import("./subfolder2") : Promise +>_m40 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>import("./subfolder2") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2" : "./subfolder2" const _m41 = import("./subfolder2/"); ->_m41 : Promise ->import("./subfolder2/") : Promise +>_m41 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>import("./subfolder2/") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2/" : "./subfolder2/" const _m42 = import("./subfolder2/index"); ->_m42 : Promise ->import("./subfolder2/index") : Promise +>_m42 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>import("./subfolder2/index") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2/index" : "./subfolder2/index" const _m43 = import("./subfolder2/another"); @@ -945,33 +945,33 @@ const _m36 = import("./index"); >"./index" : "./index" const _m37 = import("./subfolder"); ->_m37 : Promise ->import("./subfolder") : Promise +>_m37 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>import("./subfolder") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder" : "./subfolder" const _m38 = import("./subfolder/"); ->_m38 : Promise ->import("./subfolder/") : Promise +>_m38 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>import("./subfolder/") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder/" : "./subfolder/" const _m39 = import("./subfolder/index"); ->_m39 : Promise ->import("./subfolder/index") : Promise +>_m39 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>import("./subfolder/index") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder/index" : "./subfolder/index" const _m40 = import("./subfolder2"); ->_m40 : Promise ->import("./subfolder2") : Promise +>_m40 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>import("./subfolder2") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2" : "./subfolder2" const _m41 = import("./subfolder2/"); ->_m41 : Promise ->import("./subfolder2/") : Promise +>_m41 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>import("./subfolder2/") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2/" : "./subfolder2/" const _m42 = import("./subfolder2/index"); ->_m42 : Promise ->import("./subfolder2/index") : Promise +>_m42 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>import("./subfolder2/index") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2/index" : "./subfolder2/index" const _m43 = import("./subfolder2/another"); diff --git a/testdata/baselines/reference/submodule/conformance/nodeModules1(module=nodenext).types.diff b/testdata/baselines/reference/submodule/conformance/nodeModules1(module=nodenext).types.diff index 30c76a9684..6ad90a540f 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModules1(module=nodenext).types.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModules1(module=nodenext).types.diff @@ -329,43 +329,43 @@ const _m37 = import("./subfolder"); ->_m37 : Promise ->import("./subfolder") : Promise -+>_m37 : Promise -+>import("./subfolder") : Promise ++>_m37 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>import("./subfolder") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder" : "./subfolder" const _m38 = import("./subfolder/"); ->_m38 : Promise ->import("./subfolder/") : Promise -+>_m38 : Promise -+>import("./subfolder/") : Promise ++>_m38 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>import("./subfolder/") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder/" : "./subfolder/" const _m39 = import("./subfolder/index"); ->_m39 : Promise ->import("./subfolder/index") : Promise -+>_m39 : Promise -+>import("./subfolder/index") : Promise ++>_m39 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>import("./subfolder/index") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder/index" : "./subfolder/index" const _m40 = import("./subfolder2"); ->_m40 : Promise ->import("./subfolder2") : Promise -+>_m40 : Promise -+>import("./subfolder2") : Promise ++>_m40 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>import("./subfolder2") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2" : "./subfolder2" const _m41 = import("./subfolder2/"); ->_m41 : Promise ->import("./subfolder2/") : Promise -+>_m41 : Promise -+>import("./subfolder2/") : Promise ++>_m41 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>import("./subfolder2/") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2/" : "./subfolder2/" const _m42 = import("./subfolder2/index"); ->_m42 : Promise ->import("./subfolder2/index") : Promise -+>_m42 : Promise -+>import("./subfolder2/index") : Promise ++>_m42 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>import("./subfolder2/index") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2/index" : "./subfolder2/index" const _m43 = import("./subfolder2/another"); @@ -719,43 +719,43 @@ const _m37 = import("./subfolder"); ->_m37 : Promise ->import("./subfolder") : Promise -+>_m37 : Promise -+>import("./subfolder") : Promise ++>_m37 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>import("./subfolder") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder" : "./subfolder" const _m38 = import("./subfolder/"); ->_m38 : Promise ->import("./subfolder/") : Promise -+>_m38 : Promise -+>import("./subfolder/") : Promise ++>_m38 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>import("./subfolder/") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder/" : "./subfolder/" const _m39 = import("./subfolder/index"); ->_m39 : Promise ->import("./subfolder/index") : Promise -+>_m39 : Promise -+>import("./subfolder/index") : Promise ++>_m39 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>import("./subfolder/index") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder/index" : "./subfolder/index" const _m40 = import("./subfolder2"); ->_m40 : Promise ->import("./subfolder2") : Promise -+>_m40 : Promise -+>import("./subfolder2") : Promise ++>_m40 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>import("./subfolder2") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2" : "./subfolder2" const _m41 = import("./subfolder2/"); ->_m41 : Promise ->import("./subfolder2/") : Promise -+>_m41 : Promise -+>import("./subfolder2/") : Promise ++>_m41 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>import("./subfolder2/") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2/" : "./subfolder2/" const _m42 = import("./subfolder2/index"); ->_m42 : Promise ->import("./subfolder2/index") : Promise -+>_m42 : Promise -+>import("./subfolder2/index") : Promise ++>_m42 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>import("./subfolder2/index") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2/index" : "./subfolder2/index" const _m43 = import("./subfolder2/another"); @@ -1109,43 +1109,43 @@ const _m37 = import("./subfolder"); ->_m37 : Promise ->import("./subfolder") : Promise -+>_m37 : Promise -+>import("./subfolder") : Promise ++>_m37 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>import("./subfolder") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder" : "./subfolder" const _m38 = import("./subfolder/"); ->_m38 : Promise ->import("./subfolder/") : Promise -+>_m38 : Promise -+>import("./subfolder/") : Promise ++>_m38 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>import("./subfolder/") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder/" : "./subfolder/" const _m39 = import("./subfolder/index"); ->_m39 : Promise ->import("./subfolder/index") : Promise -+>_m39 : Promise -+>import("./subfolder/index") : Promise ++>_m39 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>import("./subfolder/index") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> >"./subfolder/index" : "./subfolder/index" const _m40 = import("./subfolder2"); ->_m40 : Promise ->import("./subfolder2") : Promise -+>_m40 : Promise -+>import("./subfolder2") : Promise ++>_m40 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>import("./subfolder2") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2" : "./subfolder2" const _m41 = import("./subfolder2/"); ->_m41 : Promise ->import("./subfolder2/") : Promise -+>_m41 : Promise -+>import("./subfolder2/") : Promise ++>_m41 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>import("./subfolder2/") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2/" : "./subfolder2/" const _m42 = import("./subfolder2/index"); ->_m42 : Promise ->import("./subfolder2/index") : Promise -+>_m42 : Promise -+>import("./subfolder2/index") : Promise ++>_m42 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>import("./subfolder2/index") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> >"./subfolder2/index" : "./subfolder2/index" const _m43 = import("./subfolder2/another"); diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsSynchronousCallErrors(module=node16).types b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsSynchronousCallErrors(module=node16).types index 7fdab8dd82..86e47f1532 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsSynchronousCallErrors(module=node16).types +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsSynchronousCallErrors(module=node16).types @@ -25,9 +25,9 @@ export async function f() { >"../index.js" : "../index.js" const mod4 = await import ("./index.js"); ->mod4 : typeof import("subfolder/index") ->await import ("./index.js") : typeof import("subfolder/index") ->import ("./index.js") : Promise +>mod4 : { f: () => Promise; default: typeof import("subfolder/index"); } +>await import ("./index.js") : { f: () => Promise; default: typeof import("subfolder/index"); } +>import ("./index.js") : Promise<{ f: () => Promise; default: typeof import("subfolder/index"); }> >"./index.js" : "./index.js" h(); @@ -59,9 +59,9 @@ export async function h() { >"./index.js" : "./index.js" const mod4 = await import ("./subfolder/index.js"); ->mod4 : typeof import("subfolder/index") ->await import ("./subfolder/index.js") : typeof import("subfolder/index") ->import ("./subfolder/index.js") : Promise +>mod4 : { f: () => Promise; default: typeof import("subfolder/index"); } +>await import ("./subfolder/index.js") : { f: () => Promise; default: typeof import("subfolder/index"); } +>import ("./subfolder/index.js") : Promise<{ f: () => Promise; default: typeof import("subfolder/index"); }> >"./subfolder/index.js" : "./subfolder/index.js" f(); diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsSynchronousCallErrors(module=node16).types.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsSynchronousCallErrors(module=node16).types.diff index 1eebc88d58..f742f0c1f3 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsSynchronousCallErrors(module=node16).types.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsSynchronousCallErrors(module=node16).types.diff @@ -31,9 +31,9 @@ ->mod4 : { default: typeof mod2; f(): Promise; } ->await import ("./index.js") : { default: typeof mod2; f(): Promise; } ->import ("./index.js") : Promise<{ default: typeof mod2; f(): Promise; }> -+>mod4 : typeof import("subfolder/index") -+>await import ("./index.js") : typeof import("subfolder/index") -+>import ("./index.js") : Promise ++>mod4 : { f: () => Promise; default: typeof import("subfolder/index"); } ++>await import ("./index.js") : { f: () => Promise; default: typeof import("subfolder/index"); } ++>import ("./index.js") : Promise<{ f: () => Promise; default: typeof import("subfolder/index"); }> >"./index.js" : "./index.js" h(); @@ -67,9 +67,9 @@ ->mod4 : { default: typeof mod2; f(): Promise; } ->await import ("./subfolder/index.js") : { default: typeof mod2; f(): Promise; } ->import ("./subfolder/index.js") : Promise<{ default: typeof mod2; f(): Promise; }> -+>mod4 : typeof import("subfolder/index") -+>await import ("./subfolder/index.js") : typeof import("subfolder/index") -+>import ("./subfolder/index.js") : Promise ++>mod4 : { f: () => Promise; default: typeof import("subfolder/index"); } ++>await import ("./subfolder/index.js") : { f: () => Promise; default: typeof import("subfolder/index"); } ++>import ("./subfolder/index.js") : Promise<{ f: () => Promise; default: typeof import("subfolder/index"); }> >"./subfolder/index.js" : "./subfolder/index.js" f(); diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsSynchronousCallErrors(module=nodenext).types b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsSynchronousCallErrors(module=nodenext).types index 7fdab8dd82..86e47f1532 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsSynchronousCallErrors(module=nodenext).types +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsSynchronousCallErrors(module=nodenext).types @@ -25,9 +25,9 @@ export async function f() { >"../index.js" : "../index.js" const mod4 = await import ("./index.js"); ->mod4 : typeof import("subfolder/index") ->await import ("./index.js") : typeof import("subfolder/index") ->import ("./index.js") : Promise +>mod4 : { f: () => Promise; default: typeof import("subfolder/index"); } +>await import ("./index.js") : { f: () => Promise; default: typeof import("subfolder/index"); } +>import ("./index.js") : Promise<{ f: () => Promise; default: typeof import("subfolder/index"); }> >"./index.js" : "./index.js" h(); @@ -59,9 +59,9 @@ export async function h() { >"./index.js" : "./index.js" const mod4 = await import ("./subfolder/index.js"); ->mod4 : typeof import("subfolder/index") ->await import ("./subfolder/index.js") : typeof import("subfolder/index") ->import ("./subfolder/index.js") : Promise +>mod4 : { f: () => Promise; default: typeof import("subfolder/index"); } +>await import ("./subfolder/index.js") : { f: () => Promise; default: typeof import("subfolder/index"); } +>import ("./subfolder/index.js") : Promise<{ f: () => Promise; default: typeof import("subfolder/index"); }> >"./subfolder/index.js" : "./subfolder/index.js" f(); diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsSynchronousCallErrors(module=nodenext).types.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsSynchronousCallErrors(module=nodenext).types.diff index 6d03686fe8..4bdcfa3256 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsSynchronousCallErrors(module=nodenext).types.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsSynchronousCallErrors(module=nodenext).types.diff @@ -31,9 +31,9 @@ ->mod4 : { default: typeof mod2; f(): Promise; } ->await import ("./index.js") : { default: typeof mod2; f(): Promise; } ->import ("./index.js") : Promise<{ default: typeof mod2; f(): Promise; }> -+>mod4 : typeof import("subfolder/index") -+>await import ("./index.js") : typeof import("subfolder/index") -+>import ("./index.js") : Promise ++>mod4 : { f: () => Promise; default: typeof import("subfolder/index"); } ++>await import ("./index.js") : { f: () => Promise; default: typeof import("subfolder/index"); } ++>import ("./index.js") : Promise<{ f: () => Promise; default: typeof import("subfolder/index"); }> >"./index.js" : "./index.js" h(); @@ -67,9 +67,9 @@ ->mod4 : { default: typeof mod2; f(): Promise; } ->await import ("./subfolder/index.js") : { default: typeof mod2; f(): Promise; } ->import ("./subfolder/index.js") : Promise<{ default: typeof mod2; f(): Promise; }> -+>mod4 : typeof import("subfolder/index") -+>await import ("./subfolder/index.js") : typeof import("subfolder/index") -+>import ("./subfolder/index.js") : Promise ++>mod4 : { f: () => Promise; default: typeof import("subfolder/index"); } ++>await import ("./subfolder/index.js") : { f: () => Promise; default: typeof import("subfolder/index"); } ++>import ("./subfolder/index.js") : Promise<{ f: () => Promise; default: typeof import("subfolder/index"); }> >"./subfolder/index.js" : "./subfolder/index.js" f(); diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssertions(module=node16).types b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssertions(module=node16).types index 044c9fa189..0d5c792171 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssertions(module=node16).types +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssertions(module=node16).types @@ -11,8 +11,8 @@ import json from "./package.json" assert { type: "json" }; // should error, cjs >type : any const json2 = import("./package.json", { assert: { type: "json" } }); // should be fine ->json2 : Promise<{ name: string; private: boolean; type: string; default: { name: string; private: boolean; type: string; }; }> ->import("./package.json", { assert: { type: "json" } }) : Promise<{ name: string; private: boolean; type: string; default: { name: string; private: boolean; type: string; }; }> +>json2 : Promise<{ default: { name: string; private: boolean; type: string; }; }> +>import("./package.json", { assert: { type: "json" } }) : Promise<{ default: { name: string; private: boolean; type: string; }; }> >"./package.json" : "./package.json" >{ assert: { type: "json" } } : { assert: { type: string; }; } >assert : { type: string; } diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssertions(module=node16).types.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssertions(module=node16).types.diff deleted file mode 100644 index 258a24d8f3..0000000000 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssertions(module=node16).types.diff +++ /dev/null @@ -1,13 +0,0 @@ ---- old.nodeModulesImportAssertions(module=node16).types -+++ new.nodeModulesImportAssertions(module=node16).types -@@= skipped -10, +10 lines =@@ - >type : any - - const json2 = import("./package.json", { assert: { type: "json" } }); // should be fine -->json2 : Promise<{ default: { name: string; private: boolean; type: string; }; }> -->import("./package.json", { assert: { type: "json" } }) : Promise<{ default: { name: string; private: boolean; type: string; }; }> -+>json2 : Promise<{ name: string; private: boolean; type: string; default: { name: string; private: boolean; type: string; }; }> -+>import("./package.json", { assert: { type: "json" } }) : Promise<{ name: string; private: boolean; type: string; default: { name: string; private: boolean; type: string; }; }> - >"./package.json" : "./package.json" - >{ assert: { type: "json" } } : { assert: { type: string; }; } - >assert : { type: string; } diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssertions(module=nodenext).types b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssertions(module=nodenext).types index 044c9fa189..0d5c792171 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssertions(module=nodenext).types +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssertions(module=nodenext).types @@ -11,8 +11,8 @@ import json from "./package.json" assert { type: "json" }; // should error, cjs >type : any const json2 = import("./package.json", { assert: { type: "json" } }); // should be fine ->json2 : Promise<{ name: string; private: boolean; type: string; default: { name: string; private: boolean; type: string; }; }> ->import("./package.json", { assert: { type: "json" } }) : Promise<{ name: string; private: boolean; type: string; default: { name: string; private: boolean; type: string; }; }> +>json2 : Promise<{ default: { name: string; private: boolean; type: string; }; }> +>import("./package.json", { assert: { type: "json" } }) : Promise<{ default: { name: string; private: boolean; type: string; }; }> >"./package.json" : "./package.json" >{ assert: { type: "json" } } : { assert: { type: string; }; } >assert : { type: string; } diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssertions(module=nodenext).types.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssertions(module=nodenext).types.diff deleted file mode 100644 index b74a0cf090..0000000000 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssertions(module=nodenext).types.diff +++ /dev/null @@ -1,13 +0,0 @@ ---- old.nodeModulesImportAssertions(module=nodenext).types -+++ new.nodeModulesImportAssertions(module=nodenext).types -@@= skipped -10, +10 lines =@@ - >type : any - - const json2 = import("./package.json", { assert: { type: "json" } }); // should be fine -->json2 : Promise<{ default: { name: string; private: boolean; type: string; }; }> -->import("./package.json", { assert: { type: "json" } }) : Promise<{ default: { name: string; private: boolean; type: string; }; }> -+>json2 : Promise<{ name: string; private: boolean; type: string; default: { name: string; private: boolean; type: string; }; }> -+>import("./package.json", { assert: { type: "json" } }) : Promise<{ name: string; private: boolean; type: string; default: { name: string; private: boolean; type: string; }; }> - >"./package.json" : "./package.json" - >{ assert: { type: "json" } } : { assert: { type: string; }; } - >assert : { type: string; } diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributes(module=node16).types b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributes(module=node16).types index e3526d0a12..a6b4943e6d 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributes(module=node16).types +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributes(module=node16).types @@ -11,8 +11,8 @@ import json from "./package.json" with { type: "json" }; // should error, cjs mo >type : any const json2 = import("./package.json", { with: { type: "json" } }); // should be fine ->json2 : Promise<{ name: string; private: boolean; type: string; default: { name: string; private: boolean; type: string; }; }> ->import("./package.json", { with: { type: "json" } }) : Promise<{ name: string; private: boolean; type: string; default: { name: string; private: boolean; type: string; }; }> +>json2 : Promise<{ default: { name: string; private: boolean; type: string; }; }> +>import("./package.json", { with: { type: "json" } }) : Promise<{ default: { name: string; private: boolean; type: string; }; }> >"./package.json" : "./package.json" >{ with: { type: "json" } } : { with: { type: string; }; } >with : { type: string; } diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributes(module=node16).types.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributes(module=node16).types.diff deleted file mode 100644 index 03f6d2e580..0000000000 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributes(module=node16).types.diff +++ /dev/null @@ -1,13 +0,0 @@ ---- old.nodeModulesImportAttributes(module=node16).types -+++ new.nodeModulesImportAttributes(module=node16).types -@@= skipped -10, +10 lines =@@ - >type : any - - const json2 = import("./package.json", { with: { type: "json" } }); // should be fine -->json2 : Promise<{ default: { name: string; private: boolean; type: string; }; }> -->import("./package.json", { with: { type: "json" } }) : Promise<{ default: { name: string; private: boolean; type: string; }; }> -+>json2 : Promise<{ name: string; private: boolean; type: string; default: { name: string; private: boolean; type: string; }; }> -+>import("./package.json", { with: { type: "json" } }) : Promise<{ name: string; private: boolean; type: string; default: { name: string; private: boolean; type: string; }; }> - >"./package.json" : "./package.json" - >{ with: { type: "json" } } : { with: { type: string; }; } - >with : { type: string; } diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributes(module=nodenext).types b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributes(module=nodenext).types index e3526d0a12..a6b4943e6d 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributes(module=nodenext).types +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributes(module=nodenext).types @@ -11,8 +11,8 @@ import json from "./package.json" with { type: "json" }; // should error, cjs mo >type : any const json2 = import("./package.json", { with: { type: "json" } }); // should be fine ->json2 : Promise<{ name: string; private: boolean; type: string; default: { name: string; private: boolean; type: string; }; }> ->import("./package.json", { with: { type: "json" } }) : Promise<{ name: string; private: boolean; type: string; default: { name: string; private: boolean; type: string; }; }> +>json2 : Promise<{ default: { name: string; private: boolean; type: string; }; }> +>import("./package.json", { with: { type: "json" } }) : Promise<{ default: { name: string; private: boolean; type: string; }; }> >"./package.json" : "./package.json" >{ with: { type: "json" } } : { with: { type: string; }; } >with : { type: string; } diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributes(module=nodenext).types.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributes(module=nodenext).types.diff deleted file mode 100644 index 745505e39a..0000000000 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributes(module=nodenext).types.diff +++ /dev/null @@ -1,13 +0,0 @@ ---- old.nodeModulesImportAttributes(module=nodenext).types -+++ new.nodeModulesImportAttributes(module=nodenext).types -@@= skipped -10, +10 lines =@@ - >type : any - - const json2 = import("./package.json", { with: { type: "json" } }); // should be fine -->json2 : Promise<{ default: { name: string; private: boolean; type: string; }; }> -->import("./package.json", { with: { type: "json" } }) : Promise<{ default: { name: string; private: boolean; type: string; }; }> -+>json2 : Promise<{ name: string; private: boolean; type: string; default: { name: string; private: boolean; type: string; }; }> -+>import("./package.json", { with: { type: "json" } }) : Promise<{ name: string; private: boolean; type: string; default: { name: string; private: boolean; type: string; }; }> - >"./package.json" : "./package.json" - >{ with: { type: "json" } } : { with: { type: string; }; } - >with : { type: string; } diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributesModeDeclarationEmit1(module=nodenext).errors.txt b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributesModeDeclarationEmit1(module=nodenext).errors.txt index 0e3302de08..76af3803c0 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributesModeDeclarationEmit1(module=nodenext).errors.txt +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributesModeDeclarationEmit1(module=nodenext).errors.txt @@ -1,44 +1,62 @@ /index.ts(1,45): error TS1454: `resolution-mode` can only be set for type-only imports. +/index.ts(1,45): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. /index.ts(2,15): error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. /index.ts(2,44): error TS1454: `resolution-mode` can only be set for type-only imports. +/index.ts(2,44): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. /index.ts(6,50): error TS1454: `resolution-mode` can only be set for type-only imports. +/index.ts(6,50): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. /index.ts(7,14): error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. /index.ts(7,49): error TS1454: `resolution-mode` can only be set for type-only imports. +/index.ts(7,49): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. /index.ts(10,45): error TS1454: `resolution-mode` can only be set for type-only imports. +/index.ts(10,45): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. /index.ts(11,15): error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. /index.ts(11,44): error TS1454: `resolution-mode` can only be set for type-only imports. +/index.ts(11,44): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. -==== /index.ts (9 errors) ==== +==== /index.ts (15 errors) ==== import type { RequireInterface } from "pkg" with { "resolution-mode": "require" }; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS1454: `resolution-mode` can only be set for type-only imports. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. import type { ImportInterface } from "pkg" with { "resolution-mode": "import" }; ~~~~~~~~~~~~~~~ !!! error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS1454: `resolution-mode` can only be set for type-only imports. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. export interface LocalInterface extends RequireInterface, ImportInterface {} import {type RequireInterface as Req} from "pkg" with { "resolution-mode": "require" }; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS1454: `resolution-mode` can only be set for type-only imports. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. import {type ImportInterface as Imp} from "pkg" with { "resolution-mode": "import" }; ~~~~~~~~~~~~~~~ !!! error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS1454: `resolution-mode` can only be set for type-only imports. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. export interface Loc extends Req, Imp {} export type { RequireInterface } from "pkg" with { "resolution-mode": "require" }; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS1454: `resolution-mode` can only be set for type-only imports. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. export type { ImportInterface } from "pkg" with { "resolution-mode": "import" }; ~~~~~~~~~~~~~~~ !!! error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS1454: `resolution-mode` can only be set for type-only imports. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. ==== /node_modules/pkg/package.json (0 errors) ==== { diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributesModeDeclarationEmit1(module=nodenext).errors.txt.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributesModeDeclarationEmit1(module=nodenext).errors.txt.diff index 36523e951a..cfc28d8c20 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributesModeDeclarationEmit1(module=nodenext).errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributesModeDeclarationEmit1(module=nodenext).errors.txt.diff @@ -1,54 +1,68 @@ --- old.nodeModulesImportAttributesModeDeclarationEmit1(module=nodenext).errors.txt +++ new.nodeModulesImportAttributesModeDeclarationEmit1(module=nodenext).errors.txt @@= skipped -0, +0 lines =@@ --/index.ts(6,50): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. --/index.ts(7,14): error TS2305: Module '"pkg"' has no exported member 'ImportInterface'. --/index.ts(7,49): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. +/index.ts(1,45): error TS1454: `resolution-mode` can only be set for type-only imports. ++/index.ts(1,45): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. +/index.ts(2,15): error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. +/index.ts(2,44): error TS1454: `resolution-mode` can only be set for type-only imports. ++/index.ts(2,44): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. +/index.ts(6,50): error TS1454: `resolution-mode` can only be set for type-only imports. + /index.ts(6,50): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. +-/index.ts(7,14): error TS2305: Module '"pkg"' has no exported member 'ImportInterface'. +/index.ts(7,14): error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. +/index.ts(7,49): error TS1454: `resolution-mode` can only be set for type-only imports. + /index.ts(7,49): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. +/index.ts(10,45): error TS1454: `resolution-mode` can only be set for type-only imports. ++/index.ts(10,45): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. +/index.ts(11,15): error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. +/index.ts(11,44): error TS1454: `resolution-mode` can only be set for type-only imports. ++/index.ts(11,44): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. -==== /index.ts (3 errors) ==== -+==== /index.ts (9 errors) ==== ++==== /index.ts (15 errors) ==== import type { RequireInterface } from "pkg" with { "resolution-mode": "require" }; + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS1454: `resolution-mode` can only be set for type-only imports. ++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ++!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. import type { ImportInterface } from "pkg" with { "resolution-mode": "import" }; + ~~~~~~~~~~~~~~~ +!!! error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS1454: `resolution-mode` can only be set for type-only imports. ++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ++!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. export interface LocalInterface extends RequireInterface, ImportInterface {} import {type RequireInterface as Req} from "pkg" with { "resolution-mode": "require" }; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ --!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. +!!! error TS1454: `resolution-mode` can only be set for type-only imports. ++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + !!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. import {type ImportInterface as Imp} from "pkg" with { "resolution-mode": "import" }; ~~~~~~~~~~~~~~~ -!!! error TS2305: Module '"pkg"' has no exported member 'ImportInterface'. +!!! error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ --!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. +!!! error TS1454: `resolution-mode` can only be set for type-only imports. ++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + !!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. export interface Loc extends Req, Imp {} export type { RequireInterface } from "pkg" with { "resolution-mode": "require" }; + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS1454: `resolution-mode` can only be set for type-only imports. ++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ++!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. export type { ImportInterface } from "pkg" with { "resolution-mode": "import" }; + ~~~~~~~~~~~~~~~ +!!! error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS1454: `resolution-mode` can only be set for type-only imports. ++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ++!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. ==== /node_modules/pkg/package.json (0 errors) ==== { diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportModeDeclarationEmit1(module=nodenext).errors.txt b/testdata/baselines/reference/submodule/conformance/nodeModulesImportModeDeclarationEmit1(module=nodenext).errors.txt index 82907f53fc..7d296c16e2 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportModeDeclarationEmit1(module=nodenext).errors.txt +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportModeDeclarationEmit1(module=nodenext).errors.txt @@ -1,44 +1,62 @@ /index.ts(1,45): error TS1454: `resolution-mode` can only be set for type-only imports. +/index.ts(1,45): error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. /index.ts(2,15): error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. /index.ts(2,44): error TS1454: `resolution-mode` can only be set for type-only imports. +/index.ts(2,44): error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. /index.ts(6,50): error TS1454: `resolution-mode` can only be set for type-only imports. +/index.ts(6,50): error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. /index.ts(7,14): error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. /index.ts(7,49): error TS1454: `resolution-mode` can only be set for type-only imports. +/index.ts(7,49): error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. /index.ts(10,45): error TS1454: `resolution-mode` can only be set for type-only imports. +/index.ts(10,45): error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. /index.ts(11,15): error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. /index.ts(11,44): error TS1454: `resolution-mode` can only be set for type-only imports. +/index.ts(11,44): error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. -==== /index.ts (9 errors) ==== +==== /index.ts (15 errors) ==== import type { RequireInterface } from "pkg" assert { "resolution-mode": "require" }; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS1454: `resolution-mode` can only be set for type-only imports. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. import type { ImportInterface } from "pkg" assert { "resolution-mode": "import" }; ~~~~~~~~~~~~~~~ !!! error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS1454: `resolution-mode` can only be set for type-only imports. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. export interface LocalInterface extends RequireInterface, ImportInterface {} import {type RequireInterface as Req} from "pkg" assert { "resolution-mode": "require" }; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS1454: `resolution-mode` can only be set for type-only imports. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. import {type ImportInterface as Imp} from "pkg" assert { "resolution-mode": "import" }; ~~~~~~~~~~~~~~~ !!! error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS1454: `resolution-mode` can only be set for type-only imports. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. export interface Loc extends Req, Imp {} export type { RequireInterface } from "pkg" assert { "resolution-mode": "require" }; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS1454: `resolution-mode` can only be set for type-only imports. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. export type { ImportInterface } from "pkg" assert { "resolution-mode": "import" }; ~~~~~~~~~~~~~~~ !!! error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS1454: `resolution-mode` can only be set for type-only imports. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. ==== /node_modules/pkg/package.json (0 errors) ==== { diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportModeDeclarationEmit1(module=nodenext).errors.txt.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesImportModeDeclarationEmit1(module=nodenext).errors.txt.diff index 8dbec6f543..176fdae116 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportModeDeclarationEmit1(module=nodenext).errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportModeDeclarationEmit1(module=nodenext).errors.txt.diff @@ -1,54 +1,68 @@ --- old.nodeModulesImportModeDeclarationEmit1(module=nodenext).errors.txt +++ new.nodeModulesImportModeDeclarationEmit1(module=nodenext).errors.txt @@= skipped -0, +0 lines =@@ --/index.ts(6,50): error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. --/index.ts(7,14): error TS2305: Module '"pkg"' has no exported member 'ImportInterface'. --/index.ts(7,49): error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. +/index.ts(1,45): error TS1454: `resolution-mode` can only be set for type-only imports. ++/index.ts(1,45): error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. +/index.ts(2,15): error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. +/index.ts(2,44): error TS1454: `resolution-mode` can only be set for type-only imports. ++/index.ts(2,44): error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. +/index.ts(6,50): error TS1454: `resolution-mode` can only be set for type-only imports. + /index.ts(6,50): error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. +-/index.ts(7,14): error TS2305: Module '"pkg"' has no exported member 'ImportInterface'. +/index.ts(7,14): error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. +/index.ts(7,49): error TS1454: `resolution-mode` can only be set for type-only imports. + /index.ts(7,49): error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. +/index.ts(10,45): error TS1454: `resolution-mode` can only be set for type-only imports. ++/index.ts(10,45): error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. +/index.ts(11,15): error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. +/index.ts(11,44): error TS1454: `resolution-mode` can only be set for type-only imports. ++/index.ts(11,44): error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. -==== /index.ts (3 errors) ==== -+==== /index.ts (9 errors) ==== ++==== /index.ts (15 errors) ==== import type { RequireInterface } from "pkg" assert { "resolution-mode": "require" }; + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS1454: `resolution-mode` can only be set for type-only imports. ++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ++!!! error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. import type { ImportInterface } from "pkg" assert { "resolution-mode": "import" }; + ~~~~~~~~~~~~~~~ +!!! error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS1454: `resolution-mode` can only be set for type-only imports. ++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ++!!! error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. export interface LocalInterface extends RequireInterface, ImportInterface {} import {type RequireInterface as Req} from "pkg" assert { "resolution-mode": "require" }; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ --!!! error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. +!!! error TS1454: `resolution-mode` can only be set for type-only imports. ++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + !!! error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. import {type ImportInterface as Imp} from "pkg" assert { "resolution-mode": "import" }; ~~~~~~~~~~~~~~~ -!!! error TS2305: Module '"pkg"' has no exported member 'ImportInterface'. +!!! error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ --!!! error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. +!!! error TS1454: `resolution-mode` can only be set for type-only imports. ++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + !!! error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. export interface Loc extends Req, Imp {} export type { RequireInterface } from "pkg" assert { "resolution-mode": "require" }; + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS1454: `resolution-mode` can only be set for type-only imports. ++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ++!!! error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. export type { ImportInterface } from "pkg" assert { "resolution-mode": "import" }; + ~~~~~~~~~~~~~~~ +!!! error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS1454: `resolution-mode` can only be set for type-only imports. ++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ++!!! error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. ==== /node_modules/pkg/package.json (0 errors) ==== { From 8bba782da989fb2afddc16c91cda716a2f3c6db5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=B3=C3=B0i=20Karlsson?= Date: Sun, 16 Mar 2025 23:32:07 +0100 Subject: [PATCH 03/30] Revert back to main to start from scratch with storing on Program per file --- .golangci.yml | 4 + Herebyfile.mjs | 2 +- _tools/customlint/emptycase.go | 2 +- internal/ast/ast.go | 8 +- internal/ast/utilities.go | 59 +- internal/binder/binder.go | 1 - internal/checker/checker.go | 615 +++++++++--------- internal/compiler/fileloader.go | 3 - internal/compiler/program.go | 4 - internal/execute/tsc.go | 6 +- internal/project/service.go | 4 +- internal/testutil/testutil.go | 2 +- internal/transformers/importelision_test.go | 20 +- internal/tsoptions/tsconfigparsing_test.go | 34 +- internal/vfs/osvfs/os.go | 2 +- .../compiler/alwaysStrict.errors.txt | 9 - .../compiler/alwaysStrict.errors.txt.diff | 14 + .../compiler/alwaysStrictES6.errors.txt | 9 - .../compiler/alwaysStrictES6.errors.txt.diff | 14 + .../compiler/alwaysStrictModule.errors.txt | 11 - .../alwaysStrictModule.errors.txt.diff | 16 + .../compiler/alwaysStrictModule2.errors.txt | 21 - .../alwaysStrictModule2.errors.txt.diff | 26 + ...alwaysStrictNoImplicitUseStrict.errors.txt | 11 - ...sStrictNoImplicitUseStrict.errors.txt.diff | 21 +- .../compiler/dynamicImportsDeclaration.types | 22 +- .../dynamicImportsDeclaration.types.diff | 48 ++ ...nthesizedDefault(module=esnext).errors.txt | 20 - ...izedDefault(module=esnext).errors.txt.diff | 35 +- ...oSynthesizedDefault(module=esnext).symbols | 4 + ...hesizedDefault(module=esnext).symbols.diff | 16 +- ...mNoSynthesizedDefault(module=esnext).types | 26 +- ...nthesizedDefault(module=esnext).types.diff | 48 ++ ...hesizedDefault(module=preserve).errors.txt | 20 - ...edDefault(module=preserve).errors.txt.diff | 35 +- ...ynthesizedDefault(module=preserve).symbols | 4 + ...sizedDefault(module=preserve).symbols.diff | 16 +- ...oSynthesizedDefault(module=preserve).types | 26 +- ...hesizedDefault(module=preserve).types.diff | 48 ++ .../compiler/modulePreserve4.errors.txt | 25 +- .../compiler/modulePreserve4.errors.txt.diff | 43 +- .../submodule/compiler/modulePreserve4.types | 4 +- .../compiler/modulePreserve4.types.diff | 22 +- .../nodeModules1(module=node16).types | 72 +- .../nodeModules1(module=node16).types.diff | 72 +- .../nodeModules1(module=nodenext).types | 72 +- .../nodeModules1(module=nodenext).types.diff | 72 +- .../nodeModulesAllowJs1(module=node16).types | 72 +- ...eModulesAllowJs1(module=node16).types.diff | 72 +- ...nodeModulesAllowJs1(module=nodenext).types | 72 +- ...odulesAllowJs1(module=nodenext).types.diff | 72 +- ...ExportAssignment(module=node16).errors.txt | 5 +- ...tAssignment(module=node16).errors.txt.diff | 9 +- ...portAssignment(module=nodenext).errors.txt | 5 +- ...ssignment(module=nodenext).errors.txt.diff | 9 +- ...edNameCollisions(module=node16).errors.txt | 35 - ...eCollisions(module=node16).errors.txt.diff | 54 +- ...NameCollisions(module=nodenext).errors.txt | 35 - ...ollisions(module=nodenext).errors.txt.diff | 54 +- ...SynchronousCallErrors(module=node16).types | 12 +- ...ronousCallErrors(module=node16).types.diff | 12 +- ...nchronousCallErrors(module=nodenext).types | 12 +- ...nousCallErrors(module=nodenext).types.diff | 12 +- ...wJsTopLevelAwait(module=node16).errors.txt | 8 +- ...pLevelAwait(module=node16).errors.txt.diff | 18 +- ...sTopLevelAwait(module=nodenext).errors.txt | 8 +- ...evelAwait(module=nodenext).errors.txt.diff | 18 +- ...tFileAlwaysHasDefault(module=node16).types | 4 +- ...AlwaysHasDefault(module=node16).types.diff | 4 +- ...ileAlwaysHasDefault(module=nodenext).types | 4 +- ...waysHasDefault(module=nodenext).types.diff | 4 +- ...nEmitDynamicImportWithPackageExports.types | 16 +- ...DynamicImportWithPackageExports.types.diff | 33 +- ...xportAssignments(module=node16).errors.txt | 5 +- ...Assignments(module=node16).errors.txt.diff | 17 + ...ortAssignments(module=nodenext).errors.txt | 5 +- ...signments(module=nodenext).errors.txt.diff | 17 + ...ksSpecifierResolution(module=node16).types | 6 +- ...cifierResolution(module=node16).types.diff | 9 +- ...SpecifierResolution(module=nodenext).types | 6 +- ...fierResolution(module=nodenext).types.diff | 9 +- ...rGenerationConditions(module=node16).types | 6 +- ...rationConditions(module=node16).types.diff | 9 +- ...enerationConditions(module=nodenext).types | 6 +- ...tionConditions(module=nodenext).types.diff | 9 +- ...erGenerationDirectory(module=node16).types | 6 +- ...erationDirectory(module=node16).types.diff | 9 +- ...GenerationDirectory(module=nodenext).types | 6 +- ...ationDirectory(module=nodenext).types.diff | 9 +- ...fierGenerationPattern(module=node16).types | 6 +- ...enerationPattern(module=node16).types.diff | 9 +- ...erGenerationPattern(module=nodenext).types | 6 +- ...erationPattern(module=nodenext).types.diff | 9 +- ...edNameCollisions(module=node16).errors.txt | 35 - ...eCollisions(module=node16).errors.txt.diff | 54 +- ...NameCollisions(module=nodenext).errors.txt | 35 - ...ollisions(module=nodenext).errors.txt.diff | 54 +- ...dulesImportAssertions(module=node16).types | 4 +- ...ImportAssertions(module=node16).types.diff | 13 + ...portAssertions(module=nodenext).errors.txt | 5 +- ...ssertions(module=nodenext).errors.txt.diff | 6 +- ...lesImportAssertions(module=nodenext).types | 4 +- ...portAssertions(module=nodenext).types.diff | 13 + ...dulesImportAttributes(module=node16).types | 4 +- ...ImportAttributes(module=node16).types.diff | 13 + ...portAttributes(module=nodenext).errors.txt | 5 +- ...ttributes(module=nodenext).errors.txt.diff | 6 +- ...lesImportAttributes(module=nodenext).types | 4 +- ...portAttributes(module=nodenext).types.diff | 13 + ...clarationEmit2(module=nodenext).errors.txt | 20 +- ...tionEmit2(module=nodenext).errors.txt.diff | 20 +- ...clarationEmit2(module=nodenext).errors.txt | 20 +- ...tionEmit2(module=nodenext).errors.txt.diff | 20 +- ...esolveJsonModule(module=node16).errors.txt | 10 +- ...eJsonModule(module=node16).errors.txt.diff | 27 +- ...esResolveJsonModule(module=node16).symbols | 12 +- ...olveJsonModule(module=node16).symbols.diff | 14 +- ...ulesResolveJsonModule(module=node16).types | 36 +- ...esolveJsonModule(module=node16).types.diff | 62 +- ...olveJsonModule(module=nodenext).errors.txt | 22 +- ...sonModule(module=nodenext).errors.txt.diff | 22 +- ...ResolveJsonModule(module=nodenext).symbols | 12 +- ...veJsonModule(module=nodenext).symbols.diff | 14 +- ...esResolveJsonModule(module=nodenext).types | 36 +- ...olveJsonModule(module=nodenext).types.diff | 58 +- ...SynchronousCallErrors(module=node16).types | 12 +- ...ronousCallErrors(module=node16).types.diff | 12 +- ...nchronousCallErrors(module=nodenext).types | 12 +- ...nousCallErrors(module=nodenext).types.diff | 12 +- ...lesTopLevelAwait(module=node16).errors.txt | 8 +- ...pLevelAwait(module=node16).errors.txt.diff | 18 +- ...sTopLevelAwait(module=nodenext).errors.txt | 8 +- ...evelAwait(module=nodenext).errors.txt.diff | 18 +- ...DeclarationEmit7(module=node16).errors.txt | 5 +- ...rationEmit7(module=node16).errors.txt.diff | 5 +- ...odeDeclarationEmit7(module=node16).symbols | 2 - ...clarationEmit7(module=node16).symbols.diff | 4 +- ...eModeDeclarationEmit7(module=node16).types | 12 +- ...DeclarationEmit7(module=node16).types.diff | 16 +- ...clarationEmit7(module=nodenext).errors.txt | 5 +- ...tionEmit7(module=nodenext).errors.txt.diff | 5 +- ...eDeclarationEmit7(module=nodenext).symbols | 2 - ...arationEmit7(module=nodenext).symbols.diff | 4 +- ...odeDeclarationEmit7(module=nodenext).types | 12 +- ...clarationEmit7(module=nodenext).types.diff | 16 +- 145 files changed, 1919 insertions(+), 1433 deletions(-) delete mode 100644 testdata/baselines/reference/submodule/compiler/alwaysStrict.errors.txt create mode 100644 testdata/baselines/reference/submodule/compiler/alwaysStrict.errors.txt.diff delete mode 100644 testdata/baselines/reference/submodule/compiler/alwaysStrictES6.errors.txt create mode 100644 testdata/baselines/reference/submodule/compiler/alwaysStrictES6.errors.txt.diff delete mode 100644 testdata/baselines/reference/submodule/compiler/alwaysStrictModule.errors.txt create mode 100644 testdata/baselines/reference/submodule/compiler/alwaysStrictModule.errors.txt.diff delete mode 100644 testdata/baselines/reference/submodule/compiler/alwaysStrictModule2.errors.txt create mode 100644 testdata/baselines/reference/submodule/compiler/alwaysStrictModule2.errors.txt.diff delete mode 100644 testdata/baselines/reference/submodule/compiler/alwaysStrictNoImplicitUseStrict.errors.txt create mode 100644 testdata/baselines/reference/submodule/compiler/dynamicImportsDeclaration.types.diff delete mode 100644 testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=esnext).errors.txt create mode 100644 testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=esnext).types.diff delete mode 100644 testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=preserve).errors.txt create mode 100644 testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=preserve).types.diff delete mode 100644 testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsGeneratedNameCollisions(module=node16).errors.txt delete mode 100644 testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsGeneratedNameCollisions(module=nodenext).errors.txt create mode 100644 testdata/baselines/reference/submodule/conformance/nodeModulesExportAssignments(module=node16).errors.txt.diff create mode 100644 testdata/baselines/reference/submodule/conformance/nodeModulesExportAssignments(module=nodenext).errors.txt.diff delete mode 100644 testdata/baselines/reference/submodule/conformance/nodeModulesGeneratedNameCollisions(module=node16).errors.txt delete mode 100644 testdata/baselines/reference/submodule/conformance/nodeModulesGeneratedNameCollisions(module=nodenext).errors.txt create mode 100644 testdata/baselines/reference/submodule/conformance/nodeModulesImportAssertions(module=node16).types.diff create mode 100644 testdata/baselines/reference/submodule/conformance/nodeModulesImportAssertions(module=nodenext).types.diff create mode 100644 testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributes(module=node16).types.diff create mode 100644 testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributes(module=nodenext).types.diff diff --git a/.golangci.yml b/.golangci.yml index 3d33b1bd1b..de3955a10c 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -64,6 +64,10 @@ linters-settings: customlint: type: module + wrapcheck: + ignorePackageGlobs: + - encoding/* + - github.com/go-json-experiment/* # revive: # enable-all-rules: true # rules: diff --git a/Herebyfile.mjs b/Herebyfile.mjs index 38b0be6366..2f05653af8 100644 --- a/Herebyfile.mjs +++ b/Herebyfile.mjs @@ -44,7 +44,7 @@ const defaultGoBuildTags = [ /** * @param {...string} extra - * @returns {string[]} + * @returns */ function goBuildTags(...extra) { const tags = new Set(defaultGoBuildTags.concat(extra)); diff --git a/_tools/customlint/emptycase.go b/_tools/customlint/emptycase.go index a6c060a809..7f646002a1 100644 --- a/_tools/customlint/emptycase.go +++ b/_tools/customlint/emptycase.go @@ -19,7 +19,7 @@ var emptyCaseAnalyzer = &analysis.Analyzer{ }, } -func runEmptyCase(pass *analysis.Pass) (any, error) { +func runEmptyCase(pass *analysis.Pass) (interface{}, error) { inspect := pass.ResultOf[inspect.Analyzer].(*inspector.Inspector) nodeFilter := []ast.Node{ diff --git a/internal/ast/ast.go b/internal/ast/ast.go index 8a2998b837..9acacd6396 100644 --- a/internal/ast/ast.go +++ b/internal/ast/ast.go @@ -6,7 +6,6 @@ import ( "sync" "sync/atomic" - "github.com/microsoft/typescript-go/internal/compiler/packagejson" "github.com/microsoft/typescript-go/internal/core" "github.com/microsoft/typescript-go/internal/tspath" ) @@ -8697,11 +8696,6 @@ type SourceFile struct { TypeReferenceDirectives []*FileReference LibReferenceDirectives []*FileReference - // Fields set by file loader - - PackageJsonScope *packagejson.InfoCacheEntry - ImpliedNodeFormat core.ModuleKind - // Fields set by binder isBound atomic.Bool @@ -8729,6 +8723,7 @@ type SourceFile struct { // !!! + ImpliedNodeFormat core.ModuleKind CommonJsModuleIndicator *Node ExternalModuleIndicator *Node JsGlobalAugmentations SymbolTable @@ -8814,7 +8809,6 @@ func (node *SourceFile) copyFrom(other *SourceFile) { node.TypeReferenceDirectives = other.TypeReferenceDirectives node.LibReferenceDirectives = other.LibReferenceDirectives node.ImpliedNodeFormat = other.ImpliedNodeFormat - node.PackageJsonScope = other.PackageJsonScope node.CommonJsModuleIndicator = other.CommonJsModuleIndicator node.ExternalModuleIndicator = other.ExternalModuleIndicator node.JsGlobalAugmentations = other.JsGlobalAugmentations diff --git a/internal/ast/utilities.go b/internal/ast/utilities.go index 6fa3abe5ca..e8262ce04f 100644 --- a/internal/ast/utilities.go +++ b/internal/ast/utilities.go @@ -2364,67 +2364,22 @@ func GetEmitModuleFormatOfFileWorker(sourceFile *SourceFile, options *core.Compi func GetImpliedNodeFormatForEmitWorker(sourceFile *SourceFile, options *core.CompilerOptions) core.ResolutionMode { moduleKind := options.GetEmitModuleKind() - shouldLookupFromPackageJson := core.ModuleKindNode16 <= moduleKind && moduleKind <= core.ModuleKindNodeNext || strings.Contains(string(sourceFile.Path()), "/node_modules/") - var packageJsonMode core.ResolutionMode - if shouldLookupFromPackageJson { - packageJsonMode = core.IfElse(sourceFile.PackageJsonScope != nil && sourceFile.PackageJsonScope.Contents.Type.Value == "module", core.ModuleKindESNext, core.ModuleKindCommonJS) - } - - if core.ModuleKindNode16 <= moduleKind && moduleKind <= core.ModuleKindNodeNext && !shouldLookupFromPackageJson { + if core.ModuleKindNode16 <= moduleKind && moduleKind <= core.ModuleKindNodeNext { return sourceFile.ImpliedNodeFormat } - - if packageJsonMode == core.ModuleKindCommonJS || - tspath.FileExtensionIsOneOf(sourceFile.FileName(), []string{tspath.ExtensionCjs, tspath.ExtensionCts}) { + if sourceFile.ImpliedNodeFormat == core.ModuleKindCommonJS && + ( /*sourceFile.packageJsonScope.contents.packageJsonContent.type == "commonjs" ||*/ // !!! + tspath.FileExtensionIsOneOf(sourceFile.FileName(), []string{tspath.ExtensionCjs, tspath.ExtensionCts})) { return core.ModuleKindCommonJS } - if packageJsonMode == core.ModuleKindESNext || - tspath.FileExtensionIsOneOf(sourceFile.fileName, []string{tspath.ExtensionMjs, tspath.ExtensionMts}) { + if sourceFile.ImpliedNodeFormat == core.ModuleKindESNext && + ( /*sourceFile.packageJsonScope?.contents.packageJsonContent.type === "module" ||*/ // !!! + tspath.FileExtensionIsOneOf(sourceFile.fileName, []string{tspath.ExtensionMjs, tspath.ExtensionMts})) { return core.ModuleKindESNext } return core.ModuleKindNone } -func shouldTransformImportCallWorker(sourceFile *SourceFile, options *core.CompilerOptions) bool { - moduleKind := options.GetEmitModuleKind() - if core.ModuleKindNode16 <= moduleKind && moduleKind <= core.ModuleKindNodeNext || moduleKind == core.ModuleKindPreserve { - return false - } - return GetEmitModuleFormatOfFileWorker(sourceFile, options) < core.ModuleKindES2015 -} - -func GetEmitSyntaxForUsageLocationWorker(file *SourceFile, usage *Expression, options *core.CompilerOptions) core.ModuleKind { - if options == nil { - // This should always be provided, but we try to fail somewhat - // gracefully to allow projects like ts-node time to update. - return core.ModuleKindNone - } - - var exprParentParent *Node - exprParentContainingNode := WalkUpParenthesizedExpressions(usage.Parent) - if exprParentContainingNode != nil { - exprParentParent = exprParentContainingNode.Parent - } - - if exprParentParent != nil && IsImportEqualsDeclaration(exprParentParent) || IsRequireCall(usage.Parent, false /*requireStringLiteralLikeArgument*/) { - return core.ModuleKindCommonJS - } - - if IsImportCall(exprParentContainingNode) { - return core.IfElse(shouldTransformImportCallWorker(file, options), core.ModuleKindCommonJS, core.ModuleKindESNext) - } - // If we're in --module preserve on an input file, we know that an import - // is an import. But if this is a declaration file, we'd prefer to use the - // impliedNodeFormat. Since we want things to be consistent between the two, - // we need to issue errors when the user writes ESM syntax in a definitely-CJS - // file, until/unless declaration emit can indicate a true ESM import. On the - // other hand, writing CJS syntax in a definitely-ESM file is fine, since declaration - // emit preserves the CJS syntax. - fileEmitMode := GetEmitModuleFormatOfFileWorker(file, options) - emitModuleKindIsNonNodeEsm := fileEmitMode >= core.ModuleKindES2015 && fileEmitMode <= core.ModuleKindESNext - return core.IfElse(fileEmitMode == core.ModuleKindCommonJS, core.ModuleKindCommonJS, core.IfElse(emitModuleKindIsNonNodeEsm || fileEmitMode == core.ModuleKindPreserve, core.ModuleKindESNext, core.ModuleKindNone)) -} - func GetDeclarationContainer(node *Node) *Node { return FindAncestor(GetRootDeclaration(node), func(node *Node) bool { switch node.Kind { diff --git a/internal/binder/binder.go b/internal/binder/binder.go index 62cf2a06b4..d2eeaedfb6 100644 --- a/internal/binder/binder.go +++ b/internal/binder/binder.go @@ -117,7 +117,6 @@ func bindSourceFile(file *ast.SourceFile, options *core.CompilerOptions) { b.file = file b.options = options b.languageVersion = options.GetEmitScriptTarget() - b.inStrictMode = options.AlwaysStrict.IsTrue() b.unreachableFlow = b.newFlowNode(ast.FlowFlagsUnreachable) b.reportedUnreachableFlow = b.newFlowNode(ast.FlowFlagsUnreachable) b.bind(file.AsNode()) diff --git a/internal/checker/checker.go b/internal/checker/checker.go index 6e9cff020a..ec83d74faf 100644 --- a/internal/checker/checker.go +++ b/internal/checker/checker.go @@ -512,7 +512,6 @@ type Program interface { SourceFiles() []*ast.SourceFile BindSourceFiles() GetEmitModuleFormatOfFile(sourceFile *ast.SourceFile) core.ModuleKind - GetEmitSyntaxForUsageLocation(sourceFile *ast.SourceFile, usage *ast.Expression) core.ResolutionMode GetImpliedNodeFormatForEmit(sourceFile *ast.SourceFile) core.ModuleKind GetResolvedModule(currentSourceFile *ast.SourceFile, moduleReference string) *ast.SourceFile } @@ -524,287 +523,287 @@ type Host interface{} var nextCheckerID atomic.Uint32 type Checker struct { - id uint32 - program Program - host Host - compilerOptions *core.CompilerOptions - files []*ast.SourceFile - fileIndexMap map[*ast.SourceFile]int - compareSymbols func(*ast.Symbol, *ast.Symbol) int - TypeCount uint32 - symbolCount uint32 - totalInstantiationCount uint32 - instantiationCount uint32 - instantiationDepth uint32 - inlineLevel int - currentNode *ast.Node - varianceTypeParameter *Type - languageVersion core.ScriptTarget - moduleKind core.ModuleKind - isInferencePartiallyBlocked bool - legacyDecorators bool - emitStandardClassFields bool - allowSyntheticDefaultImports bool - strictNullChecks bool - strictFunctionTypes bool - strictBindCallApply bool - strictPropertyInitialization bool - strictBuiltinIteratorReturn bool - noImplicitAny bool - noImplicitThis bool - useUnknownInCatchVariables bool - exactOptionalPropertyTypes bool - canCollectSymbolAliasAccessibilityData bool - arrayVariances []VarianceFlags - globals ast.SymbolTable - globalSymbols []*ast.Symbol - evaluate evaluator.Evaluator - stringLiteralTypes map[string]*Type - numberLiteralTypes map[jsnum.Number]*Type - bigintLiteralTypes map[jsnum.PseudoBigInt]*Type - enumLiteralTypes map[EnumLiteralKey]*Type - indexedAccessTypes map[string]*Type - templateLiteralTypes map[string]*Type - stringMappingTypes map[StringMappingKey]*Type - uniqueESSymbolTypes map[*ast.Symbol]*Type - subtypeReductionCache map[string][]*Type - cachedTypes map[CachedTypeKey]*Type - cachedSignatures map[CachedSignatureKey]*Signature - undefinedProperties map[string]*ast.Symbol - narrowedTypes map[NarrowedTypeKey]*Type - assignmentReducedTypes map[AssignmentReducedKey]*Type - discriminatedContextualTypes map[DiscriminatedContextualTypeKey]*Type - instantiationExpressionTypes map[InstantiationExpressionKey]*Type - substitutionTypes map[SubstitutionTypeKey]*Type - reverseMappedCache map[ReverseMappedTypeKey]*Type - reverseHomomorphicMappedCache map[ReverseMappedTypeKey]*Type - iterationTypesCache map[IterationTypesKey]IterationTypes - markerTypes core.Set[*Type] - identifierSymbols map[*ast.Node]*ast.Symbol - undefinedSymbol *ast.Symbol - argumentsSymbol *ast.Symbol - requireSymbol *ast.Symbol - unknownSymbol *ast.Symbol - resolvingSymbol *ast.Symbol - unresolvedSymbols map[string]*ast.Symbol - errorTypes map[string]*Type - globalThisSymbol *ast.Symbol - resolveName func(location *ast.Node, name string, meaning ast.SymbolFlags, nameNotFoundMessage *diagnostics.Message, isUse bool, excludeGlobals bool) *ast.Symbol - resolveNameForSymbolSuggestion func(location *ast.Node, name string, meaning ast.SymbolFlags, nameNotFoundMessage *diagnostics.Message, isUse bool, excludeGlobals bool) *ast.Symbol - tupleTypes map[string]*Type - unionTypes map[string]*Type - unionOfUnionTypes map[UnionOfUnionKey]*Type - intersectionTypes map[string]*Type - diagnostics ast.DiagnosticsCollection - suggestionDiagnostics ast.DiagnosticsCollection - symbolPool core.Pool[ast.Symbol] - signaturePool core.Pool[Signature] - indexInfoPool core.Pool[IndexInfo] - mergedSymbols map[*ast.Symbol]*ast.Symbol - factory ast.NodeFactory - nodeLinks core.LinkStore[*ast.Node, NodeLinks] - signatureLinks core.LinkStore[*ast.Node, SignatureLinks] - typeNodeLinks core.LinkStore[*ast.Node, TypeNodeLinks] - enumMemberLinks core.LinkStore[*ast.Node, EnumMemberLinks] - assertionLinks core.LinkStore[*ast.Node, AssertionLinks] - arrayLiteralLinks core.LinkStore[*ast.Node, ArrayLiteralLinks] - switchStatementLinks core.LinkStore[*ast.Node, SwitchStatementLinks] - symbolReferenceLinks core.LinkStore[*ast.Symbol, SymbolReferenceLinks] - valueSymbolLinks core.LinkStore[*ast.Symbol, ValueSymbolLinks] - mappedSymbolLinks core.LinkStore[*ast.Symbol, MappedSymbolLinks] - deferredSymbolLinks core.LinkStore[*ast.Symbol, DeferredSymbolLinks] - aliasSymbolLinks core.LinkStore[*ast.Symbol, AliasSymbolLinks] - moduleSymbolLinks core.LinkStore[*ast.Symbol, ModuleSymbolLinks] - lateBoundLinks core.LinkStore[*ast.Symbol, LateBoundLinks] - exportTypeLinks core.LinkStore[*ast.Symbol, ExportTypeLinks] - membersAndExportsLinks core.LinkStore[*ast.Symbol, MembersAndExportsLinks] - typeAliasLinks core.LinkStore[*ast.Symbol, TypeAliasLinks] - declaredTypeLinks core.LinkStore[*ast.Symbol, DeclaredTypeLinks] - spreadLinks core.LinkStore[*ast.Symbol, SpreadLinks] - varianceLinks core.LinkStore[*ast.Symbol, VarianceLinks] - indexSymbolLinks core.LinkStore[*ast.Symbol, IndexSymbolLinks] - ReverseMappedSymbolLinks core.LinkStore[*ast.Symbol, ReverseMappedSymbolLinks] - markedAssignmentSymbolLinks core.LinkStore[*ast.Symbol, MarkedAssignmentSymbolLinks] - sourceFileLinks core.LinkStore[*ast.SourceFile, SourceFileLinks] - patternForType map[*Type]*ast.Node - contextFreeTypes map[*ast.Node]*Type - anyType *Type - autoType *Type - wildcardType *Type - blockedStringType *Type - errorType *Type - unresolvedType *Type - nonInferrableAnyType *Type - intrinsicMarkerType *Type - unknownType *Type - undefinedType *Type - undefinedWideningType *Type - missingType *Type - undefinedOrMissingType *Type - optionalType *Type - nullType *Type - nullWideningType *Type - stringType *Type - numberType *Type - bigintType *Type - regularFalseType *Type - falseType *Type - regularTrueType *Type - trueType *Type - booleanType *Type - esSymbolType *Type - voidType *Type - neverType *Type - silentNeverType *Type - implicitNeverType *Type - unreachableNeverType *Type - nonPrimitiveType *Type - stringOrNumberType *Type - stringNumberSymbolType *Type - numberOrBigIntType *Type - templateConstraintType *Type - numericStringType *Type - uniqueLiteralType *Type - uniqueLiteralMapper *TypeMapper - reliabilityFlags RelationComparisonResult - reportUnreliableMapper *TypeMapper - reportUnmeasurableMapper *TypeMapper - restrictiveMapper *TypeMapper - permissiveMapper *TypeMapper - emptyObjectType *Type - emptyTypeLiteralType *Type - unknownEmptyObjectType *Type - unknownUnionType *Type - emptyGenericType *Type - anyFunctionType *Type - noConstraintType *Type - circularConstraintType *Type - resolvingDefaultType *Type - markerSuperType *Type - markerSubType *Type - markerOtherType *Type - markerSuperTypeForCheck *Type - markerSubTypeForCheck *Type - noTypePredicate *TypePredicate - anySignature *Signature - unknownSignature *Signature - resolvingSignature *Signature - silentNeverSignature *Signature - enumNumberIndexInfo *IndexInfo - patternAmbientModules []ast.PatternAmbientModule - patternAmbientModuleAugmentations ast.SymbolTable - globalObjectType *Type - globalFunctionType *Type - globalCallableFunctionType *Type - globalNewableFunctionType *Type - globalArrayType *Type - globalReadonlyArrayType *Type - globalStringType *Type - globalNumberType *Type - globalBooleanType *Type - globalRegExpType *Type - globalThisType *Type - anyArrayType *Type - autoArrayType *Type - anyReadonlyArrayType *Type - deferredGlobalImportMetaExpressionType *Type - contextualBindingPatterns []*ast.Node - emptyStringType *Type - zeroType *Type - zeroBigIntType *Type - typeofType *Type - typeResolutions []TypeResolution - resolutionStart int - inVarianceComputation bool - suggestionCount int - apparentArgumentCount *int - lastGetCombinedNodeFlagsNode *ast.Node - lastGetCombinedNodeFlagsResult ast.NodeFlags - lastGetCombinedModifierFlagsNode *ast.Node - lastGetCombinedModifierFlagsResult ast.ModifierFlags - inferenceStates []InferenceState - flowStates []FlowState - flowLoopCache map[FlowLoopKey]*Type - flowLoopStack []FlowLoopInfo - sharedFlows []SharedFlow - antecedentTypes []*Type - flowAnalysisDisabled bool - flowInvocationCount int - flowTypeCache map[*ast.Node]*Type - lastFlowNode *ast.FlowNode - lastFlowNodeReachable bool - flowNodeReachable map[*ast.FlowNode]bool - flowNodePostSuper map[*ast.FlowNode]bool - renamedBindingElementsInTypes []*ast.Node - contextualInfos []ContextualInfo - inferenceContextInfos []InferenceContextInfo - awaitedTypeStack []*Type - reverseMappedSourceStack []*Type - reverseMappedTargetStack []*Type - reverseExpandingFlags ExpandingFlags - relaters []Relater - subtypeRelation *Relation - strictSubtypeRelation *Relation - assignableRelation *Relation - comparableRelation *Relation - identityRelation *Relation - enumRelation map[EnumRelationKey]RelationComparisonResult - getGlobalESSymbolType func() *Type - getGlobalBigIntType func() *Type - getGlobalImportMetaType func() *Type - getGlobalImportAttributesType func() *Type - getGlobalImportAttributesTypeChecked func() *Type - getGlobalNonNullableTypeAliasOrNil func() *ast.Symbol - getGlobalExtractSymbol func() *ast.Symbol - getGlobalDisposableType func() *Type - getGlobalAsyncDisposableType func() *Type - getGlobalAwaitedSymbol func() *ast.Symbol - getGlobalAwaitedSymbolOrNil func() *ast.Symbol - getGlobalNaNSymbolOrNil func() *ast.Symbol - getGlobalRecordSymbol func() *ast.Symbol - getGlobalTemplateStringsArrayType func() *Type - getGlobalESSymbolConstructorSymbolOrNil func() *ast.Symbol - getGlobalImportCallOptionsType func() *Type - getGlobalImportCallOptionsTypeChecked func() *Type - getGlobalPromiseType func() *Type - getGlobalPromiseTypeChecked func() *Type - getGlobalPromiseLikeType func() *Type - getGlobalPromiseConstructorSymbol func() *ast.Symbol - getGlobalPromiseConstructorSymbolOrNil func() *ast.Symbol - getGlobalOmitSymbol func() *ast.Symbol - getGlobalIteratorType func() *Type - getGlobalIterableType func() *Type - getGlobalIterableTypeChecked func() *Type - getGlobalIterableIteratorType func() *Type - getGlobalIterableIteratorTypeChecked func() *Type - getGlobalIteratorObjectType func() *Type - getGlobalGeneratorType func() *Type - getGlobalAsyncIteratorType func() *Type - getGlobalAsyncIterableType func() *Type - getGlobalAsyncIterableIteratorType func() *Type - getGlobalAsyncIterableIteratorTypeChecked func() *Type - getGlobalAsyncIteratorObjectType func() *Type - getGlobalAsyncGeneratorType func() *Type - getGlobalIteratorYieldResultType func() *Type - getGlobalIteratorReturnResultType func() *Type - getGlobalTypedPropertyDescriptorType func() *Type - getGlobalClassDecoratorContextType func() *Type - getGlobalClassMethodDecoratorContextType func() *Type - getGlobalClassGetterDecoratorContextType func() *Type - getGlobalClassSetterDecoratorContextType func() *Type - getGlobalClassAccessorDecoratorContextType func() *Type - getGlobalClassAccessorDecoratorTargetType func() *Type - getGlobalClassAccessorDecoratorResultType func() *Type - getGlobalClassFieldDecoratorContextType func() *Type - syncIterationTypesResolver *IterationTypesResolver - asyncIterationTypesResolver *IterationTypesResolver - isPrimitiveOrObjectOrEmptyType func(*Type) bool - containsMissingType func(*Type) bool - couldContainTypeVariables func(*Type) bool - isStringIndexSignatureOnlyType func(*Type) bool - markNodeAssignments func(*ast.Node) bool - emitResolver *emitResolver - emitResolverOnce sync.Once + id uint32 + program Program + host Host + compilerOptions *core.CompilerOptions + files []*ast.SourceFile + fileIndexMap map[*ast.SourceFile]int + compareSymbols func(*ast.Symbol, *ast.Symbol) int + TypeCount uint32 + symbolCount uint32 + totalInstantiationCount uint32 + instantiationCount uint32 + instantiationDepth uint32 + inlineLevel int + currentNode *ast.Node + varianceTypeParameter *Type + languageVersion core.ScriptTarget + moduleKind core.ModuleKind + isInferencePartiallyBlocked bool + legacyDecorators bool + emitStandardClassFields bool + allowSyntheticDefaultImports bool + strictNullChecks bool + strictFunctionTypes bool + strictBindCallApply bool + strictPropertyInitialization bool + strictBuiltinIteratorReturn bool + noImplicitAny bool + noImplicitThis bool + useUnknownInCatchVariables bool + exactOptionalPropertyTypes bool + canCollectSymbolAliasAccessibilityData bool + arrayVariances []VarianceFlags + globals ast.SymbolTable + globalSymbols []*ast.Symbol + evaluate evaluator.Evaluator + stringLiteralTypes map[string]*Type + numberLiteralTypes map[jsnum.Number]*Type + bigintLiteralTypes map[jsnum.PseudoBigInt]*Type + enumLiteralTypes map[EnumLiteralKey]*Type + indexedAccessTypes map[string]*Type + templateLiteralTypes map[string]*Type + stringMappingTypes map[StringMappingKey]*Type + uniqueESSymbolTypes map[*ast.Symbol]*Type + subtypeReductionCache map[string][]*Type + cachedTypes map[CachedTypeKey]*Type + cachedSignatures map[CachedSignatureKey]*Signature + undefinedProperties map[string]*ast.Symbol + narrowedTypes map[NarrowedTypeKey]*Type + assignmentReducedTypes map[AssignmentReducedKey]*Type + discriminatedContextualTypes map[DiscriminatedContextualTypeKey]*Type + instantiationExpressionTypes map[InstantiationExpressionKey]*Type + substitutionTypes map[SubstitutionTypeKey]*Type + reverseMappedCache map[ReverseMappedTypeKey]*Type + reverseHomomorphicMappedCache map[ReverseMappedTypeKey]*Type + iterationTypesCache map[IterationTypesKey]IterationTypes + markerTypes core.Set[*Type] + identifierSymbols map[*ast.Node]*ast.Symbol + undefinedSymbol *ast.Symbol + argumentsSymbol *ast.Symbol + requireSymbol *ast.Symbol + unknownSymbol *ast.Symbol + resolvingSymbol *ast.Symbol + unresolvedSymbols map[string]*ast.Symbol + errorTypes map[string]*Type + globalThisSymbol *ast.Symbol + resolveName func(location *ast.Node, name string, meaning ast.SymbolFlags, nameNotFoundMessage *diagnostics.Message, isUse bool, excludeGlobals bool) *ast.Symbol + resolveNameForSymbolSuggestion func(location *ast.Node, name string, meaning ast.SymbolFlags, nameNotFoundMessage *diagnostics.Message, isUse bool, excludeGlobals bool) *ast.Symbol + tupleTypes map[string]*Type + unionTypes map[string]*Type + unionOfUnionTypes map[UnionOfUnionKey]*Type + intersectionTypes map[string]*Type + diagnostics ast.DiagnosticsCollection + suggestionDiagnostics ast.DiagnosticsCollection + symbolPool core.Pool[ast.Symbol] + signaturePool core.Pool[Signature] + indexInfoPool core.Pool[IndexInfo] + mergedSymbols map[*ast.Symbol]*ast.Symbol + factory ast.NodeFactory + nodeLinks core.LinkStore[*ast.Node, NodeLinks] + signatureLinks core.LinkStore[*ast.Node, SignatureLinks] + typeNodeLinks core.LinkStore[*ast.Node, TypeNodeLinks] + enumMemberLinks core.LinkStore[*ast.Node, EnumMemberLinks] + assertionLinks core.LinkStore[*ast.Node, AssertionLinks] + arrayLiteralLinks core.LinkStore[*ast.Node, ArrayLiteralLinks] + switchStatementLinks core.LinkStore[*ast.Node, SwitchStatementLinks] + symbolReferenceLinks core.LinkStore[*ast.Symbol, SymbolReferenceLinks] + valueSymbolLinks core.LinkStore[*ast.Symbol, ValueSymbolLinks] + mappedSymbolLinks core.LinkStore[*ast.Symbol, MappedSymbolLinks] + deferredSymbolLinks core.LinkStore[*ast.Symbol, DeferredSymbolLinks] + aliasSymbolLinks core.LinkStore[*ast.Symbol, AliasSymbolLinks] + moduleSymbolLinks core.LinkStore[*ast.Symbol, ModuleSymbolLinks] + lateBoundLinks core.LinkStore[*ast.Symbol, LateBoundLinks] + exportTypeLinks core.LinkStore[*ast.Symbol, ExportTypeLinks] + membersAndExportsLinks core.LinkStore[*ast.Symbol, MembersAndExportsLinks] + typeAliasLinks core.LinkStore[*ast.Symbol, TypeAliasLinks] + declaredTypeLinks core.LinkStore[*ast.Symbol, DeclaredTypeLinks] + spreadLinks core.LinkStore[*ast.Symbol, SpreadLinks] + varianceLinks core.LinkStore[*ast.Symbol, VarianceLinks] + indexSymbolLinks core.LinkStore[*ast.Symbol, IndexSymbolLinks] + ReverseMappedSymbolLinks core.LinkStore[*ast.Symbol, ReverseMappedSymbolLinks] + markedAssignmentSymbolLinks core.LinkStore[*ast.Symbol, MarkedAssignmentSymbolLinks] + sourceFileLinks core.LinkStore[*ast.SourceFile, SourceFileLinks] + patternForType map[*Type]*ast.Node + contextFreeTypes map[*ast.Node]*Type + anyType *Type + autoType *Type + wildcardType *Type + blockedStringType *Type + errorType *Type + unresolvedType *Type + nonInferrableAnyType *Type + intrinsicMarkerType *Type + unknownType *Type + undefinedType *Type + undefinedWideningType *Type + missingType *Type + undefinedOrMissingType *Type + optionalType *Type + nullType *Type + nullWideningType *Type + stringType *Type + numberType *Type + bigintType *Type + regularFalseType *Type + falseType *Type + regularTrueType *Type + trueType *Type + booleanType *Type + esSymbolType *Type + voidType *Type + neverType *Type + silentNeverType *Type + implicitNeverType *Type + unreachableNeverType *Type + nonPrimitiveType *Type + stringOrNumberType *Type + stringNumberSymbolType *Type + numberOrBigIntType *Type + templateConstraintType *Type + numericStringType *Type + uniqueLiteralType *Type + uniqueLiteralMapper *TypeMapper + reliabilityFlags RelationComparisonResult + reportUnreliableMapper *TypeMapper + reportUnmeasurableMapper *TypeMapper + restrictiveMapper *TypeMapper + permissiveMapper *TypeMapper + emptyObjectType *Type + emptyTypeLiteralType *Type + unknownEmptyObjectType *Type + unknownUnionType *Type + emptyGenericType *Type + anyFunctionType *Type + noConstraintType *Type + circularConstraintType *Type + resolvingDefaultType *Type + markerSuperType *Type + markerSubType *Type + markerOtherType *Type + markerSuperTypeForCheck *Type + markerSubTypeForCheck *Type + noTypePredicate *TypePredicate + anySignature *Signature + unknownSignature *Signature + resolvingSignature *Signature + silentNeverSignature *Signature + enumNumberIndexInfo *IndexInfo + patternAmbientModules []ast.PatternAmbientModule + patternAmbientModuleAugmentations ast.SymbolTable + globalObjectType *Type + globalFunctionType *Type + globalCallableFunctionType *Type + globalNewableFunctionType *Type + globalArrayType *Type + globalReadonlyArrayType *Type + globalStringType *Type + globalNumberType *Type + globalBooleanType *Type + globalRegExpType *Type + globalThisType *Type + anyArrayType *Type + autoArrayType *Type + anyReadonlyArrayType *Type + deferredGlobalImportMetaExpressionType *Type + contextualBindingPatterns []*ast.Node + emptyStringType *Type + zeroType *Type + zeroBigIntType *Type + typeofType *Type + typeResolutions []TypeResolution + resolutionStart int + inVarianceComputation bool + suggestionCount int + apparentArgumentCount *int + lastGetCombinedNodeFlagsNode *ast.Node + lastGetCombinedNodeFlagsResult ast.NodeFlags + lastGetCombinedModifierFlagsNode *ast.Node + lastGetCombinedModifierFlagsResult ast.ModifierFlags + inferenceStates []InferenceState + flowStates []FlowState + flowLoopCache map[FlowLoopKey]*Type + flowLoopStack []FlowLoopInfo + sharedFlows []SharedFlow + antecedentTypes []*Type + flowAnalysisDisabled bool + flowInvocationCount int + flowTypeCache map[*ast.Node]*Type + lastFlowNode *ast.FlowNode + lastFlowNodeReachable bool + flowNodeReachable map[*ast.FlowNode]bool + flowNodePostSuper map[*ast.FlowNode]bool + renamedBindingElementsInTypes []*ast.Node + contextualInfos []ContextualInfo + inferenceContextInfos []InferenceContextInfo + awaitedTypeStack []*Type + reverseMappedSourceStack []*Type + reverseMappedTargetStack []*Type + reverseExpandingFlags ExpandingFlags + relaters []Relater + subtypeRelation *Relation + strictSubtypeRelation *Relation + assignableRelation *Relation + comparableRelation *Relation + identityRelation *Relation + enumRelation map[EnumRelationKey]RelationComparisonResult + getGlobalESSymbolType func() *Type + getGlobalBigIntType func() *Type + getGlobalImportMetaType func() *Type + getGlobalImportAttributesType func() *Type + getGlobalImportAttributesTypeChecked func() *Type + getGlobalNonNullableTypeAliasOrNil func() *ast.Symbol + getGlobalExtractSymbol func() *ast.Symbol + getGlobalDisposableType func() *Type + getGlobalAsyncDisposableType func() *Type + getGlobalAwaitedSymbol func() *ast.Symbol + getGlobalAwaitedSymbolOrNil func() *ast.Symbol + getGlobalNaNSymbolOrNil func() *ast.Symbol + getGlobalRecordSymbol func() *ast.Symbol + getGlobalTemplateStringsArrayType func() *Type + getGlobalESSymbolConstructorSymbolOrNil func() *ast.Symbol + getGlobalImportCallOptionsType func() *Type + getGlobalImportCallOptionsTypeChecked func() *Type + getGlobalPromiseType func() *Type + getGlobalPromiseTypeChecked func() *Type + getGlobalPromiseLikeType func() *Type + getGlobalPromiseConstructorSymbol func() *ast.Symbol + getGlobalPromiseConstructorSymbolOrNil func() *ast.Symbol + getGlobalOmitSymbol func() *ast.Symbol + getGlobalIteratorType func() *Type + getGlobalIterableType func() *Type + getGlobalIterableTypeChecked func() *Type + getGlobalIterableIteratorType func() *Type + getGlobalIterableIteratorTypeChecked func() *Type + getGlobalIteratorObjectType func() *Type + getGlobalGeneratorType func() *Type + getGlobalAsyncIteratorType func() *Type + getGlobalAsyncIterableType func() *Type + getGlobalAsyncIterableIteratorType func() *Type + getGlobalAsyncIterableIteratorTypeChecked func() *Type + getGlobalAsyncIteratorObjectType func() *Type + getGlobalAsyncGeneratorType func() *Type + getGlobalIteratorYieldResultType func() *Type + getGlobalIteratorReturnResultType func() *Type + getGlobalTypedPropertyDescriptorType func() *Type + getGlobalClassDecoratorContextType func() *Type + getGlobalClassMethodDecoratorContextType func() *Type + getGlobalClassGetterDecoratorContextType func() *Type + getGlobalClassSetterDecoratorContextType func() *Type + getGlobalClassAccessorDecoratorContxtType func() *Type + getGlobalClassAccessorDecoratorTargetType func() *Type + getGlobalClassAccessorDecoratorResultType func() *Type + getGlobalClassFieldDecoratorContextType func() *Type + syncIterationTypesResolver *IterationTypesResolver + asyncIterationTypesResolver *IterationTypesResolver + isPrimitiveOrObjectOrEmptyType func(*Type) bool + containsMissingType func(*Type) bool + couldContainTypeVariables func(*Type) bool + isStringIndexSignatureOnlyType func(*Type) bool + markNodeAssignments func(*ast.Node) bool + emitResolver *emitResolver + emitResolverOnce sync.Once } func NewChecker(program Program) *Checker { @@ -1002,7 +1001,7 @@ func NewChecker(program Program) *Checker { c.getGlobalClassMethodDecoratorContextType = c.getGlobalTypeResolver("ClassMethodDecoratorContext", 2 /*arity*/, true /*reportErrors*/) c.getGlobalClassGetterDecoratorContextType = c.getGlobalTypeResolver("ClassGetterDecoratorContext", 2 /*arity*/, true /*reportErrors*/) c.getGlobalClassSetterDecoratorContextType = c.getGlobalTypeResolver("ClassSetterDecoratorContext", 2 /*arity*/, true /*reportErrors*/) - c.getGlobalClassAccessorDecoratorContextType = c.getGlobalTypeResolver("ClassAccessorDecoratorContext", 2 /*arity*/, true /*reportErrors*/) + c.getGlobalClassAccessorDecoratorContxtType = c.getGlobalTypeResolver("ClassAccessorDecoratorContext", 2 /*arity*/, true /*reportErrors*/) c.getGlobalClassAccessorDecoratorTargetType = c.getGlobalTypeResolver("ClassAccessorDecoratorTarget", 2 /*arity*/, true /*reportErrors*/) c.getGlobalClassAccessorDecoratorResultType = c.getGlobalTypeResolver("ClassAccessorDecoratorResult", 2 /*arity*/, true /*reportErrors*/) c.getGlobalClassFieldDecoratorContextType = c.getGlobalTypeResolver("ClassFieldDecoratorContext", 2 /*arity*/, true /*reportErrors*/) @@ -5526,7 +5525,7 @@ func (c *Checker) checkVarDeclaredNamesNotShadowed(node *ast.Node) { namesShareScope := container != nil && (ast.IsBlock(container) && ast.IsFunctionLike(container.Parent) || ast.IsModuleBlock(container) || ast.IsModuleDeclaration(container) || ast.IsSourceFile(container)) // here we know that function scoped variable is "shadowed" by block scoped one - // a var declaration can't hoist past a lexical declaration and it results in a SyntaxError at runtime + // a var declatation can't hoist past a lexical declaration and it results in a SyntaxError at runtime if !namesShareScope { name := c.symbolToString(localDeclarationSymbol) c.error(node, diagnostics.Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1, name, name) @@ -13750,22 +13749,23 @@ func (c *Checker) isOnlyImportableAsDefault(usage *ast.Node, resolvedModule *ast } func (c *Checker) canHaveSyntheticDefault(file *ast.Node, moduleSymbol *ast.Symbol, dontResolveAlias bool, usage *ast.Node) bool { - var usageMode core.ResolutionMode - if file != nil { - usageMode = c.getEmitSyntaxForModuleSpecifierExpression(usage) - } - if file != nil && usageMode != core.ModuleKindNone { - targetMode := c.program.GetImpliedNodeFormatForEmit(file.AsSourceFile()) - if usageMode == core.ModuleKindESNext && targetMode == core.ModuleKindCommonJS && core.ModuleKindNode16 <= c.moduleKind && c.moduleKind <= core.ModuleKindNodeNext { - // In Node.js, CommonJS modules always have a synthetic default when imported into ESM - return true - } - if usageMode == core.ModuleKindESNext && targetMode == core.ModuleKindESNext { - // No matter what the `module` setting is, if we're confident that both files - // are ESM, there cannot be a synthetic default. - return false - } - } + // !!! + // var usageMode ResolutionMode + // if file != nil { + // usageMode = c.getEmitSyntaxForModuleSpecifierExpression(usage) + // } + // if file != nil && usageMode != core.ModuleKindNone { + // targetMode := host.getImpliedNodeFormatForEmit(file) + // if usageMode == core.ModuleKindESNext && targetMode == core.ModuleKindCommonJS && core.ModuleKindNode16 <= c.moduleKind && c.moduleKind <= core.ModuleKindNodeNext { + // // In Node.js, CommonJS modules always have a synthetic default when imported into ESM + // return true + // } + // if usageMode == core.ModuleKindESNext && targetMode == core.ModuleKindESNext { + // // No matter what the `module` setting is, if we're confident that both files + // // are ESM, there cannot be a synthetic default. + // return false + // } + // } if !c.allowSyntheticDefaultImports { return false } @@ -13794,9 +13794,10 @@ func (c *Checker) canHaveSyntheticDefault(file *ast.Node, moduleSymbol *ast.Symb } func (c *Checker) getEmitSyntaxForModuleSpecifierExpression(usage *ast.Node) core.ResolutionMode { - if ast.IsStringLiteralLike(usage) { - return c.program.GetEmitSyntaxForUsageLocation(ast.GetSourceFileOfNode(usage), usage) - } + // !!! + // if isStringLiteralLike(usage) { + // return host.getEmitSyntaxForUsageLocation(ast.GetSourceFileOfNode(usage), usage) + // } return core.ModuleKindNone } @@ -20209,7 +20210,7 @@ func isReservedMemberName(name string) bool { } func (c *Checker) symbolIsValue(symbol *ast.Symbol) bool { - return c.symbolIsValueEx(symbol, false /*includeTypeOnlyMembers*/) + return c.symbolIsValueEx(symbol, false /*includeTyoeOnlyMembers*/) } func (c *Checker) symbolIsValueEx(symbol *ast.Symbol, includeTypeOnlyMembers bool) bool { @@ -20356,7 +20357,7 @@ func (c *Checker) instantiateTypeWorker(t *Type, m *TypeMapper, alias *TypeAlias return t } -// Handles instantiation of the following object types: +// Handles instantion of the following object types: // AnonymousType (ObjectFlagsAnonymous) // TypeReference with node != nil (ObjectFlagsReference) // SingleSignatureType (ObjectFlagsSingleSignatureType) @@ -27738,7 +27739,7 @@ func (c *Checker) newClassSetterDecoratorContextType(classType *Type, valueType } func (c *Checker) newClassAccessorDecoratorContextType(thisType *Type, valueType *Type) *Type { - return c.tryCreateTypeReference(c.getGlobalClassAccessorDecoratorContextType(), []*Type{thisType, valueType}) + return c.tryCreateTypeReference(c.getGlobalClassAccessorDecoratorContxtType(), []*Type{thisType, valueType}) } func (c *Checker) newClassFieldDecoratorContextType(thisType *Type, valueType *Type) *Type { @@ -28486,7 +28487,7 @@ func (c *Checker) removeNullableByIntersection(t *Type, targetFacts TypeFacts, o // By default we intersect with a union of {} and the opposite nullable. emptyAndOtherUnion := c.getUnionType([]*Type{c.emptyObjectType, otherType}) // For each constituent type that can compare equal to the target nullable, intersect with the above union - // if the type doesn't already include the opposite nullable and the constituent can compare equal to the + // if the type doesn't already include the opppsite nullable and the constituent can compare equal to the // opposite nullable; otherwise, just intersect with {}. return c.mapType(t, func(t *Type) *Type { if c.hasTypeFacts(t, targetFacts) { diff --git a/internal/compiler/fileloader.go b/internal/compiler/fileloader.go index 072a98bfd0..0b35e5d91a 100644 --- a/internal/compiler/fileloader.go +++ b/internal/compiler/fileloader.go @@ -224,9 +224,6 @@ func (t *parseTask) start(loader *fileLoader) { func (p *fileLoader) parseSourceFile(fileName string) *ast.SourceFile { path := tspath.ToPath(fileName, p.host.GetCurrentDirectory(), p.host.FS().UseCaseSensitiveFileNames()) sourceFile := p.host.GetSourceFile(fileName, path, p.compilerOptions.GetEmitScriptTarget()) - sourceFile.PackageJsonScope = p.resolver.GetPackageScopeForPath(string(path)) - sourceFile.ImpliedNodeFormat = ast.GetImpliedNodeFormatForEmitWorker(sourceFile, p.compilerOptions) - return sourceFile } diff --git a/internal/compiler/program.go b/internal/compiler/program.go index 01685ea57d..91754a537b 100644 --- a/internal/compiler/program.go +++ b/internal/compiler/program.go @@ -418,10 +418,6 @@ func (p *Program) GetImpliedNodeFormatForEmit(sourceFile *ast.SourceFile) core.R return ast.GetImpliedNodeFormatForEmitWorker(sourceFile, p.compilerOptions) } -func (p *Program) GetEmitSyntaxForUsageLocation(sourceFile *ast.SourceFile, usage *ast.Expression) core.ResolutionMode { - return ast.GetEmitSyntaxForUsageLocationWorker(sourceFile, usage, p.compilerOptions) -} - func (p *Program) CommonSourceDirectory() string { p.commonSourceDirectoryOnce.Do(func() { var files []string diff --git a/internal/execute/tsc.go b/internal/execute/tsc.go index 09bbf05f86..6dc1126397 100644 --- a/internal/execute/tsc.go +++ b/internal/execute/tsc.go @@ -77,14 +77,14 @@ func executeCommandLineWorker(sys System, cb cbType, commandLine *tsoptions.Pars return ExitStatusDiagnosticsPresent_OutputsSkipped, nil } - // !!! convert to options with absolute paths is usually done here, but for ease of implementation, it's done in `tsoptions.ParseCommandLine()` + // !!! convert to options with absolute paths is usualy done here, but for ease of implementation, it's done in `tsoptions.ParseCommandLine()` compilerOptionsFromCommandLine := commandLine.CompilerOptions() if configFileName != "" { extendedConfigCache := map[tspath.Path]*tsoptions.ExtendedConfigCacheEntry{} configParseResult, errors := getParsedCommandLineOfConfigFile(configFileName, compilerOptionsFromCommandLine, sys, extendedConfigCache) if len(errors) != 0 { - // these are unrecoverable errors--exit to report them as diagnostics + // these are unrecoverable errors--exit to report them as diagnotics for _, e := range errors { reportDiagnostic(e) } @@ -144,7 +144,7 @@ func getParsedCommandLineOfConfigFile(configFileName string, options *core.Compi errors := []*ast.Diagnostic{} configFileText, errors := tsoptions.TryReadFile(configFileName, sys.FS().ReadFile, errors) if len(errors) > 0 { - // these are unrecoverable errors--exit to report them as diagnostics + // these are unrecoverable errors--exit to report them as diagnotics return nil, errors } diff --git a/internal/project/service.go b/internal/project/service.go index f943868e90..3181d400ee 100644 --- a/internal/project/service.go +++ b/internal/project/service.go @@ -540,7 +540,7 @@ func (s *Service) loadConfiguredProject(project *Project) { s.logf("Config: %s : %s", project.configFileName, - core.Must(core.StringifyJson(map[string]any{ + core.Must(core.StringifyJson(map[string]interface{}{ "rootNames": parsedCommandLine.FileNames(), "options": parsedCommandLine.CompilerOptions(), "projectReferences": parsedCommandLine.ProjectReferences(), @@ -608,6 +608,6 @@ func (s *Service) log(msg string) { s.options.Logger.Info(msg) } -func (s *Service) logf(format string, args ...any) { +func (s *Service) logf(format string, args ...interface{}) { s.log(fmt.Sprintf(format, args...)) } diff --git a/internal/testutil/testutil.go b/internal/testutil/testutil.go index 279258f27a..ea19c96382 100644 --- a/internal/testutil/testutil.go +++ b/internal/testutil/testutil.go @@ -11,7 +11,7 @@ import ( "gotest.tools/v3/assert" ) -func AssertPanics(tb testing.TB, fn func(), expected any, msgAndArgs ...any) { +func AssertPanics(tb testing.TB, fn func(), expected any, msgAndArgs ...interface{}) { tb.Helper() var got any diff --git a/internal/transformers/importelision_test.go b/internal/transformers/importelision_test.go index ecf49b1692..a6a80868af 100644 --- a/internal/transformers/importelision_test.go +++ b/internal/transformers/importelision_test.go @@ -13,13 +13,12 @@ import ( ) type fakeProgram struct { - singleThreaded bool - compilerOptions *core.CompilerOptions - files []*ast.SourceFile - getEmitModuleFormatOfFile func(sourceFile *ast.SourceFile) core.ModuleKind - getEmitSyntaxForUsageLocation func(sourceFile *ast.SourceFile, usage *ast.Expression) core.ResolutionMode - getImpliedNodeFormatForEmit func(sourceFile *ast.SourceFile) core.ModuleKind - getResolvedModule func(currentSourceFile *ast.SourceFile, moduleReference string) *ast.SourceFile + singleThreaded bool + compilerOptions *core.CompilerOptions + files []*ast.SourceFile + getEmitModuleFormatOfFile func(sourceFile *ast.SourceFile) core.ModuleKind + getImpliedNodeFormatForEmit func(sourceFile *ast.SourceFile) core.ModuleKind + getResolvedModule func(currentSourceFile *ast.SourceFile, moduleReference string) *ast.SourceFile } func (p *fakeProgram) Options() *core.CompilerOptions { @@ -46,10 +45,6 @@ func (p *fakeProgram) GetEmitModuleFormatOfFile(sourceFile *ast.SourceFile) core return p.getEmitModuleFormatOfFile(sourceFile) } -func (p *fakeProgram) GetEmitSyntaxForUsageLocation(sourceFile *ast.SourceFile, usage *ast.Expression) core.ResolutionMode { - return p.getEmitSyntaxForUsageLocation(sourceFile, usage) -} - func (p *fakeProgram) GetImpliedNodeFormatForEmit(sourceFile *ast.SourceFile) core.ModuleKind { return p.getImpliedNodeFormatForEmit(sourceFile) } @@ -113,9 +108,6 @@ func TestImportElision(t *testing.T) { getEmitModuleFormatOfFile: func(sourceFile *ast.SourceFile) core.ModuleKind { return core.ModuleKindESNext }, - getEmitSyntaxForUsageLocation: func(sourceFile *ast.SourceFile, usage *ast.Expression) core.ResolutionMode { - return core.ResolutionModeESM - }, getImpliedNodeFormatForEmit: func(sourceFile *ast.SourceFile) core.ModuleKind { return core.ModuleKindESNext }, diff --git a/internal/tsoptions/tsconfigparsing_test.go b/internal/tsoptions/tsconfigparsing_test.go index da38d48d99..7602369c1e 100644 --- a/internal/tsoptions/tsconfigparsing_test.go +++ b/internal/tsoptions/tsconfigparsing_test.go @@ -88,21 +88,25 @@ var parseConfigFileTextToJsonTests = []struct { }`, }, }, - { - title: "handles escaped characters in strings correctly", - input: []string{ - `{ - "exclude": [ - "xx\"//files" - ] - }`, - `{ - "exclude": [ - "xx\\" // end of line comment - ] - }`, - }, - }, + // { todo: fix this test + // title: "handles escaped characters in strings correctly", + // input: []string{ + // `{ + // "exclude": [ + // "xx\\"//files" + // ] + // }`, + // `{ + // "exclude": [ + // "xx\\\\" // end of line comment + // ] + // }`, + // }, + // output: []map[string]any{ + // {"exclude": []string{"xx\"//files"}}, + // {"exclude": []string{"xx\\"}}, + // }, + // }, { title: "returns object when users correctly specify library", input: []string{ diff --git a/internal/vfs/osvfs/os.go b/internal/vfs/osvfs/os.go index 2bfc61ef04..b10a3ded16 100644 --- a/internal/vfs/osvfs/os.go +++ b/internal/vfs/osvfs/os.go @@ -49,7 +49,7 @@ var isFileSystemCaseSensitive = func() bool { panic(fmt.Sprintf("vfs: failed to get executable path: %v", err)) } - // If the current executable exists under a different case, we must be case-insensitive. + // If the current executable exists under a different case, we must be case-insensitve. swapped := swapCase(exe) if _, err := os.Stat(swapped); err != nil { if os.IsNotExist(err) { diff --git a/testdata/baselines/reference/submodule/compiler/alwaysStrict.errors.txt b/testdata/baselines/reference/submodule/compiler/alwaysStrict.errors.txt deleted file mode 100644 index e4d2a12520..0000000000 --- a/testdata/baselines/reference/submodule/compiler/alwaysStrict.errors.txt +++ /dev/null @@ -1,9 +0,0 @@ -alwaysStrict.ts(2,9): error TS1100: Invalid use of 'arguments' in strict mode. - - -==== alwaysStrict.ts (1 errors) ==== - function f() { - var arguments = []; - ~~~~~~~~~ -!!! error TS1100: Invalid use of 'arguments' in strict mode. - } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/compiler/alwaysStrict.errors.txt.diff b/testdata/baselines/reference/submodule/compiler/alwaysStrict.errors.txt.diff new file mode 100644 index 0000000000..8073198e43 --- /dev/null +++ b/testdata/baselines/reference/submodule/compiler/alwaysStrict.errors.txt.diff @@ -0,0 +1,14 @@ +--- old.alwaysStrict.errors.txt ++++ new.alwaysStrict.errors.txt +@@= skipped -0, +-1 lines =@@ +-alwaysStrict.ts(2,9): error TS1100: Invalid use of 'arguments' in strict mode. +- +- +-==== alwaysStrict.ts (1 errors) ==== +- function f() { +- var arguments = []; +- ~~~~~~~~~ +-!!! error TS1100: Invalid use of 'arguments' in strict mode. +- } +@@= skipped --1, +1 lines =@@ ++ diff --git a/testdata/baselines/reference/submodule/compiler/alwaysStrictES6.errors.txt b/testdata/baselines/reference/submodule/compiler/alwaysStrictES6.errors.txt deleted file mode 100644 index 03b1c64beb..0000000000 --- a/testdata/baselines/reference/submodule/compiler/alwaysStrictES6.errors.txt +++ /dev/null @@ -1,9 +0,0 @@ -alwaysStrictES6.ts(2,9): error TS1100: Invalid use of 'arguments' in strict mode. - - -==== alwaysStrictES6.ts (1 errors) ==== - function f() { - var arguments = []; - ~~~~~~~~~ -!!! error TS1100: Invalid use of 'arguments' in strict mode. - } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/compiler/alwaysStrictES6.errors.txt.diff b/testdata/baselines/reference/submodule/compiler/alwaysStrictES6.errors.txt.diff new file mode 100644 index 0000000000..40515b979d --- /dev/null +++ b/testdata/baselines/reference/submodule/compiler/alwaysStrictES6.errors.txt.diff @@ -0,0 +1,14 @@ +--- old.alwaysStrictES6.errors.txt ++++ new.alwaysStrictES6.errors.txt +@@= skipped -0, +-1 lines =@@ +-alwaysStrictES6.ts(2,9): error TS1100: Invalid use of 'arguments' in strict mode. +- +- +-==== alwaysStrictES6.ts (1 errors) ==== +- function f() { +- var arguments = []; +- ~~~~~~~~~ +-!!! error TS1100: Invalid use of 'arguments' in strict mode. +- } +@@= skipped --1, +1 lines =@@ ++ diff --git a/testdata/baselines/reference/submodule/compiler/alwaysStrictModule.errors.txt b/testdata/baselines/reference/submodule/compiler/alwaysStrictModule.errors.txt deleted file mode 100644 index d3fa738698..0000000000 --- a/testdata/baselines/reference/submodule/compiler/alwaysStrictModule.errors.txt +++ /dev/null @@ -1,11 +0,0 @@ -alwaysStrictModule.ts(3,13): error TS1100: Invalid use of 'arguments' in strict mode. - - -==== alwaysStrictModule.ts (1 errors) ==== - module M { - export function f() { - var arguments = []; - ~~~~~~~~~ -!!! error TS1100: Invalid use of 'arguments' in strict mode. - } - } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/compiler/alwaysStrictModule.errors.txt.diff b/testdata/baselines/reference/submodule/compiler/alwaysStrictModule.errors.txt.diff new file mode 100644 index 0000000000..23721cf413 --- /dev/null +++ b/testdata/baselines/reference/submodule/compiler/alwaysStrictModule.errors.txt.diff @@ -0,0 +1,16 @@ +--- old.alwaysStrictModule.errors.txt ++++ new.alwaysStrictModule.errors.txt +@@= skipped -0, +-1 lines =@@ +-alwaysStrictModule.ts(3,13): error TS1100: Invalid use of 'arguments' in strict mode. +- +- +-==== alwaysStrictModule.ts (1 errors) ==== +- module M { +- export function f() { +- var arguments = []; +- ~~~~~~~~~ +-!!! error TS1100: Invalid use of 'arguments' in strict mode. +- } +- } +@@= skipped --1, +1 lines =@@ ++ diff --git a/testdata/baselines/reference/submodule/compiler/alwaysStrictModule2.errors.txt b/testdata/baselines/reference/submodule/compiler/alwaysStrictModule2.errors.txt deleted file mode 100644 index 54481a89df..0000000000 --- a/testdata/baselines/reference/submodule/compiler/alwaysStrictModule2.errors.txt +++ /dev/null @@ -1,21 +0,0 @@ -a.ts(3,13): error TS1100: Invalid use of 'arguments' in strict mode. -b.ts(3,13): error TS1100: Invalid use of 'arguments' in strict mode. - - -==== a.ts (1 errors) ==== - module M { - export function f() { - var arguments = []; - ~~~~~~~~~ -!!! error TS1100: Invalid use of 'arguments' in strict mode. - } - } - -==== b.ts (1 errors) ==== - module M { - export function f2() { - var arguments = []; - ~~~~~~~~~ -!!! error TS1100: Invalid use of 'arguments' in strict mode. - } - } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/compiler/alwaysStrictModule2.errors.txt.diff b/testdata/baselines/reference/submodule/compiler/alwaysStrictModule2.errors.txt.diff new file mode 100644 index 0000000000..0fde406983 --- /dev/null +++ b/testdata/baselines/reference/submodule/compiler/alwaysStrictModule2.errors.txt.diff @@ -0,0 +1,26 @@ +--- old.alwaysStrictModule2.errors.txt ++++ new.alwaysStrictModule2.errors.txt +@@= skipped -0, +-1 lines =@@ +-a.ts(3,13): error TS1100: Invalid use of 'arguments' in strict mode. +-b.ts(3,13): error TS1100: Invalid use of 'arguments' in strict mode. +- +- +-==== a.ts (1 errors) ==== +- module M { +- export function f() { +- var arguments = []; +- ~~~~~~~~~ +-!!! error TS1100: Invalid use of 'arguments' in strict mode. +- } +- } +- +-==== b.ts (1 errors) ==== +- module M { +- export function f2() { +- var arguments = []; +- ~~~~~~~~~ +-!!! error TS1100: Invalid use of 'arguments' in strict mode. +- } +- } +@@= skipped --1, +1 lines =@@ ++ diff --git a/testdata/baselines/reference/submodule/compiler/alwaysStrictNoImplicitUseStrict.errors.txt b/testdata/baselines/reference/submodule/compiler/alwaysStrictNoImplicitUseStrict.errors.txt deleted file mode 100644 index eb2cd86e4e..0000000000 --- a/testdata/baselines/reference/submodule/compiler/alwaysStrictNoImplicitUseStrict.errors.txt +++ /dev/null @@ -1,11 +0,0 @@ -alwaysStrictNoImplicitUseStrict.ts(3,13): error TS1100: Invalid use of 'arguments' in strict mode. - - -==== alwaysStrictNoImplicitUseStrict.ts (1 errors) ==== - module M { - export function f() { - var arguments = []; - ~~~~~~~~~ -!!! error TS1100: Invalid use of 'arguments' in strict mode. - } - } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/compiler/alwaysStrictNoImplicitUseStrict.errors.txt.diff b/testdata/baselines/reference/submodule/compiler/alwaysStrictNoImplicitUseStrict.errors.txt.diff index 9e8670bbcd..a02d61286b 100644 --- a/testdata/baselines/reference/submodule/compiler/alwaysStrictNoImplicitUseStrict.errors.txt.diff +++ b/testdata/baselines/reference/submodule/compiler/alwaysStrictNoImplicitUseStrict.errors.txt.diff @@ -1,11 +1,18 @@ --- old.alwaysStrictNoImplicitUseStrict.errors.txt +++ new.alwaysStrictNoImplicitUseStrict.errors.txt -@@= skipped -0, +0 lines =@@ +@@= skipped -0, +-1 lines =@@ -error TS5102: Option 'noImplicitUseStrict' has been removed. Please remove it from your configuration. - alwaysStrictNoImplicitUseStrict.ts(3,13): error TS1100: Invalid use of 'arguments' in strict mode. - - +-alwaysStrictNoImplicitUseStrict.ts(3,13): error TS1100: Invalid use of 'arguments' in strict mode. +- +- -!!! error TS5102: Option 'noImplicitUseStrict' has been removed. Please remove it from your configuration. - ==== alwaysStrictNoImplicitUseStrict.ts (1 errors) ==== - module M { - export function f() { +-==== alwaysStrictNoImplicitUseStrict.ts (1 errors) ==== +- module M { +- export function f() { +- var arguments = []; +- ~~~~~~~~~ +-!!! error TS1100: Invalid use of 'arguments' in strict mode. +- } +- } +@@= skipped --1, +1 lines =@@ ++ diff --git a/testdata/baselines/reference/submodule/compiler/dynamicImportsDeclaration.types b/testdata/baselines/reference/submodule/compiler/dynamicImportsDeclaration.types index c1ba031243..45277435ad 100644 --- a/testdata/baselines/reference/submodule/compiler/dynamicImportsDeclaration.types +++ b/testdata/baselines/reference/submodule/compiler/dynamicImportsDeclaration.types @@ -14,11 +14,11 @@ export default 'fallback'; === /index.ts === export const mod = await (async () => { ->mod : { default: typeof import("/case0"); } | { default: typeof import("/case1"); } | { default: typeof import("/caseFallback"); } ->await (async () => { const x: number = 0; switch (x) { case 0: return await import("./case0.js"); case 1: return await import("./case1.js"); default: return await import("./caseFallback.js"); }})() : { default: typeof import("/case0"); } | { default: typeof import("/case1"); } | { default: typeof import("/caseFallback"); } ->(async () => { const x: number = 0; switch (x) { case 0: return await import("./case0.js"); case 1: return await import("./case1.js"); default: return await import("./caseFallback.js"); }})() : Promise<{ default: typeof import("/case0"); } | { default: typeof import("/case1"); } | { default: typeof import("/caseFallback"); }> ->(async () => { const x: number = 0; switch (x) { case 0: return await import("./case0.js"); case 1: return await import("./case1.js"); default: return await import("./caseFallback.js"); }}) : () => Promise<{ default: typeof import("/case0"); } | { default: typeof import("/case1"); } | { default: typeof import("/caseFallback"); }> ->async () => { const x: number = 0; switch (x) { case 0: return await import("./case0.js"); case 1: return await import("./case1.js"); default: return await import("./caseFallback.js"); }} : () => Promise<{ default: typeof import("/case0"); } | { default: typeof import("/case1"); } | { default: typeof import("/caseFallback"); }> +>mod : typeof import("/case0") | typeof import("/case1") | typeof import("/caseFallback") +>await (async () => { const x: number = 0; switch (x) { case 0: return await import("./case0.js"); case 1: return await import("./case1.js"); default: return await import("./caseFallback.js"); }})() : typeof import("/case0") | typeof import("/case1") | typeof import("/caseFallback") +>(async () => { const x: number = 0; switch (x) { case 0: return await import("./case0.js"); case 1: return await import("./case1.js"); default: return await import("./caseFallback.js"); }})() : Promise +>(async () => { const x: number = 0; switch (x) { case 0: return await import("./case0.js"); case 1: return await import("./case1.js"); default: return await import("./caseFallback.js"); }}) : () => Promise +>async () => { const x: number = 0; switch (x) { case 0: return await import("./case0.js"); case 1: return await import("./case1.js"); default: return await import("./caseFallback.js"); }} : () => Promise const x: number = 0; >x : number @@ -31,22 +31,22 @@ export const mod = await (async () => { >0 : 0 return await import("./case0.js"); ->await import("./case0.js") : { default: typeof import("/case0"); } ->import("./case0.js") : Promise<{ default: typeof import("/case0"); }> +>await import("./case0.js") : typeof import("/case0") +>import("./case0.js") : Promise >"./case0.js" : "./case0.js" case 1: >1 : 1 return await import("./case1.js"); ->await import("./case1.js") : { default: typeof import("/case1"); } ->import("./case1.js") : Promise<{ default: typeof import("/case1"); }> +>await import("./case1.js") : typeof import("/case1") +>import("./case1.js") : Promise >"./case1.js" : "./case1.js" default: return await import("./caseFallback.js"); ->await import("./caseFallback.js") : { default: typeof import("/caseFallback"); } ->import("./caseFallback.js") : Promise<{ default: typeof import("/caseFallback"); }> +>await import("./caseFallback.js") : typeof import("/caseFallback") +>import("./caseFallback.js") : Promise >"./caseFallback.js" : "./caseFallback.js" } })(); diff --git a/testdata/baselines/reference/submodule/compiler/dynamicImportsDeclaration.types.diff b/testdata/baselines/reference/submodule/compiler/dynamicImportsDeclaration.types.diff new file mode 100644 index 0000000000..93c9b2e233 --- /dev/null +++ b/testdata/baselines/reference/submodule/compiler/dynamicImportsDeclaration.types.diff @@ -0,0 +1,48 @@ +--- old.dynamicImportsDeclaration.types ++++ new.dynamicImportsDeclaration.types +@@= skipped -13, +13 lines =@@ + + === /index.ts === + export const mod = await (async () => { +->mod : { default: typeof import("/case0"); } | { default: typeof import("/case1"); } | { default: typeof import("/caseFallback"); } +->await (async () => { const x: number = 0; switch (x) { case 0: return await import("./case0.js"); case 1: return await import("./case1.js"); default: return await import("./caseFallback.js"); }})() : { default: typeof import("/case0"); } | { default: typeof import("/case1"); } | { default: typeof import("/caseFallback"); } +->(async () => { const x: number = 0; switch (x) { case 0: return await import("./case0.js"); case 1: return await import("./case1.js"); default: return await import("./caseFallback.js"); }})() : Promise<{ default: typeof import("/case0"); } | { default: typeof import("/case1"); } | { default: typeof import("/caseFallback"); }> +->(async () => { const x: number = 0; switch (x) { case 0: return await import("./case0.js"); case 1: return await import("./case1.js"); default: return await import("./caseFallback.js"); }}) : () => Promise<{ default: typeof import("/case0"); } | { default: typeof import("/case1"); } | { default: typeof import("/caseFallback"); }> +->async () => { const x: number = 0; switch (x) { case 0: return await import("./case0.js"); case 1: return await import("./case1.js"); default: return await import("./caseFallback.js"); }} : () => Promise<{ default: typeof import("/case0"); } | { default: typeof import("/case1"); } | { default: typeof import("/caseFallback"); }> ++>mod : typeof import("/case0") | typeof import("/case1") | typeof import("/caseFallback") ++>await (async () => { const x: number = 0; switch (x) { case 0: return await import("./case0.js"); case 1: return await import("./case1.js"); default: return await import("./caseFallback.js"); }})() : typeof import("/case0") | typeof import("/case1") | typeof import("/caseFallback") ++>(async () => { const x: number = 0; switch (x) { case 0: return await import("./case0.js"); case 1: return await import("./case1.js"); default: return await import("./caseFallback.js"); }})() : Promise ++>(async () => { const x: number = 0; switch (x) { case 0: return await import("./case0.js"); case 1: return await import("./case1.js"); default: return await import("./caseFallback.js"); }}) : () => Promise ++>async () => { const x: number = 0; switch (x) { case 0: return await import("./case0.js"); case 1: return await import("./case1.js"); default: return await import("./caseFallback.js"); }} : () => Promise + + const x: number = 0; + >x : number +@@= skipped -17, +17 lines =@@ + >0 : 0 + + return await import("./case0.js"); +->await import("./case0.js") : { default: typeof import("/case0"); } +->import("./case0.js") : Promise<{ default: typeof import("/case0"); }> ++>await import("./case0.js") : typeof import("/case0") ++>import("./case0.js") : Promise + >"./case0.js" : "./case0.js" + + case 1: + >1 : 1 + + return await import("./case1.js"); +->await import("./case1.js") : { default: typeof import("/case1"); } +->import("./case1.js") : Promise<{ default: typeof import("/case1"); }> ++>await import("./case1.js") : typeof import("/case1") ++>import("./case1.js") : Promise + >"./case1.js" : "./case1.js" + + default: + return await import("./caseFallback.js"); +->await import("./caseFallback.js") : { default: typeof import("/caseFallback"); } +->import("./caseFallback.js") : Promise<{ default: typeof import("/caseFallback"); }> ++>await import("./caseFallback.js") : typeof import("/caseFallback") ++>import("./caseFallback.js") : Promise + >"./caseFallback.js" : "./caseFallback.js" + } + })(); diff --git a/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=esnext).errors.txt b/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=esnext).errors.txt deleted file mode 100644 index 243d584233..0000000000 --- a/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=esnext).errors.txt +++ /dev/null @@ -1,20 +0,0 @@ -/index.ts(7,8): error TS2339: Property 'default' does not exist on type 'typeof import("/node_modules/mdast-util-to-string/index")'. - - -==== /node_modules/mdast-util-to-string/package.json (0 errors) ==== - { "type": "module" } - -==== /node_modules/mdast-util-to-string/index.d.ts (0 errors) ==== - export function toString(): string; - -==== /index.ts (1 errors) ==== - import mdast, { toString } from 'mdast-util-to-string'; - mdast; - mdast.toString(); - - const mdast2 = await import('mdast-util-to-string'); - mdast2.toString(); - mdast2.default; - ~~~~~~~ -!!! error TS2339: Property 'default' does not exist on type 'typeof import("/node_modules/mdast-util-to-string/index")'. - \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=esnext).errors.txt.diff b/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=esnext).errors.txt.diff index b2a75ee920..597c1fbc0d 100644 --- a/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=esnext).errors.txt.diff +++ b/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=esnext).errors.txt.diff @@ -1,19 +1,28 @@ --- old.esmNoSynthesizedDefault(module=esnext).errors.txt +++ new.esmNoSynthesizedDefault(module=esnext).errors.txt -@@= skipped -0, +0 lines =@@ +@@= skipped -0, +-1 lines =@@ -/index.ts(1,8): error TS1192: Module '"/node_modules/mdast-util-to-string/index"' has no default export. - /index.ts(7,8): error TS2339: Property 'default' does not exist on type 'typeof import("/node_modules/mdast-util-to-string/index")'. - - -@@= skipped -7, +6 lines =@@ - ==== /node_modules/mdast-util-to-string/index.d.ts (0 errors) ==== - export function toString(): string; - +-/index.ts(7,8): error TS2339: Property 'default' does not exist on type 'typeof import("/node_modules/mdast-util-to-string/index")'. +- +- +-==== /node_modules/mdast-util-to-string/package.json (0 errors) ==== +- { "type": "module" } +- +-==== /node_modules/mdast-util-to-string/index.d.ts (0 errors) ==== +- export function toString(): string; +- -==== /index.ts (2 errors) ==== -+==== /index.ts (1 errors) ==== - import mdast, { toString } from 'mdast-util-to-string'; +- import mdast, { toString } from 'mdast-util-to-string'; - ~~~~~ -!!! error TS1192: Module '"/node_modules/mdast-util-to-string/index"' has no default export. - mdast; - mdast.toString(); - +- mdast; +- mdast.toString(); +- +- const mdast2 = await import('mdast-util-to-string'); +- mdast2.toString(); +- mdast2.default; +- ~~~~~~~ +-!!! error TS2339: Property 'default' does not exist on type 'typeof import("/node_modules/mdast-util-to-string/index")'. +- +@@= skipped --1, +1 lines =@@ ++ diff --git a/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=esnext).symbols b/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=esnext).symbols index 240b767551..7a96977509 100644 --- a/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=esnext).symbols +++ b/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=esnext).symbols @@ -13,7 +13,9 @@ mdast; >mdast : Symbol(mdast, Decl(index.ts, 0, 6)) mdast.toString(); +>mdast.toString : Symbol(toString, Decl(index.d.ts, 0, 0)) >mdast : Symbol(mdast, Decl(index.ts, 0, 6)) +>toString : Symbol(toString, Decl(index.d.ts, 0, 0)) const mdast2 = await import('mdast-util-to-string'); >mdast2 : Symbol(mdast2, Decl(index.ts, 4, 5)) @@ -24,5 +26,7 @@ mdast2.toString(); >toString : Symbol(toString, Decl(index.d.ts, 0, 0)) mdast2.default; +>mdast2.default : Symbol(default) >mdast2 : Symbol(mdast2, Decl(index.ts, 4, 5)) +>default : Symbol(default) diff --git a/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=esnext).symbols.diff b/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=esnext).symbols.diff index bc72e2559a..9c53ca38b5 100644 --- a/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=esnext).symbols.diff +++ b/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=esnext).symbols.diff @@ -1,6 +1,12 @@ --- old.esmNoSynthesizedDefault(module=esnext).symbols +++ new.esmNoSynthesizedDefault(module=esnext).symbols -@@= skipped -16, +16 lines =@@ +@@= skipped -12, +12 lines =@@ + >mdast : Symbol(mdast, Decl(index.ts, 0, 6)) + + mdast.toString(); ++>mdast.toString : Symbol(toString, Decl(index.d.ts, 0, 0)) + >mdast : Symbol(mdast, Decl(index.ts, 0, 6)) ++>toString : Symbol(toString, Decl(index.d.ts, 0, 0)) const mdast2 = await import('mdast-util-to-string'); >mdast2 : Symbol(mdast2, Decl(index.ts, 4, 5)) @@ -8,3 +14,11 @@ mdast2.toString(); >mdast2.toString : Symbol(toString, Decl(index.d.ts, 0, 0)) +@@= skipped -12, +13 lines =@@ + >toString : Symbol(toString, Decl(index.d.ts, 0, 0)) + + mdast2.default; ++>mdast2.default : Symbol(default) + >mdast2 : Symbol(mdast2, Decl(index.ts, 4, 5)) ++>default : Symbol(default) + diff --git a/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=esnext).types b/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=esnext).types index 804af336dc..50ada7a0d3 100644 --- a/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=esnext).types +++ b/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=esnext).types @@ -6,32 +6,32 @@ export function toString(): string; === /index.ts === import mdast, { toString } from 'mdast-util-to-string'; ->mdast : any +>mdast : typeof import("/node_modules/mdast-util-to-string/index") >toString : () => string mdast; ->mdast : any +>mdast : typeof import("/node_modules/mdast-util-to-string/index") mdast.toString(); ->mdast.toString() : any ->mdast.toString : any ->mdast : any ->toString : any +>mdast.toString() : string +>mdast.toString : () => string +>mdast : typeof import("/node_modules/mdast-util-to-string/index") +>toString : () => string const mdast2 = await import('mdast-util-to-string'); ->mdast2 : typeof import("/node_modules/mdast-util-to-string/index") ->await import('mdast-util-to-string') : typeof import("/node_modules/mdast-util-to-string/index") ->import('mdast-util-to-string') : Promise +>mdast2 : { toString: () => string; default: typeof import("/node_modules/mdast-util-to-string/index"); } +>await import('mdast-util-to-string') : { toString: () => string; default: typeof import("/node_modules/mdast-util-to-string/index"); } +>import('mdast-util-to-string') : Promise<{ toString: () => string; default: typeof import("/node_modules/mdast-util-to-string/index"); }> >'mdast-util-to-string' : "mdast-util-to-string" mdast2.toString(); >mdast2.toString() : string >mdast2.toString : () => string ->mdast2 : typeof import("/node_modules/mdast-util-to-string/index") +>mdast2 : { toString: () => string; default: typeof import("/node_modules/mdast-util-to-string/index"); } >toString : () => string mdast2.default; ->mdast2.default : any ->mdast2 : typeof import("/node_modules/mdast-util-to-string/index") ->default : any +>mdast2.default : typeof import("/node_modules/mdast-util-to-string/index") +>mdast2 : { toString: () => string; default: typeof import("/node_modules/mdast-util-to-string/index"); } +>default : typeof import("/node_modules/mdast-util-to-string/index") diff --git a/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=esnext).types.diff b/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=esnext).types.diff new file mode 100644 index 0000000000..b3305c6b1d --- /dev/null +++ b/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=esnext).types.diff @@ -0,0 +1,48 @@ +--- old.esmNoSynthesizedDefault(module=esnext).types ++++ new.esmNoSynthesizedDefault(module=esnext).types +@@= skipped -5, +5 lines =@@ + + === /index.ts === + import mdast, { toString } from 'mdast-util-to-string'; +->mdast : any ++>mdast : typeof import("/node_modules/mdast-util-to-string/index") + >toString : () => string + + mdast; +->mdast : any ++>mdast : typeof import("/node_modules/mdast-util-to-string/index") + + mdast.toString(); +->mdast.toString() : any +->mdast.toString : any +->mdast : any +->toString : any ++>mdast.toString() : string ++>mdast.toString : () => string ++>mdast : typeof import("/node_modules/mdast-util-to-string/index") ++>toString : () => string + + const mdast2 = await import('mdast-util-to-string'); +->mdast2 : typeof import("/node_modules/mdast-util-to-string/index") +->await import('mdast-util-to-string') : typeof import("/node_modules/mdast-util-to-string/index") +->import('mdast-util-to-string') : Promise ++>mdast2 : { toString: () => string; default: typeof import("/node_modules/mdast-util-to-string/index"); } ++>await import('mdast-util-to-string') : { toString: () => string; default: typeof import("/node_modules/mdast-util-to-string/index"); } ++>import('mdast-util-to-string') : Promise<{ toString: () => string; default: typeof import("/node_modules/mdast-util-to-string/index"); }> + >'mdast-util-to-string' : "mdast-util-to-string" + + mdast2.toString(); + >mdast2.toString() : string + >mdast2.toString : () => string +->mdast2 : typeof import("/node_modules/mdast-util-to-string/index") ++>mdast2 : { toString: () => string; default: typeof import("/node_modules/mdast-util-to-string/index"); } + >toString : () => string + + mdast2.default; +->mdast2.default : any +->mdast2 : typeof import("/node_modules/mdast-util-to-string/index") +->default : any ++>mdast2.default : typeof import("/node_modules/mdast-util-to-string/index") ++>mdast2 : { toString: () => string; default: typeof import("/node_modules/mdast-util-to-string/index"); } ++>default : typeof import("/node_modules/mdast-util-to-string/index") + diff --git a/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=preserve).errors.txt b/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=preserve).errors.txt deleted file mode 100644 index 243d584233..0000000000 --- a/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=preserve).errors.txt +++ /dev/null @@ -1,20 +0,0 @@ -/index.ts(7,8): error TS2339: Property 'default' does not exist on type 'typeof import("/node_modules/mdast-util-to-string/index")'. - - -==== /node_modules/mdast-util-to-string/package.json (0 errors) ==== - { "type": "module" } - -==== /node_modules/mdast-util-to-string/index.d.ts (0 errors) ==== - export function toString(): string; - -==== /index.ts (1 errors) ==== - import mdast, { toString } from 'mdast-util-to-string'; - mdast; - mdast.toString(); - - const mdast2 = await import('mdast-util-to-string'); - mdast2.toString(); - mdast2.default; - ~~~~~~~ -!!! error TS2339: Property 'default' does not exist on type 'typeof import("/node_modules/mdast-util-to-string/index")'. - \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=preserve).errors.txt.diff b/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=preserve).errors.txt.diff index 67d9d6ad09..6489822525 100644 --- a/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=preserve).errors.txt.diff +++ b/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=preserve).errors.txt.diff @@ -1,19 +1,28 @@ --- old.esmNoSynthesizedDefault(module=preserve).errors.txt +++ new.esmNoSynthesizedDefault(module=preserve).errors.txt -@@= skipped -0, +0 lines =@@ +@@= skipped -0, +-1 lines =@@ -/index.ts(1,8): error TS1192: Module '"/node_modules/mdast-util-to-string/index"' has no default export. - /index.ts(7,8): error TS2339: Property 'default' does not exist on type 'typeof import("/node_modules/mdast-util-to-string/index")'. - - -@@= skipped -7, +6 lines =@@ - ==== /node_modules/mdast-util-to-string/index.d.ts (0 errors) ==== - export function toString(): string; - +-/index.ts(7,8): error TS2339: Property 'default' does not exist on type 'typeof import("/node_modules/mdast-util-to-string/index")'. +- +- +-==== /node_modules/mdast-util-to-string/package.json (0 errors) ==== +- { "type": "module" } +- +-==== /node_modules/mdast-util-to-string/index.d.ts (0 errors) ==== +- export function toString(): string; +- -==== /index.ts (2 errors) ==== -+==== /index.ts (1 errors) ==== - import mdast, { toString } from 'mdast-util-to-string'; +- import mdast, { toString } from 'mdast-util-to-string'; - ~~~~~ -!!! error TS1192: Module '"/node_modules/mdast-util-to-string/index"' has no default export. - mdast; - mdast.toString(); - +- mdast; +- mdast.toString(); +- +- const mdast2 = await import('mdast-util-to-string'); +- mdast2.toString(); +- mdast2.default; +- ~~~~~~~ +-!!! error TS2339: Property 'default' does not exist on type 'typeof import("/node_modules/mdast-util-to-string/index")'. +- +@@= skipped --1, +1 lines =@@ ++ diff --git a/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=preserve).symbols b/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=preserve).symbols index 240b767551..7a96977509 100644 --- a/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=preserve).symbols +++ b/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=preserve).symbols @@ -13,7 +13,9 @@ mdast; >mdast : Symbol(mdast, Decl(index.ts, 0, 6)) mdast.toString(); +>mdast.toString : Symbol(toString, Decl(index.d.ts, 0, 0)) >mdast : Symbol(mdast, Decl(index.ts, 0, 6)) +>toString : Symbol(toString, Decl(index.d.ts, 0, 0)) const mdast2 = await import('mdast-util-to-string'); >mdast2 : Symbol(mdast2, Decl(index.ts, 4, 5)) @@ -24,5 +26,7 @@ mdast2.toString(); >toString : Symbol(toString, Decl(index.d.ts, 0, 0)) mdast2.default; +>mdast2.default : Symbol(default) >mdast2 : Symbol(mdast2, Decl(index.ts, 4, 5)) +>default : Symbol(default) diff --git a/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=preserve).symbols.diff b/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=preserve).symbols.diff index fd54b643c2..2e11f50934 100644 --- a/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=preserve).symbols.diff +++ b/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=preserve).symbols.diff @@ -1,6 +1,12 @@ --- old.esmNoSynthesizedDefault(module=preserve).symbols +++ new.esmNoSynthesizedDefault(module=preserve).symbols -@@= skipped -16, +16 lines =@@ +@@= skipped -12, +12 lines =@@ + >mdast : Symbol(mdast, Decl(index.ts, 0, 6)) + + mdast.toString(); ++>mdast.toString : Symbol(toString, Decl(index.d.ts, 0, 0)) + >mdast : Symbol(mdast, Decl(index.ts, 0, 6)) ++>toString : Symbol(toString, Decl(index.d.ts, 0, 0)) const mdast2 = await import('mdast-util-to-string'); >mdast2 : Symbol(mdast2, Decl(index.ts, 4, 5)) @@ -8,3 +14,11 @@ mdast2.toString(); >mdast2.toString : Symbol(toString, Decl(index.d.ts, 0, 0)) +@@= skipped -12, +13 lines =@@ + >toString : Symbol(toString, Decl(index.d.ts, 0, 0)) + + mdast2.default; ++>mdast2.default : Symbol(default) + >mdast2 : Symbol(mdast2, Decl(index.ts, 4, 5)) ++>default : Symbol(default) + diff --git a/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=preserve).types b/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=preserve).types index 804af336dc..50ada7a0d3 100644 --- a/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=preserve).types +++ b/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=preserve).types @@ -6,32 +6,32 @@ export function toString(): string; === /index.ts === import mdast, { toString } from 'mdast-util-to-string'; ->mdast : any +>mdast : typeof import("/node_modules/mdast-util-to-string/index") >toString : () => string mdast; ->mdast : any +>mdast : typeof import("/node_modules/mdast-util-to-string/index") mdast.toString(); ->mdast.toString() : any ->mdast.toString : any ->mdast : any ->toString : any +>mdast.toString() : string +>mdast.toString : () => string +>mdast : typeof import("/node_modules/mdast-util-to-string/index") +>toString : () => string const mdast2 = await import('mdast-util-to-string'); ->mdast2 : typeof import("/node_modules/mdast-util-to-string/index") ->await import('mdast-util-to-string') : typeof import("/node_modules/mdast-util-to-string/index") ->import('mdast-util-to-string') : Promise +>mdast2 : { toString: () => string; default: typeof import("/node_modules/mdast-util-to-string/index"); } +>await import('mdast-util-to-string') : { toString: () => string; default: typeof import("/node_modules/mdast-util-to-string/index"); } +>import('mdast-util-to-string') : Promise<{ toString: () => string; default: typeof import("/node_modules/mdast-util-to-string/index"); }> >'mdast-util-to-string' : "mdast-util-to-string" mdast2.toString(); >mdast2.toString() : string >mdast2.toString : () => string ->mdast2 : typeof import("/node_modules/mdast-util-to-string/index") +>mdast2 : { toString: () => string; default: typeof import("/node_modules/mdast-util-to-string/index"); } >toString : () => string mdast2.default; ->mdast2.default : any ->mdast2 : typeof import("/node_modules/mdast-util-to-string/index") ->default : any +>mdast2.default : typeof import("/node_modules/mdast-util-to-string/index") +>mdast2 : { toString: () => string; default: typeof import("/node_modules/mdast-util-to-string/index"); } +>default : typeof import("/node_modules/mdast-util-to-string/index") diff --git a/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=preserve).types.diff b/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=preserve).types.diff new file mode 100644 index 0000000000..0ab0ec0cac --- /dev/null +++ b/testdata/baselines/reference/submodule/compiler/esmNoSynthesizedDefault(module=preserve).types.diff @@ -0,0 +1,48 @@ +--- old.esmNoSynthesizedDefault(module=preserve).types ++++ new.esmNoSynthesizedDefault(module=preserve).types +@@= skipped -5, +5 lines =@@ + + === /index.ts === + import mdast, { toString } from 'mdast-util-to-string'; +->mdast : any ++>mdast : typeof import("/node_modules/mdast-util-to-string/index") + >toString : () => string + + mdast; +->mdast : any ++>mdast : typeof import("/node_modules/mdast-util-to-string/index") + + mdast.toString(); +->mdast.toString() : any +->mdast.toString : any +->mdast : any +->toString : any ++>mdast.toString() : string ++>mdast.toString : () => string ++>mdast : typeof import("/node_modules/mdast-util-to-string/index") ++>toString : () => string + + const mdast2 = await import('mdast-util-to-string'); +->mdast2 : typeof import("/node_modules/mdast-util-to-string/index") +->await import('mdast-util-to-string') : typeof import("/node_modules/mdast-util-to-string/index") +->import('mdast-util-to-string') : Promise ++>mdast2 : { toString: () => string; default: typeof import("/node_modules/mdast-util-to-string/index"); } ++>await import('mdast-util-to-string') : { toString: () => string; default: typeof import("/node_modules/mdast-util-to-string/index"); } ++>import('mdast-util-to-string') : Promise<{ toString: () => string; default: typeof import("/node_modules/mdast-util-to-string/index"); }> + >'mdast-util-to-string' : "mdast-util-to-string" + + mdast2.toString(); + >mdast2.toString() : string + >mdast2.toString : () => string +->mdast2 : typeof import("/node_modules/mdast-util-to-string/index") ++>mdast2 : { toString: () => string; default: typeof import("/node_modules/mdast-util-to-string/index"); } + >toString : () => string + + mdast2.default; +->mdast2.default : any +->mdast2 : typeof import("/node_modules/mdast-util-to-string/index") +->default : any ++>mdast2.default : typeof import("/node_modules/mdast-util-to-string/index") ++>mdast2 : { toString: () => string; default: typeof import("/node_modules/mdast-util-to-string/index"); } ++>default : typeof import("/node_modules/mdast-util-to-string/index") + diff --git a/testdata/baselines/reference/submodule/compiler/modulePreserve4.errors.txt b/testdata/baselines/reference/submodule/compiler/modulePreserve4.errors.txt index 278f546051..b458497d9a 100644 --- a/testdata/baselines/reference/submodule/compiler/modulePreserve4.errors.txt +++ b/testdata/baselines/reference/submodule/compiler/modulePreserve4.errors.txt @@ -1,5 +1,4 @@ /a.js(2,1): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. -/f.cts(1,1): error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. /g.js(1,1): error TS2304: Cannot find name 'exports'. /main1.ts(1,13): error TS2305: Module '"/a"' has no exported member 'y'. /main1.ts(3,12): error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. @@ -11,18 +10,12 @@ /main2.mts(5,12): error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. /main2.mts(19,16): error TS2306: File '/g.js' is not a module. /main2.mts(20,21): error TS2306: File '/g.js' is not a module. -/main3.cjs(1,10): error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. /main3.cjs(1,13): error TS2305: Module '"/a"' has no exported member 'y'. /main3.cjs(3,12): error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. -/main3.cjs(5,8): error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. /main3.cjs(6,12): error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. -/main3.cjs(8,8): error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. /main3.cjs(9,12): error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. -/main3.cjs(10,8): error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. /main3.cjs(11,12): error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. -/main3.cjs(12,8): error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. /main3.cjs(13,12): error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. -/main3.cjs(14,8): error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. /main3.cjs(15,12): error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. /main3.cjs(17,16): error TS2306: File '/g.js' is not a module. /main3.cjs(18,12): error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. @@ -50,10 +43,8 @@ ==== /e.mts (0 errors) ==== export = 0; -==== /f.cts (1 errors) ==== +==== /f.cts (0 errors) ==== export default 0; - ~~~~~~~~~~~~~~~~~ -!!! error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. ==== /g.js (1 errors) ==== exports.default = 0; @@ -136,10 +127,8 @@ ~~~~~ !!! error TS2306: File '/g.js' is not a module. -==== /main3.cjs (15 errors) ==== +==== /main3.cjs (9 errors) ==== import { x, y } from "./a"; // No y - ~ -!!! error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. ~ !!! error TS2305: Module '"/a"' has no exported member 'y'. import a1 = require("./a"); // Error in JS @@ -148,33 +137,23 @@ !!! error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. import b1 from "./b"; // 0 - ~~ -!!! error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. const b2 = require("./b"); // { default: 0 } ~~~~~~~ !!! error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. import c1 from "./c"; // { default: [Function: default] } - ~~ -!!! error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. const c2 = require("./c"); // { default: [Function: default] } ~~~~~~~ !!! error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. import d1 from "./d"; // [Function: default] - ~~ -!!! error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. const d2 = require("./d"); // [Function: default] ~~~~~~~ !!! error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. import e1 from "./e.mjs"; // 0 - ~~ -!!! error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. const e2 = require("./e.mjs"); // 0 ~~~~~~~ !!! error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. import f1 from "./f.cjs"; // 0 - ~~ -!!! error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. const f2 = require("./f.cjs"); // { default: 0 } ~~~~~~~ !!! error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. diff --git a/testdata/baselines/reference/submodule/compiler/modulePreserve4.errors.txt.diff b/testdata/baselines/reference/submodule/compiler/modulePreserve4.errors.txt.diff index b474fc781d..3c77f6459f 100644 --- a/testdata/baselines/reference/submodule/compiler/modulePreserve4.errors.txt.diff +++ b/testdata/baselines/reference/submodule/compiler/modulePreserve4.errors.txt.diff @@ -2,7 +2,7 @@ +++ new.modulePreserve4.errors.txt @@= skipped -0, +0 lines =@@ /a.js(2,1): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. - /f.cts(1,1): error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. +-/f.cts(1,1): error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. -/main1.ts(1,13): error TS2305: Module '"./a"' has no exported member 'y'. +/g.js(1,1): error TS2304: Cannot find name 'exports'. +/main1.ts(1,13): error TS2305: Module '"/a"' has no exported member 'y'. @@ -27,18 +27,12 @@ -/main3.cjs(17,8): error TS1293: ESM syntax is not allowed in a CommonJS module when 'module' is set to 'preserve'. +/main2.mts(19,16): error TS2306: File '/g.js' is not a module. +/main2.mts(20,21): error TS2306: File '/g.js' is not a module. -+/main3.cjs(1,10): error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. +/main3.cjs(1,13): error TS2305: Module '"/a"' has no exported member 'y'. +/main3.cjs(3,12): error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. -+/main3.cjs(5,8): error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. +/main3.cjs(6,12): error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. -+/main3.cjs(8,8): error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. +/main3.cjs(9,12): error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. -+/main3.cjs(10,8): error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. +/main3.cjs(11,12): error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. -+/main3.cjs(12,8): error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. +/main3.cjs(13,12): error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. -+/main3.cjs(14,8): error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. +/main3.cjs(15,12): error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. +/main3.cjs(17,16): error TS2306: File '/g.js' is not a module. +/main3.cjs(18,12): error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. @@ -47,9 +41,15 @@ ==== /a.js (1 errors) ==== -@@= skipped -43, +54 lines =@@ - ~~~~~~~~~~~~~~~~~ - !!! error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. +@@= skipped -38, +42 lines =@@ + ==== /e.mts (0 errors) ==== + export = 0; + +-==== /f.cts (1 errors) ==== ++==== /f.cts (0 errors) ==== + export default 0; +- ~~~~~~~~~~~~~~~~~ +-!!! error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. -==== /g.js (0 errors) ==== +==== /g.js (1 errors) ==== @@ -66,7 +66,7 @@ import a1 = require("./a"); // { x: 0 } const a2 = require("./a"); // Error in TS ~~~~~~~ -@@= skipped -33, +35 lines =@@ +@@= skipped -38, +38 lines =@@ d3.default(); import e1 from "./e.mjs"; // 0 @@ -112,12 +112,10 @@ + ~~~~~ +!!! error TS2306: File '/g.js' is not a module. --==== /main3.cjs (9 errors) ==== -+==== /main3.cjs (15 errors) ==== + ==== /main3.cjs (9 errors) ==== import { x, y } from "./a"; // No y - ~ +- ~ -!!! error TS1293: ESM syntax is not allowed in a CommonJS module when 'module' is set to 'preserve'. -+!!! error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. ~ -!!! error TS2305: Module '"./a"' has no exported member 'y'. +!!! error TS2305: Module '"/a"' has no exported member 'y'. @@ -129,38 +127,33 @@ +!!! error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. import b1 from "./b"; // 0 - ~~ +- ~~ -!!! error TS1293: ESM syntax is not allowed in a CommonJS module when 'module' is set to 'preserve'. -+!!! error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. const b2 = require("./b"); // { default: 0 } + ~~~~~~~ +!!! error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. import c1 from "./c"; // { default: [Function: default] } - ~~ +- ~~ -!!! error TS1293: ESM syntax is not allowed in a CommonJS module when 'module' is set to 'preserve'. -+!!! error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. const c2 = require("./c"); // { default: [Function: default] } + ~~~~~~~ +!!! error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. import d1 from "./d"; // [Function: default] - ~~ +- ~~ -!!! error TS1293: ESM syntax is not allowed in a CommonJS module when 'module' is set to 'preserve'. -+!!! error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. const d2 = require("./d"); // [Function: default] + ~~~~~~~ +!!! error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. import e1 from "./e.mjs"; // 0 - ~~ +- ~~ -!!! error TS1293: ESM syntax is not allowed in a CommonJS module when 'module' is set to 'preserve'. -+!!! error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. const e2 = require("./e.mjs"); // 0 + ~~~~~~~ +!!! error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. import f1 from "./f.cjs"; // 0 - ~~ +- ~~ -!!! error TS1293: ESM syntax is not allowed in a CommonJS module when 'module' is set to 'preserve'. -+!!! error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. const f2 = require("./f.cjs"); // { default: 0 } + ~~~~~~~ +!!! error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. diff --git a/testdata/baselines/reference/submodule/compiler/modulePreserve4.types b/testdata/baselines/reference/submodule/compiler/modulePreserve4.types index 7ac808077c..9d260f3529 100644 --- a/testdata/baselines/reference/submodule/compiler/modulePreserve4.types +++ b/testdata/baselines/reference/submodule/compiler/modulePreserve4.types @@ -135,7 +135,7 @@ d3.default(); >default : () => void import e1 from "./e.mjs"; // 0 ->e1 : any +>e1 : 0 import e2 = require("./e.mjs"); // 0 >e2 : 0 @@ -212,7 +212,7 @@ import d2 = require("./d"); // [Function: default] >d2 : () => void import e1 from "./e.mjs"; // 0 ->e1 : any +>e1 : 0 import e2 = require("./e.mjs"); // 0 >e2 : 0 diff --git a/testdata/baselines/reference/submodule/compiler/modulePreserve4.types.diff b/testdata/baselines/reference/submodule/compiler/modulePreserve4.types.diff index 4889c52ecb..a033c92c10 100644 --- a/testdata/baselines/reference/submodule/compiler/modulePreserve4.types.diff +++ b/testdata/baselines/reference/submodule/compiler/modulePreserve4.types.diff @@ -69,7 +69,16 @@ >default : 0 import c1 from "./c"; // { default: [Function: default] } -@@= skipped -81, +81 lines =@@ +@@= skipped -72, +72 lines =@@ + >default : () => void + + import e1 from "./e.mjs"; // 0 +->e1 : any ++>e1 : 0 + + import e2 = require("./e.mjs"); // 0 + >e2 : 0 +@@= skipped -9, +9 lines =@@ >f1 : 0 import f2 = require("./f.cjs"); // { default: 0 } @@ -138,7 +147,16 @@ import c1 from "./c"; // { default: [Function: default] } >c1 : { default: () => void; } -@@= skipped -24, +24 lines =@@ +@@= skipped -15, +15 lines =@@ + >d2 : () => void + + import e1 from "./e.mjs"; // 0 +->e1 : any ++>e1 : 0 + + import e2 = require("./e.mjs"); // 0 + >e2 : 0 +@@= skipped -9, +9 lines =@@ >f1 : 0 import f2 = require("./f.cjs"); // { default: 0 } diff --git a/testdata/baselines/reference/submodule/conformance/nodeModules1(module=node16).types b/testdata/baselines/reference/submodule/conformance/nodeModules1(module=node16).types index 82bc51c2d3..501c69d176 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModules1(module=node16).types +++ b/testdata/baselines/reference/submodule/conformance/nodeModules1(module=node16).types @@ -334,33 +334,33 @@ const _m36 = import("./index"); >"./index" : "./index" const _m37 = import("./subfolder"); ->_m37 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ->import("./subfolder") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>_m37 : Promise +>import("./subfolder") : Promise >"./subfolder" : "./subfolder" const _m38 = import("./subfolder/"); ->_m38 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ->import("./subfolder/") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>_m38 : Promise +>import("./subfolder/") : Promise >"./subfolder/" : "./subfolder/" const _m39 = import("./subfolder/index"); ->_m39 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ->import("./subfolder/index") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>_m39 : Promise +>import("./subfolder/index") : Promise >"./subfolder/index" : "./subfolder/index" const _m40 = import("./subfolder2"); ->_m40 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ->import("./subfolder2") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>_m40 : Promise +>import("./subfolder2") : Promise >"./subfolder2" : "./subfolder2" const _m41 = import("./subfolder2/"); ->_m41 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ->import("./subfolder2/") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>_m41 : Promise +>import("./subfolder2/") : Promise >"./subfolder2/" : "./subfolder2/" const _m42 = import("./subfolder2/index"); ->_m42 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ->import("./subfolder2/index") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>_m42 : Promise +>import("./subfolder2/index") : Promise >"./subfolder2/index" : "./subfolder2/index" const _m43 = import("./subfolder2/another"); @@ -640,33 +640,33 @@ const _m36 = import("./index"); >"./index" : "./index" const _m37 = import("./subfolder"); ->_m37 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ->import("./subfolder") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>_m37 : Promise +>import("./subfolder") : Promise >"./subfolder" : "./subfolder" const _m38 = import("./subfolder/"); ->_m38 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ->import("./subfolder/") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>_m38 : Promise +>import("./subfolder/") : Promise >"./subfolder/" : "./subfolder/" const _m39 = import("./subfolder/index"); ->_m39 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ->import("./subfolder/index") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>_m39 : Promise +>import("./subfolder/index") : Promise >"./subfolder/index" : "./subfolder/index" const _m40 = import("./subfolder2"); ->_m40 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ->import("./subfolder2") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>_m40 : Promise +>import("./subfolder2") : Promise >"./subfolder2" : "./subfolder2" const _m41 = import("./subfolder2/"); ->_m41 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ->import("./subfolder2/") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>_m41 : Promise +>import("./subfolder2/") : Promise >"./subfolder2/" : "./subfolder2/" const _m42 = import("./subfolder2/index"); ->_m42 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ->import("./subfolder2/index") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>_m42 : Promise +>import("./subfolder2/index") : Promise >"./subfolder2/index" : "./subfolder2/index" const _m43 = import("./subfolder2/another"); @@ -945,33 +945,33 @@ const _m36 = import("./index"); >"./index" : "./index" const _m37 = import("./subfolder"); ->_m37 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ->import("./subfolder") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>_m37 : Promise +>import("./subfolder") : Promise >"./subfolder" : "./subfolder" const _m38 = import("./subfolder/"); ->_m38 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ->import("./subfolder/") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>_m38 : Promise +>import("./subfolder/") : Promise >"./subfolder/" : "./subfolder/" const _m39 = import("./subfolder/index"); ->_m39 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ->import("./subfolder/index") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>_m39 : Promise +>import("./subfolder/index") : Promise >"./subfolder/index" : "./subfolder/index" const _m40 = import("./subfolder2"); ->_m40 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ->import("./subfolder2") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>_m40 : Promise +>import("./subfolder2") : Promise >"./subfolder2" : "./subfolder2" const _m41 = import("./subfolder2/"); ->_m41 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ->import("./subfolder2/") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>_m41 : Promise +>import("./subfolder2/") : Promise >"./subfolder2/" : "./subfolder2/" const _m42 = import("./subfolder2/index"); ->_m42 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ->import("./subfolder2/index") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>_m42 : Promise +>import("./subfolder2/index") : Promise >"./subfolder2/index" : "./subfolder2/index" const _m43 = import("./subfolder2/another"); diff --git a/testdata/baselines/reference/submodule/conformance/nodeModules1(module=node16).types.diff b/testdata/baselines/reference/submodule/conformance/nodeModules1(module=node16).types.diff index 9af64d171d..53703d7093 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModules1(module=node16).types.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModules1(module=node16).types.diff @@ -329,43 +329,43 @@ const _m37 = import("./subfolder"); ->_m37 : Promise ->import("./subfolder") : Promise -+>_m37 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> -+>import("./subfolder") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>_m37 : Promise ++>import("./subfolder") : Promise >"./subfolder" : "./subfolder" const _m38 = import("./subfolder/"); ->_m38 : Promise ->import("./subfolder/") : Promise -+>_m38 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> -+>import("./subfolder/") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>_m38 : Promise ++>import("./subfolder/") : Promise >"./subfolder/" : "./subfolder/" const _m39 = import("./subfolder/index"); ->_m39 : Promise ->import("./subfolder/index") : Promise -+>_m39 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> -+>import("./subfolder/index") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>_m39 : Promise ++>import("./subfolder/index") : Promise >"./subfolder/index" : "./subfolder/index" const _m40 = import("./subfolder2"); ->_m40 : Promise ->import("./subfolder2") : Promise -+>_m40 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> -+>import("./subfolder2") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>_m40 : Promise ++>import("./subfolder2") : Promise >"./subfolder2" : "./subfolder2" const _m41 = import("./subfolder2/"); ->_m41 : Promise ->import("./subfolder2/") : Promise -+>_m41 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> -+>import("./subfolder2/") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>_m41 : Promise ++>import("./subfolder2/") : Promise >"./subfolder2/" : "./subfolder2/" const _m42 = import("./subfolder2/index"); ->_m42 : Promise ->import("./subfolder2/index") : Promise -+>_m42 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> -+>import("./subfolder2/index") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>_m42 : Promise ++>import("./subfolder2/index") : Promise >"./subfolder2/index" : "./subfolder2/index" const _m43 = import("./subfolder2/another"); @@ -719,43 +719,43 @@ const _m37 = import("./subfolder"); ->_m37 : Promise ->import("./subfolder") : Promise -+>_m37 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> -+>import("./subfolder") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>_m37 : Promise ++>import("./subfolder") : Promise >"./subfolder" : "./subfolder" const _m38 = import("./subfolder/"); ->_m38 : Promise ->import("./subfolder/") : Promise -+>_m38 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> -+>import("./subfolder/") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>_m38 : Promise ++>import("./subfolder/") : Promise >"./subfolder/" : "./subfolder/" const _m39 = import("./subfolder/index"); ->_m39 : Promise ->import("./subfolder/index") : Promise -+>_m39 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> -+>import("./subfolder/index") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>_m39 : Promise ++>import("./subfolder/index") : Promise >"./subfolder/index" : "./subfolder/index" const _m40 = import("./subfolder2"); ->_m40 : Promise ->import("./subfolder2") : Promise -+>_m40 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> -+>import("./subfolder2") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>_m40 : Promise ++>import("./subfolder2") : Promise >"./subfolder2" : "./subfolder2" const _m41 = import("./subfolder2/"); ->_m41 : Promise ->import("./subfolder2/") : Promise -+>_m41 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> -+>import("./subfolder2/") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>_m41 : Promise ++>import("./subfolder2/") : Promise >"./subfolder2/" : "./subfolder2/" const _m42 = import("./subfolder2/index"); ->_m42 : Promise ->import("./subfolder2/index") : Promise -+>_m42 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> -+>import("./subfolder2/index") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>_m42 : Promise ++>import("./subfolder2/index") : Promise >"./subfolder2/index" : "./subfolder2/index" const _m43 = import("./subfolder2/another"); @@ -1109,43 +1109,43 @@ const _m37 = import("./subfolder"); ->_m37 : Promise ->import("./subfolder") : Promise -+>_m37 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> -+>import("./subfolder") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>_m37 : Promise ++>import("./subfolder") : Promise >"./subfolder" : "./subfolder" const _m38 = import("./subfolder/"); ->_m38 : Promise ->import("./subfolder/") : Promise -+>_m38 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> -+>import("./subfolder/") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>_m38 : Promise ++>import("./subfolder/") : Promise >"./subfolder/" : "./subfolder/" const _m39 = import("./subfolder/index"); ->_m39 : Promise ->import("./subfolder/index") : Promise -+>_m39 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> -+>import("./subfolder/index") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>_m39 : Promise ++>import("./subfolder/index") : Promise >"./subfolder/index" : "./subfolder/index" const _m40 = import("./subfolder2"); ->_m40 : Promise ->import("./subfolder2") : Promise -+>_m40 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> -+>import("./subfolder2") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>_m40 : Promise ++>import("./subfolder2") : Promise >"./subfolder2" : "./subfolder2" const _m41 = import("./subfolder2/"); ->_m41 : Promise ->import("./subfolder2/") : Promise -+>_m41 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> -+>import("./subfolder2/") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>_m41 : Promise ++>import("./subfolder2/") : Promise >"./subfolder2/" : "./subfolder2/" const _m42 = import("./subfolder2/index"); ->_m42 : Promise ->import("./subfolder2/index") : Promise -+>_m42 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> -+>import("./subfolder2/index") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>_m42 : Promise ++>import("./subfolder2/index") : Promise >"./subfolder2/index" : "./subfolder2/index" const _m43 = import("./subfolder2/another"); diff --git a/testdata/baselines/reference/submodule/conformance/nodeModules1(module=nodenext).types b/testdata/baselines/reference/submodule/conformance/nodeModules1(module=nodenext).types index 82bc51c2d3..501c69d176 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModules1(module=nodenext).types +++ b/testdata/baselines/reference/submodule/conformance/nodeModules1(module=nodenext).types @@ -334,33 +334,33 @@ const _m36 = import("./index"); >"./index" : "./index" const _m37 = import("./subfolder"); ->_m37 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ->import("./subfolder") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>_m37 : Promise +>import("./subfolder") : Promise >"./subfolder" : "./subfolder" const _m38 = import("./subfolder/"); ->_m38 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ->import("./subfolder/") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>_m38 : Promise +>import("./subfolder/") : Promise >"./subfolder/" : "./subfolder/" const _m39 = import("./subfolder/index"); ->_m39 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ->import("./subfolder/index") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>_m39 : Promise +>import("./subfolder/index") : Promise >"./subfolder/index" : "./subfolder/index" const _m40 = import("./subfolder2"); ->_m40 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ->import("./subfolder2") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>_m40 : Promise +>import("./subfolder2") : Promise >"./subfolder2" : "./subfolder2" const _m41 = import("./subfolder2/"); ->_m41 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ->import("./subfolder2/") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>_m41 : Promise +>import("./subfolder2/") : Promise >"./subfolder2/" : "./subfolder2/" const _m42 = import("./subfolder2/index"); ->_m42 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ->import("./subfolder2/index") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>_m42 : Promise +>import("./subfolder2/index") : Promise >"./subfolder2/index" : "./subfolder2/index" const _m43 = import("./subfolder2/another"); @@ -640,33 +640,33 @@ const _m36 = import("./index"); >"./index" : "./index" const _m37 = import("./subfolder"); ->_m37 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ->import("./subfolder") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>_m37 : Promise +>import("./subfolder") : Promise >"./subfolder" : "./subfolder" const _m38 = import("./subfolder/"); ->_m38 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ->import("./subfolder/") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>_m38 : Promise +>import("./subfolder/") : Promise >"./subfolder/" : "./subfolder/" const _m39 = import("./subfolder/index"); ->_m39 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ->import("./subfolder/index") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>_m39 : Promise +>import("./subfolder/index") : Promise >"./subfolder/index" : "./subfolder/index" const _m40 = import("./subfolder2"); ->_m40 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ->import("./subfolder2") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>_m40 : Promise +>import("./subfolder2") : Promise >"./subfolder2" : "./subfolder2" const _m41 = import("./subfolder2/"); ->_m41 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ->import("./subfolder2/") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>_m41 : Promise +>import("./subfolder2/") : Promise >"./subfolder2/" : "./subfolder2/" const _m42 = import("./subfolder2/index"); ->_m42 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ->import("./subfolder2/index") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>_m42 : Promise +>import("./subfolder2/index") : Promise >"./subfolder2/index" : "./subfolder2/index" const _m43 = import("./subfolder2/another"); @@ -945,33 +945,33 @@ const _m36 = import("./index"); >"./index" : "./index" const _m37 = import("./subfolder"); ->_m37 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ->import("./subfolder") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>_m37 : Promise +>import("./subfolder") : Promise >"./subfolder" : "./subfolder" const _m38 = import("./subfolder/"); ->_m38 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ->import("./subfolder/") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>_m38 : Promise +>import("./subfolder/") : Promise >"./subfolder/" : "./subfolder/" const _m39 = import("./subfolder/index"); ->_m39 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ->import("./subfolder/index") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>_m39 : Promise +>import("./subfolder/index") : Promise >"./subfolder/index" : "./subfolder/index" const _m40 = import("./subfolder2"); ->_m40 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ->import("./subfolder2") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>_m40 : Promise +>import("./subfolder2") : Promise >"./subfolder2" : "./subfolder2" const _m41 = import("./subfolder2/"); ->_m41 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ->import("./subfolder2/") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>_m41 : Promise +>import("./subfolder2/") : Promise >"./subfolder2/" : "./subfolder2/" const _m42 = import("./subfolder2/index"); ->_m42 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ->import("./subfolder2/index") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>_m42 : Promise +>import("./subfolder2/index") : Promise >"./subfolder2/index" : "./subfolder2/index" const _m43 = import("./subfolder2/another"); diff --git a/testdata/baselines/reference/submodule/conformance/nodeModules1(module=nodenext).types.diff b/testdata/baselines/reference/submodule/conformance/nodeModules1(module=nodenext).types.diff index 6ad90a540f..30c76a9684 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModules1(module=nodenext).types.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModules1(module=nodenext).types.diff @@ -329,43 +329,43 @@ const _m37 = import("./subfolder"); ->_m37 : Promise ->import("./subfolder") : Promise -+>_m37 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> -+>import("./subfolder") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>_m37 : Promise ++>import("./subfolder") : Promise >"./subfolder" : "./subfolder" const _m38 = import("./subfolder/"); ->_m38 : Promise ->import("./subfolder/") : Promise -+>_m38 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> -+>import("./subfolder/") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>_m38 : Promise ++>import("./subfolder/") : Promise >"./subfolder/" : "./subfolder/" const _m39 = import("./subfolder/index"); ->_m39 : Promise ->import("./subfolder/index") : Promise -+>_m39 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> -+>import("./subfolder/index") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>_m39 : Promise ++>import("./subfolder/index") : Promise >"./subfolder/index" : "./subfolder/index" const _m40 = import("./subfolder2"); ->_m40 : Promise ->import("./subfolder2") : Promise -+>_m40 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> -+>import("./subfolder2") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>_m40 : Promise ++>import("./subfolder2") : Promise >"./subfolder2" : "./subfolder2" const _m41 = import("./subfolder2/"); ->_m41 : Promise ->import("./subfolder2/") : Promise -+>_m41 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> -+>import("./subfolder2/") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>_m41 : Promise ++>import("./subfolder2/") : Promise >"./subfolder2/" : "./subfolder2/" const _m42 = import("./subfolder2/index"); ->_m42 : Promise ->import("./subfolder2/index") : Promise -+>_m42 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> -+>import("./subfolder2/index") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>_m42 : Promise ++>import("./subfolder2/index") : Promise >"./subfolder2/index" : "./subfolder2/index" const _m43 = import("./subfolder2/another"); @@ -719,43 +719,43 @@ const _m37 = import("./subfolder"); ->_m37 : Promise ->import("./subfolder") : Promise -+>_m37 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> -+>import("./subfolder") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>_m37 : Promise ++>import("./subfolder") : Promise >"./subfolder" : "./subfolder" const _m38 = import("./subfolder/"); ->_m38 : Promise ->import("./subfolder/") : Promise -+>_m38 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> -+>import("./subfolder/") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>_m38 : Promise ++>import("./subfolder/") : Promise >"./subfolder/" : "./subfolder/" const _m39 = import("./subfolder/index"); ->_m39 : Promise ->import("./subfolder/index") : Promise -+>_m39 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> -+>import("./subfolder/index") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>_m39 : Promise ++>import("./subfolder/index") : Promise >"./subfolder/index" : "./subfolder/index" const _m40 = import("./subfolder2"); ->_m40 : Promise ->import("./subfolder2") : Promise -+>_m40 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> -+>import("./subfolder2") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>_m40 : Promise ++>import("./subfolder2") : Promise >"./subfolder2" : "./subfolder2" const _m41 = import("./subfolder2/"); ->_m41 : Promise ->import("./subfolder2/") : Promise -+>_m41 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> -+>import("./subfolder2/") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>_m41 : Promise ++>import("./subfolder2/") : Promise >"./subfolder2/" : "./subfolder2/" const _m42 = import("./subfolder2/index"); ->_m42 : Promise ->import("./subfolder2/index") : Promise -+>_m42 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> -+>import("./subfolder2/index") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>_m42 : Promise ++>import("./subfolder2/index") : Promise >"./subfolder2/index" : "./subfolder2/index" const _m43 = import("./subfolder2/another"); @@ -1109,43 +1109,43 @@ const _m37 = import("./subfolder"); ->_m37 : Promise ->import("./subfolder") : Promise -+>_m37 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> -+>import("./subfolder") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>_m37 : Promise ++>import("./subfolder") : Promise >"./subfolder" : "./subfolder" const _m38 = import("./subfolder/"); ->_m38 : Promise ->import("./subfolder/") : Promise -+>_m38 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> -+>import("./subfolder/") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>_m38 : Promise ++>import("./subfolder/") : Promise >"./subfolder/" : "./subfolder/" const _m39 = import("./subfolder/index"); ->_m39 : Promise ->import("./subfolder/index") : Promise -+>_m39 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> -+>import("./subfolder/index") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>_m39 : Promise ++>import("./subfolder/index") : Promise >"./subfolder/index" : "./subfolder/index" const _m40 = import("./subfolder2"); ->_m40 : Promise ->import("./subfolder2") : Promise -+>_m40 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> -+>import("./subfolder2") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>_m40 : Promise ++>import("./subfolder2") : Promise >"./subfolder2" : "./subfolder2" const _m41 = import("./subfolder2/"); ->_m41 : Promise ->import("./subfolder2/") : Promise -+>_m41 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> -+>import("./subfolder2/") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>_m41 : Promise ++>import("./subfolder2/") : Promise >"./subfolder2/" : "./subfolder2/" const _m42 = import("./subfolder2/index"); ->_m42 : Promise ->import("./subfolder2/index") : Promise -+>_m42 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> -+>import("./subfolder2/index") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>_m42 : Promise ++>import("./subfolder2/index") : Promise >"./subfolder2/index" : "./subfolder2/index" const _m43 = import("./subfolder2/another"); diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJs1(module=node16).types b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJs1(module=node16).types index 0a0415bc60..629022de76 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJs1(module=node16).types +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJs1(module=node16).types @@ -334,33 +334,33 @@ const _m36 = import("./index"); >"./index" : "./index" const _m37 = import("./subfolder"); ->_m37 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ->import("./subfolder") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>_m37 : Promise +>import("./subfolder") : Promise >"./subfolder" : "./subfolder" const _m38 = import("./subfolder/"); ->_m38 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ->import("./subfolder/") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>_m38 : Promise +>import("./subfolder/") : Promise >"./subfolder/" : "./subfolder/" const _m39 = import("./subfolder/index"); ->_m39 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ->import("./subfolder/index") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>_m39 : Promise +>import("./subfolder/index") : Promise >"./subfolder/index" : "./subfolder/index" const _m40 = import("./subfolder2"); ->_m40 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ->import("./subfolder2") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>_m40 : Promise +>import("./subfolder2") : Promise >"./subfolder2" : "./subfolder2" const _m41 = import("./subfolder2/"); ->_m41 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ->import("./subfolder2/") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>_m41 : Promise +>import("./subfolder2/") : Promise >"./subfolder2/" : "./subfolder2/" const _m42 = import("./subfolder2/index"); ->_m42 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ->import("./subfolder2/index") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>_m42 : Promise +>import("./subfolder2/index") : Promise >"./subfolder2/index" : "./subfolder2/index" const _m43 = import("./subfolder2/another"); @@ -640,33 +640,33 @@ const _m36 = import("./index"); >"./index" : "./index" const _m37 = import("./subfolder"); ->_m37 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ->import("./subfolder") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>_m37 : Promise +>import("./subfolder") : Promise >"./subfolder" : "./subfolder" const _m38 = import("./subfolder/"); ->_m38 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ->import("./subfolder/") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>_m38 : Promise +>import("./subfolder/") : Promise >"./subfolder/" : "./subfolder/" const _m39 = import("./subfolder/index"); ->_m39 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ->import("./subfolder/index") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>_m39 : Promise +>import("./subfolder/index") : Promise >"./subfolder/index" : "./subfolder/index" const _m40 = import("./subfolder2"); ->_m40 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ->import("./subfolder2") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>_m40 : Promise +>import("./subfolder2") : Promise >"./subfolder2" : "./subfolder2" const _m41 = import("./subfolder2/"); ->_m41 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ->import("./subfolder2/") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>_m41 : Promise +>import("./subfolder2/") : Promise >"./subfolder2/" : "./subfolder2/" const _m42 = import("./subfolder2/index"); ->_m42 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ->import("./subfolder2/index") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>_m42 : Promise +>import("./subfolder2/index") : Promise >"./subfolder2/index" : "./subfolder2/index" const _m43 = import("./subfolder2/another"); @@ -945,33 +945,33 @@ const _m36 = import("./index"); >"./index" : "./index" const _m37 = import("./subfolder"); ->_m37 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ->import("./subfolder") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>_m37 : Promise +>import("./subfolder") : Promise >"./subfolder" : "./subfolder" const _m38 = import("./subfolder/"); ->_m38 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ->import("./subfolder/") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>_m38 : Promise +>import("./subfolder/") : Promise >"./subfolder/" : "./subfolder/" const _m39 = import("./subfolder/index"); ->_m39 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ->import("./subfolder/index") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>_m39 : Promise +>import("./subfolder/index") : Promise >"./subfolder/index" : "./subfolder/index" const _m40 = import("./subfolder2"); ->_m40 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ->import("./subfolder2") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>_m40 : Promise +>import("./subfolder2") : Promise >"./subfolder2" : "./subfolder2" const _m41 = import("./subfolder2/"); ->_m41 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ->import("./subfolder2/") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>_m41 : Promise +>import("./subfolder2/") : Promise >"./subfolder2/" : "./subfolder2/" const _m42 = import("./subfolder2/index"); ->_m42 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ->import("./subfolder2/index") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>_m42 : Promise +>import("./subfolder2/index") : Promise >"./subfolder2/index" : "./subfolder2/index" const _m43 = import("./subfolder2/another"); diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJs1(module=node16).types.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJs1(module=node16).types.diff index a52a3dd671..47f1cfe2e7 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJs1(module=node16).types.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJs1(module=node16).types.diff @@ -329,43 +329,43 @@ const _m37 = import("./subfolder"); ->_m37 : Promise ->import("./subfolder") : Promise -+>_m37 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> -+>import("./subfolder") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>_m37 : Promise ++>import("./subfolder") : Promise >"./subfolder" : "./subfolder" const _m38 = import("./subfolder/"); ->_m38 : Promise ->import("./subfolder/") : Promise -+>_m38 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> -+>import("./subfolder/") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>_m38 : Promise ++>import("./subfolder/") : Promise >"./subfolder/" : "./subfolder/" const _m39 = import("./subfolder/index"); ->_m39 : Promise ->import("./subfolder/index") : Promise -+>_m39 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> -+>import("./subfolder/index") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>_m39 : Promise ++>import("./subfolder/index") : Promise >"./subfolder/index" : "./subfolder/index" const _m40 = import("./subfolder2"); ->_m40 : Promise ->import("./subfolder2") : Promise -+>_m40 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> -+>import("./subfolder2") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>_m40 : Promise ++>import("./subfolder2") : Promise >"./subfolder2" : "./subfolder2" const _m41 = import("./subfolder2/"); ->_m41 : Promise ->import("./subfolder2/") : Promise -+>_m41 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> -+>import("./subfolder2/") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>_m41 : Promise ++>import("./subfolder2/") : Promise >"./subfolder2/" : "./subfolder2/" const _m42 = import("./subfolder2/index"); ->_m42 : Promise ->import("./subfolder2/index") : Promise -+>_m42 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> -+>import("./subfolder2/index") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>_m42 : Promise ++>import("./subfolder2/index") : Promise >"./subfolder2/index" : "./subfolder2/index" const _m43 = import("./subfolder2/another"); @@ -719,43 +719,43 @@ const _m37 = import("./subfolder"); ->_m37 : Promise ->import("./subfolder") : Promise -+>_m37 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> -+>import("./subfolder") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>_m37 : Promise ++>import("./subfolder") : Promise >"./subfolder" : "./subfolder" const _m38 = import("./subfolder/"); ->_m38 : Promise ->import("./subfolder/") : Promise -+>_m38 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> -+>import("./subfolder/") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>_m38 : Promise ++>import("./subfolder/") : Promise >"./subfolder/" : "./subfolder/" const _m39 = import("./subfolder/index"); ->_m39 : Promise ->import("./subfolder/index") : Promise -+>_m39 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> -+>import("./subfolder/index") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>_m39 : Promise ++>import("./subfolder/index") : Promise >"./subfolder/index" : "./subfolder/index" const _m40 = import("./subfolder2"); ->_m40 : Promise ->import("./subfolder2") : Promise -+>_m40 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> -+>import("./subfolder2") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>_m40 : Promise ++>import("./subfolder2") : Promise >"./subfolder2" : "./subfolder2" const _m41 = import("./subfolder2/"); ->_m41 : Promise ->import("./subfolder2/") : Promise -+>_m41 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> -+>import("./subfolder2/") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>_m41 : Promise ++>import("./subfolder2/") : Promise >"./subfolder2/" : "./subfolder2/" const _m42 = import("./subfolder2/index"); ->_m42 : Promise ->import("./subfolder2/index") : Promise -+>_m42 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> -+>import("./subfolder2/index") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>_m42 : Promise ++>import("./subfolder2/index") : Promise >"./subfolder2/index" : "./subfolder2/index" const _m43 = import("./subfolder2/another"); @@ -1109,43 +1109,43 @@ const _m37 = import("./subfolder"); ->_m37 : Promise ->import("./subfolder") : Promise -+>_m37 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> -+>import("./subfolder") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>_m37 : Promise ++>import("./subfolder") : Promise >"./subfolder" : "./subfolder" const _m38 = import("./subfolder/"); ->_m38 : Promise ->import("./subfolder/") : Promise -+>_m38 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> -+>import("./subfolder/") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>_m38 : Promise ++>import("./subfolder/") : Promise >"./subfolder/" : "./subfolder/" const _m39 = import("./subfolder/index"); ->_m39 : Promise ->import("./subfolder/index") : Promise -+>_m39 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> -+>import("./subfolder/index") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>_m39 : Promise ++>import("./subfolder/index") : Promise >"./subfolder/index" : "./subfolder/index" const _m40 = import("./subfolder2"); ->_m40 : Promise ->import("./subfolder2") : Promise -+>_m40 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> -+>import("./subfolder2") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>_m40 : Promise ++>import("./subfolder2") : Promise >"./subfolder2" : "./subfolder2" const _m41 = import("./subfolder2/"); ->_m41 : Promise ->import("./subfolder2/") : Promise -+>_m41 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> -+>import("./subfolder2/") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>_m41 : Promise ++>import("./subfolder2/") : Promise >"./subfolder2/" : "./subfolder2/" const _m42 = import("./subfolder2/index"); ->_m42 : Promise ->import("./subfolder2/index") : Promise -+>_m42 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> -+>import("./subfolder2/index") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>_m42 : Promise ++>import("./subfolder2/index") : Promise >"./subfolder2/index" : "./subfolder2/index" const _m43 = import("./subfolder2/another"); diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJs1(module=nodenext).types b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJs1(module=nodenext).types index 0a0415bc60..629022de76 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJs1(module=nodenext).types +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJs1(module=nodenext).types @@ -334,33 +334,33 @@ const _m36 = import("./index"); >"./index" : "./index" const _m37 = import("./subfolder"); ->_m37 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ->import("./subfolder") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>_m37 : Promise +>import("./subfolder") : Promise >"./subfolder" : "./subfolder" const _m38 = import("./subfolder/"); ->_m38 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ->import("./subfolder/") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>_m38 : Promise +>import("./subfolder/") : Promise >"./subfolder/" : "./subfolder/" const _m39 = import("./subfolder/index"); ->_m39 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ->import("./subfolder/index") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>_m39 : Promise +>import("./subfolder/index") : Promise >"./subfolder/index" : "./subfolder/index" const _m40 = import("./subfolder2"); ->_m40 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ->import("./subfolder2") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>_m40 : Promise +>import("./subfolder2") : Promise >"./subfolder2" : "./subfolder2" const _m41 = import("./subfolder2/"); ->_m41 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ->import("./subfolder2/") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>_m41 : Promise +>import("./subfolder2/") : Promise >"./subfolder2/" : "./subfolder2/" const _m42 = import("./subfolder2/index"); ->_m42 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ->import("./subfolder2/index") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>_m42 : Promise +>import("./subfolder2/index") : Promise >"./subfolder2/index" : "./subfolder2/index" const _m43 = import("./subfolder2/another"); @@ -640,33 +640,33 @@ const _m36 = import("./index"); >"./index" : "./index" const _m37 = import("./subfolder"); ->_m37 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ->import("./subfolder") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>_m37 : Promise +>import("./subfolder") : Promise >"./subfolder" : "./subfolder" const _m38 = import("./subfolder/"); ->_m38 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ->import("./subfolder/") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>_m38 : Promise +>import("./subfolder/") : Promise >"./subfolder/" : "./subfolder/" const _m39 = import("./subfolder/index"); ->_m39 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ->import("./subfolder/index") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>_m39 : Promise +>import("./subfolder/index") : Promise >"./subfolder/index" : "./subfolder/index" const _m40 = import("./subfolder2"); ->_m40 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ->import("./subfolder2") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>_m40 : Promise +>import("./subfolder2") : Promise >"./subfolder2" : "./subfolder2" const _m41 = import("./subfolder2/"); ->_m41 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ->import("./subfolder2/") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>_m41 : Promise +>import("./subfolder2/") : Promise >"./subfolder2/" : "./subfolder2/" const _m42 = import("./subfolder2/index"); ->_m42 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ->import("./subfolder2/index") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>_m42 : Promise +>import("./subfolder2/index") : Promise >"./subfolder2/index" : "./subfolder2/index" const _m43 = import("./subfolder2/another"); @@ -945,33 +945,33 @@ const _m36 = import("./index"); >"./index" : "./index" const _m37 = import("./subfolder"); ->_m37 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ->import("./subfolder") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>_m37 : Promise +>import("./subfolder") : Promise >"./subfolder" : "./subfolder" const _m38 = import("./subfolder/"); ->_m38 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ->import("./subfolder/") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>_m38 : Promise +>import("./subfolder/") : Promise >"./subfolder/" : "./subfolder/" const _m39 = import("./subfolder/index"); ->_m39 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ->import("./subfolder/index") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> +>_m39 : Promise +>import("./subfolder/index") : Promise >"./subfolder/index" : "./subfolder/index" const _m40 = import("./subfolder2"); ->_m40 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ->import("./subfolder2") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>_m40 : Promise +>import("./subfolder2") : Promise >"./subfolder2" : "./subfolder2" const _m41 = import("./subfolder2/"); ->_m41 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ->import("./subfolder2/") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>_m41 : Promise +>import("./subfolder2/") : Promise >"./subfolder2/" : "./subfolder2/" const _m42 = import("./subfolder2/index"); ->_m42 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ->import("./subfolder2/index") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> +>_m42 : Promise +>import("./subfolder2/index") : Promise >"./subfolder2/index" : "./subfolder2/index" const _m43 = import("./subfolder2/another"); diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJs1(module=nodenext).types.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJs1(module=nodenext).types.diff index 2a5e0ae13e..1efbd7d99f 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJs1(module=nodenext).types.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJs1(module=nodenext).types.diff @@ -329,43 +329,43 @@ const _m37 = import("./subfolder"); ->_m37 : Promise ->import("./subfolder") : Promise -+>_m37 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> -+>import("./subfolder") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>_m37 : Promise ++>import("./subfolder") : Promise >"./subfolder" : "./subfolder" const _m38 = import("./subfolder/"); ->_m38 : Promise ->import("./subfolder/") : Promise -+>_m38 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> -+>import("./subfolder/") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>_m38 : Promise ++>import("./subfolder/") : Promise >"./subfolder/" : "./subfolder/" const _m39 = import("./subfolder/index"); ->_m39 : Promise ->import("./subfolder/index") : Promise -+>_m39 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> -+>import("./subfolder/index") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>_m39 : Promise ++>import("./subfolder/index") : Promise >"./subfolder/index" : "./subfolder/index" const _m40 = import("./subfolder2"); ->_m40 : Promise ->import("./subfolder2") : Promise -+>_m40 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> -+>import("./subfolder2") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>_m40 : Promise ++>import("./subfolder2") : Promise >"./subfolder2" : "./subfolder2" const _m41 = import("./subfolder2/"); ->_m41 : Promise ->import("./subfolder2/") : Promise -+>_m41 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> -+>import("./subfolder2/") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>_m41 : Promise ++>import("./subfolder2/") : Promise >"./subfolder2/" : "./subfolder2/" const _m42 = import("./subfolder2/index"); ->_m42 : Promise ->import("./subfolder2/index") : Promise -+>_m42 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> -+>import("./subfolder2/index") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>_m42 : Promise ++>import("./subfolder2/index") : Promise >"./subfolder2/index" : "./subfolder2/index" const _m43 = import("./subfolder2/another"); @@ -719,43 +719,43 @@ const _m37 = import("./subfolder"); ->_m37 : Promise ->import("./subfolder") : Promise -+>_m37 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> -+>import("./subfolder") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>_m37 : Promise ++>import("./subfolder") : Promise >"./subfolder" : "./subfolder" const _m38 = import("./subfolder/"); ->_m38 : Promise ->import("./subfolder/") : Promise -+>_m38 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> -+>import("./subfolder/") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>_m38 : Promise ++>import("./subfolder/") : Promise >"./subfolder/" : "./subfolder/" const _m39 = import("./subfolder/index"); ->_m39 : Promise ->import("./subfolder/index") : Promise -+>_m39 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> -+>import("./subfolder/index") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>_m39 : Promise ++>import("./subfolder/index") : Promise >"./subfolder/index" : "./subfolder/index" const _m40 = import("./subfolder2"); ->_m40 : Promise ->import("./subfolder2") : Promise -+>_m40 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> -+>import("./subfolder2") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>_m40 : Promise ++>import("./subfolder2") : Promise >"./subfolder2" : "./subfolder2" const _m41 = import("./subfolder2/"); ->_m41 : Promise ->import("./subfolder2/") : Promise -+>_m41 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> -+>import("./subfolder2/") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>_m41 : Promise ++>import("./subfolder2/") : Promise >"./subfolder2/" : "./subfolder2/" const _m42 = import("./subfolder2/index"); ->_m42 : Promise ->import("./subfolder2/index") : Promise -+>_m42 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> -+>import("./subfolder2/index") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>_m42 : Promise ++>import("./subfolder2/index") : Promise >"./subfolder2/index" : "./subfolder2/index" const _m43 = import("./subfolder2/another"); @@ -1109,43 +1109,43 @@ const _m37 = import("./subfolder"); ->_m37 : Promise ->import("./subfolder") : Promise -+>_m37 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> -+>import("./subfolder") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>_m37 : Promise ++>import("./subfolder") : Promise >"./subfolder" : "./subfolder" const _m38 = import("./subfolder/"); ->_m38 : Promise ->import("./subfolder/") : Promise -+>_m38 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> -+>import("./subfolder/") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>_m38 : Promise ++>import("./subfolder/") : Promise >"./subfolder/" : "./subfolder/" const _m39 = import("./subfolder/index"); ->_m39 : Promise ->import("./subfolder/index") : Promise -+>_m39 : Promise<{ x: 1; default: typeof import("subfolder/index"); }> -+>import("./subfolder/index") : Promise<{ x: 1; default: typeof import("subfolder/index"); }> ++>_m39 : Promise ++>import("./subfolder/index") : Promise >"./subfolder/index" : "./subfolder/index" const _m40 = import("./subfolder2"); ->_m40 : Promise ->import("./subfolder2") : Promise -+>_m40 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> -+>import("./subfolder2") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>_m40 : Promise ++>import("./subfolder2") : Promise >"./subfolder2" : "./subfolder2" const _m41 = import("./subfolder2/"); ->_m41 : Promise ->import("./subfolder2/") : Promise -+>_m41 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> -+>import("./subfolder2/") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>_m41 : Promise ++>import("./subfolder2/") : Promise >"./subfolder2/" : "./subfolder2/" const _m42 = import("./subfolder2/index"); ->_m42 : Promise ->import("./subfolder2/index") : Promise -+>_m42 : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> -+>import("./subfolder2/index") : Promise<{ x: 1; default: typeof import("subfolder2/index"); }> ++>_m42 : Promise ++>import("./subfolder2/index") : Promise >"./subfolder2/index" : "./subfolder2/index" const _m43 = import("./subfolder2/another"); diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=node16).errors.txt b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=node16).errors.txt index 5c37afd462..4658ca6470 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=node16).errors.txt +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=node16).errors.txt @@ -1,12 +1,15 @@ file.js(4,1): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. index.js(3,1): error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. subfolder/file.js(3,1): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. +subfolder/index.js(3,1): error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. -==== subfolder/index.js (0 errors) ==== +==== subfolder/index.js (1 errors) ==== // cjs format file const a = {}; export = a; + ~~~~~~~~~~~ +!!! error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. ==== subfolder/file.js (1 errors) ==== // cjs format file const a = {}; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=node16).errors.txt.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=node16).errors.txt.diff index f8742c3560..15bd703c3b 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=node16).errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=node16).errors.txt.diff @@ -6,16 +6,17 @@ -index.js(3,1): error TS8003: 'export =' can only be used in TypeScript files. -subfolder/index.js(3,1): error TS8003: 'export =' can only be used in TypeScript files. +subfolder/file.js(3,1): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. ++subfolder/index.js(3,1): error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. --==== subfolder/index.js (1 errors) ==== -+==== subfolder/index.js (0 errors) ==== - // cjs format file + ==== subfolder/index.js (1 errors) ==== +@@= skipped -8, +8 lines =@@ const a = {}; export = a; -- ~~~~~~~~~~~ + ~~~~~~~~~~~ -!!! error TS8003: 'export =' can only be used in TypeScript files. -==== subfolder/file.js (0 errors) ==== ++!!! error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. +==== subfolder/file.js (1 errors) ==== // cjs format file const a = {}; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=nodenext).errors.txt b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=nodenext).errors.txt index 5c37afd462..4658ca6470 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=nodenext).errors.txt +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=nodenext).errors.txt @@ -1,12 +1,15 @@ file.js(4,1): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. index.js(3,1): error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. subfolder/file.js(3,1): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. +subfolder/index.js(3,1): error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. -==== subfolder/index.js (0 errors) ==== +==== subfolder/index.js (1 errors) ==== // cjs format file const a = {}; export = a; + ~~~~~~~~~~~ +!!! error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. ==== subfolder/file.js (1 errors) ==== // cjs format file const a = {}; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=nodenext).errors.txt.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=nodenext).errors.txt.diff index be2cd40e6d..c72353b77b 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=nodenext).errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=nodenext).errors.txt.diff @@ -6,16 +6,17 @@ -index.js(3,1): error TS8003: 'export =' can only be used in TypeScript files. -subfolder/index.js(3,1): error TS8003: 'export =' can only be used in TypeScript files. +subfolder/file.js(3,1): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. ++subfolder/index.js(3,1): error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. --==== subfolder/index.js (1 errors) ==== -+==== subfolder/index.js (0 errors) ==== - // cjs format file + ==== subfolder/index.js (1 errors) ==== +@@= skipped -8, +8 lines =@@ const a = {}; export = a; -- ~~~~~~~~~~~ + ~~~~~~~~~~~ -!!! error TS8003: 'export =' can only be used in TypeScript files. -==== subfolder/file.js (0 errors) ==== ++!!! error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. +==== subfolder/file.js (1 errors) ==== // cjs format file const a = {}; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsGeneratedNameCollisions(module=node16).errors.txt b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsGeneratedNameCollisions(module=node16).errors.txt deleted file mode 100644 index 6bdf1d41c6..0000000000 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsGeneratedNameCollisions(module=node16).errors.txt +++ /dev/null @@ -1,35 +0,0 @@ -subfolder/index.js(2,10): error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. -subfolder/index.js(3,7): error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. -subfolder/index.js(5,14): error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. - - -==== subfolder/index.js (3 errors) ==== - // cjs format file - function require() {} - ~~~~~~~ -!!! error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. - const exports = {}; - ~~~~~~~ -!!! error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. - class Object {} - export const __esModule = false; - ~~~~~~~~~~ -!!! error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. - export {require, exports, Object}; -==== index.js (0 errors) ==== - // esm format file - function require() {} - const exports = {}; - class Object {} - export const __esModule = false; - export {require, exports, Object}; -==== package.json (0 errors) ==== - { - "name": "package", - "private": true, - "type": "module" - } -==== subfolder/package.json (0 errors) ==== - { - "type": "commonjs" - } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsGeneratedNameCollisions(module=node16).errors.txt.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsGeneratedNameCollisions(module=node16).errors.txt.diff index 25d9a57b84..9e6b831947 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsGeneratedNameCollisions(module=node16).errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsGeneratedNameCollisions(module=node16).errors.txt.diff @@ -1,23 +1,43 @@ --- old.nodeModulesAllowJsGeneratedNameCollisions(module=node16).errors.txt +++ new.nodeModulesAllowJsGeneratedNameCollisions(module=node16).errors.txt -@@= skipped -0, +0 lines =@@ - subfolder/index.js(2,10): error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. - subfolder/index.js(3,7): error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. +@@= skipped -0, +-1 lines =@@ +-subfolder/index.js(2,10): error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. +-subfolder/index.js(3,7): error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. -subfolder/index.js(4,7): error TS2725: Class name cannot be 'Object' when targeting ES5 with module Node16. - subfolder/index.js(5,14): error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. - - +-subfolder/index.js(5,14): error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. +- +- -==== subfolder/index.js (4 errors) ==== -+==== subfolder/index.js (3 errors) ==== - // cjs format file - function require() {} - ~~~~~~~ -@@= skipped -12, +11 lines =@@ - ~~~~~~~ - !!! error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. - class Object {} +- // cjs format file +- function require() {} +- ~~~~~~~ +-!!! error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. +- const exports = {}; +- ~~~~~~~ +-!!! error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. +- class Object {} - ~~~~~~ -!!! error TS2725: Class name cannot be 'Object' when targeting ES5 with module Node16. - export const __esModule = false; - ~~~~~~~~~~ - !!! error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. +- export const __esModule = false; +- ~~~~~~~~~~ +-!!! error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. +- export {require, exports, Object}; +-==== index.js (0 errors) ==== +- // esm format file +- function require() {} +- const exports = {}; +- class Object {} +- export const __esModule = false; +- export {require, exports, Object}; +-==== package.json (0 errors) ==== +- { +- "name": "package", +- "private": true, +- "type": "module" +- } +-==== subfolder/package.json (0 errors) ==== +- { +- "type": "commonjs" +- } +@@= skipped --1, +1 lines =@@ ++ diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsGeneratedNameCollisions(module=nodenext).errors.txt b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsGeneratedNameCollisions(module=nodenext).errors.txt deleted file mode 100644 index 6bdf1d41c6..0000000000 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsGeneratedNameCollisions(module=nodenext).errors.txt +++ /dev/null @@ -1,35 +0,0 @@ -subfolder/index.js(2,10): error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. -subfolder/index.js(3,7): error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. -subfolder/index.js(5,14): error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. - - -==== subfolder/index.js (3 errors) ==== - // cjs format file - function require() {} - ~~~~~~~ -!!! error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. - const exports = {}; - ~~~~~~~ -!!! error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. - class Object {} - export const __esModule = false; - ~~~~~~~~~~ -!!! error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. - export {require, exports, Object}; -==== index.js (0 errors) ==== - // esm format file - function require() {} - const exports = {}; - class Object {} - export const __esModule = false; - export {require, exports, Object}; -==== package.json (0 errors) ==== - { - "name": "package", - "private": true, - "type": "module" - } -==== subfolder/package.json (0 errors) ==== - { - "type": "commonjs" - } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsGeneratedNameCollisions(module=nodenext).errors.txt.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsGeneratedNameCollisions(module=nodenext).errors.txt.diff index 1f1bbb88a1..86755eb715 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsGeneratedNameCollisions(module=nodenext).errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsGeneratedNameCollisions(module=nodenext).errors.txt.diff @@ -1,23 +1,43 @@ --- old.nodeModulesAllowJsGeneratedNameCollisions(module=nodenext).errors.txt +++ new.nodeModulesAllowJsGeneratedNameCollisions(module=nodenext).errors.txt -@@= skipped -0, +0 lines =@@ - subfolder/index.js(2,10): error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. - subfolder/index.js(3,7): error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. +@@= skipped -0, +-1 lines =@@ +-subfolder/index.js(2,10): error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. +-subfolder/index.js(3,7): error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. -subfolder/index.js(4,7): error TS2725: Class name cannot be 'Object' when targeting ES5 with module NodeNext. - subfolder/index.js(5,14): error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. - - +-subfolder/index.js(5,14): error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. +- +- -==== subfolder/index.js (4 errors) ==== -+==== subfolder/index.js (3 errors) ==== - // cjs format file - function require() {} - ~~~~~~~ -@@= skipped -12, +11 lines =@@ - ~~~~~~~ - !!! error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. - class Object {} +- // cjs format file +- function require() {} +- ~~~~~~~ +-!!! error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. +- const exports = {}; +- ~~~~~~~ +-!!! error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. +- class Object {} - ~~~~~~ -!!! error TS2725: Class name cannot be 'Object' when targeting ES5 with module NodeNext. - export const __esModule = false; - ~~~~~~~~~~ - !!! error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. +- export const __esModule = false; +- ~~~~~~~~~~ +-!!! error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. +- export {require, exports, Object}; +-==== index.js (0 errors) ==== +- // esm format file +- function require() {} +- const exports = {}; +- class Object {} +- export const __esModule = false; +- export {require, exports, Object}; +-==== package.json (0 errors) ==== +- { +- "name": "package", +- "private": true, +- "type": "module" +- } +-==== subfolder/package.json (0 errors) ==== +- { +- "type": "commonjs" +- } +@@= skipped --1, +1 lines =@@ ++ diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsSynchronousCallErrors(module=node16).types b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsSynchronousCallErrors(module=node16).types index 86e47f1532..7fdab8dd82 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsSynchronousCallErrors(module=node16).types +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsSynchronousCallErrors(module=node16).types @@ -25,9 +25,9 @@ export async function f() { >"../index.js" : "../index.js" const mod4 = await import ("./index.js"); ->mod4 : { f: () => Promise; default: typeof import("subfolder/index"); } ->await import ("./index.js") : { f: () => Promise; default: typeof import("subfolder/index"); } ->import ("./index.js") : Promise<{ f: () => Promise; default: typeof import("subfolder/index"); }> +>mod4 : typeof import("subfolder/index") +>await import ("./index.js") : typeof import("subfolder/index") +>import ("./index.js") : Promise >"./index.js" : "./index.js" h(); @@ -59,9 +59,9 @@ export async function h() { >"./index.js" : "./index.js" const mod4 = await import ("./subfolder/index.js"); ->mod4 : { f: () => Promise; default: typeof import("subfolder/index"); } ->await import ("./subfolder/index.js") : { f: () => Promise; default: typeof import("subfolder/index"); } ->import ("./subfolder/index.js") : Promise<{ f: () => Promise; default: typeof import("subfolder/index"); }> +>mod4 : typeof import("subfolder/index") +>await import ("./subfolder/index.js") : typeof import("subfolder/index") +>import ("./subfolder/index.js") : Promise >"./subfolder/index.js" : "./subfolder/index.js" f(); diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsSynchronousCallErrors(module=node16).types.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsSynchronousCallErrors(module=node16).types.diff index f742f0c1f3..1eebc88d58 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsSynchronousCallErrors(module=node16).types.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsSynchronousCallErrors(module=node16).types.diff @@ -31,9 +31,9 @@ ->mod4 : { default: typeof mod2; f(): Promise; } ->await import ("./index.js") : { default: typeof mod2; f(): Promise; } ->import ("./index.js") : Promise<{ default: typeof mod2; f(): Promise; }> -+>mod4 : { f: () => Promise; default: typeof import("subfolder/index"); } -+>await import ("./index.js") : { f: () => Promise; default: typeof import("subfolder/index"); } -+>import ("./index.js") : Promise<{ f: () => Promise; default: typeof import("subfolder/index"); }> ++>mod4 : typeof import("subfolder/index") ++>await import ("./index.js") : typeof import("subfolder/index") ++>import ("./index.js") : Promise >"./index.js" : "./index.js" h(); @@ -67,9 +67,9 @@ ->mod4 : { default: typeof mod2; f(): Promise; } ->await import ("./subfolder/index.js") : { default: typeof mod2; f(): Promise; } ->import ("./subfolder/index.js") : Promise<{ default: typeof mod2; f(): Promise; }> -+>mod4 : { f: () => Promise; default: typeof import("subfolder/index"); } -+>await import ("./subfolder/index.js") : { f: () => Promise; default: typeof import("subfolder/index"); } -+>import ("./subfolder/index.js") : Promise<{ f: () => Promise; default: typeof import("subfolder/index"); }> ++>mod4 : typeof import("subfolder/index") ++>await import ("./subfolder/index.js") : typeof import("subfolder/index") ++>import ("./subfolder/index.js") : Promise >"./subfolder/index.js" : "./subfolder/index.js" f(); diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsSynchronousCallErrors(module=nodenext).types b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsSynchronousCallErrors(module=nodenext).types index 86e47f1532..7fdab8dd82 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsSynchronousCallErrors(module=nodenext).types +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsSynchronousCallErrors(module=nodenext).types @@ -25,9 +25,9 @@ export async function f() { >"../index.js" : "../index.js" const mod4 = await import ("./index.js"); ->mod4 : { f: () => Promise; default: typeof import("subfolder/index"); } ->await import ("./index.js") : { f: () => Promise; default: typeof import("subfolder/index"); } ->import ("./index.js") : Promise<{ f: () => Promise; default: typeof import("subfolder/index"); }> +>mod4 : typeof import("subfolder/index") +>await import ("./index.js") : typeof import("subfolder/index") +>import ("./index.js") : Promise >"./index.js" : "./index.js" h(); @@ -59,9 +59,9 @@ export async function h() { >"./index.js" : "./index.js" const mod4 = await import ("./subfolder/index.js"); ->mod4 : { f: () => Promise; default: typeof import("subfolder/index"); } ->await import ("./subfolder/index.js") : { f: () => Promise; default: typeof import("subfolder/index"); } ->import ("./subfolder/index.js") : Promise<{ f: () => Promise; default: typeof import("subfolder/index"); }> +>mod4 : typeof import("subfolder/index") +>await import ("./subfolder/index.js") : typeof import("subfolder/index") +>import ("./subfolder/index.js") : Promise >"./subfolder/index.js" : "./subfolder/index.js" f(); diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsSynchronousCallErrors(module=nodenext).types.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsSynchronousCallErrors(module=nodenext).types.diff index 4bdcfa3256..6d03686fe8 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsSynchronousCallErrors(module=nodenext).types.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsSynchronousCallErrors(module=nodenext).types.diff @@ -31,9 +31,9 @@ ->mod4 : { default: typeof mod2; f(): Promise; } ->await import ("./index.js") : { default: typeof mod2; f(): Promise; } ->import ("./index.js") : Promise<{ default: typeof mod2; f(): Promise; }> -+>mod4 : { f: () => Promise; default: typeof import("subfolder/index"); } -+>await import ("./index.js") : { f: () => Promise; default: typeof import("subfolder/index"); } -+>import ("./index.js") : Promise<{ f: () => Promise; default: typeof import("subfolder/index"); }> ++>mod4 : typeof import("subfolder/index") ++>await import ("./index.js") : typeof import("subfolder/index") ++>import ("./index.js") : Promise >"./index.js" : "./index.js" h(); @@ -67,9 +67,9 @@ ->mod4 : { default: typeof mod2; f(): Promise; } ->await import ("./subfolder/index.js") : { default: typeof mod2; f(): Promise; } ->import ("./subfolder/index.js") : Promise<{ default: typeof mod2; f(): Promise; }> -+>mod4 : { f: () => Promise; default: typeof import("subfolder/index"); } -+>await import ("./subfolder/index.js") : { f: () => Promise; default: typeof import("subfolder/index"); } -+>import ("./subfolder/index.js") : Promise<{ f: () => Promise; default: typeof import("subfolder/index"); }> ++>mod4 : typeof import("subfolder/index") ++>await import ("./subfolder/index.js") : typeof import("subfolder/index") ++>import ("./subfolder/index.js") : Promise >"./subfolder/index.js" : "./subfolder/index.js" f(); diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsTopLevelAwait(module=node16).errors.txt b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsTopLevelAwait(module=node16).errors.txt index 6d1336b928..976ff9888e 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsTopLevelAwait(module=node16).errors.txt +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsTopLevelAwait(module=node16).errors.txt @@ -1,18 +1,18 @@ index.js(2,11): error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. index.js(4,5): error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. -subfolder/index.js(2,11): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. -subfolder/index.js(4,5): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. +subfolder/index.js(2,11): error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. +subfolder/index.js(4,5): error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. ==== subfolder/index.js (2 errors) ==== // cjs format file const x = await 1; ~~~~~ -!!! error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. +!!! error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. export {x}; for await (const y of []) {} ~~~~~ -!!! error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. +!!! error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. ==== index.js (2 errors) ==== // esm format file const x = await 1; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsTopLevelAwait(module=node16).errors.txt.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsTopLevelAwait(module=node16).errors.txt.diff index 6c1f3f9504..7937e01c9a 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsTopLevelAwait(module=node16).errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsTopLevelAwait(module=node16).errors.txt.diff @@ -1,16 +1,26 @@ --- old.nodeModulesAllowJsTopLevelAwait(module=node16).errors.txt +++ new.nodeModulesAllowJsTopLevelAwait(module=node16).errors.txt @@= skipped -0, +0 lines =@@ +-subfolder/index.js(2,11): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. +-subfolder/index.js(4,5): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. +index.js(2,11): error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. +index.js(4,5): error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. - subfolder/index.js(2,11): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. - subfolder/index.js(4,5): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. ++subfolder/index.js(2,11): error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. ++subfolder/index.js(4,5): error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. -@@= skipped -10, +12 lines =@@ + + ==== subfolder/index.js (2 errors) ==== + // cjs format file + const x = await 1; + ~~~~~ +-!!! error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. ++!!! error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. + export {x}; for await (const y of []) {} ~~~~~ - !!! error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. +-!!! error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. -==== index.js (0 errors) ==== ++!!! error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. +==== index.js (2 errors) ==== // esm format file const x = await 1; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsTopLevelAwait(module=nodenext).errors.txt b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsTopLevelAwait(module=nodenext).errors.txt index 6d1336b928..976ff9888e 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsTopLevelAwait(module=nodenext).errors.txt +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsTopLevelAwait(module=nodenext).errors.txt @@ -1,18 +1,18 @@ index.js(2,11): error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. index.js(4,5): error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. -subfolder/index.js(2,11): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. -subfolder/index.js(4,5): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. +subfolder/index.js(2,11): error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. +subfolder/index.js(4,5): error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. ==== subfolder/index.js (2 errors) ==== // cjs format file const x = await 1; ~~~~~ -!!! error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. +!!! error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. export {x}; for await (const y of []) {} ~~~~~ -!!! error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. +!!! error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. ==== index.js (2 errors) ==== // esm format file const x = await 1; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsTopLevelAwait(module=nodenext).errors.txt.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsTopLevelAwait(module=nodenext).errors.txt.diff index 88f10c32f6..99931fe104 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsTopLevelAwait(module=nodenext).errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsTopLevelAwait(module=nodenext).errors.txt.diff @@ -1,16 +1,26 @@ --- old.nodeModulesAllowJsTopLevelAwait(module=nodenext).errors.txt +++ new.nodeModulesAllowJsTopLevelAwait(module=nodenext).errors.txt @@= skipped -0, +0 lines =@@ +-subfolder/index.js(2,11): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. +-subfolder/index.js(4,5): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. +index.js(2,11): error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. +index.js(4,5): error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. - subfolder/index.js(2,11): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. - subfolder/index.js(4,5): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. ++subfolder/index.js(2,11): error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. ++subfolder/index.js(4,5): error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. -@@= skipped -10, +12 lines =@@ + + ==== subfolder/index.js (2 errors) ==== + // cjs format file + const x = await 1; + ~~~~~ +-!!! error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. ++!!! error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. + export {x}; for await (const y of []) {} ~~~~~ - !!! error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. +-!!! error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. -==== index.js (0 errors) ==== ++!!! error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. +==== index.js (2 errors) ==== // esm format file const x = await 1; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesCjsFormatFileAlwaysHasDefault(module=node16).types b/testdata/baselines/reference/submodule/conformance/nodeModulesCjsFormatFileAlwaysHasDefault(module=node16).types index ab01d22c9d..ff082de1b8 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesCjsFormatFileAlwaysHasDefault(module=node16).types +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesCjsFormatFileAlwaysHasDefault(module=node16).types @@ -9,8 +9,8 @@ export const a = 1; === index.ts === // esm format file import mod from "./subfolder/index.js"; ->mod : typeof import("subfolder/index") +>mod : any mod; ->mod : typeof import("subfolder/index") +>mod : any diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesCjsFormatFileAlwaysHasDefault(module=node16).types.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesCjsFormatFileAlwaysHasDefault(module=node16).types.diff index d68c2b4d4c..8e9dc99119 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesCjsFormatFileAlwaysHasDefault(module=node16).types.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesCjsFormatFileAlwaysHasDefault(module=node16).types.diff @@ -5,9 +5,9 @@ // esm format file import mod from "./subfolder/index.js"; ->mod : typeof mod -+>mod : typeof import("subfolder/index") ++>mod : any mod; ->mod : typeof mod -+>mod : typeof import("subfolder/index") ++>mod : any diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesCjsFormatFileAlwaysHasDefault(module=nodenext).types b/testdata/baselines/reference/submodule/conformance/nodeModulesCjsFormatFileAlwaysHasDefault(module=nodenext).types index ab01d22c9d..ff082de1b8 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesCjsFormatFileAlwaysHasDefault(module=nodenext).types +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesCjsFormatFileAlwaysHasDefault(module=nodenext).types @@ -9,8 +9,8 @@ export const a = 1; === index.ts === // esm format file import mod from "./subfolder/index.js"; ->mod : typeof import("subfolder/index") +>mod : any mod; ->mod : typeof import("subfolder/index") +>mod : any diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesCjsFormatFileAlwaysHasDefault(module=nodenext).types.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesCjsFormatFileAlwaysHasDefault(module=nodenext).types.diff index 1e069638b9..d966785431 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesCjsFormatFileAlwaysHasDefault(module=nodenext).types.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesCjsFormatFileAlwaysHasDefault(module=nodenext).types.diff @@ -5,9 +5,9 @@ // esm format file import mod from "./subfolder/index.js"; ->mod : typeof mod -+>mod : typeof import("subfolder/index") ++>mod : any mod; ->mod : typeof mod -+>mod : typeof import("subfolder/index") ++>mod : any diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesDeclarationEmitDynamicImportWithPackageExports.types b/testdata/baselines/reference/submodule/conformance/nodeModulesDeclarationEmitDynamicImportWithPackageExports.types index 2663ff2c3b..8cea062325 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesDeclarationEmitDynamicImportWithPackageExports.types +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesDeclarationEmitDynamicImportWithPackageExports.types @@ -15,9 +15,9 @@ export {}; === other.ts === // esm format file export const a = await import("package/cjs"); ->a : { default: typeof import("index"); } ->await import("package/cjs") : { default: typeof import("index"); } ->import("package/cjs") : Promise<{ default: typeof import("index"); }> +>a : typeof import("index") +>await import("package/cjs") : typeof import("index") +>import("package/cjs") : Promise >"package/cjs" : "package/cjs" export const b = await import("package/mjs"); @@ -55,9 +55,9 @@ export const e = await import("inner/mjs"); === other.mts === // esm format file export const a = await import("package/cjs"); ->a : { default: typeof import("index"); } ->await import("package/cjs") : { default: typeof import("index"); } ->import("package/cjs") : Promise<{ default: typeof import("index"); }> +>a : typeof import("index") +>await import("package/cjs") : typeof import("index") +>import("package/cjs") : Promise >"package/cjs" : "package/cjs" export const b = await import("package/mjs"); @@ -95,8 +95,8 @@ export const e = await import("inner/mjs"); === other.cts === // cjs format file, no TLA export const a = import("package/cjs"); ->a : Promise<{ default: typeof import("index"); }> ->import("package/cjs") : Promise<{ default: typeof import("index"); }> +>a : Promise +>import("package/cjs") : Promise >"package/cjs" : "package/cjs" export const b = import("package/mjs"); diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesDeclarationEmitDynamicImportWithPackageExports.types.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesDeclarationEmitDynamicImportWithPackageExports.types.diff index 719b678e20..dff2497a3d 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesDeclarationEmitDynamicImportWithPackageExports.types.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesDeclarationEmitDynamicImportWithPackageExports.types.diff @@ -1,6 +1,19 @@ --- old.nodeModulesDeclarationEmitDynamicImportWithPackageExports.types +++ new.nodeModulesDeclarationEmitDynamicImportWithPackageExports.types -@@= skipped -32, +32 lines =@@ +@@= skipped -14, +14 lines =@@ + === other.ts === + // esm format file + export const a = await import("package/cjs"); +->a : { default: typeof import("index"); } +->await import("package/cjs") : { default: typeof import("index"); } +->import("package/cjs") : Promise<{ default: typeof import("index"); }> ++>a : typeof import("index") ++>await import("package/cjs") : typeof import("index") ++>import("package/cjs") : Promise + >"package/cjs" : "package/cjs" + + export const b = await import("package/mjs"); +@@= skipped -18, +18 lines =@@ >"package" : "package" export const f = await import("inner"); @@ -33,6 +46,17 @@ >"inner/mjs" : "inner/mjs" === other.mts === + // esm format file + export const a = await import("package/cjs"); +->a : { default: typeof import("index"); } +->await import("package/cjs") : { default: typeof import("index"); } +->import("package/cjs") : Promise<{ default: typeof import("index"); }> ++>a : typeof import("index") ++>await import("package/cjs") : typeof import("index") ++>import("package/cjs") : Promise + >"package/cjs" : "package/cjs" + + export const b = await import("package/mjs"); @@= skipped -40, +40 lines =@@ >"package" : "package" @@ -66,7 +90,12 @@ >"inner/mjs" : "inner/mjs" === other.cts === -@@= skipped -27, +27 lines =@@ + // cjs format file, no TLA + export const a = import("package/cjs"); +->a : Promise<{ default: typeof import("index"); }> +->import("package/cjs") : Promise<{ default: typeof import("index"); }> ++>a : Promise ++>import("package/cjs") : Promise >"package/cjs" : "package/cjs" export const b = import("package/mjs"); diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesExportAssignments(module=node16).errors.txt b/testdata/baselines/reference/submodule/conformance/nodeModulesExportAssignments(module=node16).errors.txt index edb49c7a61..0b39eaa7b4 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesExportAssignments(module=node16).errors.txt +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesExportAssignments(module=node16).errors.txt @@ -1,10 +1,13 @@ index.ts(3,1): error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. +subfolder/index.ts(3,1): error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. -==== subfolder/index.ts (0 errors) ==== +==== subfolder/index.ts (1 errors) ==== // cjs format file const a = {}; export = a; + ~~~~~~~~~~~ +!!! error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. ==== index.ts (1 errors) ==== // esm format file const a = {}; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesExportAssignments(module=node16).errors.txt.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesExportAssignments(module=node16).errors.txt.diff new file mode 100644 index 0000000000..903e9f9ca1 --- /dev/null +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesExportAssignments(module=node16).errors.txt.diff @@ -0,0 +1,17 @@ +--- old.nodeModulesExportAssignments(module=node16).errors.txt ++++ new.nodeModulesExportAssignments(module=node16).errors.txt +@@= skipped -0, +0 lines =@@ + index.ts(3,1): error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. ++subfolder/index.ts(3,1): error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. + + +-==== subfolder/index.ts (0 errors) ==== ++==== subfolder/index.ts (1 errors) ==== + // cjs format file + const a = {}; + export = a; ++ ~~~~~~~~~~~ ++!!! error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. + ==== index.ts (1 errors) ==== + // esm format file + const a = {}; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesExportAssignments(module=nodenext).errors.txt b/testdata/baselines/reference/submodule/conformance/nodeModulesExportAssignments(module=nodenext).errors.txt index edb49c7a61..0b39eaa7b4 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesExportAssignments(module=nodenext).errors.txt +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesExportAssignments(module=nodenext).errors.txt @@ -1,10 +1,13 @@ index.ts(3,1): error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. +subfolder/index.ts(3,1): error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. -==== subfolder/index.ts (0 errors) ==== +==== subfolder/index.ts (1 errors) ==== // cjs format file const a = {}; export = a; + ~~~~~~~~~~~ +!!! error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. ==== index.ts (1 errors) ==== // esm format file const a = {}; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesExportAssignments(module=nodenext).errors.txt.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesExportAssignments(module=nodenext).errors.txt.diff new file mode 100644 index 0000000000..6efa30090b --- /dev/null +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesExportAssignments(module=nodenext).errors.txt.diff @@ -0,0 +1,17 @@ +--- old.nodeModulesExportAssignments(module=nodenext).errors.txt ++++ new.nodeModulesExportAssignments(module=nodenext).errors.txt +@@= skipped -0, +0 lines =@@ + index.ts(3,1): error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. ++subfolder/index.ts(3,1): error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. + + +-==== subfolder/index.ts (0 errors) ==== ++==== subfolder/index.ts (1 errors) ==== + // cjs format file + const a = {}; + export = a; ++ ~~~~~~~~~~~ ++!!! error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. + ==== index.ts (1 errors) ==== + // esm format file + const a = {}; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsBlocksSpecifierResolution(module=node16).types b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsBlocksSpecifierResolution(module=node16).types index 93fe0cea51..e894828bb8 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsBlocksSpecifierResolution(module=node16).types +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsBlocksSpecifierResolution(module=node16).types @@ -9,9 +9,9 @@ export const a = (await import("inner")).x(); >a : Thing >(await import("inner")).x() : Thing >(await import("inner")).x : () => Thing ->(await import("inner")) : typeof import("node_modules/inner/index") ->await import("inner") : typeof import("node_modules/inner/index") ->import("inner") : Promise +>(await import("inner")) : { x: () => Thing; default: typeof import("node_modules/inner/index"); } +>await import("inner") : { x: () => Thing; default: typeof import("node_modules/inner/index"); } +>import("inner") : Promise<{ x: () => Thing; default: typeof import("node_modules/inner/index"); }> >"inner" : "inner" >x : () => Thing diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsBlocksSpecifierResolution(module=node16).types.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsBlocksSpecifierResolution(module=node16).types.diff index bafe8eae39..75a9749b65 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsBlocksSpecifierResolution(module=node16).types.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsBlocksSpecifierResolution(module=node16).types.diff @@ -7,12 +7,15 @@ ->a : import("node_modules/inner/other").Thing ->(await import("inner")).x() : import("node_modules/inner/other").Thing ->(await import("inner")).x : () => import("node_modules/inner/other").Thing +->(await import("inner")) : typeof import("node_modules/inner/index") +->await import("inner") : typeof import("node_modules/inner/index") +->import("inner") : Promise +>a : Thing +>(await import("inner")).x() : Thing +>(await import("inner")).x : () => Thing - >(await import("inner")) : typeof import("node_modules/inner/index") - >await import("inner") : typeof import("node_modules/inner/index") - >import("inner") : Promise ++>(await import("inner")) : { x: () => Thing; default: typeof import("node_modules/inner/index"); } ++>await import("inner") : { x: () => Thing; default: typeof import("node_modules/inner/index"); } ++>import("inner") : Promise<{ x: () => Thing; default: typeof import("node_modules/inner/index"); }> >"inner" : "inner" ->x : () => import("node_modules/inner/other").Thing +>x : () => Thing diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsBlocksSpecifierResolution(module=nodenext).types b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsBlocksSpecifierResolution(module=nodenext).types index 93fe0cea51..e894828bb8 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsBlocksSpecifierResolution(module=nodenext).types +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsBlocksSpecifierResolution(module=nodenext).types @@ -9,9 +9,9 @@ export const a = (await import("inner")).x(); >a : Thing >(await import("inner")).x() : Thing >(await import("inner")).x : () => Thing ->(await import("inner")) : typeof import("node_modules/inner/index") ->await import("inner") : typeof import("node_modules/inner/index") ->import("inner") : Promise +>(await import("inner")) : { x: () => Thing; default: typeof import("node_modules/inner/index"); } +>await import("inner") : { x: () => Thing; default: typeof import("node_modules/inner/index"); } +>import("inner") : Promise<{ x: () => Thing; default: typeof import("node_modules/inner/index"); }> >"inner" : "inner" >x : () => Thing diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsBlocksSpecifierResolution(module=nodenext).types.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsBlocksSpecifierResolution(module=nodenext).types.diff index 150af50ebe..2773192041 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsBlocksSpecifierResolution(module=nodenext).types.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsBlocksSpecifierResolution(module=nodenext).types.diff @@ -7,12 +7,15 @@ ->a : import("node_modules/inner/other").Thing ->(await import("inner")).x() : import("node_modules/inner/other").Thing ->(await import("inner")).x : () => import("node_modules/inner/other").Thing +->(await import("inner")) : typeof import("node_modules/inner/index") +->await import("inner") : typeof import("node_modules/inner/index") +->import("inner") : Promise +>a : Thing +>(await import("inner")).x() : Thing +>(await import("inner")).x : () => Thing - >(await import("inner")) : typeof import("node_modules/inner/index") - >await import("inner") : typeof import("node_modules/inner/index") - >import("inner") : Promise ++>(await import("inner")) : { x: () => Thing; default: typeof import("node_modules/inner/index"); } ++>await import("inner") : { x: () => Thing; default: typeof import("node_modules/inner/index"); } ++>import("inner") : Promise<{ x: () => Thing; default: typeof import("node_modules/inner/index"); }> >"inner" : "inner" ->x : () => import("node_modules/inner/other").Thing +>x : () => Thing diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationConditions(module=node16).types b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationConditions(module=node16).types index 6cbbb5acd9..6d9ae78438 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationConditions(module=node16).types +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationConditions(module=node16).types @@ -9,9 +9,9 @@ export const a = (await import("inner")).x(); >a : Thing >(await import("inner")).x() : Thing >(await import("inner")).x : () => Thing ->(await import("inner")) : typeof import("node_modules/inner/index") ->await import("inner") : typeof import("node_modules/inner/index") ->import("inner") : Promise +>(await import("inner")) : { x: () => Thing; default: typeof import("node_modules/inner/index"); } +>await import("inner") : { x: () => Thing; default: typeof import("node_modules/inner/index"); } +>import("inner") : Promise<{ x: () => Thing; default: typeof import("node_modules/inner/index"); }> >"inner" : "inner" >x : () => Thing diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationConditions(module=node16).types.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationConditions(module=node16).types.diff index 1752c94a62..d225c644ac 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationConditions(module=node16).types.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationConditions(module=node16).types.diff @@ -7,12 +7,15 @@ ->a : import("node_modules/inner/other").Thing ->(await import("inner")).x() : import("node_modules/inner/other").Thing ->(await import("inner")).x : () => import("node_modules/inner/other").Thing +->(await import("inner")) : typeof import("node_modules/inner/index") +->await import("inner") : typeof import("node_modules/inner/index") +->import("inner") : Promise +>a : Thing +>(await import("inner")).x() : Thing +>(await import("inner")).x : () => Thing - >(await import("inner")) : typeof import("node_modules/inner/index") - >await import("inner") : typeof import("node_modules/inner/index") - >import("inner") : Promise ++>(await import("inner")) : { x: () => Thing; default: typeof import("node_modules/inner/index"); } ++>await import("inner") : { x: () => Thing; default: typeof import("node_modules/inner/index"); } ++>import("inner") : Promise<{ x: () => Thing; default: typeof import("node_modules/inner/index"); }> >"inner" : "inner" ->x : () => import("node_modules/inner/other").Thing +>x : () => Thing diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationConditions(module=nodenext).types b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationConditions(module=nodenext).types index 6cbbb5acd9..6d9ae78438 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationConditions(module=nodenext).types +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationConditions(module=nodenext).types @@ -9,9 +9,9 @@ export const a = (await import("inner")).x(); >a : Thing >(await import("inner")).x() : Thing >(await import("inner")).x : () => Thing ->(await import("inner")) : typeof import("node_modules/inner/index") ->await import("inner") : typeof import("node_modules/inner/index") ->import("inner") : Promise +>(await import("inner")) : { x: () => Thing; default: typeof import("node_modules/inner/index"); } +>await import("inner") : { x: () => Thing; default: typeof import("node_modules/inner/index"); } +>import("inner") : Promise<{ x: () => Thing; default: typeof import("node_modules/inner/index"); }> >"inner" : "inner" >x : () => Thing diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationConditions(module=nodenext).types.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationConditions(module=nodenext).types.diff index 3502d7be71..85bc5d1f35 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationConditions(module=nodenext).types.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationConditions(module=nodenext).types.diff @@ -7,12 +7,15 @@ ->a : import("node_modules/inner/other").Thing ->(await import("inner")).x() : import("node_modules/inner/other").Thing ->(await import("inner")).x : () => import("node_modules/inner/other").Thing +->(await import("inner")) : typeof import("node_modules/inner/index") +->await import("inner") : typeof import("node_modules/inner/index") +->import("inner") : Promise +>a : Thing +>(await import("inner")).x() : Thing +>(await import("inner")).x : () => Thing - >(await import("inner")) : typeof import("node_modules/inner/index") - >await import("inner") : typeof import("node_modules/inner/index") - >import("inner") : Promise ++>(await import("inner")) : { x: () => Thing; default: typeof import("node_modules/inner/index"); } ++>await import("inner") : { x: () => Thing; default: typeof import("node_modules/inner/index"); } ++>import("inner") : Promise<{ x: () => Thing; default: typeof import("node_modules/inner/index"); }> >"inner" : "inner" ->x : () => import("node_modules/inner/other").Thing +>x : () => Thing diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationDirectory(module=node16).types b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationDirectory(module=node16).types index ed2a1ac666..1f30c73f1d 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationDirectory(module=node16).types +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationDirectory(module=node16).types @@ -9,9 +9,9 @@ export const a = (await import("inner/index.js")).x(); >a : Thing >(await import("inner/index.js")).x() : Thing >(await import("inner/index.js")).x : () => Thing ->(await import("inner/index.js")) : typeof import("node_modules/inner/index") ->await import("inner/index.js") : typeof import("node_modules/inner/index") ->import("inner/index.js") : Promise +>(await import("inner/index.js")) : { x: () => Thing; default: typeof import("node_modules/inner/index"); } +>await import("inner/index.js") : { x: () => Thing; default: typeof import("node_modules/inner/index"); } +>import("inner/index.js") : Promise<{ x: () => Thing; default: typeof import("node_modules/inner/index"); }> >"inner/index.js" : "inner/index.js" >x : () => Thing diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationDirectory(module=node16).types.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationDirectory(module=node16).types.diff index 02f78e4d22..0d6220817f 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationDirectory(module=node16).types.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationDirectory(module=node16).types.diff @@ -7,12 +7,15 @@ ->a : import("node_modules/inner/other").Thing ->(await import("inner/index.js")).x() : import("node_modules/inner/other").Thing ->(await import("inner/index.js")).x : () => import("node_modules/inner/other").Thing +->(await import("inner/index.js")) : typeof import("node_modules/inner/index") +->await import("inner/index.js") : typeof import("node_modules/inner/index") +->import("inner/index.js") : Promise +>a : Thing +>(await import("inner/index.js")).x() : Thing +>(await import("inner/index.js")).x : () => Thing - >(await import("inner/index.js")) : typeof import("node_modules/inner/index") - >await import("inner/index.js") : typeof import("node_modules/inner/index") - >import("inner/index.js") : Promise ++>(await import("inner/index.js")) : { x: () => Thing; default: typeof import("node_modules/inner/index"); } ++>await import("inner/index.js") : { x: () => Thing; default: typeof import("node_modules/inner/index"); } ++>import("inner/index.js") : Promise<{ x: () => Thing; default: typeof import("node_modules/inner/index"); }> >"inner/index.js" : "inner/index.js" ->x : () => import("node_modules/inner/other").Thing +>x : () => Thing diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationDirectory(module=nodenext).types b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationDirectory(module=nodenext).types index ed2a1ac666..1f30c73f1d 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationDirectory(module=nodenext).types +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationDirectory(module=nodenext).types @@ -9,9 +9,9 @@ export const a = (await import("inner/index.js")).x(); >a : Thing >(await import("inner/index.js")).x() : Thing >(await import("inner/index.js")).x : () => Thing ->(await import("inner/index.js")) : typeof import("node_modules/inner/index") ->await import("inner/index.js") : typeof import("node_modules/inner/index") ->import("inner/index.js") : Promise +>(await import("inner/index.js")) : { x: () => Thing; default: typeof import("node_modules/inner/index"); } +>await import("inner/index.js") : { x: () => Thing; default: typeof import("node_modules/inner/index"); } +>import("inner/index.js") : Promise<{ x: () => Thing; default: typeof import("node_modules/inner/index"); }> >"inner/index.js" : "inner/index.js" >x : () => Thing diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationDirectory(module=nodenext).types.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationDirectory(module=nodenext).types.diff index 0966ec6fa2..b51824da4a 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationDirectory(module=nodenext).types.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationDirectory(module=nodenext).types.diff @@ -7,12 +7,15 @@ ->a : import("node_modules/inner/other").Thing ->(await import("inner/index.js")).x() : import("node_modules/inner/other").Thing ->(await import("inner/index.js")).x : () => import("node_modules/inner/other").Thing +->(await import("inner/index.js")) : typeof import("node_modules/inner/index") +->await import("inner/index.js") : typeof import("node_modules/inner/index") +->import("inner/index.js") : Promise +>a : Thing +>(await import("inner/index.js")).x() : Thing +>(await import("inner/index.js")).x : () => Thing - >(await import("inner/index.js")) : typeof import("node_modules/inner/index") - >await import("inner/index.js") : typeof import("node_modules/inner/index") - >import("inner/index.js") : Promise ++>(await import("inner/index.js")) : { x: () => Thing; default: typeof import("node_modules/inner/index"); } ++>await import("inner/index.js") : { x: () => Thing; default: typeof import("node_modules/inner/index"); } ++>import("inner/index.js") : Promise<{ x: () => Thing; default: typeof import("node_modules/inner/index"); }> >"inner/index.js" : "inner/index.js" ->x : () => import("node_modules/inner/other").Thing +>x : () => Thing diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationPattern(module=node16).types b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationPattern(module=node16).types index fe2fc09d73..f3ac551e51 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationPattern(module=node16).types +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationPattern(module=node16).types @@ -9,9 +9,9 @@ export const a = (await import("inner/index.js")).x(); >a : Thing >(await import("inner/index.js")).x() : Thing >(await import("inner/index.js")).x : () => Thing ->(await import("inner/index.js")) : typeof import("node_modules/inner/index") ->await import("inner/index.js") : typeof import("node_modules/inner/index") ->import("inner/index.js") : Promise +>(await import("inner/index.js")) : { x: () => Thing; default: typeof import("node_modules/inner/index"); } +>await import("inner/index.js") : { x: () => Thing; default: typeof import("node_modules/inner/index"); } +>import("inner/index.js") : Promise<{ x: () => Thing; default: typeof import("node_modules/inner/index"); }> >"inner/index.js" : "inner/index.js" >x : () => Thing diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationPattern(module=node16).types.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationPattern(module=node16).types.diff index fc3a231366..67c9122645 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationPattern(module=node16).types.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationPattern(module=node16).types.diff @@ -7,12 +7,15 @@ ->a : import("node_modules/inner/other").Thing ->(await import("inner/index.js")).x() : import("node_modules/inner/other").Thing ->(await import("inner/index.js")).x : () => import("node_modules/inner/other").Thing +->(await import("inner/index.js")) : typeof import("node_modules/inner/index") +->await import("inner/index.js") : typeof import("node_modules/inner/index") +->import("inner/index.js") : Promise +>a : Thing +>(await import("inner/index.js")).x() : Thing +>(await import("inner/index.js")).x : () => Thing - >(await import("inner/index.js")) : typeof import("node_modules/inner/index") - >await import("inner/index.js") : typeof import("node_modules/inner/index") - >import("inner/index.js") : Promise ++>(await import("inner/index.js")) : { x: () => Thing; default: typeof import("node_modules/inner/index"); } ++>await import("inner/index.js") : { x: () => Thing; default: typeof import("node_modules/inner/index"); } ++>import("inner/index.js") : Promise<{ x: () => Thing; default: typeof import("node_modules/inner/index"); }> >"inner/index.js" : "inner/index.js" ->x : () => import("node_modules/inner/other").Thing +>x : () => Thing diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationPattern(module=nodenext).types b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationPattern(module=nodenext).types index fe2fc09d73..f3ac551e51 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationPattern(module=nodenext).types +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationPattern(module=nodenext).types @@ -9,9 +9,9 @@ export const a = (await import("inner/index.js")).x(); >a : Thing >(await import("inner/index.js")).x() : Thing >(await import("inner/index.js")).x : () => Thing ->(await import("inner/index.js")) : typeof import("node_modules/inner/index") ->await import("inner/index.js") : typeof import("node_modules/inner/index") ->import("inner/index.js") : Promise +>(await import("inner/index.js")) : { x: () => Thing; default: typeof import("node_modules/inner/index"); } +>await import("inner/index.js") : { x: () => Thing; default: typeof import("node_modules/inner/index"); } +>import("inner/index.js") : Promise<{ x: () => Thing; default: typeof import("node_modules/inner/index"); }> >"inner/index.js" : "inner/index.js" >x : () => Thing diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationPattern(module=nodenext).types.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationPattern(module=nodenext).types.diff index 6137eb5725..a3851fa498 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationPattern(module=nodenext).types.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationPattern(module=nodenext).types.diff @@ -7,12 +7,15 @@ ->a : import("node_modules/inner/other").Thing ->(await import("inner/index.js")).x() : import("node_modules/inner/other").Thing ->(await import("inner/index.js")).x : () => import("node_modules/inner/other").Thing +->(await import("inner/index.js")) : typeof import("node_modules/inner/index") +->await import("inner/index.js") : typeof import("node_modules/inner/index") +->import("inner/index.js") : Promise +>a : Thing +>(await import("inner/index.js")).x() : Thing +>(await import("inner/index.js")).x : () => Thing - >(await import("inner/index.js")) : typeof import("node_modules/inner/index") - >await import("inner/index.js") : typeof import("node_modules/inner/index") - >import("inner/index.js") : Promise ++>(await import("inner/index.js")) : { x: () => Thing; default: typeof import("node_modules/inner/index"); } ++>await import("inner/index.js") : { x: () => Thing; default: typeof import("node_modules/inner/index"); } ++>import("inner/index.js") : Promise<{ x: () => Thing; default: typeof import("node_modules/inner/index"); }> >"inner/index.js" : "inner/index.js" ->x : () => import("node_modules/inner/other").Thing +>x : () => Thing diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesGeneratedNameCollisions(module=node16).errors.txt b/testdata/baselines/reference/submodule/conformance/nodeModulesGeneratedNameCollisions(module=node16).errors.txt deleted file mode 100644 index cba5d90874..0000000000 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesGeneratedNameCollisions(module=node16).errors.txt +++ /dev/null @@ -1,35 +0,0 @@ -subfolder/index.ts(2,10): error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. -subfolder/index.ts(3,7): error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. -subfolder/index.ts(5,14): error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. - - -==== subfolder/index.ts (3 errors) ==== - // cjs format file - function require() {} - ~~~~~~~ -!!! error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. - const exports = {}; - ~~~~~~~ -!!! error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. - class Object {} - export const __esModule = false; - ~~~~~~~~~~ -!!! error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. - export {require, exports, Object}; -==== index.ts (0 errors) ==== - // esm format file - function require() {} - const exports = {}; - class Object {} - export const __esModule = false; - export {require, exports, Object}; -==== package.json (0 errors) ==== - { - "name": "package", - "private": true, - "type": "module" - } -==== subfolder/package.json (0 errors) ==== - { - "type": "commonjs" - } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesGeneratedNameCollisions(module=node16).errors.txt.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesGeneratedNameCollisions(module=node16).errors.txt.diff index 818a4590d6..96bc456916 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesGeneratedNameCollisions(module=node16).errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesGeneratedNameCollisions(module=node16).errors.txt.diff @@ -1,23 +1,43 @@ --- old.nodeModulesGeneratedNameCollisions(module=node16).errors.txt +++ new.nodeModulesGeneratedNameCollisions(module=node16).errors.txt -@@= skipped -0, +0 lines =@@ - subfolder/index.ts(2,10): error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. - subfolder/index.ts(3,7): error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. +@@= skipped -0, +-1 lines =@@ +-subfolder/index.ts(2,10): error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. +-subfolder/index.ts(3,7): error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. -subfolder/index.ts(4,7): error TS2725: Class name cannot be 'Object' when targeting ES5 with module Node16. - subfolder/index.ts(5,14): error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. - - +-subfolder/index.ts(5,14): error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. +- +- -==== subfolder/index.ts (4 errors) ==== -+==== subfolder/index.ts (3 errors) ==== - // cjs format file - function require() {} - ~~~~~~~ -@@= skipped -12, +11 lines =@@ - ~~~~~~~ - !!! error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. - class Object {} +- // cjs format file +- function require() {} +- ~~~~~~~ +-!!! error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. +- const exports = {}; +- ~~~~~~~ +-!!! error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. +- class Object {} - ~~~~~~ -!!! error TS2725: Class name cannot be 'Object' when targeting ES5 with module Node16. - export const __esModule = false; - ~~~~~~~~~~ - !!! error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. +- export const __esModule = false; +- ~~~~~~~~~~ +-!!! error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. +- export {require, exports, Object}; +-==== index.ts (0 errors) ==== +- // esm format file +- function require() {} +- const exports = {}; +- class Object {} +- export const __esModule = false; +- export {require, exports, Object}; +-==== package.json (0 errors) ==== +- { +- "name": "package", +- "private": true, +- "type": "module" +- } +-==== subfolder/package.json (0 errors) ==== +- { +- "type": "commonjs" +- } +@@= skipped --1, +1 lines =@@ ++ diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesGeneratedNameCollisions(module=nodenext).errors.txt b/testdata/baselines/reference/submodule/conformance/nodeModulesGeneratedNameCollisions(module=nodenext).errors.txt deleted file mode 100644 index cba5d90874..0000000000 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesGeneratedNameCollisions(module=nodenext).errors.txt +++ /dev/null @@ -1,35 +0,0 @@ -subfolder/index.ts(2,10): error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. -subfolder/index.ts(3,7): error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. -subfolder/index.ts(5,14): error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. - - -==== subfolder/index.ts (3 errors) ==== - // cjs format file - function require() {} - ~~~~~~~ -!!! error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. - const exports = {}; - ~~~~~~~ -!!! error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. - class Object {} - export const __esModule = false; - ~~~~~~~~~~ -!!! error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. - export {require, exports, Object}; -==== index.ts (0 errors) ==== - // esm format file - function require() {} - const exports = {}; - class Object {} - export const __esModule = false; - export {require, exports, Object}; -==== package.json (0 errors) ==== - { - "name": "package", - "private": true, - "type": "module" - } -==== subfolder/package.json (0 errors) ==== - { - "type": "commonjs" - } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesGeneratedNameCollisions(module=nodenext).errors.txt.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesGeneratedNameCollisions(module=nodenext).errors.txt.diff index 5887fb5182..a0ffe6084d 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesGeneratedNameCollisions(module=nodenext).errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesGeneratedNameCollisions(module=nodenext).errors.txt.diff @@ -1,23 +1,43 @@ --- old.nodeModulesGeneratedNameCollisions(module=nodenext).errors.txt +++ new.nodeModulesGeneratedNameCollisions(module=nodenext).errors.txt -@@= skipped -0, +0 lines =@@ - subfolder/index.ts(2,10): error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. - subfolder/index.ts(3,7): error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. +@@= skipped -0, +-1 lines =@@ +-subfolder/index.ts(2,10): error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. +-subfolder/index.ts(3,7): error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. -subfolder/index.ts(4,7): error TS2725: Class name cannot be 'Object' when targeting ES5 with module NodeNext. - subfolder/index.ts(5,14): error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. - - +-subfolder/index.ts(5,14): error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. +- +- -==== subfolder/index.ts (4 errors) ==== -+==== subfolder/index.ts (3 errors) ==== - // cjs format file - function require() {} - ~~~~~~~ -@@= skipped -12, +11 lines =@@ - ~~~~~~~ - !!! error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. - class Object {} +- // cjs format file +- function require() {} +- ~~~~~~~ +-!!! error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. +- const exports = {}; +- ~~~~~~~ +-!!! error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. +- class Object {} - ~~~~~~ -!!! error TS2725: Class name cannot be 'Object' when targeting ES5 with module NodeNext. - export const __esModule = false; - ~~~~~~~~~~ - !!! error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. +- export const __esModule = false; +- ~~~~~~~~~~ +-!!! error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. +- export {require, exports, Object}; +-==== index.ts (0 errors) ==== +- // esm format file +- function require() {} +- const exports = {}; +- class Object {} +- export const __esModule = false; +- export {require, exports, Object}; +-==== package.json (0 errors) ==== +- { +- "name": "package", +- "private": true, +- "type": "module" +- } +-==== subfolder/package.json (0 errors) ==== +- { +- "type": "commonjs" +- } +@@= skipped --1, +1 lines =@@ ++ diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssertions(module=node16).types b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssertions(module=node16).types index 0d5c792171..044c9fa189 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssertions(module=node16).types +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssertions(module=node16).types @@ -11,8 +11,8 @@ import json from "./package.json" assert { type: "json" }; // should error, cjs >type : any const json2 = import("./package.json", { assert: { type: "json" } }); // should be fine ->json2 : Promise<{ default: { name: string; private: boolean; type: string; }; }> ->import("./package.json", { assert: { type: "json" } }) : Promise<{ default: { name: string; private: boolean; type: string; }; }> +>json2 : Promise<{ name: string; private: boolean; type: string; default: { name: string; private: boolean; type: string; }; }> +>import("./package.json", { assert: { type: "json" } }) : Promise<{ name: string; private: boolean; type: string; default: { name: string; private: boolean; type: string; }; }> >"./package.json" : "./package.json" >{ assert: { type: "json" } } : { assert: { type: string; }; } >assert : { type: string; } diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssertions(module=node16).types.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssertions(module=node16).types.diff new file mode 100644 index 0000000000..258a24d8f3 --- /dev/null +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssertions(module=node16).types.diff @@ -0,0 +1,13 @@ +--- old.nodeModulesImportAssertions(module=node16).types ++++ new.nodeModulesImportAssertions(module=node16).types +@@= skipped -10, +10 lines =@@ + >type : any + + const json2 = import("./package.json", { assert: { type: "json" } }); // should be fine +->json2 : Promise<{ default: { name: string; private: boolean; type: string; }; }> +->import("./package.json", { assert: { type: "json" } }) : Promise<{ default: { name: string; private: boolean; type: string; }; }> ++>json2 : Promise<{ name: string; private: boolean; type: string; default: { name: string; private: boolean; type: string; }; }> ++>import("./package.json", { assert: { type: "json" } }) : Promise<{ name: string; private: boolean; type: string; default: { name: string; private: boolean; type: string; }; }> + >"./package.json" : "./package.json" + >{ assert: { type: "json" } } : { assert: { type: string; }; } + >assert : { type: string; } diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssertions(module=nodenext).errors.txt b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssertions(module=nodenext).errors.txt index 703e398c11..a7b4c5fd9c 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssertions(module=nodenext).errors.txt +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssertions(module=nodenext).errors.txt @@ -1,11 +1,14 @@ error TS2468: Cannot find global value 'Promise'. +index.ts(1,35): error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. otherc.cts(1,35): error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. otherc.cts(2,15): error TS2712: A dynamic import call in ES5 requires the 'Promise' constructor. Make sure you have a declaration for the 'Promise' constructor or include 'ES2015' in your '--lib' option. !!! error TS2468: Cannot find global value 'Promise'. -==== index.ts (0 errors) ==== +==== index.ts (1 errors) ==== import json from "./package.json" assert { type: "json" }; + ~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. ==== otherc.cts (2 errors) ==== import json from "./package.json" assert { type: "json" }; // should error, cjs mode imports don't support assertions ~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssertions(module=nodenext).errors.txt.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssertions(module=nodenext).errors.txt.diff index 18fb9360b1..9407852a02 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssertions(module=nodenext).errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssertions(module=nodenext).errors.txt.diff @@ -2,14 +2,18 @@ +++ new.nodeModulesImportAssertions(module=nodenext).errors.txt @@= skipped -0, +0 lines =@@ +error TS2468: Cannot find global value 'Promise'. ++index.ts(1,35): error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. otherc.cts(1,35): error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. +otherc.cts(2,15): error TS2712: A dynamic import call in ES5 requires the 'Promise' constructor. Make sure you have a declaration for the 'Promise' constructor or include 'ES2015' in your '--lib' option. +-==== index.ts (0 errors) ==== +!!! error TS2468: Cannot find global value 'Promise'. - ==== index.ts (0 errors) ==== ++==== index.ts (1 errors) ==== import json from "./package.json" assert { type: "json" }; -==== otherc.cts (1 errors) ==== ++ ~~~~~~~~~~~~~~~~~~~~~~~ ++!!! error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. +==== otherc.cts (2 errors) ==== import json from "./package.json" assert { type: "json" }; // should error, cjs mode imports don't support assertions ~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssertions(module=nodenext).types b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssertions(module=nodenext).types index 0d5c792171..044c9fa189 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssertions(module=nodenext).types +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssertions(module=nodenext).types @@ -11,8 +11,8 @@ import json from "./package.json" assert { type: "json" }; // should error, cjs >type : any const json2 = import("./package.json", { assert: { type: "json" } }); // should be fine ->json2 : Promise<{ default: { name: string; private: boolean; type: string; }; }> ->import("./package.json", { assert: { type: "json" } }) : Promise<{ default: { name: string; private: boolean; type: string; }; }> +>json2 : Promise<{ name: string; private: boolean; type: string; default: { name: string; private: boolean; type: string; }; }> +>import("./package.json", { assert: { type: "json" } }) : Promise<{ name: string; private: boolean; type: string; default: { name: string; private: boolean; type: string; }; }> >"./package.json" : "./package.json" >{ assert: { type: "json" } } : { assert: { type: string; }; } >assert : { type: string; } diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssertions(module=nodenext).types.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssertions(module=nodenext).types.diff new file mode 100644 index 0000000000..b74a0cf090 --- /dev/null +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssertions(module=nodenext).types.diff @@ -0,0 +1,13 @@ +--- old.nodeModulesImportAssertions(module=nodenext).types ++++ new.nodeModulesImportAssertions(module=nodenext).types +@@= skipped -10, +10 lines =@@ + >type : any + + const json2 = import("./package.json", { assert: { type: "json" } }); // should be fine +->json2 : Promise<{ default: { name: string; private: boolean; type: string; }; }> +->import("./package.json", { assert: { type: "json" } }) : Promise<{ default: { name: string; private: boolean; type: string; }; }> ++>json2 : Promise<{ name: string; private: boolean; type: string; default: { name: string; private: boolean; type: string; }; }> ++>import("./package.json", { assert: { type: "json" } }) : Promise<{ name: string; private: boolean; type: string; default: { name: string; private: boolean; type: string; }; }> + >"./package.json" : "./package.json" + >{ assert: { type: "json" } } : { assert: { type: string; }; } + >assert : { type: string; } diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributes(module=node16).types b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributes(module=node16).types index a6b4943e6d..e3526d0a12 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributes(module=node16).types +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributes(module=node16).types @@ -11,8 +11,8 @@ import json from "./package.json" with { type: "json" }; // should error, cjs mo >type : any const json2 = import("./package.json", { with: { type: "json" } }); // should be fine ->json2 : Promise<{ default: { name: string; private: boolean; type: string; }; }> ->import("./package.json", { with: { type: "json" } }) : Promise<{ default: { name: string; private: boolean; type: string; }; }> +>json2 : Promise<{ name: string; private: boolean; type: string; default: { name: string; private: boolean; type: string; }; }> +>import("./package.json", { with: { type: "json" } }) : Promise<{ name: string; private: boolean; type: string; default: { name: string; private: boolean; type: string; }; }> >"./package.json" : "./package.json" >{ with: { type: "json" } } : { with: { type: string; }; } >with : { type: string; } diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributes(module=node16).types.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributes(module=node16).types.diff new file mode 100644 index 0000000000..03f6d2e580 --- /dev/null +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributes(module=node16).types.diff @@ -0,0 +1,13 @@ +--- old.nodeModulesImportAttributes(module=node16).types ++++ new.nodeModulesImportAttributes(module=node16).types +@@= skipped -10, +10 lines =@@ + >type : any + + const json2 = import("./package.json", { with: { type: "json" } }); // should be fine +->json2 : Promise<{ default: { name: string; private: boolean; type: string; }; }> +->import("./package.json", { with: { type: "json" } }) : Promise<{ default: { name: string; private: boolean; type: string; }; }> ++>json2 : Promise<{ name: string; private: boolean; type: string; default: { name: string; private: boolean; type: string; }; }> ++>import("./package.json", { with: { type: "json" } }) : Promise<{ name: string; private: boolean; type: string; default: { name: string; private: boolean; type: string; }; }> + >"./package.json" : "./package.json" + >{ with: { type: "json" } } : { with: { type: string; }; } + >with : { type: string; } diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributes(module=nodenext).errors.txt b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributes(module=nodenext).errors.txt index 0b41a035cd..b72480c724 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributes(module=nodenext).errors.txt +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributes(module=nodenext).errors.txt @@ -1,11 +1,14 @@ error TS2468: Cannot find global value 'Promise'. +index.ts(1,35): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. otherc.cts(1,35): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. otherc.cts(2,15): error TS2712: A dynamic import call in ES5 requires the 'Promise' constructor. Make sure you have a declaration for the 'Promise' constructor or include 'ES2015' in your '--lib' option. !!! error TS2468: Cannot find global value 'Promise'. -==== index.ts (0 errors) ==== +==== index.ts (1 errors) ==== import json from "./package.json" with { type: "json" }; + ~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. ==== otherc.cts (2 errors) ==== import json from "./package.json" with { type: "json" }; // should error, cjs mode imports don't support attributes ~~~~~~~~~~~~~~~~~~~~~ diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributes(module=nodenext).errors.txt.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributes(module=nodenext).errors.txt.diff index 806b29e938..c5b8f90749 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributes(module=nodenext).errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributes(module=nodenext).errors.txt.diff @@ -2,14 +2,18 @@ +++ new.nodeModulesImportAttributes(module=nodenext).errors.txt @@= skipped -0, +0 lines =@@ +error TS2468: Cannot find global value 'Promise'. ++index.ts(1,35): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. otherc.cts(1,35): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. +otherc.cts(2,15): error TS2712: A dynamic import call in ES5 requires the 'Promise' constructor. Make sure you have a declaration for the 'Promise' constructor or include 'ES2015' in your '--lib' option. +-==== index.ts (0 errors) ==== +!!! error TS2468: Cannot find global value 'Promise'. - ==== index.ts (0 errors) ==== ++==== index.ts (1 errors) ==== import json from "./package.json" with { type: "json" }; -==== otherc.cts (1 errors) ==== ++ ~~~~~~~~~~~~~~~~~~~~~ ++!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. +==== otherc.cts (2 errors) ==== import json from "./package.json" with { type: "json" }; // should error, cjs mode imports don't support attributes ~~~~~~~~~~~~~~~~~~~~~ diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributes(module=nodenext).types b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributes(module=nodenext).types index a6b4943e6d..e3526d0a12 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributes(module=nodenext).types +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributes(module=nodenext).types @@ -11,8 +11,8 @@ import json from "./package.json" with { type: "json" }; // should error, cjs mo >type : any const json2 = import("./package.json", { with: { type: "json" } }); // should be fine ->json2 : Promise<{ default: { name: string; private: boolean; type: string; }; }> ->import("./package.json", { with: { type: "json" } }) : Promise<{ default: { name: string; private: boolean; type: string; }; }> +>json2 : Promise<{ name: string; private: boolean; type: string; default: { name: string; private: boolean; type: string; }; }> +>import("./package.json", { with: { type: "json" } }) : Promise<{ name: string; private: boolean; type: string; default: { name: string; private: boolean; type: string; }; }> >"./package.json" : "./package.json" >{ with: { type: "json" } } : { with: { type: string; }; } >with : { type: string; } diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributes(module=nodenext).types.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributes(module=nodenext).types.diff new file mode 100644 index 0000000000..745505e39a --- /dev/null +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributes(module=nodenext).types.diff @@ -0,0 +1,13 @@ +--- old.nodeModulesImportAttributes(module=nodenext).types ++++ new.nodeModulesImportAttributes(module=nodenext).types +@@= skipped -10, +10 lines =@@ + >type : any + + const json2 = import("./package.json", { with: { type: "json" } }); // should be fine +->json2 : Promise<{ default: { name: string; private: boolean; type: string; }; }> +->import("./package.json", { with: { type: "json" } }) : Promise<{ default: { name: string; private: boolean; type: string; }; }> ++>json2 : Promise<{ name: string; private: boolean; type: string; default: { name: string; private: boolean; type: string; }; }> ++>import("./package.json", { with: { type: "json" } }) : Promise<{ name: string; private: boolean; type: string; default: { name: string; private: boolean; type: string; }; }> + >"./package.json" : "./package.json" + >{ with: { type: "json" } } : { with: { type: string; }; } + >with : { type: string; } diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributesModeDeclarationEmit2(module=nodenext).errors.txt b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributesModeDeclarationEmit2(module=nodenext).errors.txt index cb559511e0..168ee62846 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributesModeDeclarationEmit2(module=nodenext).errors.txt +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributesModeDeclarationEmit2(module=nodenext).errors.txt @@ -1,44 +1,62 @@ /index.ts(1,45): error TS1454: `resolution-mode` can only be set for type-only imports. +/index.ts(1,45): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. /index.ts(2,15): error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. /index.ts(2,44): error TS1454: `resolution-mode` can only be set for type-only imports. +/index.ts(2,44): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. /index.ts(6,50): error TS1454: `resolution-mode` can only be set for type-only imports. +/index.ts(6,50): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. /index.ts(7,14): error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. /index.ts(7,49): error TS1454: `resolution-mode` can only be set for type-only imports. +/index.ts(7,49): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. /index.ts(10,45): error TS1454: `resolution-mode` can only be set for type-only imports. +/index.ts(10,45): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. /index.ts(11,15): error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. /index.ts(11,44): error TS1454: `resolution-mode` can only be set for type-only imports. +/index.ts(11,44): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. -==== /index.ts (9 errors) ==== +==== /index.ts (15 errors) ==== import type { RequireInterface } from "pkg" with { "resolution-mode": "require" }; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS1454: `resolution-mode` can only be set for type-only imports. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. import type { ImportInterface } from "pkg" with { "resolution-mode": "import" }; ~~~~~~~~~~~~~~~ !!! error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS1454: `resolution-mode` can only be set for type-only imports. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. export interface LocalInterface extends RequireInterface, ImportInterface {} import {type RequireInterface as Req} from "pkg" with { "resolution-mode": "require" }; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS1454: `resolution-mode` can only be set for type-only imports. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. import {type ImportInterface as Imp} from "pkg" with { "resolution-mode": "import" }; ~~~~~~~~~~~~~~~ !!! error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS1454: `resolution-mode` can only be set for type-only imports. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. export interface Loc extends Req, Imp {} export type { RequireInterface } from "pkg" with { "resolution-mode": "require" }; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS1454: `resolution-mode` can only be set for type-only imports. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. export type { ImportInterface } from "pkg" with { "resolution-mode": "import" }; ~~~~~~~~~~~~~~~ !!! error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS1454: `resolution-mode` can only be set for type-only imports. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. ==== /node_modules/pkg/package.json (0 errors) ==== { diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributesModeDeclarationEmit2(module=nodenext).errors.txt.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributesModeDeclarationEmit2(module=nodenext).errors.txt.diff index 074dc27588..1008147de9 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributesModeDeclarationEmit2(module=nodenext).errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributesModeDeclarationEmit2(module=nodenext).errors.txt.diff @@ -3,26 +3,36 @@ @@= skipped -0, +0 lines =@@ -/index.ts(6,14): error TS2305: Module '"pkg"' has no exported member 'RequireInterface'. +/index.ts(1,45): error TS1454: `resolution-mode` can only be set for type-only imports. ++/index.ts(1,45): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. +/index.ts(2,15): error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. +/index.ts(2,44): error TS1454: `resolution-mode` can only be set for type-only imports. ++/index.ts(2,44): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. /index.ts(6,50): error TS1454: `resolution-mode` can only be set for type-only imports. ++/index.ts(6,50): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. +/index.ts(7,14): error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. /index.ts(7,49): error TS1454: `resolution-mode` can only be set for type-only imports. ++/index.ts(7,49): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. +/index.ts(10,45): error TS1454: `resolution-mode` can only be set for type-only imports. ++/index.ts(10,45): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. +/index.ts(11,15): error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. +/index.ts(11,44): error TS1454: `resolution-mode` can only be set for type-only imports. ++/index.ts(11,44): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. -==== /index.ts (3 errors) ==== -+==== /index.ts (9 errors) ==== ++==== /index.ts (15 errors) ==== import type { RequireInterface } from "pkg" with { "resolution-mode": "require" }; + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS1454: `resolution-mode` can only be set for type-only imports. ++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ++!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. import type { ImportInterface } from "pkg" with { "resolution-mode": "import" }; + ~~~~~~~~~~~~~~~ +!!! error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS1454: `resolution-mode` can only be set for type-only imports. ++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ++!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. export interface LocalInterface extends RequireInterface, ImportInterface {} @@ -31,21 +41,29 @@ -!!! error TS2305: Module '"pkg"' has no exported member 'RequireInterface'. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS1454: `resolution-mode` can only be set for type-only imports. ++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ++!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. import {type ImportInterface as Imp} from "pkg" with { "resolution-mode": "import" }; + ~~~~~~~~~~~~~~~ +!!! error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS1454: `resolution-mode` can only be set for type-only imports. ++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ++!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. export interface Loc extends Req, Imp {} export type { RequireInterface } from "pkg" with { "resolution-mode": "require" }; + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS1454: `resolution-mode` can only be set for type-only imports. ++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ++!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. export type { ImportInterface } from "pkg" with { "resolution-mode": "import" }; + ~~~~~~~~~~~~~~~ +!!! error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS1454: `resolution-mode` can only be set for type-only imports. ++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ++!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. ==== /node_modules/pkg/package.json (0 errors) ==== { diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportModeDeclarationEmit2(module=nodenext).errors.txt b/testdata/baselines/reference/submodule/conformance/nodeModulesImportModeDeclarationEmit2(module=nodenext).errors.txt index 9f1a0f208a..84050248b9 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportModeDeclarationEmit2(module=nodenext).errors.txt +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportModeDeclarationEmit2(module=nodenext).errors.txt @@ -1,44 +1,62 @@ /index.ts(1,45): error TS1454: `resolution-mode` can only be set for type-only imports. +/index.ts(1,45): error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. /index.ts(2,15): error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. /index.ts(2,44): error TS1454: `resolution-mode` can only be set for type-only imports. +/index.ts(2,44): error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. /index.ts(6,50): error TS1454: `resolution-mode` can only be set for type-only imports. +/index.ts(6,50): error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. /index.ts(7,14): error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. /index.ts(7,49): error TS1454: `resolution-mode` can only be set for type-only imports. +/index.ts(7,49): error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. /index.ts(10,45): error TS1454: `resolution-mode` can only be set for type-only imports. +/index.ts(10,45): error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. /index.ts(11,15): error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. /index.ts(11,44): error TS1454: `resolution-mode` can only be set for type-only imports. +/index.ts(11,44): error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. -==== /index.ts (9 errors) ==== +==== /index.ts (15 errors) ==== import type { RequireInterface } from "pkg" assert { "resolution-mode": "require" }; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS1454: `resolution-mode` can only be set for type-only imports. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. import type { ImportInterface } from "pkg" assert { "resolution-mode": "import" }; ~~~~~~~~~~~~~~~ !!! error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS1454: `resolution-mode` can only be set for type-only imports. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. export interface LocalInterface extends RequireInterface, ImportInterface {} import {type RequireInterface as Req} from "pkg" assert { "resolution-mode": "require" }; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS1454: `resolution-mode` can only be set for type-only imports. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. import {type ImportInterface as Imp} from "pkg" assert { "resolution-mode": "import" }; ~~~~~~~~~~~~~~~ !!! error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS1454: `resolution-mode` can only be set for type-only imports. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. export interface Loc extends Req, Imp {} export type { RequireInterface } from "pkg" assert { "resolution-mode": "require" }; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS1454: `resolution-mode` can only be set for type-only imports. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. export type { ImportInterface } from "pkg" assert { "resolution-mode": "import" }; ~~~~~~~~~~~~~~~ !!! error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS1454: `resolution-mode` can only be set for type-only imports. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. ==== /node_modules/pkg/package.json (0 errors) ==== { diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportModeDeclarationEmit2(module=nodenext).errors.txt.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesImportModeDeclarationEmit2(module=nodenext).errors.txt.diff index dc69697ac5..7ec698d28e 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportModeDeclarationEmit2(module=nodenext).errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportModeDeclarationEmit2(module=nodenext).errors.txt.diff @@ -3,26 +3,36 @@ @@= skipped -0, +0 lines =@@ -/index.ts(6,14): error TS2305: Module '"pkg"' has no exported member 'RequireInterface'. +/index.ts(1,45): error TS1454: `resolution-mode` can only be set for type-only imports. ++/index.ts(1,45): error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. +/index.ts(2,15): error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. +/index.ts(2,44): error TS1454: `resolution-mode` can only be set for type-only imports. ++/index.ts(2,44): error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. /index.ts(6,50): error TS1454: `resolution-mode` can only be set for type-only imports. ++/index.ts(6,50): error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. +/index.ts(7,14): error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. /index.ts(7,49): error TS1454: `resolution-mode` can only be set for type-only imports. ++/index.ts(7,49): error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. +/index.ts(10,45): error TS1454: `resolution-mode` can only be set for type-only imports. ++/index.ts(10,45): error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. +/index.ts(11,15): error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. +/index.ts(11,44): error TS1454: `resolution-mode` can only be set for type-only imports. ++/index.ts(11,44): error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. -==== /index.ts (3 errors) ==== -+==== /index.ts (9 errors) ==== ++==== /index.ts (15 errors) ==== import type { RequireInterface } from "pkg" assert { "resolution-mode": "require" }; + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS1454: `resolution-mode` can only be set for type-only imports. ++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ++!!! error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. import type { ImportInterface } from "pkg" assert { "resolution-mode": "import" }; + ~~~~~~~~~~~~~~~ +!!! error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS1454: `resolution-mode` can only be set for type-only imports. ++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ++!!! error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. export interface LocalInterface extends RequireInterface, ImportInterface {} @@ -31,21 +41,29 @@ -!!! error TS2305: Module '"pkg"' has no exported member 'RequireInterface'. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS1454: `resolution-mode` can only be set for type-only imports. ++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ++!!! error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. import {type ImportInterface as Imp} from "pkg" assert { "resolution-mode": "import" }; + ~~~~~~~~~~~~~~~ +!!! error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS1454: `resolution-mode` can only be set for type-only imports. ++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ++!!! error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. export interface Loc extends Req, Imp {} export type { RequireInterface } from "pkg" assert { "resolution-mode": "require" }; + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS1454: `resolution-mode` can only be set for type-only imports. ++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ++!!! error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. export type { ImportInterface } from "pkg" assert { "resolution-mode": "import" }; + ~~~~~~~~~~~~~~~ +!!! error TS2305: Module '"/node_modules/pkg/require"' has no exported member 'ImportInterface'. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS1454: `resolution-mode` can only be set for type-only imports. ++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ++!!! error TS2836: Import assertions are not allowed on statements that compile to CommonJS 'require' calls. ==== /node_modules/pkg/package.json (0 errors) ==== { diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=node16).errors.txt b/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=node16).errors.txt index a5ec1a567a..262511f8f6 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=node16).errors.txt +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=node16).errors.txt @@ -1,11 +1,13 @@ index.cts(5,33): error TS2339: Property 'name' does not exist on type 'string'. index.mts(1,34): error TS2823: Import attributes are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'. index.mts(3,38): error TS2823: Import attributes are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'. +index.mts(5,33): error TS2339: Property 'name' does not exist on type 'string'. index.ts(1,34): error TS2823: Import attributes are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'. index.ts(3,38): error TS2823: Import attributes are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'. +index.ts(5,33): error TS2339: Property 'name' does not exist on type 'string'. -==== index.ts (2 errors) ==== +==== index.ts (3 errors) ==== import pkg from "./package.json" with { type: "json" }; ~~~~~~~~~~~~~~~~~~~~~ !!! error TS2823: Import attributes are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'. @@ -15,6 +17,8 @@ index.ts(3,38): error TS2823: Import attributes are only supported when the '--m !!! error TS2823: Import attributes are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'. export const thing = ns; export const name2 = ns.default.name; + ~~~~ +!!! error TS2339: Property 'name' does not exist on type 'string'. ==== index.cts (1 errors) ==== import pkg from "./package.json"; export const name = pkg.name; @@ -23,7 +27,7 @@ index.ts(3,38): error TS2823: Import attributes are only supported when the '--m export const name2 = ns.default.name; ~~~~ !!! error TS2339: Property 'name' does not exist on type 'string'. -==== index.mts (2 errors) ==== +==== index.mts (3 errors) ==== import pkg from "./package.json" with { type: "json" }; ~~~~~~~~~~~~~~~~~~~~~ !!! error TS2823: Import attributes are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'. @@ -33,6 +37,8 @@ index.ts(3,38): error TS2823: Import attributes are only supported when the '--m !!! error TS2823: Import attributes are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'. export const thing = ns; export const name2 = ns.default.name; + ~~~~ +!!! error TS2339: Property 'name' does not exist on type 'string'. ==== package.json (0 errors) ==== { "name": "pkg", diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=node16).errors.txt.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=node16).errors.txt.diff index 782136541f..44db5aa3bc 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=node16).errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=node16).errors.txt.diff @@ -4,20 +4,43 @@ +index.cts(5,33): error TS2339: Property 'name' does not exist on type 'string'. index.mts(1,34): error TS2823: Import attributes are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'. index.mts(3,38): error TS2823: Import attributes are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'. ++index.mts(5,33): error TS2339: Property 'name' does not exist on type 'string'. index.ts(1,34): error TS2823: Import attributes are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'. -@@= skipped -13, +14 lines =@@ + index.ts(3,38): error TS2823: Import attributes are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'. ++index.ts(5,33): error TS2339: Property 'name' does not exist on type 'string'. + + +-==== index.ts (2 errors) ==== ++==== index.ts (3 errors) ==== + import pkg from "./package.json" with { type: "json" }; + ~~~~~~~~~~~~~~~~~~~~~ + !!! error TS2823: Import attributes are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'. +@@= skipped -13, +16 lines =@@ !!! error TS2823: Import attributes are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'. export const thing = ns; export const name2 = ns.default.name; -==== index.cts (0 errors) ==== ++ ~~~~ ++!!! error TS2339: Property 'name' does not exist on type 'string'. +==== index.cts (1 errors) ==== import pkg from "./package.json"; export const name = pkg.name; import * as ns from "./package.json"; export const thing = ns; export const name2 = ns.default.name; +-==== index.mts (2 errors) ==== + ~~~~ +!!! error TS2339: Property 'name' does not exist on type 'string'. - ==== index.mts (2 errors) ==== ++==== index.mts (3 errors) ==== import pkg from "./package.json" with { type: "json" }; ~~~~~~~~~~~~~~~~~~~~~ + !!! error TS2823: Import attributes are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'. +@@= skipped -16, +20 lines =@@ + !!! error TS2823: Import attributes are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'. + export const thing = ns; + export const name2 = ns.default.name; ++ ~~~~ ++!!! error TS2339: Property 'name' does not exist on type 'string'. + ==== package.json (0 errors) ==== + { + "name": "pkg", diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=node16).symbols b/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=node16).symbols index cf7756f81c..609d7f9ac3 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=node16).symbols +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=node16).symbols @@ -19,11 +19,9 @@ export const thing = ns; export const name2 = ns.default.name; >name2 : Symbol(name2, Decl(index.ts, 4, 12)) ->ns.default.name : Symbol(name, Decl(package.json, 0, 1)) ->ns.default : Symbol(default) +>ns.default : Symbol(default, Decl(package.json, 3, 21)) >ns : Symbol(ns, Decl(index.ts, 2, 6)) ->default : Symbol(default) ->name : Symbol(name, Decl(package.json, 0, 1)) +>default : Symbol(default, Decl(package.json, 3, 21)) === index.cts === import pkg from "./package.json"; @@ -67,11 +65,9 @@ export const thing = ns; export const name2 = ns.default.name; >name2 : Symbol(name2, Decl(index.mts, 4, 12)) ->ns.default.name : Symbol(name, Decl(package.json, 0, 1)) ->ns.default : Symbol(default) +>ns.default : Symbol(default, Decl(package.json, 3, 21)) >ns : Symbol(ns, Decl(index.mts, 2, 6)) ->default : Symbol(default) ->name : Symbol(name, Decl(package.json, 0, 1)) +>default : Symbol(default, Decl(package.json, 3, 21)) === package.json === { diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=node16).symbols.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=node16).symbols.diff index 0ee8ec7b38..7dfb69d859 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=node16).symbols.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=node16).symbols.diff @@ -18,17 +18,15 @@ >name2 : Symbol(name2, Decl(index.ts, 4, 12)) ->ns.default.name : Symbol("name", Decl(package.json, 0, 1)) ->ns.default : Symbol("package") -+>ns.default.name : Symbol(name, Decl(package.json, 0, 1)) -+>ns.default : Symbol(default) ++>ns.default : Symbol(default, Decl(package.json, 3, 21)) >ns : Symbol(ns, Decl(index.ts, 2, 6)) ->default : Symbol("package") ->name : Symbol("name", Decl(package.json, 0, 1)) -+>default : Symbol(default) -+>name : Symbol(name, Decl(package.json, 0, 1)) ++>default : Symbol(default, Decl(package.json, 3, 21)) === index.cts === import pkg from "./package.json"; -@@= skipped -12, +12 lines =@@ +@@= skipped -12, +10 lines =@@ export const name = pkg.name; >name : Symbol(name, Decl(index.cts, 1, 12)) @@ -72,13 +70,11 @@ >name2 : Symbol(name2, Decl(index.mts, 4, 12)) ->ns.default.name : Symbol("name", Decl(package.json, 0, 1)) ->ns.default : Symbol("package") -+>ns.default.name : Symbol(name, Decl(package.json, 0, 1)) -+>ns.default : Symbol(default) ++>ns.default : Symbol(default, Decl(package.json, 3, 21)) >ns : Symbol(ns, Decl(index.mts, 2, 6)) ->default : Symbol("package") ->name : Symbol("name", Decl(package.json, 0, 1)) -+>default : Symbol(default) -+>name : Symbol(name, Decl(package.json, 0, 1)) ++>default : Symbol(default, Decl(package.json, 3, 21)) === package.json === { diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=node16).types b/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=node16).types index 8fd2b5dc73..016230ef6f 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=node16).types +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=node16).types @@ -12,20 +12,20 @@ export const name = pkg.name; >name : string import * as ns from "./package.json" with { type: "json" }; ->ns : { default: { name: string; version: string; type: string; default: string; }; } +>ns : { name: string; version: string; type: string; default: string; } >type : any export const thing = ns; ->thing : { default: { name: string; version: string; type: string; default: string; }; } ->ns : { default: { name: string; version: string; type: string; default: string; }; } +>thing : { name: string; version: string; type: string; default: string; } +>ns : { name: string; version: string; type: string; default: string; } export const name2 = ns.default.name; ->name2 : string ->ns.default.name : string ->ns.default : { name: string; version: string; type: string; default: string; } ->ns : { default: { name: string; version: string; type: string; default: string; }; } ->default : { name: string; version: string; type: string; default: string; } ->name : string +>name2 : any +>ns.default.name : any +>ns.default : string +>ns : { name: string; version: string; type: string; default: string; } +>default : string +>name : any === index.cts === import pkg from "./package.json"; @@ -64,20 +64,20 @@ export const name = pkg.name; >name : string import * as ns from "./package.json" with { type: "json" }; ->ns : { default: { name: string; version: string; type: string; default: string; }; } +>ns : { name: string; version: string; type: string; default: string; } >type : any export const thing = ns; ->thing : { default: { name: string; version: string; type: string; default: string; }; } ->ns : { default: { name: string; version: string; type: string; default: string; }; } +>thing : { name: string; version: string; type: string; default: string; } +>ns : { name: string; version: string; type: string; default: string; } export const name2 = ns.default.name; ->name2 : string ->ns.default.name : string ->ns.default : { name: string; version: string; type: string; default: string; } ->ns : { default: { name: string; version: string; type: string; default: string; }; } ->default : { name: string; version: string; type: string; default: string; } ->name : string +>name2 : any +>ns.default.name : any +>ns.default : string +>ns : { name: string; version: string; type: string; default: string; } +>default : string +>name : any === package.json === { diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=node16).types.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=node16).types.diff index b1f3da3287..3f3db6d145 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=node16).types.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=node16).types.diff @@ -1,6 +1,36 @@ --- old.nodeModulesResolveJsonModule(module=node16).types +++ new.nodeModulesResolveJsonModule(module=node16).types -@@= skipped -37, +37 lines =@@ +@@= skipped -11, +11 lines =@@ + >name : string + + import * as ns from "./package.json" with { type: "json" }; +->ns : { default: { name: string; version: string; type: string; default: string; }; } ++>ns : { name: string; version: string; type: string; default: string; } + >type : any + + export const thing = ns; +->thing : { default: { name: string; version: string; type: string; default: string; }; } +->ns : { default: { name: string; version: string; type: string; default: string; }; } ++>thing : { name: string; version: string; type: string; default: string; } ++>ns : { name: string; version: string; type: string; default: string; } + + export const name2 = ns.default.name; +->name2 : string +->ns.default.name : string +->ns.default : { name: string; version: string; type: string; default: string; } +->ns : { default: { name: string; version: string; type: string; default: string; }; } +->default : { name: string; version: string; type: string; default: string; } +->name : string ++>name2 : any ++>ns.default.name : any ++>ns.default : string ++>ns : { name: string; version: string; type: string; default: string; } ++>default : string ++>name : any + + === index.cts === + import pkg from "./package.json"; +@@= skipped -26, +26 lines =@@ >name : string import * as ns from "./package.json"; @@ -29,3 +59,33 @@ === index.mts === import pkg from "./package.json" with { type: "json" }; +@@= skipped -26, +26 lines =@@ + >name : string + + import * as ns from "./package.json" with { type: "json" }; +->ns : { default: { name: string; version: string; type: string; default: string; }; } ++>ns : { name: string; version: string; type: string; default: string; } + >type : any + + export const thing = ns; +->thing : { default: { name: string; version: string; type: string; default: string; }; } +->ns : { default: { name: string; version: string; type: string; default: string; }; } ++>thing : { name: string; version: string; type: string; default: string; } ++>ns : { name: string; version: string; type: string; default: string; } + + export const name2 = ns.default.name; +->name2 : string +->ns.default.name : string +->ns.default : { name: string; version: string; type: string; default: string; } +->ns : { default: { name: string; version: string; type: string; default: string; }; } +->default : { name: string; version: string; type: string; default: string; } +->name : string ++>name2 : any ++>ns.default.name : any ++>ns.default : string ++>ns : { name: string; version: string; type: string; default: string; } ++>default : string ++>name : any + + === package.json === + { diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=nodenext).errors.txt b/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=nodenext).errors.txt index 10ebcd6562..96d31a39cb 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=nodenext).errors.txt +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=nodenext).errors.txt @@ -1,12 +1,24 @@ index.cts(5,33): error TS2339: Property 'name' does not exist on type 'string'. +index.mts(1,34): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. +index.mts(3,38): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. +index.mts(5,33): error TS2339: Property 'name' does not exist on type 'string'. +index.ts(1,34): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. +index.ts(3,38): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. +index.ts(5,33): error TS2339: Property 'name' does not exist on type 'string'. -==== index.ts (0 errors) ==== +==== index.ts (3 errors) ==== import pkg from "./package.json" with { type: "json" }; + ~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. export const name = pkg.name; import * as ns from "./package.json" with { type: "json" }; + ~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. export const thing = ns; export const name2 = ns.default.name; + ~~~~ +!!! error TS2339: Property 'name' does not exist on type 'string'. ==== index.cts (1 errors) ==== import pkg from "./package.json"; export const name = pkg.name; @@ -15,12 +27,18 @@ index.cts(5,33): error TS2339: Property 'name' does not exist on type 'string'. export const name2 = ns.default.name; ~~~~ !!! error TS2339: Property 'name' does not exist on type 'string'. -==== index.mts (0 errors) ==== +==== index.mts (3 errors) ==== import pkg from "./package.json" with { type: "json" }; + ~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. export const name = pkg.name; import * as ns from "./package.json" with { type: "json" }; + ~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. export const thing = ns; export const name2 = ns.default.name; + ~~~~ +!!! error TS2339: Property 'name' does not exist on type 'string'. ==== package.json (0 errors) ==== { "name": "pkg", diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=nodenext).errors.txt.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=nodenext).errors.txt.diff index abae0dff61..b56bccce22 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=nodenext).errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=nodenext).errors.txt.diff @@ -4,14 +4,26 @@ - @@= skipped --1, +1 lines =@@ +index.cts(5,33): error TS2339: Property 'name' does not exist on type 'string'. ++index.mts(1,34): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. ++index.mts(3,38): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. ++index.mts(5,33): error TS2339: Property 'name' does not exist on type 'string'. ++index.ts(1,34): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. ++index.ts(3,38): error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. ++index.ts(5,33): error TS2339: Property 'name' does not exist on type 'string'. + + -+==== index.ts (0 errors) ==== ++==== index.ts (3 errors) ==== + import pkg from "./package.json" with { type: "json" }; ++ ~~~~~~~~~~~~~~~~~~~~~ ++!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. + export const name = pkg.name; + import * as ns from "./package.json" with { type: "json" }; ++ ~~~~~~~~~~~~~~~~~~~~~ ++!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. + export const thing = ns; + export const name2 = ns.default.name; ++ ~~~~ ++!!! error TS2339: Property 'name' does not exist on type 'string'. +==== index.cts (1 errors) ==== + import pkg from "./package.json"; + export const name = pkg.name; @@ -20,12 +32,18 @@ + export const name2 = ns.default.name; + ~~~~ +!!! error TS2339: Property 'name' does not exist on type 'string'. -+==== index.mts (0 errors) ==== ++==== index.mts (3 errors) ==== + import pkg from "./package.json" with { type: "json" }; ++ ~~~~~~~~~~~~~~~~~~~~~ ++!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. + export const name = pkg.name; + import * as ns from "./package.json" with { type: "json" }; ++ ~~~~~~~~~~~~~~~~~~~~~ ++!!! error TS2856: Import attributes are not allowed on statements that compile to CommonJS 'require' calls. + export const thing = ns; + export const name2 = ns.default.name; ++ ~~~~ ++!!! error TS2339: Property 'name' does not exist on type 'string'. +==== package.json (0 errors) ==== + { + "name": "pkg", diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=nodenext).symbols b/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=nodenext).symbols index cf7756f81c..609d7f9ac3 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=nodenext).symbols +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=nodenext).symbols @@ -19,11 +19,9 @@ export const thing = ns; export const name2 = ns.default.name; >name2 : Symbol(name2, Decl(index.ts, 4, 12)) ->ns.default.name : Symbol(name, Decl(package.json, 0, 1)) ->ns.default : Symbol(default) +>ns.default : Symbol(default, Decl(package.json, 3, 21)) >ns : Symbol(ns, Decl(index.ts, 2, 6)) ->default : Symbol(default) ->name : Symbol(name, Decl(package.json, 0, 1)) +>default : Symbol(default, Decl(package.json, 3, 21)) === index.cts === import pkg from "./package.json"; @@ -67,11 +65,9 @@ export const thing = ns; export const name2 = ns.default.name; >name2 : Symbol(name2, Decl(index.mts, 4, 12)) ->ns.default.name : Symbol(name, Decl(package.json, 0, 1)) ->ns.default : Symbol(default) +>ns.default : Symbol(default, Decl(package.json, 3, 21)) >ns : Symbol(ns, Decl(index.mts, 2, 6)) ->default : Symbol(default) ->name : Symbol(name, Decl(package.json, 0, 1)) +>default : Symbol(default, Decl(package.json, 3, 21)) === package.json === { diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=nodenext).symbols.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=nodenext).symbols.diff index 2e0b0e18ab..8b6f89c946 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=nodenext).symbols.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=nodenext).symbols.diff @@ -18,17 +18,15 @@ >name2 : Symbol(name2, Decl(index.ts, 4, 12)) ->ns.default.name : Symbol("name", Decl(package.json, 0, 1)) ->ns.default : Symbol("package") -+>ns.default.name : Symbol(name, Decl(package.json, 0, 1)) -+>ns.default : Symbol(default) ++>ns.default : Symbol(default, Decl(package.json, 3, 21)) >ns : Symbol(ns, Decl(index.ts, 2, 6)) ->default : Symbol("package") ->name : Symbol("name", Decl(package.json, 0, 1)) -+>default : Symbol(default) -+>name : Symbol(name, Decl(package.json, 0, 1)) ++>default : Symbol(default, Decl(package.json, 3, 21)) === index.cts === import pkg from "./package.json"; -@@= skipped -12, +12 lines =@@ +@@= skipped -12, +10 lines =@@ export const name = pkg.name; >name : Symbol(name, Decl(index.cts, 1, 12)) @@ -72,13 +70,11 @@ >name2 : Symbol(name2, Decl(index.mts, 4, 12)) ->ns.default.name : Symbol("name", Decl(package.json, 0, 1)) ->ns.default : Symbol("package") -+>ns.default.name : Symbol(name, Decl(package.json, 0, 1)) -+>ns.default : Symbol(default) ++>ns.default : Symbol(default, Decl(package.json, 3, 21)) >ns : Symbol(ns, Decl(index.mts, 2, 6)) ->default : Symbol("package") ->name : Symbol("name", Decl(package.json, 0, 1)) -+>default : Symbol(default) -+>name : Symbol(name, Decl(package.json, 0, 1)) ++>default : Symbol(default, Decl(package.json, 3, 21)) === package.json === { diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=nodenext).types b/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=nodenext).types index 8fd2b5dc73..016230ef6f 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=nodenext).types +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=nodenext).types @@ -12,20 +12,20 @@ export const name = pkg.name; >name : string import * as ns from "./package.json" with { type: "json" }; ->ns : { default: { name: string; version: string; type: string; default: string; }; } +>ns : { name: string; version: string; type: string; default: string; } >type : any export const thing = ns; ->thing : { default: { name: string; version: string; type: string; default: string; }; } ->ns : { default: { name: string; version: string; type: string; default: string; }; } +>thing : { name: string; version: string; type: string; default: string; } +>ns : { name: string; version: string; type: string; default: string; } export const name2 = ns.default.name; ->name2 : string ->ns.default.name : string ->ns.default : { name: string; version: string; type: string; default: string; } ->ns : { default: { name: string; version: string; type: string; default: string; }; } ->default : { name: string; version: string; type: string; default: string; } ->name : string +>name2 : any +>ns.default.name : any +>ns.default : string +>ns : { name: string; version: string; type: string; default: string; } +>default : string +>name : any === index.cts === import pkg from "./package.json"; @@ -64,20 +64,20 @@ export const name = pkg.name; >name : string import * as ns from "./package.json" with { type: "json" }; ->ns : { default: { name: string; version: string; type: string; default: string; }; } +>ns : { name: string; version: string; type: string; default: string; } >type : any export const thing = ns; ->thing : { default: { name: string; version: string; type: string; default: string; }; } ->ns : { default: { name: string; version: string; type: string; default: string; }; } +>thing : { name: string; version: string; type: string; default: string; } +>ns : { name: string; version: string; type: string; default: string; } export const name2 = ns.default.name; ->name2 : string ->ns.default.name : string ->ns.default : { name: string; version: string; type: string; default: string; } ->ns : { default: { name: string; version: string; type: string; default: string; }; } ->default : { name: string; version: string; type: string; default: string; } ->name : string +>name2 : any +>ns.default.name : any +>ns.default : string +>ns : { name: string; version: string; type: string; default: string; } +>default : string +>name : any === package.json === { diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=nodenext).types.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=nodenext).types.diff index f6392fd166..3682e8780e 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=nodenext).types.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=nodenext).types.diff @@ -9,16 +9,38 @@ export const name = pkg.name; >name : string -@@= skipped -10, +10 lines =@@ +@@= skipped -9, +9 lines =@@ + >name : string import * as ns from "./package.json" with { type: "json" }; - >ns : { default: { name: string; version: string; type: string; default: string; }; } +->ns : { default: { name: string; version: string; type: string; default: string; }; } ->type : error ++>ns : { name: string; version: string; type: string; default: string; } +>type : any export const thing = ns; - >thing : { default: { name: string; version: string; type: string; default: string; }; } -@@= skipped -25, +25 lines =@@ +->thing : { default: { name: string; version: string; type: string; default: string; }; } +->ns : { default: { name: string; version: string; type: string; default: string; }; } ++>thing : { name: string; version: string; type: string; default: string; } ++>ns : { name: string; version: string; type: string; default: string; } + + export const name2 = ns.default.name; +->name2 : string +->ns.default.name : string +->ns.default : { name: string; version: string; type: string; default: string; } +->ns : { default: { name: string; version: string; type: string; default: string; }; } +->default : { name: string; version: string; type: string; default: string; } +->name : string ++>name2 : any ++>ns.default.name : any ++>ns.default : string ++>ns : { name: string; version: string; type: string; default: string; } ++>default : string ++>name : any + + === index.cts === + import pkg from "./package.json"; +@@= skipped -26, +26 lines =@@ >name : string import * as ns from "./package.json"; @@ -53,12 +75,34 @@ export const name = pkg.name; >name : string -@@= skipped -27, +27 lines =@@ +@@= skipped -26, +26 lines =@@ + >name : string import * as ns from "./package.json" with { type: "json" }; - >ns : { default: { name: string; version: string; type: string; default: string; }; } +->ns : { default: { name: string; version: string; type: string; default: string; }; } ->type : error ++>ns : { name: string; version: string; type: string; default: string; } +>type : any export const thing = ns; - >thing : { default: { name: string; version: string; type: string; default: string; }; } +->thing : { default: { name: string; version: string; type: string; default: string; }; } +->ns : { default: { name: string; version: string; type: string; default: string; }; } ++>thing : { name: string; version: string; type: string; default: string; } ++>ns : { name: string; version: string; type: string; default: string; } + + export const name2 = ns.default.name; +->name2 : string +->ns.default.name : string +->ns.default : { name: string; version: string; type: string; default: string; } +->ns : { default: { name: string; version: string; type: string; default: string; }; } +->default : { name: string; version: string; type: string; default: string; } +->name : string ++>name2 : any ++>ns.default.name : any ++>ns.default : string ++>ns : { name: string; version: string; type: string; default: string; } ++>default : string ++>name : any + + === package.json === + { diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesSynchronousCallErrors(module=node16).types b/testdata/baselines/reference/submodule/conformance/nodeModulesSynchronousCallErrors(module=node16).types index 080ae7e227..f344e2e0c9 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesSynchronousCallErrors(module=node16).types +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesSynchronousCallErrors(module=node16).types @@ -25,9 +25,9 @@ export async function f() { >"../index.js" : "../index.js" const mod4 = await import ("./index.js"); ->mod4 : { f: () => Promise; default: typeof import("subfolder/index"); } ->await import ("./index.js") : { f: () => Promise; default: typeof import("subfolder/index"); } ->import ("./index.js") : Promise<{ f: () => Promise; default: typeof import("subfolder/index"); }> +>mod4 : typeof import("subfolder/index") +>await import ("./index.js") : typeof import("subfolder/index") +>import ("./index.js") : Promise >"./index.js" : "./index.js" h(); @@ -59,9 +59,9 @@ export async function h() { >"./index.js" : "./index.js" const mod4 = await import ("./subfolder/index.js"); ->mod4 : { f: () => Promise; default: typeof import("subfolder/index"); } ->await import ("./subfolder/index.js") : { f: () => Promise; default: typeof import("subfolder/index"); } ->import ("./subfolder/index.js") : Promise<{ f: () => Promise; default: typeof import("subfolder/index"); }> +>mod4 : typeof import("subfolder/index") +>await import ("./subfolder/index.js") : typeof import("subfolder/index") +>import ("./subfolder/index.js") : Promise >"./subfolder/index.js" : "./subfolder/index.js" f(); diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesSynchronousCallErrors(module=node16).types.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesSynchronousCallErrors(module=node16).types.diff index 031e02fc3a..529271bc97 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesSynchronousCallErrors(module=node16).types.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesSynchronousCallErrors(module=node16).types.diff @@ -31,9 +31,9 @@ ->mod4 : { default: typeof mod2; f(): Promise; } ->await import ("./index.js") : { default: typeof mod2; f(): Promise; } ->import ("./index.js") : Promise<{ default: typeof mod2; f(): Promise; }> -+>mod4 : { f: () => Promise; default: typeof import("subfolder/index"); } -+>await import ("./index.js") : { f: () => Promise; default: typeof import("subfolder/index"); } -+>import ("./index.js") : Promise<{ f: () => Promise; default: typeof import("subfolder/index"); }> ++>mod4 : typeof import("subfolder/index") ++>await import ("./index.js") : typeof import("subfolder/index") ++>import ("./index.js") : Promise >"./index.js" : "./index.js" h(); @@ -67,9 +67,9 @@ ->mod4 : { default: typeof mod2; f(): Promise; } ->await import ("./subfolder/index.js") : { default: typeof mod2; f(): Promise; } ->import ("./subfolder/index.js") : Promise<{ default: typeof mod2; f(): Promise; }> -+>mod4 : { f: () => Promise; default: typeof import("subfolder/index"); } -+>await import ("./subfolder/index.js") : { f: () => Promise; default: typeof import("subfolder/index"); } -+>import ("./subfolder/index.js") : Promise<{ f: () => Promise; default: typeof import("subfolder/index"); }> ++>mod4 : typeof import("subfolder/index") ++>await import ("./subfolder/index.js") : typeof import("subfolder/index") ++>import ("./subfolder/index.js") : Promise >"./subfolder/index.js" : "./subfolder/index.js" f(); diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesSynchronousCallErrors(module=nodenext).types b/testdata/baselines/reference/submodule/conformance/nodeModulesSynchronousCallErrors(module=nodenext).types index 080ae7e227..f344e2e0c9 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesSynchronousCallErrors(module=nodenext).types +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesSynchronousCallErrors(module=nodenext).types @@ -25,9 +25,9 @@ export async function f() { >"../index.js" : "../index.js" const mod4 = await import ("./index.js"); ->mod4 : { f: () => Promise; default: typeof import("subfolder/index"); } ->await import ("./index.js") : { f: () => Promise; default: typeof import("subfolder/index"); } ->import ("./index.js") : Promise<{ f: () => Promise; default: typeof import("subfolder/index"); }> +>mod4 : typeof import("subfolder/index") +>await import ("./index.js") : typeof import("subfolder/index") +>import ("./index.js") : Promise >"./index.js" : "./index.js" h(); @@ -59,9 +59,9 @@ export async function h() { >"./index.js" : "./index.js" const mod4 = await import ("./subfolder/index.js"); ->mod4 : { f: () => Promise; default: typeof import("subfolder/index"); } ->await import ("./subfolder/index.js") : { f: () => Promise; default: typeof import("subfolder/index"); } ->import ("./subfolder/index.js") : Promise<{ f: () => Promise; default: typeof import("subfolder/index"); }> +>mod4 : typeof import("subfolder/index") +>await import ("./subfolder/index.js") : typeof import("subfolder/index") +>import ("./subfolder/index.js") : Promise >"./subfolder/index.js" : "./subfolder/index.js" f(); diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesSynchronousCallErrors(module=nodenext).types.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesSynchronousCallErrors(module=nodenext).types.diff index 38f3cc4b55..14a785cb8a 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesSynchronousCallErrors(module=nodenext).types.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesSynchronousCallErrors(module=nodenext).types.diff @@ -31,9 +31,9 @@ ->mod4 : { default: typeof mod2; f(): Promise; } ->await import ("./index.js") : { default: typeof mod2; f(): Promise; } ->import ("./index.js") : Promise<{ default: typeof mod2; f(): Promise; }> -+>mod4 : { f: () => Promise; default: typeof import("subfolder/index"); } -+>await import ("./index.js") : { f: () => Promise; default: typeof import("subfolder/index"); } -+>import ("./index.js") : Promise<{ f: () => Promise; default: typeof import("subfolder/index"); }> ++>mod4 : typeof import("subfolder/index") ++>await import ("./index.js") : typeof import("subfolder/index") ++>import ("./index.js") : Promise >"./index.js" : "./index.js" h(); @@ -67,9 +67,9 @@ ->mod4 : { default: typeof mod2; f(): Promise; } ->await import ("./subfolder/index.js") : { default: typeof mod2; f(): Promise; } ->import ("./subfolder/index.js") : Promise<{ default: typeof mod2; f(): Promise; }> -+>mod4 : { f: () => Promise; default: typeof import("subfolder/index"); } -+>await import ("./subfolder/index.js") : { f: () => Promise; default: typeof import("subfolder/index"); } -+>import ("./subfolder/index.js") : Promise<{ f: () => Promise; default: typeof import("subfolder/index"); }> ++>mod4 : typeof import("subfolder/index") ++>await import ("./subfolder/index.js") : typeof import("subfolder/index") ++>import ("./subfolder/index.js") : Promise >"./subfolder/index.js" : "./subfolder/index.js" f(); diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesTopLevelAwait(module=node16).errors.txt b/testdata/baselines/reference/submodule/conformance/nodeModulesTopLevelAwait(module=node16).errors.txt index 3a11425d12..bde172d3b2 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesTopLevelAwait(module=node16).errors.txt +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesTopLevelAwait(module=node16).errors.txt @@ -1,18 +1,18 @@ index.ts(2,11): error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. index.ts(4,5): error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. -subfolder/index.ts(2,11): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. -subfolder/index.ts(4,5): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. +subfolder/index.ts(2,11): error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. +subfolder/index.ts(4,5): error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. ==== subfolder/index.ts (2 errors) ==== // cjs format file const x = await 1; ~~~~~ -!!! error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. +!!! error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. export {x}; for await (const y of []) {} ~~~~~ -!!! error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. +!!! error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. ==== index.ts (2 errors) ==== // esm format file const x = await 1; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesTopLevelAwait(module=node16).errors.txt.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesTopLevelAwait(module=node16).errors.txt.diff index ba9340836a..eca066cf58 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesTopLevelAwait(module=node16).errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesTopLevelAwait(module=node16).errors.txt.diff @@ -1,16 +1,26 @@ --- old.nodeModulesTopLevelAwait(module=node16).errors.txt +++ new.nodeModulesTopLevelAwait(module=node16).errors.txt @@= skipped -0, +0 lines =@@ +-subfolder/index.ts(2,11): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. +-subfolder/index.ts(4,5): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. +index.ts(2,11): error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. +index.ts(4,5): error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. - subfolder/index.ts(2,11): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. - subfolder/index.ts(4,5): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. ++subfolder/index.ts(2,11): error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. ++subfolder/index.ts(4,5): error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. -@@= skipped -10, +12 lines =@@ + + ==== subfolder/index.ts (2 errors) ==== + // cjs format file + const x = await 1; + ~~~~~ +-!!! error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. ++!!! error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. + export {x}; for await (const y of []) {} ~~~~~ - !!! error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. +-!!! error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. -==== index.ts (0 errors) ==== ++!!! error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. +==== index.ts (2 errors) ==== // esm format file const x = await 1; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesTopLevelAwait(module=nodenext).errors.txt b/testdata/baselines/reference/submodule/conformance/nodeModulesTopLevelAwait(module=nodenext).errors.txt index 3a11425d12..bde172d3b2 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesTopLevelAwait(module=nodenext).errors.txt +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesTopLevelAwait(module=nodenext).errors.txt @@ -1,18 +1,18 @@ index.ts(2,11): error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. index.ts(4,5): error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. -subfolder/index.ts(2,11): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. -subfolder/index.ts(4,5): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. +subfolder/index.ts(2,11): error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. +subfolder/index.ts(4,5): error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. ==== subfolder/index.ts (2 errors) ==== // cjs format file const x = await 1; ~~~~~ -!!! error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. +!!! error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. export {x}; for await (const y of []) {} ~~~~~ -!!! error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. +!!! error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. ==== index.ts (2 errors) ==== // esm format file const x = await 1; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesTopLevelAwait(module=nodenext).errors.txt.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesTopLevelAwait(module=nodenext).errors.txt.diff index 9dd8637042..2de2cd7757 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesTopLevelAwait(module=nodenext).errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesTopLevelAwait(module=nodenext).errors.txt.diff @@ -1,16 +1,26 @@ --- old.nodeModulesTopLevelAwait(module=nodenext).errors.txt +++ new.nodeModulesTopLevelAwait(module=nodenext).errors.txt @@= skipped -0, +0 lines =@@ +-subfolder/index.ts(2,11): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. +-subfolder/index.ts(4,5): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. +index.ts(2,11): error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. +index.ts(4,5): error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. - subfolder/index.ts(2,11): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. - subfolder/index.ts(4,5): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. ++subfolder/index.ts(2,11): error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. ++subfolder/index.ts(4,5): error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. -@@= skipped -10, +12 lines =@@ + + ==== subfolder/index.ts (2 errors) ==== + // cjs format file + const x = await 1; + ~~~~~ +-!!! error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. ++!!! error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. + export {x}; for await (const y of []) {} ~~~~~ - !!! error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. +-!!! error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. -==== index.ts (0 errors) ==== ++!!! error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. +==== index.ts (2 errors) ==== // esm format file const x = await 1; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=node16).errors.txt b/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=node16).errors.txt index cb66aee40e..d6ecea604b 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=node16).errors.txt +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=node16).errors.txt @@ -1,11 +1,14 @@ +/index.ts(4,28): error TS2339: Property 'default' does not exist on type 'RequireInterface'. /sub1/uses.ts(2,16): error TS2552: Cannot find name 'getInterI'. Did you mean 'getInterR'? -==== /index.ts (0 errors) ==== +==== /index.ts (1 errors) ==== // only an esm file can `import` both kinds of files import obj1 from "./sub1/uses.js" import obj2 from "./sub2/uses.js" export default [obj1, obj2.default] as const; + ~~~~~~~ +!!! error TS2339: Property 'default' does not exist on type 'RequireInterface'. ==== /node_modules/pkg/package.json (0 errors) ==== { "name": "pkg", diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=node16).errors.txt.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=node16).errors.txt.diff index be8b701382..8b181d94d3 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=node16).errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=node16).errors.txt.diff @@ -3,14 +3,17 @@ @@= skipped -0, +-1 lines =@@ - @@= skipped --1, +1 lines =@@ ++/index.ts(4,28): error TS2339: Property 'default' does not exist on type 'RequireInterface'. +/sub1/uses.ts(2,16): error TS2552: Cannot find name 'getInterI'. Did you mean 'getInterR'? + + -+==== /index.ts (0 errors) ==== ++==== /index.ts (1 errors) ==== + // only an esm file can `import` both kinds of files + import obj1 from "./sub1/uses.js" + import obj2 from "./sub2/uses.js" + export default [obj1, obj2.default] as const; ++ ~~~~~~~ ++!!! error TS2339: Property 'default' does not exist on type 'RequireInterface'. +==== /node_modules/pkg/package.json (0 errors) ==== + { + "name": "pkg", diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=node16).symbols b/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=node16).symbols index 34d06d7884..caebc3574f 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=node16).symbols +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=node16).symbols @@ -10,9 +10,7 @@ import obj2 from "./sub2/uses.js" export default [obj1, obj2.default] as const; >obj1 : Symbol(obj1, Decl(index.ts, 1, 6)) ->obj2.default : Symbol(default, Decl(uses.ts, 0, 0)) >obj2 : Symbol(obj2, Decl(index.ts, 2, 6)) ->default : Symbol(default, Decl(uses.ts, 0, 0)) >const : Symbol(const) === /node_modules/pkg/require.d.ts === diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=node16).symbols.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=node16).symbols.diff index 5ebe46a6e2..ac6812e2de 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=node16).symbols.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=node16).symbols.diff @@ -5,10 +5,8 @@ export default [obj1, obj2.default] as const; >obj1 : Symbol(obj1, Decl(index.ts, 1, 6)) ->obj2.default : Symbol(obj2.default, Decl(uses.ts, 0, 0)) -+>obj2.default : Symbol(default, Decl(uses.ts, 0, 0)) >obj2 : Symbol(obj2, Decl(index.ts, 2, 6)) ->default : Symbol(obj2.default, Decl(uses.ts, 0, 0)) -+>default : Symbol(default, Decl(uses.ts, 0, 0)) >const : Symbol(const) -=== /node_modules/pkg/import.d.ts === @@ -27,7 +25,7 @@ === /node_modules/pkg/require.d.ts === export {}; declare global { -@@= skipped -25, +12 lines =@@ +@@= skipped -25, +10 lines =@@ interface RequireInterface { _r: any; } >RequireInterface : Symbol(RequireInterface, Decl(require.d.ts, 1, 16)) diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=node16).types b/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=node16).types index 20a621929d..4ad321ffbe 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=node16).types +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=node16).types @@ -6,15 +6,15 @@ import obj1 from "./sub1/uses.js" >obj1 : any import obj2 from "./sub2/uses.js" ->obj2 : typeof import("/sub2/uses") +>obj2 : RequireInterface export default [obj1, obj2.default] as const; ->[obj1, obj2.default] as const : [any, RequireInterface] ->[obj1, obj2.default] : [any, RequireInterface] +>[obj1, obj2.default] as const : [any, any] +>[obj1, obj2.default] : [any, any] >obj1 : any ->obj2.default : RequireInterface ->obj2 : typeof import("/sub2/uses") ->default : RequireInterface +>obj2.default : any +>obj2 : RequireInterface +>default : any === /node_modules/pkg/require.d.ts === export {}; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=node16).types.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=node16).types.diff index a6a06b80de..abfa498090 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=node16).types.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=node16).types.diff @@ -9,19 +9,21 @@ import obj2 from "./sub2/uses.js" ->obj2 : typeof obj2 -+>obj2 : typeof import("/sub2/uses") ++>obj2 : RequireInterface export default [obj1, obj2.default] as const; ->[obj1, obj2.default] as const : readonly [ImportInterface, RequireInterface] ->[obj1, obj2.default] : readonly [ImportInterface, RequireInterface] ->obj1 : ImportInterface -+>[obj1, obj2.default] as const : [any, RequireInterface] -+>[obj1, obj2.default] : [any, RequireInterface] -+>obj1 : any - >obj2.default : RequireInterface +->obj2.default : RequireInterface ->obj2 : typeof obj2 -+>obj2 : typeof import("/sub2/uses") - >default : RequireInterface +->default : RequireInterface ++>[obj1, obj2.default] as const : [any, any] ++>[obj1, obj2.default] : [any, any] ++>obj1 : any ++>obj2.default : any ++>obj2 : RequireInterface ++>default : any -=== /node_modules/pkg/import.d.ts === -export {}; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=nodenext).errors.txt b/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=nodenext).errors.txt index cb66aee40e..d6ecea604b 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=nodenext).errors.txt +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=nodenext).errors.txt @@ -1,11 +1,14 @@ +/index.ts(4,28): error TS2339: Property 'default' does not exist on type 'RequireInterface'. /sub1/uses.ts(2,16): error TS2552: Cannot find name 'getInterI'. Did you mean 'getInterR'? -==== /index.ts (0 errors) ==== +==== /index.ts (1 errors) ==== // only an esm file can `import` both kinds of files import obj1 from "./sub1/uses.js" import obj2 from "./sub2/uses.js" export default [obj1, obj2.default] as const; + ~~~~~~~ +!!! error TS2339: Property 'default' does not exist on type 'RequireInterface'. ==== /node_modules/pkg/package.json (0 errors) ==== { "name": "pkg", diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=nodenext).errors.txt.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=nodenext).errors.txt.diff index 2dd186d295..1146b04e51 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=nodenext).errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=nodenext).errors.txt.diff @@ -3,14 +3,17 @@ @@= skipped -0, +-1 lines =@@ - @@= skipped --1, +1 lines =@@ ++/index.ts(4,28): error TS2339: Property 'default' does not exist on type 'RequireInterface'. +/sub1/uses.ts(2,16): error TS2552: Cannot find name 'getInterI'. Did you mean 'getInterR'? + + -+==== /index.ts (0 errors) ==== ++==== /index.ts (1 errors) ==== + // only an esm file can `import` both kinds of files + import obj1 from "./sub1/uses.js" + import obj2 from "./sub2/uses.js" + export default [obj1, obj2.default] as const; ++ ~~~~~~~ ++!!! error TS2339: Property 'default' does not exist on type 'RequireInterface'. +==== /node_modules/pkg/package.json (0 errors) ==== + { + "name": "pkg", diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=nodenext).symbols b/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=nodenext).symbols index 34d06d7884..caebc3574f 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=nodenext).symbols +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=nodenext).symbols @@ -10,9 +10,7 @@ import obj2 from "./sub2/uses.js" export default [obj1, obj2.default] as const; >obj1 : Symbol(obj1, Decl(index.ts, 1, 6)) ->obj2.default : Symbol(default, Decl(uses.ts, 0, 0)) >obj2 : Symbol(obj2, Decl(index.ts, 2, 6)) ->default : Symbol(default, Decl(uses.ts, 0, 0)) >const : Symbol(const) === /node_modules/pkg/require.d.ts === diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=nodenext).symbols.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=nodenext).symbols.diff index 8743e30fed..80dd9551b8 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=nodenext).symbols.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=nodenext).symbols.diff @@ -5,10 +5,8 @@ export default [obj1, obj2.default] as const; >obj1 : Symbol(obj1, Decl(index.ts, 1, 6)) ->obj2.default : Symbol(obj2.default, Decl(uses.ts, 0, 0)) -+>obj2.default : Symbol(default, Decl(uses.ts, 0, 0)) >obj2 : Symbol(obj2, Decl(index.ts, 2, 6)) ->default : Symbol(obj2.default, Decl(uses.ts, 0, 0)) -+>default : Symbol(default, Decl(uses.ts, 0, 0)) >const : Symbol(const) -=== /node_modules/pkg/import.d.ts === @@ -27,7 +25,7 @@ === /node_modules/pkg/require.d.ts === export {}; declare global { -@@= skipped -25, +12 lines =@@ +@@= skipped -25, +10 lines =@@ interface RequireInterface { _r: any; } >RequireInterface : Symbol(RequireInterface, Decl(require.d.ts, 1, 16)) diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=nodenext).types b/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=nodenext).types index 20a621929d..4ad321ffbe 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=nodenext).types +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=nodenext).types @@ -6,15 +6,15 @@ import obj1 from "./sub1/uses.js" >obj1 : any import obj2 from "./sub2/uses.js" ->obj2 : typeof import("/sub2/uses") +>obj2 : RequireInterface export default [obj1, obj2.default] as const; ->[obj1, obj2.default] as const : [any, RequireInterface] ->[obj1, obj2.default] : [any, RequireInterface] +>[obj1, obj2.default] as const : [any, any] +>[obj1, obj2.default] : [any, any] >obj1 : any ->obj2.default : RequireInterface ->obj2 : typeof import("/sub2/uses") ->default : RequireInterface +>obj2.default : any +>obj2 : RequireInterface +>default : any === /node_modules/pkg/require.d.ts === export {}; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=nodenext).types.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=nodenext).types.diff index 4559f1f25d..f3c21bc060 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=nodenext).types.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=nodenext).types.diff @@ -9,19 +9,21 @@ import obj2 from "./sub2/uses.js" ->obj2 : typeof obj2 -+>obj2 : typeof import("/sub2/uses") ++>obj2 : RequireInterface export default [obj1, obj2.default] as const; ->[obj1, obj2.default] as const : readonly [ImportInterface, RequireInterface] ->[obj1, obj2.default] : readonly [ImportInterface, RequireInterface] ->obj1 : ImportInterface -+>[obj1, obj2.default] as const : [any, RequireInterface] -+>[obj1, obj2.default] : [any, RequireInterface] -+>obj1 : any - >obj2.default : RequireInterface +->obj2.default : RequireInterface ->obj2 : typeof obj2 -+>obj2 : typeof import("/sub2/uses") - >default : RequireInterface +->default : RequireInterface ++>[obj1, obj2.default] as const : [any, any] ++>[obj1, obj2.default] : [any, any] ++>obj1 : any ++>obj2.default : any ++>obj2 : RequireInterface ++>default : any -=== /node_modules/pkg/import.d.ts === -export {}; From d1f5959015619ab7164512f71a9f42ab69727994 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=B3=C3=B0i=20Karlsson?= Date: Mon, 17 Mar 2025 02:48:04 +0100 Subject: [PATCH 04/30] Try a v3 with parser-set fields, keep hacking at it --- internal/ast/ast.go | 4 +- internal/ast/utilities.go | 8 +-- internal/astnav/tokens_test.go | 4 +- internal/binder/binder_test.go | 2 +- internal/compiler/fileloader.go | 2 +- internal/compiler/host.go | 35 ++++++++++-- internal/ls/host.go | 3 +- internal/ls/languageservice.go | 28 +++++++++- internal/parser/parser.go | 33 +++++++----- internal/parser/parser_test.go | 6 +-- internal/project/documentregistry.go | 4 +- internal/project/project.go | 7 ++- internal/testutil/harnessutil/harnessutil.go | 20 ++++--- .../testutil/parsetestutil/parsetestutil.go | 2 +- ...arationFileWithExportAssignment.errors.txt | 12 +++++ ...onFileWithExportAssignment.errors.txt.diff | 25 ++++----- .../compiler/modulePreserve4.errors.txt | 25 ++++++++- .../compiler/modulePreserve4.errors.txt.diff | 43 ++++++++------- ...ExportAssignment(module=node16).errors.txt | 5 +- ...tAssignment(module=node16).errors.txt.diff | 9 ++-- ...portAssignment(module=nodenext).errors.txt | 5 +- ...ssignment(module=nodenext).errors.txt.diff | 9 ++-- ...edNameCollisions(module=node16).errors.txt | 35 ++++++++++++ ...eCollisions(module=node16).errors.txt.diff | 54 ++++++------------- ...NameCollisions(module=nodenext).errors.txt | 35 ++++++++++++ ...ollisions(module=nodenext).errors.txt.diff | 54 ++++++------------- ...wJsTopLevelAwait(module=node16).errors.txt | 8 +-- ...pLevelAwait(module=node16).errors.txt.diff | 18 ++----- ...sTopLevelAwait(module=nodenext).errors.txt | 8 +-- ...evelAwait(module=nodenext).errors.txt.diff | 18 ++----- ...xportAssignments(module=node16).errors.txt | 5 +- ...Assignments(module=node16).errors.txt.diff | 17 ------ ...ortAssignments(module=nodenext).errors.txt | 5 +- ...signments(module=nodenext).errors.txt.diff | 17 ------ ...edNameCollisions(module=node16).errors.txt | 35 ++++++++++++ ...eCollisions(module=node16).errors.txt.diff | 54 ++++++------------- ...NameCollisions(module=nodenext).errors.txt | 35 ++++++++++++ ...ollisions(module=nodenext).errors.txt.diff | 54 ++++++------------- ...lesTopLevelAwait(module=node16).errors.txt | 8 +-- ...pLevelAwait(module=node16).errors.txt.diff | 18 ++----- ...sTopLevelAwait(module=nodenext).errors.txt | 8 +-- ...evelAwait(module=nodenext).errors.txt.diff | 18 ++----- 42 files changed, 441 insertions(+), 354 deletions(-) create mode 100644 testdata/baselines/reference/submodule/compiler/esmModeDeclarationFileWithExportAssignment.errors.txt create mode 100644 testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsGeneratedNameCollisions(module=node16).errors.txt create mode 100644 testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsGeneratedNameCollisions(module=nodenext).errors.txt delete mode 100644 testdata/baselines/reference/submodule/conformance/nodeModulesExportAssignments(module=node16).errors.txt.diff delete mode 100644 testdata/baselines/reference/submodule/conformance/nodeModulesExportAssignments(module=nodenext).errors.txt.diff create mode 100644 testdata/baselines/reference/submodule/conformance/nodeModulesGeneratedNameCollisions(module=node16).errors.txt create mode 100644 testdata/baselines/reference/submodule/conformance/nodeModulesGeneratedNameCollisions(module=nodenext).errors.txt diff --git a/internal/ast/ast.go b/internal/ast/ast.go index 9acacd6396..9efd30ef01 100644 --- a/internal/ast/ast.go +++ b/internal/ast/ast.go @@ -6,6 +6,7 @@ import ( "sync" "sync/atomic" + "github.com/microsoft/typescript-go/internal/compiler/packagejson" "github.com/microsoft/typescript-go/internal/core" "github.com/microsoft/typescript-go/internal/tspath" ) @@ -8695,6 +8696,8 @@ type SourceFile struct { ReferencedFiles []*FileReference TypeReferenceDirectives []*FileReference LibReferenceDirectives []*FileReference + PackageJsonScope *packagejson.InfoCacheEntry + ImpliedNodeFormat core.ModuleKind // Fields set by binder @@ -8723,7 +8726,6 @@ type SourceFile struct { // !!! - ImpliedNodeFormat core.ModuleKind CommonJsModuleIndicator *Node ExternalModuleIndicator *Node JsGlobalAugmentations SymbolTable diff --git a/internal/ast/utilities.go b/internal/ast/utilities.go index e8262ce04f..cadbe3c8e0 100644 --- a/internal/ast/utilities.go +++ b/internal/ast/utilities.go @@ -2368,13 +2368,13 @@ func GetImpliedNodeFormatForEmitWorker(sourceFile *SourceFile, options *core.Com return sourceFile.ImpliedNodeFormat } if sourceFile.ImpliedNodeFormat == core.ModuleKindCommonJS && - ( /*sourceFile.packageJsonScope.contents.packageJsonContent.type == "commonjs" ||*/ // !!! - tspath.FileExtensionIsOneOf(sourceFile.FileName(), []string{tspath.ExtensionCjs, tspath.ExtensionCts})) { + (sourceFile.PackageJsonScope != nil && sourceFile.PackageJsonScope.Contents.Type.Value != "module" || // !!! + tspath.FileExtensionIsOneOf(sourceFile.FileName(), []string{tspath.ExtensionCjs, tspath.ExtensionCts})) { return core.ModuleKindCommonJS } if sourceFile.ImpliedNodeFormat == core.ModuleKindESNext && - ( /*sourceFile.packageJsonScope?.contents.packageJsonContent.type === "module" ||*/ // !!! - tspath.FileExtensionIsOneOf(sourceFile.fileName, []string{tspath.ExtensionMjs, tspath.ExtensionMts})) { + (sourceFile.PackageJsonScope != nil && sourceFile.PackageJsonScope.Contents.Type.Value == "module" || + tspath.FileExtensionIsOneOf(sourceFile.fileName, []string{tspath.ExtensionMjs, tspath.ExtensionMts})) { return core.ModuleKindESNext } return core.ModuleKindNone diff --git a/internal/astnav/tokens_test.go b/internal/astnav/tokens_test.go index 76e1474ddb..7b5a02cf55 100644 --- a/internal/astnav/tokens_test.go +++ b/internal/astnav/tokens_test.go @@ -52,7 +52,7 @@ func TestGetTokenAtPosition(t *testing.T) { return 0; } ` - file := parser.ParseSourceFile("/file.ts", "/file.ts", fileText, core.ScriptTargetLatest, scanner.JSDocParsingModeParseAll) + file := parser.ParseSourceFile("/file.ts", "/file.ts", fileText, core.ScriptTargetLatest, scanner.JSDocParsingModeParseAll, core.ResolutionModeESM, nil) assert.Equal(t, astnav.GetTokenAtPosition(file, 0), astnav.GetTokenAtPosition(file, 0)) }) } @@ -86,7 +86,7 @@ func baselineTokens(t *testing.T, testName string, getTSTokens func(fileText str positions[i] = i } tsTokens := getTSTokens(string(fileText), positions) - file := parser.ParseSourceFile("/file.ts", "/file.ts", string(fileText), core.ScriptTargetLatest, scanner.JSDocParsingModeParseAll) + file := parser.ParseSourceFile("/file.ts", "/file.ts", string(fileText), core.ScriptTargetLatest, scanner.JSDocParsingModeParseAll, core.ResolutionModeESM, nil) var output strings.Builder currentRange := core.NewTextRange(0, 0) diff --git a/internal/binder/binder_test.go b/internal/binder/binder_test.go index 8518509df3..52ef0019c4 100644 --- a/internal/binder/binder_test.go +++ b/internal/binder/binder_test.go @@ -24,7 +24,7 @@ func BenchmarkBind(b *testing.B) { sourceFiles := make([]*ast.SourceFile, b.N) for i := range b.N { - sourceFiles[i] = parser.ParseSourceFile(fileName, path, sourceText, core.ScriptTargetESNext, scanner.JSDocParsingModeParseAll) + sourceFiles[i] = parser.ParseSourceFile(fileName, path, sourceText, core.ScriptTargetESNext, scanner.JSDocParsingModeParseAll, core.ResolutionModeESM, nil) } compilerOptions := &core.CompilerOptions{Target: core.ScriptTargetESNext, ModuleKind: core.ModuleKindNodeNext} diff --git a/internal/compiler/fileloader.go b/internal/compiler/fileloader.go index 0b35e5d91a..bc0575f660 100644 --- a/internal/compiler/fileloader.go +++ b/internal/compiler/fileloader.go @@ -223,7 +223,7 @@ func (t *parseTask) start(loader *fileLoader) { func (p *fileLoader) parseSourceFile(fileName string) *ast.SourceFile { path := tspath.ToPath(fileName, p.host.GetCurrentDirectory(), p.host.FS().UseCaseSensitiveFileNames()) - sourceFile := p.host.GetSourceFile(fileName, path, p.compilerOptions.GetEmitScriptTarget()) + sourceFile := p.host.GetSourceFile(fileName, path, p.compilerOptions.GetEmitScriptTarget(), p.resolver.GetPackageScopeForPath(fileName)) return sourceFile } diff --git a/internal/compiler/host.go b/internal/compiler/host.go index 073be18e69..83375c0f5e 100644 --- a/internal/compiler/host.go +++ b/internal/compiler/host.go @@ -1,7 +1,10 @@ package compiler import ( + "strings" + "github.com/microsoft/typescript-go/internal/ast" + "github.com/microsoft/typescript-go/internal/compiler/packagejson" "github.com/microsoft/typescript-go/internal/core" "github.com/microsoft/typescript-go/internal/parser" "github.com/microsoft/typescript-go/internal/scanner" @@ -15,7 +18,8 @@ type CompilerHost interface { GetCurrentDirectory() string NewLine() string Trace(msg string) - GetSourceFile(fileName string, path tspath.Path, languageVersion core.ScriptTarget) *ast.SourceFile + GetSourceFile(fileName string, path tspath.Path, languageVersion core.ScriptTarget, packageJsonScope *packagejson.InfoCacheEntry) *ast.SourceFile + GetImpliedNodeFormat(fileName string, packageJsonScope *packagejson.InfoCacheEntry) core.ResolutionMode } type FileInfo struct { @@ -68,10 +72,35 @@ func (h *compilerHost) Trace(msg string) { //!!! TODO: implement } -func (h *compilerHost) GetSourceFile(fileName string, path tspath.Path, languageVersion core.ScriptTarget) *ast.SourceFile { +func (h *compilerHost) GetSourceFile(fileName string, path tspath.Path, languageVersion core.ScriptTarget, packageJsonScope *packagejson.InfoCacheEntry) *ast.SourceFile { text, _ := h.FS().ReadFile(fileName) if tspath.FileExtensionIs(fileName, tspath.ExtensionJson) { return parser.ParseJSONText(fileName, path, text) } - return parser.ParseSourceFile(fileName, path, text, languageVersion, scanner.JSDocParsingModeParseForTypeErrors) + return parser.ParseSourceFile(fileName, path, text, languageVersion, scanner.JSDocParsingModeParseForTypeErrors, h.GetImpliedNodeFormat(fileName, packageJsonScope), packageJsonScope) +} + +func (h *compilerHost) GetImpliedNodeFormatForFileWorker(path string, packageJsonScope *packagejson.InfoCacheEntry) core.ResolutionMode { + var moduleResolution core.ModuleResolutionKind + if h.options != nil { + moduleResolution = h.options.GetModuleResolutionKind() + } + + shouldLookupFromPackageJson := core.ModuleResolutionKindNode16 <= moduleResolution && moduleResolution <= core.ModuleResolutionKindNodeNext || strings.Contains(path, "/node_modules/") + + if tspath.FileExtensionIsOneOf(path, []string{tspath.ExtensionDmts, tspath.ExtensionMts, tspath.ExtensionMjs}) { + return core.ResolutionModeESM + } + if tspath.FileExtensionIsOneOf(path, []string{tspath.ExtensionDcts, tspath.ExtensionCts, tspath.ExtensionCjs}) { + return core.ResolutionModeCommonJS + } + if shouldLookupFromPackageJson && packageJsonScope != nil && tspath.FileExtensionIsOneOf(path, []string{tspath.ExtensionDts, tspath.ExtensionTs, tspath.ExtensionTsx, tspath.ExtensionJs, tspath.ExtensionJsx}) { + return core.IfElse(packageJsonScope.Contents.Type.Value == "module", core.ResolutionModeESM, core.ResolutionModeCommonJS) + } + + return core.ResolutionModeNone +} + +func (h *compilerHost) GetImpliedNodeFormat(fileName string, packageJsonScope *packagejson.InfoCacheEntry) core.ResolutionMode { + return h.GetImpliedNodeFormatForFileWorker(fileName, packageJsonScope) } diff --git a/internal/ls/host.go b/internal/ls/host.go index af0a8a226a..32c9800654 100644 --- a/internal/ls/host.go +++ b/internal/ls/host.go @@ -3,6 +3,7 @@ package ls import ( "github.com/microsoft/typescript-go/internal/ast" "github.com/microsoft/typescript-go/internal/compiler" + "github.com/microsoft/typescript-go/internal/compiler/packagejson" "github.com/microsoft/typescript-go/internal/core" "github.com/microsoft/typescript-go/internal/tspath" "github.com/microsoft/typescript-go/internal/vfs" @@ -19,7 +20,7 @@ type Host interface { GetRootFileNames() []string // GetCompilerOptions was called GetCompilationSettings in the original code. GetCompilerOptions() *core.CompilerOptions - GetSourceFile(fileName string, path tspath.Path, languageVersion core.ScriptTarget) *ast.SourceFile + GetSourceFile(fileName string, path tspath.Path, languageVersion core.ScriptTarget, packageJsonScope *packagejson.InfoCacheEntry) *ast.SourceFile // This responsibility was moved from the language service to the project, // because they were bidirectionally interdependent. GetProgram() *compiler.Program diff --git a/internal/ls/languageservice.go b/internal/ls/languageservice.go index 815278749b..82a794c783 100644 --- a/internal/ls/languageservice.go +++ b/internal/ls/languageservice.go @@ -1,8 +1,11 @@ package ls import ( + "strings" + "github.com/microsoft/typescript-go/internal/ast" "github.com/microsoft/typescript-go/internal/compiler" + "github.com/microsoft/typescript-go/internal/compiler/packagejson" "github.com/microsoft/typescript-go/internal/core" "github.com/microsoft/typescript-go/internal/tspath" "github.com/microsoft/typescript-go/internal/vfs" @@ -46,8 +49,29 @@ func (l *LanguageService) Trace(msg string) { } // GetSourceFile implements compiler.CompilerHost. -func (l *LanguageService) GetSourceFile(fileName string, path tspath.Path, languageVersion core.ScriptTarget) *ast.SourceFile { - return l.host.GetSourceFile(fileName, path, languageVersion) +func (l *LanguageService) GetSourceFile(fileName string, path tspath.Path, languageVersion core.ScriptTarget, packageJsonScope *packagejson.InfoCacheEntry) *ast.SourceFile { + return l.host.GetSourceFile(fileName, path, languageVersion, packageJsonScope) +} + +func (l *LanguageService) GetImpliedNodeFormatForFileWorker(path string, packageJsonScope *packagejson.InfoCacheEntry) core.ResolutionMode { + moduleResolution := l.GetProgram().Options().GetModuleResolutionKind() + shouldLookupFromPackageJson := core.ModuleResolutionKindNode16 <= moduleResolution && moduleResolution <= core.ModuleResolutionKindNodeNext || strings.Contains(path, "/node_modules/") + + if tspath.FileExtensionIsOneOf(path, []string{tspath.ExtensionDmts, tspath.ExtensionMts, tspath.ExtensionMjs}) { + return core.ResolutionModeESM + } + if tspath.FileExtensionIsOneOf(path, []string{tspath.ExtensionDcts, tspath.ExtensionCts, tspath.ExtensionCjs}) { + return core.ResolutionModeCommonJS + } + if shouldLookupFromPackageJson && tspath.FileExtensionIsOneOf(path, []string{tspath.ExtensionDts, tspath.ExtensionTs, tspath.ExtensionTsx, tspath.ExtensionJs, tspath.ExtensionJsx}) { + return core.IfElse(packageJsonScope.Contents.Type.Value == "module", core.ResolutionModeESM, core.ResolutionModeCommonJS) + } + + return core.ResolutionModeNone +} + +func (l *LanguageService) GetImpliedNodeFormat(fileName string, packageJsonScope *packagejson.InfoCacheEntry) core.ResolutionMode { + return l.GetImpliedNodeFormatForFileWorker(fileName, packageJsonScope) } // GetProgram updates the program if the project version has changed. diff --git a/internal/parser/parser.go b/internal/parser/parser.go index 977305a150..c6ded4963e 100644 --- a/internal/parser/parser.go +++ b/internal/parser/parser.go @@ -8,6 +8,7 @@ import ( "github.com/microsoft/typescript-go/internal/ast" "github.com/microsoft/typescript-go/internal/compiler/diagnostics" + "github.com/microsoft/typescript-go/internal/compiler/packagejson" "github.com/microsoft/typescript-go/internal/core" "github.com/microsoft/typescript-go/internal/scanner" "github.com/microsoft/typescript-go/internal/tspath" @@ -51,14 +52,16 @@ type Parser struct { scanner *scanner.Scanner factory ast.NodeFactory - fileName string - path tspath.Path - sourceText string - languageVersion core.ScriptTarget - scriptKind core.ScriptKind - languageVariant core.LanguageVariant - diagnostics []*ast.Diagnostic - jsdocDiagnostics []*ast.Diagnostic + fileName string + path tspath.Path + sourceText string + languageVersion core.ScriptTarget + scriptKind core.ScriptKind + languageVariant core.LanguageVariant + diagnostics []*ast.Diagnostic + jsdocDiagnostics []*ast.Diagnostic + impliedNodeFormat core.ResolutionMode + packageJsonScope *packagejson.InfoCacheEntry token ast.Kind sourceFlags ast.NodeFlags @@ -92,10 +95,10 @@ func putParser(p *Parser) { parserPool.Put(p) } -func ParseSourceFile(fileName string, path tspath.Path, sourceText string, languageVersion core.ScriptTarget, jsdocParsingMode scanner.JSDocParsingMode) *ast.SourceFile { +func ParseSourceFile(fileName string, path tspath.Path, sourceText string, languageVersion core.ScriptTarget, jsdocParsingMode scanner.JSDocParsingMode, impliedNodeFormat core.ResolutionMode, packageJsonScope *packagejson.InfoCacheEntry) *ast.SourceFile { p := getParser() defer putParser(p) - p.initializeState(fileName, path, sourceText, languageVersion, core.ScriptKindUnknown, jsdocParsingMode) + p.initializeState(fileName, path, sourceText, languageVersion, core.ScriptKindUnknown, jsdocParsingMode, impliedNodeFormat, packageJsonScope) p.nextToken() return p.parseSourceFileWorker() } @@ -103,7 +106,7 @@ func ParseSourceFile(fileName string, path tspath.Path, sourceText string, langu func ParseJSONText(fileName string, path tspath.Path, sourceText string) *ast.SourceFile { p := getParser() defer putParser(p) - p.initializeState(fileName, path, sourceText, core.ScriptTargetES2015, core.ScriptKindJSON, scanner.JSDocParsingModeParseAll) + p.initializeState(fileName, path, sourceText, core.ScriptTargetES2015, core.ScriptKindJSON, scanner.JSDocParsingModeParseAll, core.ResolutionModeNone, nil) p.nextToken() pos := p.nodePos() var statements *ast.NodeList @@ -176,7 +179,7 @@ func ParseJSONText(fileName string, path tspath.Path, sourceText string) *ast.So return result } -func (p *Parser) initializeState(fileName string, path tspath.Path, sourceText string, languageVersion core.ScriptTarget, scriptKind core.ScriptKind, jsdocParsingMode scanner.JSDocParsingMode) { +func (p *Parser) initializeState(fileName string, path tspath.Path, sourceText string, languageVersion core.ScriptTarget, scriptKind core.ScriptKind, jsdocParsingMode scanner.JSDocParsingMode, impliedNodeFormat core.ResolutionMode, packageJsonScope *packagejson.InfoCacheEntry) { if p.scanner == nil { p.scanner = scanner.NewScanner() } else { @@ -196,6 +199,8 @@ func (p *Parser) initializeState(fileName string, path tspath.Path, sourceText s default: p.contextFlags = ast.NodeFlagsNone } + p.impliedNodeFormat = impliedNodeFormat + p.packageJsonScope = packageJsonScope p.scanner.SetText(p.sourceText) p.scanner.SetOnError(p.scanError) p.scanner.SetScriptTarget(p.languageVersion) @@ -325,8 +330,12 @@ func (p *Parser) finishSourceFile(result *ast.SourceFile, isDeclarationFile bool result.Flags |= p.sourceFlags result.Identifiers = p.identifiers result.SetJSDocCache(p.jsdocCache) + result.ImpliedNodeFormat = p.impliedNodeFormat + result.PackageJsonScope = p.packageJsonScope p.jsdocCache = nil p.identifiers = nil + p.impliedNodeFormat = core.ResolutionModeNone + p.packageJsonScope = nil } func (p *Parser) parseToplevelStatement(i int) *ast.Node { diff --git a/internal/parser/parser_test.go b/internal/parser/parser_test.go index ae426ced43..95318ec7dc 100644 --- a/internal/parser/parser_test.go +++ b/internal/parser/parser_test.go @@ -39,7 +39,7 @@ func BenchmarkParse(b *testing.B) { b.Run(jsdoc.name, func(b *testing.B) { jsdocMode := jsdoc.mode for b.Loop() { - ParseSourceFile(fileName, path, sourceText, core.ScriptTargetESNext, jsdocMode) + ParseSourceFile(fileName, path, sourceText, core.ScriptTargetESNext, jsdocMode, core.ResolutionModeESM, nil) } }) } @@ -82,7 +82,7 @@ func TestParseTypeScriptRepo(t *testing.T) { if strings.HasSuffix(f.name, ".json") { sourceFile = ParseJSONText(fileName, path, string(sourceText)) } else { - sourceFile = ParseSourceFile(fileName, path, string(sourceText), core.ScriptTargetESNext, scanner.JSDocParsingModeParseAll) + sourceFile = ParseSourceFile(fileName, path, string(sourceText), core.ScriptTargetESNext, scanner.JSDocParsingModeParseAll, core.ResolutionModeESM, nil) } if !test.ignoreErrors { @@ -179,6 +179,6 @@ func FuzzParser(f *testing.F) { return } - ParseSourceFile(fileName, path, sourceText, scriptTarget, jsdocParsingMode) + ParseSourceFile(fileName, path, sourceText, scriptTarget, jsdocParsingMode, core.ResolutionModeESM, nil) }) } diff --git a/internal/project/documentregistry.go b/internal/project/documentregistry.go index cb9ac05eb3..d2e02a6f73 100644 --- a/internal/project/documentregistry.go +++ b/internal/project/documentregistry.go @@ -92,7 +92,7 @@ func (r *documentRegistry) getDocumentWorker( // the script snapshot. If so, update it appropriately. entry := entryAny.(*registryEntry) if entry.sourceFile.Version != scriptInfo.version { - sourceFile := parser.ParseSourceFile(scriptInfo.fileName, scriptInfo.path, scriptInfo.text, scriptTarget, scanner.JSDocParsingModeParseAll) + sourceFile := parser.ParseSourceFile(scriptInfo.fileName, scriptInfo.path, scriptInfo.text, scriptTarget, scanner.JSDocParsingModeParseAll, core.ResolutionModeNone /* !!! */, nil) sourceFile.Version = scriptInfo.version entry.mu.Lock() defer entry.mu.Unlock() @@ -102,7 +102,7 @@ func (r *documentRegistry) getDocumentWorker( return entry.sourceFile } else { // Have never seen this file with these settings. Create a new source file for it. - sourceFile := parser.ParseSourceFile(scriptInfo.fileName, scriptInfo.path, scriptInfo.text, scriptTarget, scanner.JSDocParsingModeParseAll) + sourceFile := parser.ParseSourceFile(scriptInfo.fileName, scriptInfo.path, scriptInfo.text, scriptTarget, scanner.JSDocParsingModeParseAll, core.ResolutionModeNone /* !!! */, nil) sourceFile.Version = scriptInfo.version entryAny, _ := r.documents.LoadOrStore(key, ®istryEntry{ sourceFile: sourceFile, diff --git a/internal/project/project.go b/internal/project/project.go index 372a1db721..3bbae4111d 100644 --- a/internal/project/project.go +++ b/internal/project/project.go @@ -8,6 +8,7 @@ import ( "github.com/microsoft/typescript-go/internal/ast" "github.com/microsoft/typescript-go/internal/collections" "github.com/microsoft/typescript-go/internal/compiler" + "github.com/microsoft/typescript-go/internal/compiler/packagejson" "github.com/microsoft/typescript-go/internal/core" "github.com/microsoft/typescript-go/internal/ls" "github.com/microsoft/typescript-go/internal/tspath" @@ -124,7 +125,7 @@ func (p *Project) GetRootFileNames() []string { } // GetSourceFile implements LanguageServiceHost. -func (p *Project) GetSourceFile(fileName string, path tspath.Path, languageVersion core.ScriptTarget) *ast.SourceFile { +func (p *Project) GetSourceFile(fileName string, path tspath.Path, languageVersion core.ScriptTarget, packageJsonScope *packagejson.InfoCacheEntry) *ast.SourceFile { scriptKind := p.getScriptKind(fileName) if scriptInfo := p.getOrCreateScriptInfoAndAttachToProject(fileName, scriptKind); scriptInfo != nil { var ( @@ -140,6 +141,10 @@ func (p *Project) GetSourceFile(fileName string, path tspath.Path, languageVersi return nil } +func (p *Project) GetImpliedNodeFormat(fileName string, packageJsonScope *packagejson.InfoCacheEntry) core.ResolutionMode { + return core.ResolutionModeNone +} + // GetProgram implements LanguageServiceHost. Updates the program if needed. func (p *Project) GetProgram() *compiler.Program { p.updateIfDirty() diff --git a/internal/testutil/harnessutil/harnessutil.go b/internal/testutil/harnessutil/harnessutil.go index af238cb117..7b28f40c71 100644 --- a/internal/testutil/harnessutil/harnessutil.go +++ b/internal/testutil/harnessutil/harnessutil.go @@ -16,6 +16,7 @@ import ( "github.com/microsoft/typescript-go/internal/ast" "github.com/microsoft/typescript-go/internal/bundled" "github.com/microsoft/typescript-go/internal/compiler" + "github.com/microsoft/typescript-go/internal/compiler/packagejson" "github.com/microsoft/typescript-go/internal/core" "github.com/microsoft/typescript-go/internal/parser" "github.com/microsoft/typescript-go/internal/repo" @@ -355,15 +356,21 @@ type cachedCompilerHost struct { var sourceFileCache sync.Map -func (h *cachedCompilerHost) GetSourceFile(fileName string, path tspath.Path, languageVersion core.ScriptTarget) *ast.SourceFile { +func (h *cachedCompilerHost) GetSourceFile(fileName string, path tspath.Path, languageVersion core.ScriptTarget, packageJsonScope *packagejson.InfoCacheEntry) *ast.SourceFile { text, _ := h.FS().ReadFile(fileName) type sourceFileCacheKey struct { core.SourceFileAffectingCompilerOptions - fileName string - path tspath.Path - languageVersion core.ScriptTarget - text string + fileName string + path tspath.Path + languageVersion core.ScriptTarget + packageJsonTypeValue string + text string + } + + packageJsonTypeValue := "" + if packageJsonScope != nil { + packageJsonTypeValue = packageJsonScope.Contents.Type.Value } key := sourceFileCacheKey{ @@ -371,6 +378,7 @@ func (h *cachedCompilerHost) GetSourceFile(fileName string, path tspath.Path, la fileName: fileName, path: path, languageVersion: languageVersion, + packageJsonTypeValue: packageJsonTypeValue, text: text, } @@ -384,7 +392,7 @@ func (h *cachedCompilerHost) GetSourceFile(fileName string, path tspath.Path, la sourceFile = parser.ParseJSONText(fileName, path, text) } else { // !!! JSDocParsingMode - sourceFile = parser.ParseSourceFile(fileName, path, text, languageVersion, scanner.JSDocParsingModeParseAll) + sourceFile = parser.ParseSourceFile(fileName, path, text, languageVersion, scanner.JSDocParsingModeParseAll, h.GetImpliedNodeFormat(fileName, packageJsonScope), packageJsonScope) } result, _ := sourceFileCache.LoadOrStore(key, sourceFile) diff --git a/internal/testutil/parsetestutil/parsetestutil.go b/internal/testutil/parsetestutil/parsetestutil.go index 880459327a..bbe1728fe4 100644 --- a/internal/testutil/parsetestutil/parsetestutil.go +++ b/internal/testutil/parsetestutil/parsetestutil.go @@ -15,7 +15,7 @@ import ( // Simplifies parsing an input string into a SourceFile for testing purposes. func ParseTypeScript(text string, jsx bool) *ast.SourceFile { fileName := core.IfElse(jsx, "/main.tsx", "/main.ts") - file := parser.ParseSourceFile(fileName, tspath.Path(fileName), text, core.ScriptTargetESNext, scanner.JSDocParsingModeParseNone) + file := parser.ParseSourceFile(fileName, tspath.Path(fileName), text, core.ScriptTargetESNext, scanner.JSDocParsingModeParseNone, core.ResolutionModeESM, nil) ast.SetParentInChildren(file.AsNode()) return file } diff --git a/testdata/baselines/reference/submodule/compiler/esmModeDeclarationFileWithExportAssignment.errors.txt b/testdata/baselines/reference/submodule/compiler/esmModeDeclarationFileWithExportAssignment.errors.txt new file mode 100644 index 0000000000..b6240849cb --- /dev/null +++ b/testdata/baselines/reference/submodule/compiler/esmModeDeclarationFileWithExportAssignment.errors.txt @@ -0,0 +1,12 @@ +other.d.mts(2,1): error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. + + +==== other.d.mts (1 errors) ==== + declare function example(): 5; + export = example; + ~~~~~~~~~~~~~~~~~ +!!! error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. + +==== main.mts (0 errors) ==== + import example from "./other.mjs"; + example(); \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/compiler/esmModeDeclarationFileWithExportAssignment.errors.txt.diff b/testdata/baselines/reference/submodule/compiler/esmModeDeclarationFileWithExportAssignment.errors.txt.diff index 96df190192..581614db47 100644 --- a/testdata/baselines/reference/submodule/compiler/esmModeDeclarationFileWithExportAssignment.errors.txt.diff +++ b/testdata/baselines/reference/submodule/compiler/esmModeDeclarationFileWithExportAssignment.errors.txt.diff @@ -1,20 +1,17 @@ --- old.esmModeDeclarationFileWithExportAssignment.errors.txt +++ new.esmModeDeclarationFileWithExportAssignment.errors.txt -@@= skipped -0, +-1 lines =@@ +@@= skipped -0, +0 lines =@@ -main.mts(1,8): error TS1192: Module '"other"' has no default export. --other.d.mts(2,1): error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. -- -- --==== other.d.mts (1 errors) ==== -- declare function example(): 5; -- export = example; -- ~~~~~~~~~~~~~~~~~ --!!! error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. -- + other.d.mts(2,1): error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. + + +@@= skipped -7, +6 lines =@@ + ~~~~~~~~~~~~~~~~~ + !!! error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. + -==== main.mts (1 errors) ==== -- import example from "./other.mjs"; ++==== main.mts (0 errors) ==== + import example from "./other.mjs"; - ~~~~~~~ -!!! error TS1192: Module '"other"' has no default export. -- example(); -@@= skipped --1, +1 lines =@@ -+ + example(); diff --git a/testdata/baselines/reference/submodule/compiler/modulePreserve4.errors.txt b/testdata/baselines/reference/submodule/compiler/modulePreserve4.errors.txt index b458497d9a..278f546051 100644 --- a/testdata/baselines/reference/submodule/compiler/modulePreserve4.errors.txt +++ b/testdata/baselines/reference/submodule/compiler/modulePreserve4.errors.txt @@ -1,4 +1,5 @@ /a.js(2,1): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. +/f.cts(1,1): error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. /g.js(1,1): error TS2304: Cannot find name 'exports'. /main1.ts(1,13): error TS2305: Module '"/a"' has no exported member 'y'. /main1.ts(3,12): error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. @@ -10,12 +11,18 @@ /main2.mts(5,12): error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. /main2.mts(19,16): error TS2306: File '/g.js' is not a module. /main2.mts(20,21): error TS2306: File '/g.js' is not a module. +/main3.cjs(1,10): error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. /main3.cjs(1,13): error TS2305: Module '"/a"' has no exported member 'y'. /main3.cjs(3,12): error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. +/main3.cjs(5,8): error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. /main3.cjs(6,12): error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. +/main3.cjs(8,8): error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. /main3.cjs(9,12): error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. +/main3.cjs(10,8): error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. /main3.cjs(11,12): error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. +/main3.cjs(12,8): error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. /main3.cjs(13,12): error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. +/main3.cjs(14,8): error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. /main3.cjs(15,12): error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. /main3.cjs(17,16): error TS2306: File '/g.js' is not a module. /main3.cjs(18,12): error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. @@ -43,8 +50,10 @@ ==== /e.mts (0 errors) ==== export = 0; -==== /f.cts (0 errors) ==== +==== /f.cts (1 errors) ==== export default 0; + ~~~~~~~~~~~~~~~~~ +!!! error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. ==== /g.js (1 errors) ==== exports.default = 0; @@ -127,8 +136,10 @@ ~~~~~ !!! error TS2306: File '/g.js' is not a module. -==== /main3.cjs (9 errors) ==== +==== /main3.cjs (15 errors) ==== import { x, y } from "./a"; // No y + ~ +!!! error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. ~ !!! error TS2305: Module '"/a"' has no exported member 'y'. import a1 = require("./a"); // Error in JS @@ -137,23 +148,33 @@ !!! error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. import b1 from "./b"; // 0 + ~~ +!!! error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. const b2 = require("./b"); // { default: 0 } ~~~~~~~ !!! error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. import c1 from "./c"; // { default: [Function: default] } + ~~ +!!! error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. const c2 = require("./c"); // { default: [Function: default] } ~~~~~~~ !!! error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. import d1 from "./d"; // [Function: default] + ~~ +!!! error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. const d2 = require("./d"); // [Function: default] ~~~~~~~ !!! error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. import e1 from "./e.mjs"; // 0 + ~~ +!!! error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. const e2 = require("./e.mjs"); // 0 ~~~~~~~ !!! error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. import f1 from "./f.cjs"; // 0 + ~~ +!!! error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. const f2 = require("./f.cjs"); // { default: 0 } ~~~~~~~ !!! error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. diff --git a/testdata/baselines/reference/submodule/compiler/modulePreserve4.errors.txt.diff b/testdata/baselines/reference/submodule/compiler/modulePreserve4.errors.txt.diff index 3c77f6459f..b474fc781d 100644 --- a/testdata/baselines/reference/submodule/compiler/modulePreserve4.errors.txt.diff +++ b/testdata/baselines/reference/submodule/compiler/modulePreserve4.errors.txt.diff @@ -2,7 +2,7 @@ +++ new.modulePreserve4.errors.txt @@= skipped -0, +0 lines =@@ /a.js(2,1): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. --/f.cts(1,1): error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. + /f.cts(1,1): error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. -/main1.ts(1,13): error TS2305: Module '"./a"' has no exported member 'y'. +/g.js(1,1): error TS2304: Cannot find name 'exports'. +/main1.ts(1,13): error TS2305: Module '"/a"' has no exported member 'y'. @@ -27,12 +27,18 @@ -/main3.cjs(17,8): error TS1293: ESM syntax is not allowed in a CommonJS module when 'module' is set to 'preserve'. +/main2.mts(19,16): error TS2306: File '/g.js' is not a module. +/main2.mts(20,21): error TS2306: File '/g.js' is not a module. ++/main3.cjs(1,10): error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. +/main3.cjs(1,13): error TS2305: Module '"/a"' has no exported member 'y'. +/main3.cjs(3,12): error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. ++/main3.cjs(5,8): error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. +/main3.cjs(6,12): error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. ++/main3.cjs(8,8): error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. +/main3.cjs(9,12): error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. ++/main3.cjs(10,8): error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. +/main3.cjs(11,12): error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. ++/main3.cjs(12,8): error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. +/main3.cjs(13,12): error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. ++/main3.cjs(14,8): error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. +/main3.cjs(15,12): error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. +/main3.cjs(17,16): error TS2306: File '/g.js' is not a module. +/main3.cjs(18,12): error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. @@ -41,15 +47,9 @@ ==== /a.js (1 errors) ==== -@@= skipped -38, +42 lines =@@ - ==== /e.mts (0 errors) ==== - export = 0; - --==== /f.cts (1 errors) ==== -+==== /f.cts (0 errors) ==== - export default 0; -- ~~~~~~~~~~~~~~~~~ --!!! error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. +@@= skipped -43, +54 lines =@@ + ~~~~~~~~~~~~~~~~~ + !!! error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. -==== /g.js (0 errors) ==== +==== /g.js (1 errors) ==== @@ -66,7 +66,7 @@ import a1 = require("./a"); // { x: 0 } const a2 = require("./a"); // Error in TS ~~~~~~~ -@@= skipped -38, +38 lines =@@ +@@= skipped -33, +35 lines =@@ d3.default(); import e1 from "./e.mjs"; // 0 @@ -112,10 +112,12 @@ + ~~~~~ +!!! error TS2306: File '/g.js' is not a module. - ==== /main3.cjs (9 errors) ==== +-==== /main3.cjs (9 errors) ==== ++==== /main3.cjs (15 errors) ==== import { x, y } from "./a"; // No y -- ~ + ~ -!!! error TS1293: ESM syntax is not allowed in a CommonJS module when 'module' is set to 'preserve'. ++!!! error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. ~ -!!! error TS2305: Module '"./a"' has no exported member 'y'. +!!! error TS2305: Module '"/a"' has no exported member 'y'. @@ -127,33 +129,38 @@ +!!! error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. import b1 from "./b"; // 0 -- ~~ + ~~ -!!! error TS1293: ESM syntax is not allowed in a CommonJS module when 'module' is set to 'preserve'. ++!!! error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. const b2 = require("./b"); // { default: 0 } + ~~~~~~~ +!!! error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. import c1 from "./c"; // { default: [Function: default] } -- ~~ + ~~ -!!! error TS1293: ESM syntax is not allowed in a CommonJS module when 'module' is set to 'preserve'. ++!!! error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. const c2 = require("./c"); // { default: [Function: default] } + ~~~~~~~ +!!! error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. import d1 from "./d"; // [Function: default] -- ~~ + ~~ -!!! error TS1293: ESM syntax is not allowed in a CommonJS module when 'module' is set to 'preserve'. ++!!! error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. const d2 = require("./d"); // [Function: default] + ~~~~~~~ +!!! error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. import e1 from "./e.mjs"; // 0 -- ~~ + ~~ -!!! error TS1293: ESM syntax is not allowed in a CommonJS module when 'module' is set to 'preserve'. ++!!! error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. const e2 = require("./e.mjs"); // 0 + ~~~~~~~ +!!! error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. import f1 from "./f.cjs"; // 0 -- ~~ + ~~ -!!! error TS1293: ESM syntax is not allowed in a CommonJS module when 'module' is set to 'preserve'. ++!!! error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. const f2 = require("./f.cjs"); // { default: 0 } + ~~~~~~~ +!!! error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=node16).errors.txt b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=node16).errors.txt index 4658ca6470..5c37afd462 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=node16).errors.txt +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=node16).errors.txt @@ -1,15 +1,12 @@ file.js(4,1): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. index.js(3,1): error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. subfolder/file.js(3,1): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. -subfolder/index.js(3,1): error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. -==== subfolder/index.js (1 errors) ==== +==== subfolder/index.js (0 errors) ==== // cjs format file const a = {}; export = a; - ~~~~~~~~~~~ -!!! error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. ==== subfolder/file.js (1 errors) ==== // cjs format file const a = {}; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=node16).errors.txt.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=node16).errors.txt.diff index 15bd703c3b..f8742c3560 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=node16).errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=node16).errors.txt.diff @@ -6,17 +6,16 @@ -index.js(3,1): error TS8003: 'export =' can only be used in TypeScript files. -subfolder/index.js(3,1): error TS8003: 'export =' can only be used in TypeScript files. +subfolder/file.js(3,1): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. -+subfolder/index.js(3,1): error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. - ==== subfolder/index.js (1 errors) ==== -@@= skipped -8, +8 lines =@@ +-==== subfolder/index.js (1 errors) ==== ++==== subfolder/index.js (0 errors) ==== + // cjs format file const a = {}; export = a; - ~~~~~~~~~~~ +- ~~~~~~~~~~~ -!!! error TS8003: 'export =' can only be used in TypeScript files. -==== subfolder/file.js (0 errors) ==== -+!!! error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. +==== subfolder/file.js (1 errors) ==== // cjs format file const a = {}; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=nodenext).errors.txt b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=nodenext).errors.txt index 4658ca6470..5c37afd462 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=nodenext).errors.txt +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=nodenext).errors.txt @@ -1,15 +1,12 @@ file.js(4,1): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. index.js(3,1): error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. subfolder/file.js(3,1): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. -subfolder/index.js(3,1): error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. -==== subfolder/index.js (1 errors) ==== +==== subfolder/index.js (0 errors) ==== // cjs format file const a = {}; export = a; - ~~~~~~~~~~~ -!!! error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. ==== subfolder/file.js (1 errors) ==== // cjs format file const a = {}; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=nodenext).errors.txt.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=nodenext).errors.txt.diff index c72353b77b..be2cd40e6d 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=nodenext).errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=nodenext).errors.txt.diff @@ -6,17 +6,16 @@ -index.js(3,1): error TS8003: 'export =' can only be used in TypeScript files. -subfolder/index.js(3,1): error TS8003: 'export =' can only be used in TypeScript files. +subfolder/file.js(3,1): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. -+subfolder/index.js(3,1): error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. - ==== subfolder/index.js (1 errors) ==== -@@= skipped -8, +8 lines =@@ +-==== subfolder/index.js (1 errors) ==== ++==== subfolder/index.js (0 errors) ==== + // cjs format file const a = {}; export = a; - ~~~~~~~~~~~ +- ~~~~~~~~~~~ -!!! error TS8003: 'export =' can only be used in TypeScript files. -==== subfolder/file.js (0 errors) ==== -+!!! error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. +==== subfolder/file.js (1 errors) ==== // cjs format file const a = {}; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsGeneratedNameCollisions(module=node16).errors.txt b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsGeneratedNameCollisions(module=node16).errors.txt new file mode 100644 index 0000000000..6bdf1d41c6 --- /dev/null +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsGeneratedNameCollisions(module=node16).errors.txt @@ -0,0 +1,35 @@ +subfolder/index.js(2,10): error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. +subfolder/index.js(3,7): error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. +subfolder/index.js(5,14): error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. + + +==== subfolder/index.js (3 errors) ==== + // cjs format file + function require() {} + ~~~~~~~ +!!! error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. + const exports = {}; + ~~~~~~~ +!!! error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. + class Object {} + export const __esModule = false; + ~~~~~~~~~~ +!!! error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. + export {require, exports, Object}; +==== index.js (0 errors) ==== + // esm format file + function require() {} + const exports = {}; + class Object {} + export const __esModule = false; + export {require, exports, Object}; +==== package.json (0 errors) ==== + { + "name": "package", + "private": true, + "type": "module" + } +==== subfolder/package.json (0 errors) ==== + { + "type": "commonjs" + } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsGeneratedNameCollisions(module=node16).errors.txt.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsGeneratedNameCollisions(module=node16).errors.txt.diff index 9e6b831947..25d9a57b84 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsGeneratedNameCollisions(module=node16).errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsGeneratedNameCollisions(module=node16).errors.txt.diff @@ -1,43 +1,23 @@ --- old.nodeModulesAllowJsGeneratedNameCollisions(module=node16).errors.txt +++ new.nodeModulesAllowJsGeneratedNameCollisions(module=node16).errors.txt -@@= skipped -0, +-1 lines =@@ --subfolder/index.js(2,10): error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. --subfolder/index.js(3,7): error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. +@@= skipped -0, +0 lines =@@ + subfolder/index.js(2,10): error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. + subfolder/index.js(3,7): error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. -subfolder/index.js(4,7): error TS2725: Class name cannot be 'Object' when targeting ES5 with module Node16. --subfolder/index.js(5,14): error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. -- -- + subfolder/index.js(5,14): error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. + + -==== subfolder/index.js (4 errors) ==== -- // cjs format file -- function require() {} -- ~~~~~~~ --!!! error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. -- const exports = {}; -- ~~~~~~~ --!!! error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. -- class Object {} ++==== subfolder/index.js (3 errors) ==== + // cjs format file + function require() {} + ~~~~~~~ +@@= skipped -12, +11 lines =@@ + ~~~~~~~ + !!! error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. + class Object {} - ~~~~~~ -!!! error TS2725: Class name cannot be 'Object' when targeting ES5 with module Node16. -- export const __esModule = false; -- ~~~~~~~~~~ --!!! error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. -- export {require, exports, Object}; --==== index.js (0 errors) ==== -- // esm format file -- function require() {} -- const exports = {}; -- class Object {} -- export const __esModule = false; -- export {require, exports, Object}; --==== package.json (0 errors) ==== -- { -- "name": "package", -- "private": true, -- "type": "module" -- } --==== subfolder/package.json (0 errors) ==== -- { -- "type": "commonjs" -- } -@@= skipped --1, +1 lines =@@ -+ + export const __esModule = false; + ~~~~~~~~~~ + !!! error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsGeneratedNameCollisions(module=nodenext).errors.txt b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsGeneratedNameCollisions(module=nodenext).errors.txt new file mode 100644 index 0000000000..6bdf1d41c6 --- /dev/null +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsGeneratedNameCollisions(module=nodenext).errors.txt @@ -0,0 +1,35 @@ +subfolder/index.js(2,10): error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. +subfolder/index.js(3,7): error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. +subfolder/index.js(5,14): error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. + + +==== subfolder/index.js (3 errors) ==== + // cjs format file + function require() {} + ~~~~~~~ +!!! error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. + const exports = {}; + ~~~~~~~ +!!! error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. + class Object {} + export const __esModule = false; + ~~~~~~~~~~ +!!! error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. + export {require, exports, Object}; +==== index.js (0 errors) ==== + // esm format file + function require() {} + const exports = {}; + class Object {} + export const __esModule = false; + export {require, exports, Object}; +==== package.json (0 errors) ==== + { + "name": "package", + "private": true, + "type": "module" + } +==== subfolder/package.json (0 errors) ==== + { + "type": "commonjs" + } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsGeneratedNameCollisions(module=nodenext).errors.txt.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsGeneratedNameCollisions(module=nodenext).errors.txt.diff index 86755eb715..1f1bbb88a1 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsGeneratedNameCollisions(module=nodenext).errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsGeneratedNameCollisions(module=nodenext).errors.txt.diff @@ -1,43 +1,23 @@ --- old.nodeModulesAllowJsGeneratedNameCollisions(module=nodenext).errors.txt +++ new.nodeModulesAllowJsGeneratedNameCollisions(module=nodenext).errors.txt -@@= skipped -0, +-1 lines =@@ --subfolder/index.js(2,10): error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. --subfolder/index.js(3,7): error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. +@@= skipped -0, +0 lines =@@ + subfolder/index.js(2,10): error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. + subfolder/index.js(3,7): error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. -subfolder/index.js(4,7): error TS2725: Class name cannot be 'Object' when targeting ES5 with module NodeNext. --subfolder/index.js(5,14): error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. -- -- + subfolder/index.js(5,14): error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. + + -==== subfolder/index.js (4 errors) ==== -- // cjs format file -- function require() {} -- ~~~~~~~ --!!! error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. -- const exports = {}; -- ~~~~~~~ --!!! error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. -- class Object {} ++==== subfolder/index.js (3 errors) ==== + // cjs format file + function require() {} + ~~~~~~~ +@@= skipped -12, +11 lines =@@ + ~~~~~~~ + !!! error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. + class Object {} - ~~~~~~ -!!! error TS2725: Class name cannot be 'Object' when targeting ES5 with module NodeNext. -- export const __esModule = false; -- ~~~~~~~~~~ --!!! error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. -- export {require, exports, Object}; --==== index.js (0 errors) ==== -- // esm format file -- function require() {} -- const exports = {}; -- class Object {} -- export const __esModule = false; -- export {require, exports, Object}; --==== package.json (0 errors) ==== -- { -- "name": "package", -- "private": true, -- "type": "module" -- } --==== subfolder/package.json (0 errors) ==== -- { -- "type": "commonjs" -- } -@@= skipped --1, +1 lines =@@ -+ + export const __esModule = false; + ~~~~~~~~~~ + !!! error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsTopLevelAwait(module=node16).errors.txt b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsTopLevelAwait(module=node16).errors.txt index 976ff9888e..6d1336b928 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsTopLevelAwait(module=node16).errors.txt +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsTopLevelAwait(module=node16).errors.txt @@ -1,18 +1,18 @@ index.js(2,11): error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. index.js(4,5): error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. -subfolder/index.js(2,11): error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. -subfolder/index.js(4,5): error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. +subfolder/index.js(2,11): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. +subfolder/index.js(4,5): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. ==== subfolder/index.js (2 errors) ==== // cjs format file const x = await 1; ~~~~~ -!!! error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. +!!! error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. export {x}; for await (const y of []) {} ~~~~~ -!!! error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. +!!! error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. ==== index.js (2 errors) ==== // esm format file const x = await 1; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsTopLevelAwait(module=node16).errors.txt.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsTopLevelAwait(module=node16).errors.txt.diff index 7937e01c9a..6c1f3f9504 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsTopLevelAwait(module=node16).errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsTopLevelAwait(module=node16).errors.txt.diff @@ -1,26 +1,16 @@ --- old.nodeModulesAllowJsTopLevelAwait(module=node16).errors.txt +++ new.nodeModulesAllowJsTopLevelAwait(module=node16).errors.txt @@= skipped -0, +0 lines =@@ --subfolder/index.js(2,11): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. --subfolder/index.js(4,5): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. +index.js(2,11): error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. +index.js(4,5): error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. -+subfolder/index.js(2,11): error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. -+subfolder/index.js(4,5): error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. + subfolder/index.js(2,11): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. + subfolder/index.js(4,5): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. - - ==== subfolder/index.js (2 errors) ==== - // cjs format file - const x = await 1; - ~~~~~ --!!! error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. -+!!! error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. - export {x}; +@@= skipped -10, +12 lines =@@ for await (const y of []) {} ~~~~~ --!!! error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. + !!! error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. -==== index.js (0 errors) ==== -+!!! error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. +==== index.js (2 errors) ==== // esm format file const x = await 1; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsTopLevelAwait(module=nodenext).errors.txt b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsTopLevelAwait(module=nodenext).errors.txt index 976ff9888e..6d1336b928 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsTopLevelAwait(module=nodenext).errors.txt +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsTopLevelAwait(module=nodenext).errors.txt @@ -1,18 +1,18 @@ index.js(2,11): error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. index.js(4,5): error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. -subfolder/index.js(2,11): error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. -subfolder/index.js(4,5): error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. +subfolder/index.js(2,11): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. +subfolder/index.js(4,5): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. ==== subfolder/index.js (2 errors) ==== // cjs format file const x = await 1; ~~~~~ -!!! error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. +!!! error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. export {x}; for await (const y of []) {} ~~~~~ -!!! error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. +!!! error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. ==== index.js (2 errors) ==== // esm format file const x = await 1; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsTopLevelAwait(module=nodenext).errors.txt.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsTopLevelAwait(module=nodenext).errors.txt.diff index 99931fe104..88f10c32f6 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsTopLevelAwait(module=nodenext).errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsTopLevelAwait(module=nodenext).errors.txt.diff @@ -1,26 +1,16 @@ --- old.nodeModulesAllowJsTopLevelAwait(module=nodenext).errors.txt +++ new.nodeModulesAllowJsTopLevelAwait(module=nodenext).errors.txt @@= skipped -0, +0 lines =@@ --subfolder/index.js(2,11): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. --subfolder/index.js(4,5): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. +index.js(2,11): error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. +index.js(4,5): error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. -+subfolder/index.js(2,11): error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. -+subfolder/index.js(4,5): error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. + subfolder/index.js(2,11): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. + subfolder/index.js(4,5): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. - - ==== subfolder/index.js (2 errors) ==== - // cjs format file - const x = await 1; - ~~~~~ --!!! error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. -+!!! error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. - export {x}; +@@= skipped -10, +12 lines =@@ for await (const y of []) {} ~~~~~ --!!! error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. + !!! error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. -==== index.js (0 errors) ==== -+!!! error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. +==== index.js (2 errors) ==== // esm format file const x = await 1; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesExportAssignments(module=node16).errors.txt b/testdata/baselines/reference/submodule/conformance/nodeModulesExportAssignments(module=node16).errors.txt index 0b39eaa7b4..edb49c7a61 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesExportAssignments(module=node16).errors.txt +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesExportAssignments(module=node16).errors.txt @@ -1,13 +1,10 @@ index.ts(3,1): error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. -subfolder/index.ts(3,1): error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. -==== subfolder/index.ts (1 errors) ==== +==== subfolder/index.ts (0 errors) ==== // cjs format file const a = {}; export = a; - ~~~~~~~~~~~ -!!! error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. ==== index.ts (1 errors) ==== // esm format file const a = {}; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesExportAssignments(module=node16).errors.txt.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesExportAssignments(module=node16).errors.txt.diff deleted file mode 100644 index 903e9f9ca1..0000000000 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesExportAssignments(module=node16).errors.txt.diff +++ /dev/null @@ -1,17 +0,0 @@ ---- old.nodeModulesExportAssignments(module=node16).errors.txt -+++ new.nodeModulesExportAssignments(module=node16).errors.txt -@@= skipped -0, +0 lines =@@ - index.ts(3,1): error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. -+subfolder/index.ts(3,1): error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. - - --==== subfolder/index.ts (0 errors) ==== -+==== subfolder/index.ts (1 errors) ==== - // cjs format file - const a = {}; - export = a; -+ ~~~~~~~~~~~ -+!!! error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. - ==== index.ts (1 errors) ==== - // esm format file - const a = {}; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesExportAssignments(module=nodenext).errors.txt b/testdata/baselines/reference/submodule/conformance/nodeModulesExportAssignments(module=nodenext).errors.txt index 0b39eaa7b4..edb49c7a61 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesExportAssignments(module=nodenext).errors.txt +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesExportAssignments(module=nodenext).errors.txt @@ -1,13 +1,10 @@ index.ts(3,1): error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. -subfolder/index.ts(3,1): error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. -==== subfolder/index.ts (1 errors) ==== +==== subfolder/index.ts (0 errors) ==== // cjs format file const a = {}; export = a; - ~~~~~~~~~~~ -!!! error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. ==== index.ts (1 errors) ==== // esm format file const a = {}; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesExportAssignments(module=nodenext).errors.txt.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesExportAssignments(module=nodenext).errors.txt.diff deleted file mode 100644 index 6efa30090b..0000000000 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesExportAssignments(module=nodenext).errors.txt.diff +++ /dev/null @@ -1,17 +0,0 @@ ---- old.nodeModulesExportAssignments(module=nodenext).errors.txt -+++ new.nodeModulesExportAssignments(module=nodenext).errors.txt -@@= skipped -0, +0 lines =@@ - index.ts(3,1): error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. -+subfolder/index.ts(3,1): error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. - - --==== subfolder/index.ts (0 errors) ==== -+==== subfolder/index.ts (1 errors) ==== - // cjs format file - const a = {}; - export = a; -+ ~~~~~~~~~~~ -+!!! error TS1203: Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead. - ==== index.ts (1 errors) ==== - // esm format file - const a = {}; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesGeneratedNameCollisions(module=node16).errors.txt b/testdata/baselines/reference/submodule/conformance/nodeModulesGeneratedNameCollisions(module=node16).errors.txt new file mode 100644 index 0000000000..cba5d90874 --- /dev/null +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesGeneratedNameCollisions(module=node16).errors.txt @@ -0,0 +1,35 @@ +subfolder/index.ts(2,10): error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. +subfolder/index.ts(3,7): error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. +subfolder/index.ts(5,14): error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. + + +==== subfolder/index.ts (3 errors) ==== + // cjs format file + function require() {} + ~~~~~~~ +!!! error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. + const exports = {}; + ~~~~~~~ +!!! error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. + class Object {} + export const __esModule = false; + ~~~~~~~~~~ +!!! error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. + export {require, exports, Object}; +==== index.ts (0 errors) ==== + // esm format file + function require() {} + const exports = {}; + class Object {} + export const __esModule = false; + export {require, exports, Object}; +==== package.json (0 errors) ==== + { + "name": "package", + "private": true, + "type": "module" + } +==== subfolder/package.json (0 errors) ==== + { + "type": "commonjs" + } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesGeneratedNameCollisions(module=node16).errors.txt.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesGeneratedNameCollisions(module=node16).errors.txt.diff index 96bc456916..818a4590d6 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesGeneratedNameCollisions(module=node16).errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesGeneratedNameCollisions(module=node16).errors.txt.diff @@ -1,43 +1,23 @@ --- old.nodeModulesGeneratedNameCollisions(module=node16).errors.txt +++ new.nodeModulesGeneratedNameCollisions(module=node16).errors.txt -@@= skipped -0, +-1 lines =@@ --subfolder/index.ts(2,10): error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. --subfolder/index.ts(3,7): error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. +@@= skipped -0, +0 lines =@@ + subfolder/index.ts(2,10): error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. + subfolder/index.ts(3,7): error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. -subfolder/index.ts(4,7): error TS2725: Class name cannot be 'Object' when targeting ES5 with module Node16. --subfolder/index.ts(5,14): error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. -- -- + subfolder/index.ts(5,14): error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. + + -==== subfolder/index.ts (4 errors) ==== -- // cjs format file -- function require() {} -- ~~~~~~~ --!!! error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. -- const exports = {}; -- ~~~~~~~ --!!! error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. -- class Object {} ++==== subfolder/index.ts (3 errors) ==== + // cjs format file + function require() {} + ~~~~~~~ +@@= skipped -12, +11 lines =@@ + ~~~~~~~ + !!! error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. + class Object {} - ~~~~~~ -!!! error TS2725: Class name cannot be 'Object' when targeting ES5 with module Node16. -- export const __esModule = false; -- ~~~~~~~~~~ --!!! error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. -- export {require, exports, Object}; --==== index.ts (0 errors) ==== -- // esm format file -- function require() {} -- const exports = {}; -- class Object {} -- export const __esModule = false; -- export {require, exports, Object}; --==== package.json (0 errors) ==== -- { -- "name": "package", -- "private": true, -- "type": "module" -- } --==== subfolder/package.json (0 errors) ==== -- { -- "type": "commonjs" -- } -@@= skipped --1, +1 lines =@@ -+ + export const __esModule = false; + ~~~~~~~~~~ + !!! error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesGeneratedNameCollisions(module=nodenext).errors.txt b/testdata/baselines/reference/submodule/conformance/nodeModulesGeneratedNameCollisions(module=nodenext).errors.txt new file mode 100644 index 0000000000..cba5d90874 --- /dev/null +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesGeneratedNameCollisions(module=nodenext).errors.txt @@ -0,0 +1,35 @@ +subfolder/index.ts(2,10): error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. +subfolder/index.ts(3,7): error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. +subfolder/index.ts(5,14): error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. + + +==== subfolder/index.ts (3 errors) ==== + // cjs format file + function require() {} + ~~~~~~~ +!!! error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. + const exports = {}; + ~~~~~~~ +!!! error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. + class Object {} + export const __esModule = false; + ~~~~~~~~~~ +!!! error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. + export {require, exports, Object}; +==== index.ts (0 errors) ==== + // esm format file + function require() {} + const exports = {}; + class Object {} + export const __esModule = false; + export {require, exports, Object}; +==== package.json (0 errors) ==== + { + "name": "package", + "private": true, + "type": "module" + } +==== subfolder/package.json (0 errors) ==== + { + "type": "commonjs" + } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesGeneratedNameCollisions(module=nodenext).errors.txt.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesGeneratedNameCollisions(module=nodenext).errors.txt.diff index a0ffe6084d..5887fb5182 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesGeneratedNameCollisions(module=nodenext).errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesGeneratedNameCollisions(module=nodenext).errors.txt.diff @@ -1,43 +1,23 @@ --- old.nodeModulesGeneratedNameCollisions(module=nodenext).errors.txt +++ new.nodeModulesGeneratedNameCollisions(module=nodenext).errors.txt -@@= skipped -0, +-1 lines =@@ --subfolder/index.ts(2,10): error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. --subfolder/index.ts(3,7): error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. +@@= skipped -0, +0 lines =@@ + subfolder/index.ts(2,10): error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. + subfolder/index.ts(3,7): error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. -subfolder/index.ts(4,7): error TS2725: Class name cannot be 'Object' when targeting ES5 with module NodeNext. --subfolder/index.ts(5,14): error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. -- -- + subfolder/index.ts(5,14): error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. + + -==== subfolder/index.ts (4 errors) ==== -- // cjs format file -- function require() {} -- ~~~~~~~ --!!! error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. -- const exports = {}; -- ~~~~~~~ --!!! error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. -- class Object {} ++==== subfolder/index.ts (3 errors) ==== + // cjs format file + function require() {} + ~~~~~~~ +@@= skipped -12, +11 lines =@@ + ~~~~~~~ + !!! error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. + class Object {} - ~~~~~~ -!!! error TS2725: Class name cannot be 'Object' when targeting ES5 with module NodeNext. -- export const __esModule = false; -- ~~~~~~~~~~ --!!! error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. -- export {require, exports, Object}; --==== index.ts (0 errors) ==== -- // esm format file -- function require() {} -- const exports = {}; -- class Object {} -- export const __esModule = false; -- export {require, exports, Object}; --==== package.json (0 errors) ==== -- { -- "name": "package", -- "private": true, -- "type": "module" -- } --==== subfolder/package.json (0 errors) ==== -- { -- "type": "commonjs" -- } -@@= skipped --1, +1 lines =@@ -+ + export const __esModule = false; + ~~~~~~~~~~ + !!! error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesTopLevelAwait(module=node16).errors.txt b/testdata/baselines/reference/submodule/conformance/nodeModulesTopLevelAwait(module=node16).errors.txt index bde172d3b2..3a11425d12 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesTopLevelAwait(module=node16).errors.txt +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesTopLevelAwait(module=node16).errors.txt @@ -1,18 +1,18 @@ index.ts(2,11): error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. index.ts(4,5): error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. -subfolder/index.ts(2,11): error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. -subfolder/index.ts(4,5): error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. +subfolder/index.ts(2,11): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. +subfolder/index.ts(4,5): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. ==== subfolder/index.ts (2 errors) ==== // cjs format file const x = await 1; ~~~~~ -!!! error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. +!!! error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. export {x}; for await (const y of []) {} ~~~~~ -!!! error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. +!!! error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. ==== index.ts (2 errors) ==== // esm format file const x = await 1; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesTopLevelAwait(module=node16).errors.txt.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesTopLevelAwait(module=node16).errors.txt.diff index eca066cf58..ba9340836a 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesTopLevelAwait(module=node16).errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesTopLevelAwait(module=node16).errors.txt.diff @@ -1,26 +1,16 @@ --- old.nodeModulesTopLevelAwait(module=node16).errors.txt +++ new.nodeModulesTopLevelAwait(module=node16).errors.txt @@= skipped -0, +0 lines =@@ --subfolder/index.ts(2,11): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. --subfolder/index.ts(4,5): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. +index.ts(2,11): error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. +index.ts(4,5): error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. -+subfolder/index.ts(2,11): error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. -+subfolder/index.ts(4,5): error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. + subfolder/index.ts(2,11): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. + subfolder/index.ts(4,5): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. - - ==== subfolder/index.ts (2 errors) ==== - // cjs format file - const x = await 1; - ~~~~~ --!!! error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. -+!!! error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. - export {x}; +@@= skipped -10, +12 lines =@@ for await (const y of []) {} ~~~~~ --!!! error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. + !!! error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. -==== index.ts (0 errors) ==== -+!!! error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. +==== index.ts (2 errors) ==== // esm format file const x = await 1; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesTopLevelAwait(module=nodenext).errors.txt b/testdata/baselines/reference/submodule/conformance/nodeModulesTopLevelAwait(module=nodenext).errors.txt index bde172d3b2..3a11425d12 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesTopLevelAwait(module=nodenext).errors.txt +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesTopLevelAwait(module=nodenext).errors.txt @@ -1,18 +1,18 @@ index.ts(2,11): error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. index.ts(4,5): error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. -subfolder/index.ts(2,11): error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. -subfolder/index.ts(4,5): error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. +subfolder/index.ts(2,11): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. +subfolder/index.ts(4,5): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. ==== subfolder/index.ts (2 errors) ==== // cjs format file const x = await 1; ~~~~~ -!!! error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. +!!! error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. export {x}; for await (const y of []) {} ~~~~~ -!!! error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. +!!! error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. ==== index.ts (2 errors) ==== // esm format file const x = await 1; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesTopLevelAwait(module=nodenext).errors.txt.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesTopLevelAwait(module=nodenext).errors.txt.diff index 2de2cd7757..9dd8637042 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesTopLevelAwait(module=nodenext).errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesTopLevelAwait(module=nodenext).errors.txt.diff @@ -1,26 +1,16 @@ --- old.nodeModulesTopLevelAwait(module=nodenext).errors.txt +++ new.nodeModulesTopLevelAwait(module=nodenext).errors.txt @@= skipped -0, +0 lines =@@ --subfolder/index.ts(2,11): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. --subfolder/index.ts(4,5): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. +index.ts(2,11): error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. +index.ts(4,5): error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. -+subfolder/index.ts(2,11): error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. -+subfolder/index.ts(4,5): error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. + subfolder/index.ts(2,11): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. + subfolder/index.ts(4,5): error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. - - ==== subfolder/index.ts (2 errors) ==== - // cjs format file - const x = await 1; - ~~~~~ --!!! error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. -+!!! error TS1378: Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. - export {x}; +@@= skipped -10, +12 lines =@@ for await (const y of []) {} ~~~~~ --!!! error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. + !!! error TS1309: The current file is a CommonJS module and cannot use 'await' at the top level. -==== index.ts (0 errors) ==== -+!!! error TS1432: Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher. +==== index.ts (2 errors) ==== // esm format file const x = await 1; From e825898f110b579b66a70c085a15b15df76d18ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=B3=C3=B0i=20Karlsson?= Date: Mon, 17 Mar 2025 03:23:53 +0100 Subject: [PATCH 05/30] Resolve bad history linearly --- .golangci.yml | 4 - Herebyfile.mjs | 2 +- _tools/customlint/emptycase.go | 2 +- internal/binder/binder.go | 1 + internal/checker/checker.go | 574 +++++++++--------- internal/execute/tsc.go | 6 +- internal/project/documentregistry.go | 4 +- internal/project/service.go | 4 +- internal/testutil/testutil.go | 2 +- internal/tsoptions/tsconfigparsing_test.go | 34 +- internal/vfs/osvfs/os.go | 2 +- .../compiler/alwaysStrict.errors.txt | 9 + .../compiler/alwaysStrict.errors.txt.diff | 14 - .../compiler/alwaysStrictES6.errors.txt | 9 + .../compiler/alwaysStrictES6.errors.txt.diff | 14 - .../compiler/alwaysStrictModule.errors.txt | 11 + .../alwaysStrictModule.errors.txt.diff | 16 - .../compiler/alwaysStrictModule2.errors.txt | 21 + .../alwaysStrictModule2.errors.txt.diff | 26 - ...alwaysStrictNoImplicitUseStrict.errors.txt | 11 + ...sStrictNoImplicitUseStrict.errors.txt.diff | 21 +- 21 files changed, 382 insertions(+), 405 deletions(-) create mode 100644 testdata/baselines/reference/submodule/compiler/alwaysStrict.errors.txt delete mode 100644 testdata/baselines/reference/submodule/compiler/alwaysStrict.errors.txt.diff create mode 100644 testdata/baselines/reference/submodule/compiler/alwaysStrictES6.errors.txt delete mode 100644 testdata/baselines/reference/submodule/compiler/alwaysStrictES6.errors.txt.diff create mode 100644 testdata/baselines/reference/submodule/compiler/alwaysStrictModule.errors.txt delete mode 100644 testdata/baselines/reference/submodule/compiler/alwaysStrictModule.errors.txt.diff create mode 100644 testdata/baselines/reference/submodule/compiler/alwaysStrictModule2.errors.txt delete mode 100644 testdata/baselines/reference/submodule/compiler/alwaysStrictModule2.errors.txt.diff create mode 100644 testdata/baselines/reference/submodule/compiler/alwaysStrictNoImplicitUseStrict.errors.txt diff --git a/.golangci.yml b/.golangci.yml index de3955a10c..3d33b1bd1b 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -64,10 +64,6 @@ linters-settings: customlint: type: module - wrapcheck: - ignorePackageGlobs: - - encoding/* - - github.com/go-json-experiment/* # revive: # enable-all-rules: true # rules: diff --git a/Herebyfile.mjs b/Herebyfile.mjs index 2f05653af8..38b0be6366 100644 --- a/Herebyfile.mjs +++ b/Herebyfile.mjs @@ -44,7 +44,7 @@ const defaultGoBuildTags = [ /** * @param {...string} extra - * @returns + * @returns {string[]} */ function goBuildTags(...extra) { const tags = new Set(defaultGoBuildTags.concat(extra)); diff --git a/_tools/customlint/emptycase.go b/_tools/customlint/emptycase.go index 7f646002a1..a6c060a809 100644 --- a/_tools/customlint/emptycase.go +++ b/_tools/customlint/emptycase.go @@ -19,7 +19,7 @@ var emptyCaseAnalyzer = &analysis.Analyzer{ }, } -func runEmptyCase(pass *analysis.Pass) (interface{}, error) { +func runEmptyCase(pass *analysis.Pass) (any, error) { inspect := pass.ResultOf[inspect.Analyzer].(*inspector.Inspector) nodeFilter := []ast.Node{ diff --git a/internal/binder/binder.go b/internal/binder/binder.go index d2eeaedfb6..62cf2a06b4 100644 --- a/internal/binder/binder.go +++ b/internal/binder/binder.go @@ -117,6 +117,7 @@ func bindSourceFile(file *ast.SourceFile, options *core.CompilerOptions) { b.file = file b.options = options b.languageVersion = options.GetEmitScriptTarget() + b.inStrictMode = options.AlwaysStrict.IsTrue() b.unreachableFlow = b.newFlowNode(ast.FlowFlagsUnreachable) b.reportedUnreachableFlow = b.newFlowNode(ast.FlowFlagsUnreachable) b.bind(file.AsNode()) diff --git a/internal/checker/checker.go b/internal/checker/checker.go index ec83d74faf..db6693beef 100644 --- a/internal/checker/checker.go +++ b/internal/checker/checker.go @@ -523,287 +523,287 @@ type Host interface{} var nextCheckerID atomic.Uint32 type Checker struct { - id uint32 - program Program - host Host - compilerOptions *core.CompilerOptions - files []*ast.SourceFile - fileIndexMap map[*ast.SourceFile]int - compareSymbols func(*ast.Symbol, *ast.Symbol) int - TypeCount uint32 - symbolCount uint32 - totalInstantiationCount uint32 - instantiationCount uint32 - instantiationDepth uint32 - inlineLevel int - currentNode *ast.Node - varianceTypeParameter *Type - languageVersion core.ScriptTarget - moduleKind core.ModuleKind - isInferencePartiallyBlocked bool - legacyDecorators bool - emitStandardClassFields bool - allowSyntheticDefaultImports bool - strictNullChecks bool - strictFunctionTypes bool - strictBindCallApply bool - strictPropertyInitialization bool - strictBuiltinIteratorReturn bool - noImplicitAny bool - noImplicitThis bool - useUnknownInCatchVariables bool - exactOptionalPropertyTypes bool - canCollectSymbolAliasAccessibilityData bool - arrayVariances []VarianceFlags - globals ast.SymbolTable - globalSymbols []*ast.Symbol - evaluate evaluator.Evaluator - stringLiteralTypes map[string]*Type - numberLiteralTypes map[jsnum.Number]*Type - bigintLiteralTypes map[jsnum.PseudoBigInt]*Type - enumLiteralTypes map[EnumLiteralKey]*Type - indexedAccessTypes map[string]*Type - templateLiteralTypes map[string]*Type - stringMappingTypes map[StringMappingKey]*Type - uniqueESSymbolTypes map[*ast.Symbol]*Type - subtypeReductionCache map[string][]*Type - cachedTypes map[CachedTypeKey]*Type - cachedSignatures map[CachedSignatureKey]*Signature - undefinedProperties map[string]*ast.Symbol - narrowedTypes map[NarrowedTypeKey]*Type - assignmentReducedTypes map[AssignmentReducedKey]*Type - discriminatedContextualTypes map[DiscriminatedContextualTypeKey]*Type - instantiationExpressionTypes map[InstantiationExpressionKey]*Type - substitutionTypes map[SubstitutionTypeKey]*Type - reverseMappedCache map[ReverseMappedTypeKey]*Type - reverseHomomorphicMappedCache map[ReverseMappedTypeKey]*Type - iterationTypesCache map[IterationTypesKey]IterationTypes - markerTypes core.Set[*Type] - identifierSymbols map[*ast.Node]*ast.Symbol - undefinedSymbol *ast.Symbol - argumentsSymbol *ast.Symbol - requireSymbol *ast.Symbol - unknownSymbol *ast.Symbol - resolvingSymbol *ast.Symbol - unresolvedSymbols map[string]*ast.Symbol - errorTypes map[string]*Type - globalThisSymbol *ast.Symbol - resolveName func(location *ast.Node, name string, meaning ast.SymbolFlags, nameNotFoundMessage *diagnostics.Message, isUse bool, excludeGlobals bool) *ast.Symbol - resolveNameForSymbolSuggestion func(location *ast.Node, name string, meaning ast.SymbolFlags, nameNotFoundMessage *diagnostics.Message, isUse bool, excludeGlobals bool) *ast.Symbol - tupleTypes map[string]*Type - unionTypes map[string]*Type - unionOfUnionTypes map[UnionOfUnionKey]*Type - intersectionTypes map[string]*Type - diagnostics ast.DiagnosticsCollection - suggestionDiagnostics ast.DiagnosticsCollection - symbolPool core.Pool[ast.Symbol] - signaturePool core.Pool[Signature] - indexInfoPool core.Pool[IndexInfo] - mergedSymbols map[*ast.Symbol]*ast.Symbol - factory ast.NodeFactory - nodeLinks core.LinkStore[*ast.Node, NodeLinks] - signatureLinks core.LinkStore[*ast.Node, SignatureLinks] - typeNodeLinks core.LinkStore[*ast.Node, TypeNodeLinks] - enumMemberLinks core.LinkStore[*ast.Node, EnumMemberLinks] - assertionLinks core.LinkStore[*ast.Node, AssertionLinks] - arrayLiteralLinks core.LinkStore[*ast.Node, ArrayLiteralLinks] - switchStatementLinks core.LinkStore[*ast.Node, SwitchStatementLinks] - symbolReferenceLinks core.LinkStore[*ast.Symbol, SymbolReferenceLinks] - valueSymbolLinks core.LinkStore[*ast.Symbol, ValueSymbolLinks] - mappedSymbolLinks core.LinkStore[*ast.Symbol, MappedSymbolLinks] - deferredSymbolLinks core.LinkStore[*ast.Symbol, DeferredSymbolLinks] - aliasSymbolLinks core.LinkStore[*ast.Symbol, AliasSymbolLinks] - moduleSymbolLinks core.LinkStore[*ast.Symbol, ModuleSymbolLinks] - lateBoundLinks core.LinkStore[*ast.Symbol, LateBoundLinks] - exportTypeLinks core.LinkStore[*ast.Symbol, ExportTypeLinks] - membersAndExportsLinks core.LinkStore[*ast.Symbol, MembersAndExportsLinks] - typeAliasLinks core.LinkStore[*ast.Symbol, TypeAliasLinks] - declaredTypeLinks core.LinkStore[*ast.Symbol, DeclaredTypeLinks] - spreadLinks core.LinkStore[*ast.Symbol, SpreadLinks] - varianceLinks core.LinkStore[*ast.Symbol, VarianceLinks] - indexSymbolLinks core.LinkStore[*ast.Symbol, IndexSymbolLinks] - ReverseMappedSymbolLinks core.LinkStore[*ast.Symbol, ReverseMappedSymbolLinks] - markedAssignmentSymbolLinks core.LinkStore[*ast.Symbol, MarkedAssignmentSymbolLinks] - sourceFileLinks core.LinkStore[*ast.SourceFile, SourceFileLinks] - patternForType map[*Type]*ast.Node - contextFreeTypes map[*ast.Node]*Type - anyType *Type - autoType *Type - wildcardType *Type - blockedStringType *Type - errorType *Type - unresolvedType *Type - nonInferrableAnyType *Type - intrinsicMarkerType *Type - unknownType *Type - undefinedType *Type - undefinedWideningType *Type - missingType *Type - undefinedOrMissingType *Type - optionalType *Type - nullType *Type - nullWideningType *Type - stringType *Type - numberType *Type - bigintType *Type - regularFalseType *Type - falseType *Type - regularTrueType *Type - trueType *Type - booleanType *Type - esSymbolType *Type - voidType *Type - neverType *Type - silentNeverType *Type - implicitNeverType *Type - unreachableNeverType *Type - nonPrimitiveType *Type - stringOrNumberType *Type - stringNumberSymbolType *Type - numberOrBigIntType *Type - templateConstraintType *Type - numericStringType *Type - uniqueLiteralType *Type - uniqueLiteralMapper *TypeMapper - reliabilityFlags RelationComparisonResult - reportUnreliableMapper *TypeMapper - reportUnmeasurableMapper *TypeMapper - restrictiveMapper *TypeMapper - permissiveMapper *TypeMapper - emptyObjectType *Type - emptyTypeLiteralType *Type - unknownEmptyObjectType *Type - unknownUnionType *Type - emptyGenericType *Type - anyFunctionType *Type - noConstraintType *Type - circularConstraintType *Type - resolvingDefaultType *Type - markerSuperType *Type - markerSubType *Type - markerOtherType *Type - markerSuperTypeForCheck *Type - markerSubTypeForCheck *Type - noTypePredicate *TypePredicate - anySignature *Signature - unknownSignature *Signature - resolvingSignature *Signature - silentNeverSignature *Signature - enumNumberIndexInfo *IndexInfo - patternAmbientModules []ast.PatternAmbientModule - patternAmbientModuleAugmentations ast.SymbolTable - globalObjectType *Type - globalFunctionType *Type - globalCallableFunctionType *Type - globalNewableFunctionType *Type - globalArrayType *Type - globalReadonlyArrayType *Type - globalStringType *Type - globalNumberType *Type - globalBooleanType *Type - globalRegExpType *Type - globalThisType *Type - anyArrayType *Type - autoArrayType *Type - anyReadonlyArrayType *Type - deferredGlobalImportMetaExpressionType *Type - contextualBindingPatterns []*ast.Node - emptyStringType *Type - zeroType *Type - zeroBigIntType *Type - typeofType *Type - typeResolutions []TypeResolution - resolutionStart int - inVarianceComputation bool - suggestionCount int - apparentArgumentCount *int - lastGetCombinedNodeFlagsNode *ast.Node - lastGetCombinedNodeFlagsResult ast.NodeFlags - lastGetCombinedModifierFlagsNode *ast.Node - lastGetCombinedModifierFlagsResult ast.ModifierFlags - inferenceStates []InferenceState - flowStates []FlowState - flowLoopCache map[FlowLoopKey]*Type - flowLoopStack []FlowLoopInfo - sharedFlows []SharedFlow - antecedentTypes []*Type - flowAnalysisDisabled bool - flowInvocationCount int - flowTypeCache map[*ast.Node]*Type - lastFlowNode *ast.FlowNode - lastFlowNodeReachable bool - flowNodeReachable map[*ast.FlowNode]bool - flowNodePostSuper map[*ast.FlowNode]bool - renamedBindingElementsInTypes []*ast.Node - contextualInfos []ContextualInfo - inferenceContextInfos []InferenceContextInfo - awaitedTypeStack []*Type - reverseMappedSourceStack []*Type - reverseMappedTargetStack []*Type - reverseExpandingFlags ExpandingFlags - relaters []Relater - subtypeRelation *Relation - strictSubtypeRelation *Relation - assignableRelation *Relation - comparableRelation *Relation - identityRelation *Relation - enumRelation map[EnumRelationKey]RelationComparisonResult - getGlobalESSymbolType func() *Type - getGlobalBigIntType func() *Type - getGlobalImportMetaType func() *Type - getGlobalImportAttributesType func() *Type - getGlobalImportAttributesTypeChecked func() *Type - getGlobalNonNullableTypeAliasOrNil func() *ast.Symbol - getGlobalExtractSymbol func() *ast.Symbol - getGlobalDisposableType func() *Type - getGlobalAsyncDisposableType func() *Type - getGlobalAwaitedSymbol func() *ast.Symbol - getGlobalAwaitedSymbolOrNil func() *ast.Symbol - getGlobalNaNSymbolOrNil func() *ast.Symbol - getGlobalRecordSymbol func() *ast.Symbol - getGlobalTemplateStringsArrayType func() *Type - getGlobalESSymbolConstructorSymbolOrNil func() *ast.Symbol - getGlobalImportCallOptionsType func() *Type - getGlobalImportCallOptionsTypeChecked func() *Type - getGlobalPromiseType func() *Type - getGlobalPromiseTypeChecked func() *Type - getGlobalPromiseLikeType func() *Type - getGlobalPromiseConstructorSymbol func() *ast.Symbol - getGlobalPromiseConstructorSymbolOrNil func() *ast.Symbol - getGlobalOmitSymbol func() *ast.Symbol - getGlobalIteratorType func() *Type - getGlobalIterableType func() *Type - getGlobalIterableTypeChecked func() *Type - getGlobalIterableIteratorType func() *Type - getGlobalIterableIteratorTypeChecked func() *Type - getGlobalIteratorObjectType func() *Type - getGlobalGeneratorType func() *Type - getGlobalAsyncIteratorType func() *Type - getGlobalAsyncIterableType func() *Type - getGlobalAsyncIterableIteratorType func() *Type - getGlobalAsyncIterableIteratorTypeChecked func() *Type - getGlobalAsyncIteratorObjectType func() *Type - getGlobalAsyncGeneratorType func() *Type - getGlobalIteratorYieldResultType func() *Type - getGlobalIteratorReturnResultType func() *Type - getGlobalTypedPropertyDescriptorType func() *Type - getGlobalClassDecoratorContextType func() *Type - getGlobalClassMethodDecoratorContextType func() *Type - getGlobalClassGetterDecoratorContextType func() *Type - getGlobalClassSetterDecoratorContextType func() *Type - getGlobalClassAccessorDecoratorContxtType func() *Type - getGlobalClassAccessorDecoratorTargetType func() *Type - getGlobalClassAccessorDecoratorResultType func() *Type - getGlobalClassFieldDecoratorContextType func() *Type - syncIterationTypesResolver *IterationTypesResolver - asyncIterationTypesResolver *IterationTypesResolver - isPrimitiveOrObjectOrEmptyType func(*Type) bool - containsMissingType func(*Type) bool - couldContainTypeVariables func(*Type) bool - isStringIndexSignatureOnlyType func(*Type) bool - markNodeAssignments func(*ast.Node) bool - emitResolver *emitResolver - emitResolverOnce sync.Once + id uint32 + program Program + host Host + compilerOptions *core.CompilerOptions + files []*ast.SourceFile + fileIndexMap map[*ast.SourceFile]int + compareSymbols func(*ast.Symbol, *ast.Symbol) int + TypeCount uint32 + symbolCount uint32 + totalInstantiationCount uint32 + instantiationCount uint32 + instantiationDepth uint32 + inlineLevel int + currentNode *ast.Node + varianceTypeParameter *Type + languageVersion core.ScriptTarget + moduleKind core.ModuleKind + isInferencePartiallyBlocked bool + legacyDecorators bool + emitStandardClassFields bool + allowSyntheticDefaultImports bool + strictNullChecks bool + strictFunctionTypes bool + strictBindCallApply bool + strictPropertyInitialization bool + strictBuiltinIteratorReturn bool + noImplicitAny bool + noImplicitThis bool + useUnknownInCatchVariables bool + exactOptionalPropertyTypes bool + canCollectSymbolAliasAccessibilityData bool + arrayVariances []VarianceFlags + globals ast.SymbolTable + globalSymbols []*ast.Symbol + evaluate evaluator.Evaluator + stringLiteralTypes map[string]*Type + numberLiteralTypes map[jsnum.Number]*Type + bigintLiteralTypes map[jsnum.PseudoBigInt]*Type + enumLiteralTypes map[EnumLiteralKey]*Type + indexedAccessTypes map[string]*Type + templateLiteralTypes map[string]*Type + stringMappingTypes map[StringMappingKey]*Type + uniqueESSymbolTypes map[*ast.Symbol]*Type + subtypeReductionCache map[string][]*Type + cachedTypes map[CachedTypeKey]*Type + cachedSignatures map[CachedSignatureKey]*Signature + undefinedProperties map[string]*ast.Symbol + narrowedTypes map[NarrowedTypeKey]*Type + assignmentReducedTypes map[AssignmentReducedKey]*Type + discriminatedContextualTypes map[DiscriminatedContextualTypeKey]*Type + instantiationExpressionTypes map[InstantiationExpressionKey]*Type + substitutionTypes map[SubstitutionTypeKey]*Type + reverseMappedCache map[ReverseMappedTypeKey]*Type + reverseHomomorphicMappedCache map[ReverseMappedTypeKey]*Type + iterationTypesCache map[IterationTypesKey]IterationTypes + markerTypes core.Set[*Type] + identifierSymbols map[*ast.Node]*ast.Symbol + undefinedSymbol *ast.Symbol + argumentsSymbol *ast.Symbol + requireSymbol *ast.Symbol + unknownSymbol *ast.Symbol + resolvingSymbol *ast.Symbol + unresolvedSymbols map[string]*ast.Symbol + errorTypes map[string]*Type + globalThisSymbol *ast.Symbol + resolveName func(location *ast.Node, name string, meaning ast.SymbolFlags, nameNotFoundMessage *diagnostics.Message, isUse bool, excludeGlobals bool) *ast.Symbol + resolveNameForSymbolSuggestion func(location *ast.Node, name string, meaning ast.SymbolFlags, nameNotFoundMessage *diagnostics.Message, isUse bool, excludeGlobals bool) *ast.Symbol + tupleTypes map[string]*Type + unionTypes map[string]*Type + unionOfUnionTypes map[UnionOfUnionKey]*Type + intersectionTypes map[string]*Type + diagnostics ast.DiagnosticsCollection + suggestionDiagnostics ast.DiagnosticsCollection + symbolPool core.Pool[ast.Symbol] + signaturePool core.Pool[Signature] + indexInfoPool core.Pool[IndexInfo] + mergedSymbols map[*ast.Symbol]*ast.Symbol + factory ast.NodeFactory + nodeLinks core.LinkStore[*ast.Node, NodeLinks] + signatureLinks core.LinkStore[*ast.Node, SignatureLinks] + typeNodeLinks core.LinkStore[*ast.Node, TypeNodeLinks] + enumMemberLinks core.LinkStore[*ast.Node, EnumMemberLinks] + assertionLinks core.LinkStore[*ast.Node, AssertionLinks] + arrayLiteralLinks core.LinkStore[*ast.Node, ArrayLiteralLinks] + switchStatementLinks core.LinkStore[*ast.Node, SwitchStatementLinks] + symbolReferenceLinks core.LinkStore[*ast.Symbol, SymbolReferenceLinks] + valueSymbolLinks core.LinkStore[*ast.Symbol, ValueSymbolLinks] + mappedSymbolLinks core.LinkStore[*ast.Symbol, MappedSymbolLinks] + deferredSymbolLinks core.LinkStore[*ast.Symbol, DeferredSymbolLinks] + aliasSymbolLinks core.LinkStore[*ast.Symbol, AliasSymbolLinks] + moduleSymbolLinks core.LinkStore[*ast.Symbol, ModuleSymbolLinks] + lateBoundLinks core.LinkStore[*ast.Symbol, LateBoundLinks] + exportTypeLinks core.LinkStore[*ast.Symbol, ExportTypeLinks] + membersAndExportsLinks core.LinkStore[*ast.Symbol, MembersAndExportsLinks] + typeAliasLinks core.LinkStore[*ast.Symbol, TypeAliasLinks] + declaredTypeLinks core.LinkStore[*ast.Symbol, DeclaredTypeLinks] + spreadLinks core.LinkStore[*ast.Symbol, SpreadLinks] + varianceLinks core.LinkStore[*ast.Symbol, VarianceLinks] + indexSymbolLinks core.LinkStore[*ast.Symbol, IndexSymbolLinks] + ReverseMappedSymbolLinks core.LinkStore[*ast.Symbol, ReverseMappedSymbolLinks] + markedAssignmentSymbolLinks core.LinkStore[*ast.Symbol, MarkedAssignmentSymbolLinks] + sourceFileLinks core.LinkStore[*ast.SourceFile, SourceFileLinks] + patternForType map[*Type]*ast.Node + contextFreeTypes map[*ast.Node]*Type + anyType *Type + autoType *Type + wildcardType *Type + blockedStringType *Type + errorType *Type + unresolvedType *Type + nonInferrableAnyType *Type + intrinsicMarkerType *Type + unknownType *Type + undefinedType *Type + undefinedWideningType *Type + missingType *Type + undefinedOrMissingType *Type + optionalType *Type + nullType *Type + nullWideningType *Type + stringType *Type + numberType *Type + bigintType *Type + regularFalseType *Type + falseType *Type + regularTrueType *Type + trueType *Type + booleanType *Type + esSymbolType *Type + voidType *Type + neverType *Type + silentNeverType *Type + implicitNeverType *Type + unreachableNeverType *Type + nonPrimitiveType *Type + stringOrNumberType *Type + stringNumberSymbolType *Type + numberOrBigIntType *Type + templateConstraintType *Type + numericStringType *Type + uniqueLiteralType *Type + uniqueLiteralMapper *TypeMapper + reliabilityFlags RelationComparisonResult + reportUnreliableMapper *TypeMapper + reportUnmeasurableMapper *TypeMapper + restrictiveMapper *TypeMapper + permissiveMapper *TypeMapper + emptyObjectType *Type + emptyTypeLiteralType *Type + unknownEmptyObjectType *Type + unknownUnionType *Type + emptyGenericType *Type + anyFunctionType *Type + noConstraintType *Type + circularConstraintType *Type + resolvingDefaultType *Type + markerSuperType *Type + markerSubType *Type + markerOtherType *Type + markerSuperTypeForCheck *Type + markerSubTypeForCheck *Type + noTypePredicate *TypePredicate + anySignature *Signature + unknownSignature *Signature + resolvingSignature *Signature + silentNeverSignature *Signature + enumNumberIndexInfo *IndexInfo + patternAmbientModules []ast.PatternAmbientModule + patternAmbientModuleAugmentations ast.SymbolTable + globalObjectType *Type + globalFunctionType *Type + globalCallableFunctionType *Type + globalNewableFunctionType *Type + globalArrayType *Type + globalReadonlyArrayType *Type + globalStringType *Type + globalNumberType *Type + globalBooleanType *Type + globalRegExpType *Type + globalThisType *Type + anyArrayType *Type + autoArrayType *Type + anyReadonlyArrayType *Type + deferredGlobalImportMetaExpressionType *Type + contextualBindingPatterns []*ast.Node + emptyStringType *Type + zeroType *Type + zeroBigIntType *Type + typeofType *Type + typeResolutions []TypeResolution + resolutionStart int + inVarianceComputation bool + suggestionCount int + apparentArgumentCount *int + lastGetCombinedNodeFlagsNode *ast.Node + lastGetCombinedNodeFlagsResult ast.NodeFlags + lastGetCombinedModifierFlagsNode *ast.Node + lastGetCombinedModifierFlagsResult ast.ModifierFlags + inferenceStates []InferenceState + flowStates []FlowState + flowLoopCache map[FlowLoopKey]*Type + flowLoopStack []FlowLoopInfo + sharedFlows []SharedFlow + antecedentTypes []*Type + flowAnalysisDisabled bool + flowInvocationCount int + flowTypeCache map[*ast.Node]*Type + lastFlowNode *ast.FlowNode + lastFlowNodeReachable bool + flowNodeReachable map[*ast.FlowNode]bool + flowNodePostSuper map[*ast.FlowNode]bool + renamedBindingElementsInTypes []*ast.Node + contextualInfos []ContextualInfo + inferenceContextInfos []InferenceContextInfo + awaitedTypeStack []*Type + reverseMappedSourceStack []*Type + reverseMappedTargetStack []*Type + reverseExpandingFlags ExpandingFlags + relaters []Relater + subtypeRelation *Relation + strictSubtypeRelation *Relation + assignableRelation *Relation + comparableRelation *Relation + identityRelation *Relation + enumRelation map[EnumRelationKey]RelationComparisonResult + getGlobalESSymbolType func() *Type + getGlobalBigIntType func() *Type + getGlobalImportMetaType func() *Type + getGlobalImportAttributesType func() *Type + getGlobalImportAttributesTypeChecked func() *Type + getGlobalNonNullableTypeAliasOrNil func() *ast.Symbol + getGlobalExtractSymbol func() *ast.Symbol + getGlobalDisposableType func() *Type + getGlobalAsyncDisposableType func() *Type + getGlobalAwaitedSymbol func() *ast.Symbol + getGlobalAwaitedSymbolOrNil func() *ast.Symbol + getGlobalNaNSymbolOrNil func() *ast.Symbol + getGlobalRecordSymbol func() *ast.Symbol + getGlobalTemplateStringsArrayType func() *Type + getGlobalESSymbolConstructorSymbolOrNil func() *ast.Symbol + getGlobalImportCallOptionsType func() *Type + getGlobalImportCallOptionsTypeChecked func() *Type + getGlobalPromiseType func() *Type + getGlobalPromiseTypeChecked func() *Type + getGlobalPromiseLikeType func() *Type + getGlobalPromiseConstructorSymbol func() *ast.Symbol + getGlobalPromiseConstructorSymbolOrNil func() *ast.Symbol + getGlobalOmitSymbol func() *ast.Symbol + getGlobalIteratorType func() *Type + getGlobalIterableType func() *Type + getGlobalIterableTypeChecked func() *Type + getGlobalIterableIteratorType func() *Type + getGlobalIterableIteratorTypeChecked func() *Type + getGlobalIteratorObjectType func() *Type + getGlobalGeneratorType func() *Type + getGlobalAsyncIteratorType func() *Type + getGlobalAsyncIterableType func() *Type + getGlobalAsyncIterableIteratorType func() *Type + getGlobalAsyncIterableIteratorTypeChecked func() *Type + getGlobalAsyncIteratorObjectType func() *Type + getGlobalAsyncGeneratorType func() *Type + getGlobalIteratorYieldResultType func() *Type + getGlobalIteratorReturnResultType func() *Type + getGlobalTypedPropertyDescriptorType func() *Type + getGlobalClassDecoratorContextType func() *Type + getGlobalClassMethodDecoratorContextType func() *Type + getGlobalClassGetterDecoratorContextType func() *Type + getGlobalClassSetterDecoratorContextType func() *Type + getGlobalClassAccessorDecoratorContextType func() *Type + getGlobalClassAccessorDecoratorTargetType func() *Type + getGlobalClassAccessorDecoratorResultType func() *Type + getGlobalClassFieldDecoratorContextType func() *Type + syncIterationTypesResolver *IterationTypesResolver + asyncIterationTypesResolver *IterationTypesResolver + isPrimitiveOrObjectOrEmptyType func(*Type) bool + containsMissingType func(*Type) bool + couldContainTypeVariables func(*Type) bool + isStringIndexSignatureOnlyType func(*Type) bool + markNodeAssignments func(*ast.Node) bool + emitResolver *emitResolver + emitResolverOnce sync.Once } func NewChecker(program Program) *Checker { @@ -1001,7 +1001,7 @@ func NewChecker(program Program) *Checker { c.getGlobalClassMethodDecoratorContextType = c.getGlobalTypeResolver("ClassMethodDecoratorContext", 2 /*arity*/, true /*reportErrors*/) c.getGlobalClassGetterDecoratorContextType = c.getGlobalTypeResolver("ClassGetterDecoratorContext", 2 /*arity*/, true /*reportErrors*/) c.getGlobalClassSetterDecoratorContextType = c.getGlobalTypeResolver("ClassSetterDecoratorContext", 2 /*arity*/, true /*reportErrors*/) - c.getGlobalClassAccessorDecoratorContxtType = c.getGlobalTypeResolver("ClassAccessorDecoratorContext", 2 /*arity*/, true /*reportErrors*/) + c.getGlobalClassAccessorDecoratorContextType = c.getGlobalTypeResolver("ClassAccessorDecoratorContext", 2 /*arity*/, true /*reportErrors*/) c.getGlobalClassAccessorDecoratorTargetType = c.getGlobalTypeResolver("ClassAccessorDecoratorTarget", 2 /*arity*/, true /*reportErrors*/) c.getGlobalClassAccessorDecoratorResultType = c.getGlobalTypeResolver("ClassAccessorDecoratorResult", 2 /*arity*/, true /*reportErrors*/) c.getGlobalClassFieldDecoratorContextType = c.getGlobalTypeResolver("ClassFieldDecoratorContext", 2 /*arity*/, true /*reportErrors*/) @@ -5525,7 +5525,7 @@ func (c *Checker) checkVarDeclaredNamesNotShadowed(node *ast.Node) { namesShareScope := container != nil && (ast.IsBlock(container) && ast.IsFunctionLike(container.Parent) || ast.IsModuleBlock(container) || ast.IsModuleDeclaration(container) || ast.IsSourceFile(container)) // here we know that function scoped variable is "shadowed" by block scoped one - // a var declatation can't hoist past a lexical declaration and it results in a SyntaxError at runtime + // a var declaration can't hoist past a lexical declaration and it results in a SyntaxError at runtime if !namesShareScope { name := c.symbolToString(localDeclarationSymbol) c.error(node, diagnostics.Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1, name, name) @@ -20210,7 +20210,7 @@ func isReservedMemberName(name string) bool { } func (c *Checker) symbolIsValue(symbol *ast.Symbol) bool { - return c.symbolIsValueEx(symbol, false /*includeTyoeOnlyMembers*/) + return c.symbolIsValueEx(symbol, false /*includeTypeOnlyMembers*/) } func (c *Checker) symbolIsValueEx(symbol *ast.Symbol, includeTypeOnlyMembers bool) bool { @@ -20357,7 +20357,7 @@ func (c *Checker) instantiateTypeWorker(t *Type, m *TypeMapper, alias *TypeAlias return t } -// Handles instantion of the following object types: +// Handles instantiation of the following object types: // AnonymousType (ObjectFlagsAnonymous) // TypeReference with node != nil (ObjectFlagsReference) // SingleSignatureType (ObjectFlagsSingleSignatureType) @@ -27739,7 +27739,7 @@ func (c *Checker) newClassSetterDecoratorContextType(classType *Type, valueType } func (c *Checker) newClassAccessorDecoratorContextType(thisType *Type, valueType *Type) *Type { - return c.tryCreateTypeReference(c.getGlobalClassAccessorDecoratorContxtType(), []*Type{thisType, valueType}) + return c.tryCreateTypeReference(c.getGlobalClassAccessorDecoratorContextType(), []*Type{thisType, valueType}) } func (c *Checker) newClassFieldDecoratorContextType(thisType *Type, valueType *Type) *Type { @@ -28487,7 +28487,7 @@ func (c *Checker) removeNullableByIntersection(t *Type, targetFacts TypeFacts, o // By default we intersect with a union of {} and the opposite nullable. emptyAndOtherUnion := c.getUnionType([]*Type{c.emptyObjectType, otherType}) // For each constituent type that can compare equal to the target nullable, intersect with the above union - // if the type doesn't already include the opppsite nullable and the constituent can compare equal to the + // if the type doesn't already include the opposite nullable and the constituent can compare equal to the // opposite nullable; otherwise, just intersect with {}. return c.mapType(t, func(t *Type) *Type { if c.hasTypeFacts(t, targetFacts) { diff --git a/internal/execute/tsc.go b/internal/execute/tsc.go index 64b42e5027..498f9d2905 100644 --- a/internal/execute/tsc.go +++ b/internal/execute/tsc.go @@ -81,14 +81,14 @@ func executeCommandLineWorker(sys System, cb cbType, commandLine *tsoptions.Pars return ExitStatusDiagnosticsPresent_OutputsSkipped, nil } - // !!! convert to options with absolute paths is usualy done here, but for ease of implementation, it's done in `tsoptions.ParseCommandLine()` + // !!! convert to options with absolute paths is usually done here, but for ease of implementation, it's done in `tsoptions.ParseCommandLine()` compilerOptionsFromCommandLine := commandLine.CompilerOptions() if configFileName != "" { extendedConfigCache := map[tspath.Path]*tsoptions.ExtendedConfigCacheEntry{} configParseResult, errors := getParsedCommandLineOfConfigFile(configFileName, compilerOptionsFromCommandLine, sys, extendedConfigCache) if len(errors) != 0 { - // these are unrecoverable errors--exit to report them as diagnotics + // these are unrecoverable errors--exit to report them as diagnostics for _, e := range errors { reportDiagnostic(e) } @@ -148,7 +148,7 @@ func getParsedCommandLineOfConfigFile(configFileName string, options *core.Compi errors := []*ast.Diagnostic{} configFileText, errors := tsoptions.TryReadFile(configFileName, sys.FS().ReadFile, errors) if len(errors) > 0 { - // these are unrecoverable errors--exit to report them as diagnotics + // these are unrecoverable errors--exit to report them as diagnostics return nil, errors } diff --git a/internal/project/documentregistry.go b/internal/project/documentregistry.go index d2e02a6f73..8b876661fa 100644 --- a/internal/project/documentregistry.go +++ b/internal/project/documentregistry.go @@ -92,7 +92,7 @@ func (r *documentRegistry) getDocumentWorker( // the script snapshot. If so, update it appropriately. entry := entryAny.(*registryEntry) if entry.sourceFile.Version != scriptInfo.version { - sourceFile := parser.ParseSourceFile(scriptInfo.fileName, scriptInfo.path, scriptInfo.text, scriptTarget, scanner.JSDocParsingModeParseAll, core.ResolutionModeNone /* !!! */, nil) + sourceFile := parser.ParseSourceFile(scriptInfo.fileName, scriptInfo.path, scriptInfo.text, scriptTarget, scanner.JSDocParsingModeParseAll, core.ResolutionModeNone, nil) sourceFile.Version = scriptInfo.version entry.mu.Lock() defer entry.mu.Unlock() @@ -102,7 +102,7 @@ func (r *documentRegistry) getDocumentWorker( return entry.sourceFile } else { // Have never seen this file with these settings. Create a new source file for it. - sourceFile := parser.ParseSourceFile(scriptInfo.fileName, scriptInfo.path, scriptInfo.text, scriptTarget, scanner.JSDocParsingModeParseAll, core.ResolutionModeNone /* !!! */, nil) + sourceFile := parser.ParseSourceFile(scriptInfo.fileName, scriptInfo.path, scriptInfo.text, scriptTarget, scanner.JSDocParsingModeParseAll, core.ResolutionModeNone, nil) sourceFile.Version = scriptInfo.version entryAny, _ := r.documents.LoadOrStore(key, ®istryEntry{ sourceFile: sourceFile, diff --git a/internal/project/service.go b/internal/project/service.go index 3181d400ee..f943868e90 100644 --- a/internal/project/service.go +++ b/internal/project/service.go @@ -540,7 +540,7 @@ func (s *Service) loadConfiguredProject(project *Project) { s.logf("Config: %s : %s", project.configFileName, - core.Must(core.StringifyJson(map[string]interface{}{ + core.Must(core.StringifyJson(map[string]any{ "rootNames": parsedCommandLine.FileNames(), "options": parsedCommandLine.CompilerOptions(), "projectReferences": parsedCommandLine.ProjectReferences(), @@ -608,6 +608,6 @@ func (s *Service) log(msg string) { s.options.Logger.Info(msg) } -func (s *Service) logf(format string, args ...interface{}) { +func (s *Service) logf(format string, args ...any) { s.log(fmt.Sprintf(format, args...)) } diff --git a/internal/testutil/testutil.go b/internal/testutil/testutil.go index ea19c96382..279258f27a 100644 --- a/internal/testutil/testutil.go +++ b/internal/testutil/testutil.go @@ -11,7 +11,7 @@ import ( "gotest.tools/v3/assert" ) -func AssertPanics(tb testing.TB, fn func(), expected any, msgAndArgs ...interface{}) { +func AssertPanics(tb testing.TB, fn func(), expected any, msgAndArgs ...any) { tb.Helper() var got any diff --git a/internal/tsoptions/tsconfigparsing_test.go b/internal/tsoptions/tsconfigparsing_test.go index 7602369c1e..da38d48d99 100644 --- a/internal/tsoptions/tsconfigparsing_test.go +++ b/internal/tsoptions/tsconfigparsing_test.go @@ -88,25 +88,21 @@ var parseConfigFileTextToJsonTests = []struct { }`, }, }, - // { todo: fix this test - // title: "handles escaped characters in strings correctly", - // input: []string{ - // `{ - // "exclude": [ - // "xx\\"//files" - // ] - // }`, - // `{ - // "exclude": [ - // "xx\\\\" // end of line comment - // ] - // }`, - // }, - // output: []map[string]any{ - // {"exclude": []string{"xx\"//files"}}, - // {"exclude": []string{"xx\\"}}, - // }, - // }, + { + title: "handles escaped characters in strings correctly", + input: []string{ + `{ + "exclude": [ + "xx\"//files" + ] + }`, + `{ + "exclude": [ + "xx\\" // end of line comment + ] + }`, + }, + }, { title: "returns object when users correctly specify library", input: []string{ diff --git a/internal/vfs/osvfs/os.go b/internal/vfs/osvfs/os.go index b10a3ded16..2bfc61ef04 100644 --- a/internal/vfs/osvfs/os.go +++ b/internal/vfs/osvfs/os.go @@ -49,7 +49,7 @@ var isFileSystemCaseSensitive = func() bool { panic(fmt.Sprintf("vfs: failed to get executable path: %v", err)) } - // If the current executable exists under a different case, we must be case-insensitve. + // If the current executable exists under a different case, we must be case-insensitive. swapped := swapCase(exe) if _, err := os.Stat(swapped); err != nil { if os.IsNotExist(err) { diff --git a/testdata/baselines/reference/submodule/compiler/alwaysStrict.errors.txt b/testdata/baselines/reference/submodule/compiler/alwaysStrict.errors.txt new file mode 100644 index 0000000000..e4d2a12520 --- /dev/null +++ b/testdata/baselines/reference/submodule/compiler/alwaysStrict.errors.txt @@ -0,0 +1,9 @@ +alwaysStrict.ts(2,9): error TS1100: Invalid use of 'arguments' in strict mode. + + +==== alwaysStrict.ts (1 errors) ==== + function f() { + var arguments = []; + ~~~~~~~~~ +!!! error TS1100: Invalid use of 'arguments' in strict mode. + } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/compiler/alwaysStrict.errors.txt.diff b/testdata/baselines/reference/submodule/compiler/alwaysStrict.errors.txt.diff deleted file mode 100644 index 8073198e43..0000000000 --- a/testdata/baselines/reference/submodule/compiler/alwaysStrict.errors.txt.diff +++ /dev/null @@ -1,14 +0,0 @@ ---- old.alwaysStrict.errors.txt -+++ new.alwaysStrict.errors.txt -@@= skipped -0, +-1 lines =@@ --alwaysStrict.ts(2,9): error TS1100: Invalid use of 'arguments' in strict mode. -- -- --==== alwaysStrict.ts (1 errors) ==== -- function f() { -- var arguments = []; -- ~~~~~~~~~ --!!! error TS1100: Invalid use of 'arguments' in strict mode. -- } -@@= skipped --1, +1 lines =@@ -+ diff --git a/testdata/baselines/reference/submodule/compiler/alwaysStrictES6.errors.txt b/testdata/baselines/reference/submodule/compiler/alwaysStrictES6.errors.txt new file mode 100644 index 0000000000..03b1c64beb --- /dev/null +++ b/testdata/baselines/reference/submodule/compiler/alwaysStrictES6.errors.txt @@ -0,0 +1,9 @@ +alwaysStrictES6.ts(2,9): error TS1100: Invalid use of 'arguments' in strict mode. + + +==== alwaysStrictES6.ts (1 errors) ==== + function f() { + var arguments = []; + ~~~~~~~~~ +!!! error TS1100: Invalid use of 'arguments' in strict mode. + } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/compiler/alwaysStrictES6.errors.txt.diff b/testdata/baselines/reference/submodule/compiler/alwaysStrictES6.errors.txt.diff deleted file mode 100644 index 40515b979d..0000000000 --- a/testdata/baselines/reference/submodule/compiler/alwaysStrictES6.errors.txt.diff +++ /dev/null @@ -1,14 +0,0 @@ ---- old.alwaysStrictES6.errors.txt -+++ new.alwaysStrictES6.errors.txt -@@= skipped -0, +-1 lines =@@ --alwaysStrictES6.ts(2,9): error TS1100: Invalid use of 'arguments' in strict mode. -- -- --==== alwaysStrictES6.ts (1 errors) ==== -- function f() { -- var arguments = []; -- ~~~~~~~~~ --!!! error TS1100: Invalid use of 'arguments' in strict mode. -- } -@@= skipped --1, +1 lines =@@ -+ diff --git a/testdata/baselines/reference/submodule/compiler/alwaysStrictModule.errors.txt b/testdata/baselines/reference/submodule/compiler/alwaysStrictModule.errors.txt new file mode 100644 index 0000000000..d3fa738698 --- /dev/null +++ b/testdata/baselines/reference/submodule/compiler/alwaysStrictModule.errors.txt @@ -0,0 +1,11 @@ +alwaysStrictModule.ts(3,13): error TS1100: Invalid use of 'arguments' in strict mode. + + +==== alwaysStrictModule.ts (1 errors) ==== + module M { + export function f() { + var arguments = []; + ~~~~~~~~~ +!!! error TS1100: Invalid use of 'arguments' in strict mode. + } + } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/compiler/alwaysStrictModule.errors.txt.diff b/testdata/baselines/reference/submodule/compiler/alwaysStrictModule.errors.txt.diff deleted file mode 100644 index 23721cf413..0000000000 --- a/testdata/baselines/reference/submodule/compiler/alwaysStrictModule.errors.txt.diff +++ /dev/null @@ -1,16 +0,0 @@ ---- old.alwaysStrictModule.errors.txt -+++ new.alwaysStrictModule.errors.txt -@@= skipped -0, +-1 lines =@@ --alwaysStrictModule.ts(3,13): error TS1100: Invalid use of 'arguments' in strict mode. -- -- --==== alwaysStrictModule.ts (1 errors) ==== -- module M { -- export function f() { -- var arguments = []; -- ~~~~~~~~~ --!!! error TS1100: Invalid use of 'arguments' in strict mode. -- } -- } -@@= skipped --1, +1 lines =@@ -+ diff --git a/testdata/baselines/reference/submodule/compiler/alwaysStrictModule2.errors.txt b/testdata/baselines/reference/submodule/compiler/alwaysStrictModule2.errors.txt new file mode 100644 index 0000000000..54481a89df --- /dev/null +++ b/testdata/baselines/reference/submodule/compiler/alwaysStrictModule2.errors.txt @@ -0,0 +1,21 @@ +a.ts(3,13): error TS1100: Invalid use of 'arguments' in strict mode. +b.ts(3,13): error TS1100: Invalid use of 'arguments' in strict mode. + + +==== a.ts (1 errors) ==== + module M { + export function f() { + var arguments = []; + ~~~~~~~~~ +!!! error TS1100: Invalid use of 'arguments' in strict mode. + } + } + +==== b.ts (1 errors) ==== + module M { + export function f2() { + var arguments = []; + ~~~~~~~~~ +!!! error TS1100: Invalid use of 'arguments' in strict mode. + } + } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/compiler/alwaysStrictModule2.errors.txt.diff b/testdata/baselines/reference/submodule/compiler/alwaysStrictModule2.errors.txt.diff deleted file mode 100644 index 0fde406983..0000000000 --- a/testdata/baselines/reference/submodule/compiler/alwaysStrictModule2.errors.txt.diff +++ /dev/null @@ -1,26 +0,0 @@ ---- old.alwaysStrictModule2.errors.txt -+++ new.alwaysStrictModule2.errors.txt -@@= skipped -0, +-1 lines =@@ --a.ts(3,13): error TS1100: Invalid use of 'arguments' in strict mode. --b.ts(3,13): error TS1100: Invalid use of 'arguments' in strict mode. -- -- --==== a.ts (1 errors) ==== -- module M { -- export function f() { -- var arguments = []; -- ~~~~~~~~~ --!!! error TS1100: Invalid use of 'arguments' in strict mode. -- } -- } -- --==== b.ts (1 errors) ==== -- module M { -- export function f2() { -- var arguments = []; -- ~~~~~~~~~ --!!! error TS1100: Invalid use of 'arguments' in strict mode. -- } -- } -@@= skipped --1, +1 lines =@@ -+ diff --git a/testdata/baselines/reference/submodule/compiler/alwaysStrictNoImplicitUseStrict.errors.txt b/testdata/baselines/reference/submodule/compiler/alwaysStrictNoImplicitUseStrict.errors.txt new file mode 100644 index 0000000000..eb2cd86e4e --- /dev/null +++ b/testdata/baselines/reference/submodule/compiler/alwaysStrictNoImplicitUseStrict.errors.txt @@ -0,0 +1,11 @@ +alwaysStrictNoImplicitUseStrict.ts(3,13): error TS1100: Invalid use of 'arguments' in strict mode. + + +==== alwaysStrictNoImplicitUseStrict.ts (1 errors) ==== + module M { + export function f() { + var arguments = []; + ~~~~~~~~~ +!!! error TS1100: Invalid use of 'arguments' in strict mode. + } + } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/compiler/alwaysStrictNoImplicitUseStrict.errors.txt.diff b/testdata/baselines/reference/submodule/compiler/alwaysStrictNoImplicitUseStrict.errors.txt.diff index a02d61286b..9e8670bbcd 100644 --- a/testdata/baselines/reference/submodule/compiler/alwaysStrictNoImplicitUseStrict.errors.txt.diff +++ b/testdata/baselines/reference/submodule/compiler/alwaysStrictNoImplicitUseStrict.errors.txt.diff @@ -1,18 +1,11 @@ --- old.alwaysStrictNoImplicitUseStrict.errors.txt +++ new.alwaysStrictNoImplicitUseStrict.errors.txt -@@= skipped -0, +-1 lines =@@ +@@= skipped -0, +0 lines =@@ -error TS5102: Option 'noImplicitUseStrict' has been removed. Please remove it from your configuration. --alwaysStrictNoImplicitUseStrict.ts(3,13): error TS1100: Invalid use of 'arguments' in strict mode. -- -- + alwaysStrictNoImplicitUseStrict.ts(3,13): error TS1100: Invalid use of 'arguments' in strict mode. + + -!!! error TS5102: Option 'noImplicitUseStrict' has been removed. Please remove it from your configuration. --==== alwaysStrictNoImplicitUseStrict.ts (1 errors) ==== -- module M { -- export function f() { -- var arguments = []; -- ~~~~~~~~~ --!!! error TS1100: Invalid use of 'arguments' in strict mode. -- } -- } -@@= skipped --1, +1 lines =@@ -+ + ==== alwaysStrictNoImplicitUseStrict.ts (1 errors) ==== + module M { + export function f() { From 1f3b470422386637034d8b13d6de31f315857e61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=B3=C3=B0i=20Karlsson?= Date: Mon, 17 Mar 2025 03:27:29 +0100 Subject: [PATCH 06/30] Fix languageservice <-> project dependency muck up --- internal/ls/host.go | 1 + internal/ls/languageservice.go | 21 +-------------------- internal/project/project.go | 19 ++++++++++++++++++- 3 files changed, 20 insertions(+), 21 deletions(-) diff --git a/internal/ls/host.go b/internal/ls/host.go index 32c9800654..6f553e7aef 100644 --- a/internal/ls/host.go +++ b/internal/ls/host.go @@ -21,6 +21,7 @@ type Host interface { // GetCompilerOptions was called GetCompilationSettings in the original code. GetCompilerOptions() *core.CompilerOptions GetSourceFile(fileName string, path tspath.Path, languageVersion core.ScriptTarget, packageJsonScope *packagejson.InfoCacheEntry) *ast.SourceFile + GetImpliedNodeFormat(fileName string, packageJsonScope *packagejson.InfoCacheEntry) core.ResolutionMode // This responsibility was moved from the language service to the project, // because they were bidirectionally interdependent. GetProgram() *compiler.Program diff --git a/internal/ls/languageservice.go b/internal/ls/languageservice.go index 82a794c783..a2fb7e625d 100644 --- a/internal/ls/languageservice.go +++ b/internal/ls/languageservice.go @@ -1,8 +1,6 @@ package ls import ( - "strings" - "github.com/microsoft/typescript-go/internal/ast" "github.com/microsoft/typescript-go/internal/compiler" "github.com/microsoft/typescript-go/internal/compiler/packagejson" @@ -53,25 +51,8 @@ func (l *LanguageService) GetSourceFile(fileName string, path tspath.Path, langu return l.host.GetSourceFile(fileName, path, languageVersion, packageJsonScope) } -func (l *LanguageService) GetImpliedNodeFormatForFileWorker(path string, packageJsonScope *packagejson.InfoCacheEntry) core.ResolutionMode { - moduleResolution := l.GetProgram().Options().GetModuleResolutionKind() - shouldLookupFromPackageJson := core.ModuleResolutionKindNode16 <= moduleResolution && moduleResolution <= core.ModuleResolutionKindNodeNext || strings.Contains(path, "/node_modules/") - - if tspath.FileExtensionIsOneOf(path, []string{tspath.ExtensionDmts, tspath.ExtensionMts, tspath.ExtensionMjs}) { - return core.ResolutionModeESM - } - if tspath.FileExtensionIsOneOf(path, []string{tspath.ExtensionDcts, tspath.ExtensionCts, tspath.ExtensionCjs}) { - return core.ResolutionModeCommonJS - } - if shouldLookupFromPackageJson && tspath.FileExtensionIsOneOf(path, []string{tspath.ExtensionDts, tspath.ExtensionTs, tspath.ExtensionTsx, tspath.ExtensionJs, tspath.ExtensionJsx}) { - return core.IfElse(packageJsonScope.Contents.Type.Value == "module", core.ResolutionModeESM, core.ResolutionModeCommonJS) - } - - return core.ResolutionModeNone -} - func (l *LanguageService) GetImpliedNodeFormat(fileName string, packageJsonScope *packagejson.InfoCacheEntry) core.ResolutionMode { - return l.GetImpliedNodeFormatForFileWorker(fileName, packageJsonScope) + return l.host.GetImpliedNodeFormat(fileName, packageJsonScope) } // GetProgram updates the program if the project version has changed. diff --git a/internal/project/project.go b/internal/project/project.go index 3bbae4111d..0ca0c7a234 100644 --- a/internal/project/project.go +++ b/internal/project/project.go @@ -141,10 +141,27 @@ func (p *Project) GetSourceFile(fileName string, path tspath.Path, languageVersi return nil } -func (p *Project) GetImpliedNodeFormat(fileName string, packageJsonScope *packagejson.InfoCacheEntry) core.ResolutionMode { +func (p *Project) GetImpliedNodeFormatForFileWorker(path string, packageJsonScope *packagejson.InfoCacheEntry) core.ResolutionMode { + moduleResolution := p.GetProgram().Options().GetModuleResolutionKind() + shouldLookupFromPackageJson := core.ModuleResolutionKindNode16 <= moduleResolution && moduleResolution <= core.ModuleResolutionKindNodeNext || strings.Contains(path, "/node_modules/") + + if tspath.FileExtensionIsOneOf(path, []string{tspath.ExtensionDmts, tspath.ExtensionMts, tspath.ExtensionMjs}) { + return core.ResolutionModeESM + } + if tspath.FileExtensionIsOneOf(path, []string{tspath.ExtensionDcts, tspath.ExtensionCts, tspath.ExtensionCjs}) { + return core.ResolutionModeCommonJS + } + if shouldLookupFromPackageJson && tspath.FileExtensionIsOneOf(path, []string{tspath.ExtensionDts, tspath.ExtensionTs, tspath.ExtensionTsx, tspath.ExtensionJs, tspath.ExtensionJsx}) { + return core.IfElse(packageJsonScope.Contents.Type.Value == "module", core.ResolutionModeESM, core.ResolutionModeCommonJS) + } + return core.ResolutionModeNone } +func (p *Project) GetImpliedNodeFormat(fileName string, packageJsonScope *packagejson.InfoCacheEntry) core.ResolutionMode { + return p.GetImpliedNodeFormatForFileWorker(fileName, packageJsonScope) +} + // GetProgram implements LanguageServiceHost. Updates the program if needed. func (p *Project) GetProgram() *compiler.Program { p.updateIfDirty() From 1a66c1927114b2f47b6706d213ba3b35266df92f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=B3=C3=B0i=20Karlsson?= Date: Mon, 17 Mar 2025 03:51:23 +0100 Subject: [PATCH 07/30] Pass around package json type instead of cache entry --- internal/ast/ast.go | 3 +-- internal/ast/utilities.go | 4 ++-- internal/astnav/tokens_test.go | 4 ++-- internal/binder/binder_test.go | 2 +- internal/compiler/fileloader.go | 7 ++++++- internal/compiler/host.go | 19 ++++++++--------- internal/ls/host.go | 5 ++--- internal/ls/languageservice.go | 9 ++++---- internal/parser/parser.go | 17 +++++++-------- internal/parser/parser_test.go | 6 +++--- internal/project/documentregistry.go | 4 ++-- internal/project/project.go | 11 +++++----- internal/testutil/harnessutil/harnessutil.go | 21 ++++++++----------- .../testutil/parsetestutil/parsetestutil.go | 2 +- 14 files changed, 55 insertions(+), 59 deletions(-) diff --git a/internal/ast/ast.go b/internal/ast/ast.go index 9efd30ef01..34b1935bad 100644 --- a/internal/ast/ast.go +++ b/internal/ast/ast.go @@ -6,7 +6,6 @@ import ( "sync" "sync/atomic" - "github.com/microsoft/typescript-go/internal/compiler/packagejson" "github.com/microsoft/typescript-go/internal/core" "github.com/microsoft/typescript-go/internal/tspath" ) @@ -8696,7 +8695,7 @@ type SourceFile struct { ReferencedFiles []*FileReference TypeReferenceDirectives []*FileReference LibReferenceDirectives []*FileReference - PackageJsonScope *packagejson.InfoCacheEntry + PackageJsonType string ImpliedNodeFormat core.ModuleKind // Fields set by binder diff --git a/internal/ast/utilities.go b/internal/ast/utilities.go index cadbe3c8e0..6c66ba3674 100644 --- a/internal/ast/utilities.go +++ b/internal/ast/utilities.go @@ -2368,12 +2368,12 @@ func GetImpliedNodeFormatForEmitWorker(sourceFile *SourceFile, options *core.Com return sourceFile.ImpliedNodeFormat } if sourceFile.ImpliedNodeFormat == core.ModuleKindCommonJS && - (sourceFile.PackageJsonScope != nil && sourceFile.PackageJsonScope.Contents.Type.Value != "module" || // !!! + (sourceFile.PackageJsonType != "module" || // !!! tspath.FileExtensionIsOneOf(sourceFile.FileName(), []string{tspath.ExtensionCjs, tspath.ExtensionCts})) { return core.ModuleKindCommonJS } if sourceFile.ImpliedNodeFormat == core.ModuleKindESNext && - (sourceFile.PackageJsonScope != nil && sourceFile.PackageJsonScope.Contents.Type.Value == "module" || + (sourceFile.PackageJsonType == "module" || tspath.FileExtensionIsOneOf(sourceFile.fileName, []string{tspath.ExtensionMjs, tspath.ExtensionMts})) { return core.ModuleKindESNext } diff --git a/internal/astnav/tokens_test.go b/internal/astnav/tokens_test.go index 7b5a02cf55..a3389e783e 100644 --- a/internal/astnav/tokens_test.go +++ b/internal/astnav/tokens_test.go @@ -52,7 +52,7 @@ func TestGetTokenAtPosition(t *testing.T) { return 0; } ` - file := parser.ParseSourceFile("/file.ts", "/file.ts", fileText, core.ScriptTargetLatest, scanner.JSDocParsingModeParseAll, core.ResolutionModeESM, nil) + file := parser.ParseSourceFile("/file.ts", "/file.ts", fileText, core.ScriptTargetLatest, scanner.JSDocParsingModeParseAll, core.ResolutionModeESM, "") assert.Equal(t, astnav.GetTokenAtPosition(file, 0), astnav.GetTokenAtPosition(file, 0)) }) } @@ -86,7 +86,7 @@ func baselineTokens(t *testing.T, testName string, getTSTokens func(fileText str positions[i] = i } tsTokens := getTSTokens(string(fileText), positions) - file := parser.ParseSourceFile("/file.ts", "/file.ts", string(fileText), core.ScriptTargetLatest, scanner.JSDocParsingModeParseAll, core.ResolutionModeESM, nil) + file := parser.ParseSourceFile("/file.ts", "/file.ts", string(fileText), core.ScriptTargetLatest, scanner.JSDocParsingModeParseAll, core.ResolutionModeESM, "") var output strings.Builder currentRange := core.NewTextRange(0, 0) diff --git a/internal/binder/binder_test.go b/internal/binder/binder_test.go index 52ef0019c4..9d096645f5 100644 --- a/internal/binder/binder_test.go +++ b/internal/binder/binder_test.go @@ -24,7 +24,7 @@ func BenchmarkBind(b *testing.B) { sourceFiles := make([]*ast.SourceFile, b.N) for i := range b.N { - sourceFiles[i] = parser.ParseSourceFile(fileName, path, sourceText, core.ScriptTargetESNext, scanner.JSDocParsingModeParseAll, core.ResolutionModeESM, nil) + sourceFiles[i] = parser.ParseSourceFile(fileName, path, sourceText, core.ScriptTargetESNext, scanner.JSDocParsingModeParseAll, core.ResolutionModeESM, "") } compilerOptions := &core.CompilerOptions{Target: core.ScriptTargetESNext, ModuleKind: core.ModuleKindNodeNext} diff --git a/internal/compiler/fileloader.go b/internal/compiler/fileloader.go index bc0575f660..059eefa976 100644 --- a/internal/compiler/fileloader.go +++ b/internal/compiler/fileloader.go @@ -223,7 +223,12 @@ func (t *parseTask) start(loader *fileLoader) { func (p *fileLoader) parseSourceFile(fileName string) *ast.SourceFile { path := tspath.ToPath(fileName, p.host.GetCurrentDirectory(), p.host.FS().UseCaseSensitiveFileNames()) - sourceFile := p.host.GetSourceFile(fileName, path, p.compilerOptions.GetEmitScriptTarget(), p.resolver.GetPackageScopeForPath(fileName)) + packageType := "" + packageScope := p.resolver.GetPackageScopeForPath(fileName) + if packageScope != nil { + packageType = packageScope.Contents.Type.Value + } + sourceFile := p.host.GetSourceFile(fileName, path, p.compilerOptions.GetEmitScriptTarget(), packageType) return sourceFile } diff --git a/internal/compiler/host.go b/internal/compiler/host.go index 83375c0f5e..137e0e5df5 100644 --- a/internal/compiler/host.go +++ b/internal/compiler/host.go @@ -4,7 +4,6 @@ import ( "strings" "github.com/microsoft/typescript-go/internal/ast" - "github.com/microsoft/typescript-go/internal/compiler/packagejson" "github.com/microsoft/typescript-go/internal/core" "github.com/microsoft/typescript-go/internal/parser" "github.com/microsoft/typescript-go/internal/scanner" @@ -18,8 +17,8 @@ type CompilerHost interface { GetCurrentDirectory() string NewLine() string Trace(msg string) - GetSourceFile(fileName string, path tspath.Path, languageVersion core.ScriptTarget, packageJsonScope *packagejson.InfoCacheEntry) *ast.SourceFile - GetImpliedNodeFormat(fileName string, packageJsonScope *packagejson.InfoCacheEntry) core.ResolutionMode + GetSourceFile(fileName string, path tspath.Path, languageVersion core.ScriptTarget, packageJsonType string) *ast.SourceFile + GetImpliedNodeFormat(fileName string, packageJsonType string) core.ResolutionMode } type FileInfo struct { @@ -72,15 +71,15 @@ func (h *compilerHost) Trace(msg string) { //!!! TODO: implement } -func (h *compilerHost) GetSourceFile(fileName string, path tspath.Path, languageVersion core.ScriptTarget, packageJsonScope *packagejson.InfoCacheEntry) *ast.SourceFile { +func (h *compilerHost) GetSourceFile(fileName string, path tspath.Path, languageVersion core.ScriptTarget, packageJsonType string) *ast.SourceFile { text, _ := h.FS().ReadFile(fileName) if tspath.FileExtensionIs(fileName, tspath.ExtensionJson) { return parser.ParseJSONText(fileName, path, text) } - return parser.ParseSourceFile(fileName, path, text, languageVersion, scanner.JSDocParsingModeParseForTypeErrors, h.GetImpliedNodeFormat(fileName, packageJsonScope), packageJsonScope) + return parser.ParseSourceFile(fileName, path, text, languageVersion, scanner.JSDocParsingModeParseForTypeErrors, h.GetImpliedNodeFormat(fileName, packageJsonType), packageJsonType) } -func (h *compilerHost) GetImpliedNodeFormatForFileWorker(path string, packageJsonScope *packagejson.InfoCacheEntry) core.ResolutionMode { +func (h *compilerHost) GetImpliedNodeFormatForFileWorker(path string, packageJsonType string) core.ResolutionMode { var moduleResolution core.ModuleResolutionKind if h.options != nil { moduleResolution = h.options.GetModuleResolutionKind() @@ -94,13 +93,13 @@ func (h *compilerHost) GetImpliedNodeFormatForFileWorker(path string, packageJso if tspath.FileExtensionIsOneOf(path, []string{tspath.ExtensionDcts, tspath.ExtensionCts, tspath.ExtensionCjs}) { return core.ResolutionModeCommonJS } - if shouldLookupFromPackageJson && packageJsonScope != nil && tspath.FileExtensionIsOneOf(path, []string{tspath.ExtensionDts, tspath.ExtensionTs, tspath.ExtensionTsx, tspath.ExtensionJs, tspath.ExtensionJsx}) { - return core.IfElse(packageJsonScope.Contents.Type.Value == "module", core.ResolutionModeESM, core.ResolutionModeCommonJS) + if shouldLookupFromPackageJson && tspath.FileExtensionIsOneOf(path, []string{tspath.ExtensionDts, tspath.ExtensionTs, tspath.ExtensionTsx, tspath.ExtensionJs, tspath.ExtensionJsx}) { + return core.IfElse(packageJsonType == "module", core.ResolutionModeESM, core.ResolutionModeCommonJS) } return core.ResolutionModeNone } -func (h *compilerHost) GetImpliedNodeFormat(fileName string, packageJsonScope *packagejson.InfoCacheEntry) core.ResolutionMode { - return h.GetImpliedNodeFormatForFileWorker(fileName, packageJsonScope) +func (h *compilerHost) GetImpliedNodeFormat(fileName string, packageJsonType string) core.ResolutionMode { + return h.GetImpliedNodeFormatForFileWorker(fileName, packageJsonType) } diff --git a/internal/ls/host.go b/internal/ls/host.go index 6f553e7aef..f8835eeb28 100644 --- a/internal/ls/host.go +++ b/internal/ls/host.go @@ -3,7 +3,6 @@ package ls import ( "github.com/microsoft/typescript-go/internal/ast" "github.com/microsoft/typescript-go/internal/compiler" - "github.com/microsoft/typescript-go/internal/compiler/packagejson" "github.com/microsoft/typescript-go/internal/core" "github.com/microsoft/typescript-go/internal/tspath" "github.com/microsoft/typescript-go/internal/vfs" @@ -20,8 +19,8 @@ type Host interface { GetRootFileNames() []string // GetCompilerOptions was called GetCompilationSettings in the original code. GetCompilerOptions() *core.CompilerOptions - GetSourceFile(fileName string, path tspath.Path, languageVersion core.ScriptTarget, packageJsonScope *packagejson.InfoCacheEntry) *ast.SourceFile - GetImpliedNodeFormat(fileName string, packageJsonScope *packagejson.InfoCacheEntry) core.ResolutionMode + GetSourceFile(fileName string, path tspath.Path, languageVersion core.ScriptTarget, packageJsonType string) *ast.SourceFile + GetImpliedNodeFormat(fileName string, packageJsonType string) core.ResolutionMode // This responsibility was moved from the language service to the project, // because they were bidirectionally interdependent. GetProgram() *compiler.Program diff --git a/internal/ls/languageservice.go b/internal/ls/languageservice.go index a2fb7e625d..0eda900e56 100644 --- a/internal/ls/languageservice.go +++ b/internal/ls/languageservice.go @@ -3,7 +3,6 @@ package ls import ( "github.com/microsoft/typescript-go/internal/ast" "github.com/microsoft/typescript-go/internal/compiler" - "github.com/microsoft/typescript-go/internal/compiler/packagejson" "github.com/microsoft/typescript-go/internal/core" "github.com/microsoft/typescript-go/internal/tspath" "github.com/microsoft/typescript-go/internal/vfs" @@ -47,12 +46,12 @@ func (l *LanguageService) Trace(msg string) { } // GetSourceFile implements compiler.CompilerHost. -func (l *LanguageService) GetSourceFile(fileName string, path tspath.Path, languageVersion core.ScriptTarget, packageJsonScope *packagejson.InfoCacheEntry) *ast.SourceFile { - return l.host.GetSourceFile(fileName, path, languageVersion, packageJsonScope) +func (l *LanguageService) GetSourceFile(fileName string, path tspath.Path, languageVersion core.ScriptTarget, packageJsonType string) *ast.SourceFile { + return l.host.GetSourceFile(fileName, path, languageVersion, packageJsonType) } -func (l *LanguageService) GetImpliedNodeFormat(fileName string, packageJsonScope *packagejson.InfoCacheEntry) core.ResolutionMode { - return l.host.GetImpliedNodeFormat(fileName, packageJsonScope) +func (l *LanguageService) GetImpliedNodeFormat(fileName string, packageJsonType string) core.ResolutionMode { + return l.host.GetImpliedNodeFormat(fileName, packageJsonType) } // GetProgram updates the program if the project version has changed. diff --git a/internal/parser/parser.go b/internal/parser/parser.go index c6ded4963e..fcb5c385b2 100644 --- a/internal/parser/parser.go +++ b/internal/parser/parser.go @@ -8,7 +8,6 @@ import ( "github.com/microsoft/typescript-go/internal/ast" "github.com/microsoft/typescript-go/internal/compiler/diagnostics" - "github.com/microsoft/typescript-go/internal/compiler/packagejson" "github.com/microsoft/typescript-go/internal/core" "github.com/microsoft/typescript-go/internal/scanner" "github.com/microsoft/typescript-go/internal/tspath" @@ -61,7 +60,7 @@ type Parser struct { diagnostics []*ast.Diagnostic jsdocDiagnostics []*ast.Diagnostic impliedNodeFormat core.ResolutionMode - packageJsonScope *packagejson.InfoCacheEntry + packageJsonType string token ast.Kind sourceFlags ast.NodeFlags @@ -95,10 +94,10 @@ func putParser(p *Parser) { parserPool.Put(p) } -func ParseSourceFile(fileName string, path tspath.Path, sourceText string, languageVersion core.ScriptTarget, jsdocParsingMode scanner.JSDocParsingMode, impliedNodeFormat core.ResolutionMode, packageJsonScope *packagejson.InfoCacheEntry) *ast.SourceFile { +func ParseSourceFile(fileName string, path tspath.Path, sourceText string, languageVersion core.ScriptTarget, jsdocParsingMode scanner.JSDocParsingMode, impliedNodeFormat core.ResolutionMode, packageJsonType string) *ast.SourceFile { p := getParser() defer putParser(p) - p.initializeState(fileName, path, sourceText, languageVersion, core.ScriptKindUnknown, jsdocParsingMode, impliedNodeFormat, packageJsonScope) + p.initializeState(fileName, path, sourceText, languageVersion, core.ScriptKindUnknown, jsdocParsingMode, impliedNodeFormat, packageJsonType) p.nextToken() return p.parseSourceFileWorker() } @@ -106,7 +105,7 @@ func ParseSourceFile(fileName string, path tspath.Path, sourceText string, langu func ParseJSONText(fileName string, path tspath.Path, sourceText string) *ast.SourceFile { p := getParser() defer putParser(p) - p.initializeState(fileName, path, sourceText, core.ScriptTargetES2015, core.ScriptKindJSON, scanner.JSDocParsingModeParseAll, core.ResolutionModeNone, nil) + p.initializeState(fileName, path, sourceText, core.ScriptTargetES2015, core.ScriptKindJSON, scanner.JSDocParsingModeParseAll, core.ResolutionModeNone, "") p.nextToken() pos := p.nodePos() var statements *ast.NodeList @@ -179,7 +178,7 @@ func ParseJSONText(fileName string, path tspath.Path, sourceText string) *ast.So return result } -func (p *Parser) initializeState(fileName string, path tspath.Path, sourceText string, languageVersion core.ScriptTarget, scriptKind core.ScriptKind, jsdocParsingMode scanner.JSDocParsingMode, impliedNodeFormat core.ResolutionMode, packageJsonScope *packagejson.InfoCacheEntry) { +func (p *Parser) initializeState(fileName string, path tspath.Path, sourceText string, languageVersion core.ScriptTarget, scriptKind core.ScriptKind, jsdocParsingMode scanner.JSDocParsingMode, impliedNodeFormat core.ResolutionMode, packageJsonType string) { if p.scanner == nil { p.scanner = scanner.NewScanner() } else { @@ -200,7 +199,7 @@ func (p *Parser) initializeState(fileName string, path tspath.Path, sourceText s p.contextFlags = ast.NodeFlagsNone } p.impliedNodeFormat = impliedNodeFormat - p.packageJsonScope = packageJsonScope + p.packageJsonType = packageJsonType p.scanner.SetText(p.sourceText) p.scanner.SetOnError(p.scanError) p.scanner.SetScriptTarget(p.languageVersion) @@ -331,11 +330,11 @@ func (p *Parser) finishSourceFile(result *ast.SourceFile, isDeclarationFile bool result.Identifiers = p.identifiers result.SetJSDocCache(p.jsdocCache) result.ImpliedNodeFormat = p.impliedNodeFormat - result.PackageJsonScope = p.packageJsonScope + result.PackageJsonType = p.packageJsonType p.jsdocCache = nil p.identifiers = nil p.impliedNodeFormat = core.ResolutionModeNone - p.packageJsonScope = nil + p.packageJsonType = "" } func (p *Parser) parseToplevelStatement(i int) *ast.Node { diff --git a/internal/parser/parser_test.go b/internal/parser/parser_test.go index 95318ec7dc..8d8dfa44aa 100644 --- a/internal/parser/parser_test.go +++ b/internal/parser/parser_test.go @@ -39,7 +39,7 @@ func BenchmarkParse(b *testing.B) { b.Run(jsdoc.name, func(b *testing.B) { jsdocMode := jsdoc.mode for b.Loop() { - ParseSourceFile(fileName, path, sourceText, core.ScriptTargetESNext, jsdocMode, core.ResolutionModeESM, nil) + ParseSourceFile(fileName, path, sourceText, core.ScriptTargetESNext, jsdocMode, core.ResolutionModeESM, "") } }) } @@ -82,7 +82,7 @@ func TestParseTypeScriptRepo(t *testing.T) { if strings.HasSuffix(f.name, ".json") { sourceFile = ParseJSONText(fileName, path, string(sourceText)) } else { - sourceFile = ParseSourceFile(fileName, path, string(sourceText), core.ScriptTargetESNext, scanner.JSDocParsingModeParseAll, core.ResolutionModeESM, nil) + sourceFile = ParseSourceFile(fileName, path, string(sourceText), core.ScriptTargetESNext, scanner.JSDocParsingModeParseAll, core.ResolutionModeESM, "") } if !test.ignoreErrors { @@ -179,6 +179,6 @@ func FuzzParser(f *testing.F) { return } - ParseSourceFile(fileName, path, sourceText, scriptTarget, jsdocParsingMode, core.ResolutionModeESM, nil) + ParseSourceFile(fileName, path, sourceText, scriptTarget, jsdocParsingMode, core.ResolutionModeESM, "") }) } diff --git a/internal/project/documentregistry.go b/internal/project/documentregistry.go index 8b876661fa..045deb3a08 100644 --- a/internal/project/documentregistry.go +++ b/internal/project/documentregistry.go @@ -92,7 +92,7 @@ func (r *documentRegistry) getDocumentWorker( // the script snapshot. If so, update it appropriately. entry := entryAny.(*registryEntry) if entry.sourceFile.Version != scriptInfo.version { - sourceFile := parser.ParseSourceFile(scriptInfo.fileName, scriptInfo.path, scriptInfo.text, scriptTarget, scanner.JSDocParsingModeParseAll, core.ResolutionModeNone, nil) + sourceFile := parser.ParseSourceFile(scriptInfo.fileName, scriptInfo.path, scriptInfo.text, scriptTarget, scanner.JSDocParsingModeParseAll, core.ResolutionModeNone, "") sourceFile.Version = scriptInfo.version entry.mu.Lock() defer entry.mu.Unlock() @@ -102,7 +102,7 @@ func (r *documentRegistry) getDocumentWorker( return entry.sourceFile } else { // Have never seen this file with these settings. Create a new source file for it. - sourceFile := parser.ParseSourceFile(scriptInfo.fileName, scriptInfo.path, scriptInfo.text, scriptTarget, scanner.JSDocParsingModeParseAll, core.ResolutionModeNone, nil) + sourceFile := parser.ParseSourceFile(scriptInfo.fileName, scriptInfo.path, scriptInfo.text, scriptTarget, scanner.JSDocParsingModeParseAll, core.ResolutionModeNone, "") sourceFile.Version = scriptInfo.version entryAny, _ := r.documents.LoadOrStore(key, ®istryEntry{ sourceFile: sourceFile, diff --git a/internal/project/project.go b/internal/project/project.go index 0ca0c7a234..3ea3443c49 100644 --- a/internal/project/project.go +++ b/internal/project/project.go @@ -8,7 +8,6 @@ import ( "github.com/microsoft/typescript-go/internal/ast" "github.com/microsoft/typescript-go/internal/collections" "github.com/microsoft/typescript-go/internal/compiler" - "github.com/microsoft/typescript-go/internal/compiler/packagejson" "github.com/microsoft/typescript-go/internal/core" "github.com/microsoft/typescript-go/internal/ls" "github.com/microsoft/typescript-go/internal/tspath" @@ -125,7 +124,7 @@ func (p *Project) GetRootFileNames() []string { } // GetSourceFile implements LanguageServiceHost. -func (p *Project) GetSourceFile(fileName string, path tspath.Path, languageVersion core.ScriptTarget, packageJsonScope *packagejson.InfoCacheEntry) *ast.SourceFile { +func (p *Project) GetSourceFile(fileName string, path tspath.Path, languageVersion core.ScriptTarget, packageJsonType string) *ast.SourceFile { scriptKind := p.getScriptKind(fileName) if scriptInfo := p.getOrCreateScriptInfoAndAttachToProject(fileName, scriptKind); scriptInfo != nil { var ( @@ -141,7 +140,7 @@ func (p *Project) GetSourceFile(fileName string, path tspath.Path, languageVersi return nil } -func (p *Project) GetImpliedNodeFormatForFileWorker(path string, packageJsonScope *packagejson.InfoCacheEntry) core.ResolutionMode { +func (p *Project) GetImpliedNodeFormatForFileWorker(path string, packageJsonType string) core.ResolutionMode { moduleResolution := p.GetProgram().Options().GetModuleResolutionKind() shouldLookupFromPackageJson := core.ModuleResolutionKindNode16 <= moduleResolution && moduleResolution <= core.ModuleResolutionKindNodeNext || strings.Contains(path, "/node_modules/") @@ -152,14 +151,14 @@ func (p *Project) GetImpliedNodeFormatForFileWorker(path string, packageJsonScop return core.ResolutionModeCommonJS } if shouldLookupFromPackageJson && tspath.FileExtensionIsOneOf(path, []string{tspath.ExtensionDts, tspath.ExtensionTs, tspath.ExtensionTsx, tspath.ExtensionJs, tspath.ExtensionJsx}) { - return core.IfElse(packageJsonScope.Contents.Type.Value == "module", core.ResolutionModeESM, core.ResolutionModeCommonJS) + return core.IfElse(packageJsonType == "module", core.ResolutionModeESM, core.ResolutionModeCommonJS) } return core.ResolutionModeNone } -func (p *Project) GetImpliedNodeFormat(fileName string, packageJsonScope *packagejson.InfoCacheEntry) core.ResolutionMode { - return p.GetImpliedNodeFormatForFileWorker(fileName, packageJsonScope) +func (p *Project) GetImpliedNodeFormat(fileName string, packageJsonType string) core.ResolutionMode { + return p.GetImpliedNodeFormatForFileWorker(fileName, packageJsonType) } // GetProgram implements LanguageServiceHost. Updates the program if needed. diff --git a/internal/testutil/harnessutil/harnessutil.go b/internal/testutil/harnessutil/harnessutil.go index 7b28f40c71..469a214281 100644 --- a/internal/testutil/harnessutil/harnessutil.go +++ b/internal/testutil/harnessutil/harnessutil.go @@ -16,7 +16,6 @@ import ( "github.com/microsoft/typescript-go/internal/ast" "github.com/microsoft/typescript-go/internal/bundled" "github.com/microsoft/typescript-go/internal/compiler" - "github.com/microsoft/typescript-go/internal/compiler/packagejson" "github.com/microsoft/typescript-go/internal/core" "github.com/microsoft/typescript-go/internal/parser" "github.com/microsoft/typescript-go/internal/repo" @@ -356,29 +355,27 @@ type cachedCompilerHost struct { var sourceFileCache sync.Map -func (h *cachedCompilerHost) GetSourceFile(fileName string, path tspath.Path, languageVersion core.ScriptTarget, packageJsonScope *packagejson.InfoCacheEntry) *ast.SourceFile { +func (h *cachedCompilerHost) GetSourceFile(fileName string, path tspath.Path, languageVersion core.ScriptTarget, packageJsonType string) *ast.SourceFile { text, _ := h.FS().ReadFile(fileName) type sourceFileCacheKey struct { core.SourceFileAffectingCompilerOptions - fileName string - path tspath.Path - languageVersion core.ScriptTarget - packageJsonTypeValue string - text string + fileName string + path tspath.Path + languageVersion core.ScriptTarget + packageJsonType string + text string } packageJsonTypeValue := "" - if packageJsonScope != nil { - packageJsonTypeValue = packageJsonScope.Contents.Type.Value - } + packageJsonTypeValue = packageJsonType key := sourceFileCacheKey{ SourceFileAffectingCompilerOptions: h.options.SourceFileAffecting(), fileName: fileName, path: path, languageVersion: languageVersion, - packageJsonTypeValue: packageJsonTypeValue, + packageJsonType: packageJsonTypeValue, text: text, } @@ -392,7 +389,7 @@ func (h *cachedCompilerHost) GetSourceFile(fileName string, path tspath.Path, la sourceFile = parser.ParseJSONText(fileName, path, text) } else { // !!! JSDocParsingMode - sourceFile = parser.ParseSourceFile(fileName, path, text, languageVersion, scanner.JSDocParsingModeParseAll, h.GetImpliedNodeFormat(fileName, packageJsonScope), packageJsonScope) + sourceFile = parser.ParseSourceFile(fileName, path, text, languageVersion, scanner.JSDocParsingModeParseAll, h.GetImpliedNodeFormat(fileName, packageJsonType), packageJsonType) } result, _ := sourceFileCache.LoadOrStore(key, sourceFile) diff --git a/internal/testutil/parsetestutil/parsetestutil.go b/internal/testutil/parsetestutil/parsetestutil.go index bbe1728fe4..3af9e66a18 100644 --- a/internal/testutil/parsetestutil/parsetestutil.go +++ b/internal/testutil/parsetestutil/parsetestutil.go @@ -15,7 +15,7 @@ import ( // Simplifies parsing an input string into a SourceFile for testing purposes. func ParseTypeScript(text string, jsx bool) *ast.SourceFile { fileName := core.IfElse(jsx, "/main.tsx", "/main.ts") - file := parser.ParseSourceFile(fileName, tspath.Path(fileName), text, core.ScriptTargetESNext, scanner.JSDocParsingModeParseNone, core.ResolutionModeESM, nil) + file := parser.ParseSourceFile(fileName, tspath.Path(fileName), text, core.ScriptTargetESNext, scanner.JSDocParsingModeParseNone, core.ResolutionModeESM, "") ast.SetParentInChildren(file.AsNode()) return file } From 0112b0010b43cb70cbe64634115a84e68af97ede Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=B3=C3=B0i=20Karlsson?= Date: Mon, 17 Mar 2025 03:52:27 +0100 Subject: [PATCH 08/30] Remove left-over !!! --- internal/ast/utilities.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/ast/utilities.go b/internal/ast/utilities.go index 6c66ba3674..615c61a490 100644 --- a/internal/ast/utilities.go +++ b/internal/ast/utilities.go @@ -2368,7 +2368,7 @@ func GetImpliedNodeFormatForEmitWorker(sourceFile *SourceFile, options *core.Com return sourceFile.ImpliedNodeFormat } if sourceFile.ImpliedNodeFormat == core.ModuleKindCommonJS && - (sourceFile.PackageJsonType != "module" || // !!! + (sourceFile.PackageJsonType != "module" || tspath.FileExtensionIsOneOf(sourceFile.FileName(), []string{tspath.ExtensionCjs, tspath.ExtensionCts})) { return core.ModuleKindCommonJS } From 8366e888a00482f64f39851f8aeadad1d8ecb385 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=B3=C3=B0i=20Karlsson?= Date: Mon, 17 Mar 2025 12:39:10 +0100 Subject: [PATCH 09/30] Remove GetImpliedNodeFormat --- internal/astnav/tokens_test.go | 4 +-- internal/binder/binder_test.go | 2 +- internal/compiler/host.go | 28 ++----------------- internal/ls/host.go | 1 - internal/ls/languageservice.go | 4 --- internal/parser/parser.go | 20 ++++++++++--- internal/parser/parser_test.go | 6 ++-- internal/project/documentregistry.go | 9 ++++-- internal/project/project.go | 21 -------------- internal/testutil/harnessutil/harnessutil.go | 7 ++++- .../testutil/parsetestutil/parsetestutil.go | 2 +- 11 files changed, 39 insertions(+), 65 deletions(-) diff --git a/internal/astnav/tokens_test.go b/internal/astnav/tokens_test.go index a3389e783e..fc44e94e66 100644 --- a/internal/astnav/tokens_test.go +++ b/internal/astnav/tokens_test.go @@ -52,7 +52,7 @@ func TestGetTokenAtPosition(t *testing.T) { return 0; } ` - file := parser.ParseSourceFile("/file.ts", "/file.ts", fileText, core.ScriptTargetLatest, scanner.JSDocParsingModeParseAll, core.ResolutionModeESM, "") + file := parser.ParseSourceFile("/file.ts", "/file.ts", fileText, core.ScriptTargetLatest, scanner.JSDocParsingModeParseAll, core.ModuleResolutionKindNodeNext, "") assert.Equal(t, astnav.GetTokenAtPosition(file, 0), astnav.GetTokenAtPosition(file, 0)) }) } @@ -86,7 +86,7 @@ func baselineTokens(t *testing.T, testName string, getTSTokens func(fileText str positions[i] = i } tsTokens := getTSTokens(string(fileText), positions) - file := parser.ParseSourceFile("/file.ts", "/file.ts", string(fileText), core.ScriptTargetLatest, scanner.JSDocParsingModeParseAll, core.ResolutionModeESM, "") + file := parser.ParseSourceFile("/file.ts", "/file.ts", string(fileText), core.ScriptTargetLatest, scanner.JSDocParsingModeParseAll, core.ModuleResolutionKindNodeNext, "") var output strings.Builder currentRange := core.NewTextRange(0, 0) diff --git a/internal/binder/binder_test.go b/internal/binder/binder_test.go index 9d096645f5..b1b8c97193 100644 --- a/internal/binder/binder_test.go +++ b/internal/binder/binder_test.go @@ -24,7 +24,7 @@ func BenchmarkBind(b *testing.B) { sourceFiles := make([]*ast.SourceFile, b.N) for i := range b.N { - sourceFiles[i] = parser.ParseSourceFile(fileName, path, sourceText, core.ScriptTargetESNext, scanner.JSDocParsingModeParseAll, core.ResolutionModeESM, "") + sourceFiles[i] = parser.ParseSourceFile(fileName, path, sourceText, core.ScriptTargetESNext, scanner.JSDocParsingModeParseAll, core.ModuleResolutionKindNodeNext, "") } compilerOptions := &core.CompilerOptions{Target: core.ScriptTargetESNext, ModuleKind: core.ModuleKindNodeNext} diff --git a/internal/compiler/host.go b/internal/compiler/host.go index 137e0e5df5..9a8d87e637 100644 --- a/internal/compiler/host.go +++ b/internal/compiler/host.go @@ -1,8 +1,6 @@ package compiler import ( - "strings" - "github.com/microsoft/typescript-go/internal/ast" "github.com/microsoft/typescript-go/internal/core" "github.com/microsoft/typescript-go/internal/parser" @@ -18,7 +16,6 @@ type CompilerHost interface { NewLine() string Trace(msg string) GetSourceFile(fileName string, path tspath.Path, languageVersion core.ScriptTarget, packageJsonType string) *ast.SourceFile - GetImpliedNodeFormat(fileName string, packageJsonType string) core.ResolutionMode } type FileInfo struct { @@ -76,30 +73,11 @@ func (h *compilerHost) GetSourceFile(fileName string, path tspath.Path, language if tspath.FileExtensionIs(fileName, tspath.ExtensionJson) { return parser.ParseJSONText(fileName, path, text) } - return parser.ParseSourceFile(fileName, path, text, languageVersion, scanner.JSDocParsingModeParseForTypeErrors, h.GetImpliedNodeFormat(fileName, packageJsonType), packageJsonType) -} -func (h *compilerHost) GetImpliedNodeFormatForFileWorker(path string, packageJsonType string) core.ResolutionMode { - var moduleResolution core.ModuleResolutionKind + var moduleResolutionKind core.ModuleResolutionKind if h.options != nil { - moduleResolution = h.options.GetModuleResolutionKind() - } - - shouldLookupFromPackageJson := core.ModuleResolutionKindNode16 <= moduleResolution && moduleResolution <= core.ModuleResolutionKindNodeNext || strings.Contains(path, "/node_modules/") - - if tspath.FileExtensionIsOneOf(path, []string{tspath.ExtensionDmts, tspath.ExtensionMts, tspath.ExtensionMjs}) { - return core.ResolutionModeESM + moduleResolutionKind = h.options.GetModuleResolutionKind() } - if tspath.FileExtensionIsOneOf(path, []string{tspath.ExtensionDcts, tspath.ExtensionCts, tspath.ExtensionCjs}) { - return core.ResolutionModeCommonJS - } - if shouldLookupFromPackageJson && tspath.FileExtensionIsOneOf(path, []string{tspath.ExtensionDts, tspath.ExtensionTs, tspath.ExtensionTsx, tspath.ExtensionJs, tspath.ExtensionJsx}) { - return core.IfElse(packageJsonType == "module", core.ResolutionModeESM, core.ResolutionModeCommonJS) - } - - return core.ResolutionModeNone -} -func (h *compilerHost) GetImpliedNodeFormat(fileName string, packageJsonType string) core.ResolutionMode { - return h.GetImpliedNodeFormatForFileWorker(fileName, packageJsonType) + return parser.ParseSourceFile(fileName, path, text, languageVersion, scanner.JSDocParsingModeParseForTypeErrors, moduleResolutionKind, packageJsonType) } diff --git a/internal/ls/host.go b/internal/ls/host.go index f8835eeb28..d75b211f84 100644 --- a/internal/ls/host.go +++ b/internal/ls/host.go @@ -20,7 +20,6 @@ type Host interface { // GetCompilerOptions was called GetCompilationSettings in the original code. GetCompilerOptions() *core.CompilerOptions GetSourceFile(fileName string, path tspath.Path, languageVersion core.ScriptTarget, packageJsonType string) *ast.SourceFile - GetImpliedNodeFormat(fileName string, packageJsonType string) core.ResolutionMode // This responsibility was moved from the language service to the project, // because they were bidirectionally interdependent. GetProgram() *compiler.Program diff --git a/internal/ls/languageservice.go b/internal/ls/languageservice.go index 0eda900e56..a180bfbdae 100644 --- a/internal/ls/languageservice.go +++ b/internal/ls/languageservice.go @@ -50,10 +50,6 @@ func (l *LanguageService) GetSourceFile(fileName string, path tspath.Path, langu return l.host.GetSourceFile(fileName, path, languageVersion, packageJsonType) } -func (l *LanguageService) GetImpliedNodeFormat(fileName string, packageJsonType string) core.ResolutionMode { - return l.host.GetImpliedNodeFormat(fileName, packageJsonType) -} - // GetProgram updates the program if the project version has changed. func (l *LanguageService) GetProgram() *compiler.Program { return l.host.GetProgram() diff --git a/internal/parser/parser.go b/internal/parser/parser.go index fcb5c385b2..665bb3706b 100644 --- a/internal/parser/parser.go +++ b/internal/parser/parser.go @@ -94,10 +94,10 @@ func putParser(p *Parser) { parserPool.Put(p) } -func ParseSourceFile(fileName string, path tspath.Path, sourceText string, languageVersion core.ScriptTarget, jsdocParsingMode scanner.JSDocParsingMode, impliedNodeFormat core.ResolutionMode, packageJsonType string) *ast.SourceFile { +func ParseSourceFile(fileName string, path tspath.Path, sourceText string, languageVersion core.ScriptTarget, jsdocParsingMode scanner.JSDocParsingMode, moduleResolutionKind core.ModuleResolutionKind, packageJsonType string) *ast.SourceFile { p := getParser() defer putParser(p) - p.initializeState(fileName, path, sourceText, languageVersion, core.ScriptKindUnknown, jsdocParsingMode, impliedNodeFormat, packageJsonType) + p.initializeState(fileName, path, sourceText, languageVersion, core.ScriptKindUnknown, jsdocParsingMode, moduleResolutionKind, packageJsonType) p.nextToken() return p.parseSourceFileWorker() } @@ -105,7 +105,7 @@ func ParseSourceFile(fileName string, path tspath.Path, sourceText string, langu func ParseJSONText(fileName string, path tspath.Path, sourceText string) *ast.SourceFile { p := getParser() defer putParser(p) - p.initializeState(fileName, path, sourceText, core.ScriptTargetES2015, core.ScriptKindJSON, scanner.JSDocParsingModeParseAll, core.ResolutionModeNone, "") + p.initializeState(fileName, path, sourceText, core.ScriptTargetES2015, core.ScriptKindJSON, scanner.JSDocParsingModeParseAll, core.ModuleResolutionKindUnknown, "") p.nextToken() pos := p.nodePos() var statements *ast.NodeList @@ -178,7 +178,7 @@ func ParseJSONText(fileName string, path tspath.Path, sourceText string) *ast.So return result } -func (p *Parser) initializeState(fileName string, path tspath.Path, sourceText string, languageVersion core.ScriptTarget, scriptKind core.ScriptKind, jsdocParsingMode scanner.JSDocParsingMode, impliedNodeFormat core.ResolutionMode, packageJsonType string) { +func (p *Parser) initializeState(fileName string, path tspath.Path, sourceText string, languageVersion core.ScriptTarget, scriptKind core.ScriptKind, jsdocParsingMode scanner.JSDocParsingMode, moduleResolutionKind core.ModuleResolutionKind, packageJsonType string) { if p.scanner == nil { p.scanner = scanner.NewScanner() } else { @@ -198,6 +198,18 @@ func (p *Parser) initializeState(fileName string, path tspath.Path, sourceText s default: p.contextFlags = ast.NodeFlagsNone } + + shouldLookupFromPackageJson := core.ModuleResolutionKindNode16 <= moduleResolutionKind && moduleResolutionKind <= core.ModuleResolutionKindNodeNext || strings.Contains(string(path), "/node_modules/") + + impliedNodeFormat := core.ResolutionModeNone + if tspath.FileExtensionIsOneOf(string(path), []string{tspath.ExtensionDmts, tspath.ExtensionMts, tspath.ExtensionMjs}) { + impliedNodeFormat = core.ResolutionModeESM + } else if tspath.FileExtensionIsOneOf(string(path), []string{tspath.ExtensionDcts, tspath.ExtensionCts, tspath.ExtensionCjs}) { + impliedNodeFormat = core.ResolutionModeCommonJS + } else if shouldLookupFromPackageJson && tspath.FileExtensionIsOneOf(string(path), []string{tspath.ExtensionDts, tspath.ExtensionTs, tspath.ExtensionTsx, tspath.ExtensionJs, tspath.ExtensionJsx}) { + impliedNodeFormat = core.IfElse(packageJsonType == "module", core.ResolutionModeESM, core.ResolutionModeCommonJS) + } + p.impliedNodeFormat = impliedNodeFormat p.packageJsonType = packageJsonType p.scanner.SetText(p.sourceText) diff --git a/internal/parser/parser_test.go b/internal/parser/parser_test.go index 8d8dfa44aa..7b76e22a19 100644 --- a/internal/parser/parser_test.go +++ b/internal/parser/parser_test.go @@ -39,7 +39,7 @@ func BenchmarkParse(b *testing.B) { b.Run(jsdoc.name, func(b *testing.B) { jsdocMode := jsdoc.mode for b.Loop() { - ParseSourceFile(fileName, path, sourceText, core.ScriptTargetESNext, jsdocMode, core.ResolutionModeESM, "") + ParseSourceFile(fileName, path, sourceText, core.ScriptTargetESNext, jsdocMode, core.ModuleResolutionKindNodeNext, "") } }) } @@ -82,7 +82,7 @@ func TestParseTypeScriptRepo(t *testing.T) { if strings.HasSuffix(f.name, ".json") { sourceFile = ParseJSONText(fileName, path, string(sourceText)) } else { - sourceFile = ParseSourceFile(fileName, path, string(sourceText), core.ScriptTargetESNext, scanner.JSDocParsingModeParseAll, core.ResolutionModeESM, "") + sourceFile = ParseSourceFile(fileName, path, string(sourceText), core.ScriptTargetESNext, scanner.JSDocParsingModeParseAll, core.ModuleResolutionKindNodeNext, "") } if !test.ignoreErrors { @@ -179,6 +179,6 @@ func FuzzParser(f *testing.F) { return } - ParseSourceFile(fileName, path, sourceText, scriptTarget, jsdocParsingMode, core.ResolutionModeESM, "") + ParseSourceFile(fileName, path, sourceText, scriptTarget, jsdocParsingMode, core.ModuleResolutionKindUnknown, "") }) } diff --git a/internal/project/documentregistry.go b/internal/project/documentregistry.go index 045deb3a08..db0925a58b 100644 --- a/internal/project/documentregistry.go +++ b/internal/project/documentregistry.go @@ -87,12 +87,17 @@ func (r *documentRegistry) getDocumentWorker( key registryKey, ) *ast.SourceFile { scriptTarget := core.IfElse(scriptInfo.scriptKind == core.ScriptKindJSON, core.ScriptTargetJSON, compilerOptions.GetEmitScriptTarget()) + var moduleResolutionKind core.ModuleResolutionKind + if compilerOptions != nil { + moduleResolutionKind = compilerOptions.GetModuleResolutionKind() + } if entryAny, ok := r.documents.Load(key); ok { // We have an entry for this file. However, it may be for a different version of // the script snapshot. If so, update it appropriately. entry := entryAny.(*registryEntry) if entry.sourceFile.Version != scriptInfo.version { - sourceFile := parser.ParseSourceFile(scriptInfo.fileName, scriptInfo.path, scriptInfo.text, scriptTarget, scanner.JSDocParsingModeParseAll, core.ResolutionModeNone, "") + + sourceFile := parser.ParseSourceFile(scriptInfo.fileName, scriptInfo.path, scriptInfo.text, scriptTarget, scanner.JSDocParsingModeParseAll, moduleResolutionKind, "") sourceFile.Version = scriptInfo.version entry.mu.Lock() defer entry.mu.Unlock() @@ -102,7 +107,7 @@ func (r *documentRegistry) getDocumentWorker( return entry.sourceFile } else { // Have never seen this file with these settings. Create a new source file for it. - sourceFile := parser.ParseSourceFile(scriptInfo.fileName, scriptInfo.path, scriptInfo.text, scriptTarget, scanner.JSDocParsingModeParseAll, core.ResolutionModeNone, "") + sourceFile := parser.ParseSourceFile(scriptInfo.fileName, scriptInfo.path, scriptInfo.text, scriptTarget, scanner.JSDocParsingModeParseAll, moduleResolutionKind, "") sourceFile.Version = scriptInfo.version entryAny, _ := r.documents.LoadOrStore(key, ®istryEntry{ sourceFile: sourceFile, diff --git a/internal/project/project.go b/internal/project/project.go index 3ea3443c49..884c10e755 100644 --- a/internal/project/project.go +++ b/internal/project/project.go @@ -140,27 +140,6 @@ func (p *Project) GetSourceFile(fileName string, path tspath.Path, languageVersi return nil } -func (p *Project) GetImpliedNodeFormatForFileWorker(path string, packageJsonType string) core.ResolutionMode { - moduleResolution := p.GetProgram().Options().GetModuleResolutionKind() - shouldLookupFromPackageJson := core.ModuleResolutionKindNode16 <= moduleResolution && moduleResolution <= core.ModuleResolutionKindNodeNext || strings.Contains(path, "/node_modules/") - - if tspath.FileExtensionIsOneOf(path, []string{tspath.ExtensionDmts, tspath.ExtensionMts, tspath.ExtensionMjs}) { - return core.ResolutionModeESM - } - if tspath.FileExtensionIsOneOf(path, []string{tspath.ExtensionDcts, tspath.ExtensionCts, tspath.ExtensionCjs}) { - return core.ResolutionModeCommonJS - } - if shouldLookupFromPackageJson && tspath.FileExtensionIsOneOf(path, []string{tspath.ExtensionDts, tspath.ExtensionTs, tspath.ExtensionTsx, tspath.ExtensionJs, tspath.ExtensionJsx}) { - return core.IfElse(packageJsonType == "module", core.ResolutionModeESM, core.ResolutionModeCommonJS) - } - - return core.ResolutionModeNone -} - -func (p *Project) GetImpliedNodeFormat(fileName string, packageJsonType string) core.ResolutionMode { - return p.GetImpliedNodeFormatForFileWorker(fileName, packageJsonType) -} - // GetProgram implements LanguageServiceHost. Updates the program if needed. func (p *Project) GetProgram() *compiler.Program { p.updateIfDirty() diff --git a/internal/testutil/harnessutil/harnessutil.go b/internal/testutil/harnessutil/harnessutil.go index 469a214281..d6b20c9c56 100644 --- a/internal/testutil/harnessutil/harnessutil.go +++ b/internal/testutil/harnessutil/harnessutil.go @@ -389,7 +389,12 @@ func (h *cachedCompilerHost) GetSourceFile(fileName string, path tspath.Path, la sourceFile = parser.ParseJSONText(fileName, path, text) } else { // !!! JSDocParsingMode - sourceFile = parser.ParseSourceFile(fileName, path, text, languageVersion, scanner.JSDocParsingModeParseAll, h.GetImpliedNodeFormat(fileName, packageJsonType), packageJsonType) + var moduleResolutionKind core.ModuleResolutionKind + if h.options != nil { + moduleResolutionKind = h.options.GetModuleResolutionKind() + } + + sourceFile = parser.ParseSourceFile(fileName, path, text, languageVersion, scanner.JSDocParsingModeParseAll, moduleResolutionKind, packageJsonType) } result, _ := sourceFileCache.LoadOrStore(key, sourceFile) diff --git a/internal/testutil/parsetestutil/parsetestutil.go b/internal/testutil/parsetestutil/parsetestutil.go index 3af9e66a18..eb2c6c7b74 100644 --- a/internal/testutil/parsetestutil/parsetestutil.go +++ b/internal/testutil/parsetestutil/parsetestutil.go @@ -15,7 +15,7 @@ import ( // Simplifies parsing an input string into a SourceFile for testing purposes. func ParseTypeScript(text string, jsx bool) *ast.SourceFile { fileName := core.IfElse(jsx, "/main.tsx", "/main.ts") - file := parser.ParseSourceFile(fileName, tspath.Path(fileName), text, core.ScriptTargetESNext, scanner.JSDocParsingModeParseNone, core.ResolutionModeESM, "") + file := parser.ParseSourceFile(fileName, tspath.Path(fileName), text, core.ScriptTargetESNext, scanner.JSDocParsingModeParseNone, core.ModuleResolutionKindNodeNext, "") ast.SetParentInChildren(file.AsNode()) return file } From d33133b9482f8015da642f09f82cda9f4948a77c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=B3=C3=B0i=20Karlsson?= Date: Mon, 17 Mar 2025 12:39:47 +0100 Subject: [PATCH 10/30] Remove harnessUtil package json garbage --- internal/testutil/harnessutil/harnessutil.go | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/internal/testutil/harnessutil/harnessutil.go b/internal/testutil/harnessutil/harnessutil.go index d6b20c9c56..cc46919e31 100644 --- a/internal/testutil/harnessutil/harnessutil.go +++ b/internal/testutil/harnessutil/harnessutil.go @@ -367,15 +367,12 @@ func (h *cachedCompilerHost) GetSourceFile(fileName string, path tspath.Path, la text string } - packageJsonTypeValue := "" - packageJsonTypeValue = packageJsonType - key := sourceFileCacheKey{ SourceFileAffectingCompilerOptions: h.options.SourceFileAffecting(), fileName: fileName, path: path, languageVersion: languageVersion, - packageJsonType: packageJsonTypeValue, + packageJsonType: packageJsonType, text: text, } From b81a9d13764edb510c3b13e441c1333f284d015b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=B3=C3=B0i=20Karlsson?= Date: Mon, 17 Mar 2025 12:48:36 +0100 Subject: [PATCH 11/30] Remove unnecessary newline --- internal/project/documentregistry.go | 1 - 1 file changed, 1 deletion(-) diff --git a/internal/project/documentregistry.go b/internal/project/documentregistry.go index db0925a58b..541610f26b 100644 --- a/internal/project/documentregistry.go +++ b/internal/project/documentregistry.go @@ -96,7 +96,6 @@ func (r *documentRegistry) getDocumentWorker( // the script snapshot. If so, update it appropriately. entry := entryAny.(*registryEntry) if entry.sourceFile.Version != scriptInfo.version { - sourceFile := parser.ParseSourceFile(scriptInfo.fileName, scriptInfo.path, scriptInfo.text, scriptTarget, scanner.JSDocParsingModeParseAll, moduleResolutionKind, "") sourceFile.Version = scriptInfo.version entry.mu.Lock() From 406918ab874a31a1e968f124906e9d19ba0c6f96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=B3=C3=B0i=20Karlsson?= Date: Mon, 17 Mar 2025 21:30:13 +0100 Subject: [PATCH 12/30] Move off of AST into a map in program --- internal/ast/ast.go | 8 ++-- internal/ast/utilities.go | 31 +++++++++---- internal/astnav/tokens_test.go | 4 +- internal/binder/binder_test.go | 2 +- internal/checker/checker.go | 1 + internal/checker/grammarchecks.go | 6 ++- internal/compiler/emitHost.go | 5 +++ internal/compiler/emitter.go | 20 +++++---- internal/compiler/fileloader.go | 7 +-- internal/compiler/host.go | 21 ++++----- internal/compiler/module/resolver.go | 18 ++++++++ internal/compiler/program.go | 41 ++++++++++++++---- internal/ls/host.go | 2 +- internal/ls/languageservice.go | 4 +- internal/parser/parser.go | 43 ++++++------------- internal/parser/parser_test.go | 6 +-- internal/printer/emitcontext.go | 25 +++++++---- internal/project/documentregistry.go | 8 +--- internal/project/project.go | 2 +- internal/testutil/harnessutil/harnessutil.go | 10 +---- .../testutil/parsetestutil/parsetestutil.go | 2 +- internal/transformers/commonjsmodule.go | 6 +-- internal/transformers/externalmoduleinfo.go | 8 ++-- internal/transformers/impliedmodule.go | 2 +- internal/transformers/importelision_test.go | 4 ++ 25 files changed, 164 insertions(+), 122 deletions(-) diff --git a/internal/ast/ast.go b/internal/ast/ast.go index 34b1935bad..efe04e573c 100644 --- a/internal/ast/ast.go +++ b/internal/ast/ast.go @@ -8663,6 +8663,11 @@ type CommentDirective struct { // SourceFile +type SourceFileMetaData struct { + PackageJsonType string + ImpliedNodeFormat core.ResolutionMode +} + type SourceFile struct { NodeBase DeclarationBase @@ -8695,8 +8700,6 @@ type SourceFile struct { ReferencedFiles []*FileReference TypeReferenceDirectives []*FileReference LibReferenceDirectives []*FileReference - PackageJsonType string - ImpliedNodeFormat core.ModuleKind // Fields set by binder @@ -8809,7 +8812,6 @@ func (node *SourceFile) copyFrom(other *SourceFile) { node.ReferencedFiles = other.ReferencedFiles node.TypeReferenceDirectives = other.TypeReferenceDirectives node.LibReferenceDirectives = other.LibReferenceDirectives - node.ImpliedNodeFormat = other.ImpliedNodeFormat node.CommonJsModuleIndicator = other.CommonJsModuleIndicator node.ExternalModuleIndicator = other.ExternalModuleIndicator node.JsGlobalAugmentations = other.JsGlobalAugmentations diff --git a/internal/ast/utilities.go b/internal/ast/utilities.go index 615c61a490..8e7b43b761 100644 --- a/internal/ast/utilities.go +++ b/internal/ast/utilities.go @@ -2354,26 +2354,39 @@ func IsDefaultImport(node *Node /*ImportDeclaration | ImportEqualsDeclaration | return importClause != nil && importClause.AsImportClause().name != nil } -func GetEmitModuleFormatOfFileWorker(sourceFile *SourceFile, options *core.CompilerOptions) core.ModuleKind { - result := GetImpliedNodeFormatForEmitWorker(sourceFile, options) +func GetImpliedNodeFormatForFile(path string, packageJsonType string) core.ModuleKind { + impliedNodeFormat := core.ResolutionModeNone + if tspath.FileExtensionIsOneOf(path, []string{tspath.ExtensionDmts, tspath.ExtensionMts, tspath.ExtensionMjs}) { + impliedNodeFormat = core.ResolutionModeESM + } else if tspath.FileExtensionIsOneOf(path, []string{tspath.ExtensionDcts, tspath.ExtensionCts, tspath.ExtensionCjs}) { + impliedNodeFormat = core.ResolutionModeCommonJS + } else if packageJsonType != "" && tspath.FileExtensionIsOneOf(path, []string{tspath.ExtensionDts, tspath.ExtensionTs, tspath.ExtensionTsx, tspath.ExtensionJs, tspath.ExtensionJsx}) { + impliedNodeFormat = core.IfElse(packageJsonType == "module", core.ResolutionModeESM, core.ResolutionModeCommonJS) + } + + return impliedNodeFormat +} + +func GetEmitModuleFormatOfFileWorker(sourceFile *SourceFile, options *core.CompilerOptions, sourceFileMetaData *SourceFileMetaData) core.ModuleKind { + result := GetImpliedNodeFormatForEmitWorker(sourceFile, options, sourceFileMetaData) if result != core.ModuleKindNone { return result } return options.GetEmitModuleKind() } -func GetImpliedNodeFormatForEmitWorker(sourceFile *SourceFile, options *core.CompilerOptions) core.ResolutionMode { +func GetImpliedNodeFormatForEmitWorker(sourceFile *SourceFile, options *core.CompilerOptions, sourceFileMetaData *SourceFileMetaData) core.ModuleKind { moduleKind := options.GetEmitModuleKind() - if core.ModuleKindNode16 <= moduleKind && moduleKind <= core.ModuleKindNodeNext { - return sourceFile.ImpliedNodeFormat + if core.ModuleKindNode16 <= moduleKind && moduleKind <= core.ModuleKindNodeNext && sourceFileMetaData != nil { + return sourceFileMetaData.ImpliedNodeFormat } - if sourceFile.ImpliedNodeFormat == core.ModuleKindCommonJS && - (sourceFile.PackageJsonType != "module" || + if sourceFileMetaData != nil && sourceFileMetaData.ImpliedNodeFormat == core.ModuleKindCommonJS && + (sourceFileMetaData.PackageJsonType != "module" || tspath.FileExtensionIsOneOf(sourceFile.FileName(), []string{tspath.ExtensionCjs, tspath.ExtensionCts})) { return core.ModuleKindCommonJS } - if sourceFile.ImpliedNodeFormat == core.ModuleKindESNext && - (sourceFile.PackageJsonType == "module" || + if sourceFileMetaData != nil && sourceFileMetaData.ImpliedNodeFormat == core.ModuleKindESNext && + (sourceFileMetaData.PackageJsonType == "module" || tspath.FileExtensionIsOneOf(sourceFile.fileName, []string{tspath.ExtensionMjs, tspath.ExtensionMts})) { return core.ModuleKindESNext } diff --git a/internal/astnav/tokens_test.go b/internal/astnav/tokens_test.go index fc44e94e66..76e1474ddb 100644 --- a/internal/astnav/tokens_test.go +++ b/internal/astnav/tokens_test.go @@ -52,7 +52,7 @@ func TestGetTokenAtPosition(t *testing.T) { return 0; } ` - file := parser.ParseSourceFile("/file.ts", "/file.ts", fileText, core.ScriptTargetLatest, scanner.JSDocParsingModeParseAll, core.ModuleResolutionKindNodeNext, "") + file := parser.ParseSourceFile("/file.ts", "/file.ts", fileText, core.ScriptTargetLatest, scanner.JSDocParsingModeParseAll) assert.Equal(t, astnav.GetTokenAtPosition(file, 0), astnav.GetTokenAtPosition(file, 0)) }) } @@ -86,7 +86,7 @@ func baselineTokens(t *testing.T, testName string, getTSTokens func(fileText str positions[i] = i } tsTokens := getTSTokens(string(fileText), positions) - file := parser.ParseSourceFile("/file.ts", "/file.ts", string(fileText), core.ScriptTargetLatest, scanner.JSDocParsingModeParseAll, core.ModuleResolutionKindNodeNext, "") + file := parser.ParseSourceFile("/file.ts", "/file.ts", string(fileText), core.ScriptTargetLatest, scanner.JSDocParsingModeParseAll) var output strings.Builder currentRange := core.NewTextRange(0, 0) diff --git a/internal/binder/binder_test.go b/internal/binder/binder_test.go index b1b8c97193..8518509df3 100644 --- a/internal/binder/binder_test.go +++ b/internal/binder/binder_test.go @@ -24,7 +24,7 @@ func BenchmarkBind(b *testing.B) { sourceFiles := make([]*ast.SourceFile, b.N) for i := range b.N { - sourceFiles[i] = parser.ParseSourceFile(fileName, path, sourceText, core.ScriptTargetESNext, scanner.JSDocParsingModeParseAll, core.ModuleResolutionKindNodeNext, "") + sourceFiles[i] = parser.ParseSourceFile(fileName, path, sourceText, core.ScriptTargetESNext, scanner.JSDocParsingModeParseAll) } compilerOptions := &core.CompilerOptions{Target: core.ScriptTargetESNext, ModuleKind: core.ModuleKindNodeNext} diff --git a/internal/checker/checker.go b/internal/checker/checker.go index db6693beef..83a3ad8af7 100644 --- a/internal/checker/checker.go +++ b/internal/checker/checker.go @@ -514,6 +514,7 @@ type Program interface { GetEmitModuleFormatOfFile(sourceFile *ast.SourceFile) core.ModuleKind GetImpliedNodeFormatForEmit(sourceFile *ast.SourceFile) core.ModuleKind GetResolvedModule(currentSourceFile *ast.SourceFile, moduleReference string) *ast.SourceFile + GetCachedSourceFileMetaData(path string) *ast.SourceFileMetaData } type Host interface{} diff --git a/internal/checker/grammarchecks.go b/internal/checker/grammarchecks.go index 9c0de302c5..82ab881644 100644 --- a/internal/checker/grammarchecks.go +++ b/internal/checker/grammarchecks.go @@ -1217,7 +1217,8 @@ func (c *Checker) checkGrammarForInOrForOfStatement(forInOrOfStatement *ast.ForI } switch c.moduleKind { case core.ModuleKindNode16, core.ModuleKindNodeNext: - if sourceFile.ImpliedNodeFormat == core.ModuleKindCommonJS { + sourceFileMetaData := c.program.GetCachedSourceFileMetaData(string(sourceFile.Path())) + if sourceFileMetaData != nil && sourceFileMetaData.ImpliedNodeFormat == core.ModuleKindCommonJS { c.diagnostics.Add(createDiagnosticForNode(forInOrOfStatement.AwaitModifier, diagnostics.The_current_file_is_a_CommonJS_module_and_cannot_use_await_at_the_top_level)) break } @@ -1719,7 +1720,8 @@ func (c *Checker) checkGrammarAwaitOrAwaitUsing(node *ast.Node) bool { switch c.moduleKind { case core.ModuleKindNode16, core.ModuleKindNodeNext: - if sourceFile.ImpliedNodeFormat == core.ModuleKindCommonJS { + sourceFileMetaData := c.program.GetCachedSourceFileMetaData(string(sourceFile.Path())) + if sourceFileMetaData != nil && sourceFileMetaData.ImpliedNodeFormat == core.ModuleKindCommonJS { if !spanCalculated { span = scanner.GetRangeOfTokenAtPosition(sourceFile, node.Pos()) } diff --git a/internal/compiler/emitHost.go b/internal/compiler/emitHost.go index 875afd34c0..eadc4af22d 100644 --- a/internal/compiler/emitHost.go +++ b/internal/compiler/emitHost.go @@ -23,6 +23,7 @@ type EmitHost interface { CommonSourceDirectory() string IsEmitBlocked(file string) bool WriteFile(fileName string, text string, writeByteOrderMark bool, relatedSourceFiles []*ast.SourceFile, data *WriteFileData) error + GetCachedSourceFileMetaData(path string) *ast.SourceFileMetaData GetEmitResolver(file *ast.SourceFile, skipDiagnostics bool) printer.EmitResolver } @@ -54,3 +55,7 @@ func (host *emitHost) GetEmitResolver(file *ast.SourceFile, skipDiagnostics bool checker := host.program.GetTypeCheckerForFile(file) return checker.GetEmitResolver(file, skipDiagnostics) } + +func (host *emitHost) GetCachedSourceFileMetaData(path string) *ast.SourceFileMetaData { + return host.program.GetCachedSourceFileMetaData(path) +} diff --git a/internal/compiler/emitter.go b/internal/compiler/emitter.go index 784b3c72f7..9110904662 100644 --- a/internal/compiler/emitter.go +++ b/internal/compiler/emitter.go @@ -20,15 +20,16 @@ const ( ) type emitter struct { - host EmitHost - emitOnly emitOnly - emittedFilesList []string - emitterDiagnostics ast.DiagnosticsCollection - emitSkipped bool - sourceMapDataList []*sourceMapEmitResult - writer printer.EmitTextWriter - paths *outputPaths - sourceFile *ast.SourceFile + host EmitHost + emitOnly emitOnly + emittedFilesList []string + emitterDiagnostics ast.DiagnosticsCollection + emitSkipped bool + sourceMapDataList []*sourceMapEmitResult + writer printer.EmitTextWriter + paths *outputPaths + sourceFile *ast.SourceFile + sourceFileMetaDataMap map[string]*ast.SourceFileMetaData } func (e *emitter) emit() { @@ -105,6 +106,7 @@ func (e *emitter) emitJsFile(sourceFile *ast.SourceFile, jsFilePath string, sour } emitContext := printer.NewEmitContext() + emitContext.SetSourceFileMetaDataMap(e.sourceFileMetaDataMap) for _, transformer := range e.getScriptTransformers(emitContext, sourceFile) { sourceFile = transformer.TransformSourceFile(sourceFile) } diff --git a/internal/compiler/fileloader.go b/internal/compiler/fileloader.go index 059eefa976..0b35e5d91a 100644 --- a/internal/compiler/fileloader.go +++ b/internal/compiler/fileloader.go @@ -223,12 +223,7 @@ func (t *parseTask) start(loader *fileLoader) { func (p *fileLoader) parseSourceFile(fileName string) *ast.SourceFile { path := tspath.ToPath(fileName, p.host.GetCurrentDirectory(), p.host.FS().UseCaseSensitiveFileNames()) - packageType := "" - packageScope := p.resolver.GetPackageScopeForPath(fileName) - if packageScope != nil { - packageType = packageScope.Contents.Type.Value - } - sourceFile := p.host.GetSourceFile(fileName, path, p.compilerOptions.GetEmitScriptTarget(), packageType) + sourceFile := p.host.GetSourceFile(fileName, path, p.compilerOptions.GetEmitScriptTarget()) return sourceFile } diff --git a/internal/compiler/host.go b/internal/compiler/host.go index 9a8d87e637..c218e2b82e 100644 --- a/internal/compiler/host.go +++ b/internal/compiler/host.go @@ -15,7 +15,7 @@ type CompilerHost interface { GetCurrentDirectory() string NewLine() string Trace(msg string) - GetSourceFile(fileName string, path tspath.Path, languageVersion core.ScriptTarget, packageJsonType string) *ast.SourceFile + GetSourceFile(fileName string, path tspath.Path, languageVersion core.ScriptTarget) *ast.SourceFile } type FileInfo struct { @@ -26,10 +26,11 @@ type FileInfo struct { var _ CompilerHost = (*compilerHost)(nil) type compilerHost struct { - options *core.CompilerOptions - currentDirectory string - fs vfs.FS - defaultLibraryPath string + options *core.CompilerOptions + currentDirectory string + fs vfs.FS + defaultLibraryPath string + pathToSourceFileMetaData map[string]*ast.SourceFileMetaData } func NewCompilerHost(options *core.CompilerOptions, currentDirectory string, fs vfs.FS, defaultLibraryPath string) CompilerHost { @@ -38,6 +39,7 @@ func NewCompilerHost(options *core.CompilerOptions, currentDirectory string, fs h.currentDirectory = currentDirectory h.fs = fs h.defaultLibraryPath = defaultLibraryPath + h.pathToSourceFileMetaData = make(map[string]*ast.SourceFileMetaData) return h } @@ -68,16 +70,11 @@ func (h *compilerHost) Trace(msg string) { //!!! TODO: implement } -func (h *compilerHost) GetSourceFile(fileName string, path tspath.Path, languageVersion core.ScriptTarget, packageJsonType string) *ast.SourceFile { +func (h *compilerHost) GetSourceFile(fileName string, path tspath.Path, languageVersion core.ScriptTarget) *ast.SourceFile { text, _ := h.FS().ReadFile(fileName) if tspath.FileExtensionIs(fileName, tspath.ExtensionJson) { return parser.ParseJSONText(fileName, path, text) } - var moduleResolutionKind core.ModuleResolutionKind - if h.options != nil { - moduleResolutionKind = h.options.GetModuleResolutionKind() - } - - return parser.ParseSourceFile(fileName, path, text, languageVersion, scanner.JSDocParsingModeParseForTypeErrors, moduleResolutionKind, packageJsonType) + return parser.ParseSourceFile(fileName, path, text, languageVersion, scanner.JSDocParsingModeParseForTypeErrors) } diff --git a/internal/compiler/module/resolver.go b/internal/compiler/module/resolver.go index ebf084558c..ba91c40641 100644 --- a/internal/compiler/module/resolver.go +++ b/internal/compiler/module/resolver.go @@ -145,6 +145,24 @@ func (r *Resolver) GetPackageScopeForPath(directory string) *packagejson.InfoCac return (&resolutionState{compilerOptions: r.compilerOptions, resolver: r}).getPackageScopeForPath(directory) } +func (r *Resolver) GetPackageJsonTypeIfApplicable(path string) string { + var moduleResolutionKind core.ModuleResolutionKind + if r.compilerOptions != nil { + moduleResolutionKind = r.compilerOptions.GetModuleResolutionKind() + } + + var packageJsonType string + shouldLookupFromPackageJson := core.ModuleResolutionKindNode16 <= moduleResolutionKind && moduleResolutionKind <= core.ModuleResolutionKindNodeNext || strings.Contains(path, "/node_modules/") + if shouldLookupFromPackageJson { + packageJsonScope := r.GetPackageScopeForPath(tspath.GetDirectoryPath(path)) + if packageJsonScope.Exists() { + packageJsonType, _ = packageJsonScope.Contents.Type.GetValue() + } + } + + return packageJsonType +} + func (r *Resolver) ResolveTypeReferenceDirective(typeReferenceDirectiveName string, containingFile string, resolutionMode core.ResolutionMode, redirectedReference *ResolvedProjectReference) *ResolvedTypeReferenceDirective { traceEnabled := r.traceEnabled() diff --git a/internal/compiler/program.go b/internal/compiler/program.go index 91754a537b..d10fe10f9d 100644 --- a/internal/compiler/program.go +++ b/internal/compiler/program.go @@ -49,6 +49,8 @@ type Program struct { files []*ast.SourceFile filesByPath map[tspath.Path]*ast.SourceFile + sourceFileMetaDataMap map[string]*ast.SourceFileMetaData + // The below settings are to track if a .js file should be add to the program if loaded via searching under node_modules. // This works as imported modules are discovered recursively in a depth first manner, specifically: // - For each root file, findSourceFile is called. @@ -65,13 +67,12 @@ type Program struct { commonSourceDirectoryOnce sync.Once } -var extensions = []string{".ts", ".tsx"} - func NewProgram(options ProgramOptions) *Program { p := &Program{} p.programOptions = options p.compilerOptions = options.Options p.configFileParsingDiagnostics = slices.Clip(options.ConfigFileParsingDiagnostics) + p.sourceFileMetaDataMap = make(map[string]*ast.SourceFileMetaData) if p.compilerOptions == nil { p.compilerOptions = &core.CompilerOptions{} } @@ -152,6 +153,8 @@ func NewProgram(options ProgramOptions) *Program { p.files, p.resolvedModules = processAllProgramFiles(p.host, p.programOptions, p.compilerOptions, p.resolver, rootFiles, libs) p.filesByPath = make(map[tspath.Path]*ast.SourceFile, len(p.files)) for _, file := range p.files { + packageType := p.resolver.GetPackageJsonTypeIfApplicable(string(file.Path())) + p.GetSourceFileMetaData(string(file.Path()), packageType) // We don't use the result, but we need to call it to cache the result p.filesByPath[file.Path()] = file } @@ -406,16 +409,35 @@ func (p *Program) PrintSourceFileWithTypes() { } } +func (p *Program) GetSourceFileMetaData(path string, packageJsonType string) *ast.SourceFileMetaData { + if metaData, ok := p.sourceFileMetaDataMap[path]; ok { + return metaData + } + + impliedNodeFormat := ast.GetImpliedNodeFormatForFile(path, packageJsonType) + metadata := &ast.SourceFileMetaData{ + PackageJsonType: packageJsonType, + ImpliedNodeFormat: impliedNodeFormat, + } + + p.sourceFileMetaDataMap[path] = metadata + return metadata +} + +func (p *Program) GetCachedSourceFileMetaData(path string) *ast.SourceFileMetaData { + return p.sourceFileMetaDataMap[path] +} + func (p *Program) GetEmitModuleFormatOfFile(sourceFile *ast.SourceFile) core.ModuleKind { return p.GetEmitModuleFormatOfFileWorker(sourceFile, p.compilerOptions) } func (p *Program) GetEmitModuleFormatOfFileWorker(sourceFile *ast.SourceFile, options *core.CompilerOptions) core.ModuleKind { - return ast.GetEmitModuleFormatOfFileWorker(sourceFile, options) + return ast.GetEmitModuleFormatOfFileWorker(sourceFile, options, p.GetCachedSourceFileMetaData(sourceFile.FileName())) } func (p *Program) GetImpliedNodeFormatForEmit(sourceFile *ast.SourceFile) core.ResolutionMode { - return ast.GetImpliedNodeFormatForEmitWorker(sourceFile, p.compilerOptions) + return ast.GetImpliedNodeFormatForEmitWorker(sourceFile, p.compilerOptions, p.GetCachedSourceFileMetaData(sourceFile.FileName())) } func (p *Program) CommonSourceDirectory() string { @@ -535,11 +557,12 @@ func (p *Program) Emit(options *EmitOptions) *EmitResult { for _, sourceFile := range sourceFiles { emitter := &emitter{ - host: host, - emittedFilesList: nil, - sourceMapDataList: nil, - writer: nil, - sourceFile: sourceFile, + host: host, + emittedFilesList: nil, + sourceMapDataList: nil, + writer: nil, + sourceFile: sourceFile, + sourceFileMetaDataMap: p.sourceFileMetaDataMap, } emitters = append(emitters, emitter) wg.Queue(func() { diff --git a/internal/ls/host.go b/internal/ls/host.go index d75b211f84..af0a8a226a 100644 --- a/internal/ls/host.go +++ b/internal/ls/host.go @@ -19,7 +19,7 @@ type Host interface { GetRootFileNames() []string // GetCompilerOptions was called GetCompilationSettings in the original code. GetCompilerOptions() *core.CompilerOptions - GetSourceFile(fileName string, path tspath.Path, languageVersion core.ScriptTarget, packageJsonType string) *ast.SourceFile + GetSourceFile(fileName string, path tspath.Path, languageVersion core.ScriptTarget) *ast.SourceFile // This responsibility was moved from the language service to the project, // because they were bidirectionally interdependent. GetProgram() *compiler.Program diff --git a/internal/ls/languageservice.go b/internal/ls/languageservice.go index a180bfbdae..815278749b 100644 --- a/internal/ls/languageservice.go +++ b/internal/ls/languageservice.go @@ -46,8 +46,8 @@ func (l *LanguageService) Trace(msg string) { } // GetSourceFile implements compiler.CompilerHost. -func (l *LanguageService) GetSourceFile(fileName string, path tspath.Path, languageVersion core.ScriptTarget, packageJsonType string) *ast.SourceFile { - return l.host.GetSourceFile(fileName, path, languageVersion, packageJsonType) +func (l *LanguageService) GetSourceFile(fileName string, path tspath.Path, languageVersion core.ScriptTarget) *ast.SourceFile { + return l.host.GetSourceFile(fileName, path, languageVersion) } // GetProgram updates the program if the project version has changed. diff --git a/internal/parser/parser.go b/internal/parser/parser.go index 665bb3706b..5777050fe7 100644 --- a/internal/parser/parser.go +++ b/internal/parser/parser.go @@ -51,16 +51,14 @@ type Parser struct { scanner *scanner.Scanner factory ast.NodeFactory - fileName string - path tspath.Path - sourceText string - languageVersion core.ScriptTarget - scriptKind core.ScriptKind - languageVariant core.LanguageVariant - diagnostics []*ast.Diagnostic - jsdocDiagnostics []*ast.Diagnostic - impliedNodeFormat core.ResolutionMode - packageJsonType string + fileName string + path tspath.Path + sourceText string + languageVersion core.ScriptTarget + scriptKind core.ScriptKind + languageVariant core.LanguageVariant + diagnostics []*ast.Diagnostic + jsdocDiagnostics []*ast.Diagnostic token ast.Kind sourceFlags ast.NodeFlags @@ -94,10 +92,10 @@ func putParser(p *Parser) { parserPool.Put(p) } -func ParseSourceFile(fileName string, path tspath.Path, sourceText string, languageVersion core.ScriptTarget, jsdocParsingMode scanner.JSDocParsingMode, moduleResolutionKind core.ModuleResolutionKind, packageJsonType string) *ast.SourceFile { +func ParseSourceFile(fileName string, path tspath.Path, sourceText string, languageVersion core.ScriptTarget, jsdocParsingMode scanner.JSDocParsingMode) *ast.SourceFile { p := getParser() defer putParser(p) - p.initializeState(fileName, path, sourceText, languageVersion, core.ScriptKindUnknown, jsdocParsingMode, moduleResolutionKind, packageJsonType) + p.initializeState(fileName, path, sourceText, languageVersion, core.ScriptKindUnknown, jsdocParsingMode) p.nextToken() return p.parseSourceFileWorker() } @@ -105,7 +103,7 @@ func ParseSourceFile(fileName string, path tspath.Path, sourceText string, langu func ParseJSONText(fileName string, path tspath.Path, sourceText string) *ast.SourceFile { p := getParser() defer putParser(p) - p.initializeState(fileName, path, sourceText, core.ScriptTargetES2015, core.ScriptKindJSON, scanner.JSDocParsingModeParseAll, core.ModuleResolutionKindUnknown, "") + p.initializeState(fileName, path, sourceText, core.ScriptTargetES2015, core.ScriptKindJSON, scanner.JSDocParsingModeParseAll) p.nextToken() pos := p.nodePos() var statements *ast.NodeList @@ -178,7 +176,7 @@ func ParseJSONText(fileName string, path tspath.Path, sourceText string) *ast.So return result } -func (p *Parser) initializeState(fileName string, path tspath.Path, sourceText string, languageVersion core.ScriptTarget, scriptKind core.ScriptKind, jsdocParsingMode scanner.JSDocParsingMode, moduleResolutionKind core.ModuleResolutionKind, packageJsonType string) { +func (p *Parser) initializeState(fileName string, path tspath.Path, sourceText string, languageVersion core.ScriptTarget, scriptKind core.ScriptKind, jsdocParsingMode scanner.JSDocParsingMode) { if p.scanner == nil { p.scanner = scanner.NewScanner() } else { @@ -199,19 +197,6 @@ func (p *Parser) initializeState(fileName string, path tspath.Path, sourceText s p.contextFlags = ast.NodeFlagsNone } - shouldLookupFromPackageJson := core.ModuleResolutionKindNode16 <= moduleResolutionKind && moduleResolutionKind <= core.ModuleResolutionKindNodeNext || strings.Contains(string(path), "/node_modules/") - - impliedNodeFormat := core.ResolutionModeNone - if tspath.FileExtensionIsOneOf(string(path), []string{tspath.ExtensionDmts, tspath.ExtensionMts, tspath.ExtensionMjs}) { - impliedNodeFormat = core.ResolutionModeESM - } else if tspath.FileExtensionIsOneOf(string(path), []string{tspath.ExtensionDcts, tspath.ExtensionCts, tspath.ExtensionCjs}) { - impliedNodeFormat = core.ResolutionModeCommonJS - } else if shouldLookupFromPackageJson && tspath.FileExtensionIsOneOf(string(path), []string{tspath.ExtensionDts, tspath.ExtensionTs, tspath.ExtensionTsx, tspath.ExtensionJs, tspath.ExtensionJsx}) { - impliedNodeFormat = core.IfElse(packageJsonType == "module", core.ResolutionModeESM, core.ResolutionModeCommonJS) - } - - p.impliedNodeFormat = impliedNodeFormat - p.packageJsonType = packageJsonType p.scanner.SetText(p.sourceText) p.scanner.SetOnError(p.scanError) p.scanner.SetScriptTarget(p.languageVersion) @@ -341,12 +326,8 @@ func (p *Parser) finishSourceFile(result *ast.SourceFile, isDeclarationFile bool result.Flags |= p.sourceFlags result.Identifiers = p.identifiers result.SetJSDocCache(p.jsdocCache) - result.ImpliedNodeFormat = p.impliedNodeFormat - result.PackageJsonType = p.packageJsonType p.jsdocCache = nil p.identifiers = nil - p.impliedNodeFormat = core.ResolutionModeNone - p.packageJsonType = "" } func (p *Parser) parseToplevelStatement(i int) *ast.Node { diff --git a/internal/parser/parser_test.go b/internal/parser/parser_test.go index 7b76e22a19..ae426ced43 100644 --- a/internal/parser/parser_test.go +++ b/internal/parser/parser_test.go @@ -39,7 +39,7 @@ func BenchmarkParse(b *testing.B) { b.Run(jsdoc.name, func(b *testing.B) { jsdocMode := jsdoc.mode for b.Loop() { - ParseSourceFile(fileName, path, sourceText, core.ScriptTargetESNext, jsdocMode, core.ModuleResolutionKindNodeNext, "") + ParseSourceFile(fileName, path, sourceText, core.ScriptTargetESNext, jsdocMode) } }) } @@ -82,7 +82,7 @@ func TestParseTypeScriptRepo(t *testing.T) { if strings.HasSuffix(f.name, ".json") { sourceFile = ParseJSONText(fileName, path, string(sourceText)) } else { - sourceFile = ParseSourceFile(fileName, path, string(sourceText), core.ScriptTargetESNext, scanner.JSDocParsingModeParseAll, core.ModuleResolutionKindNodeNext, "") + sourceFile = ParseSourceFile(fileName, path, string(sourceText), core.ScriptTargetESNext, scanner.JSDocParsingModeParseAll) } if !test.ignoreErrors { @@ -179,6 +179,6 @@ func FuzzParser(f *testing.F) { return } - ParseSourceFile(fileName, path, sourceText, scriptTarget, jsdocParsingMode, core.ModuleResolutionKindUnknown, "") + ParseSourceFile(fileName, path, sourceText, scriptTarget, jsdocParsingMode) }) } diff --git a/internal/printer/emitcontext.go b/internal/printer/emitcontext.go index a395b94e97..7132d3ede2 100644 --- a/internal/printer/emitcontext.go +++ b/internal/printer/emitcontext.go @@ -16,14 +16,15 @@ import ( // // NOTE: EmitContext is not guaranteed to be thread-safe. type EmitContext struct { - Factory *ast.NodeFactory // Required. The NodeFactory to use to create new nodes - autoGenerate map[*ast.MemberName]*AutoGenerateInfo - textSource map[*ast.StringLiteralNode]*ast.Node - original map[*ast.Node]*ast.Node - emitNodes core.LinkStore[*ast.Node, emitNode] - varScopeStack core.Stack[*varScope] - letScopeStack core.Stack[*varScope] - emitHelpers collections.OrderedSet[*EmitHelper] + Factory *ast.NodeFactory // Required. The NodeFactory to use to create new nodes + autoGenerate map[*ast.MemberName]*AutoGenerateInfo + textSource map[*ast.StringLiteralNode]*ast.Node + original map[*ast.Node]*ast.Node + emitNodes core.LinkStore[*ast.Node, emitNode] + varScopeStack core.Stack[*varScope] + letScopeStack core.Stack[*varScope] + emitHelpers collections.OrderedSet[*EmitHelper] + sourceFileMetaDataMap map[string]*ast.SourceFileMetaData isCustomPrologue func(node *ast.Statement) bool isHoistedFunction func(node *ast.Statement) bool @@ -625,6 +626,10 @@ func (c *EmitContext) NewRewriteRelativeImportExtensionsHelper(firstArgument *as ) } +func (c *EmitContext) SetSourceFileMetaDataMap(sourceFileMetaDataMap map[string]*ast.SourceFileMetaData) { + c.sourceFileMetaDataMap = sourceFileMetaDataMap +} + // // Original Node Tracking // @@ -949,3 +954,7 @@ func (c *EmitContext) VisitIterationBody(body *ast.Statement, visitor *ast.NodeV return updated } + +func (c *EmitContext) GetSourceFileMetaData(path string) *ast.SourceFileMetaData { + return c.sourceFileMetaDataMap[path] +} diff --git a/internal/project/documentregistry.go b/internal/project/documentregistry.go index 541610f26b..cb9ac05eb3 100644 --- a/internal/project/documentregistry.go +++ b/internal/project/documentregistry.go @@ -87,16 +87,12 @@ func (r *documentRegistry) getDocumentWorker( key registryKey, ) *ast.SourceFile { scriptTarget := core.IfElse(scriptInfo.scriptKind == core.ScriptKindJSON, core.ScriptTargetJSON, compilerOptions.GetEmitScriptTarget()) - var moduleResolutionKind core.ModuleResolutionKind - if compilerOptions != nil { - moduleResolutionKind = compilerOptions.GetModuleResolutionKind() - } if entryAny, ok := r.documents.Load(key); ok { // We have an entry for this file. However, it may be for a different version of // the script snapshot. If so, update it appropriately. entry := entryAny.(*registryEntry) if entry.sourceFile.Version != scriptInfo.version { - sourceFile := parser.ParseSourceFile(scriptInfo.fileName, scriptInfo.path, scriptInfo.text, scriptTarget, scanner.JSDocParsingModeParseAll, moduleResolutionKind, "") + sourceFile := parser.ParseSourceFile(scriptInfo.fileName, scriptInfo.path, scriptInfo.text, scriptTarget, scanner.JSDocParsingModeParseAll) sourceFile.Version = scriptInfo.version entry.mu.Lock() defer entry.mu.Unlock() @@ -106,7 +102,7 @@ func (r *documentRegistry) getDocumentWorker( return entry.sourceFile } else { // Have never seen this file with these settings. Create a new source file for it. - sourceFile := parser.ParseSourceFile(scriptInfo.fileName, scriptInfo.path, scriptInfo.text, scriptTarget, scanner.JSDocParsingModeParseAll, moduleResolutionKind, "") + sourceFile := parser.ParseSourceFile(scriptInfo.fileName, scriptInfo.path, scriptInfo.text, scriptTarget, scanner.JSDocParsingModeParseAll) sourceFile.Version = scriptInfo.version entryAny, _ := r.documents.LoadOrStore(key, ®istryEntry{ sourceFile: sourceFile, diff --git a/internal/project/project.go b/internal/project/project.go index 884c10e755..372a1db721 100644 --- a/internal/project/project.go +++ b/internal/project/project.go @@ -124,7 +124,7 @@ func (p *Project) GetRootFileNames() []string { } // GetSourceFile implements LanguageServiceHost. -func (p *Project) GetSourceFile(fileName string, path tspath.Path, languageVersion core.ScriptTarget, packageJsonType string) *ast.SourceFile { +func (p *Project) GetSourceFile(fileName string, path tspath.Path, languageVersion core.ScriptTarget) *ast.SourceFile { scriptKind := p.getScriptKind(fileName) if scriptInfo := p.getOrCreateScriptInfoAndAttachToProject(fileName, scriptKind); scriptInfo != nil { var ( diff --git a/internal/testutil/harnessutil/harnessutil.go b/internal/testutil/harnessutil/harnessutil.go index cc46919e31..adfb2ef1ad 100644 --- a/internal/testutil/harnessutil/harnessutil.go +++ b/internal/testutil/harnessutil/harnessutil.go @@ -355,7 +355,7 @@ type cachedCompilerHost struct { var sourceFileCache sync.Map -func (h *cachedCompilerHost) GetSourceFile(fileName string, path tspath.Path, languageVersion core.ScriptTarget, packageJsonType string) *ast.SourceFile { +func (h *cachedCompilerHost) GetSourceFile(fileName string, path tspath.Path, languageVersion core.ScriptTarget) *ast.SourceFile { text, _ := h.FS().ReadFile(fileName) type sourceFileCacheKey struct { @@ -372,7 +372,6 @@ func (h *cachedCompilerHost) GetSourceFile(fileName string, path tspath.Path, la fileName: fileName, path: path, languageVersion: languageVersion, - packageJsonType: packageJsonType, text: text, } @@ -386,12 +385,7 @@ func (h *cachedCompilerHost) GetSourceFile(fileName string, path tspath.Path, la sourceFile = parser.ParseJSONText(fileName, path, text) } else { // !!! JSDocParsingMode - var moduleResolutionKind core.ModuleResolutionKind - if h.options != nil { - moduleResolutionKind = h.options.GetModuleResolutionKind() - } - - sourceFile = parser.ParseSourceFile(fileName, path, text, languageVersion, scanner.JSDocParsingModeParseAll, moduleResolutionKind, packageJsonType) + sourceFile = parser.ParseSourceFile(fileName, path, text, languageVersion, scanner.JSDocParsingModeParseAll) } result, _ := sourceFileCache.LoadOrStore(key, sourceFile) diff --git a/internal/testutil/parsetestutil/parsetestutil.go b/internal/testutil/parsetestutil/parsetestutil.go index eb2c6c7b74..880459327a 100644 --- a/internal/testutil/parsetestutil/parsetestutil.go +++ b/internal/testutil/parsetestutil/parsetestutil.go @@ -15,7 +15,7 @@ import ( // Simplifies parsing an input string into a SourceFile for testing purposes. func ParseTypeScript(text string, jsx bool) *ast.SourceFile { fileName := core.IfElse(jsx, "/main.tsx", "/main.ts") - file := parser.ParseSourceFile(fileName, tspath.Path(fileName), text, core.ScriptTargetESNext, scanner.JSDocParsingModeParseNone, core.ModuleResolutionKindNodeNext, "") + file := parser.ParseSourceFile(fileName, tspath.Path(fileName), text, core.ScriptTargetESNext, scanner.JSDocParsingModeParseNone) ast.SetParentInChildren(file.AsNode()) return file } diff --git a/internal/transformers/commonjsmodule.go b/internal/transformers/commonjsmodule.go index a53b509d09..117a0f8691 100644 --- a/internal/transformers/commonjsmodule.go +++ b/internal/transformers/commonjsmodule.go @@ -1683,7 +1683,7 @@ func (tx *CommonJSModuleTransformer) visitCallExpression(node *ast.CallExpressio func (tx *CommonJSModuleTransformer) shouldTransformImportCall() bool { // !!! host.shouldTransformImportCall? - return shouldTransformImportCallWorker(tx.currentSourceFile, tx.compilerOptions) + return shouldTransformImportCallWorker(tx.currentSourceFile, tx.compilerOptions, tx.emitContext.GetSourceFileMetaData(string(tx.currentSourceFile.Path()))) } func (tx *CommonJSModuleTransformer) visitImportCallExpression(node *ast.CallExpression, rewriteOrShim bool) *ast.Node { @@ -2000,10 +2000,10 @@ func (tx *CommonJSModuleTransformer) getExports(name *ast.IdentifierNode) []*ast return nil } -func shouldTransformImportCallWorker(sourceFile *ast.SourceFile, options *core.CompilerOptions) bool { +func shouldTransformImportCallWorker(sourceFile *ast.SourceFile, options *core.CompilerOptions, sourceFileMetaData *ast.SourceFileMetaData) bool { moduleKind := options.GetEmitModuleKind() if core.ModuleKindNode16 <= moduleKind && moduleKind <= core.ModuleKindNodeNext || moduleKind == core.ModuleKindPreserve { return false } - return ast.GetEmitModuleFormatOfFileWorker(sourceFile, options) < core.ModuleKindES2015 + return ast.GetEmitModuleFormatOfFileWorker(sourceFile, options, sourceFileMetaData) < core.ModuleKindES2015 } diff --git a/internal/transformers/externalmoduleinfo.go b/internal/transformers/externalmoduleinfo.go index b643bd4bc4..3f20948b11 100644 --- a/internal/transformers/externalmoduleinfo.go +++ b/internal/transformers/externalmoduleinfo.go @@ -249,7 +249,7 @@ const externalHelpersModuleNameText = "tslib" func createExternalHelpersImportDeclarationIfNeeded(emitContext *printer.EmitContext, sourceFile *ast.SourceFile, compilerOptions *core.CompilerOptions, hasExportStarsToExportValues bool, hasImportStar bool, hasImportDefault bool) *ast.Node /*ImportDeclaration | ImportEqualsDeclaration*/ { if compilerOptions.ImportHelpers.IsTrue() && ast.IsEffectiveExternalModule(sourceFile, compilerOptions) { moduleKind := compilerOptions.GetEmitModuleKind() - impliedModuleKind := ast.GetImpliedNodeFormatForEmitWorker(sourceFile, compilerOptions) + impliedModuleKind := ast.GetImpliedNodeFormatForEmitWorker(sourceFile, compilerOptions, emitContext.GetSourceFileMetaData(string(sourceFile.Path()))) helpers := getImportedHelpers(emitContext, sourceFile) if (moduleKind >= core.ModuleKindES2015 && moduleKind <= core.ModuleKindESNext) || impliedModuleKind == core.ModuleKindESNext || @@ -291,7 +291,7 @@ func createExternalHelpersImportDeclarationIfNeeded(emitContext *printer.EmitCon } } else { // When we emit to a non-ES module, generate a synthetic `import tslib = require("tslib")` to be further transformed. - externalHelpersModuleName := getOrCreateExternalHelpersModuleNameIfNeeded(emitContext, sourceFile, compilerOptions, helpers, hasExportStarsToExportValues, hasImportStar || hasImportDefault) + externalHelpersModuleName := getOrCreateExternalHelpersModuleNameIfNeeded(emitContext, sourceFile, compilerOptions, helpers, hasExportStarsToExportValues, hasImportStar || hasImportDefault, emitContext.GetSourceFileMetaData(string(sourceFile.Path()))) if externalHelpersModuleName != nil { externalHelpersImportDeclaration := emitContext.Factory.NewImportEqualsDeclaration( nil, /*modifiers*/ @@ -317,7 +317,7 @@ func getImportedHelpers(emitContext *printer.EmitContext, sourceFile *ast.Source return helpers } -func getOrCreateExternalHelpersModuleNameIfNeeded(emitContext *printer.EmitContext, node *ast.SourceFile, compilerOptions *core.CompilerOptions, helpers []*printer.EmitHelper, hasExportStarsToExportValues bool, hasImportStarOrImportDefault bool) *ast.IdentifierNode { +func getOrCreateExternalHelpersModuleNameIfNeeded(emitContext *printer.EmitContext, node *ast.SourceFile, compilerOptions *core.CompilerOptions, helpers []*printer.EmitHelper, hasExportStarsToExportValues bool, hasImportStarOrImportDefault bool, sourceFileMetaData *ast.SourceFileMetaData) *ast.IdentifierNode { externalHelpersModuleName := emitContext.GetExternalHelpersModuleName(node) if externalHelpersModuleName != nil { return externalHelpersModuleName @@ -325,7 +325,7 @@ func getOrCreateExternalHelpersModuleNameIfNeeded(emitContext *printer.EmitConte create := len(helpers) > 0 || (hasExportStarsToExportValues || compilerOptions.GetESModuleInterop() && hasImportStarOrImportDefault) && - ast.GetEmitModuleFormatOfFileWorker(node, compilerOptions) < core.ModuleKindSystem + ast.GetEmitModuleFormatOfFileWorker(node, compilerOptions, sourceFileMetaData) < core.ModuleKindSystem if create { externalHelpersModuleName = emitContext.NewUniqueName(externalHelpersModuleNameText, printer.AutoGenerateOptions{}) diff --git a/internal/transformers/impliedmodule.go b/internal/transformers/impliedmodule.go index 10a9ae2917..c5a6f189b6 100644 --- a/internal/transformers/impliedmodule.go +++ b/internal/transformers/impliedmodule.go @@ -56,5 +56,5 @@ func (tx *ImpliedModuleTransformer) visitSourceFile(node *ast.SourceFile) *ast.N func (tx *ImpliedModuleTransformer) getEmitModuleFormatOfFile(node *ast.SourceFile) core.ModuleKind { // !!! host.getEmitModuleFormatOfFile? - return ast.GetEmitModuleFormatOfFileWorker(node, tx.compilerOptions) + return ast.GetEmitModuleFormatOfFileWorker(node, tx.compilerOptions, tx.emitContext.GetSourceFileMetaData(string(node.AsSourceFile().Path()))) } diff --git a/internal/transformers/importelision_test.go b/internal/transformers/importelision_test.go index a6a80868af..30f41a66ba 100644 --- a/internal/transformers/importelision_test.go +++ b/internal/transformers/importelision_test.go @@ -53,6 +53,10 @@ func (p *fakeProgram) GetResolvedModule(currentSourceFile *ast.SourceFile, modul return p.getResolvedModule(currentSourceFile, moduleReference) } +func (p *fakeProgram) GetCachedSourceFileMetaData(path string) *ast.SourceFileMetaData { + return &ast.SourceFileMetaData{} +} + func TestImportElision(t *testing.T) { t.Parallel() data := []struct { From 44d6affe97d4a3089e8de89965059282367dfc7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=B3=C3=B0i=20Karlsson?= Date: Mon, 17 Mar 2025 22:28:24 +0100 Subject: [PATCH 13/30] Move creation of metadata into fileloader --- internal/compiler/emitter.go | 22 ++++++++--------- internal/compiler/fileloader.go | 29 ++++++++++++++++++++-- internal/compiler/module/resolver.go | 4 +++ internal/compiler/program.go | 37 ++++++++-------------------- internal/printer/emitcontext.go | 24 +++++++++--------- 5 files changed, 64 insertions(+), 52 deletions(-) diff --git a/internal/compiler/emitter.go b/internal/compiler/emitter.go index 9110904662..748dd5b979 100644 --- a/internal/compiler/emitter.go +++ b/internal/compiler/emitter.go @@ -20,16 +20,16 @@ const ( ) type emitter struct { - host EmitHost - emitOnly emitOnly - emittedFilesList []string - emitterDiagnostics ast.DiagnosticsCollection - emitSkipped bool - sourceMapDataList []*sourceMapEmitResult - writer printer.EmitTextWriter - paths *outputPaths - sourceFile *ast.SourceFile - sourceFileMetaDataMap map[string]*ast.SourceFileMetaData + host EmitHost + emitOnly emitOnly + emittedFilesList []string + emitterDiagnostics ast.DiagnosticsCollection + emitSkipped bool + sourceMapDataList []*sourceMapEmitResult + writer printer.EmitTextWriter + paths *outputPaths + sourceFile *ast.SourceFile + sourcefileMetaDatas map[string]*ast.SourceFileMetaData } func (e *emitter) emit() { @@ -106,7 +106,7 @@ func (e *emitter) emitJsFile(sourceFile *ast.SourceFile, jsFilePath string, sour } emitContext := printer.NewEmitContext() - emitContext.SetSourceFileMetaDataMap(e.sourceFileMetaDataMap) + emitContext.SetSourcefileMetaDatas(e.sourcefileMetaDatas) for _, transformer := range e.getScriptTransformers(emitContext, sourceFile) { sourceFile = transformer.TransformSourceFile(sourceFile) } diff --git a/internal/compiler/fileloader.go b/internal/compiler/fileloader.go index 0b35e5d91a..a05cd465d2 100644 --- a/internal/compiler/fileloader.go +++ b/internal/compiler/fileloader.go @@ -23,6 +23,9 @@ type fileLoader struct { resolvedModulesMutex sync.Mutex resolvedModules map[tspath.Path]module.ModeAwareCache[*module.ResolvedModule] + sourceFileMetaDatasMutex sync.Mutex + sourceFileMetaDatas map[string]*ast.SourceFileMetaData + mu sync.Mutex wg core.WorkGroup tasksByFileName map[string]*parseTask @@ -40,7 +43,7 @@ func processAllProgramFiles( resolver *module.Resolver, rootFiles []string, libs []string, -) (files []*ast.SourceFile, resolvedModules map[tspath.Path]module.ModeAwareCache[*module.ResolvedModule]) { +) (files []*ast.SourceFile, resolvedModules map[tspath.Path]module.ModeAwareCache[*module.ResolvedModule], sourceFileMetaDatas map[string]*ast.SourceFileMetaData) { supportedExtensions := tsoptions.GetSupportedExtensions(compilerOptions, nil /*extraFileExtensions*/) loader := fileLoader{ host: host, @@ -76,7 +79,7 @@ func processAllProgramFiles( } loader.sortLibs(libFiles) - return append(libFiles, files...), loader.resolvedModules + return append(libFiles, files...), loader.resolvedModules, loader.sourceFileMetaDatas } func (p *fileLoader) addRootTasks(files []string, isLib bool) { @@ -221,9 +224,31 @@ func (t *parseTask) start(loader *fileLoader) { }) } +func (p *fileLoader) CacheSourceFileMetaData(path string, packageJsonType string) { + p.sourceFileMetaDatasMutex.Lock() + defer p.sourceFileMetaDatasMutex.Unlock() + if _, ok := p.sourceFileMetaDatas[path]; ok { + return + } + + if p.sourceFileMetaDatas == nil { + p.sourceFileMetaDatas = make(map[string]*ast.SourceFileMetaData) + } + + impliedNodeFormat := ast.GetImpliedNodeFormatForFile(path, packageJsonType) + metadata := &ast.SourceFileMetaData{ + PackageJsonType: packageJsonType, + ImpliedNodeFormat: impliedNodeFormat, + } + + p.sourceFileMetaDatas[path] = metadata +} + func (p *fileLoader) parseSourceFile(fileName string) *ast.SourceFile { path := tspath.ToPath(fileName, p.host.GetCurrentDirectory(), p.host.FS().UseCaseSensitiveFileNames()) sourceFile := p.host.GetSourceFile(fileName, path, p.compilerOptions.GetEmitScriptTarget()) + packageType := p.resolver.GetPackageJsonTypeIfApplicable(string(path)) + p.CacheSourceFileMetaData(string(path), packageType) return sourceFile } diff --git a/internal/compiler/module/resolver.go b/internal/compiler/module/resolver.go index ba91c40641..32d93d65b6 100644 --- a/internal/compiler/module/resolver.go +++ b/internal/compiler/module/resolver.go @@ -146,6 +146,10 @@ func (r *Resolver) GetPackageScopeForPath(directory string) *packagejson.InfoCac } func (r *Resolver) GetPackageJsonTypeIfApplicable(path string) string { + if tspath.FileExtensionIsOneOf(path, []string{".mts", ".cts", "mjs", "cjs"}) { + return "" + } + var moduleResolutionKind core.ModuleResolutionKind if r.compilerOptions != nil { moduleResolutionKind = r.compilerOptions.GetModuleResolutionKind() diff --git a/internal/compiler/program.go b/internal/compiler/program.go index d10fe10f9d..44c2790d76 100644 --- a/internal/compiler/program.go +++ b/internal/compiler/program.go @@ -49,7 +49,7 @@ type Program struct { files []*ast.SourceFile filesByPath map[tspath.Path]*ast.SourceFile - sourceFileMetaDataMap map[string]*ast.SourceFileMetaData + sourceFileMetaDatas map[string]*ast.SourceFileMetaData // The below settings are to track if a .js file should be add to the program if loaded via searching under node_modules. // This works as imported modules are discovered recursively in a depth first manner, specifically: @@ -72,7 +72,7 @@ func NewProgram(options ProgramOptions) *Program { p.programOptions = options p.compilerOptions = options.Options p.configFileParsingDiagnostics = slices.Clip(options.ConfigFileParsingDiagnostics) - p.sourceFileMetaDataMap = make(map[string]*ast.SourceFileMetaData) + p.sourceFileMetaDatas = make(map[string]*ast.SourceFileMetaData) if p.compilerOptions == nil { p.compilerOptions = &core.CompilerOptions{} } @@ -150,11 +150,9 @@ func NewProgram(options ProgramOptions) *Program { } } - p.files, p.resolvedModules = processAllProgramFiles(p.host, p.programOptions, p.compilerOptions, p.resolver, rootFiles, libs) + p.files, p.resolvedModules, p.sourceFileMetaDatas = processAllProgramFiles(p.host, p.programOptions, p.compilerOptions, p.resolver, rootFiles, libs) p.filesByPath = make(map[tspath.Path]*ast.SourceFile, len(p.files)) for _, file := range p.files { - packageType := p.resolver.GetPackageJsonTypeIfApplicable(string(file.Path())) - p.GetSourceFileMetaData(string(file.Path()), packageType) // We don't use the result, but we need to call it to cache the result p.filesByPath[file.Path()] = file } @@ -409,23 +407,8 @@ func (p *Program) PrintSourceFileWithTypes() { } } -func (p *Program) GetSourceFileMetaData(path string, packageJsonType string) *ast.SourceFileMetaData { - if metaData, ok := p.sourceFileMetaDataMap[path]; ok { - return metaData - } - - impliedNodeFormat := ast.GetImpliedNodeFormatForFile(path, packageJsonType) - metadata := &ast.SourceFileMetaData{ - PackageJsonType: packageJsonType, - ImpliedNodeFormat: impliedNodeFormat, - } - - p.sourceFileMetaDataMap[path] = metadata - return metadata -} - func (p *Program) GetCachedSourceFileMetaData(path string) *ast.SourceFileMetaData { - return p.sourceFileMetaDataMap[path] + return p.sourceFileMetaDatas[path] } func (p *Program) GetEmitModuleFormatOfFile(sourceFile *ast.SourceFile) core.ModuleKind { @@ -557,12 +540,12 @@ func (p *Program) Emit(options *EmitOptions) *EmitResult { for _, sourceFile := range sourceFiles { emitter := &emitter{ - host: host, - emittedFilesList: nil, - sourceMapDataList: nil, - writer: nil, - sourceFile: sourceFile, - sourceFileMetaDataMap: p.sourceFileMetaDataMap, + host: host, + emittedFilesList: nil, + sourceMapDataList: nil, + writer: nil, + sourceFile: sourceFile, + sourcefileMetaDatas: p.sourceFileMetaDatas, } emitters = append(emitters, emitter) wg.Queue(func() { diff --git a/internal/printer/emitcontext.go b/internal/printer/emitcontext.go index 7132d3ede2..6e0b97c3a8 100644 --- a/internal/printer/emitcontext.go +++ b/internal/printer/emitcontext.go @@ -16,15 +16,15 @@ import ( // // NOTE: EmitContext is not guaranteed to be thread-safe. type EmitContext struct { - Factory *ast.NodeFactory // Required. The NodeFactory to use to create new nodes - autoGenerate map[*ast.MemberName]*AutoGenerateInfo - textSource map[*ast.StringLiteralNode]*ast.Node - original map[*ast.Node]*ast.Node - emitNodes core.LinkStore[*ast.Node, emitNode] - varScopeStack core.Stack[*varScope] - letScopeStack core.Stack[*varScope] - emitHelpers collections.OrderedSet[*EmitHelper] - sourceFileMetaDataMap map[string]*ast.SourceFileMetaData + Factory *ast.NodeFactory // Required. The NodeFactory to use to create new nodes + autoGenerate map[*ast.MemberName]*AutoGenerateInfo + textSource map[*ast.StringLiteralNode]*ast.Node + original map[*ast.Node]*ast.Node + emitNodes core.LinkStore[*ast.Node, emitNode] + varScopeStack core.Stack[*varScope] + letScopeStack core.Stack[*varScope] + emitHelpers collections.OrderedSet[*EmitHelper] + sourcefileMetaDatas map[string]*ast.SourceFileMetaData isCustomPrologue func(node *ast.Statement) bool isHoistedFunction func(node *ast.Statement) bool @@ -626,8 +626,8 @@ func (c *EmitContext) NewRewriteRelativeImportExtensionsHelper(firstArgument *as ) } -func (c *EmitContext) SetSourceFileMetaDataMap(sourceFileMetaDataMap map[string]*ast.SourceFileMetaData) { - c.sourceFileMetaDataMap = sourceFileMetaDataMap +func (c *EmitContext) SetSourcefileMetaDatas(sourcefileMetaDatas map[string]*ast.SourceFileMetaData) { + c.sourcefileMetaDatas = sourcefileMetaDatas } // @@ -956,5 +956,5 @@ func (c *EmitContext) VisitIterationBody(body *ast.Statement, visitor *ast.NodeV } func (c *EmitContext) GetSourceFileMetaData(path string) *ast.SourceFileMetaData { - return c.sourceFileMetaDataMap[path] + return c.sourcefileMetaDatas[path] } From 54fc7868886c09390d2d70a806d521fea87d8773 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=B3=C3=B0i=20Karlsson?= Date: Mon, 17 Mar 2025 22:38:36 +0100 Subject: [PATCH 14/30] Change arg to fileName and remove packageType argument in caching method --- internal/ast/utilities.go | 8 ++++---- internal/compiler/fileloader.go | 6 +++--- internal/compiler/program.go | 2 +- internal/transformers/externalmoduleinfo.go | 2 +- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/internal/ast/utilities.go b/internal/ast/utilities.go index 8e7b43b761..889eeb101e 100644 --- a/internal/ast/utilities.go +++ b/internal/ast/utilities.go @@ -2368,26 +2368,26 @@ func GetImpliedNodeFormatForFile(path string, packageJsonType string) core.Modul } func GetEmitModuleFormatOfFileWorker(sourceFile *SourceFile, options *core.CompilerOptions, sourceFileMetaData *SourceFileMetaData) core.ModuleKind { - result := GetImpliedNodeFormatForEmitWorker(sourceFile, options, sourceFileMetaData) + result := GetImpliedNodeFormatForEmitWorker(sourceFile.FileName(), options, sourceFileMetaData) if result != core.ModuleKindNone { return result } return options.GetEmitModuleKind() } -func GetImpliedNodeFormatForEmitWorker(sourceFile *SourceFile, options *core.CompilerOptions, sourceFileMetaData *SourceFileMetaData) core.ModuleKind { +func GetImpliedNodeFormatForEmitWorker(fileName string, options *core.CompilerOptions, sourceFileMetaData *SourceFileMetaData) core.ModuleKind { moduleKind := options.GetEmitModuleKind() if core.ModuleKindNode16 <= moduleKind && moduleKind <= core.ModuleKindNodeNext && sourceFileMetaData != nil { return sourceFileMetaData.ImpliedNodeFormat } if sourceFileMetaData != nil && sourceFileMetaData.ImpliedNodeFormat == core.ModuleKindCommonJS && (sourceFileMetaData.PackageJsonType != "module" || - tspath.FileExtensionIsOneOf(sourceFile.FileName(), []string{tspath.ExtensionCjs, tspath.ExtensionCts})) { + tspath.FileExtensionIsOneOf(fileName, []string{tspath.ExtensionCjs, tspath.ExtensionCts})) { return core.ModuleKindCommonJS } if sourceFileMetaData != nil && sourceFileMetaData.ImpliedNodeFormat == core.ModuleKindESNext && (sourceFileMetaData.PackageJsonType == "module" || - tspath.FileExtensionIsOneOf(sourceFile.fileName, []string{tspath.ExtensionMjs, tspath.ExtensionMts})) { + tspath.FileExtensionIsOneOf(fileName, []string{tspath.ExtensionMjs, tspath.ExtensionMts})) { return core.ModuleKindESNext } return core.ModuleKindNone diff --git a/internal/compiler/fileloader.go b/internal/compiler/fileloader.go index a05cd465d2..20f3269d62 100644 --- a/internal/compiler/fileloader.go +++ b/internal/compiler/fileloader.go @@ -224,7 +224,7 @@ func (t *parseTask) start(loader *fileLoader) { }) } -func (p *fileLoader) CacheSourceFileMetaData(path string, packageJsonType string) { +func (p *fileLoader) CacheSourceFileMetaData(path string) { p.sourceFileMetaDatasMutex.Lock() defer p.sourceFileMetaDatasMutex.Unlock() if _, ok := p.sourceFileMetaDatas[path]; ok { @@ -235,6 +235,7 @@ func (p *fileLoader) CacheSourceFileMetaData(path string, packageJsonType string p.sourceFileMetaDatas = make(map[string]*ast.SourceFileMetaData) } + packageJsonType := p.resolver.GetPackageJsonTypeIfApplicable(string(path)) impliedNodeFormat := ast.GetImpliedNodeFormatForFile(path, packageJsonType) metadata := &ast.SourceFileMetaData{ PackageJsonType: packageJsonType, @@ -247,8 +248,7 @@ func (p *fileLoader) CacheSourceFileMetaData(path string, packageJsonType string func (p *fileLoader) parseSourceFile(fileName string) *ast.SourceFile { path := tspath.ToPath(fileName, p.host.GetCurrentDirectory(), p.host.FS().UseCaseSensitiveFileNames()) sourceFile := p.host.GetSourceFile(fileName, path, p.compilerOptions.GetEmitScriptTarget()) - packageType := p.resolver.GetPackageJsonTypeIfApplicable(string(path)) - p.CacheSourceFileMetaData(string(path), packageType) + p.CacheSourceFileMetaData(string(path)) return sourceFile } diff --git a/internal/compiler/program.go b/internal/compiler/program.go index 44c2790d76..a12d79e78d 100644 --- a/internal/compiler/program.go +++ b/internal/compiler/program.go @@ -420,7 +420,7 @@ func (p *Program) GetEmitModuleFormatOfFileWorker(sourceFile *ast.SourceFile, op } func (p *Program) GetImpliedNodeFormatForEmit(sourceFile *ast.SourceFile) core.ResolutionMode { - return ast.GetImpliedNodeFormatForEmitWorker(sourceFile, p.compilerOptions, p.GetCachedSourceFileMetaData(sourceFile.FileName())) + return ast.GetImpliedNodeFormatForEmitWorker(sourceFile.FileName(), p.compilerOptions, p.GetCachedSourceFileMetaData(sourceFile.FileName())) } func (p *Program) CommonSourceDirectory() string { diff --git a/internal/transformers/externalmoduleinfo.go b/internal/transformers/externalmoduleinfo.go index 3f20948b11..42dd9604d0 100644 --- a/internal/transformers/externalmoduleinfo.go +++ b/internal/transformers/externalmoduleinfo.go @@ -249,7 +249,7 @@ const externalHelpersModuleNameText = "tslib" func createExternalHelpersImportDeclarationIfNeeded(emitContext *printer.EmitContext, sourceFile *ast.SourceFile, compilerOptions *core.CompilerOptions, hasExportStarsToExportValues bool, hasImportStar bool, hasImportDefault bool) *ast.Node /*ImportDeclaration | ImportEqualsDeclaration*/ { if compilerOptions.ImportHelpers.IsTrue() && ast.IsEffectiveExternalModule(sourceFile, compilerOptions) { moduleKind := compilerOptions.GetEmitModuleKind() - impliedModuleKind := ast.GetImpliedNodeFormatForEmitWorker(sourceFile, compilerOptions, emitContext.GetSourceFileMetaData(string(sourceFile.Path()))) + impliedModuleKind := ast.GetImpliedNodeFormatForEmitWorker(sourceFile.FileName(), compilerOptions, emitContext.GetSourceFileMetaData(string(sourceFile.Path()))) helpers := getImportedHelpers(emitContext, sourceFile) if (moduleKind >= core.ModuleKindES2015 && moduleKind <= core.ModuleKindESNext) || impliedModuleKind == core.ModuleKindESNext || From 0644fd3b1cf756ec7385de9214a2b4d615199db2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=B3=C3=B0i=20Karlsson?= Date: Mon, 17 Mar 2025 22:45:51 +0100 Subject: [PATCH 15/30] Appease linter and remove unnecessary convert --- internal/compiler/fileloader.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/compiler/fileloader.go b/internal/compiler/fileloader.go index 20f3269d62..6210715277 100644 --- a/internal/compiler/fileloader.go +++ b/internal/compiler/fileloader.go @@ -235,7 +235,7 @@ func (p *fileLoader) CacheSourceFileMetaData(path string) { p.sourceFileMetaDatas = make(map[string]*ast.SourceFileMetaData) } - packageJsonType := p.resolver.GetPackageJsonTypeIfApplicable(string(path)) + packageJsonType := p.resolver.GetPackageJsonTypeIfApplicable(path) impliedNodeFormat := ast.GetImpliedNodeFormatForFile(path, packageJsonType) metadata := &ast.SourceFileMetaData{ PackageJsonType: packageJsonType, From 8d1f096e77bb8b502d140642d19bb126cd8e668e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=B3=C3=B0i=20Karlsson?= Date: Tue, 18 Mar 2025 16:58:39 +0100 Subject: [PATCH 16/30] Use extension constants --- internal/compiler/module/resolver.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/compiler/module/resolver.go b/internal/compiler/module/resolver.go index 32d93d65b6..1196611c04 100644 --- a/internal/compiler/module/resolver.go +++ b/internal/compiler/module/resolver.go @@ -146,7 +146,7 @@ func (r *Resolver) GetPackageScopeForPath(directory string) *packagejson.InfoCac } func (r *Resolver) GetPackageJsonTypeIfApplicable(path string) string { - if tspath.FileExtensionIsOneOf(path, []string{".mts", ".cts", "mjs", "cjs"}) { + if tspath.FileExtensionIsOneOf(path, []string{tspath.ExtensionMts, tspath.ExtensionCts, tspath.ExtensionMjs, tspath.ExtensionCjs}) { return "" } From f6fcb493b2f83c7c1b409c4068cae6bc657991c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=B3=C3=B0i=20Karlsson?= Date: Tue, 18 Mar 2025 20:57:52 +0100 Subject: [PATCH 17/30] Pass single sourceFileMetaData from program into emitContext --- internal/compiler/emitter.go | 21 ++++++++--------- internal/compiler/program.go | 11 ++++----- internal/printer/emitcontext.go | 26 ++++++++++----------- internal/transformers/commonjsmodule.go | 2 +- internal/transformers/externalmoduleinfo.go | 4 ++-- internal/transformers/impliedmodule.go | 2 +- 6 files changed, 32 insertions(+), 34 deletions(-) diff --git a/internal/compiler/emitter.go b/internal/compiler/emitter.go index 748dd5b979..ce4e7bf758 100644 --- a/internal/compiler/emitter.go +++ b/internal/compiler/emitter.go @@ -20,16 +20,15 @@ const ( ) type emitter struct { - host EmitHost - emitOnly emitOnly - emittedFilesList []string - emitterDiagnostics ast.DiagnosticsCollection - emitSkipped bool - sourceMapDataList []*sourceMapEmitResult - writer printer.EmitTextWriter - paths *outputPaths - sourceFile *ast.SourceFile - sourcefileMetaDatas map[string]*ast.SourceFileMetaData + host EmitHost + emitOnly emitOnly + emittedFilesList []string + emitterDiagnostics ast.DiagnosticsCollection + emitSkipped bool + sourceMapDataList []*sourceMapEmitResult + writer printer.EmitTextWriter + paths *outputPaths + sourceFile *ast.SourceFile } func (e *emitter) emit() { @@ -106,7 +105,7 @@ func (e *emitter) emitJsFile(sourceFile *ast.SourceFile, jsFilePath string, sour } emitContext := printer.NewEmitContext() - emitContext.SetSourcefileMetaDatas(e.sourcefileMetaDatas) + emitContext.SetSourcefileMetaData(e.host.GetCachedSourceFileMetaData(string(sourceFile.Path()))) for _, transformer := range e.getScriptTransformers(emitContext, sourceFile) { sourceFile = transformer.TransformSourceFile(sourceFile) } diff --git a/internal/compiler/program.go b/internal/compiler/program.go index 6ecdc563ea..d09233ea36 100644 --- a/internal/compiler/program.go +++ b/internal/compiler/program.go @@ -550,12 +550,11 @@ func (p *Program) Emit(options *EmitOptions) *EmitResult { for _, sourceFile := range sourceFiles { emitter := &emitter{ - host: host, - emittedFilesList: nil, - sourceMapDataList: nil, - writer: nil, - sourceFile: sourceFile, - sourcefileMetaDatas: p.sourceFileMetaDatas, + host: host, + emittedFilesList: nil, + sourceMapDataList: nil, + writer: nil, + sourceFile: sourceFile, } emitters = append(emitters, emitter) wg.Queue(func() { diff --git a/internal/printer/emitcontext.go b/internal/printer/emitcontext.go index 6e0b97c3a8..03f399530d 100644 --- a/internal/printer/emitcontext.go +++ b/internal/printer/emitcontext.go @@ -16,15 +16,15 @@ import ( // // NOTE: EmitContext is not guaranteed to be thread-safe. type EmitContext struct { - Factory *ast.NodeFactory // Required. The NodeFactory to use to create new nodes - autoGenerate map[*ast.MemberName]*AutoGenerateInfo - textSource map[*ast.StringLiteralNode]*ast.Node - original map[*ast.Node]*ast.Node - emitNodes core.LinkStore[*ast.Node, emitNode] - varScopeStack core.Stack[*varScope] - letScopeStack core.Stack[*varScope] - emitHelpers collections.OrderedSet[*EmitHelper] - sourcefileMetaDatas map[string]*ast.SourceFileMetaData + Factory *ast.NodeFactory // Required. The NodeFactory to use to create new nodes + autoGenerate map[*ast.MemberName]*AutoGenerateInfo + textSource map[*ast.StringLiteralNode]*ast.Node + original map[*ast.Node]*ast.Node + emitNodes core.LinkStore[*ast.Node, emitNode] + varScopeStack core.Stack[*varScope] + letScopeStack core.Stack[*varScope] + emitHelpers collections.OrderedSet[*EmitHelper] + sourcefileMetaData *ast.SourceFileMetaData isCustomPrologue func(node *ast.Statement) bool isHoistedFunction func(node *ast.Statement) bool @@ -626,8 +626,8 @@ func (c *EmitContext) NewRewriteRelativeImportExtensionsHelper(firstArgument *as ) } -func (c *EmitContext) SetSourcefileMetaDatas(sourcefileMetaDatas map[string]*ast.SourceFileMetaData) { - c.sourcefileMetaDatas = sourcefileMetaDatas +func (c *EmitContext) SetSourcefileMetaData(sourcefileMetaData *ast.SourceFileMetaData) { + c.sourcefileMetaData = sourcefileMetaData } // @@ -955,6 +955,6 @@ func (c *EmitContext) VisitIterationBody(body *ast.Statement, visitor *ast.NodeV return updated } -func (c *EmitContext) GetSourceFileMetaData(path string) *ast.SourceFileMetaData { - return c.sourcefileMetaDatas[path] +func (c *EmitContext) GetSourceFileMetaData() *ast.SourceFileMetaData { + return c.sourcefileMetaData } diff --git a/internal/transformers/commonjsmodule.go b/internal/transformers/commonjsmodule.go index 117a0f8691..3e9448e2d1 100644 --- a/internal/transformers/commonjsmodule.go +++ b/internal/transformers/commonjsmodule.go @@ -1683,7 +1683,7 @@ func (tx *CommonJSModuleTransformer) visitCallExpression(node *ast.CallExpressio func (tx *CommonJSModuleTransformer) shouldTransformImportCall() bool { // !!! host.shouldTransformImportCall? - return shouldTransformImportCallWorker(tx.currentSourceFile, tx.compilerOptions, tx.emitContext.GetSourceFileMetaData(string(tx.currentSourceFile.Path()))) + return shouldTransformImportCallWorker(tx.currentSourceFile, tx.compilerOptions, tx.emitContext.GetSourceFileMetaData()) } func (tx *CommonJSModuleTransformer) visitImportCallExpression(node *ast.CallExpression, rewriteOrShim bool) *ast.Node { diff --git a/internal/transformers/externalmoduleinfo.go b/internal/transformers/externalmoduleinfo.go index 42dd9604d0..ccb2fbf310 100644 --- a/internal/transformers/externalmoduleinfo.go +++ b/internal/transformers/externalmoduleinfo.go @@ -249,7 +249,7 @@ const externalHelpersModuleNameText = "tslib" func createExternalHelpersImportDeclarationIfNeeded(emitContext *printer.EmitContext, sourceFile *ast.SourceFile, compilerOptions *core.CompilerOptions, hasExportStarsToExportValues bool, hasImportStar bool, hasImportDefault bool) *ast.Node /*ImportDeclaration | ImportEqualsDeclaration*/ { if compilerOptions.ImportHelpers.IsTrue() && ast.IsEffectiveExternalModule(sourceFile, compilerOptions) { moduleKind := compilerOptions.GetEmitModuleKind() - impliedModuleKind := ast.GetImpliedNodeFormatForEmitWorker(sourceFile.FileName(), compilerOptions, emitContext.GetSourceFileMetaData(string(sourceFile.Path()))) + impliedModuleKind := ast.GetImpliedNodeFormatForEmitWorker(sourceFile.FileName(), compilerOptions, emitContext.GetSourceFileMetaData()) helpers := getImportedHelpers(emitContext, sourceFile) if (moduleKind >= core.ModuleKindES2015 && moduleKind <= core.ModuleKindESNext) || impliedModuleKind == core.ModuleKindESNext || @@ -291,7 +291,7 @@ func createExternalHelpersImportDeclarationIfNeeded(emitContext *printer.EmitCon } } else { // When we emit to a non-ES module, generate a synthetic `import tslib = require("tslib")` to be further transformed. - externalHelpersModuleName := getOrCreateExternalHelpersModuleNameIfNeeded(emitContext, sourceFile, compilerOptions, helpers, hasExportStarsToExportValues, hasImportStar || hasImportDefault, emitContext.GetSourceFileMetaData(string(sourceFile.Path()))) + externalHelpersModuleName := getOrCreateExternalHelpersModuleNameIfNeeded(emitContext, sourceFile, compilerOptions, helpers, hasExportStarsToExportValues, hasImportStar || hasImportDefault, emitContext.GetSourceFileMetaData()) if externalHelpersModuleName != nil { externalHelpersImportDeclaration := emitContext.Factory.NewImportEqualsDeclaration( nil, /*modifiers*/ diff --git a/internal/transformers/impliedmodule.go b/internal/transformers/impliedmodule.go index c5a6f189b6..7f26624716 100644 --- a/internal/transformers/impliedmodule.go +++ b/internal/transformers/impliedmodule.go @@ -56,5 +56,5 @@ func (tx *ImpliedModuleTransformer) visitSourceFile(node *ast.SourceFile) *ast.N func (tx *ImpliedModuleTransformer) getEmitModuleFormatOfFile(node *ast.SourceFile) core.ModuleKind { // !!! host.getEmitModuleFormatOfFile? - return ast.GetEmitModuleFormatOfFileWorker(node, tx.compilerOptions, tx.emitContext.GetSourceFileMetaData(string(node.AsSourceFile().Path()))) + return ast.GetEmitModuleFormatOfFileWorker(node, tx.compilerOptions, tx.emitContext.GetSourceFileMetaData()) } From 3c902b8695f79264926de8d150d3f3eb9c11c157 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=B3=C3=B0i=20Karlsson?= Date: Tue, 18 Mar 2025 21:43:12 +0100 Subject: [PATCH 18/30] Accept insane new diff wins --- ...moduleNodeDefaultImports(module=node16).js | 4 +- ...eNodeDefaultImports(module=node16).js.diff | 13 +- ...duleNodeDefaultImports(module=nodenext).js | 4 +- ...odeDefaultImports(module=nodenext).js.diff | 13 +- .../nodeNextCjsNamespaceImportDefault1.js | 5 +- ...nodeNextCjsNamespaceImportDefault1.js.diff | 13 +- .../nodeNextCjsNamespaceImportDefault2.js | 7 +- ...nodeNextCjsNamespaceImportDefault2.js.diff | 15 +- ...eNextImportModeImplicitIndexResolution2.js | 3 +- ...ImportModeImplicitIndexResolution2.js.diff | 9 - .../compiler/nodeNextModuleResolution1.js | 3 +- .../nodeNextModuleResolution1.js.diff | 9 - .../compiler/nodeNextModuleResolution2.js | 3 +- .../nodeNextModuleResolution2.js.diff | 9 - .../bundlerImportESM(module=esnext).js | 3 +- .../bundlerImportESM(module=esnext).js.diff | 7 +- .../bundlerNodeModules1(module=esnext).js | 3 +- ...bundlerNodeModules1(module=esnext).js.diff | 9 - .../moduleResolutionWithoutExtension6.js | 3 +- .../moduleResolutionWithoutExtension6.js.diff | 9 - .../moduleResolutionWithoutExtension7.js | 3 +- .../moduleResolutionWithoutExtension7.js.diff | 9 - .../nodeModules1(module=node16).js | 118 ++++++++----- .../nodeModules1(module=node16).js.diff | 167 ++++-------------- .../nodeModules1(module=nodenext).js | 118 ++++++++----- .../nodeModules1(module=nodenext).js.diff | 167 ++++-------------- ...rmatFileAlwaysHasDefault(module=node16).js | 5 +- ...ileAlwaysHasDefault(module=node16).js.diff | 14 +- ...atFileAlwaysHasDefault(module=nodenext).js | 5 +- ...eAlwaysHasDefault(module=nodenext).js.diff | 14 +- ...onditionalPackageExports(module=node16).js | 39 +++- ...ionalPackageExports(module=node16).js.diff | 58 +----- ...ditionalPackageExports(module=nodenext).js | 39 +++- ...nalPackageExports(module=nodenext).js.diff | 58 +----- ...tionEmitDynamicImportWithPackageExports.js | 21 ++- ...mitDynamicImportWithPackageExports.js.diff | 41 ++--- ...onEmitWithPackageExports(module=node16).js | 50 ++++-- ...tWithPackageExports(module=node16).js.diff | 75 ++------ ...EmitWithPackageExports(module=nodenext).js | 50 ++++-- ...ithPackageExports(module=nodenext).js.diff | 75 ++------ ...nodeModulesDynamicImport(module=node16).js | 5 +- ...odulesDynamicImport(module=node16).js.diff | 14 +- ...deModulesDynamicImport(module=nodenext).js | 5 +- ...ulesDynamicImport(module=nodenext).js.diff | 14 +- ...ModulesExportAssignments(module=node16).js | 3 +- ...esExportAssignments(module=node16).js.diff | 8 +- ...dulesExportAssignments(module=nodenext).js | 3 +- ...ExportAssignments(module=nodenext).js.diff | 8 +- ...portsBlocksTypesVersions(module=node16).js | 3 +- ...BlocksTypesVersions(module=node16).js.diff | 11 -- ...rtsBlocksTypesVersions(module=nodenext).js | 3 +- ...ocksTypesVersions(module=nodenext).js.diff | 11 -- ...odeModulesForbidenSyntax(module=node16).js | 25 ++- ...dulesForbidenSyntax(module=node16).js.diff | 50 +++--- ...eModulesForbidenSyntax(module=nodenext).js | 25 ++- ...lesForbidenSyntax(module=nodenext).js.diff | 50 +++--- ...sGeneratedNameCollisions(module=node16).js | 9 +- ...ratedNameCollisions(module=node16).js.diff | 23 +-- ...eneratedNameCollisions(module=nodenext).js | 9 +- ...tedNameCollisions(module=nodenext).js.diff | 23 +-- ...eModulesImportAssertions(module=node16).js | 3 +- ...lesImportAssertions(module=node16).js.diff | 9 +- ...odulesImportAssertions(module=nodenext).js | 3 +- ...sImportAssertions(module=nodenext).js.diff | 9 +- ...ModulesImportAssignments(module=node16).js | 9 +- ...esImportAssignments(module=node16).js.diff | 19 +- ...dulesImportAssignments(module=nodenext).js | 9 +- ...ImportAssignments(module=nodenext).js.diff | 19 +- ...eModulesImportAttributes(module=node16).js | 3 +- ...lesImportAttributes(module=node16).js.diff | 9 +- ...odulesImportAttributes(module=nodenext).js | 3 +- ...sImportAttributes(module=nodenext).js.diff | 9 +- ...sImportHelpersCollisions(module=node16).js | 9 +- ...rtHelpersCollisions(module=node16).js.diff | 20 +-- ...mportHelpersCollisions(module=nodenext).js | 9 +- ...HelpersCollisions(module=nodenext).js.diff | 20 +-- ...ImportHelpersCollisions2(module=node16).js | 8 +- ...tHelpersCollisions2(module=node16).js.diff | 23 +-- ...portHelpersCollisions2(module=nodenext).js | 8 +- ...elpersCollisions2(module=nodenext).js.diff | 23 +-- ...ImportHelpersCollisions3(module=node16).js | 7 +- ...tHelpersCollisions3(module=node16).js.diff | 16 +- ...portHelpersCollisions3(module=nodenext).js | 7 +- ...elpersCollisions3(module=nodenext).js.diff | 16 +- .../nodeModulesImportMeta(module=node16).js | 5 +- ...deModulesImportMeta(module=node16).js.diff | 14 +- .../nodeModulesImportMeta(module=nodenext).js | 5 +- ...ModulesImportMeta(module=nodenext).js.diff | 14 +- ...portResolutionIntoExport(module=node16).js | 27 ++- ...esolutionIntoExport(module=node16).js.diff | 36 +--- ...rtResolutionIntoExport(module=nodenext).js | 27 ++- ...olutionIntoExport(module=nodenext).js.diff | 36 +--- ...sImportResolutionNoCycle(module=node16).js | 27 ++- ...rtResolutionNoCycle(module=node16).js.diff | 32 +--- ...mportResolutionNoCycle(module=nodenext).js | 27 ++- ...ResolutionNoCycle(module=nodenext).js.diff | 32 +--- ...odeModulesPackageExports(module=node16).js | 37 +++- ...dulesPackageExports(module=node16).js.diff | 55 +----- ...eModulesPackageExports(module=nodenext).js | 37 +++- ...lesPackageExports(module=nodenext).js.diff | 55 +----- ...odeModulesPackageImports(module=node16).js | 31 +++- ...dulesPackageImports(module=node16).js.diff | 44 +---- ...eModulesPackageImports(module=nodenext).js | 31 +++- ...lesPackageImports(module=nodenext).js.diff | 44 +---- ...lesPackagePatternExports(module=node16).js | 31 +++- ...ckagePatternExports(module=node16).js.diff | 42 +---- ...sPackagePatternExports(module=nodenext).js | 31 +++- ...agePatternExports(module=nodenext).js.diff | 42 +---- ...agePatternExportsExclude(module=node16).js | 37 +++- ...tternExportsExclude(module=node16).js.diff | 52 +----- ...ePatternExportsExclude(module=nodenext).js | 37 +++- ...ernExportsExclude(module=nodenext).js.diff | 52 +----- ...gePatternExportsTrailers(module=node16).js | 31 +++- ...ternExportsTrailers(module=node16).js.diff | 42 +---- ...PatternExportsTrailers(module=nodenext).js | 31 +++- ...rnExportsTrailers(module=nodenext).js.diff | 42 +---- ...ModulesResolveJsonModule(module=node16).js | 39 +++- ...esResolveJsonModule(module=node16).js.diff | 47 +---- ...dulesResolveJsonModule(module=nodenext).js | 39 +++- ...ResolveJsonModule(module=nodenext).js.diff | 47 +---- ...lesSynchronousCallErrors(module=node16).js | 9 +- ...nchronousCallErrors(module=node16).js.diff | 20 +-- ...sSynchronousCallErrors(module=nodenext).js | 9 +- ...hronousCallErrors(module=nodenext).js.diff | 20 +-- ...nodeModulesTopLevelAwait(module=node16).js | 5 +- ...odulesTopLevelAwait(module=node16).js.diff | 14 +- ...deModulesTopLevelAwait(module=nodenext).js | 5 +- ...ulesTopLevelAwait(module=nodenext).js.diff | 14 +- ...enceModeDeclarationEmit7(module=node16).js | 4 +- ...odeDeclarationEmit7(module=node16).js.diff | 7 +- ...ceModeDeclarationEmit7(module=nodenext).js | 4 +- ...eDeclarationEmit7(module=nodenext).js.diff | 7 +- ...pesVersionPackageExports(module=node16).js | 27 ++- ...rsionPackageExports(module=node16).js.diff | 32 +--- ...sVersionPackageExports(module=nodenext).js | 27 ++- ...ionPackageExports(module=nodenext).js.diff | 32 +--- .../nodePackageSelfName(module=node16).js | 27 ++- ...nodePackageSelfName(module=node16).js.diff | 32 +--- .../nodePackageSelfName(module=nodenext).js | 27 ++- ...dePackageSelfName(module=nodenext).js.diff | 32 +--- ...odePackageSelfNameScoped(module=node16).js | 27 ++- ...ckageSelfNameScoped(module=node16).js.diff | 32 +--- ...ePackageSelfNameScoped(module=nodenext).js | 27 ++- ...ageSelfNameScoped(module=nodenext).js.diff | 32 +--- .../conformance/typeOnlyESMImportFromCJS.js | 3 +- .../typeOnlyESMImportFromCJS.js.diff | 9 - 146 files changed, 1592 insertions(+), 1992 deletions(-) delete mode 100644 testdata/baselines/reference/submodule/compiler/nodeNextImportModeImplicitIndexResolution2.js.diff delete mode 100644 testdata/baselines/reference/submodule/compiler/nodeNextModuleResolution1.js.diff delete mode 100644 testdata/baselines/reference/submodule/compiler/nodeNextModuleResolution2.js.diff delete mode 100644 testdata/baselines/reference/submodule/conformance/bundlerNodeModules1(module=esnext).js.diff delete mode 100644 testdata/baselines/reference/submodule/conformance/moduleResolutionWithoutExtension6.js.diff delete mode 100644 testdata/baselines/reference/submodule/conformance/moduleResolutionWithoutExtension7.js.diff delete mode 100644 testdata/baselines/reference/submodule/conformance/nodeModulesExportsBlocksTypesVersions(module=node16).js.diff delete mode 100644 testdata/baselines/reference/submodule/conformance/nodeModulesExportsBlocksTypesVersions(module=nodenext).js.diff delete mode 100644 testdata/baselines/reference/submodule/conformance/typeOnlyESMImportFromCJS.js.diff diff --git a/testdata/baselines/reference/submodule/compiler/moduleNodeDefaultImports(module=node16).js b/testdata/baselines/reference/submodule/compiler/moduleNodeDefaultImports(module=node16).js index 65a0219e88..77dc36cb22 100644 --- a/testdata/baselines/reference/submodule/compiler/moduleNodeDefaultImports(module=node16).js +++ b/testdata/baselines/reference/submodule/compiler/moduleNodeDefaultImports(module=node16).js @@ -34,7 +34,9 @@ self.default.default(); self.def.default(); //// [mod.cjs] -export default fun; +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = fun; //// [b.mjs] import a from "./mod.cjs"; import { default as b } from "./mod.cjs"; diff --git a/testdata/baselines/reference/submodule/compiler/moduleNodeDefaultImports(module=node16).js.diff b/testdata/baselines/reference/submodule/compiler/moduleNodeDefaultImports(module=node16).js.diff index 28c564033c..de8492ed12 100644 --- a/testdata/baselines/reference/submodule/compiler/moduleNodeDefaultImports(module=node16).js.diff +++ b/testdata/baselines/reference/submodule/compiler/moduleNodeDefaultImports(module=node16).js.diff @@ -1,17 +1,6 @@ --- old.moduleNodeDefaultImports(module=node16).js +++ new.moduleNodeDefaultImports(module=node16).js -@@= skipped -33, +33 lines =@@ - self.def.default(); - - //// [mod.cjs] --"use strict"; --Object.defineProperty(exports, "__esModule", { value: true }); --exports.default = fun; -+export default fun; - //// [b.mjs] - import a from "./mod.cjs"; - import { default as b } from "./mod.cjs"; -@@= skipped -15, +13 lines =@@ +@@= skipped -48, +48 lines =@@ c === d; d === self.default; self.default === self.def; diff --git a/testdata/baselines/reference/submodule/compiler/moduleNodeDefaultImports(module=nodenext).js b/testdata/baselines/reference/submodule/compiler/moduleNodeDefaultImports(module=nodenext).js index 65a0219e88..77dc36cb22 100644 --- a/testdata/baselines/reference/submodule/compiler/moduleNodeDefaultImports(module=nodenext).js +++ b/testdata/baselines/reference/submodule/compiler/moduleNodeDefaultImports(module=nodenext).js @@ -34,7 +34,9 @@ self.default.default(); self.def.default(); //// [mod.cjs] -export default fun; +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = fun; //// [b.mjs] import a from "./mod.cjs"; import { default as b } from "./mod.cjs"; diff --git a/testdata/baselines/reference/submodule/compiler/moduleNodeDefaultImports(module=nodenext).js.diff b/testdata/baselines/reference/submodule/compiler/moduleNodeDefaultImports(module=nodenext).js.diff index b7674b3a38..7f55fa22fc 100644 --- a/testdata/baselines/reference/submodule/compiler/moduleNodeDefaultImports(module=nodenext).js.diff +++ b/testdata/baselines/reference/submodule/compiler/moduleNodeDefaultImports(module=nodenext).js.diff @@ -1,17 +1,6 @@ --- old.moduleNodeDefaultImports(module=nodenext).js +++ new.moduleNodeDefaultImports(module=nodenext).js -@@= skipped -33, +33 lines =@@ - self.def.default(); - - //// [mod.cjs] --"use strict"; --Object.defineProperty(exports, "__esModule", { value: true }); --exports.default = fun; -+export default fun; - //// [b.mjs] - import a from "./mod.cjs"; - import { default as b } from "./mod.cjs"; -@@= skipped -15, +13 lines =@@ +@@= skipped -48, +48 lines =@@ c === d; d === self.default; self.default === self.def; diff --git a/testdata/baselines/reference/submodule/compiler/nodeNextCjsNamespaceImportDefault1.js b/testdata/baselines/reference/submodule/compiler/nodeNextCjsNamespaceImportDefault1.js index c142bff294..8488614028 100644 --- a/testdata/baselines/reference/submodule/compiler/nodeNextCjsNamespaceImportDefault1.js +++ b/testdata/baselines/reference/submodule/compiler/nodeNextCjsNamespaceImportDefault1.js @@ -11,7 +11,10 @@ d.a; ns.default.a; //// [a.cjs] -export const a = 1; +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.a = void 0; +exports.a = 1; //// [foo.mjs] import d, { a } from './a.cjs'; import * as ns from './a.cjs'; diff --git a/testdata/baselines/reference/submodule/compiler/nodeNextCjsNamespaceImportDefault1.js.diff b/testdata/baselines/reference/submodule/compiler/nodeNextCjsNamespaceImportDefault1.js.diff index 00d76c52b3..ecb8aa5782 100644 --- a/testdata/baselines/reference/submodule/compiler/nodeNextCjsNamespaceImportDefault1.js.diff +++ b/testdata/baselines/reference/submodule/compiler/nodeNextCjsNamespaceImportDefault1.js.diff @@ -1,17 +1,6 @@ --- old.nodeNextCjsNamespaceImportDefault1.js +++ new.nodeNextCjsNamespaceImportDefault1.js -@@= skipped -10, +10 lines =@@ - ns.default.a; - - //// [a.cjs] --"use strict"; --Object.defineProperty(exports, "__esModule", { value: true }); --exports.a = void 0; --exports.a = 1; -+export const a = 1; - //// [foo.mjs] - import d, { a } from './a.cjs'; - import * as ns from './a.cjs'; +@@= skipped -20, +20 lines =@@ export { d, a, ns }; d.a; ns.default.a; diff --git a/testdata/baselines/reference/submodule/compiler/nodeNextCjsNamespaceImportDefault2.js b/testdata/baselines/reference/submodule/compiler/nodeNextCjsNamespaceImportDefault2.js index ca61cd5014..61e2da3766 100644 --- a/testdata/baselines/reference/submodule/compiler/nodeNextCjsNamespaceImportDefault2.js +++ b/testdata/baselines/reference/submodule/compiler/nodeNextCjsNamespaceImportDefault2.js @@ -12,8 +12,11 @@ d.a; ns.default.a; //// [a.cjs] -export const a = 1; -export default 'string'; +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.a = void 0; +exports.a = 1; +exports.default = 'string'; //// [foo.mjs] import d, { a } from './a.cjs'; import * as ns from './a.cjs'; diff --git a/testdata/baselines/reference/submodule/compiler/nodeNextCjsNamespaceImportDefault2.js.diff b/testdata/baselines/reference/submodule/compiler/nodeNextCjsNamespaceImportDefault2.js.diff index 80366801cb..4286da6a2f 100644 --- a/testdata/baselines/reference/submodule/compiler/nodeNextCjsNamespaceImportDefault2.js.diff +++ b/testdata/baselines/reference/submodule/compiler/nodeNextCjsNamespaceImportDefault2.js.diff @@ -1,19 +1,6 @@ --- old.nodeNextCjsNamespaceImportDefault2.js +++ new.nodeNextCjsNamespaceImportDefault2.js -@@= skipped -11, +11 lines =@@ - ns.default.a; - - //// [a.cjs] --"use strict"; --Object.defineProperty(exports, "__esModule", { value: true }); --exports.a = void 0; --exports.a = 1; --exports.default = 'string'; -+export const a = 1; -+export default 'string'; - //// [foo.mjs] - import d, { a } from './a.cjs'; - import * as ns from './a.cjs'; +@@= skipped -22, +22 lines =@@ export { d, a, ns }; d.a; ns.default.a; diff --git a/testdata/baselines/reference/submodule/compiler/nodeNextImportModeImplicitIndexResolution2.js b/testdata/baselines/reference/submodule/compiler/nodeNextImportModeImplicitIndexResolution2.js index b7f91afcc7..3125a73f6e 100644 --- a/testdata/baselines/reference/submodule/compiler/nodeNextImportModeImplicitIndexResolution2.js +++ b/testdata/baselines/reference/submodule/compiler/nodeNextImportModeImplicitIndexResolution2.js @@ -40,4 +40,5 @@ import dedent4 from "dedent4"; // Error //// [index.mjs] export {}; //// [index.cjs] -export {}; +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/testdata/baselines/reference/submodule/compiler/nodeNextImportModeImplicitIndexResolution2.js.diff b/testdata/baselines/reference/submodule/compiler/nodeNextImportModeImplicitIndexResolution2.js.diff deleted file mode 100644 index 101a37eab7..0000000000 --- a/testdata/baselines/reference/submodule/compiler/nodeNextImportModeImplicitIndexResolution2.js.diff +++ /dev/null @@ -1,9 +0,0 @@ ---- old.nodeNextImportModeImplicitIndexResolution2.js -+++ new.nodeNextImportModeImplicitIndexResolution2.js -@@= skipped -39, +39 lines =@@ - //// [index.mjs] - export {}; - //// [index.cjs] --"use strict"; --Object.defineProperty(exports, "__esModule", { value: true }); -+export {}; diff --git a/testdata/baselines/reference/submodule/compiler/nodeNextModuleResolution1.js b/testdata/baselines/reference/submodule/compiler/nodeNextModuleResolution1.js index d76bd3acd7..a006d7840c 100644 --- a/testdata/baselines/reference/submodule/compiler/nodeNextModuleResolution1.js +++ b/testdata/baselines/reference/submodule/compiler/nodeNextModuleResolution1.js @@ -15,5 +15,4 @@ import {x} from "foo"; //// [app.js] -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); +export {}; diff --git a/testdata/baselines/reference/submodule/compiler/nodeNextModuleResolution1.js.diff b/testdata/baselines/reference/submodule/compiler/nodeNextModuleResolution1.js.diff deleted file mode 100644 index 682724bccb..0000000000 --- a/testdata/baselines/reference/submodule/compiler/nodeNextModuleResolution1.js.diff +++ /dev/null @@ -1,9 +0,0 @@ ---- old.nodeNextModuleResolution1.js -+++ new.nodeNextModuleResolution1.js -@@= skipped -14, +14 lines =@@ - - - //// [app.js] --export {}; -+"use strict"; -+Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/testdata/baselines/reference/submodule/compiler/nodeNextModuleResolution2.js b/testdata/baselines/reference/submodule/compiler/nodeNextModuleResolution2.js index 19475675a5..e57c0f2575 100644 --- a/testdata/baselines/reference/submodule/compiler/nodeNextModuleResolution2.js +++ b/testdata/baselines/reference/submodule/compiler/nodeNextModuleResolution2.js @@ -16,5 +16,4 @@ import {x} from "foo"; //// [app.mjs] -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); +export {}; diff --git a/testdata/baselines/reference/submodule/compiler/nodeNextModuleResolution2.js.diff b/testdata/baselines/reference/submodule/compiler/nodeNextModuleResolution2.js.diff deleted file mode 100644 index 8777899528..0000000000 --- a/testdata/baselines/reference/submodule/compiler/nodeNextModuleResolution2.js.diff +++ /dev/null @@ -1,9 +0,0 @@ ---- old.nodeNextModuleResolution2.js -+++ new.nodeNextModuleResolution2.js -@@= skipped -15, +15 lines =@@ - - - //// [app.mjs] --export {}; -+"use strict"; -+Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/testdata/baselines/reference/submodule/conformance/bundlerImportESM(module=esnext).js b/testdata/baselines/reference/submodule/conformance/bundlerImportESM(module=esnext).js index 49092764d1..b594b0de06 100644 --- a/testdata/baselines/reference/submodule/conformance/bundlerImportESM(module=esnext).js +++ b/testdata/baselines/reference/submodule/conformance/bundlerImportESM(module=esnext).js @@ -16,6 +16,7 @@ import { esm } from "./esm.mjs"; //// [esm.mjs] export const esm = 0; //// [not-actually-cjs.cjs] -export {}; +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); //// [still-not-cjs.js] export {}; diff --git a/testdata/baselines/reference/submodule/conformance/bundlerImportESM(module=esnext).js.diff b/testdata/baselines/reference/submodule/conformance/bundlerImportESM(module=esnext).js.diff index d2d1041602..901a3740eb 100644 --- a/testdata/baselines/reference/submodule/conformance/bundlerImportESM(module=esnext).js.diff +++ b/testdata/baselines/reference/submodule/conformance/bundlerImportESM(module=esnext).js.diff @@ -7,8 +7,5 @@ -export var esm = 0; +export const esm = 0; //// [not-actually-cjs.cjs] --"use strict"; --Object.defineProperty(exports, "__esModule", { value: true }); -+export {}; - //// [still-not-cjs.js] - export {}; + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/testdata/baselines/reference/submodule/conformance/bundlerNodeModules1(module=esnext).js b/testdata/baselines/reference/submodule/conformance/bundlerNodeModules1(module=esnext).js index 1272b9f38f..c870e2e452 100644 --- a/testdata/baselines/reference/submodule/conformance/bundlerNodeModules1(module=esnext).js +++ b/testdata/baselines/reference/submodule/conformance/bundlerNodeModules1(module=esnext).js @@ -42,4 +42,5 @@ export {}; //// [main.mjs] export {}; //// [main.cjs] -export {}; +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/testdata/baselines/reference/submodule/conformance/bundlerNodeModules1(module=esnext).js.diff b/testdata/baselines/reference/submodule/conformance/bundlerNodeModules1(module=esnext).js.diff deleted file mode 100644 index 9fa2e21d82..0000000000 --- a/testdata/baselines/reference/submodule/conformance/bundlerNodeModules1(module=esnext).js.diff +++ /dev/null @@ -1,9 +0,0 @@ ---- old.bundlerNodeModules1(module=esnext).js -+++ new.bundlerNodeModules1(module=esnext).js -@@= skipped -41, +41 lines =@@ - //// [main.mjs] - export {}; - //// [main.cjs] --"use strict"; --Object.defineProperty(exports, "__esModule", { value: true }); -+export {}; diff --git a/testdata/baselines/reference/submodule/conformance/moduleResolutionWithoutExtension6.js b/testdata/baselines/reference/submodule/conformance/moduleResolutionWithoutExtension6.js index bf536ed1b3..7568c3532b 100644 --- a/testdata/baselines/reference/submodule/conformance/moduleResolutionWithoutExtension6.js +++ b/testdata/baselines/reference/submodule/conformance/moduleResolutionWithoutExtension6.js @@ -7,4 +7,5 @@ import { foo } from "./foo"; // should error, should not ask for extension //// [bar.cjs] -export {}; +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/testdata/baselines/reference/submodule/conformance/moduleResolutionWithoutExtension6.js.diff b/testdata/baselines/reference/submodule/conformance/moduleResolutionWithoutExtension6.js.diff deleted file mode 100644 index fb3a3e5714..0000000000 --- a/testdata/baselines/reference/submodule/conformance/moduleResolutionWithoutExtension6.js.diff +++ /dev/null @@ -1,9 +0,0 @@ ---- old.moduleResolutionWithoutExtension6.js -+++ new.moduleResolutionWithoutExtension6.js -@@= skipped -6, +6 lines =@@ - import { foo } from "./foo"; // should error, should not ask for extension - - //// [bar.cjs] --"use strict"; --Object.defineProperty(exports, "__esModule", { value: true }); -+export {}; diff --git a/testdata/baselines/reference/submodule/conformance/moduleResolutionWithoutExtension7.js b/testdata/baselines/reference/submodule/conformance/moduleResolutionWithoutExtension7.js index 70c35383bc..68df550488 100644 --- a/testdata/baselines/reference/submodule/conformance/moduleResolutionWithoutExtension7.js +++ b/testdata/baselines/reference/submodule/conformance/moduleResolutionWithoutExtension7.js @@ -5,4 +5,5 @@ import foo = require("./foo"); // should error, should not ask for extension //// [bar.cjs] -export {}; +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/testdata/baselines/reference/submodule/conformance/moduleResolutionWithoutExtension7.js.diff b/testdata/baselines/reference/submodule/conformance/moduleResolutionWithoutExtension7.js.diff deleted file mode 100644 index 19ef837aa4..0000000000 --- a/testdata/baselines/reference/submodule/conformance/moduleResolutionWithoutExtension7.js.diff +++ /dev/null @@ -1,9 +0,0 @@ ---- old.moduleResolutionWithoutExtension7.js -+++ new.moduleResolutionWithoutExtension7.js -@@= skipped -4, +4 lines =@@ - import foo = require("./foo"); // should error, should not ask for extension - - //// [bar.cjs] --"use strict"; --Object.defineProperty(exports, "__esModule", { value: true }); -+export {}; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModules1(module=node16).js b/testdata/baselines/reference/submodule/conformance/nodeModules1(module=node16).js index 8fd6ed770b..3f54e22db5 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModules1(module=node16).js +++ b/testdata/baselines/reference/submodule/conformance/nodeModules1(module=node16).js @@ -321,11 +321,17 @@ export {x}; } //// [index.js] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.x = void 0; const x = 1; -export { x }; +exports.x = x; //// [index.cjs] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.x = void 0; const x = 1; -export { x }; +exports.x = x; //// [index.mjs] const x = 1; export { x }; @@ -333,8 +339,11 @@ export { x }; const x = 1; export { x }; //// [index.cjs] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.x = void 0; const x = 1; -export { x }; +exports.x = x; //// [index.mjs] const x = 1; export { x }; @@ -345,34 +354,61 @@ export { x }; const x = 1; export { x }; //// [index.cjs] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.x = void 0; const x = 1; -export { x }; +exports.x = x; //// [index.cjs] -import { createRequire as _createRequire } from "module"; -const __require = _createRequire(import.meta.url); -import * as m1 from "./index.js"; -import * as m2 from "./index.mjs"; -import * as m3 from "./index.cjs"; -import * as m4 from "./subfolder/index.js"; -import * as m5 from "./subfolder/index.mjs"; -import * as m6 from "./subfolder/index.cjs"; -import * as m7 from "./subfolder2/index.js"; -import * as m8 from "./subfolder2/index.mjs"; -import * as m9 from "./subfolder2/index.cjs"; -import * as m10 from "./subfolder2/another/index.js"; -import * as m11 from "./subfolder2/another/index.mjs"; -import * as m12 from "./subfolder2/another/index.cjs"; -import * as m13 from "./"; -import * as m14 from "./index"; -import * as m15 from "./subfolder"; -import * as m16 from "./subfolder/"; -import * as m17 from "./subfolder/index"; -import * as m18 from "./subfolder2"; -import * as m19 from "./subfolder2/"; -import * as m20 from "./subfolder2/index"; -import * as m21 from "./subfolder2/another"; -import * as m22 from "./subfolder2/another/"; -import * as m23 from "./subfolder2/another/index"; +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.x = void 0; +const m1 = __importStar(require("./index.js")); +const m2 = __importStar(require("./index.mjs")); +const m3 = __importStar(require("./index.cjs")); +const m4 = __importStar(require("./subfolder/index.js")); +const m5 = __importStar(require("./subfolder/index.mjs")); +const m6 = __importStar(require("./subfolder/index.cjs")); +const m7 = __importStar(require("./subfolder2/index.js")); +const m8 = __importStar(require("./subfolder2/index.mjs")); +const m9 = __importStar(require("./subfolder2/index.cjs")); +const m10 = __importStar(require("./subfolder2/another/index.js")); +const m11 = __importStar(require("./subfolder2/another/index.mjs")); +const m12 = __importStar(require("./subfolder2/another/index.cjs")); +const m13 = __importStar(require("./")); +const m14 = __importStar(require("./index")); +const m15 = __importStar(require("./subfolder")); +const m16 = __importStar(require("./subfolder/")); +const m17 = __importStar(require("./subfolder/index")); +const m18 = __importStar(require("./subfolder2")); +const m19 = __importStar(require("./subfolder2/")); +const m20 = __importStar(require("./subfolder2/index")); +const m21 = __importStar(require("./subfolder2/another")); +const m22 = __importStar(require("./subfolder2/another/")); +const m23 = __importStar(require("./subfolder2/another/index")); void m1; void m2; void m3; @@ -396,17 +432,17 @@ void m20; void m21; void m22; void m23; -const m24 = __require("./"); -const m25 = __require("./index"); -const m26 = __require("./subfolder"); -const m27 = __require("./subfolder/"); -const m28 = __require("./subfolder/index"); -const m29 = __require("./subfolder2"); -const m30 = __require("./subfolder2/"); -const m31 = __require("./subfolder2/index"); -const m32 = __require("./subfolder2/another"); -const m33 = __require("./subfolder2/another/"); -const m34 = __require("./subfolder2/another/index"); +const m24 = require("./"); +const m25 = require("./index"); +const m26 = require("./subfolder"); +const m27 = require("./subfolder/"); +const m28 = require("./subfolder/index"); +const m29 = require("./subfolder2"); +const m30 = require("./subfolder2/"); +const m31 = require("./subfolder2/index"); +const m32 = require("./subfolder2/another"); +const m33 = require("./subfolder2/another/"); +const m34 = require("./subfolder2/another/index"); void m24; void m25; void m26; @@ -430,7 +466,7 @@ const _m43 = import("./subfolder2/another"); const _m44 = import("./subfolder2/another/"); const _m45 = import("./subfolder2/another/index"); const x = 1; -export { x }; +exports.x = x; //// [index.js] import { createRequire as _createRequire } from "module"; const __require = _createRequire(import.meta.url); diff --git a/testdata/baselines/reference/submodule/conformance/nodeModules1(module=node16).js.diff b/testdata/baselines/reference/submodule/conformance/nodeModules1(module=node16).js.diff index 47821adbf6..4ea1a2cc9b 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModules1(module=node16).js.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModules1(module=node16).js.diff @@ -1,24 +1,19 @@ --- old.nodeModules1(module=node16).js +++ new.nodeModules1(module=node16).js -@@= skipped -320, +320 lines =@@ - } - - //// [index.js] --"use strict"; --Object.defineProperty(exports, "__esModule", { value: true }); --exports.x = void 0; +@@= skipped -323, +323 lines =@@ + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.x = void 0; -// cjs format file const x = 1; --exports.x = x; -+export { x }; + exports.x = x; //// [index.cjs] --"use strict"; --Object.defineProperty(exports, "__esModule", { value: true }); --exports.x = void 0; + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.x = void 0; -// cjs format file const x = 1; --exports.x = x; -+export { x }; + exports.x = x; //// [index.mjs] -// esm format file const x = 1; @@ -32,13 +27,12 @@ -exports.x = x; +export { x }; //// [index.cjs] --"use strict"; --Object.defineProperty(exports, "__esModule", { value: true }); --exports.x = void 0; + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.x = void 0; -// cjs format file const x = 1; --exports.x = x; -+export { x }; + exports.x = x; //// [index.mjs] -// esm format file const x = 1; @@ -52,123 +46,37 @@ const x = 1; export { x }; //// [index.cjs] --"use strict"; --Object.defineProperty(exports, "__esModule", { value: true }); --exports.x = void 0; + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.x = void 0; -// cjs format file const x = 1; --exports.x = x; -+export { x }; + exports.x = x; //// [index.cjs] --"use strict"; --var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { -- if (k2 === undefined) k2 = k; -- var desc = Object.getOwnPropertyDescriptor(m, k); -- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { -- desc = { enumerable: true, get: function() { return m[k]; } }; -- } -- Object.defineProperty(o, k2, desc); --}) : (function(o, m, k, k2) { -- if (k2 === undefined) k2 = k; -- o[k2] = m[k]; --})); --var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { -- Object.defineProperty(o, "default", { enumerable: true, value: v }); --}) : function(o, v) { -- o["default"] = v; --}); --var __importStar = (this && this.__importStar) || function (mod) { -- if (mod && mod.__esModule) return mod; -- var result = {}; -- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); -- __setModuleDefault(result, mod); -- return result; --}; --Object.defineProperty(exports, "__esModule", { value: true }); --exports.x = void 0; +@@= skipped -74, +62 lines =@@ + }; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.x = void 0; -// ESM-format imports below should issue errors --const m1 = __importStar(require("./index.js")); --const m2 = __importStar(require("./index.mjs")); --const m3 = __importStar(require("./index.cjs")); --const m4 = __importStar(require("./subfolder/index.js")); --const m5 = __importStar(require("./subfolder/index.mjs")); --const m6 = __importStar(require("./subfolder/index.cjs")); --const m7 = __importStar(require("./subfolder2/index.js")); --const m8 = __importStar(require("./subfolder2/index.mjs")); --const m9 = __importStar(require("./subfolder2/index.cjs")); --const m10 = __importStar(require("./subfolder2/another/index.js")); --const m11 = __importStar(require("./subfolder2/another/index.mjs")); --const m12 = __importStar(require("./subfolder2/another/index.cjs")); + const m1 = __importStar(require("./index.js")); + const m2 = __importStar(require("./index.mjs")); + const m3 = __importStar(require("./index.cjs")); +@@= skipped -13, +12 lines =@@ + const m10 = __importStar(require("./subfolder2/another/index.js")); + const m11 = __importStar(require("./subfolder2/another/index.mjs")); + const m12 = __importStar(require("./subfolder2/another/index.cjs")); -// The next ones should _mostly_ work - cjs format files have index resolution and extension resolution (except for those which resolve to an esm format file) --const m13 = __importStar(require("./")); --const m14 = __importStar(require("./index")); --const m15 = __importStar(require("./subfolder")); --const m16 = __importStar(require("./subfolder/")); --const m17 = __importStar(require("./subfolder/index")); --const m18 = __importStar(require("./subfolder2")); --const m19 = __importStar(require("./subfolder2/")); --const m20 = __importStar(require("./subfolder2/index")); --const m21 = __importStar(require("./subfolder2/another")); --const m22 = __importStar(require("./subfolder2/another/")); --const m23 = __importStar(require("./subfolder2/another/index")); -+import { createRequire as _createRequire } from "module"; -+const __require = _createRequire(import.meta.url); -+import * as m1 from "./index.js"; -+import * as m2 from "./index.mjs"; -+import * as m3 from "./index.cjs"; -+import * as m4 from "./subfolder/index.js"; -+import * as m5 from "./subfolder/index.mjs"; -+import * as m6 from "./subfolder/index.cjs"; -+import * as m7 from "./subfolder2/index.js"; -+import * as m8 from "./subfolder2/index.mjs"; -+import * as m9 from "./subfolder2/index.cjs"; -+import * as m10 from "./subfolder2/another/index.js"; -+import * as m11 from "./subfolder2/another/index.mjs"; -+import * as m12 from "./subfolder2/another/index.cjs"; -+import * as m13 from "./"; -+import * as m14 from "./index"; -+import * as m15 from "./subfolder"; -+import * as m16 from "./subfolder/"; -+import * as m17 from "./subfolder/index"; -+import * as m18 from "./subfolder2"; -+import * as m19 from "./subfolder2/"; -+import * as m20 from "./subfolder2/index"; -+import * as m21 from "./subfolder2/another"; -+import * as m22 from "./subfolder2/another/"; -+import * as m23 from "./subfolder2/another/index"; - void m1; - void m2; - void m3; -@@= skipped -125, +75 lines =@@ + const m13 = __importStar(require("./")); + const m14 = __importStar(require("./index")); + const m15 = __importStar(require("./subfolder")); +@@= skipped -35, +34 lines =@@ void m21; void m22; void m23; -// These should _mostly_ work - `import = require` always desugars to require calls, which do have extension and index resolution (but can't load anything that resolves to esm!) --const m24 = require("./"); --const m25 = require("./index"); --const m26 = require("./subfolder"); --const m27 = require("./subfolder/"); --const m28 = require("./subfolder/index"); --const m29 = require("./subfolder2"); --const m30 = require("./subfolder2/"); --const m31 = require("./subfolder2/index"); --const m32 = require("./subfolder2/another"); --const m33 = require("./subfolder2/another/"); --const m34 = require("./subfolder2/another/index"); -+const m24 = __require("./"); -+const m25 = __require("./index"); -+const m26 = __require("./subfolder"); -+const m27 = __require("./subfolder/"); -+const m28 = __require("./subfolder/index"); -+const m29 = __require("./subfolder2"); -+const m30 = __require("./subfolder2/"); -+const m31 = __require("./subfolder2/index"); -+const m32 = __require("./subfolder2/another"); -+const m33 = __require("./subfolder2/another/"); -+const m34 = __require("./subfolder2/another/index"); - void m24; - void m25; - void m26; + const m24 = require("./"); + const m25 = require("./index"); + const m26 = require("./subfolder"); @@= skipped -23, +22 lines =@@ void m32; void m33; @@ -183,11 +91,8 @@ const _m45 = import("./subfolder2/another/index"); -// cjs format file const x = 1; --exports.x = x; -+export { x }; + exports.x = x; //// [index.js] - import { createRequire as _createRequire } from "module"; - const __require = _createRequire(import.meta.url); @@= skipped -18, +17 lines =@@ import * as m10 from "./subfolder2/another/index.js"; import * as m11 from "./subfolder2/another/index.mjs"; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModules1(module=nodenext).js b/testdata/baselines/reference/submodule/conformance/nodeModules1(module=nodenext).js index 8fd6ed770b..3f54e22db5 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModules1(module=nodenext).js +++ b/testdata/baselines/reference/submodule/conformance/nodeModules1(module=nodenext).js @@ -321,11 +321,17 @@ export {x}; } //// [index.js] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.x = void 0; const x = 1; -export { x }; +exports.x = x; //// [index.cjs] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.x = void 0; const x = 1; -export { x }; +exports.x = x; //// [index.mjs] const x = 1; export { x }; @@ -333,8 +339,11 @@ export { x }; const x = 1; export { x }; //// [index.cjs] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.x = void 0; const x = 1; -export { x }; +exports.x = x; //// [index.mjs] const x = 1; export { x }; @@ -345,34 +354,61 @@ export { x }; const x = 1; export { x }; //// [index.cjs] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.x = void 0; const x = 1; -export { x }; +exports.x = x; //// [index.cjs] -import { createRequire as _createRequire } from "module"; -const __require = _createRequire(import.meta.url); -import * as m1 from "./index.js"; -import * as m2 from "./index.mjs"; -import * as m3 from "./index.cjs"; -import * as m4 from "./subfolder/index.js"; -import * as m5 from "./subfolder/index.mjs"; -import * as m6 from "./subfolder/index.cjs"; -import * as m7 from "./subfolder2/index.js"; -import * as m8 from "./subfolder2/index.mjs"; -import * as m9 from "./subfolder2/index.cjs"; -import * as m10 from "./subfolder2/another/index.js"; -import * as m11 from "./subfolder2/another/index.mjs"; -import * as m12 from "./subfolder2/another/index.cjs"; -import * as m13 from "./"; -import * as m14 from "./index"; -import * as m15 from "./subfolder"; -import * as m16 from "./subfolder/"; -import * as m17 from "./subfolder/index"; -import * as m18 from "./subfolder2"; -import * as m19 from "./subfolder2/"; -import * as m20 from "./subfolder2/index"; -import * as m21 from "./subfolder2/another"; -import * as m22 from "./subfolder2/another/"; -import * as m23 from "./subfolder2/another/index"; +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.x = void 0; +const m1 = __importStar(require("./index.js")); +const m2 = __importStar(require("./index.mjs")); +const m3 = __importStar(require("./index.cjs")); +const m4 = __importStar(require("./subfolder/index.js")); +const m5 = __importStar(require("./subfolder/index.mjs")); +const m6 = __importStar(require("./subfolder/index.cjs")); +const m7 = __importStar(require("./subfolder2/index.js")); +const m8 = __importStar(require("./subfolder2/index.mjs")); +const m9 = __importStar(require("./subfolder2/index.cjs")); +const m10 = __importStar(require("./subfolder2/another/index.js")); +const m11 = __importStar(require("./subfolder2/another/index.mjs")); +const m12 = __importStar(require("./subfolder2/another/index.cjs")); +const m13 = __importStar(require("./")); +const m14 = __importStar(require("./index")); +const m15 = __importStar(require("./subfolder")); +const m16 = __importStar(require("./subfolder/")); +const m17 = __importStar(require("./subfolder/index")); +const m18 = __importStar(require("./subfolder2")); +const m19 = __importStar(require("./subfolder2/")); +const m20 = __importStar(require("./subfolder2/index")); +const m21 = __importStar(require("./subfolder2/another")); +const m22 = __importStar(require("./subfolder2/another/")); +const m23 = __importStar(require("./subfolder2/another/index")); void m1; void m2; void m3; @@ -396,17 +432,17 @@ void m20; void m21; void m22; void m23; -const m24 = __require("./"); -const m25 = __require("./index"); -const m26 = __require("./subfolder"); -const m27 = __require("./subfolder/"); -const m28 = __require("./subfolder/index"); -const m29 = __require("./subfolder2"); -const m30 = __require("./subfolder2/"); -const m31 = __require("./subfolder2/index"); -const m32 = __require("./subfolder2/another"); -const m33 = __require("./subfolder2/another/"); -const m34 = __require("./subfolder2/another/index"); +const m24 = require("./"); +const m25 = require("./index"); +const m26 = require("./subfolder"); +const m27 = require("./subfolder/"); +const m28 = require("./subfolder/index"); +const m29 = require("./subfolder2"); +const m30 = require("./subfolder2/"); +const m31 = require("./subfolder2/index"); +const m32 = require("./subfolder2/another"); +const m33 = require("./subfolder2/another/"); +const m34 = require("./subfolder2/another/index"); void m24; void m25; void m26; @@ -430,7 +466,7 @@ const _m43 = import("./subfolder2/another"); const _m44 = import("./subfolder2/another/"); const _m45 = import("./subfolder2/another/index"); const x = 1; -export { x }; +exports.x = x; //// [index.js] import { createRequire as _createRequire } from "module"; const __require = _createRequire(import.meta.url); diff --git a/testdata/baselines/reference/submodule/conformance/nodeModules1(module=nodenext).js.diff b/testdata/baselines/reference/submodule/conformance/nodeModules1(module=nodenext).js.diff index fe0a6135d8..928ccabae1 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModules1(module=nodenext).js.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModules1(module=nodenext).js.diff @@ -1,24 +1,19 @@ --- old.nodeModules1(module=nodenext).js +++ new.nodeModules1(module=nodenext).js -@@= skipped -320, +320 lines =@@ - } - - //// [index.js] --"use strict"; --Object.defineProperty(exports, "__esModule", { value: true }); --exports.x = void 0; +@@= skipped -323, +323 lines =@@ + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.x = void 0; -// cjs format file const x = 1; --exports.x = x; -+export { x }; + exports.x = x; //// [index.cjs] --"use strict"; --Object.defineProperty(exports, "__esModule", { value: true }); --exports.x = void 0; + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.x = void 0; -// cjs format file const x = 1; --exports.x = x; -+export { x }; + exports.x = x; //// [index.mjs] -// esm format file const x = 1; @@ -32,13 +27,12 @@ -exports.x = x; +export { x }; //// [index.cjs] --"use strict"; --Object.defineProperty(exports, "__esModule", { value: true }); --exports.x = void 0; + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.x = void 0; -// cjs format file const x = 1; --exports.x = x; -+export { x }; + exports.x = x; //// [index.mjs] -// esm format file const x = 1; @@ -52,123 +46,37 @@ const x = 1; export { x }; //// [index.cjs] --"use strict"; --Object.defineProperty(exports, "__esModule", { value: true }); --exports.x = void 0; + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.x = void 0; -// cjs format file const x = 1; --exports.x = x; -+export { x }; + exports.x = x; //// [index.cjs] --"use strict"; --var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { -- if (k2 === undefined) k2 = k; -- var desc = Object.getOwnPropertyDescriptor(m, k); -- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { -- desc = { enumerable: true, get: function() { return m[k]; } }; -- } -- Object.defineProperty(o, k2, desc); --}) : (function(o, m, k, k2) { -- if (k2 === undefined) k2 = k; -- o[k2] = m[k]; --})); --var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { -- Object.defineProperty(o, "default", { enumerable: true, value: v }); --}) : function(o, v) { -- o["default"] = v; --}); --var __importStar = (this && this.__importStar) || function (mod) { -- if (mod && mod.__esModule) return mod; -- var result = {}; -- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); -- __setModuleDefault(result, mod); -- return result; --}; --Object.defineProperty(exports, "__esModule", { value: true }); --exports.x = void 0; +@@= skipped -74, +62 lines =@@ + }; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.x = void 0; -// ESM-format imports below should issue errors --const m1 = __importStar(require("./index.js")); --const m2 = __importStar(require("./index.mjs")); --const m3 = __importStar(require("./index.cjs")); --const m4 = __importStar(require("./subfolder/index.js")); --const m5 = __importStar(require("./subfolder/index.mjs")); --const m6 = __importStar(require("./subfolder/index.cjs")); --const m7 = __importStar(require("./subfolder2/index.js")); --const m8 = __importStar(require("./subfolder2/index.mjs")); --const m9 = __importStar(require("./subfolder2/index.cjs")); --const m10 = __importStar(require("./subfolder2/another/index.js")); --const m11 = __importStar(require("./subfolder2/another/index.mjs")); --const m12 = __importStar(require("./subfolder2/another/index.cjs")); + const m1 = __importStar(require("./index.js")); + const m2 = __importStar(require("./index.mjs")); + const m3 = __importStar(require("./index.cjs")); +@@= skipped -13, +12 lines =@@ + const m10 = __importStar(require("./subfolder2/another/index.js")); + const m11 = __importStar(require("./subfolder2/another/index.mjs")); + const m12 = __importStar(require("./subfolder2/another/index.cjs")); -// The next ones should _mostly_ work - cjs format files have index resolution and extension resolution (except for those which resolve to an esm format file) --const m13 = __importStar(require("./")); --const m14 = __importStar(require("./index")); --const m15 = __importStar(require("./subfolder")); --const m16 = __importStar(require("./subfolder/")); --const m17 = __importStar(require("./subfolder/index")); --const m18 = __importStar(require("./subfolder2")); --const m19 = __importStar(require("./subfolder2/")); --const m20 = __importStar(require("./subfolder2/index")); --const m21 = __importStar(require("./subfolder2/another")); --const m22 = __importStar(require("./subfolder2/another/")); --const m23 = __importStar(require("./subfolder2/another/index")); -+import { createRequire as _createRequire } from "module"; -+const __require = _createRequire(import.meta.url); -+import * as m1 from "./index.js"; -+import * as m2 from "./index.mjs"; -+import * as m3 from "./index.cjs"; -+import * as m4 from "./subfolder/index.js"; -+import * as m5 from "./subfolder/index.mjs"; -+import * as m6 from "./subfolder/index.cjs"; -+import * as m7 from "./subfolder2/index.js"; -+import * as m8 from "./subfolder2/index.mjs"; -+import * as m9 from "./subfolder2/index.cjs"; -+import * as m10 from "./subfolder2/another/index.js"; -+import * as m11 from "./subfolder2/another/index.mjs"; -+import * as m12 from "./subfolder2/another/index.cjs"; -+import * as m13 from "./"; -+import * as m14 from "./index"; -+import * as m15 from "./subfolder"; -+import * as m16 from "./subfolder/"; -+import * as m17 from "./subfolder/index"; -+import * as m18 from "./subfolder2"; -+import * as m19 from "./subfolder2/"; -+import * as m20 from "./subfolder2/index"; -+import * as m21 from "./subfolder2/another"; -+import * as m22 from "./subfolder2/another/"; -+import * as m23 from "./subfolder2/another/index"; - void m1; - void m2; - void m3; -@@= skipped -125, +75 lines =@@ + const m13 = __importStar(require("./")); + const m14 = __importStar(require("./index")); + const m15 = __importStar(require("./subfolder")); +@@= skipped -35, +34 lines =@@ void m21; void m22; void m23; -// These should _mostly_ work - `import = require` always desugars to require calls, which do have extension and index resolution (but can't load anything that resolves to esm!) --const m24 = require("./"); --const m25 = require("./index"); --const m26 = require("./subfolder"); --const m27 = require("./subfolder/"); --const m28 = require("./subfolder/index"); --const m29 = require("./subfolder2"); --const m30 = require("./subfolder2/"); --const m31 = require("./subfolder2/index"); --const m32 = require("./subfolder2/another"); --const m33 = require("./subfolder2/another/"); --const m34 = require("./subfolder2/another/index"); -+const m24 = __require("./"); -+const m25 = __require("./index"); -+const m26 = __require("./subfolder"); -+const m27 = __require("./subfolder/"); -+const m28 = __require("./subfolder/index"); -+const m29 = __require("./subfolder2"); -+const m30 = __require("./subfolder2/"); -+const m31 = __require("./subfolder2/index"); -+const m32 = __require("./subfolder2/another"); -+const m33 = __require("./subfolder2/another/"); -+const m34 = __require("./subfolder2/another/index"); - void m24; - void m25; - void m26; + const m24 = require("./"); + const m25 = require("./index"); + const m26 = require("./subfolder"); @@= skipped -23, +22 lines =@@ void m32; void m33; @@ -183,11 +91,8 @@ const _m45 = import("./subfolder2/another/index"); -// cjs format file const x = 1; --exports.x = x; -+export { x }; + exports.x = x; //// [index.js] - import { createRequire as _createRequire } from "module"; - const __require = _createRequire(import.meta.url); @@= skipped -18, +17 lines =@@ import * as m10 from "./subfolder2/another/index.js"; import * as m11 from "./subfolder2/another/index.mjs"; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesCjsFormatFileAlwaysHasDefault(module=node16).js b/testdata/baselines/reference/submodule/conformance/nodeModulesCjsFormatFileAlwaysHasDefault(module=node16).js index e8ad87d1c3..8a3bfef422 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesCjsFormatFileAlwaysHasDefault(module=node16).js +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesCjsFormatFileAlwaysHasDefault(module=node16).js @@ -19,7 +19,10 @@ mod; } //// [index.js] -export const a = 1; +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.a = void 0; +exports.a = 1; //// [index.js] import mod from "./subfolder/index.js"; mod; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesCjsFormatFileAlwaysHasDefault(module=node16).js.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesCjsFormatFileAlwaysHasDefault(module=node16).js.diff index acc7f13212..c9d180f78b 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesCjsFormatFileAlwaysHasDefault(module=node16).js.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesCjsFormatFileAlwaysHasDefault(module=node16).js.diff @@ -1,15 +1,11 @@ --- old.nodeModulesCjsFormatFileAlwaysHasDefault(module=node16).js +++ new.nodeModulesCjsFormatFileAlwaysHasDefault(module=node16).js -@@= skipped -18, +18 lines =@@ - } - - //// [index.js] --"use strict"; --Object.defineProperty(exports, "__esModule", { value: true }); --exports.a = void 0; +@@= skipped -21, +21 lines =@@ + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.a = void 0; -// cjs format file --exports.a = 1; -+export const a = 1; + exports.a = 1; //// [index.js] -// esm format file import mod from "./subfolder/index.js"; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesCjsFormatFileAlwaysHasDefault(module=nodenext).js b/testdata/baselines/reference/submodule/conformance/nodeModulesCjsFormatFileAlwaysHasDefault(module=nodenext).js index e8ad87d1c3..8a3bfef422 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesCjsFormatFileAlwaysHasDefault(module=nodenext).js +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesCjsFormatFileAlwaysHasDefault(module=nodenext).js @@ -19,7 +19,10 @@ mod; } //// [index.js] -export const a = 1; +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.a = void 0; +exports.a = 1; //// [index.js] import mod from "./subfolder/index.js"; mod; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesCjsFormatFileAlwaysHasDefault(module=nodenext).js.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesCjsFormatFileAlwaysHasDefault(module=nodenext).js.diff index 6c872ee450..3069469c3f 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesCjsFormatFileAlwaysHasDefault(module=nodenext).js.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesCjsFormatFileAlwaysHasDefault(module=nodenext).js.diff @@ -1,15 +1,11 @@ --- old.nodeModulesCjsFormatFileAlwaysHasDefault(module=nodenext).js +++ new.nodeModulesCjsFormatFileAlwaysHasDefault(module=nodenext).js -@@= skipped -18, +18 lines =@@ - } - - //// [index.js] --"use strict"; --Object.defineProperty(exports, "__esModule", { value: true }); --exports.a = void 0; +@@= skipped -21, +21 lines =@@ + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.a = void 0; -// cjs format file --exports.a = 1; -+export const a = 1; + exports.a = 1; //// [index.js] -// esm format file import mod from "./subfolder/index.js"; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesConditionalPackageExports(module=node16).js b/testdata/baselines/reference/submodule/conformance/nodeModulesConditionalPackageExports(module=node16).js index 884cda0b62..1ef6cd7bec 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesConditionalPackageExports(module=node16).js +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesConditionalPackageExports(module=node16).js @@ -138,16 +138,41 @@ mjsi.mjsSource; typei.mjsSource; ts.mjsSource; //// [index.cjs] -import * as cjs from "package/cjs"; -import * as mjs from "package/mjs"; -import * as type from "package"; +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const cjs = __importStar(require("package/cjs")); +const mjs = __importStar(require("package/mjs")); +const type = __importStar(require("package")); cjs; mjs; type; -import * as cjsi from "inner/a"; -import * as mjsi from "inner/b"; -import * as typei from "inner"; -import * as ts from "inner/types"; +const cjsi = __importStar(require("inner/a")); +const mjsi = __importStar(require("inner/b")); +const typei = __importStar(require("inner")); +const ts = __importStar(require("inner/types")); cjsi.cjsSource; mjsi.cjsSource; typei.implicitCjsSource; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesConditionalPackageExports(module=node16).js.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesConditionalPackageExports(module=node16).js.diff index 497857a1ac..dc70540cb6 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesConditionalPackageExports(module=node16).js.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesConditionalPackageExports(module=node16).js.diff @@ -8,55 +8,15 @@ import * as cjs from "package/cjs"; import * as mjs from "package/mjs"; import * as type from "package"; -@@= skipped -16, +15 lines =@@ - typei.mjsSource; - ts.mjsSource; - //// [index.cjs] --"use strict"; --var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { -- if (k2 === undefined) k2 = k; -- var desc = Object.getOwnPropertyDescriptor(m, k); -- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { -- desc = { enumerable: true, get: function() { return m[k]; } }; -- } -- Object.defineProperty(o, k2, desc); --}) : (function(o, m, k, k2) { -- if (k2 === undefined) k2 = k; -- o[k2] = m[k]; --})); --var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { -- Object.defineProperty(o, "default", { enumerable: true, value: v }); --}) : function(o, v) { -- o["default"] = v; --}); --var __importStar = (this && this.__importStar) || function (mod) { -- if (mod && mod.__esModule) return mod; -- var result = {}; -- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); -- __setModuleDefault(result, mod); -- return result; --}; --Object.defineProperty(exports, "__esModule", { value: true }); +@@= skipped -41, +40 lines =@@ + return result; + }; + Object.defineProperty(exports, "__esModule", { value: true }); -// cjs format file --const cjs = __importStar(require("package/cjs")); --const mjs = __importStar(require("package/mjs")); --const type = __importStar(require("package")); -+import * as cjs from "package/cjs"; -+import * as mjs from "package/mjs"; -+import * as type from "package"; - cjs; - mjs; - type; --const cjsi = __importStar(require("inner/a")); --const mjsi = __importStar(require("inner/b")); --const typei = __importStar(require("inner")); --const ts = __importStar(require("inner/types")); -+import * as cjsi from "inner/a"; -+import * as mjsi from "inner/b"; -+import * as typei from "inner"; -+import * as ts from "inner/types"; - cjsi.cjsSource; - mjsi.cjsSource; + const cjs = __importStar(require("package/cjs")); + const mjs = __importStar(require("package/mjs")); + const type = __importStar(require("package")); +@@= skipped -16, +15 lines =@@ typei.implicitCjsSource; ts.cjsSource; //// [index.js] @@ -64,7 +24,7 @@ import * as cjs from "package/cjs"; import * as mjs from "package/mjs"; import * as type from "package"; -@@= skipped -56, +29 lines =@@ +@@= skipped -15, +14 lines =@@ mjsi.mjsSource; typei.mjsSource; ts.mjsSource; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesConditionalPackageExports(module=nodenext).js b/testdata/baselines/reference/submodule/conformance/nodeModulesConditionalPackageExports(module=nodenext).js index 884cda0b62..1ef6cd7bec 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesConditionalPackageExports(module=nodenext).js +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesConditionalPackageExports(module=nodenext).js @@ -138,16 +138,41 @@ mjsi.mjsSource; typei.mjsSource; ts.mjsSource; //// [index.cjs] -import * as cjs from "package/cjs"; -import * as mjs from "package/mjs"; -import * as type from "package"; +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const cjs = __importStar(require("package/cjs")); +const mjs = __importStar(require("package/mjs")); +const type = __importStar(require("package")); cjs; mjs; type; -import * as cjsi from "inner/a"; -import * as mjsi from "inner/b"; -import * as typei from "inner"; -import * as ts from "inner/types"; +const cjsi = __importStar(require("inner/a")); +const mjsi = __importStar(require("inner/b")); +const typei = __importStar(require("inner")); +const ts = __importStar(require("inner/types")); cjsi.cjsSource; mjsi.cjsSource; typei.implicitCjsSource; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesConditionalPackageExports(module=nodenext).js.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesConditionalPackageExports(module=nodenext).js.diff index 053861230a..1d25431280 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesConditionalPackageExports(module=nodenext).js.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesConditionalPackageExports(module=nodenext).js.diff @@ -8,55 +8,15 @@ import * as cjs from "package/cjs"; import * as mjs from "package/mjs"; import * as type from "package"; -@@= skipped -16, +15 lines =@@ - typei.mjsSource; - ts.mjsSource; - //// [index.cjs] --"use strict"; --var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { -- if (k2 === undefined) k2 = k; -- var desc = Object.getOwnPropertyDescriptor(m, k); -- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { -- desc = { enumerable: true, get: function() { return m[k]; } }; -- } -- Object.defineProperty(o, k2, desc); --}) : (function(o, m, k, k2) { -- if (k2 === undefined) k2 = k; -- o[k2] = m[k]; --})); --var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { -- Object.defineProperty(o, "default", { enumerable: true, value: v }); --}) : function(o, v) { -- o["default"] = v; --}); --var __importStar = (this && this.__importStar) || function (mod) { -- if (mod && mod.__esModule) return mod; -- var result = {}; -- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); -- __setModuleDefault(result, mod); -- return result; --}; --Object.defineProperty(exports, "__esModule", { value: true }); +@@= skipped -41, +40 lines =@@ + return result; + }; + Object.defineProperty(exports, "__esModule", { value: true }); -// cjs format file --const cjs = __importStar(require("package/cjs")); --const mjs = __importStar(require("package/mjs")); --const type = __importStar(require("package")); -+import * as cjs from "package/cjs"; -+import * as mjs from "package/mjs"; -+import * as type from "package"; - cjs; - mjs; - type; --const cjsi = __importStar(require("inner/a")); --const mjsi = __importStar(require("inner/b")); --const typei = __importStar(require("inner")); --const ts = __importStar(require("inner/types")); -+import * as cjsi from "inner/a"; -+import * as mjsi from "inner/b"; -+import * as typei from "inner"; -+import * as ts from "inner/types"; - cjsi.cjsSource; - mjsi.cjsSource; + const cjs = __importStar(require("package/cjs")); + const mjs = __importStar(require("package/mjs")); + const type = __importStar(require("package")); +@@= skipped -16, +15 lines =@@ typei.implicitCjsSource; ts.cjsSource; //// [index.js] @@ -64,7 +24,7 @@ import * as cjs from "package/cjs"; import * as mjs from "package/mjs"; import * as type from "package"; -@@= skipped -56, +29 lines =@@ +@@= skipped -15, +14 lines =@@ mjsi.mjsSource; typei.mjsSource; ts.mjsSource; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesDeclarationEmitDynamicImportWithPackageExports.js b/testdata/baselines/reference/submodule/conformance/nodeModulesDeclarationEmitDynamicImportWithPackageExports.js index b8384d5f4f..b189ca9980 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesDeclarationEmitDynamicImportWithPackageExports.js +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesDeclarationEmitDynamicImportWithPackageExports.js @@ -75,7 +75,8 @@ export {}; //// [index.mjs] export {}; //// [index.cjs] -export {}; +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); //// [other.js] export const a = await import("package/cjs"); export const b = await import("package/mjs"); @@ -93,10 +94,16 @@ export const f = await import("inner"); export const d = await import("inner/cjs"); export const e = await import("inner/mjs"); //// [other.cjs] -export const a = import("package/cjs"); -export const b = import("package/mjs"); -export const c = import("package"); -export const f = import("inner"); +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.f = exports.c = exports.b = exports.a = void 0; +exports.a = import("package/cjs"); +exports.b = import("package/mjs"); +exports.c = import("package"); +exports.f = import("inner"); //// [other2.cjs] -export const d = import("inner/cjs"); -export const e = import("inner/mjs"); +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.e = exports.d = void 0; +exports.d = import("inner/cjs"); +exports.e = import("inner/mjs"); diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesDeclarationEmitDynamicImportWithPackageExports.js.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesDeclarationEmitDynamicImportWithPackageExports.js.diff index 52206e0650..79f8d5b4c8 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesDeclarationEmitDynamicImportWithPackageExports.js.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesDeclarationEmitDynamicImportWithPackageExports.js.diff @@ -1,12 +1,8 @@ --- old.nodeModulesDeclarationEmitDynamicImportWithPackageExports.js +++ new.nodeModulesDeclarationEmitDynamicImportWithPackageExports.js -@@= skipped -74, +74 lines =@@ - //// [index.mjs] - export {}; - //// [index.cjs] --"use strict"; --Object.defineProperty(exports, "__esModule", { value: true }); -+export {}; +@@= skipped -77, +77 lines =@@ + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); //// [other.js] -// esm format file export const a = await import("package/cjs"); @@ -28,25 +24,20 @@ export const d = await import("inner/cjs"); export const e = await import("inner/mjs"); //// [other.cjs] --"use strict"; --Object.defineProperty(exports, "__esModule", { value: true }); --exports.f = exports.c = exports.b = exports.a = void 0; + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.f = exports.c = exports.b = exports.a = void 0; -// cjs format file, no TLA --exports.a = import("package/cjs"); --exports.b = import("package/mjs"); --exports.c = import("package"); --exports.f = import("inner"); -+export const a = import("package/cjs"); -+export const b = import("package/mjs"); -+export const c = import("package"); -+export const f = import("inner"); - //// [other2.cjs] --"use strict"; --Object.defineProperty(exports, "__esModule", { value: true }); --exports.e = exports.d = void 0; + exports.a = import("package/cjs"); + exports.b = import("package/mjs"); + exports.c = import("package"); +@@= skipped -32, +27 lines =@@ + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.e = exports.d = void 0; -// cjs format file, no TLA --exports.d = import("inner/cjs"); --exports.e = import("inner/mjs"); + exports.d = import("inner/cjs"); + exports.e = import("inner/mjs"); - - -//// [index.d.ts] @@ -103,5 +94,3 @@ - cjsNonmain: true; -}>; -export declare const e: Promise; -+export const d = import("inner/cjs"); -+export const e = import("inner/mjs"); diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesDeclarationEmitWithPackageExports(module=node16).js b/testdata/baselines/reference/submodule/conformance/nodeModulesDeclarationEmitWithPackageExports(module=node16).js index e593da39a0..d017a6dad5 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesDeclarationEmitWithPackageExports(module=node16).js +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesDeclarationEmitWithPackageExports(module=node16).js @@ -105,18 +105,44 @@ export const d = cjsi; export const e = mjsi; export const f = typei; //// [index.cjs] -import * as cjs from "package/cjs"; -import * as mjs from "package/mjs"; -import * as type from "package"; -export const a = cjs; -export const b = mjs; -export const c = type; -import * as cjsi from "inner/cjs"; -import * as mjsi from "inner/mjs"; -import * as typei from "inner"; -export const d = cjsi; -export const e = mjsi; -export const f = typei; +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.f = exports.e = exports.d = exports.c = exports.b = exports.a = void 0; +const cjs = __importStar(require("package/cjs")); +const mjs = __importStar(require("package/mjs")); +const type = __importStar(require("package")); +exports.a = cjs; +exports.b = mjs; +exports.c = type; +const cjsi = __importStar(require("inner/cjs")); +const mjsi = __importStar(require("inner/mjs")); +const typei = __importStar(require("inner")); +exports.d = cjsi; +exports.e = mjsi; +exports.f = typei; //// [index.js] import * as cjs from "package/cjs"; import * as mjs from "package/mjs"; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesDeclarationEmitWithPackageExports(module=node16).js.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesDeclarationEmitWithPackageExports(module=node16).js.diff index b8188749f9..4ed0968d01 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesDeclarationEmitWithPackageExports(module=node16).js.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesDeclarationEmitWithPackageExports(module=node16).js.diff @@ -8,74 +8,38 @@ import * as cjs from "package/cjs"; import * as mjs from "package/mjs"; import * as type from "package"; -@@= skipped -14, +13 lines =@@ - export const e = mjsi; - export const f = typei; - //// [index.cjs] --"use strict"; --var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { -- if (k2 === undefined) k2 = k; -- var desc = Object.getOwnPropertyDescriptor(m, k); -- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { -- desc = { enumerable: true, get: function() { return m[k]; } }; -- } -- Object.defineProperty(o, k2, desc); --}) : (function(o, m, k, k2) { -- if (k2 === undefined) k2 = k; -- o[k2] = m[k]; --})); --var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { -- Object.defineProperty(o, "default", { enumerable: true, value: v }); --}) : function(o, v) { -- o["default"] = v; --}); --var __importStar = (this && this.__importStar) || function (mod) { -- if (mod && mod.__esModule) return mod; -- var result = {}; -- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); -- __setModuleDefault(result, mod); -- return result; --}; --Object.defineProperty(exports, "__esModule", { value: true }); --exports.f = exports.e = exports.d = exports.c = exports.b = exports.a = void 0; +@@= skipped -40, +39 lines =@@ + }; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.f = exports.e = exports.d = exports.c = exports.b = exports.a = void 0; -// cjs format file --const cjs = __importStar(require("package/cjs")); --const mjs = __importStar(require("package/mjs")); --const type = __importStar(require("package")); --exports.a = cjs; --exports.b = mjs; --exports.c = type; --const cjsi = __importStar(require("inner/cjs")); --const mjsi = __importStar(require("inner/mjs")); --const typei = __importStar(require("inner")); --exports.d = cjsi; --exports.e = mjsi; --exports.f = typei; --//// [index.js] + const cjs = __importStar(require("package/cjs")); + const mjs = __importStar(require("package/mjs")); + const type = __importStar(require("package")); +@@= skipped -14, +13 lines =@@ + exports.e = mjsi; + exports.f = typei; + //// [index.js] -// esm format file import * as cjs from "package/cjs"; import * as mjs from "package/mjs"; import * as type from "package"; -@@= skipped -53, +12 lines =@@ +@@= skipped -13, +12 lines =@@ export const d = cjsi; export const e = mjsi; export const f = typei; - - -//// [index.d.mts] -+//// [index.js] - import * as cjs from "package/cjs"; - import * as mjs from "package/mjs"; - import * as type from "package"; +-import * as cjs from "package/cjs"; +-import * as mjs from "package/mjs"; +-import * as type from "package"; -export declare const a: typeof cjs; -export declare const b: typeof mjs; -export declare const c: typeof type; -+export const a = cjs; -+export const b = mjs; -+export const c = type; - import * as cjsi from "inner/cjs"; - import * as mjsi from "inner/mjs"; - import * as typei from "inner"; +-import * as cjsi from "inner/cjs"; +-import * as mjsi from "inner/mjs"; +-import * as typei from "inner"; -export declare const d: typeof cjsi; -export declare const e: typeof mjsi; -export declare const f: typeof typei; @@ -105,6 +69,3 @@ -export declare const d: typeof cjsi; -export declare const e: typeof mjsi; -export declare const f: typeof typei; -+export const d = cjsi; -+export const e = mjsi; -+export const f = typei; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesDeclarationEmitWithPackageExports(module=nodenext).js b/testdata/baselines/reference/submodule/conformance/nodeModulesDeclarationEmitWithPackageExports(module=nodenext).js index e593da39a0..d017a6dad5 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesDeclarationEmitWithPackageExports(module=nodenext).js +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesDeclarationEmitWithPackageExports(module=nodenext).js @@ -105,18 +105,44 @@ export const d = cjsi; export const e = mjsi; export const f = typei; //// [index.cjs] -import * as cjs from "package/cjs"; -import * as mjs from "package/mjs"; -import * as type from "package"; -export const a = cjs; -export const b = mjs; -export const c = type; -import * as cjsi from "inner/cjs"; -import * as mjsi from "inner/mjs"; -import * as typei from "inner"; -export const d = cjsi; -export const e = mjsi; -export const f = typei; +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.f = exports.e = exports.d = exports.c = exports.b = exports.a = void 0; +const cjs = __importStar(require("package/cjs")); +const mjs = __importStar(require("package/mjs")); +const type = __importStar(require("package")); +exports.a = cjs; +exports.b = mjs; +exports.c = type; +const cjsi = __importStar(require("inner/cjs")); +const mjsi = __importStar(require("inner/mjs")); +const typei = __importStar(require("inner")); +exports.d = cjsi; +exports.e = mjsi; +exports.f = typei; //// [index.js] import * as cjs from "package/cjs"; import * as mjs from "package/mjs"; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesDeclarationEmitWithPackageExports(module=nodenext).js.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesDeclarationEmitWithPackageExports(module=nodenext).js.diff index 7e9b0a6c6c..4065590fca 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesDeclarationEmitWithPackageExports(module=nodenext).js.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesDeclarationEmitWithPackageExports(module=nodenext).js.diff @@ -8,74 +8,38 @@ import * as cjs from "package/cjs"; import * as mjs from "package/mjs"; import * as type from "package"; -@@= skipped -14, +13 lines =@@ - export const e = mjsi; - export const f = typei; - //// [index.cjs] --"use strict"; --var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { -- if (k2 === undefined) k2 = k; -- var desc = Object.getOwnPropertyDescriptor(m, k); -- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { -- desc = { enumerable: true, get: function() { return m[k]; } }; -- } -- Object.defineProperty(o, k2, desc); --}) : (function(o, m, k, k2) { -- if (k2 === undefined) k2 = k; -- o[k2] = m[k]; --})); --var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { -- Object.defineProperty(o, "default", { enumerable: true, value: v }); --}) : function(o, v) { -- o["default"] = v; --}); --var __importStar = (this && this.__importStar) || function (mod) { -- if (mod && mod.__esModule) return mod; -- var result = {}; -- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); -- __setModuleDefault(result, mod); -- return result; --}; --Object.defineProperty(exports, "__esModule", { value: true }); --exports.f = exports.e = exports.d = exports.c = exports.b = exports.a = void 0; +@@= skipped -40, +39 lines =@@ + }; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.f = exports.e = exports.d = exports.c = exports.b = exports.a = void 0; -// cjs format file --const cjs = __importStar(require("package/cjs")); --const mjs = __importStar(require("package/mjs")); --const type = __importStar(require("package")); --exports.a = cjs; --exports.b = mjs; --exports.c = type; --const cjsi = __importStar(require("inner/cjs")); --const mjsi = __importStar(require("inner/mjs")); --const typei = __importStar(require("inner")); --exports.d = cjsi; --exports.e = mjsi; --exports.f = typei; --//// [index.js] + const cjs = __importStar(require("package/cjs")); + const mjs = __importStar(require("package/mjs")); + const type = __importStar(require("package")); +@@= skipped -14, +13 lines =@@ + exports.e = mjsi; + exports.f = typei; + //// [index.js] -// esm format file import * as cjs from "package/cjs"; import * as mjs from "package/mjs"; import * as type from "package"; -@@= skipped -53, +12 lines =@@ +@@= skipped -13, +12 lines =@@ export const d = cjsi; export const e = mjsi; export const f = typei; - - -//// [index.d.mts] -+//// [index.js] - import * as cjs from "package/cjs"; - import * as mjs from "package/mjs"; - import * as type from "package"; +-import * as cjs from "package/cjs"; +-import * as mjs from "package/mjs"; +-import * as type from "package"; -export declare const a: typeof cjs; -export declare const b: typeof mjs; -export declare const c: typeof type; -+export const a = cjs; -+export const b = mjs; -+export const c = type; - import * as cjsi from "inner/cjs"; - import * as mjsi from "inner/mjs"; - import * as typei from "inner"; +-import * as cjsi from "inner/cjs"; +-import * as mjsi from "inner/mjs"; +-import * as typei from "inner"; -export declare const d: typeof cjsi; -export declare const e: typeof mjsi; -export declare const f: typeof typei; @@ -105,6 +69,3 @@ -export declare const d: typeof cjsi; -export declare const e: typeof mjsi; -export declare const f: typeof typei; -+export const d = cjsi; -+export const e = mjsi; -+export const f = typei; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesDynamicImport(module=node16).js b/testdata/baselines/reference/submodule/conformance/nodeModulesDynamicImport(module=node16).js index dba9a01ae7..7fb343e7fc 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesDynamicImport(module=node16).js +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesDynamicImport(module=node16).js @@ -24,7 +24,10 @@ export async function main() { declare module "fs"; //// [index.js] -export async function main() { +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.main = main; +async function main() { const { readFile } = await import("fs"); } //// [index.js] diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesDynamicImport(module=node16).js.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesDynamicImport(module=node16).js.diff index c54067ceac..26e191c562 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesDynamicImport(module=node16).js.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesDynamicImport(module=node16).js.diff @@ -1,15 +1,11 @@ --- old.nodeModulesDynamicImport(module=node16).js +++ new.nodeModulesDynamicImport(module=node16).js -@@= skipped -23, +23 lines =@@ - declare module "fs"; - - //// [index.js] --"use strict"; --Object.defineProperty(exports, "__esModule", { value: true }); --exports.main = main; +@@= skipped -26, +26 lines =@@ + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.main = main; -// cjs format file --async function main() { -+export async function main() { + async function main() { const { readFile } = await import("fs"); } //// [index.js] diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesDynamicImport(module=nodenext).js b/testdata/baselines/reference/submodule/conformance/nodeModulesDynamicImport(module=nodenext).js index dba9a01ae7..7fb343e7fc 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesDynamicImport(module=nodenext).js +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesDynamicImport(module=nodenext).js @@ -24,7 +24,10 @@ export async function main() { declare module "fs"; //// [index.js] -export async function main() { +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.main = main; +async function main() { const { readFile } = await import("fs"); } //// [index.js] diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesDynamicImport(module=nodenext).js.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesDynamicImport(module=nodenext).js.diff index 1c9ce35d66..fda6aa81a4 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesDynamicImport(module=nodenext).js.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesDynamicImport(module=nodenext).js.diff @@ -1,15 +1,11 @@ --- old.nodeModulesDynamicImport(module=nodenext).js +++ new.nodeModulesDynamicImport(module=nodenext).js -@@= skipped -23, +23 lines =@@ - declare module "fs"; - - //// [index.js] --"use strict"; --Object.defineProperty(exports, "__esModule", { value: true }); --exports.main = main; +@@= skipped -26, +26 lines =@@ + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.main = main; -// cjs format file --async function main() { -+export async function main() { + async function main() { const { readFile } = await import("fs"); } //// [index.js] diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesExportAssignments(module=node16).js b/testdata/baselines/reference/submodule/conformance/nodeModulesExportAssignments(module=node16).js index aefe789bab..5b2027b8d7 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesExportAssignments(module=node16).js +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesExportAssignments(module=node16).js @@ -20,8 +20,9 @@ export = a; } //// [index.js] +"use strict"; const a = {}; -export {}; +module.exports = a; //// [index.js] const a = {}; export {}; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesExportAssignments(module=node16).js.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesExportAssignments(module=node16).js.diff index 0a5a87d03c..0a8ab237a6 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesExportAssignments(module=node16).js.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesExportAssignments(module=node16).js.diff @@ -1,14 +1,12 @@ --- old.nodeModulesExportAssignments(module=node16).js +++ new.nodeModulesExportAssignments(module=node16).js -@@= skipped -19, +19 lines =@@ - } +@@= skipped -20, +20 lines =@@ //// [index.js] --"use strict"; + "use strict"; -// cjs format file const a = {}; --module.exports = a; -+export {}; + module.exports = a; //// [index.js] -// esm format file const a = {}; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesExportAssignments(module=nodenext).js b/testdata/baselines/reference/submodule/conformance/nodeModulesExportAssignments(module=nodenext).js index aefe789bab..5b2027b8d7 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesExportAssignments(module=nodenext).js +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesExportAssignments(module=nodenext).js @@ -20,8 +20,9 @@ export = a; } //// [index.js] +"use strict"; const a = {}; -export {}; +module.exports = a; //// [index.js] const a = {}; export {}; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesExportAssignments(module=nodenext).js.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesExportAssignments(module=nodenext).js.diff index 0aef964cde..4e1332708e 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesExportAssignments(module=nodenext).js.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesExportAssignments(module=nodenext).js.diff @@ -1,14 +1,12 @@ --- old.nodeModulesExportAssignments(module=nodenext).js +++ new.nodeModulesExportAssignments(module=nodenext).js -@@= skipped -19, +19 lines =@@ - } +@@= skipped -20, +20 lines =@@ //// [index.js] --"use strict"; + "use strict"; -// cjs format file const a = {}; --module.exports = a; -+export {}; + module.exports = a; //// [index.js] -// esm format file const a = {}; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsBlocksTypesVersions(module=node16).js b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsBlocksTypesVersions(module=node16).js index 5548ce22de..396ca2dfc4 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsBlocksTypesVersions(module=node16).js +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsBlocksTypesVersions(module=node16).js @@ -64,6 +64,7 @@ import {} from "just-types-versions/foo"; //// [main.cjs] -export {}; +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); //// [main.mjs] export {}; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsBlocksTypesVersions(module=node16).js.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsBlocksTypesVersions(module=node16).js.diff deleted file mode 100644 index a5fafcb010..0000000000 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsBlocksTypesVersions(module=node16).js.diff +++ /dev/null @@ -1,11 +0,0 @@ ---- old.nodeModulesExportsBlocksTypesVersions(module=node16).js -+++ new.nodeModulesExportsBlocksTypesVersions(module=node16).js -@@= skipped -63, +63 lines =@@ - - - //// [main.cjs] --"use strict"; --Object.defineProperty(exports, "__esModule", { value: true }); -+export {}; - //// [main.mjs] - export {}; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsBlocksTypesVersions(module=nodenext).js b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsBlocksTypesVersions(module=nodenext).js index 5548ce22de..396ca2dfc4 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsBlocksTypesVersions(module=nodenext).js +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsBlocksTypesVersions(module=nodenext).js @@ -64,6 +64,7 @@ import {} from "just-types-versions/foo"; //// [main.cjs] -export {}; +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); //// [main.mjs] export {}; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsBlocksTypesVersions(module=nodenext).js.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesExportsBlocksTypesVersions(module=nodenext).js.diff deleted file mode 100644 index 07b79ffdf0..0000000000 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesExportsBlocksTypesVersions(module=nodenext).js.diff +++ /dev/null @@ -1,11 +0,0 @@ ---- old.nodeModulesExportsBlocksTypesVersions(module=nodenext).js -+++ new.nodeModulesExportsBlocksTypesVersions(module=nodenext).js -@@= skipped -63, +63 lines =@@ - - - //// [main.cjs] --"use strict"; --Object.defineProperty(exports, "__esModule", { value: true }); -+export {}; - //// [main.mjs] - export {}; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesForbidenSyntax(module=node16).js b/testdata/baselines/reference/submodule/conformance/nodeModulesForbidenSyntax(module=node16).js index 182b9100a7..45905d258d 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesForbidenSyntax(module=node16).js +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesForbidenSyntax(module=node16).js @@ -67,11 +67,17 @@ export {x}; } //// [index.js] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.x = void 0; const x = () => (void 0); -export { x }; +exports.x = x; //// [index.cjs] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.x = void 0; const x = () => (void 0); -export { x }; +exports.x = x; //// [index.mjs] const x = () => (void 0); export { x }; @@ -79,8 +85,11 @@ export { x }; const x = () => (void 0); export { x }; //// [index.cjs] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.x = void 0; const x = () => (void 0); -export { x }; +exports.x = x; //// [index.mjs] const x = () => (void 0); export { x }; @@ -91,14 +100,20 @@ export { x }; const x = () => (void 0); export { x }; //// [index.cjs] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.x = void 0; const x = () => (void 0); -export { x }; +exports.x = x; //// [index.mjs] const x = () => (void 0); export { x }; //// [index.cjs] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.x = void 0; const x = () => (void 0); -export { x }; +exports.x = x; //// [index.js] const x = () => (void 0); export { x }; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesForbidenSyntax(module=node16).js.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesForbidenSyntax(module=node16).js.diff index 376bd197f7..b39b40fe7c 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesForbidenSyntax(module=node16).js.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesForbidenSyntax(module=node16).js.diff @@ -1,24 +1,19 @@ --- old.nodeModulesForbidenSyntax(module=node16).js +++ new.nodeModulesForbidenSyntax(module=node16).js -@@= skipped -66, +66 lines =@@ - } - - //// [index.js] --"use strict"; --Object.defineProperty(exports, "__esModule", { value: true }); --exports.x = void 0; +@@= skipped -69, +69 lines =@@ + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.x = void 0; -// cjs format file const x = () => (void 0); --exports.x = x; -+export { x }; + exports.x = x; //// [index.cjs] --"use strict"; --Object.defineProperty(exports, "__esModule", { value: true }); --exports.x = void 0; + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.x = void 0; -// cjs format file const x = () => (void 0); --exports.x = x; -+export { x }; + exports.x = x; //// [index.mjs] -// esm format file const x = () => (void 0); @@ -32,13 +27,12 @@ -exports.x = x; +export { x }; //// [index.cjs] --"use strict"; --Object.defineProperty(exports, "__esModule", { value: true }); --exports.x = void 0; + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.x = void 0; -// cjs format file const x = () => (void 0); --exports.x = x; -+export { x }; + exports.x = x; //// [index.mjs] -// esm format file const x = () => (void 0); @@ -52,25 +46,23 @@ const x = () => (void 0); export { x }; //// [index.cjs] --"use strict"; --Object.defineProperty(exports, "__esModule", { value: true }); --exports.x = void 0; + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.x = void 0; -// cjs format file const x = () => (void 0); --exports.x = x; -+export { x }; + exports.x = x; //// [index.mjs] -// esm format file const x = () => (void 0); export { x }; //// [index.cjs] --"use strict"; --Object.defineProperty(exports, "__esModule", { value: true }); --exports.x = void 0; + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.x = void 0; -// cjs format file const x = () => (void 0); --exports.x = x; -+export { x }; + exports.x = x; //// [index.js] -// esm format file const x = () => (void 0); diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesForbidenSyntax(module=nodenext).js b/testdata/baselines/reference/submodule/conformance/nodeModulesForbidenSyntax(module=nodenext).js index 182b9100a7..45905d258d 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesForbidenSyntax(module=nodenext).js +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesForbidenSyntax(module=nodenext).js @@ -67,11 +67,17 @@ export {x}; } //// [index.js] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.x = void 0; const x = () => (void 0); -export { x }; +exports.x = x; //// [index.cjs] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.x = void 0; const x = () => (void 0); -export { x }; +exports.x = x; //// [index.mjs] const x = () => (void 0); export { x }; @@ -79,8 +85,11 @@ export { x }; const x = () => (void 0); export { x }; //// [index.cjs] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.x = void 0; const x = () => (void 0); -export { x }; +exports.x = x; //// [index.mjs] const x = () => (void 0); export { x }; @@ -91,14 +100,20 @@ export { x }; const x = () => (void 0); export { x }; //// [index.cjs] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.x = void 0; const x = () => (void 0); -export { x }; +exports.x = x; //// [index.mjs] const x = () => (void 0); export { x }; //// [index.cjs] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.x = void 0; const x = () => (void 0); -export { x }; +exports.x = x; //// [index.js] const x = () => (void 0); export { x }; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesForbidenSyntax(module=nodenext).js.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesForbidenSyntax(module=nodenext).js.diff index 36abb92b52..92c1f6df1d 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesForbidenSyntax(module=nodenext).js.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesForbidenSyntax(module=nodenext).js.diff @@ -1,24 +1,19 @@ --- old.nodeModulesForbidenSyntax(module=nodenext).js +++ new.nodeModulesForbidenSyntax(module=nodenext).js -@@= skipped -66, +66 lines =@@ - } - - //// [index.js] --"use strict"; --Object.defineProperty(exports, "__esModule", { value: true }); --exports.x = void 0; +@@= skipped -69, +69 lines =@@ + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.x = void 0; -// cjs format file const x = () => (void 0); --exports.x = x; -+export { x }; + exports.x = x; //// [index.cjs] --"use strict"; --Object.defineProperty(exports, "__esModule", { value: true }); --exports.x = void 0; + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.x = void 0; -// cjs format file const x = () => (void 0); --exports.x = x; -+export { x }; + exports.x = x; //// [index.mjs] -// esm format file const x = () => (void 0); @@ -32,13 +27,12 @@ -exports.x = x; +export { x }; //// [index.cjs] --"use strict"; --Object.defineProperty(exports, "__esModule", { value: true }); --exports.x = void 0; + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.x = void 0; -// cjs format file const x = () => (void 0); --exports.x = x; -+export { x }; + exports.x = x; //// [index.mjs] -// esm format file const x = () => (void 0); @@ -52,25 +46,23 @@ const x = () => (void 0); export { x }; //// [index.cjs] --"use strict"; --Object.defineProperty(exports, "__esModule", { value: true }); --exports.x = void 0; + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.x = void 0; -// cjs format file const x = () => (void 0); --exports.x = x; -+export { x }; + exports.x = x; //// [index.mjs] -// esm format file const x = () => (void 0); export { x }; //// [index.cjs] --"use strict"; --Object.defineProperty(exports, "__esModule", { value: true }); --exports.x = void 0; + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.x = void 0; -// cjs format file const x = () => (void 0); --exports.x = x; -+export { x }; + exports.x = x; //// [index.js] -// esm format file const x = () => (void 0); diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesGeneratedNameCollisions(module=node16).js b/testdata/baselines/reference/submodule/conformance/nodeModulesGeneratedNameCollisions(module=node16).js index f28f49c0c2..573c448fa3 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesGeneratedNameCollisions(module=node16).js +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesGeneratedNameCollisions(module=node16).js @@ -26,12 +26,17 @@ export {require, exports, Object}; } //// [index.js] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Object = exports.exports = exports.__esModule = void 0; +exports.require = require; function require() { } const exports = {}; +exports.exports = exports; class Object { } -export const __esModule = false; -export { require, exports, Object }; +exports.Object = Object; +exports.__esModule = false; //// [index.js] function require() { } const exports = {}; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesGeneratedNameCollisions(module=node16).js.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesGeneratedNameCollisions(module=node16).js.diff index ba34044f19..b097913e6b 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesGeneratedNameCollisions(module=node16).js.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesGeneratedNameCollisions(module=node16).js.diff @@ -1,23 +1,16 @@ --- old.nodeModulesGeneratedNameCollisions(module=node16).js +++ new.nodeModulesGeneratedNameCollisions(module=node16).js -@@= skipped -25, +25 lines =@@ - } - - //// [index.js] --"use strict"; --Object.defineProperty(exports, "__esModule", { value: true }); --exports.Object = exports.exports = exports.__esModule = void 0; --exports.require = require; +@@= skipped -29, +29 lines =@@ + Object.defineProperty(exports, "__esModule", { value: true }); + exports.Object = exports.exports = exports.__esModule = void 0; + exports.require = require; -// cjs format file function require() { } const exports = {}; --exports.exports = exports; - class Object { - } --exports.Object = Object; --exports.__esModule = false; -+export const __esModule = false; -+export { require, exports, Object }; + exports.exports = exports; +@@= skipped -9, +8 lines =@@ + exports.Object = Object; + exports.__esModule = false; //// [index.js] -// esm format file function require() { } diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesGeneratedNameCollisions(module=nodenext).js b/testdata/baselines/reference/submodule/conformance/nodeModulesGeneratedNameCollisions(module=nodenext).js index f28f49c0c2..573c448fa3 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesGeneratedNameCollisions(module=nodenext).js +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesGeneratedNameCollisions(module=nodenext).js @@ -26,12 +26,17 @@ export {require, exports, Object}; } //// [index.js] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Object = exports.exports = exports.__esModule = void 0; +exports.require = require; function require() { } const exports = {}; +exports.exports = exports; class Object { } -export const __esModule = false; -export { require, exports, Object }; +exports.Object = Object; +exports.__esModule = false; //// [index.js] function require() { } const exports = {}; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesGeneratedNameCollisions(module=nodenext).js.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesGeneratedNameCollisions(module=nodenext).js.diff index 57350f610b..770d7333b8 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesGeneratedNameCollisions(module=nodenext).js.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesGeneratedNameCollisions(module=nodenext).js.diff @@ -1,23 +1,16 @@ --- old.nodeModulesGeneratedNameCollisions(module=nodenext).js +++ new.nodeModulesGeneratedNameCollisions(module=nodenext).js -@@= skipped -25, +25 lines =@@ - } - - //// [index.js] --"use strict"; --Object.defineProperty(exports, "__esModule", { value: true }); --exports.Object = exports.exports = exports.__esModule = void 0; --exports.require = require; +@@= skipped -29, +29 lines =@@ + Object.defineProperty(exports, "__esModule", { value: true }); + exports.Object = exports.exports = exports.__esModule = void 0; + exports.require = require; -// cjs format file function require() { } const exports = {}; --exports.exports = exports; - class Object { - } --exports.Object = Object; --exports.__esModule = false; -+export const __esModule = false; -+export { require, exports, Object }; + exports.exports = exports; +@@= skipped -9, +8 lines =@@ + exports.Object = Object; + exports.__esModule = false; //// [index.js] -// esm format file function require() { } diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssertions(module=node16).js b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssertions(module=node16).js index db8dd95e05..4cb4915473 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssertions(module=node16).js +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssertions(module=node16).js @@ -15,5 +15,6 @@ const json2 = import("./package.json", { assert: { type: "json" } }); // should //// [index.js] export {}; //// [otherc.cjs] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); const json2 = import("./package.json", { assert: { type: "json" } }); -export {}; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssertions(module=node16).js.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssertions(module=node16).js.diff index eab61f94db..129164d1a4 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssertions(module=node16).js.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssertions(module=node16).js.diff @@ -1,11 +1,8 @@ --- old.nodeModulesImportAssertions(module=node16).js +++ new.nodeModulesImportAssertions(module=node16).js -@@= skipped -14, +14 lines =@@ - //// [index.js] - export {}; +@@= skipped -16, +16 lines =@@ //// [otherc.cjs] --"use strict"; --Object.defineProperty(exports, "__esModule", { value: true }); + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); -const json2 = import("./package.json", { assert: { type: "json" } }); // should be fine +const json2 = import("./package.json", { assert: { type: "json" } }); -+export {}; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssertions(module=nodenext).js b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssertions(module=nodenext).js index db8dd95e05..4cb4915473 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssertions(module=nodenext).js +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssertions(module=nodenext).js @@ -15,5 +15,6 @@ const json2 = import("./package.json", { assert: { type: "json" } }); // should //// [index.js] export {}; //// [otherc.cjs] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); const json2 = import("./package.json", { assert: { type: "json" } }); -export {}; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssertions(module=nodenext).js.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssertions(module=nodenext).js.diff index 0b9424fed9..b70ca68f91 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssertions(module=nodenext).js.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssertions(module=nodenext).js.diff @@ -1,11 +1,8 @@ --- old.nodeModulesImportAssertions(module=nodenext).js +++ new.nodeModulesImportAssertions(module=nodenext).js -@@= skipped -14, +14 lines =@@ - //// [index.js] - export {}; +@@= skipped -16, +16 lines =@@ //// [otherc.cjs] --"use strict"; --Object.defineProperty(exports, "__esModule", { value: true }); + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); -const json2 = import("./package.json", { assert: { type: "json" } }); // should be fine +const json2 = import("./package.json", { assert: { type: "json" } }); -+export {}; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssignments(module=node16).js b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssignments(module=node16).js index 252f03ad4d..ceb9f4c724 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssignments(module=node16).js +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssignments(module=node16).js @@ -31,12 +31,11 @@ export import fs2 = require("fs"); declare module "fs"; //// [index.js] -import { createRequire as _createRequire } from "module"; -const __require = _createRequire(import.meta.url); -const fs = __require("fs"); +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const fs = require("fs"); fs.readFile; -const fs2 = __require("fs"); -export { fs2 }; +exports.fs2 = require("fs"); //// [index.js] import { createRequire as _createRequire } from "module"; const __require = _createRequire(import.meta.url); diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssignments(module=node16).js.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssignments(module=node16).js.diff index 1f96113ea4..a07055039f 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssignments(module=node16).js.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssignments(module=node16).js.diff @@ -1,20 +1,13 @@ --- old.nodeModulesImportAssignments(module=node16).js +++ new.nodeModulesImportAssignments(module=node16).js -@@= skipped -30, +30 lines =@@ - declare module "fs"; - +@@= skipped -32, +32 lines =@@ //// [index.js] --"use strict"; --Object.defineProperty(exports, "__esModule", { value: true }); + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); -// cjs format file --const fs = require("fs"); -+import { createRequire as _createRequire } from "module"; -+const __require = _createRequire(import.meta.url); -+const fs = __require("fs"); + const fs = require("fs"); fs.readFile; --exports.fs2 = require("fs"); -+const fs2 = __require("fs"); -+export { fs2 }; + exports.fs2 = require("fs"); //// [index.js] import { createRequire as _createRequire } from "module"; const __require = _createRequire(import.meta.url); @@ -22,7 +15,7 @@ const fs = __require("fs"); fs.readFile; const fs2 = __require("fs"); -@@= skipped -17, +16 lines =@@ +@@= skipped -15, +13 lines =@@ //// [file.js] import { createRequire as _createRequire_1 } from "module"; const __require_1 = _createRequire_1(import.meta.url); diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssignments(module=nodenext).js b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssignments(module=nodenext).js index 252f03ad4d..ceb9f4c724 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssignments(module=nodenext).js +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssignments(module=nodenext).js @@ -31,12 +31,11 @@ export import fs2 = require("fs"); declare module "fs"; //// [index.js] -import { createRequire as _createRequire } from "module"; -const __require = _createRequire(import.meta.url); -const fs = __require("fs"); +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const fs = require("fs"); fs.readFile; -const fs2 = __require("fs"); -export { fs2 }; +exports.fs2 = require("fs"); //// [index.js] import { createRequire as _createRequire } from "module"; const __require = _createRequire(import.meta.url); diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssignments(module=nodenext).js.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssignments(module=nodenext).js.diff index 7a1f1bde3f..090a55632b 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssignments(module=nodenext).js.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAssignments(module=nodenext).js.diff @@ -1,20 +1,13 @@ --- old.nodeModulesImportAssignments(module=nodenext).js +++ new.nodeModulesImportAssignments(module=nodenext).js -@@= skipped -30, +30 lines =@@ - declare module "fs"; - +@@= skipped -32, +32 lines =@@ //// [index.js] --"use strict"; --Object.defineProperty(exports, "__esModule", { value: true }); + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); -// cjs format file --const fs = require("fs"); -+import { createRequire as _createRequire } from "module"; -+const __require = _createRequire(import.meta.url); -+const fs = __require("fs"); + const fs = require("fs"); fs.readFile; --exports.fs2 = require("fs"); -+const fs2 = __require("fs"); -+export { fs2 }; + exports.fs2 = require("fs"); //// [index.js] import { createRequire as _createRequire } from "module"; const __require = _createRequire(import.meta.url); @@ -22,7 +15,7 @@ const fs = __require("fs"); fs.readFile; const fs2 = __require("fs"); -@@= skipped -17, +16 lines =@@ +@@= skipped -15, +13 lines =@@ //// [file.js] import { createRequire as _createRequire_1 } from "module"; const __require_1 = _createRequire_1(import.meta.url); diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributes(module=node16).js b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributes(module=node16).js index f7a8c7058d..a0d013179d 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributes(module=node16).js +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributes(module=node16).js @@ -16,5 +16,6 @@ const json2 = import("./package.json", { with: { type: "json" } }); // should be //// [index.js] export {}; //// [otherc.cjs] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); const json2 = import("./package.json", { with: { type: "json" } }); -export {}; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributes(module=node16).js.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributes(module=node16).js.diff index b673e58234..45d97aa086 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributes(module=node16).js.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributes(module=node16).js.diff @@ -1,11 +1,8 @@ --- old.nodeModulesImportAttributes(module=node16).js +++ new.nodeModulesImportAttributes(module=node16).js -@@= skipped -15, +15 lines =@@ - //// [index.js] - export {}; +@@= skipped -17, +17 lines =@@ //// [otherc.cjs] --"use strict"; --Object.defineProperty(exports, "__esModule", { value: true }); + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); -const json2 = import("./package.json", { with: { type: "json" } }); // should be fine +const json2 = import("./package.json", { with: { type: "json" } }); -+export {}; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributes(module=nodenext).js b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributes(module=nodenext).js index f7a8c7058d..a0d013179d 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributes(module=nodenext).js +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributes(module=nodenext).js @@ -16,5 +16,6 @@ const json2 = import("./package.json", { with: { type: "json" } }); // should be //// [index.js] export {}; //// [otherc.cjs] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); const json2 = import("./package.json", { with: { type: "json" } }); -export {}; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributes(module=nodenext).js.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributes(module=nodenext).js.diff index 8035e76427..d779863b19 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributes(module=nodenext).js.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportAttributes(module=nodenext).js.diff @@ -1,11 +1,8 @@ --- old.nodeModulesImportAttributes(module=nodenext).js +++ new.nodeModulesImportAttributes(module=nodenext).js -@@= skipped -15, +15 lines =@@ - //// [index.js] - export {}; +@@= skipped -17, +17 lines =@@ //// [otherc.cjs] --"use strict"; --Object.defineProperty(exports, "__esModule", { value: true }); + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); -const json2 = import("./package.json", { with: { type: "json" } }); // should be fine +const json2 = import("./package.json", { with: { type: "json" } }); -+export {}; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportHelpersCollisions(module=node16).js b/testdata/baselines/reference/submodule/conformance/nodeModulesImportHelpersCollisions(module=node16).js index 830340ead7..27ac2a8ed5 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportHelpersCollisions(module=node16).js +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportHelpersCollisions(module=node16).js @@ -30,9 +30,12 @@ declare module "tslib" { } //// [index.js] -import { default as _fs } from "fs"; -_fs.readFile; -import * as fs from "fs"; +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const tslib_1 = require("tslib"); +const fs_1 = tslib_1.__importDefault(require("fs")); +fs_1.default.readFile; +const fs = tslib_1.__importStar(require("fs")); fs.readFile; //// [index.js] import { default as _fs } from "fs"; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportHelpersCollisions(module=node16).js.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesImportHelpersCollisions(module=node16).js.diff index 8ec9a34560..9852c5cd07 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportHelpersCollisions(module=node16).js.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportHelpersCollisions(module=node16).js.diff @@ -1,19 +1,13 @@ --- old.nodeModulesImportHelpersCollisions(module=node16).js +++ new.nodeModulesImportHelpersCollisions(module=node16).js -@@= skipped -29, +29 lines =@@ - } - - //// [index.js] --"use strict"; --Object.defineProperty(exports, "__esModule", { value: true }); --const tslib_1 = require("tslib"); +@@= skipped -32, +32 lines =@@ + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + const tslib_1 = require("tslib"); -// cjs format file --const fs_1 = tslib_1.__importDefault(require("fs")); --fs_1.default.readFile; --const fs = tslib_1.__importStar(require("fs")); -+import { default as _fs } from "fs"; -+_fs.readFile; -+import * as fs from "fs"; + const fs_1 = tslib_1.__importDefault(require("fs")); + fs_1.default.readFile; + const fs = tslib_1.__importStar(require("fs")); fs.readFile; //// [index.js] -// esm format file diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportHelpersCollisions(module=nodenext).js b/testdata/baselines/reference/submodule/conformance/nodeModulesImportHelpersCollisions(module=nodenext).js index 830340ead7..27ac2a8ed5 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportHelpersCollisions(module=nodenext).js +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportHelpersCollisions(module=nodenext).js @@ -30,9 +30,12 @@ declare module "tslib" { } //// [index.js] -import { default as _fs } from "fs"; -_fs.readFile; -import * as fs from "fs"; +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const tslib_1 = require("tslib"); +const fs_1 = tslib_1.__importDefault(require("fs")); +fs_1.default.readFile; +const fs = tslib_1.__importStar(require("fs")); fs.readFile; //// [index.js] import { default as _fs } from "fs"; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportHelpersCollisions(module=nodenext).js.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesImportHelpersCollisions(module=nodenext).js.diff index 1ad857f3ad..a4b19fcbf2 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportHelpersCollisions(module=nodenext).js.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportHelpersCollisions(module=nodenext).js.diff @@ -1,19 +1,13 @@ --- old.nodeModulesImportHelpersCollisions(module=nodenext).js +++ new.nodeModulesImportHelpersCollisions(module=nodenext).js -@@= skipped -29, +29 lines =@@ - } - - //// [index.js] --"use strict"; --Object.defineProperty(exports, "__esModule", { value: true }); --const tslib_1 = require("tslib"); +@@= skipped -32, +32 lines =@@ + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + const tslib_1 = require("tslib"); -// cjs format file --const fs_1 = tslib_1.__importDefault(require("fs")); --fs_1.default.readFile; --const fs = tslib_1.__importStar(require("fs")); -+import { default as _fs } from "fs"; -+_fs.readFile; -+import * as fs from "fs"; + const fs_1 = tslib_1.__importDefault(require("fs")); + fs_1.default.readFile; + const fs = tslib_1.__importStar(require("fs")); fs.readFile; //// [index.js] -// esm format file diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportHelpersCollisions2(module=node16).js b/testdata/baselines/reference/submodule/conformance/nodeModulesImportHelpersCollisions2(module=node16).js index 101a2366bf..406d02e44f 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportHelpersCollisions2(module=node16).js +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportHelpersCollisions2(module=node16).js @@ -26,8 +26,12 @@ declare module "tslib" { } //// [index.js] -export * from "fs"; -export * as fs from "fs"; +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.fs = void 0; +const tslib_1 = require("tslib"); +tslib_1.__exportStar(require("fs"), exports); +exports.fs = tslib_1.__importStar(require("fs")); //// [index.js] export * from "fs"; export * as fs from "fs"; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportHelpersCollisions2(module=node16).js.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesImportHelpersCollisions2(module=node16).js.diff index 4c546bec8b..1d0c9aab31 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportHelpersCollisions2(module=node16).js.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportHelpersCollisions2(module=node16).js.diff @@ -1,26 +1,21 @@ --- old.nodeModulesImportHelpersCollisions2(module=node16).js +++ new.nodeModulesImportHelpersCollisions2(module=node16).js -@@= skipped -25, +25 lines =@@ - } - - //// [index.js] --"use strict"; --Object.defineProperty(exports, "__esModule", { value: true }); --exports.fs = void 0; --const tslib_1 = require("tslib"); +@@= skipped -29, +29 lines =@@ + Object.defineProperty(exports, "__esModule", { value: true }); + exports.fs = void 0; + const tslib_1 = require("tslib"); -// cjs format file --tslib_1.__exportStar(require("fs"), exports); --exports.fs = tslib_1.__importStar(require("fs")); --//// [index.js] + tslib_1.__exportStar(require("fs"), exports); + exports.fs = tslib_1.__importStar(require("fs")); + //// [index.js] -// esm format file export * from "fs"; export * as fs from "fs"; - - -//// [index.d.ts] -+//// [index.js] - export * from "fs"; - export * as fs from "fs"; +-export * from "fs"; +-export * as fs from "fs"; -//// [index.d.ts] -export * from "fs"; -export * as fs from "fs"; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportHelpersCollisions2(module=nodenext).js b/testdata/baselines/reference/submodule/conformance/nodeModulesImportHelpersCollisions2(module=nodenext).js index 101a2366bf..406d02e44f 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportHelpersCollisions2(module=nodenext).js +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportHelpersCollisions2(module=nodenext).js @@ -26,8 +26,12 @@ declare module "tslib" { } //// [index.js] -export * from "fs"; -export * as fs from "fs"; +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.fs = void 0; +const tslib_1 = require("tslib"); +tslib_1.__exportStar(require("fs"), exports); +exports.fs = tslib_1.__importStar(require("fs")); //// [index.js] export * from "fs"; export * as fs from "fs"; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportHelpersCollisions2(module=nodenext).js.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesImportHelpersCollisions2(module=nodenext).js.diff index 9713788710..36d3807ebf 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportHelpersCollisions2(module=nodenext).js.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportHelpersCollisions2(module=nodenext).js.diff @@ -1,26 +1,21 @@ --- old.nodeModulesImportHelpersCollisions2(module=nodenext).js +++ new.nodeModulesImportHelpersCollisions2(module=nodenext).js -@@= skipped -25, +25 lines =@@ - } - - //// [index.js] --"use strict"; --Object.defineProperty(exports, "__esModule", { value: true }); --exports.fs = void 0; --const tslib_1 = require("tslib"); +@@= skipped -29, +29 lines =@@ + Object.defineProperty(exports, "__esModule", { value: true }); + exports.fs = void 0; + const tslib_1 = require("tslib"); -// cjs format file --tslib_1.__exportStar(require("fs"), exports); --exports.fs = tslib_1.__importStar(require("fs")); --//// [index.js] + tslib_1.__exportStar(require("fs"), exports); + exports.fs = tslib_1.__importStar(require("fs")); + //// [index.js] -// esm format file export * from "fs"; export * as fs from "fs"; - - -//// [index.d.ts] -+//// [index.js] - export * from "fs"; - export * as fs from "fs"; +-export * from "fs"; +-export * as fs from "fs"; -//// [index.d.ts] -export * from "fs"; -export * as fs from "fs"; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportHelpersCollisions3(module=node16).js b/testdata/baselines/reference/submodule/conformance/nodeModulesImportHelpersCollisions3(module=node16).js index 557d0cb24a..7aa10b2c1a 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportHelpersCollisions3(module=node16).js +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportHelpersCollisions3(module=node16).js @@ -24,6 +24,11 @@ declare module "tslib" { } //// [index.js] -export { default } from "fs"; +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = void 0; +const tslib_1 = require("tslib"); +const fs_1 = require("fs"); +Object.defineProperty(exports, "default", { enumerable: true, get: function () { return tslib_1.__importDefault(fs_1).default; } }); //// [index.js] export { default } from "fs"; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportHelpersCollisions3(module=node16).js.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesImportHelpersCollisions3(module=node16).js.diff index e8326e1a97..7809db21ea 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportHelpersCollisions3(module=node16).js.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportHelpersCollisions3(module=node16).js.diff @@ -1,17 +1,15 @@ --- old.nodeModulesImportHelpersCollisions3(module=node16).js +++ new.nodeModulesImportHelpersCollisions3(module=node16).js -@@= skipped -23, +23 lines =@@ - } - - //// [index.js] --"use strict"; --Object.defineProperty(exports, "__esModule", { value: true }); --exports.default = void 0; +@@= skipped -26, +26 lines =@@ + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.default = void 0; -var tslib_1 = require("tslib"); -// cjs format file -var fs_1 = require("fs"); --Object.defineProperty(exports, "default", { enumerable: true, get: function () { return tslib_1.__importDefault(fs_1).default; } }); -+export { default } from "fs"; ++const tslib_1 = require("tslib"); ++const fs_1 = require("fs"); + Object.defineProperty(exports, "default", { enumerable: true, get: function () { return tslib_1.__importDefault(fs_1).default; } }); //// [index.js] -// esm format file export { default } from "fs"; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportHelpersCollisions3(module=nodenext).js b/testdata/baselines/reference/submodule/conformance/nodeModulesImportHelpersCollisions3(module=nodenext).js index 557d0cb24a..7aa10b2c1a 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportHelpersCollisions3(module=nodenext).js +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportHelpersCollisions3(module=nodenext).js @@ -24,6 +24,11 @@ declare module "tslib" { } //// [index.js] -export { default } from "fs"; +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = void 0; +const tslib_1 = require("tslib"); +const fs_1 = require("fs"); +Object.defineProperty(exports, "default", { enumerable: true, get: function () { return tslib_1.__importDefault(fs_1).default; } }); //// [index.js] export { default } from "fs"; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportHelpersCollisions3(module=nodenext).js.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesImportHelpersCollisions3(module=nodenext).js.diff index 9a9abf93d9..8bf1f94eab 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportHelpersCollisions3(module=nodenext).js.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportHelpersCollisions3(module=nodenext).js.diff @@ -1,17 +1,15 @@ --- old.nodeModulesImportHelpersCollisions3(module=nodenext).js +++ new.nodeModulesImportHelpersCollisions3(module=nodenext).js -@@= skipped -23, +23 lines =@@ - } - - //// [index.js] --"use strict"; --Object.defineProperty(exports, "__esModule", { value: true }); --exports.default = void 0; +@@= skipped -26, +26 lines =@@ + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.default = void 0; -var tslib_1 = require("tslib"); -// cjs format file -var fs_1 = require("fs"); --Object.defineProperty(exports, "default", { enumerable: true, get: function () { return tslib_1.__importDefault(fs_1).default; } }); -+export { default } from "fs"; ++const tslib_1 = require("tslib"); ++const fs_1 = require("fs"); + Object.defineProperty(exports, "default", { enumerable: true, get: function () { return tslib_1.__importDefault(fs_1).default; } }); //// [index.js] -// esm format file export { default } from "fs"; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportMeta(module=node16).js b/testdata/baselines/reference/submodule/conformance/nodeModulesImportMeta(module=node16).js index efb24cfd78..9cee009ef4 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportMeta(module=node16).js +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportMeta(module=node16).js @@ -20,8 +20,11 @@ export {x}; } //// [index.js] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.x = void 0; const x = import.meta.url; -export { x }; +exports.x = x; //// [index.js] const x = import.meta.url; export { x }; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportMeta(module=node16).js.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesImportMeta(module=node16).js.diff index 34496b9ab3..857eeb7523 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportMeta(module=node16).js.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportMeta(module=node16).js.diff @@ -1,16 +1,12 @@ --- old.nodeModulesImportMeta(module=node16).js +++ new.nodeModulesImportMeta(module=node16).js -@@= skipped -19, +19 lines =@@ - } - - //// [index.js] --"use strict"; --Object.defineProperty(exports, "__esModule", { value: true }); --exports.x = void 0; +@@= skipped -22, +22 lines =@@ + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.x = void 0; -// cjs format file const x = import.meta.url; --exports.x = x; -+export { x }; + exports.x = x; //// [index.js] -// esm format file const x = import.meta.url; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportMeta(module=nodenext).js b/testdata/baselines/reference/submodule/conformance/nodeModulesImportMeta(module=nodenext).js index efb24cfd78..9cee009ef4 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportMeta(module=nodenext).js +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportMeta(module=nodenext).js @@ -20,8 +20,11 @@ export {x}; } //// [index.js] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.x = void 0; const x = import.meta.url; -export { x }; +exports.x = x; //// [index.js] const x = import.meta.url; export { x }; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportMeta(module=nodenext).js.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesImportMeta(module=nodenext).js.diff index b5968cfd7b..e991e9aeef 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportMeta(module=nodenext).js.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportMeta(module=nodenext).js.diff @@ -1,16 +1,12 @@ --- old.nodeModulesImportMeta(module=nodenext).js +++ new.nodeModulesImportMeta(module=nodenext).js -@@= skipped -19, +19 lines =@@ - } - - //// [index.js] --"use strict"; --Object.defineProperty(exports, "__esModule", { value: true }); --exports.x = void 0; +@@= skipped -22, +22 lines =@@ + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.x = void 0; -// cjs format file const x = import.meta.url; --exports.x = x; -+export { x }; + exports.x = x; //// [index.js] -// esm format file const x = import.meta.url; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportResolutionIntoExport(module=node16).js b/testdata/baselines/reference/submodule/conformance/nodeModulesImportResolutionIntoExport(module=node16).js index 504ad9de41..37c2e5b514 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportResolutionIntoExport(module=node16).js +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportResolutionIntoExport(module=node16).js @@ -24,7 +24,32 @@ type; } //// [index.cjs] -import * as type from "#type"; +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const type = __importStar(require("#type")); type; //// [index.js] import * as type from "#type"; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportResolutionIntoExport(module=node16).js.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesImportResolutionIntoExport(module=node16).js.diff index a6499df541..9bf0519117 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportResolutionIntoExport(module=node16).js.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportResolutionIntoExport(module=node16).js.diff @@ -1,37 +1,11 @@ --- old.nodeModulesImportResolutionIntoExport(module=node16).js +++ new.nodeModulesImportResolutionIntoExport(module=node16).js -@@= skipped -23, +23 lines =@@ - } - - //// [index.cjs] --"use strict"; --var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { -- if (k2 === undefined) k2 = k; -- var desc = Object.getOwnPropertyDescriptor(m, k); -- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { -- desc = { enumerable: true, get: function() { return m[k]; } }; -- } -- Object.defineProperty(o, k2, desc); --}) : (function(o, m, k, k2) { -- if (k2 === undefined) k2 = k; -- o[k2] = m[k]; --})); --var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { -- Object.defineProperty(o, "default", { enumerable: true, value: v }); --}) : function(o, v) { -- o["default"] = v; --}); --var __importStar = (this && this.__importStar) || function (mod) { -- if (mod && mod.__esModule) return mod; -- var result = {}; -- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); -- __setModuleDefault(result, mod); -- return result; --}; --Object.defineProperty(exports, "__esModule", { value: true }); +@@= skipped -48, +48 lines =@@ + return result; + }; + Object.defineProperty(exports, "__esModule", { value: true }); -// esm format file --const type = __importStar(require("#type")); -+import * as type from "#type"; + const type = __importStar(require("#type")); type; //// [index.js] -// esm format file diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportResolutionIntoExport(module=nodenext).js b/testdata/baselines/reference/submodule/conformance/nodeModulesImportResolutionIntoExport(module=nodenext).js index 504ad9de41..37c2e5b514 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportResolutionIntoExport(module=nodenext).js +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportResolutionIntoExport(module=nodenext).js @@ -24,7 +24,32 @@ type; } //// [index.cjs] -import * as type from "#type"; +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const type = __importStar(require("#type")); type; //// [index.js] import * as type from "#type"; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportResolutionIntoExport(module=nodenext).js.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesImportResolutionIntoExport(module=nodenext).js.diff index 34c850d5ad..50ee7e78d3 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportResolutionIntoExport(module=nodenext).js.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportResolutionIntoExport(module=nodenext).js.diff @@ -1,37 +1,11 @@ --- old.nodeModulesImportResolutionIntoExport(module=nodenext).js +++ new.nodeModulesImportResolutionIntoExport(module=nodenext).js -@@= skipped -23, +23 lines =@@ - } - - //// [index.cjs] --"use strict"; --var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { -- if (k2 === undefined) k2 = k; -- var desc = Object.getOwnPropertyDescriptor(m, k); -- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { -- desc = { enumerable: true, get: function() { return m[k]; } }; -- } -- Object.defineProperty(o, k2, desc); --}) : (function(o, m, k, k2) { -- if (k2 === undefined) k2 = k; -- o[k2] = m[k]; --})); --var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { -- Object.defineProperty(o, "default", { enumerable: true, value: v }); --}) : function(o, v) { -- o["default"] = v; --}); --var __importStar = (this && this.__importStar) || function (mod) { -- if (mod && mod.__esModule) return mod; -- var result = {}; -- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); -- __setModuleDefault(result, mod); -- return result; --}; --Object.defineProperty(exports, "__esModule", { value: true }); +@@= skipped -48, +48 lines =@@ + return result; + }; + Object.defineProperty(exports, "__esModule", { value: true }); -// esm format file --const type = __importStar(require("#type")); -+import * as type from "#type"; + const type = __importStar(require("#type")); type; //// [index.js] -// esm format file diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportResolutionNoCycle(module=node16).js b/testdata/baselines/reference/submodule/conformance/nodeModulesImportResolutionNoCycle(module=node16).js index 1e3104e6d8..f6feb16f3b 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportResolutionNoCycle(module=node16).js +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportResolutionNoCycle(module=node16).js @@ -30,5 +30,30 @@ type; import * as type from "#type"; type; //// [index.cjs] -import * as type from "#type"; +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const type = __importStar(require("#type")); type; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportResolutionNoCycle(module=node16).js.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesImportResolutionNoCycle(module=node16).js.diff index 4f5af766f3..be30941ac2 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportResolutionNoCycle(module=node16).js.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportResolutionNoCycle(module=node16).js.diff @@ -12,34 +12,12 @@ import * as type from "#type"; type; //// [index.cjs] --"use strict"; --var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { -- if (k2 === undefined) k2 = k; -- var desc = Object.getOwnPropertyDescriptor(m, k); -- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { -- desc = { enumerable: true, get: function() { return m[k]; } }; -- } -- Object.defineProperty(o, k2, desc); --}) : (function(o, m, k, k2) { -- if (k2 === undefined) k2 = k; -- o[k2] = m[k]; --})); --var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { -- Object.defineProperty(o, "default", { enumerable: true, value: v }); --}) : function(o, v) { -- o["default"] = v; --}); --var __importStar = (this && this.__importStar) || function (mod) { -- if (mod && mod.__esModule) return mod; -- var result = {}; -- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); -- __setModuleDefault(result, mod); -- return result; --}; --Object.defineProperty(exports, "__esModule", { value: true }); +@@= skipped -33, +31 lines =@@ + return result; + }; + Object.defineProperty(exports, "__esModule", { value: true }); -// esm format file --const type = __importStar(require("#type")); -+import * as type from "#type"; + const type = __importStar(require("#type")); type; - - diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportResolutionNoCycle(module=nodenext).js b/testdata/baselines/reference/submodule/conformance/nodeModulesImportResolutionNoCycle(module=nodenext).js index 1e3104e6d8..f6feb16f3b 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportResolutionNoCycle(module=nodenext).js +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportResolutionNoCycle(module=nodenext).js @@ -30,5 +30,30 @@ type; import * as type from "#type"; type; //// [index.cjs] -import * as type from "#type"; +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const type = __importStar(require("#type")); type; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesImportResolutionNoCycle(module=nodenext).js.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesImportResolutionNoCycle(module=nodenext).js.diff index 7124cd7dd7..7338c86663 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesImportResolutionNoCycle(module=nodenext).js.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesImportResolutionNoCycle(module=nodenext).js.diff @@ -12,34 +12,12 @@ import * as type from "#type"; type; //// [index.cjs] --"use strict"; --var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { -- if (k2 === undefined) k2 = k; -- var desc = Object.getOwnPropertyDescriptor(m, k); -- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { -- desc = { enumerable: true, get: function() { return m[k]; } }; -- } -- Object.defineProperty(o, k2, desc); --}) : (function(o, m, k, k2) { -- if (k2 === undefined) k2 = k; -- o[k2] = m[k]; --})); --var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { -- Object.defineProperty(o, "default", { enumerable: true, value: v }); --}) : function(o, v) { -- o["default"] = v; --}); --var __importStar = (this && this.__importStar) || function (mod) { -- if (mod && mod.__esModule) return mod; -- var result = {}; -- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); -- __setModuleDefault(result, mod); -- return result; --}; --Object.defineProperty(exports, "__esModule", { value: true }); +@@= skipped -33, +31 lines =@@ + return result; + }; + Object.defineProperty(exports, "__esModule", { value: true }); -// esm format file --const type = __importStar(require("#type")); -+import * as type from "#type"; + const type = __importStar(require("#type")); type; - - diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesPackageExports(module=node16).js b/testdata/baselines/reference/submodule/conformance/nodeModulesPackageExports(module=node16).js index c0c61a215f..763d2a1011 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesPackageExports(module=node16).js +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesPackageExports(module=node16).js @@ -102,15 +102,40 @@ cjsi; mjsi; typei; //// [index.cjs] -import * as cjs from "package/cjs"; -import * as mjs from "package/mjs"; -import * as type from "package"; +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const cjs = __importStar(require("package/cjs")); +const mjs = __importStar(require("package/mjs")); +const type = __importStar(require("package")); cjs; mjs; type; -import * as cjsi from "inner/cjs"; -import * as mjsi from "inner/mjs"; -import * as typei from "inner"; +const cjsi = __importStar(require("inner/cjs")); +const mjsi = __importStar(require("inner/mjs")); +const typei = __importStar(require("inner")); cjsi; mjsi; typei; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesPackageExports(module=node16).js.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesPackageExports(module=node16).js.diff index 805e4c967d..605f9f619b 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesPackageExports(module=node16).js.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesPackageExports(module=node16).js.diff @@ -8,52 +8,15 @@ import * as cjs from "package/cjs"; import * as mjs from "package/mjs"; import * as type from "package"; -@@= skipped -14, +13 lines =@@ - mjsi; - typei; - //// [index.cjs] --"use strict"; --var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { -- if (k2 === undefined) k2 = k; -- var desc = Object.getOwnPropertyDescriptor(m, k); -- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { -- desc = { enumerable: true, get: function() { return m[k]; } }; -- } -- Object.defineProperty(o, k2, desc); --}) : (function(o, m, k, k2) { -- if (k2 === undefined) k2 = k; -- o[k2] = m[k]; --})); --var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { -- Object.defineProperty(o, "default", { enumerable: true, value: v }); --}) : function(o, v) { -- o["default"] = v; --}); --var __importStar = (this && this.__importStar) || function (mod) { -- if (mod && mod.__esModule) return mod; -- var result = {}; -- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); -- __setModuleDefault(result, mod); -- return result; --}; --Object.defineProperty(exports, "__esModule", { value: true }); +@@= skipped -39, +38 lines =@@ + return result; + }; + Object.defineProperty(exports, "__esModule", { value: true }); -// cjs format file --const cjs = __importStar(require("package/cjs")); --const mjs = __importStar(require("package/mjs")); --const type = __importStar(require("package")); -+import * as cjs from "package/cjs"; -+import * as mjs from "package/mjs"; -+import * as type from "package"; - cjs; - mjs; - type; --const cjsi = __importStar(require("inner/cjs")); --const mjsi = __importStar(require("inner/mjs")); --const typei = __importStar(require("inner")); -+import * as cjsi from "inner/cjs"; -+import * as mjsi from "inner/mjs"; -+import * as typei from "inner"; - cjsi; + const cjs = __importStar(require("package/cjs")); + const mjs = __importStar(require("package/mjs")); + const type = __importStar(require("package")); +@@= skipped -14, +13 lines =@@ mjsi; typei; //// [index.js] @@ -61,7 +24,7 @@ import * as cjs from "package/cjs"; import * as mjs from "package/mjs"; import * as type from "package"; -@@= skipped -52, +25 lines =@@ +@@= skipped -13, +12 lines =@@ cjsi; mjsi; typei; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesPackageExports(module=nodenext).js b/testdata/baselines/reference/submodule/conformance/nodeModulesPackageExports(module=nodenext).js index c0c61a215f..763d2a1011 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesPackageExports(module=nodenext).js +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesPackageExports(module=nodenext).js @@ -102,15 +102,40 @@ cjsi; mjsi; typei; //// [index.cjs] -import * as cjs from "package/cjs"; -import * as mjs from "package/mjs"; -import * as type from "package"; +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const cjs = __importStar(require("package/cjs")); +const mjs = __importStar(require("package/mjs")); +const type = __importStar(require("package")); cjs; mjs; type; -import * as cjsi from "inner/cjs"; -import * as mjsi from "inner/mjs"; -import * as typei from "inner"; +const cjsi = __importStar(require("inner/cjs")); +const mjsi = __importStar(require("inner/mjs")); +const typei = __importStar(require("inner")); cjsi; mjsi; typei; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesPackageExports(module=nodenext).js.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesPackageExports(module=nodenext).js.diff index 5322704263..a655f42fc6 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesPackageExports(module=nodenext).js.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesPackageExports(module=nodenext).js.diff @@ -8,52 +8,15 @@ import * as cjs from "package/cjs"; import * as mjs from "package/mjs"; import * as type from "package"; -@@= skipped -14, +13 lines =@@ - mjsi; - typei; - //// [index.cjs] --"use strict"; --var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { -- if (k2 === undefined) k2 = k; -- var desc = Object.getOwnPropertyDescriptor(m, k); -- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { -- desc = { enumerable: true, get: function() { return m[k]; } }; -- } -- Object.defineProperty(o, k2, desc); --}) : (function(o, m, k, k2) { -- if (k2 === undefined) k2 = k; -- o[k2] = m[k]; --})); --var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { -- Object.defineProperty(o, "default", { enumerable: true, value: v }); --}) : function(o, v) { -- o["default"] = v; --}); --var __importStar = (this && this.__importStar) || function (mod) { -- if (mod && mod.__esModule) return mod; -- var result = {}; -- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); -- __setModuleDefault(result, mod); -- return result; --}; --Object.defineProperty(exports, "__esModule", { value: true }); +@@= skipped -39, +38 lines =@@ + return result; + }; + Object.defineProperty(exports, "__esModule", { value: true }); -// cjs format file --const cjs = __importStar(require("package/cjs")); --const mjs = __importStar(require("package/mjs")); --const type = __importStar(require("package")); -+import * as cjs from "package/cjs"; -+import * as mjs from "package/mjs"; -+import * as type from "package"; - cjs; - mjs; - type; --const cjsi = __importStar(require("inner/cjs")); --const mjsi = __importStar(require("inner/mjs")); --const typei = __importStar(require("inner")); -+import * as cjsi from "inner/cjs"; -+import * as mjsi from "inner/mjs"; -+import * as typei from "inner"; - cjsi; + const cjs = __importStar(require("package/cjs")); + const mjs = __importStar(require("package/mjs")); + const type = __importStar(require("package")); +@@= skipped -14, +13 lines =@@ mjsi; typei; //// [index.js] @@ -61,7 +24,7 @@ import * as cjs from "package/cjs"; import * as mjs from "package/mjs"; import * as type from "package"; -@@= skipped -52, +25 lines =@@ +@@= skipped -13, +12 lines =@@ cjsi; mjsi; typei; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesPackageImports(module=node16).js b/testdata/baselines/reference/submodule/conformance/nodeModulesPackageImports(module=node16).js index b5eeee3504..1f178e2821 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesPackageImports(module=node16).js +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesPackageImports(module=node16).js @@ -45,9 +45,34 @@ cjs; mjs; type; //// [index.cjs] -import * as cjs from "#cjs"; -import * as mjs from "#mjs"; -import * as type from "#type"; +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const cjs = __importStar(require("#cjs")); +const mjs = __importStar(require("#mjs")); +const type = __importStar(require("#type")); cjs; mjs; type; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesPackageImports(module=node16).js.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesPackageImports(module=node16).js.diff index 4d340c26f1..d32c56a733 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesPackageImports(module=node16).js.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesPackageImports(module=node16).js.diff @@ -8,43 +8,15 @@ import * as cjs from "#cjs"; import * as mjs from "#mjs"; import * as type from "#type"; -@@= skipped -8, +7 lines =@@ - mjs; - type; - //// [index.cjs] --"use strict"; --var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { -- if (k2 === undefined) k2 = k; -- var desc = Object.getOwnPropertyDescriptor(m, k); -- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { -- desc = { enumerable: true, get: function() { return m[k]; } }; -- } -- Object.defineProperty(o, k2, desc); --}) : (function(o, m, k, k2) { -- if (k2 === undefined) k2 = k; -- o[k2] = m[k]; --})); --var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { -- Object.defineProperty(o, "default", { enumerable: true, value: v }); --}) : function(o, v) { -- o["default"] = v; --}); --var __importStar = (this && this.__importStar) || function (mod) { -- if (mod && mod.__esModule) return mod; -- var result = {}; -- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); -- __setModuleDefault(result, mod); -- return result; --}; --Object.defineProperty(exports, "__esModule", { value: true }); +@@= skipped -33, +32 lines =@@ + return result; + }; + Object.defineProperty(exports, "__esModule", { value: true }); -// esm format file --const cjs = __importStar(require("#cjs")); --const mjs = __importStar(require("#mjs")); --const type = __importStar(require("#type")); -+import * as cjs from "#cjs"; -+import * as mjs from "#mjs"; -+import * as type from "#type"; - cjs; + const cjs = __importStar(require("#cjs")); + const mjs = __importStar(require("#mjs")); + const type = __importStar(require("#type")); +@@= skipped -8, +7 lines =@@ mjs; type; //// [index.js] diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesPackageImports(module=nodenext).js b/testdata/baselines/reference/submodule/conformance/nodeModulesPackageImports(module=nodenext).js index b5eeee3504..1f178e2821 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesPackageImports(module=nodenext).js +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesPackageImports(module=nodenext).js @@ -45,9 +45,34 @@ cjs; mjs; type; //// [index.cjs] -import * as cjs from "#cjs"; -import * as mjs from "#mjs"; -import * as type from "#type"; +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const cjs = __importStar(require("#cjs")); +const mjs = __importStar(require("#mjs")); +const type = __importStar(require("#type")); cjs; mjs; type; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesPackageImports(module=nodenext).js.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesPackageImports(module=nodenext).js.diff index 94accbb885..500846d45c 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesPackageImports(module=nodenext).js.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesPackageImports(module=nodenext).js.diff @@ -8,43 +8,15 @@ import * as cjs from "#cjs"; import * as mjs from "#mjs"; import * as type from "#type"; -@@= skipped -8, +7 lines =@@ - mjs; - type; - //// [index.cjs] --"use strict"; --var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { -- if (k2 === undefined) k2 = k; -- var desc = Object.getOwnPropertyDescriptor(m, k); -- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { -- desc = { enumerable: true, get: function() { return m[k]; } }; -- } -- Object.defineProperty(o, k2, desc); --}) : (function(o, m, k, k2) { -- if (k2 === undefined) k2 = k; -- o[k2] = m[k]; --})); --var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { -- Object.defineProperty(o, "default", { enumerable: true, value: v }); --}) : function(o, v) { -- o["default"] = v; --}); --var __importStar = (this && this.__importStar) || function (mod) { -- if (mod && mod.__esModule) return mod; -- var result = {}; -- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); -- __setModuleDefault(result, mod); -- return result; --}; --Object.defineProperty(exports, "__esModule", { value: true }); +@@= skipped -33, +32 lines =@@ + return result; + }; + Object.defineProperty(exports, "__esModule", { value: true }); -// esm format file --const cjs = __importStar(require("#cjs")); --const mjs = __importStar(require("#mjs")); --const type = __importStar(require("#type")); -+import * as cjs from "#cjs"; -+import * as mjs from "#mjs"; -+import * as type from "#type"; - cjs; + const cjs = __importStar(require("#cjs")); + const mjs = __importStar(require("#mjs")); + const type = __importStar(require("#type")); +@@= skipped -8, +7 lines =@@ mjs; type; //// [index.js] diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesPackagePatternExports(module=node16).js b/testdata/baselines/reference/submodule/conformance/nodeModulesPackagePatternExports(module=node16).js index 4763838fb6..fbdce36c14 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesPackagePatternExports(module=node16).js +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesPackagePatternExports(module=node16).js @@ -80,9 +80,34 @@ cjsi; mjsi; typei; //// [index.cjs] -import * as cjsi from "inner/cjs/index"; -import * as mjsi from "inner/mjs/index"; -import * as typei from "inner/js/index"; +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const cjsi = __importStar(require("inner/cjs/index")); +const mjsi = __importStar(require("inner/mjs/index")); +const typei = __importStar(require("inner/js/index")); cjsi; mjsi; typei; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesPackagePatternExports(module=node16).js.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesPackagePatternExports(module=node16).js.diff index fc34f37c6a..fe1ba967da 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesPackagePatternExports(module=node16).js.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesPackagePatternExports(module=node16).js.diff @@ -16,42 +16,14 @@ import * as cjsi from "inner/cjs/index"; import * as mjsi from "inner/mjs/index"; import * as typei from "inner/js/index"; -@@= skipped -8, +7 lines =@@ - mjsi; - typei; - //// [index.cjs] --"use strict"; --var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { -- if (k2 === undefined) k2 = k; -- var desc = Object.getOwnPropertyDescriptor(m, k); -- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { -- desc = { enumerable: true, get: function() { return m[k]; } }; -- } -- Object.defineProperty(o, k2, desc); --}) : (function(o, m, k, k2) { -- if (k2 === undefined) k2 = k; -- o[k2] = m[k]; --})); --var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { -- Object.defineProperty(o, "default", { enumerable: true, value: v }); --}) : function(o, v) { -- o["default"] = v; --}); --var __importStar = (this && this.__importStar) || function (mod) { -- if (mod && mod.__esModule) return mod; -- var result = {}; -- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); -- __setModuleDefault(result, mod); -- return result; --}; --Object.defineProperty(exports, "__esModule", { value: true }); +@@= skipped -33, +32 lines =@@ + return result; + }; + Object.defineProperty(exports, "__esModule", { value: true }); -// cjs format file --const cjsi = __importStar(require("inner/cjs/index")); --const mjsi = __importStar(require("inner/mjs/index")); --const typei = __importStar(require("inner/js/index")); -+import * as cjsi from "inner/cjs/index"; -+import * as mjsi from "inner/mjs/index"; -+import * as typei from "inner/js/index"; + const cjsi = __importStar(require("inner/cjs/index")); + const mjsi = __importStar(require("inner/mjs/index")); + const typei = __importStar(require("inner/js/index")); cjsi; mjsi; typei; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesPackagePatternExports(module=nodenext).js b/testdata/baselines/reference/submodule/conformance/nodeModulesPackagePatternExports(module=nodenext).js index 4763838fb6..fbdce36c14 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesPackagePatternExports(module=nodenext).js +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesPackagePatternExports(module=nodenext).js @@ -80,9 +80,34 @@ cjsi; mjsi; typei; //// [index.cjs] -import * as cjsi from "inner/cjs/index"; -import * as mjsi from "inner/mjs/index"; -import * as typei from "inner/js/index"; +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const cjsi = __importStar(require("inner/cjs/index")); +const mjsi = __importStar(require("inner/mjs/index")); +const typei = __importStar(require("inner/js/index")); cjsi; mjsi; typei; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesPackagePatternExports(module=nodenext).js.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesPackagePatternExports(module=nodenext).js.diff index 155f420988..15d66b6ec5 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesPackagePatternExports(module=nodenext).js.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesPackagePatternExports(module=nodenext).js.diff @@ -16,42 +16,14 @@ import * as cjsi from "inner/cjs/index"; import * as mjsi from "inner/mjs/index"; import * as typei from "inner/js/index"; -@@= skipped -8, +7 lines =@@ - mjsi; - typei; - //// [index.cjs] --"use strict"; --var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { -- if (k2 === undefined) k2 = k; -- var desc = Object.getOwnPropertyDescriptor(m, k); -- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { -- desc = { enumerable: true, get: function() { return m[k]; } }; -- } -- Object.defineProperty(o, k2, desc); --}) : (function(o, m, k, k2) { -- if (k2 === undefined) k2 = k; -- o[k2] = m[k]; --})); --var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { -- Object.defineProperty(o, "default", { enumerable: true, value: v }); --}) : function(o, v) { -- o["default"] = v; --}); --var __importStar = (this && this.__importStar) || function (mod) { -- if (mod && mod.__esModule) return mod; -- var result = {}; -- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); -- __setModuleDefault(result, mod); -- return result; --}; --Object.defineProperty(exports, "__esModule", { value: true }); +@@= skipped -33, +32 lines =@@ + return result; + }; + Object.defineProperty(exports, "__esModule", { value: true }); -// cjs format file --const cjsi = __importStar(require("inner/cjs/index")); --const mjsi = __importStar(require("inner/mjs/index")); --const typei = __importStar(require("inner/js/index")); -+import * as cjsi from "inner/cjs/index"; -+import * as mjsi from "inner/mjs/index"; -+import * as typei from "inner/js/index"; + const cjsi = __importStar(require("inner/cjs/index")); + const mjsi = __importStar(require("inner/mjs/index")); + const typei = __importStar(require("inner/js/index")); cjsi; mjsi; typei; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesPackagePatternExportsExclude(module=node16).js b/testdata/baselines/reference/submodule/conformance/nodeModulesPackagePatternExportsExclude(module=node16).js index 68fc80837f..ee54fff65c 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesPackagePatternExportsExclude(module=node16).js +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesPackagePatternExportsExclude(module=node16).js @@ -137,15 +137,40 @@ cjsi2; mjsi2; typei2; //// [index.cjs] -import * as cjsi from "inner/cjs/exclude/index"; -import * as mjsi from "inner/mjs/exclude/index"; -import * as typei from "inner/js/exclude/index"; +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const cjsi = __importStar(require("inner/cjs/exclude/index")); +const mjsi = __importStar(require("inner/mjs/exclude/index")); +const typei = __importStar(require("inner/js/exclude/index")); cjsi; mjsi; typei; -import * as cjsi2 from "inner/cjs/index"; -import * as mjsi2 from "inner/mjs/index"; -import * as typei2 from "inner/js/index"; +const cjsi2 = __importStar(require("inner/cjs/index")); +const mjsi2 = __importStar(require("inner/mjs/index")); +const typei2 = __importStar(require("inner/js/index")); cjsi2; mjsi2; typei2; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesPackagePatternExportsExclude(module=node16).js.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesPackagePatternExportsExclude(module=node16).js.diff index 7179642946..800d29e0ad 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesPackagePatternExportsExclude(module=node16).js.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesPackagePatternExportsExclude(module=node16).js.diff @@ -16,51 +16,15 @@ import * as cjsi from "inner/cjs/exclude/index"; import * as mjsi from "inner/mjs/exclude/index"; import * as typei from "inner/js/exclude/index"; -@@= skipped -14, +13 lines =@@ - mjsi2; - typei2; - //// [index.cjs] --"use strict"; --var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { -- if (k2 === undefined) k2 = k; -- var desc = Object.getOwnPropertyDescriptor(m, k); -- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { -- desc = { enumerable: true, get: function() { return m[k]; } }; -- } -- Object.defineProperty(o, k2, desc); --}) : (function(o, m, k, k2) { -- if (k2 === undefined) k2 = k; -- o[k2] = m[k]; --})); --var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { -- Object.defineProperty(o, "default", { enumerable: true, value: v }); --}) : function(o, v) { -- o["default"] = v; --}); --var __importStar = (this && this.__importStar) || function (mod) { -- if (mod && mod.__esModule) return mod; -- var result = {}; -- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); -- __setModuleDefault(result, mod); -- return result; --}; --Object.defineProperty(exports, "__esModule", { value: true }); +@@= skipped -39, +38 lines =@@ + return result; + }; + Object.defineProperty(exports, "__esModule", { value: true }); -// cjs format file --const cjsi = __importStar(require("inner/cjs/exclude/index")); --const mjsi = __importStar(require("inner/mjs/exclude/index")); --const typei = __importStar(require("inner/js/exclude/index")); -+import * as cjsi from "inner/cjs/exclude/index"; -+import * as mjsi from "inner/mjs/exclude/index"; -+import * as typei from "inner/js/exclude/index"; - cjsi; - mjsi; - typei; --const cjsi2 = __importStar(require("inner/cjs/index")); --const mjsi2 = __importStar(require("inner/mjs/index")); --const typei2 = __importStar(require("inner/js/index")); -+import * as cjsi2 from "inner/cjs/index"; -+import * as mjsi2 from "inner/mjs/index"; -+import * as typei2 from "inner/js/index"; + const cjsi = __importStar(require("inner/cjs/exclude/index")); + const mjsi = __importStar(require("inner/mjs/exclude/index")); + const typei = __importStar(require("inner/js/exclude/index")); +@@= skipped -13, +12 lines =@@ cjsi2; mjsi2; typei2; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesPackagePatternExportsExclude(module=nodenext).js b/testdata/baselines/reference/submodule/conformance/nodeModulesPackagePatternExportsExclude(module=nodenext).js index 68fc80837f..ee54fff65c 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesPackagePatternExportsExclude(module=nodenext).js +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesPackagePatternExportsExclude(module=nodenext).js @@ -137,15 +137,40 @@ cjsi2; mjsi2; typei2; //// [index.cjs] -import * as cjsi from "inner/cjs/exclude/index"; -import * as mjsi from "inner/mjs/exclude/index"; -import * as typei from "inner/js/exclude/index"; +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const cjsi = __importStar(require("inner/cjs/exclude/index")); +const mjsi = __importStar(require("inner/mjs/exclude/index")); +const typei = __importStar(require("inner/js/exclude/index")); cjsi; mjsi; typei; -import * as cjsi2 from "inner/cjs/index"; -import * as mjsi2 from "inner/mjs/index"; -import * as typei2 from "inner/js/index"; +const cjsi2 = __importStar(require("inner/cjs/index")); +const mjsi2 = __importStar(require("inner/mjs/index")); +const typei2 = __importStar(require("inner/js/index")); cjsi2; mjsi2; typei2; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesPackagePatternExportsExclude(module=nodenext).js.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesPackagePatternExportsExclude(module=nodenext).js.diff index 0ab51abc76..56f894c148 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesPackagePatternExportsExclude(module=nodenext).js.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesPackagePatternExportsExclude(module=nodenext).js.diff @@ -16,51 +16,15 @@ import * as cjsi from "inner/cjs/exclude/index"; import * as mjsi from "inner/mjs/exclude/index"; import * as typei from "inner/js/exclude/index"; -@@= skipped -14, +13 lines =@@ - mjsi2; - typei2; - //// [index.cjs] --"use strict"; --var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { -- if (k2 === undefined) k2 = k; -- var desc = Object.getOwnPropertyDescriptor(m, k); -- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { -- desc = { enumerable: true, get: function() { return m[k]; } }; -- } -- Object.defineProperty(o, k2, desc); --}) : (function(o, m, k, k2) { -- if (k2 === undefined) k2 = k; -- o[k2] = m[k]; --})); --var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { -- Object.defineProperty(o, "default", { enumerable: true, value: v }); --}) : function(o, v) { -- o["default"] = v; --}); --var __importStar = (this && this.__importStar) || function (mod) { -- if (mod && mod.__esModule) return mod; -- var result = {}; -- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); -- __setModuleDefault(result, mod); -- return result; --}; --Object.defineProperty(exports, "__esModule", { value: true }); +@@= skipped -39, +38 lines =@@ + return result; + }; + Object.defineProperty(exports, "__esModule", { value: true }); -// cjs format file --const cjsi = __importStar(require("inner/cjs/exclude/index")); --const mjsi = __importStar(require("inner/mjs/exclude/index")); --const typei = __importStar(require("inner/js/exclude/index")); -+import * as cjsi from "inner/cjs/exclude/index"; -+import * as mjsi from "inner/mjs/exclude/index"; -+import * as typei from "inner/js/exclude/index"; - cjsi; - mjsi; - typei; --const cjsi2 = __importStar(require("inner/cjs/index")); --const mjsi2 = __importStar(require("inner/mjs/index")); --const typei2 = __importStar(require("inner/js/index")); -+import * as cjsi2 from "inner/cjs/index"; -+import * as mjsi2 from "inner/mjs/index"; -+import * as typei2 from "inner/js/index"; + const cjsi = __importStar(require("inner/cjs/exclude/index")); + const mjsi = __importStar(require("inner/mjs/exclude/index")); + const typei = __importStar(require("inner/js/exclude/index")); +@@= skipped -13, +12 lines =@@ cjsi2; mjsi2; typei2; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesPackagePatternExportsTrailers(module=node16).js b/testdata/baselines/reference/submodule/conformance/nodeModulesPackagePatternExportsTrailers(module=node16).js index edee95848b..b0fd483ce1 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesPackagePatternExportsTrailers(module=node16).js +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesPackagePatternExportsTrailers(module=node16).js @@ -80,9 +80,34 @@ cjsi; mjsi; typei; //// [index.cjs] -import * as cjsi from "inner/cjs/index.cjs"; -import * as mjsi from "inner/mjs/index.mjs"; -import * as typei from "inner/js/index.js"; +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const cjsi = __importStar(require("inner/cjs/index.cjs")); +const mjsi = __importStar(require("inner/mjs/index.mjs")); +const typei = __importStar(require("inner/js/index.js")); cjsi; mjsi; typei; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesPackagePatternExportsTrailers(module=node16).js.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesPackagePatternExportsTrailers(module=node16).js.diff index dda8eb72b0..adc6fe30ff 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesPackagePatternExportsTrailers(module=node16).js.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesPackagePatternExportsTrailers(module=node16).js.diff @@ -16,42 +16,14 @@ import * as cjsi from "inner/cjs/index.cjs"; import * as mjsi from "inner/mjs/index.mjs"; import * as typei from "inner/js/index.js"; -@@= skipped -8, +7 lines =@@ - mjsi; - typei; - //// [index.cjs] --"use strict"; --var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { -- if (k2 === undefined) k2 = k; -- var desc = Object.getOwnPropertyDescriptor(m, k); -- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { -- desc = { enumerable: true, get: function() { return m[k]; } }; -- } -- Object.defineProperty(o, k2, desc); --}) : (function(o, m, k, k2) { -- if (k2 === undefined) k2 = k; -- o[k2] = m[k]; --})); --var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { -- Object.defineProperty(o, "default", { enumerable: true, value: v }); --}) : function(o, v) { -- o["default"] = v; --}); --var __importStar = (this && this.__importStar) || function (mod) { -- if (mod && mod.__esModule) return mod; -- var result = {}; -- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); -- __setModuleDefault(result, mod); -- return result; --}; --Object.defineProperty(exports, "__esModule", { value: true }); +@@= skipped -33, +32 lines =@@ + return result; + }; + Object.defineProperty(exports, "__esModule", { value: true }); -// cjs format file --const cjsi = __importStar(require("inner/cjs/index.cjs")); --const mjsi = __importStar(require("inner/mjs/index.mjs")); --const typei = __importStar(require("inner/js/index.js")); -+import * as cjsi from "inner/cjs/index.cjs"; -+import * as mjsi from "inner/mjs/index.mjs"; -+import * as typei from "inner/js/index.js"; + const cjsi = __importStar(require("inner/cjs/index.cjs")); + const mjsi = __importStar(require("inner/mjs/index.mjs")); + const typei = __importStar(require("inner/js/index.js")); cjsi; mjsi; typei; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesPackagePatternExportsTrailers(module=nodenext).js b/testdata/baselines/reference/submodule/conformance/nodeModulesPackagePatternExportsTrailers(module=nodenext).js index edee95848b..b0fd483ce1 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesPackagePatternExportsTrailers(module=nodenext).js +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesPackagePatternExportsTrailers(module=nodenext).js @@ -80,9 +80,34 @@ cjsi; mjsi; typei; //// [index.cjs] -import * as cjsi from "inner/cjs/index.cjs"; -import * as mjsi from "inner/mjs/index.mjs"; -import * as typei from "inner/js/index.js"; +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const cjsi = __importStar(require("inner/cjs/index.cjs")); +const mjsi = __importStar(require("inner/mjs/index.mjs")); +const typei = __importStar(require("inner/js/index.js")); cjsi; mjsi; typei; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesPackagePatternExportsTrailers(module=nodenext).js.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesPackagePatternExportsTrailers(module=nodenext).js.diff index bf027cc888..07a3587a0e 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesPackagePatternExportsTrailers(module=nodenext).js.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesPackagePatternExportsTrailers(module=nodenext).js.diff @@ -16,42 +16,14 @@ import * as cjsi from "inner/cjs/index.cjs"; import * as mjsi from "inner/mjs/index.mjs"; import * as typei from "inner/js/index.js"; -@@= skipped -8, +7 lines =@@ - mjsi; - typei; - //// [index.cjs] --"use strict"; --var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { -- if (k2 === undefined) k2 = k; -- var desc = Object.getOwnPropertyDescriptor(m, k); -- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { -- desc = { enumerable: true, get: function() { return m[k]; } }; -- } -- Object.defineProperty(o, k2, desc); --}) : (function(o, m, k, k2) { -- if (k2 === undefined) k2 = k; -- o[k2] = m[k]; --})); --var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { -- Object.defineProperty(o, "default", { enumerable: true, value: v }); --}) : function(o, v) { -- o["default"] = v; --}); --var __importStar = (this && this.__importStar) || function (mod) { -- if (mod && mod.__esModule) return mod; -- var result = {}; -- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); -- __setModuleDefault(result, mod); -- return result; --}; --Object.defineProperty(exports, "__esModule", { value: true }); +@@= skipped -33, +32 lines =@@ + return result; + }; + Object.defineProperty(exports, "__esModule", { value: true }); -// cjs format file --const cjsi = __importStar(require("inner/cjs/index.cjs")); --const mjsi = __importStar(require("inner/mjs/index.mjs")); --const typei = __importStar(require("inner/js/index.js")); -+import * as cjsi from "inner/cjs/index.cjs"; -+import * as mjsi from "inner/mjs/index.mjs"; -+import * as typei from "inner/js/index.js"; + const cjsi = __importStar(require("inner/cjs/index.cjs")); + const mjsi = __importStar(require("inner/mjs/index.mjs")); + const typei = __importStar(require("inner/js/index.js")); cjsi; mjsi; typei; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=node16).js b/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=node16).js index c86a5e4af5..98a38cbbd4 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=node16).js +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=node16).js @@ -33,11 +33,40 @@ import * as ns from "./package.json" with { type: "json" }; export const thing = ns; export const name2 = ns.default.name; //// [index.cjs] -import pkg from "./package.json"; -export const name = pkg.name; -import * as ns from "./package.json"; -export const thing = ns; -export const name2 = ns.default.name; +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.name2 = exports.thing = exports.name = void 0; +const package_json_1 = __importDefault(require("./package.json")); +exports.name = package_json_1.default.name; +const ns = __importStar(require("./package.json")); +exports.thing = ns; +exports.name2 = ns.default.name; //// [index.mjs] import pkg from "./package.json" with { type: "json" }; export const name = pkg.name; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=node16).js.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=node16).js.diff index b224777e77..cb88d8fac2 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=node16).js.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=node16).js.diff @@ -14,52 +14,7 @@ //// [index.js] import pkg from "./package.json" with { type: "json" }; export const name = pkg.name; -@@= skipped -14, +7 lines =@@ - export const thing = ns; - export const name2 = ns.default.name; - //// [index.cjs] --"use strict"; --var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { -- if (k2 === undefined) k2 = k; -- var desc = Object.getOwnPropertyDescriptor(m, k); -- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { -- desc = { enumerable: true, get: function() { return m[k]; } }; -- } -- Object.defineProperty(o, k2, desc); --}) : (function(o, m, k, k2) { -- if (k2 === undefined) k2 = k; -- o[k2] = m[k]; --})); --var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { -- Object.defineProperty(o, "default", { enumerable: true, value: v }); --}) : function(o, v) { -- o["default"] = v; --}); --var __importStar = (this && this.__importStar) || function (mod) { -- if (mod && mod.__esModule) return mod; -- var result = {}; -- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); -- __setModuleDefault(result, mod); -- return result; --}; --var __importDefault = (this && this.__importDefault) || function (mod) { -- return (mod && mod.__esModule) ? mod : { "default": mod }; --}; --Object.defineProperty(exports, "__esModule", { value: true }); --exports.name2 = exports.thing = exports.name = void 0; --const package_json_1 = __importDefault(require("./package.json")); --exports.name = package_json_1.default.name; --const ns = __importStar(require("./package.json")); --exports.thing = ns; --exports.name2 = ns.default.name; -+import pkg from "./package.json"; -+export const name = pkg.name; -+import * as ns from "./package.json"; -+export const thing = ns; -+export const name2 = ns.default.name; - //// [index.mjs] - import pkg from "./package.json" with { type: "json" }; - export const name = pkg.name; +@@= skipped -54, +47 lines =@@ import * as ns from "./package.json" with { type: "json" }; export const thing = ns; export const name2 = ns.default.name; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=nodenext).js b/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=nodenext).js index c86a5e4af5..98a38cbbd4 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=nodenext).js +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=nodenext).js @@ -33,11 +33,40 @@ import * as ns from "./package.json" with { type: "json" }; export const thing = ns; export const name2 = ns.default.name; //// [index.cjs] -import pkg from "./package.json"; -export const name = pkg.name; -import * as ns from "./package.json"; -export const thing = ns; -export const name2 = ns.default.name; +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.name2 = exports.thing = exports.name = void 0; +const package_json_1 = __importDefault(require("./package.json")); +exports.name = package_json_1.default.name; +const ns = __importStar(require("./package.json")); +exports.thing = ns; +exports.name2 = ns.default.name; //// [index.mjs] import pkg from "./package.json" with { type: "json" }; export const name = pkg.name; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=nodenext).js.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=nodenext).js.diff index 5aeec5c284..93ee7d63e3 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=nodenext).js.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesResolveJsonModule(module=nodenext).js.diff @@ -14,52 +14,7 @@ //// [index.js] import pkg from "./package.json" with { type: "json" }; export const name = pkg.name; -@@= skipped -14, +7 lines =@@ - export const thing = ns; - export const name2 = ns.default.name; - //// [index.cjs] --"use strict"; --var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { -- if (k2 === undefined) k2 = k; -- var desc = Object.getOwnPropertyDescriptor(m, k); -- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { -- desc = { enumerable: true, get: function() { return m[k]; } }; -- } -- Object.defineProperty(o, k2, desc); --}) : (function(o, m, k, k2) { -- if (k2 === undefined) k2 = k; -- o[k2] = m[k]; --})); --var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { -- Object.defineProperty(o, "default", { enumerable: true, value: v }); --}) : function(o, v) { -- o["default"] = v; --}); --var __importStar = (this && this.__importStar) || function (mod) { -- if (mod && mod.__esModule) return mod; -- var result = {}; -- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); -- __setModuleDefault(result, mod); -- return result; --}; --var __importDefault = (this && this.__importDefault) || function (mod) { -- return (mod && mod.__esModule) ? mod : { "default": mod }; --}; --Object.defineProperty(exports, "__esModule", { value: true }); --exports.name2 = exports.thing = exports.name = void 0; --const package_json_1 = __importDefault(require("./package.json")); --exports.name = package_json_1.default.name; --const ns = __importStar(require("./package.json")); --exports.thing = ns; --exports.name2 = ns.default.name; -+import pkg from "./package.json"; -+export const name = pkg.name; -+import * as ns from "./package.json"; -+export const thing = ns; -+export const name2 = ns.default.name; - //// [index.mjs] - import pkg from "./package.json" with { type: "json" }; - export const name = pkg.name; +@@= skipped -54, +47 lines =@@ import * as ns from "./package.json" with { type: "json" }; export const thing = ns; export const name2 = ns.default.name; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesSynchronousCallErrors(module=node16).js b/testdata/baselines/reference/submodule/conformance/nodeModulesSynchronousCallErrors(module=node16).js index 64355c9c1b..5317be43b0 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesSynchronousCallErrors(module=node16).js +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesSynchronousCallErrors(module=node16).js @@ -41,9 +41,12 @@ export async function h() { f(); } //// [index.js] -import { h } from "../index.js"; -export async function f() { +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.f = f; +const index_js_1 = require("../index.js"); +async function f() { const mod3 = await import("../index.js"); const mod4 = await import("./index.js"); - h(); + (0, index_js_1.h)(); } diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesSynchronousCallErrors(module=node16).js.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesSynchronousCallErrors(module=node16).js.diff index 3cd71c36a2..6459eef9e5 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesSynchronousCallErrors(module=node16).js.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesSynchronousCallErrors(module=node16).js.diff @@ -1,21 +1,15 @@ --- old.nodeModulesSynchronousCallErrors(module=node16).js +++ new.nodeModulesSynchronousCallErrors(module=node16).js -@@= skipped -40, +40 lines =@@ - f(); - } - //// [index.js] --"use strict"; --Object.defineProperty(exports, "__esModule", { value: true }); --exports.f = f; +@@= skipped -43, +43 lines =@@ + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.f = f; -// cjs format file --const index_js_1 = require("../index.js"); --async function f() { -+import { h } from "../index.js"; -+export async function f() { + const index_js_1 = require("../index.js"); + async function f() { const mod3 = await import("../index.js"); const mod4 = await import("./index.js"); -- (0, index_js_1.h)(); -+ h(); + (0, index_js_1.h)(); } - - diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesSynchronousCallErrors(module=nodenext).js b/testdata/baselines/reference/submodule/conformance/nodeModulesSynchronousCallErrors(module=nodenext).js index 64355c9c1b..5317be43b0 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesSynchronousCallErrors(module=nodenext).js +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesSynchronousCallErrors(module=nodenext).js @@ -41,9 +41,12 @@ export async function h() { f(); } //// [index.js] -import { h } from "../index.js"; -export async function f() { +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.f = f; +const index_js_1 = require("../index.js"); +async function f() { const mod3 = await import("../index.js"); const mod4 = await import("./index.js"); - h(); + (0, index_js_1.h)(); } diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesSynchronousCallErrors(module=nodenext).js.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesSynchronousCallErrors(module=nodenext).js.diff index 8915320b10..673dc1b540 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesSynchronousCallErrors(module=nodenext).js.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesSynchronousCallErrors(module=nodenext).js.diff @@ -1,21 +1,15 @@ --- old.nodeModulesSynchronousCallErrors(module=nodenext).js +++ new.nodeModulesSynchronousCallErrors(module=nodenext).js -@@= skipped -40, +40 lines =@@ - f(); - } - //// [index.js] --"use strict"; --Object.defineProperty(exports, "__esModule", { value: true }); --exports.f = f; +@@= skipped -43, +43 lines =@@ + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.f = f; -// cjs format file --const index_js_1 = require("../index.js"); --async function f() { -+import { h } from "../index.js"; -+export async function f() { + const index_js_1 = require("../index.js"); + async function f() { const mod3 = await import("../index.js"); const mod4 = await import("./index.js"); -- (0, index_js_1.h)(); -+ h(); + (0, index_js_1.h)(); } - - diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesTopLevelAwait(module=node16).js b/testdata/baselines/reference/submodule/conformance/nodeModulesTopLevelAwait(module=node16).js index ecfd218fcc..d8e570970e 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesTopLevelAwait(module=node16).js +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesTopLevelAwait(module=node16).js @@ -22,8 +22,11 @@ for await (const y of []) {} } //// [index.js] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.x = void 0; const x = await 1; -export { x }; +exports.x = x; for await (const y of []) { } //// [index.js] const x = await 1; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesTopLevelAwait(module=node16).js.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesTopLevelAwait(module=node16).js.diff index 095cef46ee..df8b61a6c2 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesTopLevelAwait(module=node16).js.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesTopLevelAwait(module=node16).js.diff @@ -1,16 +1,12 @@ --- old.nodeModulesTopLevelAwait(module=node16).js +++ new.nodeModulesTopLevelAwait(module=node16).js -@@= skipped -21, +21 lines =@@ - } - - //// [index.js] --"use strict"; --Object.defineProperty(exports, "__esModule", { value: true }); --exports.x = void 0; +@@= skipped -24, +24 lines =@@ + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.x = void 0; -// cjs format file const x = await 1; --exports.x = x; -+export { x }; + exports.x = x; for await (const y of []) { } //// [index.js] -// esm format file diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesTopLevelAwait(module=nodenext).js b/testdata/baselines/reference/submodule/conformance/nodeModulesTopLevelAwait(module=nodenext).js index ecfd218fcc..d8e570970e 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesTopLevelAwait(module=nodenext).js +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesTopLevelAwait(module=nodenext).js @@ -22,8 +22,11 @@ for await (const y of []) {} } //// [index.js] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.x = void 0; const x = await 1; -export { x }; +exports.x = x; for await (const y of []) { } //// [index.js] const x = await 1; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesTopLevelAwait(module=nodenext).js.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesTopLevelAwait(module=nodenext).js.diff index 207634806e..439a8181b0 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesTopLevelAwait(module=nodenext).js.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesTopLevelAwait(module=nodenext).js.diff @@ -1,16 +1,12 @@ --- old.nodeModulesTopLevelAwait(module=nodenext).js +++ new.nodeModulesTopLevelAwait(module=nodenext).js -@@= skipped -21, +21 lines =@@ - } - - //// [index.js] --"use strict"; --Object.defineProperty(exports, "__esModule", { value: true }); --exports.x = void 0; +@@= skipped -24, +24 lines =@@ + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.x = void 0; -// cjs format file const x = await 1; --exports.x = x; -+export { x }; + exports.x = x; for await (const y of []) { } //// [index.js] -// esm format file diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=node16).js b/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=node16).js index b7d6264f9b..453dacfcd3 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=node16).js +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=node16).js @@ -51,7 +51,9 @@ export default [obj1, obj2.default] as const; //// [uses.js] export default getInterI(); //// [uses.js] -export default getInterR(); +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = getInterR(); //// [index.js] import obj1 from "./sub1/uses.js"; import obj2 from "./sub2/uses.js"; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=node16).js.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=node16).js.diff index 4edabd6116..fc2efdfd28 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=node16).js.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=node16).js.diff @@ -7,11 +7,10 @@ -/// export default getInterI(); //// [uses.js] --"use strict"; --Object.defineProperty(exports, "__esModule", { value: true }); + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); -/// --exports.default = getInterR(); -+export default getInterR(); + exports.default = getInterR(); //// [index.js] -// only an esm file can `import` both kinds of files import obj1 from "./sub1/uses.js"; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=nodenext).js b/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=nodenext).js index b7d6264f9b..453dacfcd3 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=nodenext).js +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=nodenext).js @@ -51,7 +51,9 @@ export default [obj1, obj2.default] as const; //// [uses.js] export default getInterI(); //// [uses.js] -export default getInterR(); +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = getInterR(); //// [index.js] import obj1 from "./sub1/uses.js"; import obj2 from "./sub2/uses.js"; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=nodenext).js.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=nodenext).js.diff index ad2d39d6b3..965e24fc05 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=nodenext).js.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesTripleSlashReferenceModeDeclarationEmit7(module=nodenext).js.diff @@ -7,11 +7,10 @@ -/// export default getInterI(); //// [uses.js] --"use strict"; --Object.defineProperty(exports, "__esModule", { value: true }); + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); -/// --exports.default = getInterR(); -+export default getInterR(); + exports.default = getInterR(); //// [index.js] -// only an esm file can `import` both kinds of files import obj1 from "./sub1/uses.js"; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesTypesVersionPackageExports(module=node16).js b/testdata/baselines/reference/submodule/conformance/nodeModulesTypesVersionPackageExports(module=node16).js index 08b5bf2000..bbb6f9a037 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesTypesVersionPackageExports(module=node16).js +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesTypesVersionPackageExports(module=node16).js @@ -58,5 +58,30 @@ mod.correctVersionApplied; import * as mod from "inner"; mod.correctVersionApplied; //// [index.cjs] -import * as mod from "inner"; +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const mod = __importStar(require("inner")); mod.correctVersionApplied; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesTypesVersionPackageExports(module=node16).js.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesTypesVersionPackageExports(module=node16).js.diff index 75f0d5a035..63266ef879 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesTypesVersionPackageExports(module=node16).js.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesTypesVersionPackageExports(module=node16).js.diff @@ -12,34 +12,12 @@ import * as mod from "inner"; mod.correctVersionApplied; //// [index.cjs] --"use strict"; --var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { -- if (k2 === undefined) k2 = k; -- var desc = Object.getOwnPropertyDescriptor(m, k); -- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { -- desc = { enumerable: true, get: function() { return m[k]; } }; -- } -- Object.defineProperty(o, k2, desc); --}) : (function(o, m, k, k2) { -- if (k2 === undefined) k2 = k; -- o[k2] = m[k]; --})); --var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { -- Object.defineProperty(o, "default", { enumerable: true, value: v }); --}) : function(o, v) { -- o["default"] = v; --}); --var __importStar = (this && this.__importStar) || function (mod) { -- if (mod && mod.__esModule) return mod; -- var result = {}; -- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); -- __setModuleDefault(result, mod); -- return result; --}; --Object.defineProperty(exports, "__esModule", { value: true }); +@@= skipped -33, +31 lines =@@ + return result; + }; + Object.defineProperty(exports, "__esModule", { value: true }); -// cjs format file --const mod = __importStar(require("inner")); -+import * as mod from "inner"; + const mod = __importStar(require("inner")); mod.correctVersionApplied; - - diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesTypesVersionPackageExports(module=nodenext).js b/testdata/baselines/reference/submodule/conformance/nodeModulesTypesVersionPackageExports(module=nodenext).js index 08b5bf2000..bbb6f9a037 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesTypesVersionPackageExports(module=nodenext).js +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesTypesVersionPackageExports(module=nodenext).js @@ -58,5 +58,30 @@ mod.correctVersionApplied; import * as mod from "inner"; mod.correctVersionApplied; //// [index.cjs] -import * as mod from "inner"; +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const mod = __importStar(require("inner")); mod.correctVersionApplied; diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesTypesVersionPackageExports(module=nodenext).js.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesTypesVersionPackageExports(module=nodenext).js.diff index 2d65604f22..f757529be4 100644 --- a/testdata/baselines/reference/submodule/conformance/nodeModulesTypesVersionPackageExports(module=nodenext).js.diff +++ b/testdata/baselines/reference/submodule/conformance/nodeModulesTypesVersionPackageExports(module=nodenext).js.diff @@ -12,34 +12,12 @@ import * as mod from "inner"; mod.correctVersionApplied; //// [index.cjs] --"use strict"; --var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { -- if (k2 === undefined) k2 = k; -- var desc = Object.getOwnPropertyDescriptor(m, k); -- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { -- desc = { enumerable: true, get: function() { return m[k]; } }; -- } -- Object.defineProperty(o, k2, desc); --}) : (function(o, m, k, k2) { -- if (k2 === undefined) k2 = k; -- o[k2] = m[k]; --})); --var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { -- Object.defineProperty(o, "default", { enumerable: true, value: v }); --}) : function(o, v) { -- o["default"] = v; --}); --var __importStar = (this && this.__importStar) || function (mod) { -- if (mod && mod.__esModule) return mod; -- var result = {}; -- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); -- __setModuleDefault(result, mod); -- return result; --}; --Object.defineProperty(exports, "__esModule", { value: true }); +@@= skipped -33, +31 lines =@@ + return result; + }; + Object.defineProperty(exports, "__esModule", { value: true }); -// cjs format file --const mod = __importStar(require("inner")); -+import * as mod from "inner"; + const mod = __importStar(require("inner")); mod.correctVersionApplied; - - diff --git a/testdata/baselines/reference/submodule/conformance/nodePackageSelfName(module=node16).js b/testdata/baselines/reference/submodule/conformance/nodePackageSelfName(module=node16).js index 504dcf5a28..9c4a1481d6 100644 --- a/testdata/baselines/reference/submodule/conformance/nodePackageSelfName(module=node16).js +++ b/testdata/baselines/reference/submodule/conformance/nodePackageSelfName(module=node16).js @@ -27,5 +27,30 @@ self; import * as self from "package"; self; //// [index.cjs] -import * as self from "package"; +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const self = __importStar(require("package")); self; diff --git a/testdata/baselines/reference/submodule/conformance/nodePackageSelfName(module=node16).js.diff b/testdata/baselines/reference/submodule/conformance/nodePackageSelfName(module=node16).js.diff index d56dc202e5..370f0eb709 100644 --- a/testdata/baselines/reference/submodule/conformance/nodePackageSelfName(module=node16).js.diff +++ b/testdata/baselines/reference/submodule/conformance/nodePackageSelfName(module=node16).js.diff @@ -12,34 +12,12 @@ import * as self from "package"; self; //// [index.cjs] --"use strict"; --var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { -- if (k2 === undefined) k2 = k; -- var desc = Object.getOwnPropertyDescriptor(m, k); -- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { -- desc = { enumerable: true, get: function() { return m[k]; } }; -- } -- Object.defineProperty(o, k2, desc); --}) : (function(o, m, k, k2) { -- if (k2 === undefined) k2 = k; -- o[k2] = m[k]; --})); --var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { -- Object.defineProperty(o, "default", { enumerable: true, value: v }); --}) : function(o, v) { -- o["default"] = v; --}); --var __importStar = (this && this.__importStar) || function (mod) { -- if (mod && mod.__esModule) return mod; -- var result = {}; -- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); -- __setModuleDefault(result, mod); -- return result; --}; --Object.defineProperty(exports, "__esModule", { value: true }); +@@= skipped -33, +31 lines =@@ + return result; + }; + Object.defineProperty(exports, "__esModule", { value: true }); -// esm format file --const self = __importStar(require("package")); -+import * as self from "package"; + const self = __importStar(require("package")); self; - - diff --git a/testdata/baselines/reference/submodule/conformance/nodePackageSelfName(module=nodenext).js b/testdata/baselines/reference/submodule/conformance/nodePackageSelfName(module=nodenext).js index 504dcf5a28..9c4a1481d6 100644 --- a/testdata/baselines/reference/submodule/conformance/nodePackageSelfName(module=nodenext).js +++ b/testdata/baselines/reference/submodule/conformance/nodePackageSelfName(module=nodenext).js @@ -27,5 +27,30 @@ self; import * as self from "package"; self; //// [index.cjs] -import * as self from "package"; +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const self = __importStar(require("package")); self; diff --git a/testdata/baselines/reference/submodule/conformance/nodePackageSelfName(module=nodenext).js.diff b/testdata/baselines/reference/submodule/conformance/nodePackageSelfName(module=nodenext).js.diff index 089874685f..8879380417 100644 --- a/testdata/baselines/reference/submodule/conformance/nodePackageSelfName(module=nodenext).js.diff +++ b/testdata/baselines/reference/submodule/conformance/nodePackageSelfName(module=nodenext).js.diff @@ -12,34 +12,12 @@ import * as self from "package"; self; //// [index.cjs] --"use strict"; --var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { -- if (k2 === undefined) k2 = k; -- var desc = Object.getOwnPropertyDescriptor(m, k); -- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { -- desc = { enumerable: true, get: function() { return m[k]; } }; -- } -- Object.defineProperty(o, k2, desc); --}) : (function(o, m, k, k2) { -- if (k2 === undefined) k2 = k; -- o[k2] = m[k]; --})); --var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { -- Object.defineProperty(o, "default", { enumerable: true, value: v }); --}) : function(o, v) { -- o["default"] = v; --}); --var __importStar = (this && this.__importStar) || function (mod) { -- if (mod && mod.__esModule) return mod; -- var result = {}; -- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); -- __setModuleDefault(result, mod); -- return result; --}; --Object.defineProperty(exports, "__esModule", { value: true }); +@@= skipped -33, +31 lines =@@ + return result; + }; + Object.defineProperty(exports, "__esModule", { value: true }); -// esm format file --const self = __importStar(require("package")); -+import * as self from "package"; + const self = __importStar(require("package")); self; - - diff --git a/testdata/baselines/reference/submodule/conformance/nodePackageSelfNameScoped(module=node16).js b/testdata/baselines/reference/submodule/conformance/nodePackageSelfNameScoped(module=node16).js index ea0a2e317a..0dd2361a95 100644 --- a/testdata/baselines/reference/submodule/conformance/nodePackageSelfNameScoped(module=node16).js +++ b/testdata/baselines/reference/submodule/conformance/nodePackageSelfNameScoped(module=node16).js @@ -27,5 +27,30 @@ self; import * as self from "@scope/package"; self; //// [index.cjs] -import * as self from "@scope/package"; +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const self = __importStar(require("@scope/package")); self; diff --git a/testdata/baselines/reference/submodule/conformance/nodePackageSelfNameScoped(module=node16).js.diff b/testdata/baselines/reference/submodule/conformance/nodePackageSelfNameScoped(module=node16).js.diff index ccec643111..8ec6d8d301 100644 --- a/testdata/baselines/reference/submodule/conformance/nodePackageSelfNameScoped(module=node16).js.diff +++ b/testdata/baselines/reference/submodule/conformance/nodePackageSelfNameScoped(module=node16).js.diff @@ -12,34 +12,12 @@ import * as self from "@scope/package"; self; //// [index.cjs] --"use strict"; --var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { -- if (k2 === undefined) k2 = k; -- var desc = Object.getOwnPropertyDescriptor(m, k); -- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { -- desc = { enumerable: true, get: function() { return m[k]; } }; -- } -- Object.defineProperty(o, k2, desc); --}) : (function(o, m, k, k2) { -- if (k2 === undefined) k2 = k; -- o[k2] = m[k]; --})); --var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { -- Object.defineProperty(o, "default", { enumerable: true, value: v }); --}) : function(o, v) { -- o["default"] = v; --}); --var __importStar = (this && this.__importStar) || function (mod) { -- if (mod && mod.__esModule) return mod; -- var result = {}; -- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); -- __setModuleDefault(result, mod); -- return result; --}; --Object.defineProperty(exports, "__esModule", { value: true }); +@@= skipped -33, +31 lines =@@ + return result; + }; + Object.defineProperty(exports, "__esModule", { value: true }); -// cjs format file --const self = __importStar(require("@scope/package")); -+import * as self from "@scope/package"; + const self = __importStar(require("@scope/package")); self; - - diff --git a/testdata/baselines/reference/submodule/conformance/nodePackageSelfNameScoped(module=nodenext).js b/testdata/baselines/reference/submodule/conformance/nodePackageSelfNameScoped(module=nodenext).js index ea0a2e317a..0dd2361a95 100644 --- a/testdata/baselines/reference/submodule/conformance/nodePackageSelfNameScoped(module=nodenext).js +++ b/testdata/baselines/reference/submodule/conformance/nodePackageSelfNameScoped(module=nodenext).js @@ -27,5 +27,30 @@ self; import * as self from "@scope/package"; self; //// [index.cjs] -import * as self from "@scope/package"; +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const self = __importStar(require("@scope/package")); self; diff --git a/testdata/baselines/reference/submodule/conformance/nodePackageSelfNameScoped(module=nodenext).js.diff b/testdata/baselines/reference/submodule/conformance/nodePackageSelfNameScoped(module=nodenext).js.diff index 8aa1da1367..d4e6c814ba 100644 --- a/testdata/baselines/reference/submodule/conformance/nodePackageSelfNameScoped(module=nodenext).js.diff +++ b/testdata/baselines/reference/submodule/conformance/nodePackageSelfNameScoped(module=nodenext).js.diff @@ -12,34 +12,12 @@ import * as self from "@scope/package"; self; //// [index.cjs] --"use strict"; --var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { -- if (k2 === undefined) k2 = k; -- var desc = Object.getOwnPropertyDescriptor(m, k); -- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { -- desc = { enumerable: true, get: function() { return m[k]; } }; -- } -- Object.defineProperty(o, k2, desc); --}) : (function(o, m, k, k2) { -- if (k2 === undefined) k2 = k; -- o[k2] = m[k]; --})); --var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { -- Object.defineProperty(o, "default", { enumerable: true, value: v }); --}) : function(o, v) { -- o["default"] = v; --}); --var __importStar = (this && this.__importStar) || function (mod) { -- if (mod && mod.__esModule) return mod; -- var result = {}; -- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); -- __setModuleDefault(result, mod); -- return result; --}; --Object.defineProperty(exports, "__esModule", { value: true }); +@@= skipped -33, +31 lines =@@ + return result; + }; + Object.defineProperty(exports, "__esModule", { value: true }); -// cjs format file --const self = __importStar(require("@scope/package")); -+import * as self from "@scope/package"; + const self = __importStar(require("@scope/package")); self; - - diff --git a/testdata/baselines/reference/submodule/conformance/typeOnlyESMImportFromCJS.js b/testdata/baselines/reference/submodule/conformance/typeOnlyESMImportFromCJS.js index 260b115ff6..01b406ded5 100644 --- a/testdata/baselines/reference/submodule/conformance/typeOnlyESMImportFromCJS.js +++ b/testdata/baselines/reference/submodule/conformance/typeOnlyESMImportFromCJS.js @@ -15,4 +15,5 @@ type _3 = typeof import("./module.mts", { with: { "resolution-mode": "require" } //// [module.mjs] export {}; //// [common.cjs] -export {}; +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/testdata/baselines/reference/submodule/conformance/typeOnlyESMImportFromCJS.js.diff b/testdata/baselines/reference/submodule/conformance/typeOnlyESMImportFromCJS.js.diff deleted file mode 100644 index 5def31dea1..0000000000 --- a/testdata/baselines/reference/submodule/conformance/typeOnlyESMImportFromCJS.js.diff +++ /dev/null @@ -1,9 +0,0 @@ ---- old.typeOnlyESMImportFromCJS.js -+++ new.typeOnlyESMImportFromCJS.js -@@= skipped -14, +14 lines =@@ - //// [module.mjs] - export {}; - //// [common.cjs] --"use strict"; --Object.defineProperty(exports, "__esModule", { value: true }); -+export {}; From 08333cfde3d1549a4bdd3538791adc3179dd2948 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=B3=C3=B0i=20Karlsson?= Date: Tue, 18 Mar 2025 22:20:04 +0100 Subject: [PATCH 19/30] Switch back to map --- internal/checker/checker.go | 2 +- internal/checker/grammarchecks.go | 4 +-- internal/compiler/emitHost.go | 6 ++-- internal/compiler/emitter.go | 2 +- internal/compiler/program.go | 8 ++--- internal/printer/emitcontext.go | 35 +++++++++++++-------- internal/transformers/commonjsmodule.go | 2 +- internal/transformers/externalmoduleinfo.go | 4 +-- internal/transformers/impliedmodule.go | 2 +- internal/transformers/importelision_test.go | 4 +-- 10 files changed, 39 insertions(+), 30 deletions(-) diff --git a/internal/checker/checker.go b/internal/checker/checker.go index 00afe1fd2e..fb23a1dde0 100644 --- a/internal/checker/checker.go +++ b/internal/checker/checker.go @@ -514,7 +514,7 @@ type Program interface { GetEmitModuleFormatOfFile(sourceFile *ast.SourceFile) core.ModuleKind GetImpliedNodeFormatForEmit(sourceFile *ast.SourceFile) core.ModuleKind GetResolvedModule(currentSourceFile *ast.SourceFile, moduleReference string) *ast.SourceFile - GetCachedSourceFileMetaData(path string) *ast.SourceFileMetaData + GetCachedSourceFileMetaDatas() map[string]*ast.SourceFileMetaData } type Host interface{} diff --git a/internal/checker/grammarchecks.go b/internal/checker/grammarchecks.go index 8e8e7e8ac9..e35ab18940 100644 --- a/internal/checker/grammarchecks.go +++ b/internal/checker/grammarchecks.go @@ -1217,7 +1217,7 @@ func (c *Checker) checkGrammarForInOrForOfStatement(forInOrOfStatement *ast.ForI } switch c.moduleKind { case core.ModuleKindNode16, core.ModuleKindNodeNext: - sourceFileMetaData := c.program.GetCachedSourceFileMetaData(string(sourceFile.Path())) + sourceFileMetaData := c.program.GetCachedSourceFileMetaDatas()[string(sourceFile.Path())] if sourceFileMetaData != nil && sourceFileMetaData.ImpliedNodeFormat == core.ModuleKindCommonJS { c.diagnostics.Add(createDiagnosticForNode(forInOrOfStatement.AwaitModifier, diagnostics.The_current_file_is_a_CommonJS_module_and_cannot_use_await_at_the_top_level)) break @@ -1720,7 +1720,7 @@ func (c *Checker) checkGrammarAwaitOrAwaitUsing(node *ast.Node) bool { switch c.moduleKind { case core.ModuleKindNode16, core.ModuleKindNodeNext: - sourceFileMetaData := c.program.GetCachedSourceFileMetaData(string(sourceFile.Path())) + sourceFileMetaData := c.program.GetCachedSourceFileMetaDatas()[string(sourceFile.Path())] if sourceFileMetaData != nil && sourceFileMetaData.ImpliedNodeFormat == core.ModuleKindCommonJS { if !spanCalculated { span = scanner.GetRangeOfTokenAtPosition(sourceFile, node.Pos()) diff --git a/internal/compiler/emitHost.go b/internal/compiler/emitHost.go index eadc4af22d..e86c353215 100644 --- a/internal/compiler/emitHost.go +++ b/internal/compiler/emitHost.go @@ -23,7 +23,7 @@ type EmitHost interface { CommonSourceDirectory() string IsEmitBlocked(file string) bool WriteFile(fileName string, text string, writeByteOrderMark bool, relatedSourceFiles []*ast.SourceFile, data *WriteFileData) error - GetCachedSourceFileMetaData(path string) *ast.SourceFileMetaData + GetCachedSourceFileMetaDatas() map[string]*ast.SourceFileMetaData GetEmitResolver(file *ast.SourceFile, skipDiagnostics bool) printer.EmitResolver } @@ -56,6 +56,6 @@ func (host *emitHost) GetEmitResolver(file *ast.SourceFile, skipDiagnostics bool return checker.GetEmitResolver(file, skipDiagnostics) } -func (host *emitHost) GetCachedSourceFileMetaData(path string) *ast.SourceFileMetaData { - return host.program.GetCachedSourceFileMetaData(path) +func (host *emitHost) GetCachedSourceFileMetaDatas() map[string]*ast.SourceFileMetaData { + return host.program.GetCachedSourceFileMetaDatas() } diff --git a/internal/compiler/emitter.go b/internal/compiler/emitter.go index d4a8952208..55ddd5e45c 100644 --- a/internal/compiler/emitter.go +++ b/internal/compiler/emitter.go @@ -105,7 +105,7 @@ func (e *emitter) emitJsFile(sourceFile *ast.SourceFile, jsFilePath string, sour } emitContext := printer.NewEmitContext() - emitContext.SetSourcefileMetaData(e.host.GetCachedSourceFileMetaData(string(sourceFile.Path()))) + emitContext.SetSourcefileMetaDatas(e.host.GetCachedSourceFileMetaDatas()) for _, transformer := range e.getScriptTransformers(emitContext, sourceFile) { sourceFile = transformer.TransformSourceFile(sourceFile) } diff --git a/internal/compiler/program.go b/internal/compiler/program.go index 1381f1dfb3..6919267617 100644 --- a/internal/compiler/program.go +++ b/internal/compiler/program.go @@ -417,8 +417,8 @@ func (p *Program) PrintSourceFileWithTypes() { } } -func (p *Program) GetCachedSourceFileMetaData(path string) *ast.SourceFileMetaData { - return p.sourceFileMetaDatas[path] +func (p *Program) GetCachedSourceFileMetaDatas() map[string]*ast.SourceFileMetaData { + return p.sourceFileMetaDatas } func (p *Program) GetEmitModuleFormatOfFile(sourceFile *ast.SourceFile) core.ModuleKind { @@ -426,11 +426,11 @@ func (p *Program) GetEmitModuleFormatOfFile(sourceFile *ast.SourceFile) core.Mod } func (p *Program) GetEmitModuleFormatOfFileWorker(sourceFile *ast.SourceFile, options *core.CompilerOptions) core.ModuleKind { - return ast.GetEmitModuleFormatOfFileWorker(sourceFile, options, p.GetCachedSourceFileMetaData(sourceFile.FileName())) + return ast.GetEmitModuleFormatOfFileWorker(sourceFile, options, p.GetCachedSourceFileMetaDatas()[string(sourceFile.Path())]) } func (p *Program) GetImpliedNodeFormatForEmit(sourceFile *ast.SourceFile) core.ResolutionMode { - return ast.GetImpliedNodeFormatForEmitWorker(sourceFile.FileName(), p.compilerOptions, p.GetCachedSourceFileMetaData(sourceFile.FileName())) + return ast.GetImpliedNodeFormatForEmitWorker(sourceFile.FileName(), p.compilerOptions, p.GetCachedSourceFileMetaDatas()[string(sourceFile.Path())]) } func (p *Program) CommonSourceDirectory() string { diff --git a/internal/printer/emitcontext.go b/internal/printer/emitcontext.go index 03f399530d..d94f5d4ab0 100644 --- a/internal/printer/emitcontext.go +++ b/internal/printer/emitcontext.go @@ -16,15 +16,15 @@ import ( // // NOTE: EmitContext is not guaranteed to be thread-safe. type EmitContext struct { - Factory *ast.NodeFactory // Required. The NodeFactory to use to create new nodes - autoGenerate map[*ast.MemberName]*AutoGenerateInfo - textSource map[*ast.StringLiteralNode]*ast.Node - original map[*ast.Node]*ast.Node - emitNodes core.LinkStore[*ast.Node, emitNode] - varScopeStack core.Stack[*varScope] - letScopeStack core.Stack[*varScope] - emitHelpers collections.OrderedSet[*EmitHelper] - sourcefileMetaData *ast.SourceFileMetaData + Factory *ast.NodeFactory // Required. The NodeFactory to use to create new nodes + autoGenerate map[*ast.MemberName]*AutoGenerateInfo + textSource map[*ast.StringLiteralNode]*ast.Node + original map[*ast.Node]*ast.Node + emitNodes core.LinkStore[*ast.Node, emitNode] + varScopeStack core.Stack[*varScope] + letScopeStack core.Stack[*varScope] + emitHelpers collections.OrderedSet[*EmitHelper] + sourceFileMetaDatas map[string]*ast.SourceFileMetaData isCustomPrologue func(node *ast.Statement) bool isHoistedFunction func(node *ast.Statement) bool @@ -626,8 +626,8 @@ func (c *EmitContext) NewRewriteRelativeImportExtensionsHelper(firstArgument *as ) } -func (c *EmitContext) SetSourcefileMetaData(sourcefileMetaData *ast.SourceFileMetaData) { - c.sourcefileMetaData = sourcefileMetaData +func (c *EmitContext) SetSourcefileMetaDatas(sourceFileMetaDatas map[string]*ast.SourceFileMetaData) { + c.sourceFileMetaDatas = sourceFileMetaDatas } // @@ -955,6 +955,15 @@ func (c *EmitContext) VisitIterationBody(body *ast.Statement, visitor *ast.NodeV return updated } -func (c *EmitContext) GetSourceFileMetaData() *ast.SourceFileMetaData { - return c.sourcefileMetaData +func (c *EmitContext) GetSourceFileMetaData(file *ast.SourceFile) *ast.SourceFileMetaData { + for { + if meta, ok := c.sourceFileMetaDatas[string(file.Path())]; ok { + return meta + } + original := c.Original(file.AsNode()) + if original == nil || !ast.IsSourceFile(original) { + return nil + } + file = original.AsSourceFile() + } } diff --git a/internal/transformers/commonjsmodule.go b/internal/transformers/commonjsmodule.go index 74dffaf303..d264b63334 100644 --- a/internal/transformers/commonjsmodule.go +++ b/internal/transformers/commonjsmodule.go @@ -1680,7 +1680,7 @@ func (tx *CommonJSModuleTransformer) visitCallExpression(node *ast.CallExpressio func (tx *CommonJSModuleTransformer) shouldTransformImportCall() bool { // !!! host.shouldTransformImportCall? - return shouldTransformImportCallWorker(tx.currentSourceFile, tx.compilerOptions, tx.emitContext.GetSourceFileMetaData()) + return shouldTransformImportCallWorker(tx.currentSourceFile, tx.compilerOptions, tx.emitContext.GetSourceFileMetaData(tx.currentSourceFile)) } func (tx *CommonJSModuleTransformer) visitImportCallExpression(node *ast.CallExpression, rewriteOrShim bool) *ast.Node { diff --git a/internal/transformers/externalmoduleinfo.go b/internal/transformers/externalmoduleinfo.go index ccb2fbf310..60eeeace8f 100644 --- a/internal/transformers/externalmoduleinfo.go +++ b/internal/transformers/externalmoduleinfo.go @@ -249,7 +249,7 @@ const externalHelpersModuleNameText = "tslib" func createExternalHelpersImportDeclarationIfNeeded(emitContext *printer.EmitContext, sourceFile *ast.SourceFile, compilerOptions *core.CompilerOptions, hasExportStarsToExportValues bool, hasImportStar bool, hasImportDefault bool) *ast.Node /*ImportDeclaration | ImportEqualsDeclaration*/ { if compilerOptions.ImportHelpers.IsTrue() && ast.IsEffectiveExternalModule(sourceFile, compilerOptions) { moduleKind := compilerOptions.GetEmitModuleKind() - impliedModuleKind := ast.GetImpliedNodeFormatForEmitWorker(sourceFile.FileName(), compilerOptions, emitContext.GetSourceFileMetaData()) + impliedModuleKind := ast.GetImpliedNodeFormatForEmitWorker(sourceFile.FileName(), compilerOptions, emitContext.GetSourceFileMetaData(sourceFile)) helpers := getImportedHelpers(emitContext, sourceFile) if (moduleKind >= core.ModuleKindES2015 && moduleKind <= core.ModuleKindESNext) || impliedModuleKind == core.ModuleKindESNext || @@ -291,7 +291,7 @@ func createExternalHelpersImportDeclarationIfNeeded(emitContext *printer.EmitCon } } else { // When we emit to a non-ES module, generate a synthetic `import tslib = require("tslib")` to be further transformed. - externalHelpersModuleName := getOrCreateExternalHelpersModuleNameIfNeeded(emitContext, sourceFile, compilerOptions, helpers, hasExportStarsToExportValues, hasImportStar || hasImportDefault, emitContext.GetSourceFileMetaData()) + externalHelpersModuleName := getOrCreateExternalHelpersModuleNameIfNeeded(emitContext, sourceFile, compilerOptions, helpers, hasExportStarsToExportValues, hasImportStar || hasImportDefault, emitContext.GetSourceFileMetaData(sourceFile)) if externalHelpersModuleName != nil { externalHelpersImportDeclaration := emitContext.Factory.NewImportEqualsDeclaration( nil, /*modifiers*/ diff --git a/internal/transformers/impliedmodule.go b/internal/transformers/impliedmodule.go index 9953b90f58..4510a3e550 100644 --- a/internal/transformers/impliedmodule.go +++ b/internal/transformers/impliedmodule.go @@ -56,5 +56,5 @@ func (tx *ImpliedModuleTransformer) visitSourceFile(node *ast.SourceFile) *ast.N func (tx *ImpliedModuleTransformer) getEmitModuleFormatOfFile(node *ast.SourceFile) core.ModuleKind { // !!! host.getEmitModuleFormatOfFile? - return ast.GetEmitModuleFormatOfFileWorker(node, tx.compilerOptions, tx.emitContext.GetSourceFileMetaData()) + return ast.GetEmitModuleFormatOfFileWorker(node, tx.compilerOptions, tx.emitContext.GetSourceFileMetaData(node)) } diff --git a/internal/transformers/importelision_test.go b/internal/transformers/importelision_test.go index 30f41a66ba..a3650a6c02 100644 --- a/internal/transformers/importelision_test.go +++ b/internal/transformers/importelision_test.go @@ -53,8 +53,8 @@ func (p *fakeProgram) GetResolvedModule(currentSourceFile *ast.SourceFile, modul return p.getResolvedModule(currentSourceFile, moduleReference) } -func (p *fakeProgram) GetCachedSourceFileMetaData(path string) *ast.SourceFileMetaData { - return &ast.SourceFileMetaData{} +func (p *fakeProgram) GetCachedSourceFileMetaDatas() map[string]*ast.SourceFileMetaData { + return map[string]*ast.SourceFileMetaData{} } func TestImportElision(t *testing.T) { From ba527ba0709b5cb59ed6625de00b633d86d03075 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=B3=C3=B0i=20Karlsson?= Date: Tue, 18 Mar 2025 22:28:40 +0100 Subject: [PATCH 20/30] Use path as map key --- internal/checker/checker.go | 2 +- internal/checker/grammarchecks.go | 4 ++-- internal/compiler/emitHost.go | 5 +++-- internal/compiler/fileloader.go | 14 +++++++------- internal/compiler/host.go | 10 ++++------ internal/compiler/program.go | 10 +++++----- internal/printer/emitcontext.go | 7 ++++--- internal/transformers/importelision_test.go | 5 +++-- 8 files changed, 29 insertions(+), 28 deletions(-) diff --git a/internal/checker/checker.go b/internal/checker/checker.go index fb23a1dde0..bb16cadccf 100644 --- a/internal/checker/checker.go +++ b/internal/checker/checker.go @@ -514,7 +514,7 @@ type Program interface { GetEmitModuleFormatOfFile(sourceFile *ast.SourceFile) core.ModuleKind GetImpliedNodeFormatForEmit(sourceFile *ast.SourceFile) core.ModuleKind GetResolvedModule(currentSourceFile *ast.SourceFile, moduleReference string) *ast.SourceFile - GetCachedSourceFileMetaDatas() map[string]*ast.SourceFileMetaData + GetCachedSourceFileMetaDatas() map[tspath.Path]*ast.SourceFileMetaData } type Host interface{} diff --git a/internal/checker/grammarchecks.go b/internal/checker/grammarchecks.go index e35ab18940..e627cf5dc6 100644 --- a/internal/checker/grammarchecks.go +++ b/internal/checker/grammarchecks.go @@ -1217,7 +1217,7 @@ func (c *Checker) checkGrammarForInOrForOfStatement(forInOrOfStatement *ast.ForI } switch c.moduleKind { case core.ModuleKindNode16, core.ModuleKindNodeNext: - sourceFileMetaData := c.program.GetCachedSourceFileMetaDatas()[string(sourceFile.Path())] + sourceFileMetaData := c.program.GetCachedSourceFileMetaDatas()[sourceFile.Path()] if sourceFileMetaData != nil && sourceFileMetaData.ImpliedNodeFormat == core.ModuleKindCommonJS { c.diagnostics.Add(createDiagnosticForNode(forInOrOfStatement.AwaitModifier, diagnostics.The_current_file_is_a_CommonJS_module_and_cannot_use_await_at_the_top_level)) break @@ -1720,7 +1720,7 @@ func (c *Checker) checkGrammarAwaitOrAwaitUsing(node *ast.Node) bool { switch c.moduleKind { case core.ModuleKindNode16, core.ModuleKindNodeNext: - sourceFileMetaData := c.program.GetCachedSourceFileMetaDatas()[string(sourceFile.Path())] + sourceFileMetaData := c.program.GetCachedSourceFileMetaDatas()[sourceFile.Path()] if sourceFileMetaData != nil && sourceFileMetaData.ImpliedNodeFormat == core.ModuleKindCommonJS { if !spanCalculated { span = scanner.GetRangeOfTokenAtPosition(sourceFile, node.Pos()) diff --git a/internal/compiler/emitHost.go b/internal/compiler/emitHost.go index e86c353215..0df8d6f66c 100644 --- a/internal/compiler/emitHost.go +++ b/internal/compiler/emitHost.go @@ -4,6 +4,7 @@ import ( "github.com/microsoft/typescript-go/internal/ast" "github.com/microsoft/typescript-go/internal/core" "github.com/microsoft/typescript-go/internal/printer" + "github.com/microsoft/typescript-go/internal/tspath" ) type WriteFileData struct { @@ -23,7 +24,7 @@ type EmitHost interface { CommonSourceDirectory() string IsEmitBlocked(file string) bool WriteFile(fileName string, text string, writeByteOrderMark bool, relatedSourceFiles []*ast.SourceFile, data *WriteFileData) error - GetCachedSourceFileMetaDatas() map[string]*ast.SourceFileMetaData + GetCachedSourceFileMetaDatas() map[tspath.Path]*ast.SourceFileMetaData GetEmitResolver(file *ast.SourceFile, skipDiagnostics bool) printer.EmitResolver } @@ -56,6 +57,6 @@ func (host *emitHost) GetEmitResolver(file *ast.SourceFile, skipDiagnostics bool return checker.GetEmitResolver(file, skipDiagnostics) } -func (host *emitHost) GetCachedSourceFileMetaDatas() map[string]*ast.SourceFileMetaData { +func (host *emitHost) GetCachedSourceFileMetaDatas() map[tspath.Path]*ast.SourceFileMetaData { return host.program.GetCachedSourceFileMetaDatas() } diff --git a/internal/compiler/fileloader.go b/internal/compiler/fileloader.go index 6210715277..fa89613430 100644 --- a/internal/compiler/fileloader.go +++ b/internal/compiler/fileloader.go @@ -24,7 +24,7 @@ type fileLoader struct { resolvedModules map[tspath.Path]module.ModeAwareCache[*module.ResolvedModule] sourceFileMetaDatasMutex sync.Mutex - sourceFileMetaDatas map[string]*ast.SourceFileMetaData + sourceFileMetaDatas map[tspath.Path]*ast.SourceFileMetaData mu sync.Mutex wg core.WorkGroup @@ -43,7 +43,7 @@ func processAllProgramFiles( resolver *module.Resolver, rootFiles []string, libs []string, -) (files []*ast.SourceFile, resolvedModules map[tspath.Path]module.ModeAwareCache[*module.ResolvedModule], sourceFileMetaDatas map[string]*ast.SourceFileMetaData) { +) (files []*ast.SourceFile, resolvedModules map[tspath.Path]module.ModeAwareCache[*module.ResolvedModule], sourceFileMetaDatas map[tspath.Path]*ast.SourceFileMetaData) { supportedExtensions := tsoptions.GetSupportedExtensions(compilerOptions, nil /*extraFileExtensions*/) loader := fileLoader{ host: host, @@ -224,7 +224,7 @@ func (t *parseTask) start(loader *fileLoader) { }) } -func (p *fileLoader) CacheSourceFileMetaData(path string) { +func (p *fileLoader) CacheSourceFileMetaData(path tspath.Path) { p.sourceFileMetaDatasMutex.Lock() defer p.sourceFileMetaDatasMutex.Unlock() if _, ok := p.sourceFileMetaDatas[path]; ok { @@ -232,11 +232,11 @@ func (p *fileLoader) CacheSourceFileMetaData(path string) { } if p.sourceFileMetaDatas == nil { - p.sourceFileMetaDatas = make(map[string]*ast.SourceFileMetaData) + p.sourceFileMetaDatas = make(map[tspath.Path]*ast.SourceFileMetaData) } - packageJsonType := p.resolver.GetPackageJsonTypeIfApplicable(path) - impliedNodeFormat := ast.GetImpliedNodeFormatForFile(path, packageJsonType) + packageJsonType := p.resolver.GetPackageJsonTypeIfApplicable(string(path)) + impliedNodeFormat := ast.GetImpliedNodeFormatForFile(string(path), packageJsonType) metadata := &ast.SourceFileMetaData{ PackageJsonType: packageJsonType, ImpliedNodeFormat: impliedNodeFormat, @@ -248,7 +248,7 @@ func (p *fileLoader) CacheSourceFileMetaData(path string) { func (p *fileLoader) parseSourceFile(fileName string) *ast.SourceFile { path := tspath.ToPath(fileName, p.host.GetCurrentDirectory(), p.host.FS().UseCaseSensitiveFileNames()) sourceFile := p.host.GetSourceFile(fileName, path, p.compilerOptions.GetEmitScriptTarget()) - p.CacheSourceFileMetaData(string(path)) + p.CacheSourceFileMetaData(path) return sourceFile } diff --git a/internal/compiler/host.go b/internal/compiler/host.go index c218e2b82e..f4bb0a7262 100644 --- a/internal/compiler/host.go +++ b/internal/compiler/host.go @@ -26,11 +26,10 @@ type FileInfo struct { var _ CompilerHost = (*compilerHost)(nil) type compilerHost struct { - options *core.CompilerOptions - currentDirectory string - fs vfs.FS - defaultLibraryPath string - pathToSourceFileMetaData map[string]*ast.SourceFileMetaData + options *core.CompilerOptions + currentDirectory string + fs vfs.FS + defaultLibraryPath string } func NewCompilerHost(options *core.CompilerOptions, currentDirectory string, fs vfs.FS, defaultLibraryPath string) CompilerHost { @@ -39,7 +38,6 @@ func NewCompilerHost(options *core.CompilerOptions, currentDirectory string, fs h.currentDirectory = currentDirectory h.fs = fs h.defaultLibraryPath = defaultLibraryPath - h.pathToSourceFileMetaData = make(map[string]*ast.SourceFileMetaData) return h } diff --git a/internal/compiler/program.go b/internal/compiler/program.go index 6919267617..dc53c6b9ac 100644 --- a/internal/compiler/program.go +++ b/internal/compiler/program.go @@ -49,7 +49,7 @@ type Program struct { files []*ast.SourceFile filesByPath map[tspath.Path]*ast.SourceFile - sourceFileMetaDatas map[string]*ast.SourceFileMetaData + sourceFileMetaDatas map[tspath.Path]*ast.SourceFileMetaData // The below settings are to track if a .js file should be add to the program if loaded via searching under node_modules. // This works as imported modules are discovered recursively in a depth first manner, specifically: @@ -75,7 +75,7 @@ func NewProgram(options ProgramOptions) *Program { p.programOptions = options p.compilerOptions = options.Options p.configFileParsingDiagnostics = slices.Clip(options.ConfigFileParsingDiagnostics) - p.sourceFileMetaDatas = make(map[string]*ast.SourceFileMetaData) + p.sourceFileMetaDatas = make(map[tspath.Path]*ast.SourceFileMetaData) if p.compilerOptions == nil { p.compilerOptions = &core.CompilerOptions{} } @@ -417,7 +417,7 @@ func (p *Program) PrintSourceFileWithTypes() { } } -func (p *Program) GetCachedSourceFileMetaDatas() map[string]*ast.SourceFileMetaData { +func (p *Program) GetCachedSourceFileMetaDatas() map[tspath.Path]*ast.SourceFileMetaData { return p.sourceFileMetaDatas } @@ -426,11 +426,11 @@ func (p *Program) GetEmitModuleFormatOfFile(sourceFile *ast.SourceFile) core.Mod } func (p *Program) GetEmitModuleFormatOfFileWorker(sourceFile *ast.SourceFile, options *core.CompilerOptions) core.ModuleKind { - return ast.GetEmitModuleFormatOfFileWorker(sourceFile, options, p.GetCachedSourceFileMetaDatas()[string(sourceFile.Path())]) + return ast.GetEmitModuleFormatOfFileWorker(sourceFile, options, p.GetCachedSourceFileMetaDatas()[sourceFile.Path()]) } func (p *Program) GetImpliedNodeFormatForEmit(sourceFile *ast.SourceFile) core.ResolutionMode { - return ast.GetImpliedNodeFormatForEmitWorker(sourceFile.FileName(), p.compilerOptions, p.GetCachedSourceFileMetaDatas()[string(sourceFile.Path())]) + return ast.GetImpliedNodeFormatForEmitWorker(sourceFile.FileName(), p.compilerOptions, p.GetCachedSourceFileMetaDatas()[sourceFile.Path()]) } func (p *Program) CommonSourceDirectory() string { diff --git a/internal/printer/emitcontext.go b/internal/printer/emitcontext.go index d94f5d4ab0..add2c8449d 100644 --- a/internal/printer/emitcontext.go +++ b/internal/printer/emitcontext.go @@ -10,6 +10,7 @@ import ( "github.com/microsoft/typescript-go/internal/ast" "github.com/microsoft/typescript-go/internal/collections" "github.com/microsoft/typescript-go/internal/core" + "github.com/microsoft/typescript-go/internal/tspath" ) // Stores side-table information used during transformation that can be read by the printer to customize emit @@ -24,7 +25,7 @@ type EmitContext struct { varScopeStack core.Stack[*varScope] letScopeStack core.Stack[*varScope] emitHelpers collections.OrderedSet[*EmitHelper] - sourceFileMetaDatas map[string]*ast.SourceFileMetaData + sourceFileMetaDatas map[tspath.Path]*ast.SourceFileMetaData isCustomPrologue func(node *ast.Statement) bool isHoistedFunction func(node *ast.Statement) bool @@ -626,7 +627,7 @@ func (c *EmitContext) NewRewriteRelativeImportExtensionsHelper(firstArgument *as ) } -func (c *EmitContext) SetSourcefileMetaDatas(sourceFileMetaDatas map[string]*ast.SourceFileMetaData) { +func (c *EmitContext) SetSourcefileMetaDatas(sourceFileMetaDatas map[tspath.Path]*ast.SourceFileMetaData) { c.sourceFileMetaDatas = sourceFileMetaDatas } @@ -957,7 +958,7 @@ func (c *EmitContext) VisitIterationBody(body *ast.Statement, visitor *ast.NodeV func (c *EmitContext) GetSourceFileMetaData(file *ast.SourceFile) *ast.SourceFileMetaData { for { - if meta, ok := c.sourceFileMetaDatas[string(file.Path())]; ok { + if meta, ok := c.sourceFileMetaDatas[file.Path()]; ok { return meta } original := c.Original(file.AsNode()) diff --git a/internal/transformers/importelision_test.go b/internal/transformers/importelision_test.go index a3650a6c02..30d415f0b6 100644 --- a/internal/transformers/importelision_test.go +++ b/internal/transformers/importelision_test.go @@ -10,6 +10,7 @@ import ( "github.com/microsoft/typescript-go/internal/printer" "github.com/microsoft/typescript-go/internal/testutil/emittestutil" "github.com/microsoft/typescript-go/internal/testutil/parsetestutil" + "github.com/microsoft/typescript-go/internal/tspath" ) type fakeProgram struct { @@ -53,8 +54,8 @@ func (p *fakeProgram) GetResolvedModule(currentSourceFile *ast.SourceFile, modul return p.getResolvedModule(currentSourceFile, moduleReference) } -func (p *fakeProgram) GetCachedSourceFileMetaDatas() map[string]*ast.SourceFileMetaData { - return map[string]*ast.SourceFileMetaData{} +func (p *fakeProgram) GetCachedSourceFileMetaDatas() map[tspath.Path]*ast.SourceFileMetaData { + return map[tspath.Path]*ast.SourceFileMetaData{} } func TestImportElision(t *testing.T) { From 4f740f13f3e98ceac7470b3d60931463541fd041 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=B3=C3=B0i=20Karlsson?= Date: Tue, 18 Mar 2025 22:55:55 +0100 Subject: [PATCH 21/30] Revert walking originals --- internal/printer/emitcontext.go | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/internal/printer/emitcontext.go b/internal/printer/emitcontext.go index add2c8449d..a60f94bf64 100644 --- a/internal/printer/emitcontext.go +++ b/internal/printer/emitcontext.go @@ -957,14 +957,5 @@ func (c *EmitContext) VisitIterationBody(body *ast.Statement, visitor *ast.NodeV } func (c *EmitContext) GetSourceFileMetaData(file *ast.SourceFile) *ast.SourceFileMetaData { - for { - if meta, ok := c.sourceFileMetaDatas[file.Path()]; ok { - return meta - } - original := c.Original(file.AsNode()) - if original == nil || !ast.IsSourceFile(original) { - return nil - } - file = original.AsSourceFile() - } + return c.sourceFileMetaDatas[file.Path()] } From d1e2b2e00107326158f5ae0cdda8fecfd366e3f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=B3=C3=B0i=20Karlsson?= Date: Tue, 18 Mar 2025 23:32:15 +0100 Subject: [PATCH 22/30] Create MetaDataProvider --- internal/compiler/emitter.go | 15 ++++++----- internal/printer/emitcontext.go | 26 ++++++-------------- internal/transformers/commonjsmodule.go | 8 +++--- internal/transformers/commonjsmodule_test.go | 5 +++- internal/transformers/esmodule.go | 7 +++--- internal/transformers/esmodule_test.go | 5 +++- internal/transformers/externalmoduleinfo.go | 6 ++--- internal/transformers/impliedmodule.go | 19 +++++++------- internal/transformers/metadataprovider.go | 21 ++++++++++++++++ 9 files changed, 68 insertions(+), 44 deletions(-) create mode 100644 internal/transformers/metadataprovider.go diff --git a/internal/compiler/emitter.go b/internal/compiler/emitter.go index 55ddd5e45c..4516ace410 100644 --- a/internal/compiler/emitter.go +++ b/internal/compiler/emitter.go @@ -38,13 +38,13 @@ func (e *emitter) emit() { e.emitBuildInfo(e.paths.buildInfoPath) } -func (e *emitter) getModuleTransformer(emitContext *printer.EmitContext, resolver binder.ReferenceResolver) *transformers.Transformer { +func (e *emitter) getModuleTransformer(emitContext *printer.EmitContext, resolver binder.ReferenceResolver, metaDataProvider transformers.MetaDataProvider) *transformers.Transformer { options := e.host.Options() switch options.GetEmitModuleKind() { case core.ModuleKindPreserve: // `ESModuleTransformer` contains logic for preserving CJS input syntax in `--module preserve` - return transformers.NewESModuleTransformer(emitContext, options, resolver) + return transformers.NewESModuleTransformer(emitContext, options, resolver, metaDataProvider) case core.ModuleKindESNext, core.ModuleKindES2022, @@ -53,10 +53,10 @@ func (e *emitter) getModuleTransformer(emitContext *printer.EmitContext, resolve core.ModuleKindNode16, core.ModuleKindNodeNext, core.ModuleKindCommonJS: - return transformers.NewImpliedModuleTransformer(emitContext, options, resolver) + return transformers.NewImpliedModuleTransformer(emitContext, options, resolver, metaDataProvider) default: - return transformers.NewCommonJSModuleTransformer(emitContext, options, resolver) + return transformers.NewCommonJSModuleTransformer(emitContext, options, resolver, metaDataProvider) } } @@ -77,6 +77,10 @@ func (e *emitter) getScriptTransformers(emitContext *printer.EmitContext, source referenceResolver = binder.NewReferenceResolver(options, binder.ReferenceResolverHooks{}) } + metaDataProvider := transformers.NewMetaDataProvider(func(file *ast.SourceFile) *ast.SourceFileMetaData { + return e.host.GetCachedSourceFileMetaDatas()[file.Path()] + }) + // erase types tx = append(tx, transformers.NewTypeEraserTransformer(emitContext, options)) @@ -89,7 +93,7 @@ func (e *emitter) getScriptTransformers(emitContext *printer.EmitContext, source tx = append(tx, transformers.NewRuntimeSyntaxTransformer(emitContext, options, referenceResolver)) // transform module syntax - tx = append(tx, e.getModuleTransformer(emitContext, referenceResolver)) + tx = append(tx, e.getModuleTransformer(emitContext, referenceResolver, metaDataProvider)) return tx } @@ -105,7 +109,6 @@ func (e *emitter) emitJsFile(sourceFile *ast.SourceFile, jsFilePath string, sour } emitContext := printer.NewEmitContext() - emitContext.SetSourcefileMetaDatas(e.host.GetCachedSourceFileMetaDatas()) for _, transformer := range e.getScriptTransformers(emitContext, sourceFile) { sourceFile = transformer.TransformSourceFile(sourceFile) } diff --git a/internal/printer/emitcontext.go b/internal/printer/emitcontext.go index a60f94bf64..a395b94e97 100644 --- a/internal/printer/emitcontext.go +++ b/internal/printer/emitcontext.go @@ -10,22 +10,20 @@ import ( "github.com/microsoft/typescript-go/internal/ast" "github.com/microsoft/typescript-go/internal/collections" "github.com/microsoft/typescript-go/internal/core" - "github.com/microsoft/typescript-go/internal/tspath" ) // Stores side-table information used during transformation that can be read by the printer to customize emit // // NOTE: EmitContext is not guaranteed to be thread-safe. type EmitContext struct { - Factory *ast.NodeFactory // Required. The NodeFactory to use to create new nodes - autoGenerate map[*ast.MemberName]*AutoGenerateInfo - textSource map[*ast.StringLiteralNode]*ast.Node - original map[*ast.Node]*ast.Node - emitNodes core.LinkStore[*ast.Node, emitNode] - varScopeStack core.Stack[*varScope] - letScopeStack core.Stack[*varScope] - emitHelpers collections.OrderedSet[*EmitHelper] - sourceFileMetaDatas map[tspath.Path]*ast.SourceFileMetaData + Factory *ast.NodeFactory // Required. The NodeFactory to use to create new nodes + autoGenerate map[*ast.MemberName]*AutoGenerateInfo + textSource map[*ast.StringLiteralNode]*ast.Node + original map[*ast.Node]*ast.Node + emitNodes core.LinkStore[*ast.Node, emitNode] + varScopeStack core.Stack[*varScope] + letScopeStack core.Stack[*varScope] + emitHelpers collections.OrderedSet[*EmitHelper] isCustomPrologue func(node *ast.Statement) bool isHoistedFunction func(node *ast.Statement) bool @@ -627,10 +625,6 @@ func (c *EmitContext) NewRewriteRelativeImportExtensionsHelper(firstArgument *as ) } -func (c *EmitContext) SetSourcefileMetaDatas(sourceFileMetaDatas map[tspath.Path]*ast.SourceFileMetaData) { - c.sourceFileMetaDatas = sourceFileMetaDatas -} - // // Original Node Tracking // @@ -955,7 +949,3 @@ func (c *EmitContext) VisitIterationBody(body *ast.Statement, visitor *ast.NodeV return updated } - -func (c *EmitContext) GetSourceFileMetaData(file *ast.SourceFile) *ast.SourceFileMetaData { - return c.sourceFileMetaDatas[file.Path()] -} diff --git a/internal/transformers/commonjsmodule.go b/internal/transformers/commonjsmodule.go index d264b63334..2dc8279bad 100644 --- a/internal/transformers/commonjsmodule.go +++ b/internal/transformers/commonjsmodule.go @@ -18,6 +18,7 @@ type CommonJSModuleTransformer struct { assignmentPatternVisitor *ast.NodeVisitor // visits assignment patterns in a destructuring assignment compilerOptions *core.CompilerOptions resolver binder.ReferenceResolver + metaDataProvider MetaDataProvider moduleKind core.ModuleKind languageVersion core.ScriptTarget currentSourceFile *ast.SourceFile @@ -26,7 +27,7 @@ type CommonJSModuleTransformer struct { currentNode *ast.Node // used for ancestor tracking via pushNode/popNode to detect expression identifiers } -func NewCommonJSModuleTransformer(emitContext *printer.EmitContext, compilerOptions *core.CompilerOptions, resolver binder.ReferenceResolver) *Transformer { +func NewCommonJSModuleTransformer(emitContext *printer.EmitContext, compilerOptions *core.CompilerOptions, resolver binder.ReferenceResolver, metaDataProvider MetaDataProvider) *Transformer { if resolver == nil { resolver = binder.NewReferenceResolver(compilerOptions, binder.ReferenceResolverHooks{}) } @@ -37,6 +38,7 @@ func NewCommonJSModuleTransformer(emitContext *printer.EmitContext, compilerOpti tx.assignmentPatternVisitor = emitContext.NewNodeVisitor(tx.visitAssignmentPattern) tx.languageVersion = compilerOptions.GetEmitScriptTarget() tx.moduleKind = compilerOptions.GetEmitModuleKind() + tx.metaDataProvider = metaDataProvider return tx.newTransformer(tx.visit, emitContext) } @@ -362,7 +364,7 @@ func (tx *CommonJSModuleTransformer) transformCommonJSModule(node *ast.SourceFil result := tx.factory.UpdateSourceFile(node, statementList).AsSourceFile() tx.emitContext.AddEmitHelper(result.AsNode(), tx.emitContext.ReadEmitHelpers()...) - externalHelpersImportDeclaration := createExternalHelpersImportDeclarationIfNeeded(tx.emitContext, result, tx.compilerOptions, false /*hasExportStarsToExportValues*/, false /*hasImportStar*/, false /*hasImportDefault*/) + externalHelpersImportDeclaration := createExternalHelpersImportDeclarationIfNeeded(tx.emitContext, result, tx.compilerOptions, tx.metaDataProvider, false /*hasExportStarsToExportValues*/, false /*hasImportStar*/, false /*hasImportDefault*/) if externalHelpersImportDeclaration != nil { prologue, rest := tx.emitContext.SplitStandardPrologue(result.Statements.Nodes) custom, rest := tx.emitContext.SplitCustomPrologue(rest) @@ -1680,7 +1682,7 @@ func (tx *CommonJSModuleTransformer) visitCallExpression(node *ast.CallExpressio func (tx *CommonJSModuleTransformer) shouldTransformImportCall() bool { // !!! host.shouldTransformImportCall? - return shouldTransformImportCallWorker(tx.currentSourceFile, tx.compilerOptions, tx.emitContext.GetSourceFileMetaData(tx.currentSourceFile)) + return shouldTransformImportCallWorker(tx.currentSourceFile, tx.compilerOptions, tx.metaDataProvider.GetSourceFileMetaData(tx.currentSourceFile)) } func (tx *CommonJSModuleTransformer) visitImportCallExpression(node *ast.CallExpression, rewriteOrShim bool) *ast.Node { diff --git a/internal/transformers/commonjsmodule_test.go b/internal/transformers/commonjsmodule_test.go index 8afebff5fd..d42c8b8529 100644 --- a/internal/transformers/commonjsmodule_test.go +++ b/internal/transformers/commonjsmodule_test.go @@ -1027,8 +1027,11 @@ exports.a = a;`, emitContext := printer.NewEmitContext() resolver := binder.NewReferenceResolver(&compilerOptions, binder.ReferenceResolverHooks{}) + metaDataProvider := NewMetaDataProvider(func(file *ast.SourceFile) *ast.SourceFileMetaData { + return nil + }) file = NewRuntimeSyntaxTransformer(emitContext, &compilerOptions, resolver).TransformSourceFile(file) - file = NewCommonJSModuleTransformer(emitContext, &compilerOptions, resolver).TransformSourceFile(file) + file = NewCommonJSModuleTransformer(emitContext, &compilerOptions, resolver, metaDataProvider).TransformSourceFile(file) emittestutil.CheckEmit(t, emitContext, file, rec.output) }) } diff --git a/internal/transformers/esmodule.go b/internal/transformers/esmodule.go index a0c11d25aa..b3970c21f8 100644 --- a/internal/transformers/esmodule.go +++ b/internal/transformers/esmodule.go @@ -13,6 +13,7 @@ type ESModuleTransformer struct { Transformer compilerOptions *core.CompilerOptions resolver binder.ReferenceResolver + metaDataProvider MetaDataProvider currentSourceFile *ast.SourceFile importRequireStatements *importRequireStatements helperNameSubstitutions map[string]*ast.IdentifierNode @@ -23,11 +24,11 @@ type importRequireStatements struct { requireHelperName *ast.IdentifierNode } -func NewESModuleTransformer(emitContext *printer.EmitContext, compilerOptions *core.CompilerOptions, resolver binder.ReferenceResolver) *Transformer { +func NewESModuleTransformer(emitContext *printer.EmitContext, compilerOptions *core.CompilerOptions, resolver binder.ReferenceResolver, metaDataProvider MetaDataProvider) *Transformer { if resolver == nil { resolver = binder.NewReferenceResolver(compilerOptions, binder.ReferenceResolverHooks{}) } - tx := &ESModuleTransformer{compilerOptions: compilerOptions, resolver: resolver} + tx := &ESModuleTransformer{compilerOptions: compilerOptions, resolver: resolver, metaDataProvider: metaDataProvider} return tx.newTransformer(tx.visit, emitContext) } @@ -64,7 +65,7 @@ func (tx *ESModuleTransformer) visitSourceFile(node *ast.SourceFile) *ast.Node { result := tx.visitor.VisitEachChild(node.AsNode()).AsSourceFile() tx.emitContext.AddEmitHelper(result.AsNode(), tx.emitContext.ReadEmitHelpers()...) - externalHelpersImportDeclaration := createExternalHelpersImportDeclarationIfNeeded(tx.emitContext, result, tx.compilerOptions, false /*hasExportStarsToExportValues*/, false /*hasImportStar*/, false /*hasImportDefault*/) + externalHelpersImportDeclaration := createExternalHelpersImportDeclarationIfNeeded(tx.emitContext, result, tx.compilerOptions, tx.metaDataProvider, false /*hasExportStarsToExportValues*/, false /*hasImportStar*/, false /*hasImportDefault*/) if externalHelpersImportDeclaration != nil || tx.importRequireStatements != nil { prologue, rest := tx.emitContext.SplitStandardPrologue(result.Statements.Nodes) statements := slices.Clone(prologue) diff --git a/internal/transformers/esmodule_test.go b/internal/transformers/esmodule_test.go index 94a0a5a7a1..7abebdb41d 100644 --- a/internal/transformers/esmodule_test.go +++ b/internal/transformers/esmodule_test.go @@ -233,8 +233,11 @@ var __rewriteRelativeImportExtension;`, emitContext := printer.NewEmitContext() resolver := binder.NewReferenceResolver(&compilerOptions, binder.ReferenceResolverHooks{}) + metaDataProvider := NewMetaDataProvider(func(file *ast.SourceFile) *ast.SourceFileMetaData { + return nil + }) file = NewRuntimeSyntaxTransformer(emitContext, &compilerOptions, resolver).TransformSourceFile(file) - file = NewESModuleTransformer(emitContext, &compilerOptions, resolver).TransformSourceFile(file) + file = NewESModuleTransformer(emitContext, &compilerOptions, resolver, metaDataProvider).TransformSourceFile(file) emittestutil.CheckEmit(t, emitContext, file, rec.output) }) } diff --git a/internal/transformers/externalmoduleinfo.go b/internal/transformers/externalmoduleinfo.go index 60eeeace8f..38044b5406 100644 --- a/internal/transformers/externalmoduleinfo.go +++ b/internal/transformers/externalmoduleinfo.go @@ -246,10 +246,10 @@ func (c *externalModuleInfoCollector) collectExportedVariableInfo(decl *ast.Node const externalHelpersModuleNameText = "tslib" -func createExternalHelpersImportDeclarationIfNeeded(emitContext *printer.EmitContext, sourceFile *ast.SourceFile, compilerOptions *core.CompilerOptions, hasExportStarsToExportValues bool, hasImportStar bool, hasImportDefault bool) *ast.Node /*ImportDeclaration | ImportEqualsDeclaration*/ { +func createExternalHelpersImportDeclarationIfNeeded(emitContext *printer.EmitContext, sourceFile *ast.SourceFile, compilerOptions *core.CompilerOptions, metaDataProvider MetaDataProvider, hasExportStarsToExportValues bool, hasImportStar bool, hasImportDefault bool) *ast.Node /*ImportDeclaration | ImportEqualsDeclaration*/ { if compilerOptions.ImportHelpers.IsTrue() && ast.IsEffectiveExternalModule(sourceFile, compilerOptions) { moduleKind := compilerOptions.GetEmitModuleKind() - impliedModuleKind := ast.GetImpliedNodeFormatForEmitWorker(sourceFile.FileName(), compilerOptions, emitContext.GetSourceFileMetaData(sourceFile)) + impliedModuleKind := ast.GetImpliedNodeFormatForEmitWorker(sourceFile.FileName(), compilerOptions, metaDataProvider.GetSourceFileMetaData(sourceFile)) helpers := getImportedHelpers(emitContext, sourceFile) if (moduleKind >= core.ModuleKindES2015 && moduleKind <= core.ModuleKindESNext) || impliedModuleKind == core.ModuleKindESNext || @@ -291,7 +291,7 @@ func createExternalHelpersImportDeclarationIfNeeded(emitContext *printer.EmitCon } } else { // When we emit to a non-ES module, generate a synthetic `import tslib = require("tslib")` to be further transformed. - externalHelpersModuleName := getOrCreateExternalHelpersModuleNameIfNeeded(emitContext, sourceFile, compilerOptions, helpers, hasExportStarsToExportValues, hasImportStar || hasImportDefault, emitContext.GetSourceFileMetaData(sourceFile)) + externalHelpersModuleName := getOrCreateExternalHelpersModuleNameIfNeeded(emitContext, sourceFile, compilerOptions, helpers, hasExportStarsToExportValues, hasImportStar || hasImportDefault, metaDataProvider.GetSourceFileMetaData(sourceFile)) if externalHelpersModuleName != nil { externalHelpersImportDeclaration := emitContext.Factory.NewImportEqualsDeclaration( nil, /*modifiers*/ diff --git a/internal/transformers/impliedmodule.go b/internal/transformers/impliedmodule.go index 4510a3e550..cabff2274e 100644 --- a/internal/transformers/impliedmodule.go +++ b/internal/transformers/impliedmodule.go @@ -9,17 +9,18 @@ import ( type ImpliedModuleTransformer struct { Transformer - compilerOptions *core.CompilerOptions - resolver binder.ReferenceResolver - cjsTransformer *Transformer - esmTransformer *Transformer + compilerOptions *core.CompilerOptions + resolver binder.ReferenceResolver + metaDataProvider MetaDataProvider + cjsTransformer *Transformer + esmTransformer *Transformer } -func NewImpliedModuleTransformer(emitContext *printer.EmitContext, compilerOptions *core.CompilerOptions, resolver binder.ReferenceResolver) *Transformer { +func NewImpliedModuleTransformer(emitContext *printer.EmitContext, compilerOptions *core.CompilerOptions, resolver binder.ReferenceResolver, metaDataProvider MetaDataProvider) *Transformer { if resolver == nil { resolver = binder.NewReferenceResolver(compilerOptions, binder.ReferenceResolverHooks{}) } - tx := &ImpliedModuleTransformer{compilerOptions: compilerOptions, resolver: resolver} + tx := &ImpliedModuleTransformer{compilerOptions: compilerOptions, resolver: resolver, metaDataProvider: metaDataProvider} return tx.newTransformer(tx.visit, emitContext) } @@ -41,12 +42,12 @@ func (tx *ImpliedModuleTransformer) visitSourceFile(node *ast.SourceFile) *ast.N var transformer *Transformer if format >= core.ModuleKindES2015 { if tx.esmTransformer == nil { - tx.esmTransformer = NewESModuleTransformer(tx.emitContext, tx.compilerOptions, tx.resolver) + tx.esmTransformer = NewESModuleTransformer(tx.emitContext, tx.compilerOptions, tx.resolver, tx.metaDataProvider) } transformer = tx.esmTransformer } else { if tx.cjsTransformer == nil { - tx.cjsTransformer = NewCommonJSModuleTransformer(tx.emitContext, tx.compilerOptions, tx.resolver) + tx.cjsTransformer = NewCommonJSModuleTransformer(tx.emitContext, tx.compilerOptions, tx.resolver, tx.metaDataProvider) } transformer = tx.cjsTransformer } @@ -56,5 +57,5 @@ func (tx *ImpliedModuleTransformer) visitSourceFile(node *ast.SourceFile) *ast.N func (tx *ImpliedModuleTransformer) getEmitModuleFormatOfFile(node *ast.SourceFile) core.ModuleKind { // !!! host.getEmitModuleFormatOfFile? - return ast.GetEmitModuleFormatOfFileWorker(node, tx.compilerOptions, tx.emitContext.GetSourceFileMetaData(node)) + return ast.GetEmitModuleFormatOfFileWorker(node, tx.compilerOptions, tx.metaDataProvider.GetSourceFileMetaData(node)) } diff --git a/internal/transformers/metadataprovider.go b/internal/transformers/metadataprovider.go new file mode 100644 index 0000000000..cd97d9c1ed --- /dev/null +++ b/internal/transformers/metadataprovider.go @@ -0,0 +1,21 @@ +package transformers + +import "github.com/microsoft/typescript-go/internal/ast" + +type MetaDataProvider interface { + GetSourceFileMetaData(file *ast.SourceFile) *ast.SourceFileMetaData +} + +type metaDataProvider struct { + getSourceFileMetaData func(file *ast.SourceFile) *ast.SourceFileMetaData +} + +func NewMetaDataProvider(getSourceFileMetaData func(file *ast.SourceFile) *ast.SourceFileMetaData) MetaDataProvider { + return &metaDataProvider{ + getSourceFileMetaData: getSourceFileMetaData, + } +} + +func (r *metaDataProvider) GetSourceFileMetaData(file *ast.SourceFile) *ast.SourceFileMetaData { + return r.getSourceFileMetaData(file) +} From 7da5ddc6d0d2a02dd701f7091eacf80b734b6afa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=B3=C3=B0i=20Karlsson?= Date: Tue, 18 Mar 2025 23:33:44 +0100 Subject: [PATCH 23/30] Move commonjs metadata provider adding to struct declaration --- internal/transformers/commonjsmodule.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/internal/transformers/commonjsmodule.go b/internal/transformers/commonjsmodule.go index 2dc8279bad..6ed4a37ac8 100644 --- a/internal/transformers/commonjsmodule.go +++ b/internal/transformers/commonjsmodule.go @@ -31,14 +31,13 @@ func NewCommonJSModuleTransformer(emitContext *printer.EmitContext, compilerOpti if resolver == nil { resolver = binder.NewReferenceResolver(compilerOptions, binder.ReferenceResolverHooks{}) } - tx := &CommonJSModuleTransformer{compilerOptions: compilerOptions, resolver: resolver} + tx := &CommonJSModuleTransformer{compilerOptions: compilerOptions, resolver: resolver, metaDataProvider: metaDataProvider} tx.topLevelVisitor = emitContext.NewNodeVisitor(tx.visitTopLevel) tx.topLevelNestedVisitor = emitContext.NewNodeVisitor(tx.visitTopLevelNested) tx.discardedValueVisitor = emitContext.NewNodeVisitor(tx.visitDiscardedValue) tx.assignmentPatternVisitor = emitContext.NewNodeVisitor(tx.visitAssignmentPattern) tx.languageVersion = compilerOptions.GetEmitScriptTarget() tx.moduleKind = compilerOptions.GetEmitModuleKind() - tx.metaDataProvider = metaDataProvider return tx.newTransformer(tx.visit, emitContext) } From e2c7a77c74a3fcc5f066f4276d928c4e26a9c534 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=B3=C3=B0i=20Karlsson?= Date: Wed, 19 Mar 2025 00:07:21 +0100 Subject: [PATCH 24/30] Use program as SourceFileMetaDataProvider and share fakeProgram in test util --- internal/checker/checker.go | 2 +- internal/checker/grammarchecks.go | 4 +- internal/compiler/emitHost.go | 6 +- internal/compiler/emitter.go | 14 ++-- internal/compiler/program.go | 8 +-- .../printer/sourcefilemetadataprovider.go | 18 +++++ .../testutil/emittestutil/emittestutil.go | 67 +++++++++++++++++++ internal/transformers/commonjsmodule.go | 38 +++++------ internal/transformers/commonjsmodule_test.go | 9 +-- internal/transformers/esmodule.go | 18 ++--- internal/transformers/esmodule_test.go | 10 +-- internal/transformers/externalmoduleinfo.go | 6 +- internal/transformers/impliedmodule.go | 20 +++--- internal/transformers/importelision_test.go | 65 +----------------- internal/transformers/metadataprovider.go | 21 ------ 15 files changed, 153 insertions(+), 153 deletions(-) create mode 100644 internal/printer/sourcefilemetadataprovider.go delete mode 100644 internal/transformers/metadataprovider.go diff --git a/internal/checker/checker.go b/internal/checker/checker.go index bb16cadccf..e78c0abca0 100644 --- a/internal/checker/checker.go +++ b/internal/checker/checker.go @@ -514,7 +514,7 @@ type Program interface { GetEmitModuleFormatOfFile(sourceFile *ast.SourceFile) core.ModuleKind GetImpliedNodeFormatForEmit(sourceFile *ast.SourceFile) core.ModuleKind GetResolvedModule(currentSourceFile *ast.SourceFile, moduleReference string) *ast.SourceFile - GetCachedSourceFileMetaDatas() map[tspath.Path]*ast.SourceFileMetaData + GetSourceFileMetaData(path tspath.Path) *ast.SourceFileMetaData } type Host interface{} diff --git a/internal/checker/grammarchecks.go b/internal/checker/grammarchecks.go index e627cf5dc6..fd083f5430 100644 --- a/internal/checker/grammarchecks.go +++ b/internal/checker/grammarchecks.go @@ -1217,7 +1217,7 @@ func (c *Checker) checkGrammarForInOrForOfStatement(forInOrOfStatement *ast.ForI } switch c.moduleKind { case core.ModuleKindNode16, core.ModuleKindNodeNext: - sourceFileMetaData := c.program.GetCachedSourceFileMetaDatas()[sourceFile.Path()] + sourceFileMetaData := c.program.GetSourceFileMetaData(sourceFile.Path()) if sourceFileMetaData != nil && sourceFileMetaData.ImpliedNodeFormat == core.ModuleKindCommonJS { c.diagnostics.Add(createDiagnosticForNode(forInOrOfStatement.AwaitModifier, diagnostics.The_current_file_is_a_CommonJS_module_and_cannot_use_await_at_the_top_level)) break @@ -1720,7 +1720,7 @@ func (c *Checker) checkGrammarAwaitOrAwaitUsing(node *ast.Node) bool { switch c.moduleKind { case core.ModuleKindNode16, core.ModuleKindNodeNext: - sourceFileMetaData := c.program.GetCachedSourceFileMetaDatas()[sourceFile.Path()] + sourceFileMetaData := c.program.GetSourceFileMetaData(sourceFile.Path()) if sourceFileMetaData != nil && sourceFileMetaData.ImpliedNodeFormat == core.ModuleKindCommonJS { if !spanCalculated { span = scanner.GetRangeOfTokenAtPosition(sourceFile, node.Pos()) diff --git a/internal/compiler/emitHost.go b/internal/compiler/emitHost.go index 0df8d6f66c..01445eeb10 100644 --- a/internal/compiler/emitHost.go +++ b/internal/compiler/emitHost.go @@ -24,7 +24,7 @@ type EmitHost interface { CommonSourceDirectory() string IsEmitBlocked(file string) bool WriteFile(fileName string, text string, writeByteOrderMark bool, relatedSourceFiles []*ast.SourceFile, data *WriteFileData) error - GetCachedSourceFileMetaDatas() map[tspath.Path]*ast.SourceFileMetaData + GetSourceFileMetaData(path tspath.Path) *ast.SourceFileMetaData GetEmitResolver(file *ast.SourceFile, skipDiagnostics bool) printer.EmitResolver } @@ -57,6 +57,6 @@ func (host *emitHost) GetEmitResolver(file *ast.SourceFile, skipDiagnostics bool return checker.GetEmitResolver(file, skipDiagnostics) } -func (host *emitHost) GetCachedSourceFileMetaDatas() map[tspath.Path]*ast.SourceFileMetaData { - return host.program.GetCachedSourceFileMetaDatas() +func (host *emitHost) GetSourceFileMetaData(path tspath.Path) *ast.SourceFileMetaData { + return host.program.GetSourceFileMetaData(path) } diff --git a/internal/compiler/emitter.go b/internal/compiler/emitter.go index 4516ace410..58c9c09232 100644 --- a/internal/compiler/emitter.go +++ b/internal/compiler/emitter.go @@ -38,13 +38,13 @@ func (e *emitter) emit() { e.emitBuildInfo(e.paths.buildInfoPath) } -func (e *emitter) getModuleTransformer(emitContext *printer.EmitContext, resolver binder.ReferenceResolver, metaDataProvider transformers.MetaDataProvider) *transformers.Transformer { +func (e *emitter) getModuleTransformer(emitContext *printer.EmitContext, resolver binder.ReferenceResolver, sourceFileMetaDataResolver printer.SourceFileMetaDataProvider) *transformers.Transformer { options := e.host.Options() switch options.GetEmitModuleKind() { case core.ModuleKindPreserve: // `ESModuleTransformer` contains logic for preserving CJS input syntax in `--module preserve` - return transformers.NewESModuleTransformer(emitContext, options, resolver, metaDataProvider) + return transformers.NewESModuleTransformer(emitContext, options, resolver, sourceFileMetaDataResolver) case core.ModuleKindESNext, core.ModuleKindES2022, @@ -53,10 +53,10 @@ func (e *emitter) getModuleTransformer(emitContext *printer.EmitContext, resolve core.ModuleKindNode16, core.ModuleKindNodeNext, core.ModuleKindCommonJS: - return transformers.NewImpliedModuleTransformer(emitContext, options, resolver, metaDataProvider) + return transformers.NewImpliedModuleTransformer(emitContext, options, resolver, sourceFileMetaDataResolver) default: - return transformers.NewCommonJSModuleTransformer(emitContext, options, resolver, metaDataProvider) + return transformers.NewCommonJSModuleTransformer(emitContext, options, resolver, sourceFileMetaDataResolver) } } @@ -77,10 +77,6 @@ func (e *emitter) getScriptTransformers(emitContext *printer.EmitContext, source referenceResolver = binder.NewReferenceResolver(options, binder.ReferenceResolverHooks{}) } - metaDataProvider := transformers.NewMetaDataProvider(func(file *ast.SourceFile) *ast.SourceFileMetaData { - return e.host.GetCachedSourceFileMetaDatas()[file.Path()] - }) - // erase types tx = append(tx, transformers.NewTypeEraserTransformer(emitContext, options)) @@ -93,7 +89,7 @@ func (e *emitter) getScriptTransformers(emitContext *printer.EmitContext, source tx = append(tx, transformers.NewRuntimeSyntaxTransformer(emitContext, options, referenceResolver)) // transform module syntax - tx = append(tx, e.getModuleTransformer(emitContext, referenceResolver, metaDataProvider)) + tx = append(tx, e.getModuleTransformer(emitContext, referenceResolver, e.host)) return tx } diff --git a/internal/compiler/program.go b/internal/compiler/program.go index dc53c6b9ac..8bb83b6d28 100644 --- a/internal/compiler/program.go +++ b/internal/compiler/program.go @@ -417,8 +417,8 @@ func (p *Program) PrintSourceFileWithTypes() { } } -func (p *Program) GetCachedSourceFileMetaDatas() map[tspath.Path]*ast.SourceFileMetaData { - return p.sourceFileMetaDatas +func (p *Program) GetSourceFileMetaData(path tspath.Path) *ast.SourceFileMetaData { + return p.sourceFileMetaDatas[path] } func (p *Program) GetEmitModuleFormatOfFile(sourceFile *ast.SourceFile) core.ModuleKind { @@ -426,11 +426,11 @@ func (p *Program) GetEmitModuleFormatOfFile(sourceFile *ast.SourceFile) core.Mod } func (p *Program) GetEmitModuleFormatOfFileWorker(sourceFile *ast.SourceFile, options *core.CompilerOptions) core.ModuleKind { - return ast.GetEmitModuleFormatOfFileWorker(sourceFile, options, p.GetCachedSourceFileMetaDatas()[sourceFile.Path()]) + return ast.GetEmitModuleFormatOfFileWorker(sourceFile, options, p.GetSourceFileMetaData(sourceFile.Path())) } func (p *Program) GetImpliedNodeFormatForEmit(sourceFile *ast.SourceFile) core.ResolutionMode { - return ast.GetImpliedNodeFormatForEmitWorker(sourceFile.FileName(), p.compilerOptions, p.GetCachedSourceFileMetaDatas()[sourceFile.Path()]) + return ast.GetImpliedNodeFormatForEmitWorker(sourceFile.FileName(), p.compilerOptions, p.GetSourceFileMetaData(sourceFile.Path())) } func (p *Program) CommonSourceDirectory() string { diff --git a/internal/printer/sourcefilemetadataprovider.go b/internal/printer/sourcefilemetadataprovider.go new file mode 100644 index 0000000000..d5bf922a33 --- /dev/null +++ b/internal/printer/sourcefilemetadataprovider.go @@ -0,0 +1,18 @@ +package printer + +import ( + "github.com/microsoft/typescript-go/internal/ast" + "github.com/microsoft/typescript-go/internal/tspath" +) + +type SourceFileMetaDataProvider interface { + GetSourceFileMetaData(path tspath.Path) *ast.SourceFileMetaData +} + +type sourceFileMetadataProvider struct { + getSourceFileMetaData func(path tspath.Path) *ast.SourceFileMetaData +} + +func (r *sourceFileMetadataProvider) GetSourceFileMetaData(path tspath.Path) *ast.SourceFileMetaData { + return r.getSourceFileMetaData(path) +} diff --git a/internal/testutil/emittestutil/emittestutil.go b/internal/testutil/emittestutil/emittestutil.go index 00fe83e3ef..862805c923 100644 --- a/internal/testutil/emittestutil/emittestutil.go +++ b/internal/testutil/emittestutil/emittestutil.go @@ -5,9 +5,11 @@ import ( "testing" "github.com/microsoft/typescript-go/internal/ast" + "github.com/microsoft/typescript-go/internal/binder" "github.com/microsoft/typescript-go/internal/core" "github.com/microsoft/typescript-go/internal/printer" "github.com/microsoft/typescript-go/internal/testutil/parsetestutil" + "github.com/microsoft/typescript-go/internal/tspath" "gotest.tools/v3/assert" ) @@ -27,3 +29,68 @@ func CheckEmit(t *testing.T, emitContext *printer.EmitContext, file *ast.SourceF file2 := parsetestutil.ParseTypeScript(text, file.LanguageVariant == core.LanguageVariantJSX) parsetestutil.CheckDiagnosticsMessage(t, file2, "error on reparse: ") } + +type fakeProgram struct { + singleThreaded bool + compilerOptions *core.CompilerOptions + files []*ast.SourceFile + getEmitModuleFormatOfFile func(sourceFile *ast.SourceFile) core.ModuleKind + getImpliedNodeFormatForEmit func(sourceFile *ast.SourceFile) core.ModuleKind + getResolvedModule func(currentSourceFile *ast.SourceFile, moduleReference string) *ast.SourceFile +} + +func (p *fakeProgram) Options() *core.CompilerOptions { + return p.compilerOptions +} + +func (p *fakeProgram) SourceFiles() []*ast.SourceFile { + return p.files +} + +func (p *fakeProgram) BindSourceFiles() { + wg := core.NewWorkGroup(p.singleThreaded) + for _, file := range p.files { + if !file.IsBound() { + wg.Queue(func() { + binder.BindSourceFile(file, p.compilerOptions) + }) + } + } + wg.RunAndWait() +} + +func (p *fakeProgram) GetEmitModuleFormatOfFile(sourceFile *ast.SourceFile) core.ModuleKind { + return p.getEmitModuleFormatOfFile(sourceFile) +} + +func (p *fakeProgram) GetImpliedNodeFormatForEmit(sourceFile *ast.SourceFile) core.ModuleKind { + return p.getImpliedNodeFormatForEmit(sourceFile) +} + +func (p *fakeProgram) GetResolvedModule(currentSourceFile *ast.SourceFile, moduleReference string) *ast.SourceFile { + return p.getResolvedModule(currentSourceFile, moduleReference) +} + +func (p *fakeProgram) GetSourceFileMetaData(path tspath.Path) *ast.SourceFileMetaData { + return nil +} + +func NewFakeProgram(singleThreaded bool, compilerOptions *core.CompilerOptions, files []*ast.SourceFile, file, other *ast.SourceFile) *fakeProgram { + return &fakeProgram{ + singleThreaded: singleThreaded, + compilerOptions: compilerOptions, + files: files, + getEmitModuleFormatOfFile: func(sourceFile *ast.SourceFile) core.ModuleKind { + return core.ModuleKindESNext + }, + getImpliedNodeFormatForEmit: func(sourceFile *ast.SourceFile) core.ModuleKind { + return core.ModuleKindESNext + }, + getResolvedModule: func(currentSourceFile *ast.SourceFile, moduleReference string) *ast.SourceFile { + if currentSourceFile == file && moduleReference == "other" { + return other + } + return nil + }, + } +} diff --git a/internal/transformers/commonjsmodule.go b/internal/transformers/commonjsmodule.go index 6ed4a37ac8..d17f7f2c91 100644 --- a/internal/transformers/commonjsmodule.go +++ b/internal/transformers/commonjsmodule.go @@ -12,26 +12,26 @@ import ( type CommonJSModuleTransformer struct { Transformer - topLevelVisitor *ast.NodeVisitor // visits statements at top level of a module - topLevelNestedVisitor *ast.NodeVisitor // visits nested statements at top level of a module - discardedValueVisitor *ast.NodeVisitor // visits expressions whose values would be discarded at runtime - assignmentPatternVisitor *ast.NodeVisitor // visits assignment patterns in a destructuring assignment - compilerOptions *core.CompilerOptions - resolver binder.ReferenceResolver - metaDataProvider MetaDataProvider - moduleKind core.ModuleKind - languageVersion core.ScriptTarget - currentSourceFile *ast.SourceFile - currentModuleInfo *externalModuleInfo - parentNode *ast.Node // used for ancestor tracking via pushNode/popNode to detect expression identifiers - currentNode *ast.Node // used for ancestor tracking via pushNode/popNode to detect expression identifiers -} - -func NewCommonJSModuleTransformer(emitContext *printer.EmitContext, compilerOptions *core.CompilerOptions, resolver binder.ReferenceResolver, metaDataProvider MetaDataProvider) *Transformer { + topLevelVisitor *ast.NodeVisitor // visits statements at top level of a module + topLevelNestedVisitor *ast.NodeVisitor // visits nested statements at top level of a module + discardedValueVisitor *ast.NodeVisitor // visits expressions whose values would be discarded at runtime + assignmentPatternVisitor *ast.NodeVisitor // visits assignment patterns in a destructuring assignment + compilerOptions *core.CompilerOptions + resolver binder.ReferenceResolver + sourceFileMetaDataResolver printer.SourceFileMetaDataProvider + moduleKind core.ModuleKind + languageVersion core.ScriptTarget + currentSourceFile *ast.SourceFile + currentModuleInfo *externalModuleInfo + parentNode *ast.Node // used for ancestor tracking via pushNode/popNode to detect expression identifiers + currentNode *ast.Node // used for ancestor tracking via pushNode/popNode to detect expression identifiers +} + +func NewCommonJSModuleTransformer(emitContext *printer.EmitContext, compilerOptions *core.CompilerOptions, resolver binder.ReferenceResolver, sourceFileMetaDataResolver printer.SourceFileMetaDataProvider) *Transformer { if resolver == nil { resolver = binder.NewReferenceResolver(compilerOptions, binder.ReferenceResolverHooks{}) } - tx := &CommonJSModuleTransformer{compilerOptions: compilerOptions, resolver: resolver, metaDataProvider: metaDataProvider} + tx := &CommonJSModuleTransformer{compilerOptions: compilerOptions, resolver: resolver, sourceFileMetaDataResolver: sourceFileMetaDataResolver} tx.topLevelVisitor = emitContext.NewNodeVisitor(tx.visitTopLevel) tx.topLevelNestedVisitor = emitContext.NewNodeVisitor(tx.visitTopLevelNested) tx.discardedValueVisitor = emitContext.NewNodeVisitor(tx.visitDiscardedValue) @@ -363,7 +363,7 @@ func (tx *CommonJSModuleTransformer) transformCommonJSModule(node *ast.SourceFil result := tx.factory.UpdateSourceFile(node, statementList).AsSourceFile() tx.emitContext.AddEmitHelper(result.AsNode(), tx.emitContext.ReadEmitHelpers()...) - externalHelpersImportDeclaration := createExternalHelpersImportDeclarationIfNeeded(tx.emitContext, result, tx.compilerOptions, tx.metaDataProvider, false /*hasExportStarsToExportValues*/, false /*hasImportStar*/, false /*hasImportDefault*/) + externalHelpersImportDeclaration := createExternalHelpersImportDeclarationIfNeeded(tx.emitContext, result, tx.compilerOptions, tx.sourceFileMetaDataResolver, false /*hasExportStarsToExportValues*/, false /*hasImportStar*/, false /*hasImportDefault*/) if externalHelpersImportDeclaration != nil { prologue, rest := tx.emitContext.SplitStandardPrologue(result.Statements.Nodes) custom, rest := tx.emitContext.SplitCustomPrologue(rest) @@ -1681,7 +1681,7 @@ func (tx *CommonJSModuleTransformer) visitCallExpression(node *ast.CallExpressio func (tx *CommonJSModuleTransformer) shouldTransformImportCall() bool { // !!! host.shouldTransformImportCall? - return shouldTransformImportCallWorker(tx.currentSourceFile, tx.compilerOptions, tx.metaDataProvider.GetSourceFileMetaData(tx.currentSourceFile)) + return shouldTransformImportCallWorker(tx.currentSourceFile, tx.compilerOptions, tx.sourceFileMetaDataResolver.GetSourceFileMetaData(tx.currentSourceFile.Path())) } func (tx *CommonJSModuleTransformer) visitImportCallExpression(node *ast.CallExpression, rewriteOrShim bool) *ast.Node { diff --git a/internal/transformers/commonjsmodule_test.go b/internal/transformers/commonjsmodule_test.go index d42c8b8529..9509e2afb7 100644 --- a/internal/transformers/commonjsmodule_test.go +++ b/internal/transformers/commonjsmodule_test.go @@ -1017,21 +1017,22 @@ exports.a = a;`, file := parsetestutil.ParseTypeScript(rec.input, rec.jsx) parsetestutil.CheckDiagnostics(t, file) binder.BindSourceFile(file, &compilerOptions) + files := []*ast.SourceFile{file} var other *ast.SourceFile if len(rec.other) > 0 { other = parsetestutil.ParseTypeScript(rec.other, rec.jsx) parsetestutil.CheckDiagnostics(t, other) binder.BindSourceFile(other, &compilerOptions) + files = append(files, other) } emitContext := printer.NewEmitContext() resolver := binder.NewReferenceResolver(&compilerOptions, binder.ReferenceResolverHooks{}) - metaDataProvider := NewMetaDataProvider(func(file *ast.SourceFile) *ast.SourceFileMetaData { - return nil - }) + + program := emittestutil.NewFakeProgram(true, &compilerOptions, files, file, other) file = NewRuntimeSyntaxTransformer(emitContext, &compilerOptions, resolver).TransformSourceFile(file) - file = NewCommonJSModuleTransformer(emitContext, &compilerOptions, resolver, metaDataProvider).TransformSourceFile(file) + file = NewCommonJSModuleTransformer(emitContext, &compilerOptions, resolver, program).TransformSourceFile(file) emittestutil.CheckEmit(t, emitContext, file, rec.output) }) } diff --git a/internal/transformers/esmodule.go b/internal/transformers/esmodule.go index b3970c21f8..6da44fc5b0 100644 --- a/internal/transformers/esmodule.go +++ b/internal/transformers/esmodule.go @@ -11,12 +11,12 @@ import ( type ESModuleTransformer struct { Transformer - compilerOptions *core.CompilerOptions - resolver binder.ReferenceResolver - metaDataProvider MetaDataProvider - currentSourceFile *ast.SourceFile - importRequireStatements *importRequireStatements - helperNameSubstitutions map[string]*ast.IdentifierNode + compilerOptions *core.CompilerOptions + resolver binder.ReferenceResolver + sourceFileMetaDataResolver printer.SourceFileMetaDataProvider + currentSourceFile *ast.SourceFile + importRequireStatements *importRequireStatements + helperNameSubstitutions map[string]*ast.IdentifierNode } type importRequireStatements struct { @@ -24,11 +24,11 @@ type importRequireStatements struct { requireHelperName *ast.IdentifierNode } -func NewESModuleTransformer(emitContext *printer.EmitContext, compilerOptions *core.CompilerOptions, resolver binder.ReferenceResolver, metaDataProvider MetaDataProvider) *Transformer { +func NewESModuleTransformer(emitContext *printer.EmitContext, compilerOptions *core.CompilerOptions, resolver binder.ReferenceResolver, sourceFileMetaDataResolver printer.SourceFileMetaDataProvider) *Transformer { if resolver == nil { resolver = binder.NewReferenceResolver(compilerOptions, binder.ReferenceResolverHooks{}) } - tx := &ESModuleTransformer{compilerOptions: compilerOptions, resolver: resolver, metaDataProvider: metaDataProvider} + tx := &ESModuleTransformer{compilerOptions: compilerOptions, resolver: resolver, sourceFileMetaDataResolver: sourceFileMetaDataResolver} return tx.newTransformer(tx.visit, emitContext) } @@ -65,7 +65,7 @@ func (tx *ESModuleTransformer) visitSourceFile(node *ast.SourceFile) *ast.Node { result := tx.visitor.VisitEachChild(node.AsNode()).AsSourceFile() tx.emitContext.AddEmitHelper(result.AsNode(), tx.emitContext.ReadEmitHelpers()...) - externalHelpersImportDeclaration := createExternalHelpersImportDeclarationIfNeeded(tx.emitContext, result, tx.compilerOptions, tx.metaDataProvider, false /*hasExportStarsToExportValues*/, false /*hasImportStar*/, false /*hasImportDefault*/) + externalHelpersImportDeclaration := createExternalHelpersImportDeclarationIfNeeded(tx.emitContext, result, tx.compilerOptions, tx.sourceFileMetaDataResolver, false /*hasExportStarsToExportValues*/, false /*hasImportStar*/, false /*hasImportDefault*/) if externalHelpersImportDeclaration != nil || tx.importRequireStatements != nil { prologue, rest := tx.emitContext.SplitStandardPrologue(result.Statements.Nodes) statements := slices.Clone(prologue) diff --git a/internal/transformers/esmodule_test.go b/internal/transformers/esmodule_test.go index 7abebdb41d..54750451a3 100644 --- a/internal/transformers/esmodule_test.go +++ b/internal/transformers/esmodule_test.go @@ -223,21 +223,23 @@ var __rewriteRelativeImportExtension;`, file := parsetestutil.ParseTypeScript(rec.input, rec.jsx) parsetestutil.CheckDiagnostics(t, file) binder.BindSourceFile(file, &compilerOptions) + files := []*ast.SourceFile{file} var other *ast.SourceFile if len(rec.other) > 0 { other = parsetestutil.ParseTypeScript(rec.other, rec.jsx) parsetestutil.CheckDiagnostics(t, other) binder.BindSourceFile(other, &compilerOptions) + files = append(files, other) } emitContext := printer.NewEmitContext() resolver := binder.NewReferenceResolver(&compilerOptions, binder.ReferenceResolverHooks{}) - metaDataProvider := NewMetaDataProvider(func(file *ast.SourceFile) *ast.SourceFileMetaData { - return nil - }) + + program := emittestutil.NewFakeProgram(true, &compilerOptions, files, file, other) + file = NewRuntimeSyntaxTransformer(emitContext, &compilerOptions, resolver).TransformSourceFile(file) - file = NewESModuleTransformer(emitContext, &compilerOptions, resolver, metaDataProvider).TransformSourceFile(file) + file = NewESModuleTransformer(emitContext, &compilerOptions, resolver, program).TransformSourceFile(file) emittestutil.CheckEmit(t, emitContext, file, rec.output) }) } diff --git a/internal/transformers/externalmoduleinfo.go b/internal/transformers/externalmoduleinfo.go index 38044b5406..ee5eef2790 100644 --- a/internal/transformers/externalmoduleinfo.go +++ b/internal/transformers/externalmoduleinfo.go @@ -246,10 +246,10 @@ func (c *externalModuleInfoCollector) collectExportedVariableInfo(decl *ast.Node const externalHelpersModuleNameText = "tslib" -func createExternalHelpersImportDeclarationIfNeeded(emitContext *printer.EmitContext, sourceFile *ast.SourceFile, compilerOptions *core.CompilerOptions, metaDataProvider MetaDataProvider, hasExportStarsToExportValues bool, hasImportStar bool, hasImportDefault bool) *ast.Node /*ImportDeclaration | ImportEqualsDeclaration*/ { +func createExternalHelpersImportDeclarationIfNeeded(emitContext *printer.EmitContext, sourceFile *ast.SourceFile, compilerOptions *core.CompilerOptions, sourceFileMetaDataResolver printer.SourceFileMetaDataProvider, hasExportStarsToExportValues bool, hasImportStar bool, hasImportDefault bool) *ast.Node /*ImportDeclaration | ImportEqualsDeclaration*/ { if compilerOptions.ImportHelpers.IsTrue() && ast.IsEffectiveExternalModule(sourceFile, compilerOptions) { moduleKind := compilerOptions.GetEmitModuleKind() - impliedModuleKind := ast.GetImpliedNodeFormatForEmitWorker(sourceFile.FileName(), compilerOptions, metaDataProvider.GetSourceFileMetaData(sourceFile)) + impliedModuleKind := ast.GetImpliedNodeFormatForEmitWorker(sourceFile.FileName(), compilerOptions, sourceFileMetaDataResolver.GetSourceFileMetaData(sourceFile.Path())) helpers := getImportedHelpers(emitContext, sourceFile) if (moduleKind >= core.ModuleKindES2015 && moduleKind <= core.ModuleKindESNext) || impliedModuleKind == core.ModuleKindESNext || @@ -291,7 +291,7 @@ func createExternalHelpersImportDeclarationIfNeeded(emitContext *printer.EmitCon } } else { // When we emit to a non-ES module, generate a synthetic `import tslib = require("tslib")` to be further transformed. - externalHelpersModuleName := getOrCreateExternalHelpersModuleNameIfNeeded(emitContext, sourceFile, compilerOptions, helpers, hasExportStarsToExportValues, hasImportStar || hasImportDefault, metaDataProvider.GetSourceFileMetaData(sourceFile)) + externalHelpersModuleName := getOrCreateExternalHelpersModuleNameIfNeeded(emitContext, sourceFile, compilerOptions, helpers, hasExportStarsToExportValues, hasImportStar || hasImportDefault, sourceFileMetaDataResolver.GetSourceFileMetaData(sourceFile.Path())) if externalHelpersModuleName != nil { externalHelpersImportDeclaration := emitContext.Factory.NewImportEqualsDeclaration( nil, /*modifiers*/ diff --git a/internal/transformers/impliedmodule.go b/internal/transformers/impliedmodule.go index cabff2274e..9913696f2f 100644 --- a/internal/transformers/impliedmodule.go +++ b/internal/transformers/impliedmodule.go @@ -9,18 +9,18 @@ import ( type ImpliedModuleTransformer struct { Transformer - compilerOptions *core.CompilerOptions - resolver binder.ReferenceResolver - metaDataProvider MetaDataProvider - cjsTransformer *Transformer - esmTransformer *Transformer + compilerOptions *core.CompilerOptions + resolver binder.ReferenceResolver + sourceFileMetaDataResolver printer.SourceFileMetaDataProvider + cjsTransformer *Transformer + esmTransformer *Transformer } -func NewImpliedModuleTransformer(emitContext *printer.EmitContext, compilerOptions *core.CompilerOptions, resolver binder.ReferenceResolver, metaDataProvider MetaDataProvider) *Transformer { +func NewImpliedModuleTransformer(emitContext *printer.EmitContext, compilerOptions *core.CompilerOptions, resolver binder.ReferenceResolver, sourceFileMetaDataResolver printer.SourceFileMetaDataProvider) *Transformer { if resolver == nil { resolver = binder.NewReferenceResolver(compilerOptions, binder.ReferenceResolverHooks{}) } - tx := &ImpliedModuleTransformer{compilerOptions: compilerOptions, resolver: resolver, metaDataProvider: metaDataProvider} + tx := &ImpliedModuleTransformer{compilerOptions: compilerOptions, resolver: resolver, sourceFileMetaDataResolver: sourceFileMetaDataResolver} return tx.newTransformer(tx.visit, emitContext) } @@ -42,12 +42,12 @@ func (tx *ImpliedModuleTransformer) visitSourceFile(node *ast.SourceFile) *ast.N var transformer *Transformer if format >= core.ModuleKindES2015 { if tx.esmTransformer == nil { - tx.esmTransformer = NewESModuleTransformer(tx.emitContext, tx.compilerOptions, tx.resolver, tx.metaDataProvider) + tx.esmTransformer = NewESModuleTransformer(tx.emitContext, tx.compilerOptions, tx.resolver, tx.sourceFileMetaDataResolver) } transformer = tx.esmTransformer } else { if tx.cjsTransformer == nil { - tx.cjsTransformer = NewCommonJSModuleTransformer(tx.emitContext, tx.compilerOptions, tx.resolver, tx.metaDataProvider) + tx.cjsTransformer = NewCommonJSModuleTransformer(tx.emitContext, tx.compilerOptions, tx.resolver, tx.sourceFileMetaDataResolver) } transformer = tx.cjsTransformer } @@ -57,5 +57,5 @@ func (tx *ImpliedModuleTransformer) visitSourceFile(node *ast.SourceFile) *ast.N func (tx *ImpliedModuleTransformer) getEmitModuleFormatOfFile(node *ast.SourceFile) core.ModuleKind { // !!! host.getEmitModuleFormatOfFile? - return ast.GetEmitModuleFormatOfFileWorker(node, tx.compilerOptions, tx.metaDataProvider.GetSourceFileMetaData(node)) + return ast.GetEmitModuleFormatOfFileWorker(node, tx.compilerOptions, tx.sourceFileMetaDataResolver.GetSourceFileMetaData(node.Path())) } diff --git a/internal/transformers/importelision_test.go b/internal/transformers/importelision_test.go index 30d415f0b6..ed9ee6a4e6 100644 --- a/internal/transformers/importelision_test.go +++ b/internal/transformers/importelision_test.go @@ -4,60 +4,13 @@ import ( "testing" "github.com/microsoft/typescript-go/internal/ast" - "github.com/microsoft/typescript-go/internal/binder" "github.com/microsoft/typescript-go/internal/checker" "github.com/microsoft/typescript-go/internal/core" "github.com/microsoft/typescript-go/internal/printer" "github.com/microsoft/typescript-go/internal/testutil/emittestutil" "github.com/microsoft/typescript-go/internal/testutil/parsetestutil" - "github.com/microsoft/typescript-go/internal/tspath" ) -type fakeProgram struct { - singleThreaded bool - compilerOptions *core.CompilerOptions - files []*ast.SourceFile - getEmitModuleFormatOfFile func(sourceFile *ast.SourceFile) core.ModuleKind - getImpliedNodeFormatForEmit func(sourceFile *ast.SourceFile) core.ModuleKind - getResolvedModule func(currentSourceFile *ast.SourceFile, moduleReference string) *ast.SourceFile -} - -func (p *fakeProgram) Options() *core.CompilerOptions { - return p.compilerOptions -} - -func (p *fakeProgram) SourceFiles() []*ast.SourceFile { - return p.files -} - -func (p *fakeProgram) BindSourceFiles() { - wg := core.NewWorkGroup(p.singleThreaded) - for _, file := range p.files { - if !file.IsBound() { - wg.Queue(func() { - binder.BindSourceFile(file, p.compilerOptions) - }) - } - } - wg.RunAndWait() -} - -func (p *fakeProgram) GetEmitModuleFormatOfFile(sourceFile *ast.SourceFile) core.ModuleKind { - return p.getEmitModuleFormatOfFile(sourceFile) -} - -func (p *fakeProgram) GetImpliedNodeFormatForEmit(sourceFile *ast.SourceFile) core.ModuleKind { - return p.getImpliedNodeFormatForEmit(sourceFile) -} - -func (p *fakeProgram) GetResolvedModule(currentSourceFile *ast.SourceFile, moduleReference string) *ast.SourceFile { - return p.getResolvedModule(currentSourceFile, moduleReference) -} - -func (p *fakeProgram) GetCachedSourceFileMetaDatas() map[tspath.Path]*ast.SourceFileMetaData { - return map[tspath.Path]*ast.SourceFileMetaData{} -} - func TestImportElision(t *testing.T) { t.Parallel() data := []struct { @@ -106,23 +59,7 @@ func TestImportElision(t *testing.T) { compilerOptions := &core.CompilerOptions{} - c := checker.NewChecker(&fakeProgram{ - singleThreaded: true, - compilerOptions: compilerOptions, - files: files, - getEmitModuleFormatOfFile: func(sourceFile *ast.SourceFile) core.ModuleKind { - return core.ModuleKindESNext - }, - getImpliedNodeFormatForEmit: func(sourceFile *ast.SourceFile) core.ModuleKind { - return core.ModuleKindESNext - }, - getResolvedModule: func(currentSourceFile *ast.SourceFile, moduleReference string) *ast.SourceFile { - if currentSourceFile == file && moduleReference == "other" { - return other - } - return nil - }, - }) + c := checker.NewChecker(emittestutil.NewFakeProgram(true, compilerOptions, files, file, other)) emitResolver := c.GetEmitResolver(file, false /*skipDiagnostics*/) emitResolver.MarkLinkedReferencesRecursively(file) diff --git a/internal/transformers/metadataprovider.go b/internal/transformers/metadataprovider.go deleted file mode 100644 index cd97d9c1ed..0000000000 --- a/internal/transformers/metadataprovider.go +++ /dev/null @@ -1,21 +0,0 @@ -package transformers - -import "github.com/microsoft/typescript-go/internal/ast" - -type MetaDataProvider interface { - GetSourceFileMetaData(file *ast.SourceFile) *ast.SourceFileMetaData -} - -type metaDataProvider struct { - getSourceFileMetaData func(file *ast.SourceFile) *ast.SourceFileMetaData -} - -func NewMetaDataProvider(getSourceFileMetaData func(file *ast.SourceFile) *ast.SourceFileMetaData) MetaDataProvider { - return &metaDataProvider{ - getSourceFileMetaData: getSourceFileMetaData, - } -} - -func (r *metaDataProvider) GetSourceFileMetaData(file *ast.SourceFile) *ast.SourceFileMetaData { - return r.getSourceFileMetaData(file) -} From 30994254b130e90341716feb7b4f0654699ed7d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=B3=C3=B0i=20Karlsson?= Date: Wed, 19 Mar 2025 00:13:02 +0100 Subject: [PATCH 25/30] Revert moving to util and create smaller fakeSourceFileMetaDataProvider --- .../testutil/emittestutil/emittestutil.go | 67 ------------------- internal/transformers/commonjsmodule_test.go | 11 ++- internal/transformers/esmodule_test.go | 4 +- internal/transformers/importelision_test.go | 65 +++++++++++++++++- 4 files changed, 73 insertions(+), 74 deletions(-) diff --git a/internal/testutil/emittestutil/emittestutil.go b/internal/testutil/emittestutil/emittestutil.go index 862805c923..00fe83e3ef 100644 --- a/internal/testutil/emittestutil/emittestutil.go +++ b/internal/testutil/emittestutil/emittestutil.go @@ -5,11 +5,9 @@ import ( "testing" "github.com/microsoft/typescript-go/internal/ast" - "github.com/microsoft/typescript-go/internal/binder" "github.com/microsoft/typescript-go/internal/core" "github.com/microsoft/typescript-go/internal/printer" "github.com/microsoft/typescript-go/internal/testutil/parsetestutil" - "github.com/microsoft/typescript-go/internal/tspath" "gotest.tools/v3/assert" ) @@ -29,68 +27,3 @@ func CheckEmit(t *testing.T, emitContext *printer.EmitContext, file *ast.SourceF file2 := parsetestutil.ParseTypeScript(text, file.LanguageVariant == core.LanguageVariantJSX) parsetestutil.CheckDiagnosticsMessage(t, file2, "error on reparse: ") } - -type fakeProgram struct { - singleThreaded bool - compilerOptions *core.CompilerOptions - files []*ast.SourceFile - getEmitModuleFormatOfFile func(sourceFile *ast.SourceFile) core.ModuleKind - getImpliedNodeFormatForEmit func(sourceFile *ast.SourceFile) core.ModuleKind - getResolvedModule func(currentSourceFile *ast.SourceFile, moduleReference string) *ast.SourceFile -} - -func (p *fakeProgram) Options() *core.CompilerOptions { - return p.compilerOptions -} - -func (p *fakeProgram) SourceFiles() []*ast.SourceFile { - return p.files -} - -func (p *fakeProgram) BindSourceFiles() { - wg := core.NewWorkGroup(p.singleThreaded) - for _, file := range p.files { - if !file.IsBound() { - wg.Queue(func() { - binder.BindSourceFile(file, p.compilerOptions) - }) - } - } - wg.RunAndWait() -} - -func (p *fakeProgram) GetEmitModuleFormatOfFile(sourceFile *ast.SourceFile) core.ModuleKind { - return p.getEmitModuleFormatOfFile(sourceFile) -} - -func (p *fakeProgram) GetImpliedNodeFormatForEmit(sourceFile *ast.SourceFile) core.ModuleKind { - return p.getImpliedNodeFormatForEmit(sourceFile) -} - -func (p *fakeProgram) GetResolvedModule(currentSourceFile *ast.SourceFile, moduleReference string) *ast.SourceFile { - return p.getResolvedModule(currentSourceFile, moduleReference) -} - -func (p *fakeProgram) GetSourceFileMetaData(path tspath.Path) *ast.SourceFileMetaData { - return nil -} - -func NewFakeProgram(singleThreaded bool, compilerOptions *core.CompilerOptions, files []*ast.SourceFile, file, other *ast.SourceFile) *fakeProgram { - return &fakeProgram{ - singleThreaded: singleThreaded, - compilerOptions: compilerOptions, - files: files, - getEmitModuleFormatOfFile: func(sourceFile *ast.SourceFile) core.ModuleKind { - return core.ModuleKindESNext - }, - getImpliedNodeFormatForEmit: func(sourceFile *ast.SourceFile) core.ModuleKind { - return core.ModuleKindESNext - }, - getResolvedModule: func(currentSourceFile *ast.SourceFile, moduleReference string) *ast.SourceFile { - if currentSourceFile == file && moduleReference == "other" { - return other - } - return nil - }, - } -} diff --git a/internal/transformers/commonjsmodule_test.go b/internal/transformers/commonjsmodule_test.go index 9509e2afb7..36804811fc 100644 --- a/internal/transformers/commonjsmodule_test.go +++ b/internal/transformers/commonjsmodule_test.go @@ -9,8 +9,15 @@ import ( "github.com/microsoft/typescript-go/internal/printer" "github.com/microsoft/typescript-go/internal/testutil/emittestutil" "github.com/microsoft/typescript-go/internal/testutil/parsetestutil" + "github.com/microsoft/typescript-go/internal/tspath" ) +type fakeSourceFileMetaDataProvider struct{} + +func (p *fakeSourceFileMetaDataProvider) GetSourceFileMetaData(path tspath.Path) *ast.SourceFileMetaData { + return nil +} + func TestCommonJSModuleTransformer(t *testing.T) { t.Parallel() data := []struct { @@ -1017,20 +1024,18 @@ exports.a = a;`, file := parsetestutil.ParseTypeScript(rec.input, rec.jsx) parsetestutil.CheckDiagnostics(t, file) binder.BindSourceFile(file, &compilerOptions) - files := []*ast.SourceFile{file} var other *ast.SourceFile if len(rec.other) > 0 { other = parsetestutil.ParseTypeScript(rec.other, rec.jsx) parsetestutil.CheckDiagnostics(t, other) binder.BindSourceFile(other, &compilerOptions) - files = append(files, other) } emitContext := printer.NewEmitContext() resolver := binder.NewReferenceResolver(&compilerOptions, binder.ReferenceResolverHooks{}) - program := emittestutil.NewFakeProgram(true, &compilerOptions, files, file, other) + program := &fakeSourceFileMetaDataProvider{} file = NewRuntimeSyntaxTransformer(emitContext, &compilerOptions, resolver).TransformSourceFile(file) file = NewCommonJSModuleTransformer(emitContext, &compilerOptions, resolver, program).TransformSourceFile(file) emittestutil.CheckEmit(t, emitContext, file, rec.output) diff --git a/internal/transformers/esmodule_test.go b/internal/transformers/esmodule_test.go index 54750451a3..0e388fe4d2 100644 --- a/internal/transformers/esmodule_test.go +++ b/internal/transformers/esmodule_test.go @@ -223,20 +223,18 @@ var __rewriteRelativeImportExtension;`, file := parsetestutil.ParseTypeScript(rec.input, rec.jsx) parsetestutil.CheckDiagnostics(t, file) binder.BindSourceFile(file, &compilerOptions) - files := []*ast.SourceFile{file} var other *ast.SourceFile if len(rec.other) > 0 { other = parsetestutil.ParseTypeScript(rec.other, rec.jsx) parsetestutil.CheckDiagnostics(t, other) binder.BindSourceFile(other, &compilerOptions) - files = append(files, other) } emitContext := printer.NewEmitContext() resolver := binder.NewReferenceResolver(&compilerOptions, binder.ReferenceResolverHooks{}) - program := emittestutil.NewFakeProgram(true, &compilerOptions, files, file, other) + program := &fakeSourceFileMetaDataProvider{} file = NewRuntimeSyntaxTransformer(emitContext, &compilerOptions, resolver).TransformSourceFile(file) file = NewESModuleTransformer(emitContext, &compilerOptions, resolver, program).TransformSourceFile(file) diff --git a/internal/transformers/importelision_test.go b/internal/transformers/importelision_test.go index ed9ee6a4e6..9fae01b6fa 100644 --- a/internal/transformers/importelision_test.go +++ b/internal/transformers/importelision_test.go @@ -4,13 +4,60 @@ import ( "testing" "github.com/microsoft/typescript-go/internal/ast" + "github.com/microsoft/typescript-go/internal/binder" "github.com/microsoft/typescript-go/internal/checker" "github.com/microsoft/typescript-go/internal/core" "github.com/microsoft/typescript-go/internal/printer" "github.com/microsoft/typescript-go/internal/testutil/emittestutil" "github.com/microsoft/typescript-go/internal/testutil/parsetestutil" + "github.com/microsoft/typescript-go/internal/tspath" ) +type fakeProgram struct { + singleThreaded bool + compilerOptions *core.CompilerOptions + files []*ast.SourceFile + getEmitModuleFormatOfFile func(sourceFile *ast.SourceFile) core.ModuleKind + getImpliedNodeFormatForEmit func(sourceFile *ast.SourceFile) core.ModuleKind + getResolvedModule func(currentSourceFile *ast.SourceFile, moduleReference string) *ast.SourceFile +} + +func (p *fakeProgram) Options() *core.CompilerOptions { + return p.compilerOptions +} + +func (p *fakeProgram) SourceFiles() []*ast.SourceFile { + return p.files +} + +func (p *fakeProgram) BindSourceFiles() { + wg := core.NewWorkGroup(p.singleThreaded) + for _, file := range p.files { + if !file.IsBound() { + wg.Queue(func() { + binder.BindSourceFile(file, p.compilerOptions) + }) + } + } + wg.RunAndWait() +} + +func (p *fakeProgram) GetEmitModuleFormatOfFile(sourceFile *ast.SourceFile) core.ModuleKind { + return p.getEmitModuleFormatOfFile(sourceFile) +} + +func (p *fakeProgram) GetImpliedNodeFormatForEmit(sourceFile *ast.SourceFile) core.ModuleKind { + return p.getImpliedNodeFormatForEmit(sourceFile) +} + +func (p *fakeProgram) GetResolvedModule(currentSourceFile *ast.SourceFile, moduleReference string) *ast.SourceFile { + return p.getResolvedModule(currentSourceFile, moduleReference) +} + +func (p *fakeProgram) GetSourceFileMetaData(path tspath.Path) *ast.SourceFileMetaData { + return nil +} + func TestImportElision(t *testing.T) { t.Parallel() data := []struct { @@ -59,7 +106,23 @@ func TestImportElision(t *testing.T) { compilerOptions := &core.CompilerOptions{} - c := checker.NewChecker(emittestutil.NewFakeProgram(true, compilerOptions, files, file, other)) + c := checker.NewChecker(&fakeProgram{ + singleThreaded: true, + compilerOptions: compilerOptions, + files: files, + getEmitModuleFormatOfFile: func(sourceFile *ast.SourceFile) core.ModuleKind { + return core.ModuleKindESNext + }, + getImpliedNodeFormatForEmit: func(sourceFile *ast.SourceFile) core.ModuleKind { + return core.ModuleKindESNext + }, + getResolvedModule: func(currentSourceFile *ast.SourceFile, moduleReference string) *ast.SourceFile { + if currentSourceFile == file && moduleReference == "other" { + return other + } + return nil + }, + }) emitResolver := c.GetEmitResolver(file, false /*skipDiagnostics*/) emitResolver.MarkLinkedReferencesRecursively(file) From 1697b754f58d1da0ee10f15d67103d3d53d41896 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=B3=C3=B0i=20Karlsson?= Date: Wed, 19 Mar 2025 00:15:26 +0100 Subject: [PATCH 26/30] Realign naming to provider --- internal/compiler/emitter.go | 8 ++++---- internal/transformers/commonjsmodule.go | 10 +++++----- internal/transformers/esmodule.go | 8 ++++---- internal/transformers/externalmoduleinfo.go | 6 +++--- internal/transformers/impliedmodule.go | 12 ++++++------ 5 files changed, 22 insertions(+), 22 deletions(-) diff --git a/internal/compiler/emitter.go b/internal/compiler/emitter.go index 58c9c09232..657a0db6c3 100644 --- a/internal/compiler/emitter.go +++ b/internal/compiler/emitter.go @@ -38,13 +38,13 @@ func (e *emitter) emit() { e.emitBuildInfo(e.paths.buildInfoPath) } -func (e *emitter) getModuleTransformer(emitContext *printer.EmitContext, resolver binder.ReferenceResolver, sourceFileMetaDataResolver printer.SourceFileMetaDataProvider) *transformers.Transformer { +func (e *emitter) getModuleTransformer(emitContext *printer.EmitContext, resolver binder.ReferenceResolver, sourceFileMetaDataProvider printer.SourceFileMetaDataProvider) *transformers.Transformer { options := e.host.Options() switch options.GetEmitModuleKind() { case core.ModuleKindPreserve: // `ESModuleTransformer` contains logic for preserving CJS input syntax in `--module preserve` - return transformers.NewESModuleTransformer(emitContext, options, resolver, sourceFileMetaDataResolver) + return transformers.NewESModuleTransformer(emitContext, options, resolver, sourceFileMetaDataProvider) case core.ModuleKindESNext, core.ModuleKindES2022, @@ -53,10 +53,10 @@ func (e *emitter) getModuleTransformer(emitContext *printer.EmitContext, resolve core.ModuleKindNode16, core.ModuleKindNodeNext, core.ModuleKindCommonJS: - return transformers.NewImpliedModuleTransformer(emitContext, options, resolver, sourceFileMetaDataResolver) + return transformers.NewImpliedModuleTransformer(emitContext, options, resolver, sourceFileMetaDataProvider) default: - return transformers.NewCommonJSModuleTransformer(emitContext, options, resolver, sourceFileMetaDataResolver) + return transformers.NewCommonJSModuleTransformer(emitContext, options, resolver, sourceFileMetaDataProvider) } } diff --git a/internal/transformers/commonjsmodule.go b/internal/transformers/commonjsmodule.go index d17f7f2c91..74633360fc 100644 --- a/internal/transformers/commonjsmodule.go +++ b/internal/transformers/commonjsmodule.go @@ -18,7 +18,7 @@ type CommonJSModuleTransformer struct { assignmentPatternVisitor *ast.NodeVisitor // visits assignment patterns in a destructuring assignment compilerOptions *core.CompilerOptions resolver binder.ReferenceResolver - sourceFileMetaDataResolver printer.SourceFileMetaDataProvider + sourceFileMetaDataProvider printer.SourceFileMetaDataProvider moduleKind core.ModuleKind languageVersion core.ScriptTarget currentSourceFile *ast.SourceFile @@ -27,11 +27,11 @@ type CommonJSModuleTransformer struct { currentNode *ast.Node // used for ancestor tracking via pushNode/popNode to detect expression identifiers } -func NewCommonJSModuleTransformer(emitContext *printer.EmitContext, compilerOptions *core.CompilerOptions, resolver binder.ReferenceResolver, sourceFileMetaDataResolver printer.SourceFileMetaDataProvider) *Transformer { +func NewCommonJSModuleTransformer(emitContext *printer.EmitContext, compilerOptions *core.CompilerOptions, resolver binder.ReferenceResolver, sourceFileMetaDataProvider printer.SourceFileMetaDataProvider) *Transformer { if resolver == nil { resolver = binder.NewReferenceResolver(compilerOptions, binder.ReferenceResolverHooks{}) } - tx := &CommonJSModuleTransformer{compilerOptions: compilerOptions, resolver: resolver, sourceFileMetaDataResolver: sourceFileMetaDataResolver} + tx := &CommonJSModuleTransformer{compilerOptions: compilerOptions, resolver: resolver, sourceFileMetaDataProvider: sourceFileMetaDataProvider} tx.topLevelVisitor = emitContext.NewNodeVisitor(tx.visitTopLevel) tx.topLevelNestedVisitor = emitContext.NewNodeVisitor(tx.visitTopLevelNested) tx.discardedValueVisitor = emitContext.NewNodeVisitor(tx.visitDiscardedValue) @@ -363,7 +363,7 @@ func (tx *CommonJSModuleTransformer) transformCommonJSModule(node *ast.SourceFil result := tx.factory.UpdateSourceFile(node, statementList).AsSourceFile() tx.emitContext.AddEmitHelper(result.AsNode(), tx.emitContext.ReadEmitHelpers()...) - externalHelpersImportDeclaration := createExternalHelpersImportDeclarationIfNeeded(tx.emitContext, result, tx.compilerOptions, tx.sourceFileMetaDataResolver, false /*hasExportStarsToExportValues*/, false /*hasImportStar*/, false /*hasImportDefault*/) + externalHelpersImportDeclaration := createExternalHelpersImportDeclarationIfNeeded(tx.emitContext, result, tx.compilerOptions, tx.sourceFileMetaDataProvider, false /*hasExportStarsToExportValues*/, false /*hasImportStar*/, false /*hasImportDefault*/) if externalHelpersImportDeclaration != nil { prologue, rest := tx.emitContext.SplitStandardPrologue(result.Statements.Nodes) custom, rest := tx.emitContext.SplitCustomPrologue(rest) @@ -1681,7 +1681,7 @@ func (tx *CommonJSModuleTransformer) visitCallExpression(node *ast.CallExpressio func (tx *CommonJSModuleTransformer) shouldTransformImportCall() bool { // !!! host.shouldTransformImportCall? - return shouldTransformImportCallWorker(tx.currentSourceFile, tx.compilerOptions, tx.sourceFileMetaDataResolver.GetSourceFileMetaData(tx.currentSourceFile.Path())) + return shouldTransformImportCallWorker(tx.currentSourceFile, tx.compilerOptions, tx.sourceFileMetaDataProvider.GetSourceFileMetaData(tx.currentSourceFile.Path())) } func (tx *CommonJSModuleTransformer) visitImportCallExpression(node *ast.CallExpression, rewriteOrShim bool) *ast.Node { diff --git a/internal/transformers/esmodule.go b/internal/transformers/esmodule.go index 6da44fc5b0..bbbc0bbce7 100644 --- a/internal/transformers/esmodule.go +++ b/internal/transformers/esmodule.go @@ -13,7 +13,7 @@ type ESModuleTransformer struct { Transformer compilerOptions *core.CompilerOptions resolver binder.ReferenceResolver - sourceFileMetaDataResolver printer.SourceFileMetaDataProvider + sourceFileMetaDataProvider printer.SourceFileMetaDataProvider currentSourceFile *ast.SourceFile importRequireStatements *importRequireStatements helperNameSubstitutions map[string]*ast.IdentifierNode @@ -24,11 +24,11 @@ type importRequireStatements struct { requireHelperName *ast.IdentifierNode } -func NewESModuleTransformer(emitContext *printer.EmitContext, compilerOptions *core.CompilerOptions, resolver binder.ReferenceResolver, sourceFileMetaDataResolver printer.SourceFileMetaDataProvider) *Transformer { +func NewESModuleTransformer(emitContext *printer.EmitContext, compilerOptions *core.CompilerOptions, resolver binder.ReferenceResolver, sourceFileMetaDataProvider printer.SourceFileMetaDataProvider) *Transformer { if resolver == nil { resolver = binder.NewReferenceResolver(compilerOptions, binder.ReferenceResolverHooks{}) } - tx := &ESModuleTransformer{compilerOptions: compilerOptions, resolver: resolver, sourceFileMetaDataResolver: sourceFileMetaDataResolver} + tx := &ESModuleTransformer{compilerOptions: compilerOptions, resolver: resolver, sourceFileMetaDataProvider: sourceFileMetaDataProvider} return tx.newTransformer(tx.visit, emitContext) } @@ -65,7 +65,7 @@ func (tx *ESModuleTransformer) visitSourceFile(node *ast.SourceFile) *ast.Node { result := tx.visitor.VisitEachChild(node.AsNode()).AsSourceFile() tx.emitContext.AddEmitHelper(result.AsNode(), tx.emitContext.ReadEmitHelpers()...) - externalHelpersImportDeclaration := createExternalHelpersImportDeclarationIfNeeded(tx.emitContext, result, tx.compilerOptions, tx.sourceFileMetaDataResolver, false /*hasExportStarsToExportValues*/, false /*hasImportStar*/, false /*hasImportDefault*/) + externalHelpersImportDeclaration := createExternalHelpersImportDeclarationIfNeeded(tx.emitContext, result, tx.compilerOptions, tx.sourceFileMetaDataProvider, false /*hasExportStarsToExportValues*/, false /*hasImportStar*/, false /*hasImportDefault*/) if externalHelpersImportDeclaration != nil || tx.importRequireStatements != nil { prologue, rest := tx.emitContext.SplitStandardPrologue(result.Statements.Nodes) statements := slices.Clone(prologue) diff --git a/internal/transformers/externalmoduleinfo.go b/internal/transformers/externalmoduleinfo.go index ee5eef2790..e7da2c1fd7 100644 --- a/internal/transformers/externalmoduleinfo.go +++ b/internal/transformers/externalmoduleinfo.go @@ -246,10 +246,10 @@ func (c *externalModuleInfoCollector) collectExportedVariableInfo(decl *ast.Node const externalHelpersModuleNameText = "tslib" -func createExternalHelpersImportDeclarationIfNeeded(emitContext *printer.EmitContext, sourceFile *ast.SourceFile, compilerOptions *core.CompilerOptions, sourceFileMetaDataResolver printer.SourceFileMetaDataProvider, hasExportStarsToExportValues bool, hasImportStar bool, hasImportDefault bool) *ast.Node /*ImportDeclaration | ImportEqualsDeclaration*/ { +func createExternalHelpersImportDeclarationIfNeeded(emitContext *printer.EmitContext, sourceFile *ast.SourceFile, compilerOptions *core.CompilerOptions, sourceFileMetaDataProvider printer.SourceFileMetaDataProvider, hasExportStarsToExportValues bool, hasImportStar bool, hasImportDefault bool) *ast.Node /*ImportDeclaration | ImportEqualsDeclaration*/ { if compilerOptions.ImportHelpers.IsTrue() && ast.IsEffectiveExternalModule(sourceFile, compilerOptions) { moduleKind := compilerOptions.GetEmitModuleKind() - impliedModuleKind := ast.GetImpliedNodeFormatForEmitWorker(sourceFile.FileName(), compilerOptions, sourceFileMetaDataResolver.GetSourceFileMetaData(sourceFile.Path())) + impliedModuleKind := ast.GetImpliedNodeFormatForEmitWorker(sourceFile.FileName(), compilerOptions, sourceFileMetaDataProvider.GetSourceFileMetaData(sourceFile.Path())) helpers := getImportedHelpers(emitContext, sourceFile) if (moduleKind >= core.ModuleKindES2015 && moduleKind <= core.ModuleKindESNext) || impliedModuleKind == core.ModuleKindESNext || @@ -291,7 +291,7 @@ func createExternalHelpersImportDeclarationIfNeeded(emitContext *printer.EmitCon } } else { // When we emit to a non-ES module, generate a synthetic `import tslib = require("tslib")` to be further transformed. - externalHelpersModuleName := getOrCreateExternalHelpersModuleNameIfNeeded(emitContext, sourceFile, compilerOptions, helpers, hasExportStarsToExportValues, hasImportStar || hasImportDefault, sourceFileMetaDataResolver.GetSourceFileMetaData(sourceFile.Path())) + externalHelpersModuleName := getOrCreateExternalHelpersModuleNameIfNeeded(emitContext, sourceFile, compilerOptions, helpers, hasExportStarsToExportValues, hasImportStar || hasImportDefault, sourceFileMetaDataProvider.GetSourceFileMetaData(sourceFile.Path())) if externalHelpersModuleName != nil { externalHelpersImportDeclaration := emitContext.Factory.NewImportEqualsDeclaration( nil, /*modifiers*/ diff --git a/internal/transformers/impliedmodule.go b/internal/transformers/impliedmodule.go index 9913696f2f..b23018b8bd 100644 --- a/internal/transformers/impliedmodule.go +++ b/internal/transformers/impliedmodule.go @@ -11,16 +11,16 @@ type ImpliedModuleTransformer struct { Transformer compilerOptions *core.CompilerOptions resolver binder.ReferenceResolver - sourceFileMetaDataResolver printer.SourceFileMetaDataProvider + sourceFileMetaDataProvider printer.SourceFileMetaDataProvider cjsTransformer *Transformer esmTransformer *Transformer } -func NewImpliedModuleTransformer(emitContext *printer.EmitContext, compilerOptions *core.CompilerOptions, resolver binder.ReferenceResolver, sourceFileMetaDataResolver printer.SourceFileMetaDataProvider) *Transformer { +func NewImpliedModuleTransformer(emitContext *printer.EmitContext, compilerOptions *core.CompilerOptions, resolver binder.ReferenceResolver, sourceFileMetaDataProvider printer.SourceFileMetaDataProvider) *Transformer { if resolver == nil { resolver = binder.NewReferenceResolver(compilerOptions, binder.ReferenceResolverHooks{}) } - tx := &ImpliedModuleTransformer{compilerOptions: compilerOptions, resolver: resolver, sourceFileMetaDataResolver: sourceFileMetaDataResolver} + tx := &ImpliedModuleTransformer{compilerOptions: compilerOptions, resolver: resolver, sourceFileMetaDataProvider: sourceFileMetaDataProvider} return tx.newTransformer(tx.visit, emitContext) } @@ -42,12 +42,12 @@ func (tx *ImpliedModuleTransformer) visitSourceFile(node *ast.SourceFile) *ast.N var transformer *Transformer if format >= core.ModuleKindES2015 { if tx.esmTransformer == nil { - tx.esmTransformer = NewESModuleTransformer(tx.emitContext, tx.compilerOptions, tx.resolver, tx.sourceFileMetaDataResolver) + tx.esmTransformer = NewESModuleTransformer(tx.emitContext, tx.compilerOptions, tx.resolver, tx.sourceFileMetaDataProvider) } transformer = tx.esmTransformer } else { if tx.cjsTransformer == nil { - tx.cjsTransformer = NewCommonJSModuleTransformer(tx.emitContext, tx.compilerOptions, tx.resolver, tx.sourceFileMetaDataResolver) + tx.cjsTransformer = NewCommonJSModuleTransformer(tx.emitContext, tx.compilerOptions, tx.resolver, tx.sourceFileMetaDataProvider) } transformer = tx.cjsTransformer } @@ -57,5 +57,5 @@ func (tx *ImpliedModuleTransformer) visitSourceFile(node *ast.SourceFile) *ast.N func (tx *ImpliedModuleTransformer) getEmitModuleFormatOfFile(node *ast.SourceFile) core.ModuleKind { // !!! host.getEmitModuleFormatOfFile? - return ast.GetEmitModuleFormatOfFileWorker(node, tx.compilerOptions, tx.sourceFileMetaDataResolver.GetSourceFileMetaData(node.Path())) + return ast.GetEmitModuleFormatOfFileWorker(node, tx.compilerOptions, tx.sourceFileMetaDataProvider.GetSourceFileMetaData(node.Path())) } From d86780ddb0e4e00f63b18fc7b54250619adbef17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=B3=C3=B0i=20Karlsson?= Date: Wed, 19 Mar 2025 00:30:42 +0100 Subject: [PATCH 27/30] Remove unnecessary struct --- internal/printer/sourcefilemetadataprovider.go | 8 -------- 1 file changed, 8 deletions(-) diff --git a/internal/printer/sourcefilemetadataprovider.go b/internal/printer/sourcefilemetadataprovider.go index d5bf922a33..fbecce9280 100644 --- a/internal/printer/sourcefilemetadataprovider.go +++ b/internal/printer/sourcefilemetadataprovider.go @@ -8,11 +8,3 @@ import ( type SourceFileMetaDataProvider interface { GetSourceFileMetaData(path tspath.Path) *ast.SourceFileMetaData } - -type sourceFileMetadataProvider struct { - getSourceFileMetaData func(path tspath.Path) *ast.SourceFileMetaData -} - -func (r *sourceFileMetadataProvider) GetSourceFileMetaData(path tspath.Path) *ast.SourceFileMetaData { - return r.getSourceFileMetaData(path) -} From ac7149097344d8b08fa16199db2e53299708d565 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=B3=C3=B0i=20Karlsson?= Date: Wed, 19 Mar 2025 00:56:24 +0100 Subject: [PATCH 28/30] Fix henceforth "load"SourceFileMetaData, spacings and leftover --- internal/compiler/fileloader.go | 8 +++++--- internal/compiler/host.go | 1 - internal/parser/parser.go | 1 - internal/testutil/harnessutil/harnessutil.go | 1 - internal/transformers/commonjsmodule_test.go | 2 +- internal/transformers/esmodule_test.go | 1 - 6 files changed, 6 insertions(+), 8 deletions(-) diff --git a/internal/compiler/fileloader.go b/internal/compiler/fileloader.go index fa89613430..4972069865 100644 --- a/internal/compiler/fileloader.go +++ b/internal/compiler/fileloader.go @@ -224,12 +224,12 @@ func (t *parseTask) start(loader *fileLoader) { }) } -func (p *fileLoader) CacheSourceFileMetaData(path tspath.Path) { +func (p *fileLoader) loadSourceFileMetaData(path tspath.Path) { p.sourceFileMetaDatasMutex.Lock() - defer p.sourceFileMetaDatasMutex.Unlock() if _, ok := p.sourceFileMetaDatas[path]; ok { return } + p.sourceFileMetaDatasMutex.Unlock() if p.sourceFileMetaDatas == nil { p.sourceFileMetaDatas = make(map[tspath.Path]*ast.SourceFileMetaData) @@ -242,13 +242,15 @@ func (p *fileLoader) CacheSourceFileMetaData(path tspath.Path) { ImpliedNodeFormat: impliedNodeFormat, } + p.sourceFileMetaDatasMutex.Lock() p.sourceFileMetaDatas[path] = metadata + p.sourceFileMetaDatasMutex.Unlock() } func (p *fileLoader) parseSourceFile(fileName string) *ast.SourceFile { path := tspath.ToPath(fileName, p.host.GetCurrentDirectory(), p.host.FS().UseCaseSensitiveFileNames()) sourceFile := p.host.GetSourceFile(fileName, path, p.compilerOptions.GetEmitScriptTarget()) - p.CacheSourceFileMetaData(path) + p.loadSourceFileMetaData(path) return sourceFile } diff --git a/internal/compiler/host.go b/internal/compiler/host.go index f4bb0a7262..073be18e69 100644 --- a/internal/compiler/host.go +++ b/internal/compiler/host.go @@ -73,6 +73,5 @@ func (h *compilerHost) GetSourceFile(fileName string, path tspath.Path, language if tspath.FileExtensionIs(fileName, tspath.ExtensionJson) { return parser.ParseJSONText(fileName, path, text) } - return parser.ParseSourceFile(fileName, path, text, languageVersion, scanner.JSDocParsingModeParseForTypeErrors) } diff --git a/internal/parser/parser.go b/internal/parser/parser.go index 7d932a65c9..0c771752d5 100644 --- a/internal/parser/parser.go +++ b/internal/parser/parser.go @@ -198,7 +198,6 @@ func (p *Parser) initializeState(fileName string, path tspath.Path, sourceText s default: p.contextFlags = ast.NodeFlagsNone } - p.scanner.SetText(p.sourceText) p.scanner.SetOnError(p.scanError) p.scanner.SetScriptTarget(p.languageVersion) diff --git a/internal/testutil/harnessutil/harnessutil.go b/internal/testutil/harnessutil/harnessutil.go index c622490acc..85fe7ea10b 100644 --- a/internal/testutil/harnessutil/harnessutil.go +++ b/internal/testutil/harnessutil/harnessutil.go @@ -399,7 +399,6 @@ func (h *cachedCompilerHost) GetSourceFile(fileName string, path tspath.Path, la fileName string path tspath.Path languageVersion core.ScriptTarget - packageJsonType string text string } diff --git a/internal/transformers/commonjsmodule_test.go b/internal/transformers/commonjsmodule_test.go index 36804811fc..cf12798064 100644 --- a/internal/transformers/commonjsmodule_test.go +++ b/internal/transformers/commonjsmodule_test.go @@ -1034,8 +1034,8 @@ exports.a = a;`, emitContext := printer.NewEmitContext() resolver := binder.NewReferenceResolver(&compilerOptions, binder.ReferenceResolverHooks{}) - program := &fakeSourceFileMetaDataProvider{} + file = NewRuntimeSyntaxTransformer(emitContext, &compilerOptions, resolver).TransformSourceFile(file) file = NewCommonJSModuleTransformer(emitContext, &compilerOptions, resolver, program).TransformSourceFile(file) emittestutil.CheckEmit(t, emitContext, file, rec.output) diff --git a/internal/transformers/esmodule_test.go b/internal/transformers/esmodule_test.go index 0e388fe4d2..ff1eef01e1 100644 --- a/internal/transformers/esmodule_test.go +++ b/internal/transformers/esmodule_test.go @@ -233,7 +233,6 @@ var __rewriteRelativeImportExtension;`, emitContext := printer.NewEmitContext() resolver := binder.NewReferenceResolver(&compilerOptions, binder.ReferenceResolverHooks{}) - program := &fakeSourceFileMetaDataProvider{} file = NewRuntimeSyntaxTransformer(emitContext, &compilerOptions, resolver).TransformSourceFile(file) From 286beed7d7ca5e27b0ac424a721f780e8b38ddba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=B3=C3=B0i=20Karlsson?= Date: Wed, 19 Mar 2025 01:02:56 +0100 Subject: [PATCH 29/30] Switch to RWMutex and include map creation in w lock --- internal/compiler/fileloader.go | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/internal/compiler/fileloader.go b/internal/compiler/fileloader.go index 4972069865..ad2c6bf9e3 100644 --- a/internal/compiler/fileloader.go +++ b/internal/compiler/fileloader.go @@ -23,7 +23,7 @@ type fileLoader struct { resolvedModulesMutex sync.Mutex resolvedModules map[tspath.Path]module.ModeAwareCache[*module.ResolvedModule] - sourceFileMetaDatasMutex sync.Mutex + sourceFileMetaDatasMutex sync.RWMutex sourceFileMetaDatas map[tspath.Path]*ast.SourceFileMetaData mu sync.Mutex @@ -225,15 +225,11 @@ func (t *parseTask) start(loader *fileLoader) { } func (p *fileLoader) loadSourceFileMetaData(path tspath.Path) { - p.sourceFileMetaDatasMutex.Lock() + p.sourceFileMetaDatasMutex.RLock() if _, ok := p.sourceFileMetaDatas[path]; ok { return } - p.sourceFileMetaDatasMutex.Unlock() - - if p.sourceFileMetaDatas == nil { - p.sourceFileMetaDatas = make(map[tspath.Path]*ast.SourceFileMetaData) - } + p.sourceFileMetaDatasMutex.RUnlock() packageJsonType := p.resolver.GetPackageJsonTypeIfApplicable(string(path)) impliedNodeFormat := ast.GetImpliedNodeFormatForFile(string(path), packageJsonType) @@ -243,8 +239,11 @@ func (p *fileLoader) loadSourceFileMetaData(path tspath.Path) { } p.sourceFileMetaDatasMutex.Lock() + defer p.sourceFileMetaDatasMutex.Unlock() + if p.sourceFileMetaDatas == nil { + p.sourceFileMetaDatas = make(map[tspath.Path]*ast.SourceFileMetaData) + } p.sourceFileMetaDatas[path] = metadata - p.sourceFileMetaDatasMutex.Unlock() } func (p *fileLoader) parseSourceFile(fileName string) *ast.SourceFile { From ed015b30a3c3486c3cd22488c7d56a644bc0fe63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=B3=C3=B0i=20Karlsson?= Date: Wed, 19 Mar 2025 01:22:50 +0100 Subject: [PATCH 30/30] Fix deadlock --- internal/compiler/fileloader.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/internal/compiler/fileloader.go b/internal/compiler/fileloader.go index ad2c6bf9e3..62e4f71c24 100644 --- a/internal/compiler/fileloader.go +++ b/internal/compiler/fileloader.go @@ -226,10 +226,11 @@ func (t *parseTask) start(loader *fileLoader) { func (p *fileLoader) loadSourceFileMetaData(path tspath.Path) { p.sourceFileMetaDatasMutex.RLock() - if _, ok := p.sourceFileMetaDatas[path]; ok { + _, ok := p.sourceFileMetaDatas[path] + p.sourceFileMetaDatasMutex.RUnlock() + if ok { return } - p.sourceFileMetaDatasMutex.RUnlock() packageJsonType := p.resolver.GetPackageJsonTypeIfApplicable(string(path)) impliedNodeFormat := ast.GetImpliedNodeFormatForFile(string(path), packageJsonType)