UNPKG

zcatalyst-cli

Version:

Command Line Tool for CATALYST

197 lines (196 loc) 11.2 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; 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 }); exports.generate = void 0; const ansi_colors_1 = require("ansi-colors"); const error_1 = __importDefault(require("../error")); const option_1 = require("../util_modules/option"); const constants_1 = require("../util_modules/constants"); const fs_1 = require("../util_modules/fs"); const endpoints_1 = require("../endpoints"); const project_1 = require("../util_modules/project"); const logger_1 = require("../util_modules/logger"); function generate(source, action) { return __awaiter(this, void 0, void 0, function* () { var _a; (0, logger_1.warning)('The "event:generate" command is deprecated and will be removed in upcoming releases. Please use the signals:generate instead.'); const unknownArgs = (0, option_1.getUnknownOpts)([]).filter((arg) => arg !== '--verbose'); if (unknownArgs.length % 2 !== 0) { throw new error_1.default('Unknown options are not provided as key value pairs', { exit: 1, errorId: 'IDX-1', arg: [(0, ansi_colors_1.bold)(source), (0, ansi_colors_1.bold)(action), (0, ansi_colors_1.bold)('--key value')] }); } const remoteSourceName = constants_1.EVENT_SOURCE[source]; if (remoteSourceName === undefined) { throw new error_1.default('Invalid source', { exit: 1, errorId: 'IDX-2', arg: [ (0, ansi_colors_1.bold)(Object.keys(constants_1.EVENT_SOURCE) .map((src) => '* ' + src) .join('\n')) ] }); } if (constants_1.EVENT_REF[remoteSourceName] === undefined) { throw new error_1.default('Event reference is not found for the source provided', { exit: 2 }); } let eventJsonContent = yield fs_1.ASYNC.readFile(constants_1.TEMPLATE.event_data); if (eventJsonContent === undefined) { throw new error_1.default('Event template json is undefined', { exit: 2 }); } const optionMap = unknownArgs.reduce((previousValue, currentValue, currentIndex, optionArr) => { if (currentIndex % 2 === 0) { if (!currentValue.startsWith('--') && currentValue !== '-e' && currentValue !== '-rid' && currentValue !== '--verbose') { const fault = unknownArgs === null || unknownArgs === void 0 ? void 0 : unknownArgs.map((arg) => { if (arg === currentValue) { return (0, ansi_colors_1.red)(arg); } return arg; }).join(' '); throw new error_1.default('Invalid option format detected', { exit: 1, errorId: 'IDX-3', arg: [(0, ansi_colors_1.italic)(fault), (0, ansi_colors_1.bold)('--<option> <value>')] }); } previousValue[currentValue.slice(2)] = optionArr[currentIndex + 1]; } return previousValue; }, {}); let eventBusName = (0, option_1.getOptionValue)('eventBus', undefined); if (!eventBusName) { eventBusName = constants_1.DEFAULT.event_bus.name; } if (remoteSourceName === constants_1.EVENT_SOURCE.custom && eventBusName === constants_1.DEFAULT.event_bus.name) { throw new error_1.default('Event bus details not provided', { exit: 0, errorId: 'IDX-4', arg: [(0, ansi_colors_1.bold)('-e or --event-bus')] }); } const remoteEventBusDetails = (yield (yield (0, endpoints_1.eventBusAPI)()).getAllEventBusDetails()); const currentEventBusDetails = remoteEventBusDetails.filter((eventBus) => eventBus.name === eventBusName)[0]; if (currentEventBusDetails === undefined) { const availableBuses = remoteEventBusDetails .map((bus) => { return '* ' + bus.name; }) .join('\n'); throw new error_1.default('No matching event bus details found', { exit: 1, errorId: 'IDX-5', arg: [(0, ansi_colors_1.bold)(eventBusName), (0, ansi_colors_1.bold)(availableBuses)] }); } const eventDataPlaceHolder = constants_1.PLACEHOLDER.event_data; Object.keys(eventDataPlaceHolder).forEach((placeholderKey) => { switch (placeholderKey) { case 'project_id': eventJsonContent = eventJsonContent === null || eventJsonContent === void 0 ? void 0 : eventJsonContent.replace(new RegExp(eventDataPlaceHolder[placeholderKey], 'g'), (0, project_1.getProjectId)() + ''); break; case 'project_name': eventJsonContent = eventJsonContent === null || eventJsonContent === void 0 ? void 0 : eventJsonContent.replace(new RegExp(eventDataPlaceHolder[placeholderKey], 'g'), (0, project_1.getProjectName)() + ''); break; case 'eventbus_id': (0, logger_1.debug)(`eventBusName provided is : ${eventBusName} and id is ${currentEventBusDetails.id}`); eventJsonContent = eventJsonContent === null || eventJsonContent === void 0 ? void 0 : eventJsonContent.replace(new RegExp(eventDataPlaceHolder[placeholderKey], 'g'), currentEventBusDetails.id + ''); break; case 'eventbus_name': eventJsonContent = eventJsonContent === null || eventJsonContent === void 0 ? void 0 : eventJsonContent.replace(new RegExp(eventDataPlaceHolder[placeholderKey], 'g'), currentEventBusDetails.name + ''); break; case 'action': const eventRefArr = constants_1.EVENT_REF[remoteSourceName]; const remoteRefAction = action .split('_') .map((act) => act.charAt(0).toUpperCase() + act.slice(1)) .join(' '); (0, logger_1.debug)(`action provided is : ${remoteRefAction}`); const indexOfAction = eventRefArr.indexOf(remoteRefAction); if (indexOfAction < 0) { const availableActions = eventRefArr .map((act) => { act = act .split(' ') .map((act) => act.charAt(0).toUpperCase() + act.slice(1)) .join('_'); return '* ' + act; }) .join('\n'); throw new error_1.default('Action incompatible with the source ' + eventRefArr, { exit: 1, errorId: 'IDX-6', arg: [(0, ansi_colors_1.bold)(action), ansi_colors_1.bold.red('X'), (0, ansi_colors_1.bold)(source), (0, ansi_colors_1.bold)(availableActions)] }); } eventJsonContent = eventJsonContent === null || eventJsonContent === void 0 ? void 0 : eventJsonContent.replace(new RegExp(eventDataPlaceHolder[placeholderKey], 'g'), eventRefArr[indexOfAction]); break; case 'source': eventJsonContent = eventJsonContent === null || eventJsonContent === void 0 ? void 0 : eventJsonContent.replace(new RegExp(eventDataPlaceHolder[placeholderKey], 'g'), remoteSourceName); break; case 'event_time': eventJsonContent = eventJsonContent === null || eventJsonContent === void 0 ? void 0 : eventJsonContent.replace(new RegExp(eventDataPlaceHolder[placeholderKey], 'g'), Date.now().toString()); break; default: break; } }); const isCustomSource = source === 'custom'; const sourceModule = yield (_a = `./${source}`, Promise.resolve().then(() => __importStar(require(_a)))); eventJsonContent = eventJsonContent.replace(new RegExp(constants_1.PLACEHOLDER.event_data.rule_id, 'g'), isCustomSource ? yield sourceModule.getRuleId() : 'NULL'); const evenData = !isCustomSource ? yield sourceModule.getData(optionMap) : optionMap.payload; eventJsonContent = eventJsonContent.replace(new RegExp(constants_1.PLACEHOLDER.event_data.data, 'g'), JSON.stringify(evenData)); eventJsonContent = eventJsonContent.replace(new RegExp(constants_1.PLACEHOLDER.event_data.source_id, 'g'), sourceModule.sourceId); const jsonContent = JSON.parse(eventJsonContent); Object.keys(jsonContent).forEach((key) => { if (jsonContent[key] === 'NULL') { key === 'source_entity_id' && remoteSourceName === constants_1.EVENT_SOURCE.custom ? (jsonContent[key] = currentEventBusDetails.id) : delete jsonContent[key]; } }); return jsonContent; }); } exports.generate = generate;