@@ -44,6 +44,9 @@ namespace ts {
44
44
return undefined ;
45
45
case SyntaxKind . ExportAssignment :
46
46
return visitExportAssignment ( < ExportAssignment > node ) ;
47
+ case SyntaxKind . ExportDeclaration :
48
+ const exportDecl = ( node as ExportDeclaration ) ;
49
+ return visitExportDeclaration ( exportDecl ) ;
47
50
}
48
51
49
52
return node ;
@@ -54,6 +57,41 @@ namespace ts {
54
57
return node . isExportEquals ? undefined : node ;
55
58
}
56
59
60
+ function visitExportDeclaration ( node : ExportDeclaration ) {
61
+ // `export * as ns` only needs to be transformed in ES2015
62
+ if ( compilerOptions . module !== undefined && compilerOptions . module > ModuleKind . ES2015 ) {
63
+ return node ;
64
+ }
65
+
66
+ // Either ill-formed or don't need to be tranformed.
67
+ if ( ! node . exportClause || ! isNamespaceExport ( node . exportClause ) || ! node . moduleSpecifier ) {
68
+ return node ;
69
+ }
70
+
71
+ const oldIdentifier = node . exportClause . name ;
72
+ const synthName = getGeneratedNameForNode ( oldIdentifier ) ;
73
+ const importDecl = createImportDeclaration (
74
+ /*decorators*/ undefined ,
75
+ /*modifiers*/ undefined ,
76
+ createImportClause ( /*name*/ undefined ,
77
+ createNamespaceImport (
78
+ synthName
79
+ )
80
+ ) ,
81
+ node . moduleSpecifier ,
82
+ ) ;
83
+ setOriginalNode ( importDecl , node . exportClause ) ;
84
+
85
+ const exportDecl = createExportDeclaration (
86
+ /*decorators*/ undefined ,
87
+ /*modifiers*/ undefined ,
88
+ createNamedExports ( [ createExportSpecifier ( synthName , oldIdentifier ) ] ) ,
89
+ ) ;
90
+ setOriginalNode ( exportDecl , node ) ;
91
+
92
+ return [ importDecl , exportDecl ] ;
93
+ }
94
+
57
95
//
58
96
// Emit Notification
59
97
//
0 commit comments