1 | import path from "path";
|
2 |
|
3 | import { createRequire } from "module";
|
4 | const require = createRequire(import.meta.url);
|
5 |
|
6 | export default function (
|
7 | moduleName: string,
|
8 | dirname: string,
|
9 | absoluteRuntime: string | boolean,
|
10 | ) {
|
11 | if (absoluteRuntime === false) return moduleName;
|
12 |
|
13 | return resolveAbsoluteRuntime(
|
14 | moduleName,
|
15 | path.resolve(dirname, absoluteRuntime === true ? "." : absoluteRuntime),
|
16 | );
|
17 | }
|
18 |
|
19 | function resolveAbsoluteRuntime(moduleName: string, dirname: string) {
|
20 | try {
|
21 | return path
|
22 | .dirname(
|
23 | require.resolve(`${moduleName}/package.json`, { paths: [dirname] }),
|
24 | )
|
25 | .replace(/\\/g, "/");
|
26 | } catch (err) {
|
27 | if (err.code !== "MODULE_NOT_FOUND") throw err;
|
28 |
|
29 | throw Object.assign(
|
30 | new Error(`Failed to resolve "${moduleName}" relative to "${dirname}"`),
|
31 | {
|
32 | code: "BABEL_RUNTIME_NOT_FOUND",
|
33 | runtime: moduleName,
|
34 | dirname,
|
35 | },
|
36 | );
|
37 | }
|
38 | }
|
39 |
|
40 | export function resolveFSPath(path: string) {
|
41 | return require.resolve(path).replace(/\\/g, "/");
|
42 | }
|