11import * as path from "path" ;
2- import { TranspiledFile , EmitHost } from "./Transpile" ;
32import { SourceNode } from "source-map" ;
4- import { formatPathToLuaPath , trimExtension , normalizeSlashes } from "./utils" ;
5- import { Diagnostic , Program } from "typescript" ;
3+ import * as ts from "typescript" ;
64import { couldNotFindBundleEntryPoint } from "./diagnostics" ;
5+ import { getProjectRootDir , resolveFromRootDir } from "./resolve" ;
6+ import { EmitHost , TranspiledFile } from "./Transpile" ;
7+ import { formatPathToLuaPath , trimExtension } from "./utils" ;
78
89const formatPath = ( path : string ) => formatPathToLuaPath ( trimExtension ( path ) ) ;
910
1011export function bundleTranspiledFiles (
1112 bundleFile : string ,
1213 entryModule : string ,
1314 transpiledFiles : TranspiledFile [ ] ,
14- program : Program ,
15+ program : ts . Program ,
1516 emitHost : EmitHost
16- ) : [ Diagnostic [ ] , TranspiledFile ] {
17- const diagnostics : Diagnostic [ ] = [ ] ;
17+ ) : [ ts . Diagnostic [ ] , TranspiledFile ] {
18+ const diagnostics : ts . Diagnostic [ ] = [ ] ;
1819
19- const resolvedEntryModule = resolveAbsolutePath ( program , entryModule ) ;
20- if ( ! transpiledFiles . some ( f => normalizeSlashes ( f . fileName ) === normalizeSlashes ( resolvedEntryModule ) ) ) {
20+ const resolvedEntryModule = resolveFromRootDir ( program , entryModule ) ;
21+ if ( ! transpiledFiles . some ( f => resolveFromRootDir ( program , f . fileName ) === resolvedEntryModule ) ) {
2122 return [ [ couldNotFindBundleEntryPoint ( entryModule ) ] , { fileName : bundleFile } ] ;
2223 }
2324
@@ -37,8 +38,10 @@ export function bundleTranspiledFiles(
3738
3839 // Override `require` to read from ____modules table.
3940 const requireOverride =
41+ `local ____moduleCache = {}\n` +
4042 `local ____originalRequire = require\n` +
41- `function require(file) if ____modules[file] then return ____modules[file]() ` +
43+ `function require(file) if ____moduleCache[file] then return ____moduleCache[file] end\n` +
44+ `if ____modules[file] then ____moduleCache[file] = ____modules[file](); return ____moduleCache[file] ` +
4245 `else print("Could not find module '"..file.."' to require."); return ____originalRequire(file) end end\n` ;
4346 const entryPoint = `return require("${ formatPath ( entryModule ) } ")\n` ;
4447
@@ -48,7 +51,7 @@ export function bundleTranspiledFiles(
4851 return [
4952 diagnostics ,
5053 {
51- fileName : resolveAbsolutePath ( program , bundleFile ) ,
54+ fileName : path . join ( getProjectRootDir ( program ) , bundleFile ) ,
5255 lua : code ,
5356 sourceMap : map . toString ( ) ,
5457 sourceMapNode : moduleTable ,
@@ -82,10 +85,3 @@ function joinSourceChunks(chunks: SourceChunk[]): SourceNode {
8285 // tslint:disable-next-line:no-null-keyword
8386 return new SourceNode ( null , null , null , chunks ) ;
8487}
85-
86- const getProjectRootDir = ( program : Program ) => program . getCommonSourceDirectory ( ) ;
87-
88- const resolveAbsolutePath = ( program : Program , pathToResolve : string ) =>
89- path . isAbsolute ( pathToResolve )
90- ? pathToResolve
91- : path . normalize ( path . join ( getProjectRootDir ( program ) , pathToResolve ) ) ;
0 commit comments