Skip to content

Commit 4bda7ce

Browse files
authored
Include reexported names in list of exported names (#38809)
1 parent 6a777ff commit 4bda7ce

File tree

56 files changed

+92
-52
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+92
-52
lines changed

src/compiler/transformers/module/system.ts

Lines changed: 0 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -339,37 +339,6 @@ namespace ts {
339339
}
340340
}
341341

342-
for (const externalImport of moduleInfo.externalImports) {
343-
if (externalImport.kind !== SyntaxKind.ExportDeclaration) {
344-
continue;
345-
}
346-
347-
if (!externalImport.exportClause) {
348-
// export * from ...
349-
continue;
350-
}
351-
352-
if (isNamedExports(externalImport.exportClause)) {
353-
for (const element of externalImport.exportClause.elements) {
354-
// write name of indirectly exported entry, i.e. 'export {x} from ...'
355-
exportedNames.push(
356-
createPropertyAssignment(
357-
createLiteral(idText(element.name || element.propertyName)),
358-
createTrue()
359-
)
360-
);
361-
}
362-
}
363-
else {
364-
exportedNames.push(
365-
createPropertyAssignment(
366-
createLiteral(idText(externalImport.exportClause.name)),
367-
createTrue()
368-
)
369-
);
370-
}
371-
}
372-
373342
const exportedNamesStorageRef = createUniqueName("exportedNames");
374343
statements.push(
375344
createVariableStatement(

src/compiler/transformers/utilities.ts

Lines changed: 31 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -112,26 +112,22 @@ namespace ts {
112112
// export * as ns from "mod"
113113
// export { x, y } from "mod"
114114
externalImports.push(<ExportDeclaration>node);
115+
if (isNamedExports((node as ExportDeclaration).exportClause!)) {
116+
addExportedNamesForExportDeclaration(node as ExportDeclaration);
117+
}
118+
else {
119+
const name = ((node as ExportDeclaration).exportClause as NamespaceExport).name;
120+
if (!uniqueExports.get(idText(name))) {
121+
multiMapSparseArrayAdd(exportedBindings, getOriginalNodeId(node), name);
122+
uniqueExports.set(idText(name), true);
123+
exportedNames = append(exportedNames, name);
124+
}
125+
}
115126
}
116127
}
117128
else {
118129
// export { x, y }
119-
for (const specifier of cast((<ExportDeclaration>node).exportClause, isNamedExports).elements) {
120-
if (!uniqueExports.get(idText(specifier.name))) {
121-
const name = specifier.propertyName || specifier.name;
122-
exportSpecifiers.add(idText(name), specifier);
123-
124-
const decl = resolver.getReferencedImportDeclaration(name)
125-
|| resolver.getReferencedValueDeclaration(name);
126-
127-
if (decl) {
128-
multiMapSparseArrayAdd(exportedBindings, getOriginalNodeId(decl), specifier.name);
129-
}
130-
131-
uniqueExports.set(idText(specifier.name), true);
132-
exportedNames = append(exportedNames, specifier.name);
133-
}
134-
}
130+
addExportedNamesForExportDeclaration(node as ExportDeclaration);
135131
}
136132
break;
137133

@@ -200,6 +196,25 @@ namespace ts {
200196
}
201197

202198
return { externalImports, exportSpecifiers, exportEquals, hasExportStarsToExportValues, exportedBindings, exportedNames, externalHelpersImportDeclaration };
199+
200+
function addExportedNamesForExportDeclaration(node: ExportDeclaration) {
201+
for (const specifier of cast(node.exportClause, isNamedExports).elements) {
202+
if (!uniqueExports.get(idText(specifier.name))) {
203+
const name = specifier.propertyName || specifier.name;
204+
exportSpecifiers.add(idText(name), specifier);
205+
206+
const decl = resolver.getReferencedImportDeclaration(name)
207+
|| resolver.getReferencedValueDeclaration(name);
208+
209+
if (decl) {
210+
multiMapSparseArrayAdd(exportedBindings, getOriginalNodeId(decl), specifier.name);
211+
}
212+
213+
uniqueExports.set(idText(specifier.name), true);
214+
exportedNames = append(exportedNames, specifier.name);
215+
}
216+
}
217+
}
203218
}
204219

205220
function collectExportedVariableInfo(decl: VariableDeclaration | BindingElement, uniqueExports: Map<boolean>, exportedNames: Identifier[] | undefined) {

tests/baselines/reference/ambientShorthand_reExport.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ var __createBinding = (this && this.__createBinding) || (Object.create ? (functi
2626
o[k2] = m[k];
2727
}));
2828
exports.__esModule = true;
29+
exports.x = void 0;
2930
var jquery_1 = require("jquery");
3031
__createBinding(exports, jquery_1, "x");
3132
//// [reExportAll.js]

tests/baselines/reference/commentsOnRequireStatement.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ exports.subject1 = 10;
2929
//// [2.js]
3030
"use strict";
3131
Object.defineProperty(exports, "__esModule", { value: true });
32+
exports.subject1 = exports.subject = void 0;
3233
/* blah0 */
3334
// blah
3435
// blah

tests/baselines/reference/constEnumPreserveEmitReexport.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,5 +36,6 @@ var __createBinding = (this && this.__createBinding) || (Object.create ? (functi
3636
o[k2] = m[k];
3737
}));
3838
exports.__esModule = true;
39+
exports["default"] = void 0;
3940
var ConstEnum_1 = require("./ConstEnum");
4041
__createBinding(exports, ConstEnum_1, "MyConstEnum", "default");

tests/baselines/reference/es6ExportClauseWithoutModuleSpecifierInEs5.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ exports.x = 10;
3737
//// [client.js]
3838
"use strict";
3939
Object.defineProperty(exports, "__esModule", { value: true });
40+
exports.x = exports.instantiatedModule = exports.c2 = exports.c = void 0;
4041
var server_1 = require("./server");
4142
Object.defineProperty(exports, "c", { enumerable: true, get: function () { return server_1.c; } });
4243
var server_2 = require("./server");

tests/baselines/reference/es6ExportEqualsInterop.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
220220
for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);
221221
};
222222
exports.__esModule = true;
223+
exports.a0 = exports.a9 = exports.a8 = exports.a7 = exports.a6 = exports.a5 = exports.a4 = exports.a3 = exports.a2 = exports.a1 = void 0;
223224
var z2 = require("variable");
224225
var z3 = require("interface-variable");
225226
var z4 = require("module");

tests/baselines/reference/esModuleInteropWithExportStar(target=es3).js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
3737
for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);
3838
};
3939
exports.__esModule = true;
40+
exports.y = exports.x = void 0;
4041
var fs = __importStar(require("./fs"));
4142
fs;
4243
__exportStar(require("./fs"), exports);

tests/baselines/reference/esModuleInteropWithExportStar(target=es5).js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
3737
for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);
3838
};
3939
Object.defineProperty(exports, "__esModule", { value: true });
40+
exports.y = exports.x = void 0;
4041
var fs = __importStar(require("./fs"));
4142
fs;
4243
__exportStar(require("./fs"), exports);

tests/baselines/reference/exportAsNamespace1(module=amd).js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ define(["require", "exports"], function (require, exports) {
2727
define(["require", "exports", "./0"], function (require, exports, ns) {
2828
"use strict";
2929
exports.__esModule = true;
30+
exports.ns = void 0;
3031
exports.ns = ns;
3132
ns.a;
3233
ns.b;

tests/baselines/reference/exportAsNamespace1(module=commonjs).js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ exports.b = 2;
2424
//// [1.js]
2525
"use strict";
2626
exports.__esModule = true;
27+
exports.ns = void 0;
2728
exports.ns = require("./0");
2829
ns.a;
2930
ns.b;

tests/baselines/reference/exportAsNamespace1(module=umd).js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ foo.ns.b;
4343
})(function (require, exports) {
4444
"use strict";
4545
exports.__esModule = true;
46+
exports.ns = void 0;
4647
exports.ns = require("./0");
4748
ns.a;
4849
ns.b;

tests/baselines/reference/exportAsNamespace2(module=amd).js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ define(["require", "exports"], function (require, exports) {
2727
define(["require", "exports", "./0"], function (require, exports, ns) {
2828
"use strict";
2929
exports.__esModule = true;
30+
exports.ns = void 0;
3031
exports.ns = ns;
3132
ns.a;
3233
ns.b;

tests/baselines/reference/exportAsNamespace2(module=commonjs).js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
4343
return result;
4444
};
4545
exports.__esModule = true;
46+
exports.ns = void 0;
4647
exports.ns = __importStar(require("./0"));
4748
ns.a;
4849
ns.b;

tests/baselines/reference/exportAsNamespace2(module=umd).js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
6262
})(function (require, exports) {
6363
"use strict";
6464
exports.__esModule = true;
65+
exports.ns = void 0;
6566
exports.ns = __importStar(require("./0"));
6667
ns.a;
6768
ns.b;

tests/baselines/reference/exportAsNamespace3(module=amd).js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ define(["require", "exports"], function (require, exports) {
3030
define(["require", "exports", "./0"], function (require, exports, ns) {
3131
"use strict";
3232
exports.__esModule = true;
33+
exports.ns = void 0;
3334
exports.ns = ns;
3435
ns.a;
3536
ns.b;

tests/baselines/reference/exportAsNamespace3(module=commonjs).js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
4646
return result;
4747
};
4848
exports.__esModule = true;
49+
exports.ns = void 0;
4950
exports.ns = __importStar(require("./0"));
5051
ns.a;
5152
ns.b;

tests/baselines/reference/exportAsNamespace3(module=umd).js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
6565
})(function (require, exports) {
6666
"use strict";
6767
exports.__esModule = true;
68+
exports.ns = void 0;
6869
exports.ns = __importStar(require("./0"));
6970
ns.a;
7071
ns.b;

tests/baselines/reference/exportAsNamespace_exportAssignment.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,4 +32,5 @@ var __importStar = (this && this.__importStar) || function (mod) {
3232
return result;
3333
};
3434
exports.__esModule = true;
35+
exports.ns = void 0;
3536
exports.ns = __importStar(require("./a"));

tests/baselines/reference/exportAsNamespace_missingEmitHelpers.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,5 @@ exports.__esModule = true;
1313
//// [b.js]
1414
"use strict";
1515
exports.__esModule = true;
16+
exports.ns = void 0;
1617
exports.ns = require("./a"); // Error

tests/baselines/reference/exportDeclarationWithModuleSpecifierNameOnNextLine1.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ var __createBinding = (this && this.__createBinding) || (Object.create ? (functi
3434
o[k2] = m[k];
3535
}));
3636
exports.__esModule = true;
37+
exports.x = void 0;
3738
var t1_1 = require("./t1");
3839
__createBinding(exports, t1_1, "x");
3940
//// [t3.js]
@@ -49,6 +50,7 @@ var __createBinding = (this && this.__createBinding) || (Object.create ? (functi
4950
o[k2] = m[k];
5051
}));
5152
exports.__esModule = true;
53+
exports.a = void 0;
5254
var t1_1 = require("./t1");
5355
__createBinding(exports, t1_1, "x", "a");
5456
//// [t5.js]
@@ -61,5 +63,6 @@ var __createBinding = (this && this.__createBinding) || (Object.create ? (functi
6163
o[k2] = m[k];
6264
}));
6365
exports.__esModule = true;
66+
exports.a = void 0;
6467
var t1_1 = require("./t1");
6568
__createBinding(exports, t1_1, "x", "a");

tests/baselines/reference/exportDefaultDuplicateCrash.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ var __createBinding = (this && this.__createBinding) || (Object.create ? (functi
1717
o[k2] = m[k];
1818
}));
1919
exports.__esModule = true;
20+
exports["default"] = void 0;
2021
function default_1() { }
2122
exports["default"] = default_1;
2223
var hi_1 = require("./hi");

tests/baselines/reference/exportNamespace2.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ exports.A = A;
2828
//// [b.js]
2929
"use strict";
3030
exports.__esModule = true;
31+
exports.a = void 0;
3132
exports.a = require("./a");
3233
//// [c.js]
3334
"use strict";

tests/baselines/reference/exportNamespace3.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ exports.__esModule = true;
3030
//// [c.js]
3131
"use strict";
3232
exports.__esModule = true;
33+
exports.a = void 0;
3334
exports.a = require("./b");
3435
//// [d.js]
3536
"use strict";

tests/baselines/reference/exportStarNotElided.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
3535
for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);
3636
};
3737
exports.__esModule = true;
38+
exports.aliased = void 0;
3839
__exportStar(require("./register"), exports);
3940
__exportStar(require("./data1"), exports);
4041
exports.aliased = require("./data1");

tests/baselines/reference/exportsAndImports1-amd.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ define(["require", "exports"], function (require, exports) {
6666
define(["require", "exports", "./t1"], function (require, exports, t1_1) {
6767
"use strict";
6868
Object.defineProperty(exports, "__esModule", { value: true });
69+
exports.a = exports.M = exports.E = exports.C = exports.f = exports.v = void 0;
6970
Object.defineProperty(exports, "v", { enumerable: true, get: function () { return t1_1.v; } });
7071
Object.defineProperty(exports, "f", { enumerable: true, get: function () { return t1_1.f; } });
7172
Object.defineProperty(exports, "C", { enumerable: true, get: function () { return t1_1.C; } });

tests/baselines/reference/exportsAndImports1-es6.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ exports.a = a;
6060
//// [t2.js]
6161
"use strict";
6262
Object.defineProperty(exports, "__esModule", { value: true });
63+
exports.a = exports.M = exports.E = exports.C = exports.f = exports.v = void 0;
6364
var t1_1 = require("./t1");
6465
Object.defineProperty(exports, "v", { enumerable: true, get: function () { return t1_1.v; } });
6566
Object.defineProperty(exports, "f", { enumerable: true, get: function () { return t1_1.f; } });

tests/baselines/reference/exportsAndImports1.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ var __createBinding = (this && this.__createBinding) || (Object.create ? (functi
7070
o[k2] = m[k];
7171
}));
7272
exports.__esModule = true;
73+
exports.a = exports.M = exports.E = exports.C = exports.f = exports.v = void 0;
7374
var t1_1 = require("./t1");
7475
__createBinding(exports, t1_1, "v");
7576
__createBinding(exports, t1_1, "f");

tests/baselines/reference/exportsAndImports2-amd.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ define(["require", "exports"], function (require, exports) {
2424
define(["require", "exports", "./t1"], function (require, exports, t1_1) {
2525
"use strict";
2626
Object.defineProperty(exports, "__esModule", { value: true });
27+
exports.x = exports.y = void 0;
2728
Object.defineProperty(exports, "y", { enumerable: true, get: function () { return t1_1.x; } });
2829
Object.defineProperty(exports, "x", { enumerable: true, get: function () { return t1_1.y; } });
2930
});

tests/baselines/reference/exportsAndImports2-es6.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ exports.y = "y";
2121
//// [t2.js]
2222
"use strict";
2323
Object.defineProperty(exports, "__esModule", { value: true });
24+
exports.x = exports.y = void 0;
2425
var t1_1 = require("./t1");
2526
Object.defineProperty(exports, "y", { enumerable: true, get: function () { return t1_1.x; } });
2627
Object.defineProperty(exports, "x", { enumerable: true, get: function () { return t1_1.y; } });

tests/baselines/reference/exportsAndImports2.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ var __createBinding = (this && this.__createBinding) || (Object.create ? (functi
2828
o[k2] = m[k];
2929
}));
3030
exports.__esModule = true;
31+
exports.x = exports.y = void 0;
3132
var t1_1 = require("./t1");
3233
__createBinding(exports, t1_1, "x", "y");
3334
__createBinding(exports, t1_1, "y", "x");

tests/baselines/reference/exportsAndImports3-amd.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ define(["require", "exports"], function (require, exports) {
6868
define(["require", "exports", "./t1"], function (require, exports, t1_1) {
6969
"use strict";
7070
Object.defineProperty(exports, "__esModule", { value: true });
71+
exports.a = exports.M = exports.E = exports.C = exports.f = exports.v = void 0;
7172
Object.defineProperty(exports, "v", { enumerable: true, get: function () { return t1_1.v1; } });
7273
Object.defineProperty(exports, "f", { enumerable: true, get: function () { return t1_1.f1; } });
7374
Object.defineProperty(exports, "C", { enumerable: true, get: function () { return t1_1.C1; } });

tests/baselines/reference/exportsAndImports3-es6.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ exports.a1 = exports.a;
6262
//// [t2.js]
6363
"use strict";
6464
Object.defineProperty(exports, "__esModule", { value: true });
65+
exports.a = exports.M = exports.E = exports.C = exports.f = exports.v = void 0;
6566
var t1_1 = require("./t1");
6667
Object.defineProperty(exports, "v", { enumerable: true, get: function () { return t1_1.v1; } });
6768
Object.defineProperty(exports, "f", { enumerable: true, get: function () { return t1_1.f1; } });

tests/baselines/reference/exportsAndImports3.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ var __createBinding = (this && this.__createBinding) || (Object.create ? (functi
7272
o[k2] = m[k];
7373
}));
7474
exports.__esModule = true;
75+
exports.a = exports.M = exports.E = exports.C = exports.f = exports.v = void 0;
7576
var t1_1 = require("./t1");
7677
__createBinding(exports, t1_1, "v1", "v");
7778
__createBinding(exports, t1_1, "f1", "f");

tests/baselines/reference/isolatedModulesImportExportElision.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ var __extends = (this && this.__extends) || (function () {
2828
};
2929
})();
3030
Object.defineProperty(exports, "__esModule", { value: true });
31-
exports.z = void 0;
31+
exports.z = exports.c1 = void 0;
3232
var module_1 = require("module");
3333
var module_2 = require("module");
3434
var ns = require("module");

tests/baselines/reference/isolatedModulesReExportType.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ var __createBinding = (this && this.__createBinding) || (Object.create ? (functi
6767
o[k2] = m[k];
6868
}));
6969
exports.__esModule = true;
70-
exports.NS = void 0;
70+
exports.NS = exports.C = void 0;
7171
// OK, has a value side
7272
var exportValue_1 = require("./exportValue");
7373
__createBinding(exports, exportValue_1, "C");

tests/baselines/reference/jsDeclarationsExportSpecifierNonlocal.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ exports.OtherThing = OtherThing;
2626
//// [index.js]
2727
"use strict";
2828
Object.defineProperty(exports, "__esModule", { value: true });
29+
exports.default = exports.Thing = void 0;
2930
var source_1 = require("./source");
3031
Object.defineProperty(exports, "Thing", { enumerable: true, get: function () { return source_1.Thing; } });
3132
Object.defineProperty(exports, "default", { enumerable: true, get: function () { return source_1.OtherThing; } });

0 commit comments

Comments
 (0)