loader.mjs 996 B

12345678910111213141516171819202122232425262728293031323334
  1. import path from 'path'
  2. import process from 'process'
  3. import Module from 'module'
  4. const builtins = Module.builtinModules
  5. const JS_EXTENSIONS = new Set(['.js', '.mjs'])
  6. const baseURL = new URL('file://')
  7. baseURL.pathname = `${process.cwd()}/`
  8. export function resolve (specifier, parentModuleURL = baseURL, defaultResolve) {
  9. if (builtins.includes(specifier)) {
  10. return {
  11. url: specifier,
  12. format: 'builtin'
  13. }
  14. }
  15. if (/^\.{0,2}[/]/.test(specifier) !== true && !specifier.startsWith('file:')) {
  16. // For node_modules support:
  17. // return defaultResolve(specifier, parentModuleURL);
  18. throw new Error(
  19. `imports must begin with '/', './', or '../'; '${specifier}' does not`)
  20. }
  21. const resolved = new URL(specifier, parentModuleURL)
  22. const ext = path.extname(resolved.pathname)
  23. if (!JS_EXTENSIONS.has(ext)) {
  24. throw new Error(
  25. `Cannot load file with non-JavaScript file extension ${ext}.`)
  26. }
  27. return {
  28. url: resolved.href,
  29. format: 'esm'
  30. }
  31. }