1import { URL } from 'url'; 2import path from 'path'; 3import process from 'process'; 4import { builtinModules } from 'module'; 5 6const JS_EXTENSIONS = new Set(['.js', '.mjs']); 7 8const baseURL = new URL('file://'); 9baseURL.pathname = process.cwd() + '/'; 10 11export function resolve(specifier, { parentURL = baseURL }, defaultResolve) { 12 if (builtinModules.includes(specifier)) { 13 return { 14 url: 'node:' + specifier 15 }; 16 } 17 if (/^\.{1,2}[/]/.test(specifier) !== true && !specifier.startsWith('file:')) { 18 // For node_modules support: 19 // return defaultResolve(specifier, {parentURL}, defaultResolve); 20 throw new Error( 21 `imports must be URLs or begin with './', or '../'; '${specifier}' does not`); 22 } 23 const resolved = new URL(specifier, parentURL); 24 return { 25 url: resolved.href 26 }; 27} 28 29export function getFormat(url, context, defaultGetFormat) { 30 if (url.startsWith('node:') && builtinModules.includes(url.slice(5))) { 31 return { 32 format: 'builtin' 33 }; 34 } 35 const { pathname } = new URL(url); 36 const ext = path.extname(pathname); 37 if (!JS_EXTENSIONS.has(ext)) { 38 throw new Error( 39 `Cannot load file with non-JavaScript file extension ${ext}.`); 40 } 41 return { 42 format: 'module' 43 }; 44} 45