@monorepo-utilities/install-dependencies
Version:
Builds node modules to a spectified path 📦
104 lines (99 loc) • 4.48 kB
JavaScript
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
});