@@ -11,7 +11,7 @@ import * as ts from 'typescript';
1111 * @deprecated From 0.9.0
1212 */
1313export function testImportTslib ( content : string ) {
14- const regex = / v a r ( _ _ e x t e n d s | _ _ d e c o r a t e | _ _ m e t a d a t a | _ _ p a r a m ) = \( .* \r ? \n ( .* \r ? \n ) * \} ; / ;
14+ const regex = / v a r ( _ _ e x t e n d s | _ _ d e c o r a t e | _ _ m e t a d a t a | _ _ p a r a m ) = \( .* \r ? \n \s + ( .* \r ? \n ) * \s * \} ; / ;
1515
1616 return regex . test ( content ) ;
1717}
@@ -21,10 +21,12 @@ export function getImportTslibTransformer(): ts.TransformerFactory<ts.SourceFile
2121
2222 const transformer : ts . Transformer < ts . SourceFile > = ( sf : ts . SourceFile ) => {
2323
24+ const tslibImports : ( ts . VariableStatement | ts . ImportDeclaration ) [ ] = [ ] ;
25+
2426 // Check if module has CJS exports. If so, use 'require()' instead of 'import'.
2527 const useRequire = / e x p o r t s .\S + \s * = / . test ( sf . getText ( ) ) ;
2628
27- const visitor : ts . Visitor = ( node : ts . Node ) : ts . Node => {
29+ const visitor : ts . Visitor = ( node : ts . Node ) : ts . Node | undefined => {
2830
2931 // Check if node is a TS helper declaration and replace with import if yes
3032 if ( ts . isVariableStatement ( node ) ) {
@@ -35,23 +37,36 @@ export function getImportTslibTransformer(): ts.TransformerFactory<ts.SourceFile
3537
3638 if ( isHelperName ( name ) ) {
3739 // TODO: maybe add a few more checks, like checking the first part of the assignment.
40+ const tslibImport = createTslibImport ( name , useRequire ) ;
41+ tslibImports . push ( tslibImport ) ;
3842
39- return createTslibImport ( name , useRequire ) ;
43+ return undefined ;
4044 }
4145 }
4246 }
4347
4448 return ts . visitEachChild ( node , visitor , context ) ;
4549 } ;
4650
47- return ts . visitEachChild ( sf , visitor , context ) ;
51+ const sfUpdated = ts . visitEachChild ( sf , visitor , context ) ;
52+
53+ // Add tslib imports before any other statement
54+ return tslibImports . length > 0
55+ ? ts . updateSourceFileNode ( sfUpdated , [
56+ ...tslibImports ,
57+ ...sfUpdated . statements ,
58+ ] )
59+ : sfUpdated ;
4860 } ;
4961
5062 return transformer ;
5163 } ;
5264}
5365
54- function createTslibImport ( name : string , useRequire = false ) : ts . Node {
66+ function createTslibImport (
67+ name : string ,
68+ useRequire = false ,
69+ ) : ts . VariableStatement | ts . ImportDeclaration {
5570 if ( useRequire ) {
5671 // Use `var __helper = /*@__PURE__*/ require("tslib").__helper`.
5772 const requireCall = ts . createCall ( ts . createIdentifier ( 'require' ) , undefined ,
0 commit comments