35 lines
883 B
TypeScript
Executable file
35 lines
883 B
TypeScript
Executable file
import path from "path";
|
|
|
|
import { createRequire } from "module";
|
|
const require = createRequire(import.meta.url);
|
|
|
|
export default function (moduleName, dirname, absoluteRuntime) {
|
|
if (absoluteRuntime === false) return moduleName;
|
|
|
|
return resolveAbsoluteRuntime(
|
|
moduleName,
|
|
path.resolve(dirname, absoluteRuntime === true ? "." : absoluteRuntime),
|
|
);
|
|
}
|
|
|
|
function resolveAbsoluteRuntime(moduleName: string, dirname: string) {
|
|
try {
|
|
return path
|
|
.dirname(
|
|
require.resolve(`${moduleName}/package.json`, { paths: [dirname] }),
|
|
)
|
|
.replace(/\\/g, "/");
|
|
} catch (err) {
|
|
if (err.code !== "MODULE_NOT_FOUND") throw err;
|
|
|
|
throw Object.assign(
|
|
new Error(`Failed to resolve "${moduleName}" relative to "${dirname}"`),
|
|
{
|
|
code: "BABEL_RUNTIME_NOT_FOUND",
|
|
runtime: moduleName,
|
|
dirname,
|
|
},
|
|
);
|
|
}
|
|
}
|