UNPKG

@monorepo-utilities/install-dependencies

Version:

Builds node modules to a spectified path 📦

104 lines (99 loc) • 4.48 kB
#!/usr/bin/env node var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/index.ts var src_exports = {}; __export(src_exports, { installDependencies: () => installDependencies, script: () => script_default }); module.exports = __toCommonJS(src_exports); // src/program.ts var import_commander = require("commander"); var import_cosmiconfig = require("cosmiconfig"); // src/script.ts var import_util = require("util"); var import_child_process = require("child_process"); var import_path = require("path"); var import_fs_extra = require("fs-extra"); var execPromise = (0, import_util.promisify)(import_child_process.exec); function resolveJSON(path, debug = false) { try { const json = JSON.parse((0, import_fs_extra.readFileSync)(path, "utf8")); return json; } catch (err) { if (debug) console.log(err); return; } } function depsToInstall({ dependencies = {}, ignore = [], include = {} } = {}) { const dependencyNames = Object.keys(dependencies); const includeNames = Object.keys(include); const hasDependencies = dependencyNames.length > 0; const hasInclude = includeNames.length > 0; if (!hasDependencies && !hasInclude) return []; const deps = hasDependencies ? dependencyNames.filter((dep) => !ignore.includes(dep)).map((name) => ({ name, version: dependencies[name] })) : []; const includeDeps = hasInclude ? includeNames.map((name) => ({ name, version: include[name] })) : []; const mergedDeps = deps.filter(({ name }) => !includeDeps.map(({ name: name2 }) => name2).includes(name)).concat(includeDeps); return mergedDeps; } async function installDependencies({ config, file = "package.json", dest, debug = false, isTesting = false, exec: exec2 = execPromise, hasLockfile = false, path = "./", runner = "npm" }) { const json = (0, import_path.resolve)(`${path}${file}`); const data = resolveJSON(json, debug); const { dependencies = {}, ideps } = data || {}; const { ignore = [], include = {} } = config || ideps || installDependencies || {}; const deps = depsToInstall({ dependencies, ignore, include }); const depsString = deps.map(({ name, version: version2 }) => `${name}@${version2}`).join(" "); if (debug) console.log("install-dependencies:debugging:", { deps, config, depsString }); if (isTesting || deps.length < 1) return; await exec2(`${runner} install ${dest ? `--prefix ${dest} ` : " "}${depsString} -S --package-lock=${hasLockfile}`); } var script_default = installDependencies; // src/program.ts var version = "VERSION"; var explorer = (0, import_cosmiconfig.cosmiconfigSync)("ideps"); async function action(options = {}) { const result = (options == null ? void 0 : options.config) ? explorer.load(options.config) : explorer.search(); const { config = {} } = result || {}; const { config: unusedConfig, isTestingCLI, ...rest } = options; if (isTestingCLI) { console.info({ options, config }); return; } await script_default({ ...rest, config }); } import_commander.program.version(version).description("Install monorepo package dependencies with control! \u{1F4E6}").option("-c, --config <config>", "config path").option("--debug", "enables debug mode").option("-d, --dest <string>", "dest path").option("-f, --file <file>", "path to package.json file").option("--has-lockfile", "use lock file").option("-t, --isTestingCLI", "enables CLI testing, no scripts are run").option("--isTesting", "enables testing, no scripts are run").option("-p, --path <path>", "path to package.json file").option("-r, --runner <runner>", "npm, pnpm, or yarn").action(action).parse(process.argv); // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { installDependencies, script });