diff --git a/tsc/internal/transformers/tstransforms/runtimesyntax.go b/tsc/internal/transformers/tstransforms/runtimesyntax.go index 360a39e323b86..fa413d1f59a03 100644 --- a/tsc/internal/transformers/tstransforms/runtimesyntax.go +++ b/tsc/internal/transformers/tstransforms/runtimesyntax.go @@ -557,6 +557,11 @@ func (tx *RuntimeSyntaxTransformer) visitImportEqualsDeclaration(node *ast.Impor } moduleReference := tx.Factory().CreateExpressionFromEntityName(node.ModuleReference) + if ast.IsIdentifier(moduleReference) { + moduleReference = tx.visitExpressionIdentifier(moduleReference) + } else { + moduleReference = tx.Visitor().VisitNode(moduleReference) + } tx.EmitContext().SetEmitFlags(moduleReference, printer.EFNoComments|printer.EFNoNestedComments) if !tx.isExportOfNamespace(node.AsNode()) { // export var ${name} = ${moduleReference}; diff --git a/tsc/testdata/baselines/reference/conformance/importAliasMergedNamespace.js b/tsc/testdata/baselines/reference/conformance/importAliasMergedNamespace.js new file mode 100644 index 0000000000000..4ccad04abab4a --- /dev/null +++ b/tsc/testdata/baselines/reference/conformance/importAliasMergedNamespace.js @@ -0,0 +1,87 @@ +//// [tests/cases/conformance/internalModules/importDeclarations/importAliasMergedNamespace.ts] //// + +//// [importAliasMergedNamespace.ts] +namespace N { + export namespace M { + export class C {} + } + + import Local = M.C; + new Local(); +} + +namespace N { + import A = M.C; + new A(); + + import B = M; + new B.C(); + + export import D = M.C; + new D(); + + export import E = M; + new E.C(); + + import Explicit = N.M.C; + new Explicit(); +} + +namespace Outer { + export namespace Inner { + export namespace M { + export class C {} + } + } +} + +namespace Outer.Inner { + import A = M.C; + new A(); +} + + +//// [importAliasMergedNamespace.js] +"use strict"; +var N; +(function (N) { + let M; + (function (M) { + class C { + } + M.C = C; + })(M = N.M || (N.M = {})); + var Local = M.C; + new Local(); +})(N || (N = {})); +(function (N) { + var A = N.M.C; + new A(); + var B = N.M; + new B.C(); + N.D = N.M.C; + new N.D(); + N.E = N.M; + new N.E.C(); + var Explicit = N.M.C; + new Explicit(); +})(N || (N = {})); +var Outer; +(function (Outer) { + let Inner; + (function (Inner) { + let M; + (function (M) { + class C { + } + M.C = C; + })(M = Inner.M || (Inner.M = {})); + })(Inner = Outer.Inner || (Outer.Inner = {})); +})(Outer || (Outer = {})); +(function (Outer) { + var Inner; + (function (Inner) { + var A = Inner.M.C; + new A(); + })(Inner = Outer.Inner || (Outer.Inner = {})); +})(Outer || (Outer = {})); diff --git a/tsc/testdata/baselines/reference/conformance/importAliasMergedNamespace.symbols b/tsc/testdata/baselines/reference/conformance/importAliasMergedNamespace.symbols new file mode 100644 index 0000000000000..131c4b9bec98d --- /dev/null +++ b/tsc/testdata/baselines/reference/conformance/importAliasMergedNamespace.symbols @@ -0,0 +1,97 @@ +//// [tests/cases/conformance/internalModules/importDeclarations/importAliasMergedNamespace.ts] //// + +=== importAliasMergedNamespace.ts === +namespace N { +>N : Symbol(N, Decl(importAliasMergedNamespace.ts, 0, 0), Decl(importAliasMergedNamespace.ts, 7, 1)) + + export namespace M { +>M : Symbol(M, Decl(importAliasMergedNamespace.ts, 0, 13)) + + export class C {} +>C : Symbol(C, Decl(importAliasMergedNamespace.ts, 1, 24)) + } + + import Local = M.C; +>Local : Symbol(Local, Decl(importAliasMergedNamespace.ts, 3, 5)) +>M : Symbol(M, Decl(importAliasMergedNamespace.ts, 0, 13)) +>C : Symbol(Local, Decl(importAliasMergedNamespace.ts, 1, 24)) + + new Local(); +>Local : Symbol(Local, Decl(importAliasMergedNamespace.ts, 3, 5)) +} + +namespace N { +>N : Symbol(N, Decl(importAliasMergedNamespace.ts, 0, 0), Decl(importAliasMergedNamespace.ts, 7, 1)) + + import A = M.C; +>A : Symbol(A, Decl(importAliasMergedNamespace.ts, 9, 13)) +>M : Symbol(B, Decl(importAliasMergedNamespace.ts, 0, 13)) +>C : Symbol(A, Decl(importAliasMergedNamespace.ts, 1, 24)) + + new A(); +>A : Symbol(A, Decl(importAliasMergedNamespace.ts, 9, 13)) + + import B = M; +>B : Symbol(B, Decl(importAliasMergedNamespace.ts, 11, 12)) +>M : Symbol(B, Decl(importAliasMergedNamespace.ts, 0, 13)) + + new B.C(); +>B.C : Symbol(A, Decl(importAliasMergedNamespace.ts, 1, 24)) +>B : Symbol(B, Decl(importAliasMergedNamespace.ts, 11, 12)) +>C : Symbol(A, Decl(importAliasMergedNamespace.ts, 1, 24)) + + export import D = M.C; +>D : Symbol(D, Decl(importAliasMergedNamespace.ts, 14, 14)) +>M : Symbol(B, Decl(importAliasMergedNamespace.ts, 0, 13)) +>C : Symbol(A, Decl(importAliasMergedNamespace.ts, 1, 24)) + + new D(); +>D : Symbol(D, Decl(importAliasMergedNamespace.ts, 14, 14)) + + export import E = M; +>E : Symbol(E, Decl(importAliasMergedNamespace.ts, 17, 12)) +>M : Symbol(B, Decl(importAliasMergedNamespace.ts, 0, 13)) + + new E.C(); +>E.C : Symbol(A, Decl(importAliasMergedNamespace.ts, 1, 24)) +>E : Symbol(E, Decl(importAliasMergedNamespace.ts, 17, 12)) +>C : Symbol(A, Decl(importAliasMergedNamespace.ts, 1, 24)) + + import Explicit = N.M.C; +>Explicit : Symbol(Explicit, Decl(importAliasMergedNamespace.ts, 20, 14)) +>N : Symbol(N, Decl(importAliasMergedNamespace.ts, 0, 0), Decl(importAliasMergedNamespace.ts, 7, 1)) +>M : Symbol(B, Decl(importAliasMergedNamespace.ts, 0, 13)) +>C : Symbol(A, Decl(importAliasMergedNamespace.ts, 1, 24)) + + new Explicit(); +>Explicit : Symbol(Explicit, Decl(importAliasMergedNamespace.ts, 20, 14)) +} + +namespace Outer { +>Outer : Symbol(Outer, Decl(importAliasMergedNamespace.ts, 24, 1), Decl(importAliasMergedNamespace.ts, 32, 1)) + + export namespace Inner { +>Inner : Symbol(Inner, Decl(importAliasMergedNamespace.ts, 26, 17), Decl(importAliasMergedNamespace.ts, 34, 16)) + + export namespace M { +>M : Symbol(M, Decl(importAliasMergedNamespace.ts, 27, 28)) + + export class C {} +>C : Symbol(C, Decl(importAliasMergedNamespace.ts, 28, 28)) + } + } +} + +namespace Outer.Inner { +>Outer : Symbol(Outer, Decl(importAliasMergedNamespace.ts, 24, 1), Decl(importAliasMergedNamespace.ts, 32, 1)) +>Inner : Symbol(Inner, Decl(importAliasMergedNamespace.ts, 26, 17), Decl(importAliasMergedNamespace.ts, 34, 16)) + + import A = M.C; +>A : Symbol(A, Decl(importAliasMergedNamespace.ts, 34, 23)) +>M : Symbol(M, Decl(importAliasMergedNamespace.ts, 27, 28)) +>C : Symbol(A, Decl(importAliasMergedNamespace.ts, 28, 28)) + + new A(); +>A : Symbol(A, Decl(importAliasMergedNamespace.ts, 34, 23)) +} + diff --git a/tsc/testdata/baselines/reference/conformance/importAliasMergedNamespace.types b/tsc/testdata/baselines/reference/conformance/importAliasMergedNamespace.types new file mode 100644 index 0000000000000..7dea5f21bf109 --- /dev/null +++ b/tsc/testdata/baselines/reference/conformance/importAliasMergedNamespace.types @@ -0,0 +1,104 @@ +//// [tests/cases/conformance/internalModules/importDeclarations/importAliasMergedNamespace.ts] //// + +=== importAliasMergedNamespace.ts === +namespace N { +>N : typeof N + + export namespace M { +>M : typeof M + + export class C {} +>C : C + } + + import Local = M.C; +>Local : typeof Local +>M : typeof M +>C : Local + + new Local(); +>new Local() : Local +>Local : typeof Local +} + +namespace N { +>N : typeof N + + import A = M.C; +>A : typeof A +>M : typeof B +>C : A + + new A(); +>new A() : A +>A : typeof A + + import B = M; +>B : typeof B +>M : typeof B + + new B.C(); +>new B.C() : A +>B.C : typeof A +>B : typeof B +>C : typeof A + + export import D = M.C; +>D : typeof A +>M : typeof B +>C : A + + new D(); +>new D() : A +>D : typeof A + + export import E = M; +>E : typeof B +>M : typeof B + + new E.C(); +>new E.C() : A +>E.C : typeof A +>E : typeof B +>C : typeof A + + import Explicit = N.M.C; +>Explicit : typeof A +>N : typeof N +>M : typeof B +>C : A + + new Explicit(); +>new Explicit() : A +>Explicit : typeof A +} + +namespace Outer { +>Outer : typeof Outer + + export namespace Inner { +>Inner : typeof Inner + + export namespace M { +>M : typeof M + + export class C {} +>C : C + } + } +} + +namespace Outer.Inner { +>Outer : typeof Outer +>Inner : typeof Inner + + import A = M.C; +>A : typeof A +>M : typeof M +>C : A + + new A(); +>new A() : A +>A : typeof A +} + diff --git a/tsc/testdata/tests/cases/conformance/internalModules/importDeclarations/importAliasMergedNamespace.ts b/tsc/testdata/tests/cases/conformance/internalModules/importDeclarations/importAliasMergedNamespace.ts new file mode 100644 index 0000000000000..e625577d740fd --- /dev/null +++ b/tsc/testdata/tests/cases/conformance/internalModules/importDeclarations/importAliasMergedNamespace.ts @@ -0,0 +1,42 @@ +// @strict: true +// @target: es2022 +// @module: commonjs + +namespace N { + export namespace M { + export class C {} + } + + import Local = M.C; + new Local(); +} + +namespace N { + import A = M.C; + new A(); + + import B = M; + new B.C(); + + export import D = M.C; + new D(); + + export import E = M; + new E.C(); + + import Explicit = N.M.C; + new Explicit(); +} + +namespace Outer { + export namespace Inner { + export namespace M { + export class C {} + } + } +} + +namespace Outer.Inner { + import A = M.C; + new A(); +}