UNPKG

require-it

Version:

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

91 lines 3.35 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.requireFrom = exports.requireGlobal = exports.requireIt = void 0; const child_process_1 = require("child_process"); const path_1 = require("path"); const utils_1 = require("./utils"); let globalRoot; const getGlobalRoot = () => { if (!globalRoot) { globalRoot = (0, 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, path_1.join)(folder, found); }; const checkNodeModulesOfFolder = (folder, name) => { const root = (0, 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, path_1.join)(root, nodeModule); } (0, utils_1.getNodeModulesOfFolder)((0, path_1.join)(root, nodeModule, "node_modules")).forEach((subModule) => { nodeModules.push((0, 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 (0, path_1.join)(pathToFolder, (0, utils_1.readPackageJSON)(pathToFolder).main); } }; const resolve = (name, root) => { if (!root) { try { return require.resolve(name); } catch (e) { return resolveMainFile(name, process.cwd()); } } return resolveMainFile(name, root); }; const directory = (name, root) => { const pathToModule = resolve(name, root); if (!pathToModule) { throw Error(`Cannot find module: "${name}"`); } name = name.replace("/", path_1.sep); const pathPieces = pathToModule .split(name + path_1.sep) .filter((p) => !/^[/\\]$/.test(p)) .filter((p) => !/\.[^\.\\/]+$/.test(p)); if (pathPieces.length > 1) { return pathPieces.join(name); } return (0, 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