mirror of https://github.com/lukechilds/node.git
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.
34 lines
1011 B
34 lines
1011 B
import url from 'url';
|
|
import path from 'path';
|
|
import process from 'process';
|
|
|
|
const builtins = new Set(
|
|
Object.keys(process.binding('natives')).filter((str) =>
|
|
/^(?!(?:internal|node|v8)\/)/.test(str))
|
|
);
|
|
const JS_EXTENSIONS = new Set(['.js', '.mjs']);
|
|
|
|
export function resolve(specifier, parentModuleURL/*, defaultResolve */) {
|
|
if (builtins.has(specifier)) {
|
|
return {
|
|
url: specifier,
|
|
format: 'builtin'
|
|
};
|
|
}
|
|
if (/^\.{0,2}[/]/.test(specifier) !== true && !specifier.startsWith('file:')) {
|
|
// For node_modules support:
|
|
// return defaultResolve(specifier, parentModuleURL);
|
|
throw new Error(
|
|
`imports must begin with '/', './', or '../'; '${specifier}' does not`);
|
|
}
|
|
const resolved = new url.URL(specifier, parentModuleURL);
|
|
const ext = path.extname(resolved.pathname);
|
|
if (!JS_EXTENSIONS.has(ext)) {
|
|
throw new Error(
|
|
`Cannot load file with non-JavaScript file extension ${ext}.`);
|
|
}
|
|
return {
|
|
url: resolved.href,
|
|
format: 'esm'
|
|
};
|
|
}
|
|
|