zcatalyst-cli
Version:
Command Line Tool for CATALYST
197 lines (196 loc) • 11.2 kB
JavaScript
;
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;