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.
35 lines
1011 B
35 lines
1011 B
7 years ago
|
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'
|
||
|
};
|
||
|
}
|