UNPKG

forest-cli

Version:

The Lumberjacks' toolbelt is the Forest CLI which makes easy to manage your back office application directly from the terminal.

109 lines 9.06 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const core_1 = require("@oclif/core"); const abstract_authenticated_command_1 = __importDefault(require("../../abstract-authenticated-command")); const team_manager_1 = __importDefault(require("../../services/team-manager")); const with_current_project_1 = __importDefault(require("../../services/with-current-project")); class TeamsCopyLayoutCommand extends abstract_authenticated_command_1.default { constructor(argv, config, plan) { super(argv, config, plan); const { assertPresent, env, inquirer } = this.context; assertPresent({ env, inquirer }); this.env = env; this.inquirer = inquirer; } // Surface a server error's `errors[0].detail` cleanly (exit 1), letting // 401/403 flow to the base command's auth handler. Mirrors teams:create/delete. surfaceApiError(error) { const { response, status } = error; if (response && status !== 401 && status !== 403 && response.text) { let detail; try { detail = JSON.parse(response.text)?.errors?.[0]?.detail; } catch { // Non-JSON error body: fall through and rethrow the original error. } if (detail) { this.logger.error(detail); return this.exit(1); } } throw error; } resolveTeam(teams, name, label) { const match = teams.find(t => t.name === name); if (match) return match; const available = teams.map(t => t.name).join(', ') || '(none)'; this.logger.error(`${label} team "${name}" not found in this project. Available: ${available}.`); return this.exit(1); } async runAuthenticated() { const oclifExit = this.exit.bind(this); const { flags } = await this.parse(TeamsCopyLayoutCommand); const config = await (0, with_current_project_1.default)({ ...this.env, projectId: flags.projectId }); const teamManager = new team_manager_1.default(config); const teams = await teamManager.listForProject(); const fromTeam = this.resolveTeam(teams, flags.from, 'Source'); const toTeam = this.resolveTeam(teams, flags.to, 'Target'); if (fromTeam.id === toTeam.id) { this.logger.error('Source and target teams must be different.'); this.exit(1); return; } if (!flags.force) { const { confirm } = await this.inquirer.prompt([ { type: 'confirm', name: 'confirm', message: `This will overwrite the whole layout of team ${this.chalk.red(toTeam.name)} with the layout of ${this.chalk.red(fromTeam.name)}. Continue?`, default: false, }, ]); if (!confirm) { this.logger.info('Aborted.'); return; } } let copied; try { copied = await teamManager.copyLayout(fromTeam.id, toTeam.id, oclifExit); } catch (error) { this.surfaceApiError(error); } if (copied) { this.logger.info(`Layout of team "${fromTeam.name}" copied to "${toTeam.name}" on project ${config.projectId}.`); } else { this.logger.error('Oops, something went wrong.'); this.exit(1); } } } exports.default = TeamsCopyLayoutCommand; TeamsCopyLayoutCommand.description = "Copy a team's whole layout onto another team of the same project."; TeamsCopyLayoutCommand.flags = { from: core_1.Flags.string({ char: 'f', description: 'Name of the team to copy the layout from.', required: true, }), to: core_1.Flags.string({ char: 't', description: 'Name of the team to copy the layout to (its layout is overwritten).', required: true, }), projectId: core_1.Flags.integer({ char: 'p', description: 'Forest project ID.', }), force: core_1.Flags.boolean({ description: 'Skip the confirmation prompt.', }), }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29weS1sYXlvdXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tbWFuZHMvdGVhbXMvY29weS1sYXlvdXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFFQSxzQ0FBb0M7QUFFcEMsMEdBQWdGO0FBQ2hGLCtFQUFzRDtBQUN0RCwrRkFBcUU7QUFJckUsTUFBcUIsc0JBQXVCLFNBQVEsd0NBQTRCO0lBMkI5RSxZQUFZLElBQWMsRUFBRSxNQUFjLEVBQUUsSUFBSztRQUMvQyxLQUFLLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMxQixNQUFNLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQ3RELGFBQWEsQ0FBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDM0IsQ0FBQztJQUVELHdFQUF3RTtJQUN4RSxnRkFBZ0Y7SUFDeEUsZUFBZSxDQUFDLEtBQWM7UUFDcEMsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsR0FBRyxLQUc1QixDQUFDO1FBQ0YsSUFBSSxRQUFRLElBQUksTUFBTSxLQUFLLEdBQUcsSUFBSSxNQUFNLEtBQUssR0FBRyxJQUFJLFFBQVEsQ0FBQyxJQUFJLEVBQUU7WUFDakUsSUFBSSxNQUFNLENBQUM7WUFDWCxJQUFJO2dCQUNGLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUM7YUFDekQ7WUFBQyxNQUFNO2dCQUNOLG9FQUFvRTthQUNyRTtZQUNELElBQUksTUFBTSxFQUFFO2dCQUNWLElBQUksQ0FBQyxNQUFNLENB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