afee9866d14213af96a468c3be6ab15106851d68cb00ab39709a7dacc5118f95d2b5a2088c4cc1bc23dc0fb2c1cd1e24213af8c311601ef311742995ec070d 1.0 KB

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