zcatalyst-cli
Version:
Command Line Tool for CATALYST
108 lines (107 loc) • 5.43 kB
JavaScript
;
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);
}));