UNPKG

zcatalyst-cli

Version:

Command Line Tool for CATALYST

315 lines (314 loc) 15.8 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 rc_1 = __importDefault(require("../internal/rc")); const prompt_1 = __importDefault(require("../prompt")); const runtime_store_1 = __importDefault(require("../runtime-store")); const constants_1 = require("../util_modules/constants"); 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 option_1 = require("../util_modules/option"); const project_2 = require("../util_modules/project"); const config_store_1 = __importDefault(require("../util_modules/config-store")); const dc_1 = require("../util_modules/dc"); const env_1 = require("../util_modules/env"); const features_1 = require("../init/features"); exports.default = ({ optional = false, resolveOnNotFound = false, skipOrgCheck = true, skipProjectCheck = true, generateRc = false } = {}) => __awaiter(void 0, void 0, void 0, function* () { const globOrgOpt = (0, option_1.getGlobalOptionValue)('org', null); const orgOpt = globOrgOpt ? globOrgOpt : (0, env_1.getEnvVariable)('CATALYST_ORG', (0, env_1.getEnvVariable)('ZC_ORG_ID', null)); const globProjectOpt = (0, option_1.getGlobalOptionValue)('project', null); const projectOpt = globProjectOpt ? globProjectOpt : (0, env_1.getEnvVariable)('CATALYST_PROJECT_ID', (0, env_1.getEnvVariable)('CATALYST_PROJECT', (0, env_1.getEnvVariable)('ZC_PROJECT_ID', null))); if (env_1.isCI) { if (orgOpt && projectOpt) { runtime_store_1.default.set('project.id', projectOpt); runtime_store_1.default.set('project.env.id', orgOpt + ''); return; } throw new index_js_1.default('Org and Project Id cannot be empty.', { exit: 1 }); } const orgApi = yield (0, endpoints_1.orgAPI)(); if (orgOpt !== null) { const orgList = yield orgApi.getAllOrgs(); const found = orgList.find((org) => org.id + '' === orgOpt); if (!found) { throw new index_js_1.default('Invalid "org" option supplied', { exit: 2 }); } runtime_store_1.default.set('project.env.id', orgOpt + ''); } let projectApi = yield (0, endpoints_1.projectAPI)(); let envApi = yield (0, endpoints_1.envAPI)(); const convertProjectToProperties = (project) => { project = (0, project_2.transformProject)(project); runtime_store_1.default.set('project.name', project.name); runtime_store_1.default.set('project.id', project.id + ''); runtime_store_1.default.set('project.domain', project.domain); runtime_store_1.default.set('project.timezone', project.timezone); }; const convertEnvToProperties = (envArr) => { const envObj = js_1.JS.find(envArr, { env_name: constants_1.DEFAULT.env_name }); if (envObj === undefined) { throw new index_js_1.default('Unable to find the development environment for this project', { exit: 2 }); } runtime_store_1.default.set('project.env', (0, project_2.transformEnv)(envObj)); }; let ignoreRC = false; if (projectOpt !== null) { if (parseInt(projectOpt, 10)) { const project = (yield projectApi.getProject(projectOpt)); convertProjectToProperties(project); const envArr = (yield envApi.getEnvs(project.id + '')); convertEnvToProperties(envArr); ignoreRC = true; } else { const projectArr = (yield projectApi.getAllProjects()); const project = js_1.JS.find(projectArr, { project_name: projectOpt }); if (project === undefined) { const allOrgs = yield orgApi.getAllOrgs(); const orgId = (0, project_2.getEnvId)(); const orgDetails = allOrgs.find((org) => (!orgId && org.is_default) || org.name === orgId || org.id === orgId); throw new index_js_1.default('invalid project provided with the --project option', { exit: 1, errorId: 'RC-1', arg: [ (0, ansi_colors_1.bold)(projectOpt), (0, ansi_colors_1.bold)('--project'), (0, ansi_colors_1.bold)(projectArr .filter((proj) => proj.project_type && project_1.default.accepted_types.includes(proj.project_type)) .map((project) => '* ' + project.project_name) .join('\n')), `${orgDetails === null || orgDetails === void 0 ? void 0 : orgDetails.name}(${orgDetails === null || orgDetails === void 0 ? void 0 : orgDetails.id})` + ((orgDetails === null || orgDetails === void 0 ? void 0 : orgDetails.is_default) ? ' [DEFAULT]' : '') ] }); } convertProjectToProperties(project); const envArr = (yield envApi.getEnvs(project.id + '')); convertEnvToProperties(envArr); ignoreRC = true; } } else { ignoreRC = false; } const rcInstance = yield rc_1.default.load().catch((err) => { if (optional || ignoreRC) { (0, index_1.debug)('Unable to load RC file'); (0, index_1.debug)('Reason: ' + err); return { loaded: false }; } throw new index_js_1.default('Unable to load the ' + constants_1.FILENAME.rc + 'file', { exit: 1, original: err, errorId: 'RC-2', arg: [(0, ansi_colors_1.bold)(constants_1.FILENAME.rc)] }); }); runtime_store_1.default.set('rc', rcInstance); if (!rcInstance.loaded) { if (!ignoreRC && orgOpt === null && !skipOrgCheck) { (0, index_1.warning)('Not in Catalyst app directory!!!'); const orgList = yield orgApi.getAllOrgs(); if (orgList.length === 0) { throw new index_js_1.default('Visit ' + (0, ansi_colors_1.underline)(constants_1.ORIGIN.console) + ' for creation of your first project before you continue.', { exit: 1 }); } const orgChoice = orgList.map((org) => prompt_1.default.choice(org.name + ' (' + org.id + ')', { value: org, short: org.name })); const orgAns = yield prompt_1.default.ask(prompt_1.default.question('org', 'Select a Catalyst org to continue: ', { type: 'list', choices: js_1.JS.reverse(orgChoice), when: orgChoice.length > 0 })); const selectedOrg = orgAns.org || orgList[0]; runtime_store_1.default.set('project.env.id', selectedOrg.id); } if (!skipProjectCheck) { const projectList = yield (yield (0, endpoints_1.projectAPI)()).getAllProjects(); const projectChoice = projectList.map((project) => prompt_1.default.choice(project.project_name + ' (' + project.id + ')', { value: project, short: project.project_name })); const projectAns = yield prompt_1.default.ask(prompt_1.default.question('project', 'Select a Catalyst Project to continue: ', { type: 'list', choices: js_1.JS.reverse(projectChoice), when: projectChoice.length > 0 })); const selectedProject = projectAns.project || projectList[0]; runtime_store_1.default.set('project.id', selectedProject.id); } if (generateRc) { (0, index_1.warning)('Not in Catalyst app directory!!!'); const stagedAns = yield prompt_1.default.ask(prompt_1.default.question('consent', 'Do you wish to initialize the catalyst project in this directory?', { type: 'confirm', defaultAns: true })); if (stagedAns.consent) { yield (0, features_1.project)(); } } if (optional || ignoreRC) { return; } throw new index_js_1.default('Not in a Catalyst app directory run catalyst init', { exit: 0, errorId: 'RC-3', arg: [(0, ansi_colors_1.bold)(constants_1.FILENAME.rc), (0, ansi_colors_1.bold)('catalyst init'), (0, ansi_colors_1.bold)('--project')] }); } if (ignoreRC) { return; } let finalProjectObj; let finalEnvObj; if (!(rcInstance instanceof rc_1.default)) { throw new index_js_1.default('RC is undefined', { exit: 2 }); } const defaultRCProject = rcInstance.defaultProject; const defaultRCEnv = rcInstance.defaultEnv; if (defaultRCProject === undefined || js_1.JS.isEmpty(defaultRCProject)) { (0, index_1.debug)('default project details is not defined or is empty in RC file'); if (optional) { return; } throw new index_js_1.default(constants_1.FILENAME.rc + ' file is corrupted', { exit: 1, errorId: 'RC-4', arg: [(0, ansi_colors_1.bold)(constants_1.FILENAME.rc), (0, ansi_colors_1.bold)('catalyst init project'), (0, ansi_colors_1.bold)('--option')] }); } if (projectOpt === null) { finalProjectObj = rcInstance.activeProject; finalEnvObj = rcInstance.activeEnv; } else if (!isNaN(parseInt(projectOpt, 10))) { finalProjectObj = rcInstance.getProjectById(projectOpt); } else { finalProjectObj = rcInstance.getProjectByName(projectOpt); } if (finalProjectObj === undefined && finalEnvObj === undefined) { finalProjectObj = defaultRCProject; finalEnvObj = defaultRCEnv; } if (finalProjectObj === undefined) { (0, index_1.debug)('finalProject came to be empty, default project details is possibly not defined in RC file'); throw new index_js_1.default(constants_1.FILENAME.rc + ' file is corrupted', { exit: 1, errorId: 'RC-4', arg: [(0, ansi_colors_1.bold)(constants_1.FILENAME.rc), (0, ansi_colors_1.bold)('catalyst init project'), (0, ansi_colors_1.bold)('--option')] }); } if (typeof finalEnvObj !== 'undefined') { projectApi = yield (0, endpoints_1.projectAPI)({ auth: true, org: finalEnvObj.id, printError: false }); envApi = yield (0, endpoints_1.envAPI)({ auth: true, org: finalEnvObj.id }); } const projectDetails = yield projectApi .getProject(finalProjectObj.id + '') .catch((err) => __awaiter(void 0, void 0, void 0, function* () { if (js_1.JS.hasIn(err, 'context.response.statusCode')) { switch (err.context.response.statusCode) { case 401: case 404: { if (resolveOnNotFound) { finalProjectObj = undefined; return; } throw new index_js_1.default('no access to project: ' + (finalProjectObj === null || finalProjectObj === void 0 ? void 0 : finalProjectObj.id), { exit: 1, errorId: 'RC-5', arg: [ (0, ansi_colors_1.bold)(`${finalProjectObj === null || finalProjectObj === void 0 ? void 0 : finalProjectObj.name}(${finalProjectObj === null || finalProjectObj === void 0 ? void 0 : finalProjectObj.id})`), (0, ansi_colors_1.bold)((0, ansi_colors_1.cyan)('command: ') + 'catalyst init --force') ] }); } case 403: { const activeDC = (0, dc_1.getActiveDC)(); const user = config_store_1.default.get(`${activeDC}.user`); throw new index_js_1.default('Invalid org identifier: ' + (finalEnvObj === null || finalEnvObj === void 0 ? void 0 : finalEnvObj.id), { original: err, errorId: 'RC-6', arg: [ (0, ansi_colors_1.bold)('Current logged in user:'), ansi_colors_1.cyan.italic.underline(user ? user.Email ? user.Email : `${user.First_Name} ${user.Last_Name}` : 'unknown user'), (0, ansi_colors_1.bold)('Current Org-id:'), (0, ansi_colors_1.red)((finalEnvObj === null || finalEnvObj === void 0 ? void 0 : finalEnvObj.id) || '') ] }); } } } throw err; })); if (projectDetails) { if (projectDetails.project_name !== finalProjectObj.name) { finalProjectObj.name = projectDetails.project_name; finalProjectObj.domain.name = projectDetails.project_domain_details.project_domain_name; rcInstance.upsertProject(finalProjectObj); } if (projectDetails.timezone !== finalProjectObj.timezone) { finalProjectObj.timezone = projectDetails.timezone; rcInstance.upsertProject(finalProjectObj); } } if (finalProjectObj === undefined) { return; } const envs = (yield envApi.getEnvs(finalProjectObj.id + '')); if (finalEnvObj === undefined || js_1.JS.isEmpty(finalEnvObj)) { const envObj = js_1.JS.find(envs, { env_name: constants_1.DEFAULT.env_name }); if (envObj === undefined || js_1.JS.isEmpty(envObj)) { throw new index_js_1.default('Unable to find the development environment for this project', { exit: 2 }); } finalEnvObj = (0, project_2.transformEnv)(envObj); yield (0, project_2.upsertEnv)(finalProjectObj.id + '', envObj, { active: true, base: js_1.JS.isEmpty(defaultRCEnv) }); } if (defaultRCProject.id + '' !== finalProjectObj.id + '' && (0, option_1.getCurrentCommand)() !== 'project:reset' && !process.env.CATALYST_SUB_PROCESS) { (0, index_1.message)('Using project other than the default project for this folder. Use ' + (0, ansi_colors_1.bold)('catalyst project:reset') + ' in order to reset.'); } convertProjectToProperties(finalProjectObj); runtime_store_1.default.set('project.env', runtime_store_1.default.get('project.env', finalEnvObj)); });