1*837127edSEvan Bacon// Used to cast a type to metro errors without depending on specific versions of metro. 2*837127edSEvan Bacon 3*837127edSEvan Baconexport type FileAndDirCandidates = { 4*837127edSEvan Bacon dir: FileCandidates; 5*837127edSEvan Bacon file: FileCandidates; 6*837127edSEvan Bacon}; 7*837127edSEvan Bacon 8*837127edSEvan Bacon/** 9*837127edSEvan Bacon * This is a way to describe what files we tried to look for when resolving 10*837127edSEvan Bacon * a module name as file. This is mainly used for error reporting, so that 11*837127edSEvan Bacon * we can explain why we cannot resolve a module. 12*837127edSEvan Bacon */ 13*837127edSEvan Baconexport type FileCandidates = 14*837127edSEvan Bacon // We only tried to resolve a specific asset. 15*837127edSEvan Bacon | { type: 'asset'; name: string } 16*837127edSEvan Bacon // We attempted to resolve a name as being a source file (ex. JavaScript, 17*837127edSEvan Bacon // JSON...), in which case there can be several extensions we tried, for 18*837127edSEvan Bacon // example `/js/foo.ios.js`, `/js/foo.js`, etc. for a single prefix '/js/foo'. 19*837127edSEvan Bacon | { 20*837127edSEvan Bacon type: 'sourceFile'; 21*837127edSEvan Bacon filePathPrefix: string; 22*837127edSEvan Bacon candidateExts: readonly string[]; 23*837127edSEvan Bacon }; 24*837127edSEvan Bacon 25*837127edSEvan Bacontype FailedToResolveNameError = Error & { 26*837127edSEvan Bacon dirPaths: string[]; 27*837127edSEvan Bacon extraPaths: string[]; 28*837127edSEvan Bacon}; 29*837127edSEvan Bacon 30*837127edSEvan Bacontype FailedToResolvePathError = Error & { 31*837127edSEvan Bacon candidates: FileAndDirCandidates; 32*837127edSEvan Bacon}; 33*837127edSEvan Bacon 34*837127edSEvan Baconexport function isFailedToResolveNameError(error: any): error is FailedToResolveNameError { 35*837127edSEvan Bacon return !!error && 'extraPaths' in error && error.constructor.name === 'FailedToResolveNameError'; 36*837127edSEvan Bacon} 37*837127edSEvan Bacon 38*837127edSEvan Baconexport function isFailedToResolvePathError(error: any): error is FailedToResolvePathError { 39*837127edSEvan Bacon return !!error && 'candidates' in error && error.constructor.name === 'FailedToResolvePathError'; 40*837127edSEvan Bacon} 41