@@ -93,27 +93,41 @@ export class LuaTransformer {
9393 // TODO make all other methods private???
9494 public transformSourceFile ( node : ts . SourceFile ) : [ tstl . Block , Set < LuaLibFeature > ] {
9595 this . setupState ( ) ;
96- this . pushScope ( ScopeType . File , node ) ;
9796
9897 this . currentSourceFile = node ;
99- this . isModule = tsHelper . isFileModule ( node ) ;
10098
101- const statements = this . performHoisting ( this . transformStatements ( node . statements ) ) ;
102- this . popScope ( ) ;
99+ let statements : tstl . Statement [ ] = [ ] ;
100+ if ( node . flags & ts . NodeFlags . JsonFile ) {
101+ this . isModule = false ;
103102
104- if ( this . isModule ) {
105- statements . unshift (
106- tstl . createVariableDeclarationStatement (
107- tstl . createIdentifier ( "exports" ) ,
108- tstl . createBinaryExpression (
103+ const statement = node . statements [ 0 ] ;
104+ if ( ! statement || ! ts . isExpressionStatement ( statement ) ) {
105+ throw TSTLErrors . InvalidJsonFileContent ( node ) ;
106+ }
107+
108+ statements . push ( tstl . createReturnStatement ( [ this . transformExpression ( statement . expression ) ] ) ) ;
109+ } else {
110+ this . pushScope ( ScopeType . File , node ) ;
111+
112+ this . isModule = tsHelper . isFileModule ( node ) ;
113+ statements = this . performHoisting ( this . transformStatements ( node . statements ) ) ;
114+
115+ this . popScope ( ) ;
116+
117+ if ( this . isModule ) {
118+ statements . unshift (
119+ tstl . createVariableDeclarationStatement (
109120 tstl . createIdentifier ( "exports" ) ,
110- tstl . createTableExpression ( ) ,
111- tstl . SyntaxKind . OrOperator
112- ) ) ) ;
113- statements . push (
114- tstl . createReturnStatement (
115- [ tstl . createIdentifier ( "exports" ) ]
116- ) ) ;
121+ tstl . createBinaryExpression (
122+ tstl . createIdentifier ( "exports" ) ,
123+ tstl . createTableExpression ( ) ,
124+ tstl . SyntaxKind . OrOperator
125+ ) ) ) ;
126+ statements . push (
127+ tstl . createReturnStatement (
128+ [ tstl . createIdentifier ( "exports" ) ]
129+ ) ) ;
130+ }
117131 }
118132
119133 return [ tstl . createBlock ( statements , node ) , this . luaLibFeatureSet ] ;
@@ -3675,7 +3689,7 @@ export class LuaTransformer {
36753689 }
36763690
36773691 private pathToLuaRequirePath ( filePath : string ) : string {
3678- return filePath . replace ( new RegExp ( "\\\\|\/" , "g" ) , "." ) ;
3692+ return filePath . replace ( new RegExp ( "\\\\|\/" , "g" ) , "." ) . replace ( / \. j s o n $ / , '' ) ;
36793693 }
36803694
36813695 private shouldExportIdentifier ( identifier : tstl . Identifier | tstl . Identifier [ ] ) : boolean {
0 commit comments