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
JavaScript
;
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