@@ -64,6 +64,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
64
64
65
65
let compilerOptions = host . getCompilerOptions ( ) ;
66
66
let languageVersion = compilerOptions . target || ScriptTarget . ES3 ;
67
+ let modulekind = compilerOptions . module ? compilerOptions . module : languageVersion === ScriptTarget . ES6 ? ModuleKind . ES6 : ModuleKind . None ;
67
68
let sourceMapDataList : SourceMapData [ ] = compilerOptions . sourceMap || compilerOptions . inlineSourceMap ? [ ] : undefined ;
68
69
let diagnostics : Diagnostic [ ] = [ ] ;
69
70
let newLine = host . getNewLine ( ) ;
@@ -188,6 +189,14 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
188
189
189
190
/** If removeComments is true, no leading-comments needed to be emitted **/
190
191
let emitLeadingCommentsOfPosition = compilerOptions . removeComments ? function ( pos : number ) { } : emitLeadingCommentsOfPositionWorker ;
192
+
193
+ let moduleEmitDelegates : Map < ( node : SourceFile , startIndex : number ) => void > = {
194
+ [ ModuleKind . ES6 ] : emitES6Module ,
195
+ [ ModuleKind . AMD ] : emitAMDModule ,
196
+ [ ModuleKind . System ] : emitSystemModule ,
197
+ [ ModuleKind . UMD ] : emitUMDModule ,
198
+ [ ModuleKind . CommonJS ] : emitCommonJSModule ,
199
+ } ;
191
200
192
201
if ( compilerOptions . sourceMap || compilerOptions . inlineSourceMap ) {
193
202
initializeEmitterWithSourceMaps ( ) ;
@@ -1493,7 +1502,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
1493
1502
if ( container ) {
1494
1503
if ( container . kind === SyntaxKind . SourceFile ) {
1495
1504
// Identifier references module export
1496
- if ( languageVersion < ScriptTarget . ES6 && compilerOptions . module !== ModuleKind . System ) {
1505
+ if ( modulekind !== ModuleKind . ES6 && modulekind !== ModuleKind . System ) {
1497
1506
write ( "exports." ) ;
1498
1507
}
1499
1508
}
@@ -1503,7 +1512,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
1503
1512
write ( "." ) ;
1504
1513
}
1505
1514
}
1506
- else if ( languageVersion < ScriptTarget . ES6 ) {
1515
+ else if ( modulekind !== ModuleKind . ES6 ) {
1507
1516
let declaration = resolver . getReferencedImportDeclaration ( node ) ;
1508
1517
if ( declaration ) {
1509
1518
if ( declaration . kind === SyntaxKind . ImportClause ) {
@@ -3056,7 +3065,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
3056
3065
write ( getGeneratedNameForNode ( container ) ) ;
3057
3066
write ( "." ) ;
3058
3067
}
3059
- else if ( languageVersion < ScriptTarget . ES6 && compilerOptions . module !== ModuleKind . System ) {
3068
+ else if ( modulekind !== ModuleKind . ES6 && modulekind !== ModuleKind . System ) {
3060
3069
write ( "exports." ) ;
3061
3070
}
3062
3071
}
@@ -3076,7 +3085,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
3076
3085
if ( node . parent . kind === SyntaxKind . SourceFile ) {
3077
3086
Debug . assert ( ! ! ( node . flags & NodeFlags . Default ) || node . kind === SyntaxKind . ExportAssignment ) ;
3078
3087
// only allow export default at a source file level
3079
- if ( compilerOptions . module === ModuleKind . CommonJS || compilerOptions . module === ModuleKind . AMD || compilerOptions . module === ModuleKind . UMD ) {
3088
+ if ( modulekind === ModuleKind . CommonJS || modulekind === ModuleKind . AMD || modulekind === ModuleKind . UMD ) {
3080
3089
if ( ! currentSourceFile . symbol . exports [ "___esModule" ] ) {
3081
3090
if ( languageVersion === ScriptTarget . ES5 ) {
3082
3091
// default value of configurable, enumerable, writable are `false`.
@@ -3098,7 +3107,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
3098
3107
emitStart ( node ) ;
3099
3108
3100
3109
// emit call to exporter only for top level nodes
3101
- if ( compilerOptions . module === ModuleKind . System && node . parent === currentSourceFile ) {
3110
+ if ( modulekind === ModuleKind . System && node . parent === currentSourceFile ) {
3102
3111
// emit export default <smth> as
3103
3112
// export("default", <smth>)
3104
3113
write ( `${ exportFunctionForFile } ("` ) ;
@@ -3134,7 +3143,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
3134
3143
}
3135
3144
3136
3145
function emitExportMemberAssignments ( name : Identifier ) {
3137
- if ( compilerOptions . module === ModuleKind . System ) {
3146
+ if ( modulekind === ModuleKind . System ) {
3138
3147
return ;
3139
3148
}
3140
3149
@@ -3154,7 +3163,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
3154
3163
}
3155
3164
3156
3165
function emitExportSpecifierInSystemModule ( specifier : ExportSpecifier ) : void {
3157
- Debug . assert ( compilerOptions . module === ModuleKind . System ) ;
3166
+ Debug . assert ( modulekind === ModuleKind . System ) ;
3158
3167
3159
3168
if ( ! resolver . getReferencedValueDeclaration ( specifier . propertyName || specifier . name ) && ! resolver . isValueAliasDeclaration ( specifier ) ) {
3160
3169
return ;
@@ -3491,7 +3500,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
3491
3500
3492
3501
function isES6ExportedDeclaration ( node : Node ) {
3493
3502
return ! ! ( node . flags & NodeFlags . Export ) &&
3494
- languageVersion >= ScriptTarget . ES6 &&
3503
+ modulekind === ModuleKind . ES6 &&
3495
3504
node . parent . kind === SyntaxKind . SourceFile ;
3496
3505
}
3497
3506
@@ -5257,7 +5266,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
5257
5266
write ( ";" ) ;
5258
5267
}
5259
5268
if ( languageVersion < ScriptTarget . ES6 && node . parent === currentSourceFile ) {
5260
- if ( compilerOptions . module === ModuleKind . System && ( node . flags & NodeFlags . Export ) ) {
5269
+ if ( modulekind === ModuleKind . System && ( node . flags & NodeFlags . Export ) ) {
5261
5270
// write the call to exporter for enum
5262
5271
writeLine ( ) ;
5263
5272
write ( `${ exportFunctionForFile } ("` ) ;
@@ -5379,7 +5388,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
5379
5388
write ( " = {}));" ) ;
5380
5389
emitEnd ( node ) ;
5381
5390
if ( ! isES6ExportedDeclaration ( node ) && node . name . kind === SyntaxKind . Identifier && node . parent === currentSourceFile ) {
5382
- if ( compilerOptions . module === ModuleKind . System && ( node . flags & NodeFlags . Export ) ) {
5391
+ if ( modulekind === ModuleKind . System && ( node . flags & NodeFlags . Export ) ) {
5383
5392
writeLine ( ) ;
5384
5393
write ( `${ exportFunctionForFile } ("` ) ;
5385
5394
emitDeclarationName ( node ) ;
@@ -5443,7 +5452,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
5443
5452
}
5444
5453
5445
5454
function emitImportDeclaration ( node : ImportDeclaration ) {
5446
- if ( languageVersion < ScriptTarget . ES6 ) {
5455
+ if ( modulekind !== ModuleKind . ES6 ) {
5447
5456
return emitExternalImportDeclaration ( node ) ;
5448
5457
}
5449
5458
@@ -5494,7 +5503,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
5494
5503
let isExportedImport = node . kind === SyntaxKind . ImportEqualsDeclaration && ( node . flags & NodeFlags . Export ) !== 0 ;
5495
5504
let namespaceDeclaration = getNamespaceDeclarationNode ( node ) ;
5496
5505
5497
- if ( compilerOptions . module !== ModuleKind . AMD ) {
5506
+ if ( modulekind !== ModuleKind . AMD ) {
5498
5507
emitLeadingComments ( node ) ;
5499
5508
emitStart ( node ) ;
5500
5509
if ( namespaceDeclaration && ! isDefaultImport ( node ) ) {
@@ -5606,15 +5615,15 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
5606
5615
}
5607
5616
5608
5617
function emitExportDeclaration ( node : ExportDeclaration ) {
5609
- Debug . assert ( compilerOptions . module !== ModuleKind . System ) ;
5618
+ Debug . assert ( modulekind !== ModuleKind . System ) ;
5610
5619
5611
- if ( languageVersion < ScriptTarget . ES6 ) {
5620
+ if ( modulekind !== ModuleKind . ES6 ) {
5612
5621
if ( node . moduleSpecifier && ( ! node . exportClause || resolver . isValueAliasDeclaration ( node ) ) ) {
5613
5622
emitStart ( node ) ;
5614
5623
let generatedName = getGeneratedNameForNode ( node ) ;
5615
5624
if ( node . exportClause ) {
5616
5625
// export { x, y, ... } from "foo"
5617
- if ( compilerOptions . module !== ModuleKind . AMD ) {
5626
+ if ( modulekind !== ModuleKind . AMD ) {
5618
5627
write ( "var " ) ;
5619
5628
write ( generatedName ) ;
5620
5629
write ( " = " ) ;
@@ -5641,7 +5650,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
5641
5650
// export * from "foo"
5642
5651
writeLine ( ) ;
5643
5652
write ( "__export(" ) ;
5644
- if ( compilerOptions . module !== ModuleKind . AMD ) {
5653
+ if ( modulekind !== ModuleKind . AMD ) {
5645
5654
emitRequire ( getExternalModuleName ( node ) ) ;
5646
5655
}
5647
5656
else {
@@ -5674,7 +5683,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
5674
5683
}
5675
5684
5676
5685
function emitExportOrImportSpecifierList ( specifiers : ImportOrExportSpecifier [ ] , shouldEmit : ( node : Node ) => boolean ) {
5677
- Debug . assert ( languageVersion >= ScriptTarget . ES6 ) ;
5686
+ Debug . assert ( modulekind === ModuleKind . ES6 ) ;
5678
5687
5679
5688
let needsComma = false ;
5680
5689
for ( let specifier of specifiers ) {
@@ -5694,7 +5703,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
5694
5703
5695
5704
function emitExportAssignment ( node : ExportAssignment ) {
5696
5705
if ( ! node . isExportEquals && resolver . isValueAliasDeclaration ( node ) ) {
5697
- if ( languageVersion >= ScriptTarget . ES6 ) {
5706
+ if ( modulekind === ModuleKind . ES6 ) {
5698
5707
writeLine ( ) ;
5699
5708
emitStart ( node ) ;
5700
5709
write ( "export default " ) ;
@@ -5709,7 +5718,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
5709
5718
else {
5710
5719
writeLine ( ) ;
5711
5720
emitStart ( node ) ;
5712
- if ( compilerOptions . module === ModuleKind . System ) {
5721
+ if ( modulekind === ModuleKind . System ) {
5713
5722
write ( `${ exportFunctionForFile } ("default",` ) ;
5714
5723
emit ( node . expression ) ;
5715
5724
write ( ")" ) ;
@@ -6155,7 +6164,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
6155
6164
}
6156
6165
6157
6166
function isCurrentFileSystemExternalModule ( ) {
6158
- return compilerOptions . module === ModuleKind . System && isExternalModule ( currentSourceFile ) ;
6167
+ return modulekind === ModuleKind . System && isExternalModule ( currentSourceFile ) ;
6159
6168
}
6160
6169
6161
6170
function emitSystemModuleBody ( node : SourceFile , dependencyGroups : DependencyGroup [ ] , startIndex : number ) : void {
@@ -6713,21 +6722,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
6713
6722
let startIndex = emitDirectivePrologues ( node . statements , /*startWithNewLine*/ false ) ;
6714
6723
6715
6724
if ( isExternalModule ( node ) || compilerOptions . isolatedModules ) {
6716
- if ( languageVersion >= ScriptTarget . ES6 ) {
6717
- emitES6Module ( node , startIndex ) ;
6718
- }
6719
- else if ( compilerOptions . module === ModuleKind . AMD ) {
6720
- emitAMDModule ( node , startIndex ) ;
6721
- }
6722
- else if ( compilerOptions . module === ModuleKind . System ) {
6723
- emitSystemModule ( node , startIndex ) ;
6724
- }
6725
- else if ( compilerOptions . module === ModuleKind . UMD ) {
6726
- emitUMDModule ( node , startIndex ) ;
6727
- }
6728
- else {
6729
- emitCommonJSModule ( node , startIndex ) ;
6730
- }
6725
+ let emitModule = moduleEmitDelegates [ modulekind ] || moduleEmitDelegates [ ModuleKind . CommonJS ] ;
6726
+ emitModule ( node , startIndex ) ;
6731
6727
}
6732
6728
else {
6733
6729
externalImports = undefined ;
0 commit comments