UNPKG

zcatalyst-cli

Version:

Command Line Tool for CATALYST

108 lines (107 loc) 5.43 kB
'use strict'; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const ansi_colors_1 = require("ansi-colors"); const endpoints_1 = require("../../endpoints"); const index_js_1 = __importDefault(require("../../error/index.js")); const command_1 = __importDefault(require("../../internal/command")); const prompt_1 = __importDefault(require("../../prompt")); const scopes_js_1 = __importDefault(require("../../authentication/constants/scopes.js")); const project_1 = __importDefault(require("../../util_modules/constants/project")); const js_1 = require("../../util_modules/js"); const index_1 = require("../../util_modules/logger/index"); const project_2 = require("../../util_modules/project"); const makeActive = (currentProjectId, optedProject) => __awaiter(void 0, void 0, void 0, function* () { yield (0, project_2.upsertProject)(optedProject, { active: true, base: js_1.JS.isNull(currentProjectId) }); const optedProjectEnv = optedProject.env_details; yield (0, project_2.upsertEnv)(optedProject.id, optedProjectEnv[0], { active: true }); (0, index_1.success)('Successfully made project active'); }); exports.default = new command_1.default('project:use [name_or_project_id]') .description('Set an active Catalyst project for your working directory') .needs('auth', [scopes_js_1.default.projects]) .needs('config', { optional: true, resolveOnNotFound: true }) .needs('rc', { optional: true, resolveOnNotFound: true, skipOrgCheck: false }) .action((newActive) => __awaiter(void 0, void 0, void 0, function* () { const currentProjectId = (0, project_2.getProjectId)(null); const allProjects = (yield (yield (0, endpoints_1.projectAPI)()).getAllProjects().catch(() => { throw new index_js_1.default('Unable to get projects', { exit: 2 }); })); if (allProjects.length === 0) { throw new index_js_1.default('No projects found', { exit: 0, errorId: 'PROJ-USE-1' }); } if (allProjects.length === 1) { (0, index_1.message)('only one project found in remote, ignoring user input and making it as active'); return makeActive(currentProjectId, allProjects[0]); } const transformedProjects = allProjects.map(project_2.transformProject); if (newActive !== undefined) { const optedProject = parseInt(newActive, 10) ? transformedProjects.find((proj) => proj.id + '' === newActive) : transformedProjects.find((proj) => proj.name === newActive); if ((optedProject === null || optedProject === void 0 ? void 0 : optedProject.type) && !project_1.default.accepted_types.includes(optedProject.type)) { throw new index_js_1.default('provided project cannot be used since its not live', { exit: 1, errorId: 'PROJ-USE-3', arg: [ (0, ansi_colors_1.bold)(newActive), (0, ansi_colors_1.bold)(allProjects .filter((proj) => proj.project_type && project_1.default.accepted_types.includes(proj.project_type)) .map((project) => '* ' + project.project_name) .join('\n')) ] }); } if (optedProject === undefined) { throw new index_js_1.default('provided project does not match any project in remote', { exit: 1, errorId: 'PROJ-USE-2', arg: [ (0, ansi_colors_1.bold)(newActive), (0, ansi_colors_1.bold)(allProjects.map((project) => '* ' + project.project_name).join('\n')) ] }); } return makeActive(currentProjectId, optedProject); } const choices = transformedProjects.map((project) => { return prompt_1.default.choice(project.name, { value: project, disabled: currentProjectId === project.id + '' ? 'currently active project' : project.type && !project_1.default.accepted_types.includes(project.type) ? project.type : false }); }); const projectAns = yield prompt_1.default.ask(prompt_1.default.question('project', 'Which project do you wish to make active ? ', { type: 'list', choices })); if (!projectAns.project) { throw new index_js_1.default('Invalid project', { exit: 2 }); } return makeActive(currentProjectId, projectAns.project); }));