| | |
| | | |
| | | const nativeRequireResolve = parseFloat(process.versions.node) >= 8.9; |
| | | |
| | | // $FlowIgnore |
| | | import { createRequire } from "module"; |
| | | // $FlowIgnore |
| | | const require = createRequire(import/*::(_)*/.meta.url); // eslint-disable-line |
| | | |
| | | export function resolve( |
| | | dirname: string, |
| | | moduleName: string, |
| | |
| | | basedir = path.resolve(basedir, absoluteImports); |
| | | } |
| | | |
| | | let modulePackage, moduleNestedPath; |
| | | |
| | | let slash = moduleName.indexOf("/"); |
| | | if (moduleName[0] === "@") { |
| | | slash = moduleName.indexOf("/", slash + 1); |
| | | } |
| | | |
| | | if (slash === -1) { |
| | | modulePackage = moduleName; |
| | | moduleNestedPath = ""; |
| | | } else { |
| | | modulePackage = moduleName.slice(0, slash); |
| | | moduleNestedPath = moduleName.slice(slash); |
| | | } |
| | | |
| | | try { |
| | | let pkg; |
| | | if (nativeRequireResolve) { |
| | | // $FlowIgnore |
| | | pkg = require.resolve(`${modulePackage}/package.json`, { |
| | | return require.resolve(moduleName, { |
| | | paths: [basedir], |
| | | }); |
| | | } else { |
| | | pkg = requireResolve.sync(`${modulePackage}/package.json`, { basedir }); |
| | | return requireResolve.sync(moduleName, { basedir }); |
| | | } |
| | | return path.dirname(pkg) + moduleNestedPath; |
| | | } catch (err) { |
| | | if (err.code !== "MODULE_NOT_FOUND") throw err; |
| | | |
| | |
| | | export function has(basedir: string, name: string) { |
| | | try { |
| | | if (nativeRequireResolve) { |
| | | // $FlowIgnore |
| | | require.resolve(name, { paths: [basedir] }); |
| | | } else { |
| | | requireResolve.sync(name, { basedir }); |