Skip to content

Commit 0782f57

Browse files
committed
fix(bug): refined handling of default exports of unnamed classes
1 parent 702e108 commit 0782f57

File tree

3 files changed

+21
-13
lines changed

3 files changed

+21
-13
lines changed

src/service/transformer/declaration-bundler/deconflict/visitor/trace-identifiers/trace-identifiers-for-import-declaration.ts

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,7 @@ export function traceIdentifiersForImportDeclaration({
1414
}: TraceIdentifiersVisitorOptions<ImportDeclaration>): void {
1515
if (node.importClause != null) {
1616
if (node.importClause.name != null) {
17-
if (!isIdentifierFree(node.importClause.name.text)) {
18-
updateIdentifierName(node.importClause.name.text, generateUniqueVariableName(node.importClause.name.text));
19-
} else {
20-
addIdentifier(node.importClause.name.text);
21-
}
17+
addIdentifier(node.importClause.name.text);
2218
}
2319

2420
if (node.importClause.namedBindings != null) {

src/service/transformer/declaration-bundler/update-exports/visitor/visit-class-declaration.ts

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
1-
import {ClassDeclaration, updateClassDeclaration} from "typescript";
1+
import {ClassDeclaration, updateClassDeclaration, createIdentifier, Identifier} from "typescript";
22
import {UpdateExportsVisitorOptions} from "../update-exports-visitor-options";
33
import {hasDefaultExportModifier, hasExportModifier, removeExportModifier} from "../../util/modifier/modifier-util";
4+
import {pascalCase} from "@wessberg/stringutil";
5+
import {stripExtension} from "../../../../../util/path/path-util";
6+
import {basename} from "path";
47

58
/**
69
* Visits the given ClassDeclaration.
@@ -19,22 +22,28 @@ export function visitClassDeclaration({
1922
// If the node has no export modifier, leave it as it is
2023
if (!hasExportModifier(node)) return continuation(node);
2124

25+
let name: Identifier | undefined = node.name;
26+
2227
// If the node is located in the entry file, leave it as it is - completely
2328
if (isEntry) {
24-
if (!hasDefaultExportModifier(node.modifiers)) {
25-
exportedSpecifiersFromModule.add(node.name!.text);
29+
if (!hasDefaultExportModifier(node.modifiers) && name != null) {
30+
exportedSpecifiersFromModule.add(name.text);
2631
}
2732
return continuation(node);
2833
}
2934

3035
// If the node has a default export, mark it as the identifier for the default export of that module
3136
if (hasDefaultExportModifier(node.modifiers)) {
32-
identifiersForDefaultExportsForModules.set(sourceFile.fileName, [node.name!.text, node]);
33-
} else {
37+
if (name == null) {
38+
name = createIdentifier(`Default${pascalCase(stripExtension(basename(sourceFile.fileName)))}Export`);
39+
}
40+
// Compute a name for it. It must have one
41+
identifiersForDefaultExportsForModules.set(sourceFile.fileName, [name.text, node]);
42+
} else if (name != null) {
3443
// Add the node name to the exported symbols
35-
parsedExportedSymbols.set(node.name!.text, node);
44+
parsedExportedSymbols.set(name.text, node);
3645
}
3746

3847
// Update the node and remove the export modifiers from it
39-
return continuation(updateClassDeclaration(node, node.decorators, removeExportModifier(node.modifiers), node.name, node.typeParameters, node.heritageClauses, node.members));
48+
return continuation(updateClassDeclaration(node, node.decorators, removeExportModifier(node.modifiers), name, node.typeParameters, node.heritageClauses, node.members));
4049
}

src/service/transformer/declaration-bundler/update-exports/visitor/visit-export-declaration.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,12 @@ export function visitExportDeclaration({
4949
if (node.exportClause != null) {
5050
for (const element of node.exportClause.elements) {
5151
const ref = element.propertyName != null ? element.propertyName : element.name;
52+
5253
const declaration = getAliasedDeclaration(ref, typeChecker);
5354
if (declaration != null) {
54-
parsedExportedSymbols.set(ref.text, (declaration as unknown) as DeclarationStatement);
55+
element.name.text === "default"
56+
? identifiersForDefaultExportsForModules.set(sourceFile.fileName, [ref.text, declaration])
57+
: parsedExportedSymbols.set(ref.text, (declaration as unknown) as DeclarationStatement);
5558
}
5659
}
5760
}

0 commit comments

Comments
 (0)