@onify/flow-extensions
Version:
Onify Flow extensions
203 lines (202 loc) • 5.6 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.OnifyElementExtensions = void 0;
var _getExtensions = require("./getExtensions.js");
class OnifyElementExtensions {
constructor(activity, context) {
this.activity = activity;
this.context = context;
this.formatQ = activity.broker.getQueue('format-run-q');
this._asyncFormatOnEnter = this._asyncFormatOnEnter.bind(this);
const {
Service
} = this.extensions = (0, _getExtensions.getExtensions)(activity, context);
if (Service) {
activity.behaviour.Service = Service;
}
}
activate(message) {
const activity = this.activity;
const executionListeners = this.extensions.listeners;
if (message.fields.redelivered && message.fields.routingKey === 'run.start') {
activity.on('start', this._asyncFormatOnEnter, {
consumerTag: '_onify-extension-on-enter'
});
} else {
activity.on('enter', this._asyncFormatOnEnter, {
consumerTag: '_onify-extension-on-enter'
});
}
activity.on('activity.execution.completed', elementApi => {
return this._onExecutionCompleted(elementApi);
}, {
consumerTag: '_onify-extension-on-executed'
});
if (executionListeners?.onStart) {
activity.on('start', elementApi => {
this._executeExecutionListener('start', elementApi);
}, {
consumerTag: '_onify-extension-on-listenerstart'
});
}
if (executionListeners?.onEnd) {
activity.on('end', elementApi => {
this._executeExecutionListener('end', elementApi);
}, {
consumerTag: '_onify-extension-on-listenerend'
});
}
}
deactivate() {
const broker = this.activity.broker;
broker.cancel('_onify-extension-on-enter');
broker.cancel('_onify-extension-on-executed');
broker.cancel('_onify-extension-on-listenerstart');
broker.cancel('_onify-extension-on-listenerend');
}
async _asyncFormatOnEnter(elementApi) {
this.formatQ.queueMessage({
routingKey: 'run.enter.format'
}, {
endRoutingKey: 'run.enter.complete'
}, {
persistent: false
});
try {
var format = await this._onEnterAsync(elementApi);
} catch (err) {
return elementApi.broker.publish('format', 'run.enter.error', {
error: err
}, {
persistent: false
});
}
elementApi.broker.publish('format', 'run.enter.complete', format, {
persistent: false
});
}
async _onExecutionCompleted(elementApi) {
this.formatQ.queueMessage({
routingKey: 'run.end.format'
}, {
endRoutingKey: 'run.end.complete'
}, {
persistent: false
});
try {
var format = await this._onExecuted(elementApi);
} catch (err) {
return elementApi.broker.publish('format', 'run.end.error', {
error: err
}, {
persistent: false
});
}
elementApi.broker.publish('format', 'run.end.complete', {
...format
}, {
persistent: false
});
}
async _onEnterAsync(elementApi) {
const {
format,
properties,
io,
form
} = this.extensions;
const result = {};
Object.assign(result, format.resolve(elementApi));
Object.assign(elementApi.content, result);
if (properties) {
Object.assign(result, {
properties: properties.resolve(elementApi)
});
Object.assign(elementApi.content, result);
}
if (io) {
if (io.input?.length) {
const input = await io.getInput(this.activity, elementApi);
Object.assign(result, {
input
});
Object.assign(elementApi.content, result);
}
if (io.output?.length) {
result.assignToOutput = true;
}
}
if (form) {
Object.assign(result, {
form: form.resolve(elementApi)
});
}
return result;
}
async _onExecuted(elementApi) {
const {
properties,
io
} = this.extensions;
const result = {};
if (io?.output.length) {
const output = await io.getOutput(this.activity, elementApi);
Object.assign(result, {
output
});
Object.assign(elementApi.content, {
output
});
}
if (properties) {
const props = properties.resolve(elementApi);
Object.assign(result, {
properties: props
});
Object.assign(elementApi.content, {
properties: props
});
}
const {
output,
assignToOutput,
resultVariable
} = elementApi.content;
if (output !== undefined && output !== null) {
if (assignToOutput && typeof output === 'object') {
Object.assign(this.activity.environment.output, output);
} else if (resultVariable) {
elementApi.environment.output[resultVariable] = output;
}
}
return result;
}
async _executeExecutionListener(eventName, elementApi) {
const routingKey = 'run.listener.' + eventName;
const endRoutingKey = routingKey + '.complete';
this.formatQ.queueMessage({
routingKey
}, {
endRoutingKey
}, {
persistent: false
});
try {
var format = await this.extensions.listeners.execute(eventName, elementApi);
} catch (err) {
return elementApi.broker.publish('format', routingKey + '.error', {
error: err
}, {
persistent: false
});
}
elementApi.broker.publish('format', endRoutingKey, {
...format
}, {
persistent: false
});
}
}
exports.OnifyElementExtensions = OnifyElementExtensions;