Skip to content

Commit d55dcc6

Browse files
committed
exports.default in ES5 vs exports["default"] in ES3
1 parent cca29a5 commit d55dcc6

30 files changed

+256
-3
lines changed

src/compiler/checker.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11412,7 +11412,14 @@ module ts {
1141211412
let node = getDeclarationOfAliasSymbol(symbol);
1141311413
if (node) {
1141411414
if (node.kind === SyntaxKind.ImportClause) {
11415-
return getGeneratedNameForNode(<ImportDeclaration>node.parent) + ".default";
11415+
let defaultKeyword: string;
11416+
11417+
if (languageVersion === ScriptTarget.ES3) {
11418+
defaultKeyword = "[\"default\"]";
11419+
} else {
11420+
defaultKeyword = ".default";
11421+
}
11422+
return getGeneratedNameForNode(<ImportDeclaration>node.parent) + defaultKeyword;
1141611423
}
1141711424
if (node.kind === SyntaxKind.ImportSpecifier) {
1141811425
let moduleName = getGeneratedNameForNode(<ImportDeclaration>node.parent.parent.parent);

src/compiler/emitter.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2452,7 +2452,11 @@ var __param = this.__param || function(index, decorator) { return function (targ
24522452
writeLine();
24532453
emitStart(node);
24542454
if (node.flags & NodeFlags.Default) {
2455-
write("exports.default");
2455+
if (languageVersion === ScriptTarget.ES3) {
2456+
write("exports[\"default\"]");
2457+
} else {
2458+
write("exports.default");
2459+
}
24562460
}
24572461
else {
24582462
emitModuleMemberName(node);
@@ -4548,7 +4552,11 @@ var __param = this.__param || function(index, decorator) { return function (targ
45484552
writeLine();
45494553
emitStart(node);
45504554
emitContainingModuleName(node);
4551-
write(".default = ");
4555+
if (languageVersion === ScriptTarget.ES3) {
4556+
write("[\"default\"] = ");
4557+
} else {
4558+
write(".default = ");
4559+
}
45524560
emit(node.expression);
45534561
write(";");
45544562
emitEnd(node);
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
//// [tests/cases/conformance/es6/modules/exportAndImport-es3-amd.ts] ////
2+
3+
//// [m1.ts]
4+
5+
export default function f1() {
6+
}
7+
8+
//// [m2.ts]
9+
import f1 from "./m1";
10+
export default function f2() {
11+
f1();
12+
}
13+
14+
15+
//// [m1.js]
16+
define(["require", "exports"], function (require, exports) {
17+
function f1() {
18+
}
19+
exports["default"] = f1;
20+
});
21+
//// [m2.js]
22+
define(["require", "exports", "./m1"], function (require, exports, m1_1) {
23+
function f2() {
24+
m1_1["default"]();
25+
}
26+
exports["default"] = f2;
27+
});
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
=== tests/cases/conformance/es6/modules/m1.ts ===
2+
3+
export default function f1() {
4+
>f1 : () => void, Symbol(f1, Decl(m1.ts, 0, 0))
5+
}
6+
7+
=== tests/cases/conformance/es6/modules/m2.ts ===
8+
import f1 from "./m1";
9+
>f1 : () => void, Symbol(f1, Decl(m2.ts, 0, 6))
10+
11+
export default function f2() {
12+
>f2 : () => void, Symbol(f2, Decl(m2.ts, 0, 22))
13+
14+
f1();
15+
>f1() : void
16+
>f1 : () => void, Symbol(f1, Decl(m2.ts, 0, 6))
17+
}
18+
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
//// [tests/cases/conformance/es6/modules/exportAndImport-es3.ts] ////
2+
3+
//// [m1.ts]
4+
5+
export default function f1() {
6+
}
7+
8+
//// [m2.ts]
9+
import f1 from "./m1";
10+
export default function f2() {
11+
f1();
12+
}
13+
14+
15+
//// [m1.js]
16+
function f1() {
17+
}
18+
exports["default"] = f1;
19+
//// [m2.js]
20+
var m1_1 = require("./m1");
21+
function f2() {
22+
m1_1["default"]();
23+
}
24+
exports["default"] = f2;
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
=== tests/cases/conformance/es6/modules/m1.ts ===
2+
3+
export default function f1() {
4+
>f1 : () => void, Symbol(f1, Decl(m1.ts, 0, 0))
5+
}
6+
7+
=== tests/cases/conformance/es6/modules/m2.ts ===
8+
import f1 from "./m1";
9+
>f1 : () => void, Symbol(f1, Decl(m2.ts, 0, 6))
10+
11+
export default function f2() {
12+
>f2 : () => void, Symbol(f2, Decl(m2.ts, 0, 22))
13+
14+
f1();
15+
>f1() : void
16+
>f1 : () => void, Symbol(f1, Decl(m2.ts, 0, 6))
17+
}
18+
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
//// [tests/cases/conformance/es6/modules/exportAndImport-es5-amd.ts] ////
2+
3+
//// [m1.ts]
4+
5+
export default function f1() {
6+
}
7+
8+
//// [m2.ts]
9+
import f1 from "./m1";
10+
export default function f2() {
11+
f1();
12+
}
13+
14+
15+
//// [m1.js]
16+
define(["require", "exports"], function (require, exports) {
17+
function f1() {
18+
}
19+
exports.default = f1;
20+
});
21+
//// [m2.js]
22+
define(["require", "exports", "./m1"], function (require, exports, m1_1) {
23+
function f2() {
24+
m1_1.default();
25+
}
26+
exports.default = f2;
27+
});
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
=== tests/cases/conformance/es6/modules/m1.ts ===
2+
3+
export default function f1() {
4+
>f1 : () => void, Symbol(f1, Decl(m1.ts, 0, 0))
5+
}
6+
7+
=== tests/cases/conformance/es6/modules/m2.ts ===
8+
import f1 from "./m1";
9+
>f1 : () => void, Symbol(f1, Decl(m2.ts, 0, 6))
10+
11+
export default function f2() {
12+
>f2 : () => void, Symbol(f2, Decl(m2.ts, 0, 22))
13+
14+
f1();
15+
>f1() : void
16+
>f1 : () => void, Symbol(f1, Decl(m2.ts, 0, 6))
17+
}
18+
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
//// [tests/cases/conformance/es6/modules/exportAndImport-es5.ts] ////
2+
3+
//// [m1.ts]
4+
5+
export default function f1() {
6+
}
7+
8+
//// [m2.ts]
9+
import f1 from "./m1";
10+
export default function f2() {
11+
f1();
12+
}
13+
14+
15+
//// [m1.js]
16+
function f1() {
17+
}
18+
exports.default = f1;
19+
//// [m2.js]
20+
var m1_1 = require("./m1");
21+
function f2() {
22+
m1_1.default();
23+
}
24+
exports.default = f2;
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
=== tests/cases/conformance/es6/modules/m1.ts ===
2+
3+
export default function f1() {
4+
>f1 : () => void, Symbol(f1, Decl(m1.ts, 0, 0))
5+
}
6+
7+
=== tests/cases/conformance/es6/modules/m2.ts ===
8+
import f1 from "./m1";
9+
>f1 : () => void, Symbol(f1, Decl(m2.ts, 0, 6))
10+
11+
export default function f2() {
12+
>f2 : () => void, Symbol(f2, Decl(m2.ts, 0, 22))
13+
14+
f1();
15+
>f1() : void
16+
>f1 : () => void, Symbol(f1, Decl(m2.ts, 0, 6))
17+
}
18+

0 commit comments

Comments
 (0)