@reactivehub/cli
Version:
133 lines (97 loc) • 4.31 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _chalk = require('chalk');
var _chalk2 = _interopRequireDefault(_chalk);
var _lodash = require('lodash');
var _messages = require('../messages');
var _messages2 = _interopRequireDefault(_messages);
var _filter = require('../core/filter');
var _filter2 = _interopRequireDefault(_filter);
var _event = require('../core/event');
var _event2 = _interopRequireDefault(_event);
var _yaml = require('./yaml');
var _yaml2 = _interopRequireDefault(_yaml);
var _api = require('../services/api');
var _config = require('./config');
var _config2 = _interopRequireDefault(_config);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const { getFilter } = _filter2.default;
const folder = () => _config2.default.folders.events();
const getActions = (eventId, filterId) => getFilter(eventId, filterId).actions || [];
const actionExists = (eventId, filterId, actionId) => {
const actions = getActions(eventId, filterId);
return actions && actions.filter(({ id }) => id === actionId).length > 0;
};
const appendTrigger = (action, triggerEvent, triggerModels) => {
const modifiedAction = action;
// is there a way to refactor this?
if (Array.isArray(modifiedAction[triggerEvent])) {
const triggerEventList = [...modifiedAction[triggerEvent], ...triggerModels];
modifiedAction[triggerEvent] = (0, _lodash.uniqWith)(triggerEventList, _lodash.isEqual);
} else {
modifiedAction[triggerEvent] = triggerModels;
}
return modifiedAction;
};
const createAction = params => {
const { eventId, filterId, id: actionId, type, action: actionType } = params;
const actionPayload = params;
delete actionPayload.eventId;
delete actionPayload.filterId;
const eventPayload = _event2.default.loadEvent(folder(), eventId);
const filterConfig = eventPayload.filters.find(({ id }) => id === filterId);
if (!filterConfig.actions) filterConfig.actions = [];
const foundAction = filterConfig.actions.find(action => action.id === actionId);
if (foundAction) {
filterConfig.actions = filterConfig.actions.map(action => {
if (action.id === actionId) return actionPayload;
return action;
});
} else {
filterConfig.actions.push(actionPayload);
}
eventPayload.filters = eventPayload.filters.map(filterMap => {
if (filterMap.id === filterId) return filterConfig;
return filterMap;
});
const created = _yaml2.default.create(folder(), eventId, eventPayload);
if (created) {
_messages2.default.success(`Action ${_chalk2.default.blue.bold(actionId)} on event ${_chalk2.default.blue.bold(`${eventId}:${filterId}`)} successfully created!`);
_messages2.default.info('Check the action template at the YAML file and replace its properties with the event model parameters (wildcards allowed). Check the documentation for more info https://docs.reactivehub.io/guide/events/actions#wildcards');
}
(0, _api.sendActionCommand)({ id: actionId, eventId, type, action: actionType });
return created;
};
const createTrigger = params => {
const { triggerEvent, triggerModels, eventId, filterId, actionId } = params;
const eventPayload = _event2.default.loadEvent(folder(), eventId);
const filterConfig = eventPayload.filters.find(({ id }) => id === filterId);
if (!filterConfig.actions) filterConfig.actions = [];
const foundAction = filterConfig.actions.find(action => action.id === actionId);
if (foundAction) {
filterConfig.actions = filterConfig.actions.map(action => {
if (action.id === actionId) {
const modifiedAction = appendTrigger(action, triggerEvent, triggerModels);
return modifiedAction;
}
return action;
});
} else {
_messages2.default.error(`Could not find action ${_chalk2.default.blueBright(actionId)}!`);
throw new Error('Action not found. Run "rhub add:action" to add a new action.');
}
eventPayload.filters = eventPayload.filters.map(filterMap => {
if (filterMap.id === filterId) return filterConfig;
return filterMap;
});
return _yaml2.default.create(folder(), eventId, eventPayload);
};
exports.default = {
createAction,
actionExists,
createTrigger,
getActions
};
//# sourceMappingURL=actions.js.map