@pnpm/exec.build-commands
Version:
Commands for managing dependency builds
147 lines • 5.57 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.commandNames = void 0;
exports.help = help;
exports.cliOptionsTypes = cliOptionsTypes;
exports.rcOptionsTypes = rcOptionsTypes;
exports.handler = handler;
const logger_1 = require("@pnpm/logger");
const modules_yaml_1 = require("@pnpm/modules-yaml");
const util_lex_comparator_1 = require("@pnpm/util.lex-comparator");
const render_help_1 = __importDefault(require("render-help"));
const enquirer_1 = require("enquirer");
const chalk_1 = __importDefault(require("chalk"));
const plugin_commands_rebuild_1 = require("@pnpm/plugin-commands-rebuild");
const config_config_writer_1 = require("@pnpm/config.config-writer");
const getAutomaticallyIgnoredBuilds_js_1 = require("./getAutomaticallyIgnoredBuilds.js");
exports.commandNames = ['approve-builds'];
function help() {
return (0, render_help_1.default)({
description: 'Approve dependencies for running scripts during installation',
usages: [],
descriptionLists: [
{
title: 'Options',
list: [
{
description: 'Approve dependencies of global packages',
name: '--global',
shortAlias: '-g',
},
],
},
],
});
}
function cliOptionsTypes() {
return {
global: Boolean,
};
}
function rcOptionsTypes() {
return {};
}
async function handler(opts) {
const { automaticallyIgnoredBuilds, modulesDir, modulesManifest, } = await (0, getAutomaticallyIgnoredBuilds_js_1.getAutomaticallyIgnoredBuilds)(opts);
if (!automaticallyIgnoredBuilds?.length) {
(0, logger_1.globalInfo)('There are no packages awaiting approval');
return;
}
const { result } = await (0, enquirer_1.prompt)({
choices: sortUniqueStrings([...automaticallyIgnoredBuilds]),
indicator(state, choice) {
return ` ${choice.enabled ? '●' : '○'}`;
},
message: 'Choose which packages to build ' +
`(Press ${chalk_1.default.cyan('<space>')} to select, ` +
`${chalk_1.default.cyan('<a>')} to toggle all, ` +
`${chalk_1.default.cyan('<i>')} to invert selection)`,
name: 'result',
pointer: '❯',
result() {
return this.selected;
},
styles: {
dark: chalk_1.default.reset,
em: chalk_1.default.bgBlack.whiteBright,
success: chalk_1.default.reset,
},
type: 'multiselect',
// For Vim users (related: https://github.com/enquirer/enquirer/pull/163)
j() {
return this.down();
},
k() {
return this.up();
},
cancel() {
// By default, canceling the prompt via Ctrl+c throws an empty string.
// The custom cancel function prevents that behavior.
// Otherwise, pnpm CLI would print an error and confuse users.
// See related issue: https://github.com/enquirer/enquirer/issues/225
process.exit(0);
},
}); // eslint-disable-line @typescript-eslint/no-explicit-any
const buildPackages = result.map(({ value }) => value);
const ignoredPackages = automaticallyIgnoredBuilds.filter((automaticallyIgnoredBuild) => !buildPackages.includes(automaticallyIgnoredBuild));
const updatedSettings = {};
if (ignoredPackages.length) {
if (opts.ignoredBuiltDependencies == null) {
updatedSettings.ignoredBuiltDependencies = sortUniqueStrings(ignoredPackages);
}
else {
updatedSettings.ignoredBuiltDependencies = sortUniqueStrings([
...opts.ignoredBuiltDependencies,
...ignoredPackages,
]);
}
}
if (buildPackages.length) {
if (opts.onlyBuiltDependencies == null) {
updatedSettings.onlyBuiltDependencies = sortUniqueStrings(buildPackages);
}
else {
updatedSettings.onlyBuiltDependencies = sortUniqueStrings([
...opts.onlyBuiltDependencies,
...buildPackages,
]);
}
}
if (buildPackages.length) {
const confirmed = await (0, enquirer_1.prompt)({
type: 'confirm',
name: 'build',
message: `The next packages will now be built: ${buildPackages.join(', ')}.
Do you approve?`,
initial: false,
});
if (!confirmed.build) {
return;
}
}
else {
(0, logger_1.globalInfo)('All packages were added to ignoredBuiltDependencies.');
}
await (0, config_config_writer_1.writeSettings)({
...opts,
workspaceDir: opts.workspaceDir ?? opts.rootProjectManifestDir,
updatedSettings,
});
if (buildPackages.length) {
return plugin_commands_rebuild_1.rebuild.handler({
...opts,
onlyBuiltDependencies: updatedSettings.onlyBuiltDependencies,
}, buildPackages);
}
else if (modulesManifest) {
delete modulesManifest.ignoredBuilds;
await (0, modules_yaml_1.writeModulesManifest)(modulesDir, modulesManifest);
}
}
function sortUniqueStrings(array) {
return Array.from(new Set(array)).sort(util_lex_comparator_1.lexCompare);
}
//# sourceMappingURL=approveBuilds.js.map