Skip to content

Commit b966829

Browse files
committed
Mark alias references on export assignments
1 parent f079716 commit b966829

File tree

5 files changed

+95
-1
lines changed

5 files changed

+95
-1
lines changed

src/compiler/checker.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16042,7 +16042,7 @@ namespace ts {
1604216042
}
1604316043

1604416044
function markAliasReferenced(symbol: Symbol, location: Node) {
16045-
if (isNonLocalAlias(symbol, /*excludes*/ SymbolFlags.Value) && !isInTypeQuery(location) && !isConstEnumOrConstEnumOnlyModule(resolveAlias(symbol))) {
16045+
if (isNonLocalAlias(symbol, /*excludes*/ SymbolFlags.Value) && !isInTypeQuery(location) && (compilerOptions.preserveConstEnums || !isConstEnumOrConstEnumOnlyModule(resolveAlias(symbol)))) {
1604616046
markAliasSymbolAsReferenced(symbol);
1604716047
}
1604816048
}
@@ -27308,6 +27308,11 @@ namespace ts {
2730827308
}
2730927309
if (node.expression.kind === SyntaxKind.Identifier) {
2731027310
markExportAsReferenced(node);
27311+
const id = node.expression as Identifier;
27312+
const sym = resolveEntityName(id, SymbolFlags.All, /*ignoreErrors*/ true, /*dontResolveAlias*/ true, node);
27313+
if (sym) {
27314+
markAliasReferenced(sym, id);
27315+
}
2731127316

2731227317
if (getEmitDeclarations(compilerOptions)) {
2731327318
collectLinkedAliases(node.expression as Identifier, /*setVisibility*/ true);
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
//// [tests/cases/compiler/constEnumPreserveEmitReexport.ts] ////
2+
3+
//// [ConstEnum.ts]
4+
export const enum MyConstEnum {
5+
Foo,
6+
Bar
7+
};
8+
//// [ImportExport.ts]
9+
import { MyConstEnum } from './ConstEnum';
10+
export default MyConstEnum;
11+
//// [ReExport.ts]
12+
export { MyConstEnum as default } from './ConstEnum';
13+
14+
//// [ConstEnum.js]
15+
"use strict";
16+
exports.__esModule = true;
17+
var MyConstEnum;
18+
(function (MyConstEnum) {
19+
MyConstEnum[MyConstEnum["Foo"] = 0] = "Foo";
20+
MyConstEnum[MyConstEnum["Bar"] = 1] = "Bar";
21+
})(MyConstEnum = exports.MyConstEnum || (exports.MyConstEnum = {}));
22+
;
23+
//// [ImportExport.js]
24+
"use strict";
25+
exports.__esModule = true;
26+
var ConstEnum_1 = require("./ConstEnum");
27+
exports["default"] = ConstEnum_1.MyConstEnum;
28+
//// [ReExport.js]
29+
"use strict";
30+
exports.__esModule = true;
31+
var ConstEnum_1 = require("./ConstEnum");
32+
exports["default"] = ConstEnum_1.MyConstEnum;
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
=== tests/cases/compiler/ConstEnum.ts ===
2+
export const enum MyConstEnum {
3+
>MyConstEnum : Symbol(MyConstEnum, Decl(ConstEnum.ts, 0, 0))
4+
5+
Foo,
6+
>Foo : Symbol(MyConstEnum.Foo, Decl(ConstEnum.ts, 0, 31))
7+
8+
Bar
9+
>Bar : Symbol(MyConstEnum.Bar, Decl(ConstEnum.ts, 1, 8))
10+
11+
};
12+
=== tests/cases/compiler/ImportExport.ts ===
13+
import { MyConstEnum } from './ConstEnum';
14+
>MyConstEnum : Symbol(MyConstEnum, Decl(ImportExport.ts, 0, 8))
15+
16+
export default MyConstEnum;
17+
>MyConstEnum : Symbol(MyConstEnum, Decl(ImportExport.ts, 0, 8))
18+
19+
=== tests/cases/compiler/ReExport.ts ===
20+
export { MyConstEnum as default } from './ConstEnum';
21+
>MyConstEnum : Symbol(default, Decl(ReExport.ts, 0, 8))
22+
>default : Symbol(default, Decl(ReExport.ts, 0, 8))
23+
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
=== tests/cases/compiler/ConstEnum.ts ===
2+
export const enum MyConstEnum {
3+
>MyConstEnum : MyConstEnum
4+
5+
Foo,
6+
>Foo : MyConstEnum.Foo
7+
8+
Bar
9+
>Bar : MyConstEnum.Bar
10+
11+
};
12+
=== tests/cases/compiler/ImportExport.ts ===
13+
import { MyConstEnum } from './ConstEnum';
14+
>MyConstEnum : typeof MyConstEnum
15+
16+
export default MyConstEnum;
17+
>MyConstEnum : MyConstEnum
18+
19+
=== tests/cases/compiler/ReExport.ts ===
20+
export { MyConstEnum as default } from './ConstEnum';
21+
>MyConstEnum : typeof import("tests/cases/compiler/ConstEnum").MyConstEnum
22+
>default : typeof import("tests/cases/compiler/ConstEnum").MyConstEnum
23+
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
// @preserveConstEnums: true
2+
// @filename: ConstEnum.ts
3+
export const enum MyConstEnum {
4+
Foo,
5+
Bar
6+
};
7+
// @filename: ImportExport.ts
8+
import { MyConstEnum } from './ConstEnum';
9+
export default MyConstEnum;
10+
// @filename: ReExport.ts
11+
export { MyConstEnum as default } from './ConstEnum';

0 commit comments

Comments
 (0)