bpm-engine
Version:
Business Process Management Engine for JavaScript
115 lines (87 loc) • 10.7 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
var _promise = require('babel-runtime/core-js/promise');
var _promise2 = _interopRequireDefault(_promise);
var _keys = require('babel-runtime/core-js/object/keys');
var _keys2 = _interopRequireDefault(_keys);
var _debug = require('./debug');
var _debug2 = _interopRequireDefault(_debug);
var _serial = require('./serial');
var _serial2 = _interopRequireDefault(_serial);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const log = (0, _debug2.default)('process:plugins');
class Element {
constructor({ definition, plugins, tokenInstance }) {
var _this = this;
this.callPlugins = (fn, extra) => {
log(`${this.tokenInstance.tokenId} > ${this.definition.id} > ${fn}`);
const promises = [];
(0, _keys2.default)(this.plugins).forEach(pluginName => {
if (this.plugins[pluginName][fn]) {
const plugin = this.plugins[pluginName][fn];
promises.push(plugin(this.definition, this.tokenInstance, extra));
}
});
return _promise2.default.all(promises);
};
this.makeReady = () => this.callPlugins('onReady');
this.makeActive = () => this.callPlugins('onActive');
this.makeComplete = () => this.callPlugins('onComplete');
this.persistChildIdsToParent = childIds => this.persist.tokenInstance.update({ tokenId: this.tokenInstance.tokenId }, {
$set: {
currentActivity: this.definition.id,
childs: childIds,
status: this.tokenInstance.status
}
});
this.processChilds = (() => {
var _ref = (0, _asyncToGenerator3.default)(function* (childTokenInstances) {
const childTokenInstancesIds = childTokenInstances.map(function (child) {
return child.tokenId;
});
yield _this.persistChildIdsToParent(childTokenInstancesIds);
yield _promise2.default.all(childTokenInstances.map(function (childTokenInstance) {
return childTokenInstance.persistCreate();
}));
yield (0, _serial2.default)(childTokenInstances.map(function (childTokenInstance) {
return childTokenInstance.execute;
}));
});
return function (_x) {
return _ref.apply(this, arguments);
};
})();
this.instantiateChildTokenInstances = outgoing => _promise2.default.all(outgoing.map((() => {
var _ref2 = (0, _asyncToGenerator3.default)(function* (path) {
const token = yield _this.engine.createTokenInstance({
payload: _this.tokenInstance.payload,
processId: _this.tokenInstance.processId,
parent: _this.tokenInstance.tokenId,
isSubProcess: _this.tokenInstance.isSubProcess,
currentActivity: path.id,
status: 'running',
flowObjects: _this.tokenInstance.flowObjects
});
token.next = token.flowObjects.find(function (el) {
return el.id === path.id;
});
return token;
});
return function (_x2) {
return _ref2.apply(this, arguments);
};
})()));
this.definition = definition;
this.plugins = plugins;
this.tokenInstance = tokenInstance;
this.engine = tokenInstance.engine;
this.evalCondition = this.engine.evalCondition;
this.persist = this.engine.persist;
}
}
exports.default = Element;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvRWxlbWVudC5qcyJdLCJuYW1lcyI6WyJsb2ciLCJFbGVtZW50IiwiY29uc3RydWN0b3IiLCJkZWZpbml0aW9uIiwicGx1Z2lucyIsInRva2VuSW5zdGFuY2UiLCJjYWxsUGx1Z2lucyIsImZuIiwiZXh0cmEiLCJ0b2tlbklkIiwiaWQiLCJwcm9taXNlcyIsImZvckVhY2giLCJwbHVnaW5OYW1lIiwicGx1Z2luIiwicHVzaCIsImFsbCIsIm1ha2VSZWFkeSIsIm1ha2VBY3RpdmUiLCJtYWtlQ29tcGxldGUiLCJwZXJzaXN0Q2hpbGRJZHNUb1BhcmVudCIsImNoaWxkSWRzIiwicGVyc2lzdCIsInVwZGF0ZSIsIiRzZXQiLCJjdXJyZW50QWN0aXZpdHkiLCJjaGlsZHMiLCJzdGF0dXMiLCJwcm9jZXNzQ2hpbGRzIiwiY2hpbGRUb2tlbkluc3RhbmNlcyIsImNoaWxkVG9rZW5JbnN0YW5jZXNJZHMiLCJtYXAiLCJjaGlsZCIsImNoaWxkVG9rZW5JbnN0YW5jZSIsInBlcnNpc3RDcmVhdGUiLCJleGVjdXRlIiwiaW5zdGFudGlhdGVDaGlsZFRva2VuSW5zdGFuY2VzIiwib3V0Z29pbmciLCJwYXRoIiwidG9rZW4iLCJlbmdpbmUiLCJjcmVhdGVUb2tlbkluc3RhbmNlIiwicGF5bG9hZCIsInByb2Nlc3NJZCIsInBhcmVudCIsImlzU3ViUHJvY2VzcyIsImZsb3dPYmplY3RzIiwibmV4dCIsImZpbmQiLCJlbCIsImV2YWxDb25kaXRpb24iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOzs7O0FBQ0E7Ozs7OztBQUVBLE1BQU1BLE1BQU0scUJBQU0saUJBQU4sQ0FBWjs7QUFFZSxNQUFNQyxPQUFOLENBQWM7QUFDM0JDLGNBQVksRUFBRUMsVUFBRixFQUFjQyxPQUFkLEVBQXVCQyxhQUF2QixFQUFaLEVBQW9EO0FBQUE7O0FBQUEsU0FTcERDLFdBVG9ELEdBU3RDLENBQUNDLEVBQUQsRUFBS0MsS0FBTCxLQUFlO0FBQzNC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QUE7QUFBQSxTQUFaLENBOUNrRDs7QUFDbEQsU0FBS3BDLFVBQUwsR0FBa0JBLFVBQWxCO0FBQ0EsU0FBS0MsT0FBTCxHQUFlQSxPQUFmO0FBQ0EsU0FBS0MsYUFBTCxHQUFxQkEsYUFBckI7QUFDQSxTQUFLbUMsTUFBTCxHQUFjbkMsY0FBY21DLE1BQTVCO0FBQ0EsU0FBS1UsYUFBTCxHQUFxQixLQUFLVixNQUFMLENBQVlVLGFBQWpDO0FBQ0EsU0FBSzVCLE9BQUwsR0FBZSxLQUFLa0IsTUFBTCxDQUFZbEIsT0FBM0I7QUFDRDs7QUFSMEI7a0JBQVJyQixPIiwiZmlsZSI6IkVsZW1lbnQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZGVidWcgZnJvbSAnbGliL2RlYnVnJztcbmltcG9ydCBzZXJpYWwgZnJvbSAnbGliL3NlcmlhbCc7XG5cbmNvbnN0IGxvZyA9IGRlYnVnKCdwcm9jZXNzOnBsdWdpbnMnKTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHsgZGVmaW5pdGlvbiwgcGx1Z2lucywgdG9rZW5JbnN0YW5jZSB9KSB7XG4gICAgdGhpcy5kZWZpbml0aW9uID0gZGVmaW5pdGlvbjtcbiAgICB0aGlzLnBsdWdpbnMgPSBwbHVnaW5zO1xuICAgIHRoaXMudG9rZW5JbnN0YW5jZSA9IHRva2VuSW5zdGFuY2U7XG4gICAgdGhpcy5lbmdpbmUgPSB0b2tlbkluc3RhbmNlLmVuZ2luZTtcbiAgICB0aGlzLmV2YWxDb25kaXRpb24gPSB0aGlzLmVuZ2luZS5ldmFsQ29uZGl0aW9uO1xuICAgIHRoaXMucGVyc2lzdCA9IHRoaXMuZW5naW5lLnBlcnNpc3Q7XG4gIH1cblxuICBjYWxsUGx1Z2lucyA9IChmbiwgZXh0cmEpID0+IHtcbiAgICBsb2coYCR7dGhpcy50b2tlbkluc3RhbmNlLnRva2VuSWR9ID4gJHt0aGlzLmRlZmluaXRpb24uaWR9ID4gJHtmbn1gKTtcblxuICAgIGNvbnN0IHByb21pc2VzID0gW107XG4gICAgT2JqZWN0LmtleXModGhpcy5wbHVnaW5zKS5mb3JFYWNoKChwbHVnaW5OYW1lKSA9PiB7XG4gICAgICBpZiAodGhpcy5wbHVnaW5zW3BsdWdpbk5hbWVdW2ZuXSkge1xuICAgICAgICBjb25zdCBwbHVnaW4gPSB0aGlzLnBsdWdpbnNbcGx1Z2luTmFtZV1bZm5dO1xuICAgICAgICBwcm9taXNlcy5wdXNoKHBsdWdpbih0aGlzLmRlZmluaXRpb24sIHRoaXMudG9rZW5JbnN0YW5jZSwgZXh0cmEpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuICB9O1xuXG4gIG1ha2VSZWFkeSA9ICgpID0+IHRoaXMuY2FsbFBsdWdpbnMoJ29uUmVhZHknKTtcbiAgbWFrZUFjdGl2ZSA9ICgpID0+IHRoaXMuY2FsbFBsdWdpbnMoJ29uQWN0aXZlJyk7XG4gIG1ha2VDb21wbGV0ZSA9ICgpID0+IHRoaXMuY2FsbFBsdWdpbnMoJ29uQ29tcGxldGUnKTtcblxuICBwZXJzaXN0Q2hpbGRJZHNUb1BhcmVudCA9IGNoaWxkSWRzID0+XG4gICAgdGhpcy5wZXJzaXN0LnRva2VuSW5zdGFuY2UudXBkYXRlKFxuICAgICAgeyB0b2tlbklkOiB0aGlzLnRva2VuSW5zdGFuY2UudG9rZW5JZCB9LFxuICAgICAge1xuICAgICAgICAkc2V0OiB7XG4gICAgICAgICAgY3VycmVudEFjdGl2aXR5OiB0aGlzLmRlZmluaXRpb24uaWQsXG4gICAgICAgICAgY2hpbGRzOiBjaGlsZElkcyxcbiAgICAgICAgICBzdGF0dXM6IHRoaXMudG9rZW5JbnN0YW5jZS5zdGF0dXMsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICk7XG5cbiAgcHJvY2Vzc0NoaWxkcyA9IGFzeW5jIChjaGlsZFRva2VuSW5zdGFuY2VzKSA9PiB7XG4gICAgY29uc3QgY2hpbGRUb2tlbkluc3RhbmNlc0lkcyA9IGNoaWxkVG9rZW5JbnN0YW5jZXMubWFwKGNoaWxkID0+IGNoaWxkLnRva2VuSWQpO1xuICAgIGF3YWl0IHRoaXMucGVyc2lzdENoaWxkSWRzVG9QYXJlbnQoY2hpbGRUb2tlbkluc3RhbmNlc0lkcyk7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoY2hpbGRUb2tlbkluc3RhbmNlcy5tYXAoY2hpbGRUb2tlbkluc3RhbmNlID0+IGNoaWxkVG9rZW5JbnN0YW5jZS5wZXJzaXN0Q3JlYXRlKCkpKTtcbiAgICBhd2FpdCBzZXJpYWwoY2hpbGRUb2tlbkluc3RhbmNlcy5tYXAoY2hpbGRUb2tlbkluc3RhbmNlID0+IGNoaWxkVG9rZW5JbnN0YW5jZS5leGVjdXRlKSk7XG4gIH07XG5cbiAgaW5zdGFudGlhdGVDaGlsZFRva2VuSW5zdGFuY2VzID0gb3V0Z29pbmcgPT5cbiAgICBQcm9taXNlLmFsbChvdXRnb2luZy5tYXAoYXN5bmMgKHBhdGgpID0+IHtcbiAgICAgIGNvbnN0IHRva2VuID0gYXdhaXQgdGhpcy5lbmdpbmUuY3JlYXRlVG9rZW5JbnN0YW5jZSh7XG4gICAgICAgIHBheWxvYWQ6IHRoaXMudG9rZW5JbnN0YW5jZS5wYXlsb2FkLFxuICAgICAgICBwcm9jZXNzSWQ6IHRoaXMudG9rZW5JbnN0YW5jZS5wcm9jZXNzSWQsXG4gICAgICAgIHBhcmVudDogdGhpcy50b2tlbkluc3RhbmNlLnRva2VuSWQsXG4gICAgICAgIGlzU3ViUHJvY2VzczogdGhpcy50b2tlbkluc3RhbmNlLmlzU3ViUHJvY2VzcyxcbiAgICAgICAgY3VycmVudEFjdGl2aXR5OiBwYXRoLmlkLFxuICAgICAgICBzdGF0dXM6ICdydW5uaW5nJyxcbiAgICAgICAgZmxvd09iamVjdHM6IHRoaXMudG9rZW5JbnN0YW5jZS5mbG93T2JqZWN0cyxcbiAgICAgIH0pO1xuXG4gICAgICB0b2tlbi5uZXh0ID0gdG9rZW4uZmxvd09iamVjdHMuZmluZChlbCA9PiBlbC5pZCA9PT0gcGF0aC5pZCk7XG5cbiAgICAgIHJldHVybiB0b2tlbjtcbiAgICB9KSk7XG59XG4iXX0=