UNPKG

@pnpm/exec.build-commands

Version:
147 lines 5.57 kB
"use strict"; 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