@@ -80,6 +80,20 @@ export class LuaTransformer {
8080 this . isModule = tsHelper . isFileModule ( node ) ;
8181
8282 const statements = this . transformStatements ( node . statements ) ;
83+ if ( this . isModule ) {
84+ statements . unshift (
85+ tstl . createVariableDeclarationStatement (
86+ tstl . createIdentifier ( "exports" ) ,
87+ tstl . createBinaryExpression (
88+ tstl . createIdentifier ( "exports" ) ,
89+ tstl . createTableExpression ( ) ,
90+ tstl . SyntaxKind . OrOperator
91+ ) ) ) ;
92+ statements . push (
93+ tstl . createReturnStatement (
94+ [ tstl . createIdentifier ( "exports" ) ]
95+ ) ) ;
96+ }
8397
8498 return [ tstl . createBlock ( statements , undefined , node ) , this . luaLibFeatureSet ] ;
8599 }
@@ -738,11 +752,11 @@ export class LuaTransformer {
738752 const namespaceDeclaration = tstl . createAssignmentStatement (
739753 tstl . createTableIndexExpression (
740754 this . transformIdentifier ( this . currentNamespace . name as ts . Identifier ) ,
741- this . transformIdentifier ( statement . name as ts . Identifier ) ) ,
755+ tstl . createStringLiteral ( this . transformIdentifier ( statement . name as ts . Identifier ) . text ) ) ,
742756 tstl . createBinaryExpression (
743757 tstl . createTableIndexExpression (
744758 this . transformIdentifier ( this . currentNamespace . name as ts . Identifier ) ,
745- this . transformIdentifier ( statement . name as ts . Identifier ) ) ,
759+ tstl . createStringLiteral ( this . transformIdentifier ( statement . name as ts . Identifier ) . text ) ) ,
746760 tstl . createTableExpression ( ) ,
747761 tstl . SyntaxKind . OrOperator ) ) ;
748762
@@ -753,7 +767,7 @@ export class LuaTransformer {
753767 this . transformIdentifier ( statement . name as ts . Identifier ) ,
754768 tstl . createTableIndexExpression (
755769 this . transformIdentifier ( this . currentNamespace . name as ts . Identifier ) ,
756- this . transformIdentifier ( statement . name as ts . Identifier ) ) ) ;
770+ tstl . createStringLiteral ( this . transformIdentifier ( statement . name as ts . Identifier ) . text ) ) ) ;
757771
758772 result . push ( localDeclaration ) ;
759773 } else if ( this . isModule && ( ts . getCombinedModifierFlags ( statement ) & ts . ModifierFlags . Export ) ) {
@@ -775,16 +789,17 @@ export class LuaTransformer {
775789 result . push ( localDeclaration ) ;
776790 } else {
777791 // local NS = NS or {}
778- const localDeclaration = tstl . createVariableDeclarationStatement (
792+ // TODO this is somewhat redundant since createLocalOrGlobalDeclaration also handles exports
793+ const localDeclaration = this . createLocalOrGlobalDeclaration (
779794 this . transformIdentifier ( statement . name as ts . Identifier ) ,
780795 tstl . createBinaryExpression (
781- tstl . createIdentifier ( "NS" ) ,
796+ this . transformIdentifier ( statement . name as ts . Identifier ) ,
782797 tstl . createTableExpression ( ) ,
783798 tstl . SyntaxKind . OrOperator
784799 )
785800 ) ;
786801
787- result . push ( localDeclaration ) ;
802+ result . push ( ... localDeclaration ) ;
788803 }
789804
790805 // Set current namespace for nested NS
@@ -794,7 +809,7 @@ export class LuaTransformer {
794809
795810 // Transform moduleblock to block and visit it
796811 if ( statement . body && ts . isModuleBlock ( statement . body ) ) {
797- result . push ( ... this . transformStatements ( statement . body . statements ) ) ;
812+ result . push ( tstl . createDoStatement ( this . transformStatements ( statement . body . statements ) ) ) ;
798813 }
799814
800815 this . currentNamespace = previousNamespace ;
0 commit comments