fix export * as default syntax (#39803)

* fix export * as default syntax

* update comments
This commit is contained in:
Wenlu Wang
2020-08-11 07:56:45 +08:00
committed by GitHub
parent 1ec71f0e0c
commit a80f60c6d6
24 changed files with 1137 additions and 4 deletions

View File

@@ -490,7 +490,7 @@ namespace ts {
*/
export function getLocalNameForExternalImport(factory: NodeFactory, node: ImportDeclaration | ExportDeclaration | ImportEqualsDeclaration, sourceFile: SourceFile): Identifier | undefined {
const namespaceDeclaration = getNamespaceDeclarationNode(node);
if (namespaceDeclaration && !isDefaultImport(node)) {
if (namespaceDeclaration && !isDefaultImport(node) && !isExportNamespaceAsDefaultDeclaration(node)) {
const name = namespaceDeclaration.name;
return isGeneratedIdentifier(name) ? name : factory.createIdentifier(getSourceTextOfNodeFromSourceFile(sourceFile, name) || idText(name));
}

View File

@@ -6996,7 +6996,7 @@ namespace ts {
}
function parseNamespaceExport(pos: number): NamespaceExport {
return finishNode(factory.createNamespaceExport(parseIdentifier()), pos);
return finishNode(factory.createNamespaceExport(parseIdentifierName()), pos);
}
function parseExportDeclaration(pos: number, hasJSDoc: boolean, decorators: NodeArray<Decorator> | undefined, modifiers: NodeArray<Modifier> | undefined): ExportDeclaration {

View File

@@ -99,7 +99,7 @@ namespace ts {
);
setOriginalNode(importDecl, node.exportClause);
const exportDecl = factory.createExportDeclaration(
const exportDecl = isExportNamespaceAsDefaultDeclaration(node) ? factory.createExportDefault(synthName) : factory.createExportDeclaration(
/*decorators*/ undefined,
/*modifiers*/ undefined,
/*isTypeOnly*/ false,

View File

@@ -1043,6 +1043,7 @@ namespace ts {
else if (node.exportClause) {
const statements: Statement[] = [];
// export * as ns from "mod";
// export * as default from "mod";
statements.push(
setOriginalNode(
setTextRange(
@@ -1051,7 +1052,8 @@ namespace ts {
factory.cloneNode(node.exportClause.name),
getHelperExpressionForExport(node, moduleKind !== ModuleKind.AMD ?
createRequireCall(node) :
factory.createIdentifier(idText(node.exportClause.name)))
isExportNamespaceAsDefaultDeclaration(node) ? generatedName :
factory.createIdentifier(idText(node.exportClause.name)))
)
),
node

View File

@@ -519,6 +519,10 @@ namespace ts {
return !!findAncestor(node, isJSDocTypeExpression);
}
export function isExportNamespaceAsDefaultDeclaration(node: Node): boolean {
return !!(isExportDeclaration(node) && node.exportClause && isNamespaceExport(node.exportClause) && node.exportClause.name.escapedText === "default");
}
export function getTextOfNodeFromSourceText(sourceText: string, node: Node, includeTrivia = false): string {
if (nodeIsMissing(node)) {
return "";