From 54a4e9e57d74ed28c3d13e8adf32a1870d959bb8 Mon Sep 17 00:00:00 2001 From: vvakame Date: Sun, 21 Jun 2015 16:15:21 +0900 Subject: [PATCH] improve module loading interoperability for babel --- src/compiler/emitter.ts | 11 ++++++ tests/baselines/reference/es5-commonjs.js | 29 ++++++++++++++++ .../baselines/reference/es5-commonjs.symbols | 17 ++++++++++ tests/baselines/reference/es5-commonjs.types | 18 ++++++++++ tests/baselines/reference/es5-system.js | 34 +++++++++++++++++++ tests/baselines/reference/es5-system.symbols | 17 ++++++++++ tests/baselines/reference/es5-system.types | 18 ++++++++++ tests/baselines/reference/es5-umd3.js | 3 ++ .../es5ExportDefaultClassDeclaration.js | 3 ++ .../es5ExportDefaultClassDeclaration2.js | 3 ++ .../es5ExportDefaultClassDeclaration3.js | 3 ++ .../es5ExportDefaultFunctionDeclaration.js | 3 ++ .../es5ExportDefaultFunctionDeclaration2.js | 3 ++ .../es5ExportDefaultFunctionDeclaration3.js | 3 ++ .../reference/exportAndImport-es3-amd.js | 6 ++++ .../reference/exportAndImport-es3.js | 6 ++++ .../reference/exportAndImport-es5-amd.js | 6 ++++ .../reference/exportAndImport-es5.js | 6 ++++ tests/cases/compiler/es5-commonjs.ts | 17 ++++++++++ tests/cases/compiler/es5-system.ts | 17 ++++++++++ 20 files changed, 223 insertions(+) create mode 100644 tests/baselines/reference/es5-commonjs.js create mode 100644 tests/baselines/reference/es5-commonjs.symbols create mode 100644 tests/baselines/reference/es5-commonjs.types create mode 100644 tests/baselines/reference/es5-system.js create mode 100644 tests/baselines/reference/es5-system.symbols create mode 100644 tests/baselines/reference/es5-system.types create mode 100644 tests/cases/compiler/es5-commonjs.ts create mode 100644 tests/cases/compiler/es5-system.ts diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index 3fbe640254f..2d8377f74f8 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -2709,6 +2709,17 @@ var __param = (this && this.__param) || function (paramIndex, decorator) { } else { if (node.flags & NodeFlags.Default) { + if (compilerOptions.module === ModuleKind.CommonJS || compilerOptions.module === ModuleKind.AMD || compilerOptions.module === ModuleKind.UMD) { + write("Object.defineProperty(exports, \"__esModule\", {"); + writeLine(); + increaseIndent(); + // default value of configurable, enumerable, writable are `false`. + write("value: true"); + writeLine(); + decreaseIndent(); + write("};"); + writeLine(); + } if (languageVersion === ScriptTarget.ES3) { write("exports[\"default\"]"); } else { diff --git a/tests/baselines/reference/es5-commonjs.js b/tests/baselines/reference/es5-commonjs.js new file mode 100644 index 00000000000..e9f939dde31 --- /dev/null +++ b/tests/baselines/reference/es5-commonjs.js @@ -0,0 +1,29 @@ +//// [es5-commonjs.ts] + +export default class A +{ + constructor () + { + + } + + public B() + { + return 42; + } +} + + +//// [es5-commonjs.js] +var A = (function () { + function A() { + } + A.prototype.B = function () { + return 42; + }; + return A; +})(); +Object.defineProperty(exports, "__esModule", { + value: true +}; +exports.default = A; diff --git a/tests/baselines/reference/es5-commonjs.symbols b/tests/baselines/reference/es5-commonjs.symbols new file mode 100644 index 00000000000..41e4484afcd --- /dev/null +++ b/tests/baselines/reference/es5-commonjs.symbols @@ -0,0 +1,17 @@ +=== tests/cases/compiler/es5-commonjs.ts === + +export default class A +>A : Symbol(A, Decl(es5-commonjs.ts, 0, 0)) +{ + constructor () + { + + } + + public B() +>B : Symbol(B, Decl(es5-commonjs.ts, 6, 5)) + { + return 42; + } +} + diff --git a/tests/baselines/reference/es5-commonjs.types b/tests/baselines/reference/es5-commonjs.types new file mode 100644 index 00000000000..4c1bc922917 --- /dev/null +++ b/tests/baselines/reference/es5-commonjs.types @@ -0,0 +1,18 @@ +=== tests/cases/compiler/es5-commonjs.ts === + +export default class A +>A : A +{ + constructor () + { + + } + + public B() +>B : () => number + { + return 42; +>42 : number + } +} + diff --git a/tests/baselines/reference/es5-system.js b/tests/baselines/reference/es5-system.js new file mode 100644 index 00000000000..2674527722a --- /dev/null +++ b/tests/baselines/reference/es5-system.js @@ -0,0 +1,34 @@ +//// [es5-system.ts] + +export default class A +{ + constructor () + { + + } + + public B() + { + return 42; + } +} + + +//// [es5-system.js] +System.register([], function(exports_1) { + var A; + return { + setters:[], + execute: function() { + A = (function () { + function A() { + } + A.prototype.B = function () { + return 42; + }; + return A; + })(); + exports_1("default", A); + } + } +}); diff --git a/tests/baselines/reference/es5-system.symbols b/tests/baselines/reference/es5-system.symbols new file mode 100644 index 00000000000..5211e3c4259 --- /dev/null +++ b/tests/baselines/reference/es5-system.symbols @@ -0,0 +1,17 @@ +=== tests/cases/compiler/es5-system.ts === + +export default class A +>A : Symbol(A, Decl(es5-system.ts, 0, 0)) +{ + constructor () + { + + } + + public B() +>B : Symbol(B, Decl(es5-system.ts, 6, 5)) + { + return 42; + } +} + diff --git a/tests/baselines/reference/es5-system.types b/tests/baselines/reference/es5-system.types new file mode 100644 index 00000000000..eae884a78b4 --- /dev/null +++ b/tests/baselines/reference/es5-system.types @@ -0,0 +1,18 @@ +=== tests/cases/compiler/es5-system.ts === + +export default class A +>A : A +{ + constructor () + { + + } + + public B() +>B : () => number + { + return 42; +>42 : number + } +} + diff --git a/tests/baselines/reference/es5-umd3.js b/tests/baselines/reference/es5-umd3.js index 3abb92f816f..b823ab67f18 100644 --- a/tests/baselines/reference/es5-umd3.js +++ b/tests/baselines/reference/es5-umd3.js @@ -31,5 +31,8 @@ export default class A }; return A; })(); + Object.defineProperty(exports, "__esModule", { + value: true + }; exports.default = A; }); diff --git a/tests/baselines/reference/es5ExportDefaultClassDeclaration.js b/tests/baselines/reference/es5ExportDefaultClassDeclaration.js index b5cfdb02f78..b38a4ff1861 100644 --- a/tests/baselines/reference/es5ExportDefaultClassDeclaration.js +++ b/tests/baselines/reference/es5ExportDefaultClassDeclaration.js @@ -12,6 +12,9 @@ var C = (function () { C.prototype.method = function () { }; return C; })(); +Object.defineProperty(exports, "__esModule", { + value: true +}; exports.default = C; diff --git a/tests/baselines/reference/es5ExportDefaultClassDeclaration2.js b/tests/baselines/reference/es5ExportDefaultClassDeclaration2.js index de0d109dadf..4bddd5cd522 100644 --- a/tests/baselines/reference/es5ExportDefaultClassDeclaration2.js +++ b/tests/baselines/reference/es5ExportDefaultClassDeclaration2.js @@ -12,6 +12,9 @@ var default_1 = (function () { default_1.prototype.method = function () { }; return default_1; })(); +Object.defineProperty(exports, "__esModule", { + value: true +}; exports.default = default_1; diff --git a/tests/baselines/reference/es5ExportDefaultClassDeclaration3.js b/tests/baselines/reference/es5ExportDefaultClassDeclaration3.js index bff80940a02..be7b094852d 100644 --- a/tests/baselines/reference/es5ExportDefaultClassDeclaration3.js +++ b/tests/baselines/reference/es5ExportDefaultClassDeclaration3.js @@ -24,6 +24,9 @@ var C = (function () { }; return C; })(); +Object.defineProperty(exports, "__esModule", { + value: true +}; exports.default = C; var after = new C(); var t = C; diff --git a/tests/baselines/reference/es5ExportDefaultFunctionDeclaration.js b/tests/baselines/reference/es5ExportDefaultFunctionDeclaration.js index 673cc3cb453..24e514a13da 100644 --- a/tests/baselines/reference/es5ExportDefaultFunctionDeclaration.js +++ b/tests/baselines/reference/es5ExportDefaultFunctionDeclaration.js @@ -5,6 +5,9 @@ export default function f() { } //// [es5ExportDefaultFunctionDeclaration.js] function f() { } +Object.defineProperty(exports, "__esModule", { + value: true +}; exports.default = f; diff --git a/tests/baselines/reference/es5ExportDefaultFunctionDeclaration2.js b/tests/baselines/reference/es5ExportDefaultFunctionDeclaration2.js index ad1334e810b..637a780ddf6 100644 --- a/tests/baselines/reference/es5ExportDefaultFunctionDeclaration2.js +++ b/tests/baselines/reference/es5ExportDefaultFunctionDeclaration2.js @@ -5,6 +5,9 @@ export default function () { } //// [es5ExportDefaultFunctionDeclaration2.js] function default_1() { } +Object.defineProperty(exports, "__esModule", { + value: true +}; exports.default = default_1; diff --git a/tests/baselines/reference/es5ExportDefaultFunctionDeclaration3.js b/tests/baselines/reference/es5ExportDefaultFunctionDeclaration3.js index 1fc57976439..1340d239169 100644 --- a/tests/baselines/reference/es5ExportDefaultFunctionDeclaration3.js +++ b/tests/baselines/reference/es5ExportDefaultFunctionDeclaration3.js @@ -13,6 +13,9 @@ var before = func(); function func() { return func; } +Object.defineProperty(exports, "__esModule", { + value: true +}; exports.default = func; var after = func(); diff --git a/tests/baselines/reference/exportAndImport-es3-amd.js b/tests/baselines/reference/exportAndImport-es3-amd.js index a4552e70d68..33630da60d2 100644 --- a/tests/baselines/reference/exportAndImport-es3-amd.js +++ b/tests/baselines/reference/exportAndImport-es3-amd.js @@ -16,6 +16,9 @@ export default function f2() { define(["require", "exports"], function (require, exports) { function f1() { } + Object.defineProperty(exports, "__esModule", { + value: true + }; exports["default"] = f1; }); //// [m2.js] @@ -23,5 +26,8 @@ define(["require", "exports", "./m1"], function (require, exports, m1_1) { function f2() { m1_1["default"](); } + Object.defineProperty(exports, "__esModule", { + value: true + }; exports["default"] = f2; }); diff --git a/tests/baselines/reference/exportAndImport-es3.js b/tests/baselines/reference/exportAndImport-es3.js index 5f467509b68..60d2c39e203 100644 --- a/tests/baselines/reference/exportAndImport-es3.js +++ b/tests/baselines/reference/exportAndImport-es3.js @@ -15,10 +15,16 @@ export default function f2() { //// [m1.js] function f1() { } +Object.defineProperty(exports, "__esModule", { + value: true +}; exports["default"] = f1; //// [m2.js] var m1_1 = require("./m1"); function f2() { m1_1["default"](); } +Object.defineProperty(exports, "__esModule", { + value: true +}; exports["default"] = f2; diff --git a/tests/baselines/reference/exportAndImport-es5-amd.js b/tests/baselines/reference/exportAndImport-es5-amd.js index 4966af874f7..771405a3b4c 100644 --- a/tests/baselines/reference/exportAndImport-es5-amd.js +++ b/tests/baselines/reference/exportAndImport-es5-amd.js @@ -16,6 +16,9 @@ export default function f2() { define(["require", "exports"], function (require, exports) { function f1() { } + Object.defineProperty(exports, "__esModule", { + value: true + }; exports.default = f1; }); //// [m2.js] @@ -23,5 +26,8 @@ define(["require", "exports", "./m1"], function (require, exports, m1_1) { function f2() { m1_1.default(); } + Object.defineProperty(exports, "__esModule", { + value: true + }; exports.default = f2; }); diff --git a/tests/baselines/reference/exportAndImport-es5.js b/tests/baselines/reference/exportAndImport-es5.js index 02d0e43e5a9..9662e91be3b 100644 --- a/tests/baselines/reference/exportAndImport-es5.js +++ b/tests/baselines/reference/exportAndImport-es5.js @@ -15,10 +15,16 @@ export default function f2() { //// [m1.js] function f1() { } +Object.defineProperty(exports, "__esModule", { + value: true +}; exports.default = f1; //// [m2.js] var m1_1 = require("./m1"); function f2() { m1_1.default(); } +Object.defineProperty(exports, "__esModule", { + value: true +}; exports.default = f2; diff --git a/tests/cases/compiler/es5-commonjs.ts b/tests/cases/compiler/es5-commonjs.ts new file mode 100644 index 00000000000..21eb3732ada --- /dev/null +++ b/tests/cases/compiler/es5-commonjs.ts @@ -0,0 +1,17 @@ +// @target: ES5 +// @sourcemap: false +// @declaration: false +// @module: commonjs + +export default class A +{ + constructor () + { + + } + + public B() + { + return 42; + } +} diff --git a/tests/cases/compiler/es5-system.ts b/tests/cases/compiler/es5-system.ts new file mode 100644 index 00000000000..e615f7e5412 --- /dev/null +++ b/tests/cases/compiler/es5-system.ts @@ -0,0 +1,17 @@ +// @target: ES5 +// @sourcemap: false +// @declaration: false +// @module: system + +export default class A +{ + constructor () + { + + } + + public B() + { + return 42; + } +}