Merge pull request #3586 from vvakame/addEsModule

improve  module loading interoperability for babel
This commit is contained in:
Jason Freeman
2015-07-20 23:52:38 -07:00
59 changed files with 425 additions and 97 deletions

View File

@@ -3012,6 +3012,26 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
return result;
}
function emitEs6ExportDefaultCompat(node: Node) {
if (node.parent.kind === SyntaxKind.SourceFile) {
Debug.assert(!!(node.flags & NodeFlags.Default) || node.kind === SyntaxKind.ExportAssignment);
// only allow export default at a source file level
if (compilerOptions.module === ModuleKind.CommonJS || compilerOptions.module === ModuleKind.AMD || compilerOptions.module === ModuleKind.UMD) {
if (!currentSourceFile.symbol.exports["___esModule"]) {
if (languageVersion === ScriptTarget.ES5) {
// default value of configurable, enumerable, writable are `false`.
write("Object.defineProperty(exports, \"__esModule\", { value: true });");
writeLine();
}
else if (languageVersion === ScriptTarget.ES3) {
write("exports.__esModule = true;");
writeLine();
}
}
}
}
}
function emitExportMemberAssignment(node: FunctionLikeDeclaration | ClassDeclaration) {
if (node.flags & NodeFlags.Export) {
writeLine();
@@ -3034,9 +3054,11 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
}
else {
if (node.flags & NodeFlags.Default) {
emitEs6ExportDefaultCompat(node);
if (languageVersion === ScriptTarget.ES3) {
write("exports[\"default\"]");
} else {
}
else {
write("exports.default");
}
}
@@ -5538,6 +5560,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
write(")");
}
else {
emitEs6ExportDefaultCompat(node);
emitContainingModuleName(node);
if (languageVersion === ScriptTarget.ES3) {
write("[\"default\"] = ");

View File

@@ -0,0 +1,27 @@
//// [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;

View File

@@ -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;
}
}

View File

@@ -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
}
}

View File

@@ -0,0 +1,8 @@
//// [es5-commonjs2.ts]
export default 1;
//// [es5-commonjs2.js]
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = 1;

View File

@@ -0,0 +1,5 @@
=== tests/cases/compiler/es5-commonjs2.ts ===
No type information for this code.export default 1;
No type information for this code.
No type information for this code.

View File

@@ -0,0 +1,5 @@
=== tests/cases/compiler/es5-commonjs2.ts ===
No type information for this code.export default 1;
No type information for this code.
No type information for this code.

View File

@@ -0,0 +1,9 @@
//// [es5-commonjs3.ts]
export default "test";
export var __esModule = 1;
//// [es5-commonjs3.js]
exports.default = "test";
exports.__esModule = 1;

View File

@@ -0,0 +1,6 @@
=== tests/cases/compiler/es5-commonjs3.ts ===
export default "test";
export var __esModule = 1;
>__esModule : Symbol(__esModule, Decl(es5-commonjs3.ts, 2, 10))

View File

@@ -0,0 +1,7 @@
=== tests/cases/compiler/es5-commonjs3.ts ===
export default "test";
export var __esModule = 1;
>__esModule : number
>1 : number

View File

@@ -0,0 +1,28 @@
//// [es5-commonjs4.ts]
export default class A
{
constructor ()
{
}
public B()
{
return 42;
}
}
export var __esModule = 1;
//// [es5-commonjs4.js]
var A = (function () {
function A() {
}
A.prototype.B = function () {
return 42;
};
return A;
})();
exports.default = A;
exports.__esModule = 1;

View File

@@ -0,0 +1,19 @@
=== tests/cases/compiler/es5-commonjs4.ts ===
export default class A
>A : Symbol(A, Decl(es5-commonjs4.ts, 0, 0))
{
constructor ()
{
}
public B()
>B : Symbol(B, Decl(es5-commonjs4.ts, 6, 5))
{
return 42;
}
}
export var __esModule = 1;
>__esModule : Symbol(__esModule, Decl(es5-commonjs4.ts, 13, 10))

View File

@@ -0,0 +1,21 @@
=== tests/cases/compiler/es5-commonjs4.ts ===
export default class A
>A : A
{
constructor ()
{
}
public B()
>B : () => number
{
return 42;
>42 : number
}
}
export var __esModule = 1;
>__esModule : number
>1 : number

View File

@@ -0,0 +1,13 @@
//// [es5-commonjs5.ts]
export default function () {
return "test";
}
//// [es5-commonjs5.js]
function default_1() {
return "test";
}
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = default_1;

View File

@@ -0,0 +1,7 @@
=== tests/cases/compiler/es5-commonjs5.ts ===
No type information for this code.export default function () {
No type information for this code. return "test";
No type information for this code.}
No type information for this code.
No type information for this code.

View File

@@ -0,0 +1,7 @@
=== tests/cases/compiler/es5-commonjs5.ts ===
export default function () {
return "test";
>"test" : string
}

View File

@@ -0,0 +1,10 @@
//// [es5-commonjs6.ts]
export default "test";
var __esModule = 1;
//// [es5-commonjs6.js]
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = "test";
var __esModule = 1;

View File

@@ -0,0 +1,6 @@
=== tests/cases/compiler/es5-commonjs6.ts ===
export default "test";
var __esModule = 1;
>__esModule : Symbol(__esModule, Decl(es5-commonjs6.ts, 2, 3))

View File

@@ -0,0 +1,7 @@
=== tests/cases/compiler/es5-commonjs6.ts ===
export default "test";
var __esModule = 1;
>__esModule : number
>1 : number

View File

@@ -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);
}
}
});

View File

@@ -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;
}
}

View File

@@ -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
}
}

View File

@@ -31,5 +31,6 @@ export default class A
};
return A;
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = A;
});

View File

@@ -12,6 +12,7 @@ var C = (function () {
C.prototype.method = function () { };
return C;
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = C;

View File

@@ -12,6 +12,7 @@ var default_1 = (function () {
default_1.prototype.method = function () { };
return default_1;
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = default_1;

View File

@@ -24,6 +24,7 @@ var C = (function () {
};
return C;
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = C;
var after = new C();
var t = C;

View File

@@ -4,6 +4,7 @@ export default (1 + 2);
//// [es5ExportDefaultExpression.js]
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = (1 + 2);

View File

@@ -5,6 +5,7 @@ export default function f() { }
//// [es5ExportDefaultFunctionDeclaration.js]
function f() { }
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = f;

View File

@@ -5,6 +5,7 @@ export default function () { }
//// [es5ExportDefaultFunctionDeclaration2.js]
function default_1() { }
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = default_1;

View File

@@ -13,6 +13,7 @@ var before = func();
function func() {
return func;
}
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = func;
var after = func();

View File

@@ -8,6 +8,7 @@ export default f;
//// [es5ExportDefaultIdentifier.js]
function f() { }
exports.f = f;
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = f;

View File

@@ -14,6 +14,7 @@ import defaultBinding2 from "es6ImportDefaultBindingAmd_0"; // elide this import
//// [es6ImportDefaultBindingAmd_0.js]
define(["require", "exports"], function (require, exports) {
var a = 10;
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = a;
});
//// [es6ImportDefaultBindingAmd_1.js]

View File

@@ -17,6 +17,7 @@ var c = (function () {
}
return c;
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = c;
//// [client.js]
var server_1 = require("server");

View File

@@ -22,6 +22,7 @@ var x: number = defaultBinding6;
//// [es6ImportDefaultBindingFollowedWithNamedImport1InEs5_0.js]
var a = 10;
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = a;
//// [es6ImportDefaultBindingFollowedWithNamedImport1InEs5_1.js]
var es6ImportDefaultBindingFollowedWithNamedImport1InEs5_0_1 = require("es6ImportDefaultBindingFollowedWithNamedImport1InEs5_0");

View File

@@ -22,6 +22,7 @@ export var x1: number = defaultBinding6;
//// [server.js]
var a = 10;
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = a;
//// [client.js]
var server_1 = require("server");

View File

@@ -25,6 +25,7 @@ var a = (function () {
}
return a;
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = a;
//// [client.js]
var server_1 = require("server");

View File

@@ -27,6 +27,7 @@ define(["require", "exports"], function (require, exports) {
exports.a = 10;
exports.x = exports.a;
exports.m = exports.a;
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = {};
});
//// [client.js]

View File

@@ -11,6 +11,7 @@ var x: number = defaultBinding;
//// [es6ImportDefaultBindingFollowedWithNamespaceBindingInEs5_0.js]
var a = 10;
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = a;
//// [es6ImportDefaultBindingFollowedWithNamespaceBindingInEs5_1.js]
var es6ImportDefaultBindingFollowedWithNamespaceBindingInEs5_0_1 = require("es6ImportDefaultBindingFollowedWithNamespaceBindingInEs5_0"), nameSpaceBinding = es6ImportDefaultBindingFollowedWithNamespaceBindingInEs5_0_1;

View File

@@ -12,6 +12,7 @@ export var x: number = defaultBinding;
//// [server.js]
define(["require", "exports"], function (require, exports) {
var a = 10;
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = a;
});
//// [client.js]

View File

@@ -16,6 +16,7 @@ define(["require", "exports"], function (require, exports) {
}
return a;
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = a;
});
//// [client.js]

View File

@@ -18,6 +18,7 @@ import defaultBinding3 from "es6ImportDefaultBindingMergeErrors_0"; // SHould be
//// [es6ImportDefaultBindingMergeErrors_0.js]
var a = 10;
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = a;
//// [es6ImportDefaultBindingMergeErrors_1.js]
var es6ImportDefaultBindingMergeErrors_0_1 = require("es6ImportDefaultBindingMergeErrors_0");

View File

@@ -13,6 +13,7 @@ export import defaultBinding2 from "server"; // non referenced
//// [server.js]
define(["require", "exports"], function (require, exports) {
var a = 10;
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = a;
});
//// [client.js]

View File

@@ -16,6 +16,7 @@ export default function f2() {
define(["require", "exports"], function (require, exports) {
function f1() {
}
exports.__esModule = true;
exports["default"] = f1;
});
//// [m2.js]
@@ -23,5 +24,6 @@ define(["require", "exports", "./m1"], function (require, exports, m1_1) {
function f2() {
m1_1["default"]();
}
exports.__esModule = true;
exports["default"] = f2;
});

View File

@@ -15,10 +15,12 @@ export default function f2() {
//// [m1.js]
function f1() {
}
exports.__esModule = true;
exports["default"] = f1;
//// [m2.js]
var m1_1 = require("./m1");
function f2() {
m1_1["default"]();
}
exports.__esModule = true;
exports["default"] = f2;

View File

@@ -16,6 +16,7 @@ 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 +24,6 @@ define(["require", "exports", "./m1"], function (require, exports, m1_1) {
function f2() {
m1_1.default();
}
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = f2;
});

View File

@@ -15,10 +15,12 @@ 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;

View File

@@ -36,6 +36,7 @@ define(["require", "exports"], function (require, exports) {
});
//// [t2.js]
define(["require", "exports"], function (require, exports) {
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = "hello";
function foo() { }
exports.foo = foo;

View File

@@ -33,6 +33,7 @@ foo;
exports.x = 1;
exports.y = 2;
//// [t2.js]
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = "hello";
function foo() { }
exports.foo = foo;

View File

@@ -41,6 +41,7 @@ export { a, b, c, d, e1, e2, f1, f2 };
//// [t1.js]
define(["require", "exports"], function (require, exports) {
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = "hello";
});
//// [t3.js]

View File

@@ -40,6 +40,7 @@ export { a, b, c, d, e1, e2, f1, f2 };
//// [t1.js]
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = "hello";
//// [t3.js]
var a = require("./t1");

View File

@@ -1,47 +0,0 @@
=== tests/cases/conformance/jsx/react.d.ts ===
declare module JSX {
>JSX : Symbol(JSX, Decl(react.d.ts, 0, 0))
interface Element { }
>Element : Symbol(Element, Decl(react.d.ts, 1, 20))
interface IntrinsicElements {
>IntrinsicElements : Symbol(IntrinsicElements, Decl(react.d.ts, 2, 22))
}
interface ElementAttributesProperty {
>ElementAttributesProperty : Symbol(ElementAttributesProperty, Decl(react.d.ts, 4, 2))
props;
>props : Symbol(props, Decl(react.d.ts, 5, 38))
}
}
interface Props {
>Props : Symbol(Props, Decl(react.d.ts, 8, 1))
foo: string;
>foo : Symbol(foo, Decl(react.d.ts, 10, 17))
}
=== tests/cases/conformance/jsx/file.tsx ===
export class MyComponent {
>MyComponent : Symbol(MyComponent, Decl(file.tsx, 0, 0))
render() {
>render : Symbol(render, Decl(file.tsx, 0, 26))
}
props: { foo: string; }
>props : Symbol(props, Decl(file.tsx, 2, 3))
>foo : Symbol(foo, Decl(file.tsx, 4, 10))
}
<MyComponent foo="bar" />; // ok
>MyComponent : Symbol(MyComponent, Decl(file.tsx, 0, 0))
>foo : Symbol(unknown)
<MyComponent foo={0} />; // should be an error
>MyComponent : Symbol(MyComponent, Decl(file.tsx, 0, 0))
>foo : Symbol(unknown)

View File

@@ -1,49 +0,0 @@
=== tests/cases/conformance/jsx/react.d.ts ===
declare module JSX {
>JSX : any
interface Element { }
>Element : Element
interface IntrinsicElements {
>IntrinsicElements : IntrinsicElements
}
interface ElementAttributesProperty {
>ElementAttributesProperty : ElementAttributesProperty
props;
>props : any
}
}
interface Props {
>Props : Props
foo: string;
>foo : string
}
=== tests/cases/conformance/jsx/file.tsx ===
export class MyComponent {
>MyComponent : MyComponent
render() {
>render : () => void
}
props: { foo: string; }
>props : { foo: string; }
>foo : string
}
<MyComponent foo="bar" />; // ok
><MyComponent foo="bar" /> : JSX.Element
>MyComponent : typeof MyComponent
>foo : any
<MyComponent foo={0} />; // should be an error
><MyComponent foo={0} /> : JSX.Element
>MyComponent : typeof MyComponent
>foo : any

View File

@@ -0,0 +1,17 @@
// @target: ES5
// @sourcemap: false
// @declaration: false
// @module: commonjs
export default class A
{
constructor ()
{
}
public B()
{
return 42;
}
}

View File

@@ -0,0 +1,6 @@
// @target: ES5
// @sourcemap: false
// @declaration: false
// @module: commonjs
export default 1;

View File

@@ -0,0 +1,7 @@
// @target: ES5
// @sourcemap: false
// @declaration: false
// @module: commonjs
export default "test";
export var __esModule = 1;

View File

@@ -0,0 +1,18 @@
// @target: ES5
// @sourcemap: false
// @declaration: false
// @module: commonjs
export default class A
{
constructor ()
{
}
public B()
{
return 42;
}
}
export var __esModule = 1;

View File

@@ -0,0 +1,8 @@
// @target: ES5
// @sourcemap: false
// @declaration: false
// @module: commonjs
export default function () {
return "test";
}

View File

@@ -0,0 +1,7 @@
// @target: ES5
// @sourcemap: false
// @declaration: false
// @module: commonjs
export default "test";
var __esModule = 1;

View File

@@ -0,0 +1,17 @@
// @target: ES5
// @sourcemap: false
// @declaration: false
// @module: system
export default class A
{
constructor ()
{
}
public B()
{
return 42;
}
}