-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathresolve.ts
53 lines (49 loc) · 1.88 KB
/
resolve.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import { createRequire } from 'node:module';
import { isAbsolute, join, resolve } from 'node:path';
import { fileURLToPath } from 'node:url';
/**
* Resolve an absolute path from {@link root}, but only
* if {@link input} isn't already absolute.
*
* @param input The path to resolve.
* @param root The base path; default = process.cwd()
* @returns The resolved absolute path.
*/
export function absolute(input: string, root?: string): string {
return isAbsolute(input) ? input : resolve(root || '.', input);
}
/**
* Resolve a module path from a given root directory.
*
* Emulates [`require.resolve`](https://nodejs.org/docs/latest/api/modules.html#requireresolverequest-options), so module identifiers are allowed.
*
* @see resolve-from
*/
export function from(root: URL | string, ident: string, silent: true): string | undefined;
export function from(root: URL | string, ident: string, silent?: false): string;
export function from(root: URL | string, ident: string, silent?: boolean): string | undefined;
export function from(root: URL | string, ident: string, silent?: boolean) {
try {
// NOTE: dirs need a trailing "/" OR filename. With "/" route,
// Node adds "noop.js" as main file, so just do "noop.js" anyway.
let r = (root instanceof URL || root.startsWith('file://'))
? join(fileURLToPath(root), 'noop.js')
: join(absolute(root), 'noop.js');
return createRequire(r).resolve(ident);
} catch (err) {
if (!silent) throw err;
}
}
/**
* Resolve a module path from the current working directory.
*
* Alias for {@link from} using the CWD as its root.
*
* @see resolve-cwd
*/
export function cwd(ident: string, silent: true): string | undefined;
export function cwd(ident: string, silent?: false): string;
export function cwd(ident: string, silent?: boolean): string | undefined;
export function cwd(ident: string, silent?: boolean) {
return from(resolve(), ident, silent);
}