@@ -11,6 +11,7 @@ import { createResolutionErrorDiagnostic } from "./diagnostics";
1111import { buildModule , Module } from "./module" ;
1212import { applyBailPlugin , applySinglePlugin , getPlugins , Plugin } from "./plugins" ;
1313import { Transpiler , TranspilerHost } from "./transpiler" ;
14+ import { isResolveError } from "./utils" ;
1415
1516export class Transpilation {
1617 public readonly diagnostics : ts . Diagnostic [ ] = [ ] ;
@@ -70,26 +71,32 @@ export class Transpilation {
7071
7172 private buildModule ( module : Module ) {
7273 buildModule ( module , request => {
73- let resolvedModule : Module ;
74- try {
75- resolvedModule = this . resolveRequestToModule ( module . request , request ) ;
76- } catch ( error ) {
77- this . diagnostics . push ( createResolutionErrorDiagnostic ( error . message , request , module . request ) ) ;
78- return { error : error . message } ;
74+ const result = this . resolveRequestToModule ( module . request , request ) ;
75+ if ( "error" in result ) {
76+ this . diagnostics . push ( result . error ) ;
77+ return { error : ts . flattenDiagnosticMessageText ( result . error . messageText , "\n" ) } ;
7978 }
8079
81- return this . getModuleId ( resolvedModule ) ;
80+ return this . getModuleId ( result ) ;
8281 } ) ;
8382 }
8483
8584 private resolveRequestToModule ( issuer : string , request : string ) {
86- const resolvedPath = this . resolver . resolveSync ( { } , path . dirname ( issuer ) , request ) ;
87- assert ( typeof resolvedPath === "string" , `Invalid resolution result: ${ resolvedPath } ` ) ;
85+ let resolvedPath : string ;
86+ try {
87+ const result = this . resolver . resolveSync ( { } , path . dirname ( issuer ) , request ) ;
88+ assert ( typeof result === "string" , `Invalid resolution result: ${ result } ` ) ;
89+ resolvedPath = result ;
90+ } catch ( error ) {
91+ if ( ! isResolveError ( error ) ) throw error ;
92+ return { error : createResolutionErrorDiagnostic ( error . message , request , issuer ) } ;
93+ }
8894
8995 let module = this . modules . find ( m => m . request === resolvedPath ) ;
9096 if ( ! module ) {
9197 if ( ! resolvedPath . endsWith ( ".lua" ) ) {
92- throw new Error ( `Resolved source file '${ resolvedPath } ' is not a part of the project.` ) ;
98+ const messageText = `Resolved source file '${ resolvedPath } ' is not a part of the project.` ;
99+ return { error : createResolutionErrorDiagnostic ( messageText , request , issuer ) } ;
93100 }
94101
95102 // TODO: Load source map files
0 commit comments