zcatalyst-cli
Version:
Command Line Tool for CATALYST
147 lines (146 loc) • 7.98 kB
JavaScript
'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 import_1 = require("../../commands/iac/import");
const endpoints_1 = require("../../endpoints");
const error_1 = __importDefault(require("../../error"));
const prompt_1 = __importDefault(require("../../prompt"));
const runtime_store_1 = __importDefault(require("../../runtime-store"));
const constants_1 = require("../../util_modules/constants");
const js_1 = require("../../util_modules/js");
const logger_1 = require("../../util_modules/logger");
const option_1 = require("../../util_modules/option");
const yaml_1 = require("yaml");
const project_1 = require("../../util_modules/project");
const path_1 = require("path");
const functions_1 = require("../util/functions");
const project_2 = require("../util/project");
const client_1 = require("../util/client");
const runtime_1 = __importDefault(require("../../util_modules/constants/lib/runtime"));
const fn_utils_1 = require("../../fn-utils");
const client_utils_1 = require("../../client-utils");
exports.default = () => __awaiter(void 0, void 0, void 0, function* () {
var _a, _b;
const orgAPI = yield (0, endpoints_1.orgAPI)();
const defaultRCProjectName = (0, project_1.getDefaultProjectName)(null);
const defaultRCProjectId = (0, project_1.getDefaultProjectId)(null);
if (defaultRCProjectName !== null &&
defaultRCProjectId !== null &&
!(0, option_1.getOptionValue)('force', false)) {
(0, logger_1.message)(constants_1.FILENAME.rc +
' already has ' +
(0, ansi_colors_1.bold)(defaultRCProjectName) +
' as a default project. To overwrite use --force option');
throw new error_1.default('Skipping project setup, since project directory contains a default project. To overwrite use --force option', { skipHelp: true, exit: 0 });
}
const orgList = yield orgAPI.getAllOrgs();
if (orgList.length === 0) {
throw new error_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 default Catalyst portal for this directory: ', {
type: 'list',
choices: js_1.JS.reverse(orgChoice),
when: orgChoice.length > 1
}));
const selectedOrg = orgAns.org || orgList[0];
runtime_store_1.default.set('project.env.id', selectedOrg.id);
(0, logger_1.message)('Setting up a new default project for this folder\n');
const projectAPI = yield (0, endpoints_1.projectAPI)({ auth: true, org: selectedOrg.id });
const allProjects = (yield projectAPI.getAllProjects());
if (allProjects.length === 0) {
throw new error_1.default('Visit ' +
(0, ansi_colors_1.underline)(constants_1.ORIGIN.console) +
' for creation of your first project before you continue.', { exit: 1 });
}
const projectChoices = [
prompt_1.default.choice('[create a new project]', {
value: 0,
short: 'New-Project'
}),
prompt_1.default.choice('[import a existing project]', {
value: 1,
short: 'Import-project'
})
];
allProjects.forEach((project) => {
projectChoices.push(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 default Catalyst project for this directory: ', {
type: 'list',
choices: js_1.JS.reverse(projectChoices)
}));
let selectedProject = projectAns.project;
if (typeof selectedProject !== 'number') {
return (0, project_2.fillProjectPayload)(selectedOrg, selectedProject);
}
if (selectedProject === 0) {
const projectNameAns = yield prompt_1.default.ask(prompt_1.default.question('projectName', 'Provide a name for your new project:', {
validate: (ans) => (ans.match(constants_1.REGEX.project.name) ? true : 'Invalid project name')
}));
selectedProject = yield projectAPI.createProject(projectNameAns.projectName);
return (0, project_2.fillProjectPayload)(selectedOrg, selectedProject, true);
}
const [zipArchive, template, importRes] = yield (0, import_1.iacImport)();
yield zipArchive
.extract(runtime_store_1.default.get('cwd'), '/', { recursive: true, ignoreLevel: 0 })
.finalize();
const parsedJSON = js_1.JS.parseJSON(template);
const templateJson = parsedJSON ? parsedJSON : (0, yaml_1.parse)(template);
const functions = ((_a = templateJson.components) === null || _a === void 0 ? void 0 : _a.Functions) || [];
const client = ((_b = templateJson.components) === null || _b === void 0 ? void 0 : _b.WebClient) || [];
yield Promise.all(functions.map(({ properties }) => __awaiter(void 0, void 0, void 0, function* () {
const source = properties.code.path.replace('/', path_1.sep).replace('.zip', '');
const stack = properties.stack.toLowerCase();
const refinedTargets = yield fn_utils_1.fnUtils.common.refineTargets([source], false);
const fnUtil = stack.startsWith(runtime_1.default.language.node.value)
? fn_utils_1.fnUtils.node
: stack.startsWith(runtime_1.default.language.java.value)
? fn_utils_1.fnUtils.java
: stack.startsWith(runtime_1.default.language.python.value)
? fn_utils_1.fnUtils.python
: null;
if (fnUtil === null) {
(0, logger_1.warning)(`skipping setup of function(${refinedTargets[0].name}) since provided stack ${stack} is not supported.`);
return;
}
yield fnUtil.validate(refinedTargets, 0);
if (!refinedTargets[0].valid) {
(0, logger_1.debug)('Invalid target : ' +
refinedTargets[0].name +
' reason : ' +
refinedTargets[0].failure_reason);
(0, logger_1.warning)(`skipping setup of function(${refinedTargets[0].name}) since the package is invalid. \nContact catalyst support with debug log.`);
return;
}
(0, functions_1.fillFunctionsInitPayload)(source, properties.name, properties.stack, properties.type);
})));
if (client.length > 0) {
const { properties } = client[0];
const source = properties.code.path.replace('/', path_1.sep).replace('.zip', '');
yield client_utils_1.clientUtils.validate(source);
(0, client_1.fillClientInitPayload)(source, properties.app_name);
}
const projectDetails = yield projectAPI.getProject(importRes.project_details.id);
return (0, project_2.fillProjectPayload)(selectedOrg, projectDetails, true, true);
});