/** * @typedef {import('./lib/errors.js').ErrnoException} ErrnoException */ import {defaultResolve} from './lib/resolve.js' export {moduleResolve} from './lib/resolve.js' /** * Match `import.meta.resolve` except that `parent` is required (you can pass * `import.meta.url`). * * @param {string} specifier * The module specifier to resolve relative to parent * (`/example.js`, `./example.js`, `../example.js`, `some-package`, `fs`, * etc). * @param {string} parent * The absolute parent module URL to resolve from. * You must pass `import.meta.url` or something else. * @returns {string} * Returns a string to a full `file:`, `data:`, or `node:` URL * to the found thing. */ export function resolve(specifier, parent) { if (!parent) { throw new Error( 'Please pass `parent`: `import-meta-resolve` cannot ponyfill that' ) } try { return defaultResolve(specifier, {parentURL: parent}).url } catch (error) { // See: const exception = /** @type {ErrnoException} */ (error) if ( (exception.code === 'ERR_UNSUPPORTED_DIR_IMPORT' || exception.code === 'ERR_MODULE_NOT_FOUND') && typeof exception.url === 'string' ) { return exception.url } throw error } }