@@ -63,7 +63,7 @@ function visitBlockStatements(
63
63
// 'oIndex' is the original statement index; 'uIndex' is the updated statement index
64
64
for ( let oIndex = 0 , uIndex = 0 ; oIndex < statements . length - 1 ; oIndex ++ , uIndex ++ ) {
65
65
const currentStatement = statements [ oIndex ] ;
66
- let newStatement : ts . Statement | undefined ;
66
+ let newStatement : ts . Statement [ ] | undefined ;
67
67
let oldStatementsLength = 0 ;
68
68
69
69
// these can't contain an enum declaration
@@ -181,12 +181,15 @@ function visitBlockStatements(
181
181
oIndex += classStatements . length - 1 ;
182
182
}
183
183
184
- if ( newStatement ) {
184
+ if ( newStatement && newStatement . length > 0 ) {
185
185
if ( ! updatedStatements ) {
186
186
updatedStatements = [ ...statements ] ;
187
187
}
188
188
189
- updatedStatements . splice ( uIndex , oldStatementsLength , newStatement ) ;
189
+ updatedStatements . splice ( uIndex , oldStatementsLength , ...newStatement ) ;
190
+ // When having more than a single new statement
191
+ // we need to update the update Index
192
+ uIndex += ( newStatement ? newStatement . length - 1 : 0 ) ;
190
193
}
191
194
192
195
const result = ts . visitNode ( currentStatement , visitor ) ;
@@ -531,7 +534,7 @@ function updateEnumIife(
531
534
hostNode : ts . VariableStatement ,
532
535
iife : ts . CallExpression ,
533
536
exportAssignment ?: ts . Expression ,
534
- ) : ts . Statement {
537
+ ) : ts . Statement [ ] {
535
538
if ( ! ts . isParenthesizedExpression ( iife . expression )
536
539
|| ! ts . isFunctionExpression ( iife . expression . expression ) ) {
537
540
throw new Error ( 'Invalid IIFE Structure' ) ;
@@ -583,7 +586,7 @@ function updateEnumIife(
583
586
updatedIife ) ;
584
587
}
585
588
586
- return updateHostNode ( hostNode , value ) ;
589
+ return [ updateHostNode ( hostNode , value ) ] ;
587
590
}
588
591
589
592
function createWrappedEnum (
@@ -592,7 +595,7 @@ function createWrappedEnum(
592
595
statements : Array < ts . Statement > ,
593
596
literalInitializer : ts . ObjectLiteralExpression = ts . createObjectLiteral ( ) ,
594
597
addExportModifier = false ,
595
- ) : ts . Statement {
598
+ ) : ts . Statement [ ] {
596
599
const node = addExportModifier
597
600
? ts . updateVariableStatement (
598
601
hostNode ,
@@ -616,13 +619,13 @@ function createWrappedEnum(
616
619
innerReturn ,
617
620
] ) ;
618
621
619
- return updateHostNode ( node , addPureComment ( ts . createParen ( iife ) ) ) ;
622
+ return [ updateHostNode ( node , addPureComment ( ts . createParen ( iife ) ) ) ] ;
620
623
}
621
624
622
625
function createWrappedClass (
623
626
hostNode : ts . ClassDeclaration | ts . VariableDeclaration ,
624
627
statements : ts . Statement [ ] ,
625
- ) : ts . Statement {
628
+ ) : ts . Statement [ ] {
626
629
const name = ( hostNode . name as ts . Identifier ) . text ;
627
630
628
631
const updatedStatements = [ ...statements ] ;
@@ -645,12 +648,30 @@ function createWrappedClass(
645
648
] ) ,
646
649
) ;
647
650
648
- return ts . createVariableStatement (
649
- hostNode . modifiers ,
650
- ts . createVariableDeclarationList ( [
651
- ts . createVariableDeclaration ( name , undefined , pureIife ) ,
652
- ] ,
653
- ts . NodeFlags . Const ,
654
- ) ,
655
- ) ;
651
+ const modifiers = hostNode . modifiers ;
652
+ const isDefault = ! ! modifiers
653
+ && modifiers . some ( x => x . kind === ts . SyntaxKind . DefaultKeyword ) ;
654
+
655
+ const newStatement : ts . Statement [ ] = [ ] ;
656
+ newStatement . push (
657
+ ts . createVariableStatement (
658
+ isDefault ? undefined : modifiers ,
659
+ ts . createVariableDeclarationList ( [
660
+ ts . createVariableDeclaration ( name , undefined , pureIife ) ,
661
+ ] ,
662
+ ts . NodeFlags . Const ,
663
+ ) ,
664
+ ) ) ;
665
+
666
+ if ( isDefault ) {
667
+ newStatement . push (
668
+ ts . createExportAssignment (
669
+ undefined ,
670
+ undefined ,
671
+ false ,
672
+ ts . createIdentifier ( name ) ,
673
+ ) ) ;
674
+ }
675
+
676
+ return newStatement ;
656
677
}
0 commit comments