Skip to content

Commit 372d6e8

Browse files
committed
Retain reexports in js emit even when they export nothing
1 parent f9945f5 commit 372d6e8

29 files changed

+525
-22
lines changed

Diff for: src/compiler/transformers/ts.ts

+5-3
Original file line numberDiff line numberDiff line change
@@ -2859,9 +2859,11 @@ namespace ts {
28592859
return undefined;
28602860
}
28612861

2862-
if (!node.exportClause) {
2863-
// Elide a star export if the module it references does not export a value.
2864-
return compilerOptions.isolatedModules || resolver.moduleExportsSomeValue(node.moduleSpecifier!) ? node : undefined;
2862+
if (!node.exportClause || isNamespaceExport(node.exportClause)) {
2863+
// never elide `export <whatever> from <whereever>` declarations -
2864+
// they should be kept for sideffects/untyped exports, even when the
2865+
// type checker doesn't know about any exports
2866+
return node;
28652867
}
28662868

28672869
if (!resolver.isValueAliasDeclaration(node)) {

Diff for: tests/baselines/reference/declarationEmitAliasExportStar.js

+11
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,18 @@ export const thing2 = (param: things.ThingB) => null;
1414
exports.__esModule = true;
1515
//// [things.js]
1616
"use strict";
17+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
18+
if (k2 === undefined) k2 = k;
19+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
20+
}) : (function(o, m, k, k2) {
21+
if (k2 === undefined) k2 = k;
22+
o[k2] = m[k];
23+
}));
24+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
25+
for (var p in m) if (!exports.hasOwnProperty(p)) __createBinding(exports, m, p);
26+
}
1727
exports.__esModule = true;
28+
__exportStar(require("./thingB"), exports);
1829
//// [index.js]
1930
"use strict";
2031
exports.__esModule = true;

Diff for: tests/baselines/reference/es6ExportEqualsInterop.js

+2
Original file line numberDiff line numberDiff line change
@@ -300,6 +300,8 @@ var class_2 = require("class");
300300
__createBinding(exports, class_2, "a", "a9");
301301
var class_module_2 = require("class-module");
302302
__createBinding(exports, class_module_2, "a", "a0");
303+
// export-star
304+
__exportStar(require("interface"), exports);
303305
__exportStar(require("variable"), exports);
304306
__exportStar(require("interface-variable"), exports);
305307
__exportStar(require("module"), exports);

Diff for: tests/baselines/reference/exportStarForValues.js

+12-1
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,19 @@ define(["require", "exports"], function (require, exports) {
1313
exports.__esModule = true;
1414
});
1515
//// [file2.js]
16-
define(["require", "exports"], function (require, exports) {
16+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
17+
if (k2 === undefined) k2 = k;
18+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
19+
}) : (function(o, m, k, k2) {
20+
if (k2 === undefined) k2 = k;
21+
o[k2] = m[k];
22+
}));
23+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
24+
for (var p in m) if (!exports.hasOwnProperty(p)) __createBinding(exports, m, p);
25+
}
26+
define(["require", "exports", "file1"], function (require, exports, file1_1) {
1727
"use strict";
1828
exports.__esModule = true;
29+
__exportStar(file1_1, exports);
1930
var x;
2031
});

Diff for: tests/baselines/reference/exportStarForValues10.js

+4-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ System.register([], function (exports_1, context_1) {
3434
};
3535
});
3636
//// [file2.js]
37-
System.register(["file0"], function (exports_1, context_1) {
37+
System.register(["file0", "file1"], function (exports_1, context_1) {
3838
"use strict";
3939
var x;
4040
var __moduleName = context_1 && context_1.id;
@@ -49,6 +49,9 @@ System.register(["file0"], function (exports_1, context_1) {
4949
setters: [
5050
function (file0_1_1) {
5151
exportStar_1(file0_1_1);
52+
},
53+
function (file1_1_1) {
54+
exportStar_1(file1_1_1);
5255
}
5356
],
5457
execute: function () {

Diff for: tests/baselines/reference/exportStarForValues2.js

+24-2
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,36 @@ define(["require", "exports"], function (require, exports) {
1717
exports.__esModule = true;
1818
});
1919
//// [file2.js]
20-
define(["require", "exports"], function (require, exports) {
20+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
21+
if (k2 === undefined) k2 = k;
22+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
23+
}) : (function(o, m, k, k2) {
24+
if (k2 === undefined) k2 = k;
25+
o[k2] = m[k];
26+
}));
27+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
28+
for (var p in m) if (!exports.hasOwnProperty(p)) __createBinding(exports, m, p);
29+
}
30+
define(["require", "exports", "file1"], function (require, exports, file1_1) {
2131
"use strict";
2232
exports.__esModule = true;
33+
__exportStar(file1_1, exports);
2334
var x = 1;
2435
});
2536
//// [file3.js]
26-
define(["require", "exports"], function (require, exports) {
37+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
38+
if (k2 === undefined) k2 = k;
39+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
40+
}) : (function(o, m, k, k2) {
41+
if (k2 === undefined) k2 = k;
42+
o[k2] = m[k];
43+
}));
44+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
45+
for (var p in m) if (!exports.hasOwnProperty(p)) __createBinding(exports, m, p);
46+
}
47+
define(["require", "exports", "file2"], function (require, exports, file2_1) {
2748
"use strict";
2849
exports.__esModule = true;
50+
__exportStar(file2_1, exports);
2951
var x = 1;
3052
});

Diff for: tests/baselines/reference/exportStarForValues3.js

+49-4
Original file line numberDiff line numberDiff line change
@@ -29,26 +29,71 @@ define(["require", "exports"], function (require, exports) {
2929
exports.__esModule = true;
3030
});
3131
//// [file2.js]
32-
define(["require", "exports"], function (require, exports) {
32+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
33+
if (k2 === undefined) k2 = k;
34+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
35+
}) : (function(o, m, k, k2) {
36+
if (k2 === undefined) k2 = k;
37+
o[k2] = m[k];
38+
}));
39+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
40+
for (var p in m) if (!exports.hasOwnProperty(p)) __createBinding(exports, m, p);
41+
}
42+
define(["require", "exports", "file1"], function (require, exports, file1_1) {
3343
"use strict";
3444
exports.__esModule = true;
45+
__exportStar(file1_1, exports);
3546
var x = 1;
3647
});
3748
//// [file3.js]
38-
define(["require", "exports"], function (require, exports) {
49+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
50+
if (k2 === undefined) k2 = k;
51+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
52+
}) : (function(o, m, k, k2) {
53+
if (k2 === undefined) k2 = k;
54+
o[k2] = m[k];
55+
}));
56+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
57+
for (var p in m) if (!exports.hasOwnProperty(p)) __createBinding(exports, m, p);
58+
}
59+
define(["require", "exports", "file1"], function (require, exports, file1_1) {
3960
"use strict";
4061
exports.__esModule = true;
62+
__exportStar(file1_1, exports);
4163
var x = 1;
4264
});
4365
//// [file4.js]
44-
define(["require", "exports"], function (require, exports) {
66+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
67+
if (k2 === undefined) k2 = k;
68+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
69+
}) : (function(o, m, k, k2) {
70+
if (k2 === undefined) k2 = k;
71+
o[k2] = m[k];
72+
}));
73+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
74+
for (var p in m) if (!exports.hasOwnProperty(p)) __createBinding(exports, m, p);
75+
}
76+
define(["require", "exports", "file2", "file3"], function (require, exports, file2_1, file3_1) {
4577
"use strict";
4678
exports.__esModule = true;
79+
__exportStar(file2_1, exports);
80+
__exportStar(file3_1, exports);
4781
var x = 1;
4882
});
4983
//// [file5.js]
50-
define(["require", "exports"], function (require, exports) {
84+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
85+
if (k2 === undefined) k2 = k;
86+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
87+
}) : (function(o, m, k, k2) {
88+
if (k2 === undefined) k2 = k;
89+
o[k2] = m[k];
90+
}));
91+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
92+
for (var p in m) if (!exports.hasOwnProperty(p)) __createBinding(exports, m, p);
93+
}
94+
define(["require", "exports", "file4"], function (require, exports, file4_1) {
5195
"use strict";
5296
exports.__esModule = true;
97+
__exportStar(file4_1, exports);
5398
var x = 1;
5499
});

Diff for: tests/baselines/reference/exportStarForValues4.js

+25-2
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,37 @@ define(["require", "exports"], function (require, exports) {
2121
exports.__esModule = true;
2222
});
2323
//// [file3.js]
24-
define(["require", "exports"], function (require, exports) {
24+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
25+
if (k2 === undefined) k2 = k;
26+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
27+
}) : (function(o, m, k, k2) {
28+
if (k2 === undefined) k2 = k;
29+
o[k2] = m[k];
30+
}));
31+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
32+
for (var p in m) if (!exports.hasOwnProperty(p)) __createBinding(exports, m, p);
33+
}
34+
define(["require", "exports", "file2"], function (require, exports, file2_1) {
2535
"use strict";
2636
exports.__esModule = true;
37+
__exportStar(file2_1, exports);
2738
var x = 1;
2839
});
2940
//// [file2.js]
30-
define(["require", "exports"], function (require, exports) {
41+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
42+
if (k2 === undefined) k2 = k;
43+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
44+
}) : (function(o, m, k, k2) {
45+
if (k2 === undefined) k2 = k;
46+
o[k2] = m[k];
47+
}));
48+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
49+
for (var p in m) if (!exports.hasOwnProperty(p)) __createBinding(exports, m, p);
50+
}
51+
define(["require", "exports", "file1", "file3"], function (require, exports, file1_1, file3_1) {
3152
"use strict";
3253
exports.__esModule = true;
54+
__exportStar(file1_1, exports);
55+
__exportStar(file3_1, exports);
3356
var x = 1;
3457
});

Diff for: tests/baselines/reference/exportStarForValues5.js

+12-1
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,19 @@ define(["require", "exports"], function (require, exports) {
1313
exports.__esModule = true;
1414
});
1515
//// [file2.js]
16-
define(["require", "exports"], function (require, exports) {
16+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
17+
if (k2 === undefined) k2 = k;
18+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
19+
}) : (function(o, m, k, k2) {
20+
if (k2 === undefined) k2 = k;
21+
o[k2] = m[k];
22+
}));
23+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
24+
for (var p in m) if (!exports.hasOwnProperty(p)) __createBinding(exports, m, p);
25+
}
26+
define(["require", "exports", "file1"], function (require, exports, file1_1) {
1727
"use strict";
1828
exports.__esModule = true;
1929
exports.x = void 0;
30+
__exportStar(file1_1, exports);
2031
});

Diff for: tests/baselines/reference/exportStarForValues6.js

+16-2
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,26 @@ System.register([], function (exports_1, context_1) {
1818
};
1919
});
2020
//// [file2.js]
21-
System.register([], function (exports_1, context_1) {
21+
System.register(["file1"], function (exports_1, context_1) {
2222
"use strict";
2323
var x;
2424
var __moduleName = context_1 && context_1.id;
25+
var exportedNames_1 = {
26+
"x": true
27+
};
28+
function exportStar_1(m) {
29+
var exports = {};
30+
for (var n in m) {
31+
if (n !== "default" && !exportedNames_1.hasOwnProperty(n)) exports[n] = m[n];
32+
}
33+
exports_1(exports);
34+
}
2535
return {
26-
setters: [],
36+
setters: [
37+
function (file1_1_1) {
38+
exportStar_1(file1_1_1);
39+
}
40+
],
2741
execute: function () {
2842
exports_1("x", x = 1);
2943
}

Diff for: tests/baselines/reference/exportStarForValues7.js

+12-1
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,21 @@ define(["require", "exports"], function (require, exports) {
1717
exports.__esModule = true;
1818
});
1919
//// [file2.js]
20-
define(["require", "exports"], function (require, exports) {
20+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
21+
if (k2 === undefined) k2 = k;
22+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
23+
}) : (function(o, m, k, k2) {
24+
if (k2 === undefined) k2 = k;
25+
o[k2] = m[k];
26+
}));
27+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
28+
for (var p in m) if (!exports.hasOwnProperty(p)) __createBinding(exports, m, p);
29+
}
30+
define(["require", "exports", "file1"], function (require, exports, file1_1) {
2131
"use strict";
2232
exports.__esModule = true;
2333
exports.x = void 0;
34+
__exportStar(file1_1, exports);
2435
exports.x = 1;
2536
});
2637
//// [file3.js]

Diff for: tests/baselines/reference/exportStarForValues8.js

+24-2
Original file line numberDiff line numberDiff line change
@@ -29,17 +29,39 @@ define(["require", "exports"], function (require, exports) {
2929
exports.__esModule = true;
3030
});
3131
//// [file2.js]
32-
define(["require", "exports"], function (require, exports) {
32+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
33+
if (k2 === undefined) k2 = k;
34+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
35+
}) : (function(o, m, k, k2) {
36+
if (k2 === undefined) k2 = k;
37+
o[k2] = m[k];
38+
}));
39+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
40+
for (var p in m) if (!exports.hasOwnProperty(p)) __createBinding(exports, m, p);
41+
}
42+
define(["require", "exports", "file1"], function (require, exports, file1_1) {
3343
"use strict";
3444
exports.__esModule = true;
3545
exports.x = void 0;
46+
__exportStar(file1_1, exports);
3647
exports.x = 1;
3748
});
3849
//// [file3.js]
39-
define(["require", "exports"], function (require, exports) {
50+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
51+
if (k2 === undefined) k2 = k;
52+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
53+
}) : (function(o, m, k, k2) {
54+
if (k2 === undefined) k2 = k;
55+
o[k2] = m[k];
56+
}));
57+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
58+
for (var p in m) if (!exports.hasOwnProperty(p)) __createBinding(exports, m, p);
59+
}
60+
define(["require", "exports", "file1"], function (require, exports, file1_1) {
4061
"use strict";
4162
exports.__esModule = true;
4263
exports.x = void 0;
64+
__exportStar(file1_1, exports);
4365
exports.x = 1;
4466
});
4567
//// [file4.js]

Diff for: tests/baselines/reference/exportStarForValues9.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,11 @@ var __createBinding = (this && this.__createBinding) || (Object.create ? (functi
4949
var __exportStar = (this && this.__exportStar) || function(m, exports) {
5050
for (var p in m) if (!exports.hasOwnProperty(p)) __createBinding(exports, m, p);
5151
}
52-
define(["require", "exports", "file3"], function (require, exports, file3_1) {
52+
define(["require", "exports", "file1", "file3"], function (require, exports, file1_1, file3_1) {
5353
"use strict";
5454
exports.__esModule = true;
5555
exports.x = void 0;
56+
__exportStar(file1_1, exports);
5657
__exportStar(file3_1, exports);
5758
exports.x = 1;
5859
});

Diff for: tests/baselines/reference/exportStarForValuesInSystem.js

+13-2
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,23 @@ System.register([], function (exports_1, context_1) {
1818
};
1919
});
2020
//// [file2.js]
21-
System.register([], function (exports_1, context_1) {
21+
System.register(["file1"], function (exports_1, context_1) {
2222
"use strict";
2323
var x;
2424
var __moduleName = context_1 && context_1.id;
25+
function exportStar_1(m) {
26+
var exports = {};
27+
for (var n in m) {
28+
if (n !== "default") exports[n] = m[n];
29+
}
30+
exports_1(exports);
31+
}
2532
return {
26-
setters: [],
33+
setters: [
34+
function (file1_1_1) {
35+
exportStar_1(file1_1_1);
36+
}
37+
],
2738
execute: function () {
2839
x = 1;
2940
}

0 commit comments

Comments
 (0)