@monorepo-utilities/install-dependencies
Version:
Builds node modules to a spectified path 📦
78 lines (74 loc) • 3.29 kB
JavaScript
// src/program.ts
import { program } from "commander";
import { cosmiconfigSync } from "cosmiconfig";
// src/script.ts
import { promisify } from "util";
import { exec } from "child_process";
import { resolve } from "path";
import { readFileSync } from "fs-extra";
var execPromise = promisify(exec);
function resolveJSON(path, debug = false) {
try {
const json = JSON.parse(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 = 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 = 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 });
}
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);
export {
installDependencies,
script_default as script
};