@@ -6,7 +6,7 @@ import { EmitHost, ProcessedFile } from "./utils";
66import { SourceNode } from "source-map" ;
77
88const resolver = resolve . ResolverFactory . createResolver ( {
9- extensions : [ ".lua" , ".ts" ] ,
9+ extensions : [ ".lua" ] ,
1010 fileSystem : { ...new resolve . CachedInputFileSystem ( fs ) } ,
1111 useSyncFileSystemCalls : true ,
1212} ) ;
@@ -15,7 +15,7 @@ export function resolveDependencies(program: ts.Program, files: ProcessedFile[],
1515 const outFiles = [ ] ;
1616
1717 for ( const file of files ) {
18- outFiles . push ( file , ...resolveFileDependencies ( file , program . getCommonSourceDirectory ( ) , emitHost ) ) ;
18+ outFiles . push ( file , ...resolveFileDependencies ( file , program . getCompilerOptions ( ) . rootDir ?? program . getCommonSourceDirectory ( ) , emitHost ) ) ;
1919 }
2020
2121 return outFiles ;
@@ -24,8 +24,14 @@ export function resolveDependencies(program: ts.Program, files: ProcessedFile[],
2424function resolveFileDependencies ( file : ProcessedFile , projectRootDir : string , emitHost : EmitHost ) : ProcessedFile [ ] {
2525 const dependencies : ProcessedFile [ ] = [ ] ;
2626 for ( const required of findRequiredPaths ( file . code ) ) {
27+ // Do no resolve lualib
28+ if ( required === "lualib_bundle" ) {
29+ continue ;
30+ }
31+
2732 // Try to resolve the import starting from the directory `file` is in
28- const resolvedDependency = resolveDependency ( projectRootDir , required ) ;
33+ const fileDir = path . dirname ( file . fileName ) ;
34+ const resolvedDependency = resolveDependency ( fileDir , projectRootDir , required , emitHost ) ;
2935 if ( resolvedDependency ) {
3036 // If dependency resolved successfully, read its content
3137 const dependencyContent = emitHost . readFile ( resolvedDependency ) ;
@@ -48,6 +54,7 @@ function resolveFileDependencies(file: ProcessedFile, projectRootDir: string, em
4854 } else {
4955 //throw `TODO: COULD NOT RESOLVE ${required}`;
5056 console . error ( `Failed to resolve ${ required } referenced in ${ file . fileName } .` ) ;
57+ console . error ( projectRootDir ) ;
5158 }
5259 }
5360 return dependencies ;
@@ -95,13 +102,25 @@ function findRequiredPaths(code: string): string[] {
95102 return paths ;
96103}
97104
98- function resolveDependency ( fromDirectory : string , dependency : string ) : string | undefined {
105+ function resolveDependency ( fileDirectory : string , rootDirectory : string , dependency : string , emitHost : EmitHost ) : string | undefined {
106+ // Check if
107+ const dependencyPath = dependency . replace ( "." , "/" ) ;
108+ const projectFilePath = path . join ( fileDirectory , dependencyPath + ".ts" ) ;
109+ if ( emitHost . fileExists ( projectFilePath ) ) {
110+ return projectFilePath ;
111+ }
112+
113+ const projectIndexPath = path . join ( fileDirectory , dependencyPath , "index.ts" ) ;
114+ if ( emitHost . fileExists ( projectIndexPath ) ) {
115+ return projectIndexPath ;
116+ }
117+
99118 try {
100- const resolveResult = resolver . resolveSync ( { } , fromDirectory , dependency . replace ( "." , "/" ) ) ;
119+ const resolveResult = resolver . resolveSync ( { } , rootDirectory , dependencyPath ) ;
101120 if ( resolveResult ) {
102121 return resolveResult ;
103122 }
104- } catch {
123+ } catch ( e ) {
105124 // resolveSync errors if it fails to resolve
106125 }
107126
0 commit comments