UNPKG

require-it

Version:

This module extends the default Node.js require with capabilities to require nested modules, independent on where they are nested.

96 lines 3.51 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.requireFrom = exports.requireGlobal = exports.requireIt = void 0; const node_child_process_1 = require("node:child_process"); const node_path_1 = require("node:path"); const utils_1 = require("./utils"); let globalRoot; const getGlobalRoot = () => { if (!globalRoot) { globalRoot = (0, node_child_process_1.execSync)("npm root -g", { encoding: "utf8" }) .trim() .replace(/node_modules$/, ""); } return globalRoot; }; const checkScopedNodeModulesOfFolder = (folder, name) => { const directModules = (0, utils_1.getNodeModulesOfFolder)(folder); const found = directModules.find((subfolder) => { return (0, utils_1.getFolder)(subfolder) === name; }); if (!found) { throw Error(`Cannot find module: "${name}"`); } return (0, node_path_1.join)(folder, found); }; const checkNodeModulesOfFolder = (folder, name) => { const root = (0, node_path_1.join)(folder, "node_modules"); const nodeModules = (0, utils_1.getNodeModulesOfFolder)(root); for (const nodeModule of nodeModules) { if ((0, utils_1.getFolder)(nodeModule) === name) { return (0, node_path_1.join)(root, nodeModule); } (0, utils_1.getNodeModulesOfFolder)((0, node_path_1.join)(root, nodeModule, "node_modules")).forEach((subModule) => { nodeModules.push((0, node_path_1.join)(nodeModule, "node_modules", subModule)); }); } }; const resolveMainFile = (name, root) => { const names = name.match(/^(@[^/]+)\/(.+)$/); let pathToFolder; if (names) { const pathToModule = checkNodeModulesOfFolder(root, names[1]); pathToFolder = checkScopedNodeModulesOfFolder(pathToModule, names[2]); } else { pathToFolder = checkNodeModulesOfFolder(root, name); } if (!pathToFolder) return; const packageJSON = (0, utils_1.readPackageJSON)(pathToFolder); if (!packageJSON.main) return; return (0, node_path_1.join)(pathToFolder, packageJSON.main); }; const resolve = (name, root) => { if (root) { return resolveMainFile(name, root); } try { return require.resolve(name); } catch (_a) { return resolveMainFile(name, process.cwd()); } }; const directory = (name, root) => { const pathToModule = resolve(name, root); if (!pathToModule) { throw Error(`Cannot find module: "${name}"`); } name = name.replace("/", node_path_1.sep); const pathPieces = pathToModule .split(name + node_path_1.sep) .filter((p) => !/^[/\\]$/.test(p)) .filter((p) => !/\.[^\.\\/]+$/.test(p)); if (pathPieces.length > 1) { return pathPieces.join(name); } return (0, node_path_1.join)(pathPieces[0], name); }; exports.requireIt = ((name) => { return require(exports.requireIt.resolve(name)); }); exports.requireIt.resolve = (name) => resolve(name); exports.requireIt.directory = (name) => directory(name); exports.requireGlobal = ((name) => { return require(exports.requireGlobal.resolve(name)); }); exports.requireGlobal.resolve = (name) => resolve(name, getGlobalRoot()); exports.requireGlobal.directory = (name) => directory(name, getGlobalRoot()); exports.requireFrom = ((module, root) => { return require(resolve(module, root)); }); exports.requireFrom.resolve = resolve; exports.requireFrom.directory = directory; //# sourceMappingURL=index.js.map