diff --git a/src/compiler/transformers/module/system.ts b/src/compiler/transformers/module/system.ts index d4bae723052..ca55cb3a9d1 100644 --- a/src/compiler/transformers/module/system.ts +++ b/src/compiler/transformers/module/system.ts @@ -913,6 +913,12 @@ namespace ts { delete deferredExports[id]; return append(statements, node); } + else { + const original = getOriginalNode(node); + if (isModuleOrEnumDeclaration(original)) { + return append(appendExportsOfDeclaration(statements, original), node); + } + } return node; } diff --git a/tests/baselines/reference/systemNamespaceAliasEmit.js b/tests/baselines/reference/systemNamespaceAliasEmit.js new file mode 100644 index 00000000000..923b7db875a --- /dev/null +++ b/tests/baselines/reference/systemNamespaceAliasEmit.js @@ -0,0 +1,34 @@ +//// [systemNamespaceAliasEmit.ts] +namespace ns { + const value = 1; +} + +enum AnEnum { + ONE, + TWO +} + +export {ns, AnEnum, ns as FooBar, AnEnum as BarEnum}; + +//// [systemNamespaceAliasEmit.js] +System.register([], function (exports_1, context_1) { + "use strict"; + var __moduleName = context_1 && context_1.id; + var ns, AnEnum; + return { + setters: [], + execute: function () { + (function (ns) { + var value = 1; + })(ns || (ns = {})); + exports_1("ns", ns); + exports_1("FooBar", ns); + (function (AnEnum) { + AnEnum[AnEnum["ONE"] = 0] = "ONE"; + AnEnum[AnEnum["TWO"] = 1] = "TWO"; + })(AnEnum || (AnEnum = {})); + exports_1("AnEnum", AnEnum); + exports_1("BarEnum", AnEnum); + } + }; +}); diff --git a/tests/baselines/reference/systemNamespaceAliasEmit.symbols b/tests/baselines/reference/systemNamespaceAliasEmit.symbols new file mode 100644 index 00000000000..89ac66a624d --- /dev/null +++ b/tests/baselines/reference/systemNamespaceAliasEmit.symbols @@ -0,0 +1,26 @@ +=== tests/cases/compiler/systemNamespaceAliasEmit.ts === +namespace ns { +>ns : Symbol(ns, Decl(systemNamespaceAliasEmit.ts, 0, 0)) + + const value = 1; +>value : Symbol(value, Decl(systemNamespaceAliasEmit.ts, 1, 9)) +} + +enum AnEnum { +>AnEnum : Symbol(AnEnum, Decl(systemNamespaceAliasEmit.ts, 2, 1)) + + ONE, +>ONE : Symbol(BarEnum.ONE, Decl(systemNamespaceAliasEmit.ts, 4, 13)) + + TWO +>TWO : Symbol(BarEnum.TWO, Decl(systemNamespaceAliasEmit.ts, 5, 8)) +} + +export {ns, AnEnum, ns as FooBar, AnEnum as BarEnum}; +>ns : Symbol(ns, Decl(systemNamespaceAliasEmit.ts, 9, 8)) +>AnEnum : Symbol(AnEnum, Decl(systemNamespaceAliasEmit.ts, 9, 11)) +>ns : Symbol(FooBar, Decl(systemNamespaceAliasEmit.ts, 9, 19)) +>FooBar : Symbol(FooBar, Decl(systemNamespaceAliasEmit.ts, 9, 19)) +>AnEnum : Symbol(BarEnum, Decl(systemNamespaceAliasEmit.ts, 9, 33)) +>BarEnum : Symbol(BarEnum, Decl(systemNamespaceAliasEmit.ts, 9, 33)) + diff --git a/tests/baselines/reference/systemNamespaceAliasEmit.types b/tests/baselines/reference/systemNamespaceAliasEmit.types new file mode 100644 index 00000000000..ba82550b050 --- /dev/null +++ b/tests/baselines/reference/systemNamespaceAliasEmit.types @@ -0,0 +1,27 @@ +=== tests/cases/compiler/systemNamespaceAliasEmit.ts === +namespace ns { +>ns : typeof ns + + const value = 1; +>value : 1 +>1 : 1 +} + +enum AnEnum { +>AnEnum : AnEnum + + ONE, +>ONE : AnEnum.ONE + + TWO +>TWO : AnEnum.TWO +} + +export {ns, AnEnum, ns as FooBar, AnEnum as BarEnum}; +>ns : typeof ns +>AnEnum : typeof AnEnum +>ns : typeof ns +>FooBar : typeof ns +>AnEnum : typeof AnEnum +>BarEnum : typeof AnEnum + diff --git a/tests/cases/compiler/systemNamespaceAliasEmit.ts b/tests/cases/compiler/systemNamespaceAliasEmit.ts new file mode 100644 index 00000000000..3672c557e24 --- /dev/null +++ b/tests/cases/compiler/systemNamespaceAliasEmit.ts @@ -0,0 +1,11 @@ +// @module: system +namespace ns { + const value = 1; +} + +enum AnEnum { + ONE, + TWO +} + +export {ns, AnEnum, ns as FooBar, AnEnum as BarEnum}; \ No newline at end of file