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
JavaScript
"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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