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