You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

42 lines
1.0 KiB

3 months ago
  1. import path from "path";
  2. import { createRequire } from "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. }