From 80fab7c5a41534e3c506a90b7375a3cb753aae05 Mon Sep 17 00:00:00 2001 From: Vladimir Matveev Date: Tue, 12 Apr 2016 15:19:05 -0700 Subject: [PATCH] elide exports with no value side --- src/compiler/transformers/module/es6.ts | 36 ++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/src/compiler/transformers/module/es6.ts b/src/compiler/transformers/module/es6.ts index 9355b476247..d2f4ca4f224 100644 --- a/src/compiler/transformers/module/es6.ts +++ b/src/compiler/transformers/module/es6.ts @@ -34,12 +34,18 @@ namespace ts { return visitImportSpecifier(node); case SyntaxKind.ExportAssignment: return visitExportAssignment(node); + case SyntaxKind.ExportDeclaration: + return visitExportDeclaration(node); + case SyntaxKind.NamedExports: + return visitNamedExports(node); + case SyntaxKind.ExportSpecifier: + return visitExportSpecifier(node); } return node; } - function visitExportAssignment(node: ExportAssignment): ExportDeclaration { + function visitExportAssignment(node: ExportAssignment): ExportAssignment { if (node.isExportEquals) { return undefined; // do not emit export equals for ES6 } @@ -47,6 +53,34 @@ namespace ts { return nodeIsSynthesized(original) || resolver.isValueAliasDeclaration(original) ? node: undefined; } + function visitExportDeclaration(node: ExportDeclaration): ExportDeclaration { + if (!node.exportClause) { + return node; // export * is always emitted + } + if (!resolver.isValueAliasDeclaration(node)) { + return undefined; + } + const newExportClause = visitNode(node.exportClause, visitor, isNamedExports, /*optional*/ true); + if (node.exportClause === newExportClause) { + return node; + } + return newExportClause + ? createExportDeclaration(newExportClause, node.moduleSpecifier) + : undefined; + } + + function visitNamedExports(node: NamedExports): NamedExports { + const newExports = visitNodes(node.elements, visitor, isExportSpecifier); + if (node.elements === newExports) { + return node; + } + return newExports.length ? createNamedExports(newExports) : undefined; + } + + function visitExportSpecifier(node: ExportSpecifier): ExportSpecifier { + return resolver.isValueAliasDeclaration(node) ? node : undefined; + } + function visitImportEqualsDeclaration(node: ImportEqualsDeclaration): ImportEqualsDeclaration { return !isExternalModuleImportEqualsDeclaration(node) || resolver.isReferencedAliasDeclaration(node) ? node : undefined; }