bpm-engine
Version:
Business Process Management Engine for JavaScript
115 lines (90 loc) • 8.72 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _getIterator2 = require('babel-runtime/core-js/get-iterator');
var _getIterator3 = _interopRequireDefault(_getIterator2);
var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
var _Gateway = require('./Gateway');
var _Gateway2 = _interopRequireDefault(_Gateway);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
class InclusiveGateway extends _Gateway2.default {
constructor(...args) {
var _temp, _this;
return _temp = _this = super(...args), this.makeReady = (0, _asyncToGenerator3.default)(function* () {
yield _this.callPlugins('onReady');
// if this token has a parent
// we pull ourselves out of its childs
if (_this.tokenInstance.parent) {
const parentToken = yield _this.persist.tokenInstance.update({
tokenId: _this.tokenInstance.parent
}, {
$pull: { childs: _this.tokenInstance.tokenId }
});
// if there are still childs left
// we set us to be paused, since only the last
// token should be continued
if (parentToken.childs.length > 0) {
_this.tokenInstance.status = 'paused';
}
}
}), this.makeComplete = (0, _asyncToGenerator3.default)(function* () {
const outgoing = _this.definition.outgoing;
yield _this.callPlugins('onComplete');
if (outgoing.length > 1) {
const next = yield _this.getNext();
if (!next.length) {
if (_this.definition.default) {
next.push(_this.definition.default);
} else {
return;
}
}
const childTokenInstances = yield _this.instantiateChildTokenInstances(next);
_this.tokenInstance.status = 'paused';
yield _this.processChilds(childTokenInstances);
}
}), _temp;
}
getNext() {
var _this2 = this;
return (0, _asyncToGenerator3.default)(function* () {
const outgoing = _this2.definition.outgoing;
const payload = _this2.tokenInstance.payload;
const next = [];
if (outgoing.length > 1) {
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = (0, _getIterator3.default)(outgoing), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
const path = _step.value;
if (path.conditionExpression) {
const conditionExpression = path.conditionExpression;
(yield _this2.evalCondition(conditionExpression.body, payload)) && next.push(path);
}
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
} else {
next.push(outgoing[0]);
}
return next;
})();
}
}
exports.default = InclusiveGateway;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvRWxlbWVudHMvSW5jbHVzaXZlR2F0ZXdheS5qcyJdLCJuYW1lcyI6WyJJbmNsdXNpdmVHYXRld2F5IiwiR2F0ZXdheSIsIm1ha2VSZWFkeSIsImNhbGxQbHVnaW5zIiwidG9rZW5JbnN0YW5jZSIsInBhcmVudCIsInBhcmVudFRva2VuIiwicGVyc2lzdCIsInVwZGF0ZSIsInRva2VuSWQiLCIkcHVsbCIsImNoaWxkcyIsImxlbmd0aCIsInN0YXR1cyIsIm1ha2VDb21wbGV0ZSIsIm91dGdvaW5nIiwiZGVmaW5pdGlvbiIsIm5leHQiLCJnZXROZXh0IiwiZGVmYXVsdCIsInB1c2giLCJjaGlsZFRva2VuSW5zdGFuY2VzIiwiaW5zdGFudGlhdGVDaGlsZFRva2VuSW5zdGFuY2VzIiwicHJvY2Vzc0NoaWxkcyIsInBheWxvYWQiLCJwYXRoIiwiY29uZGl0aW9uRXhwcmVzc2lvbiIsImV2YWxDb25kaXRpb24iLCJib2R5Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUFBOzs7Ozs7QUFFZSxNQUFNQSxnQkFBTixTQUErQkMsaUJBQS9CLENBQXVDO0FBQUE7QUFBQTs7QUFBQSxnREFDcERDLFNBRG9ELG1DQUN4QyxhQUFZO0FBQ3RCLFlBQU0sTUFBS0MsV0FBTCxDQUFpQixTQUFqQixDQUFOOztBQUVBO0FBQ0E7QUFDQSxVQUFJLE1BQUtDLGFBQUwsQ0FBbUJDLE1BQXZCLEVBQStCO0FBQzdCLGNBQU1DLGNBQWMsTUFBTSxNQUFLQyxPQUFMLENBQWFILGFBQWIsQ0FBMkJJLE1BQTNCLENBQ3hCO0FBQ0VDLG1CQUFTLE1BQUtMLGFBQUwsQ0FBbUJDO0FBRDlCLFNBRHdCLEVBSXhCO0FBQ0VLLGlCQUFPLEVBQUVDLFFBQVEsTUFBS1AsYUFBTCxDQUFtQkssT0FBN0I7QUFEVCxTQUp3QixDQUExQjs7QUFTQTtBQUNBO0FBQ0E7QUFDQSxZQUFJSCxZQUFZSyxNQUFaLENBQW1CQyxNQUFuQixHQUE0QixDQUFoQyxFQUFtQztBQUNqQyxnQkFBS1IsYUFBTCxDQUFtQlMsTUFBbkIsR0FBNEIsUUFBNUI7QUFDRDtBQUNGO0FBQ0YsS0F2Qm1ELFFBNENwREMsWUE1Q29ELG1DQTRDckMsYUFBWTtBQUFBLFlBQ2pCQyxRQURpQixHQUNKLE1BQUtDLFVBREQsQ0FDakJELFFBRGlCOzs7QUFHekIsWUFBTSxNQUFLWixXQUFMLENBQWlCLFlBQWpCLENBQU47O0FBRUEsVUFBSVksU0FBU0gsTUFBVCxHQUFrQixDQUF0QixFQUF5QjtBQUN2QixjQUFNSyxPQUFPLE1BQU0sTUFBS0MsT0FBTCxFQUFuQjs7QUFFQSxZQUFJLENBQUNELEtBQUtMLE1BQVYsRUFBa0I7QUFDaEIsY0FBSSxNQUFLSSxVQUFMLENBQWdCRyxPQUFwQixFQUE2QjtBQUMzQkYsaUJBQUtHLElBQUwsQ0FBVSxNQUFLSixVQUFMLENBQWdCRyxPQUExQjtBQUNELFdBRkQsTUFHSztBQUNIO0FBQ0Q7QUFDRjs7QUFFRCxjQUFNRSxzQkFBc0IsTUFBTSxNQUFLQyw4QkFBTCxDQUFvQ0wsSUFBcEMsQ0FBbEM7QUFDQSxjQUFLYixhQUFMLENBQW1CUyxNQUFuQixHQUE0QixRQUE1QjtBQUNBLGNBQU0sTUFBS1UsYUFBTCxDQUFtQkYsbUJBQW5CLENBQU47QUFDRDtBQUNGLEtBakVtRDtBQUFBOztBQXlCOUNILFNBQU4sR0FBZ0I7QUFBQTs7QUFBQTtBQUFBLFlBQ05ILFFBRE0sR0FDTyxPQUFLQyxVQURaLENBQ05ELFFBRE07QUFBQSxZQUVOUyxPQUZNLEdBRU0sT0FBS3BCLGFBRlgsQ0FFTm9CLE9BRk07OztBQUlkLFlBQU1QLE9BQU8sRUFBYjtBQUNBLFVBQUlGLFNBQVNILE1BQVQsR0FBa0IsQ0FBdEIsRUFBeUI7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFDdkIsMERBQW1CRyxRQUFuQiw0R0FBNkI7QUFBQSxrQkFBbEJVLElBQWtCOztBQUMzQixnQkFBSUEsS0FBS0MsbUJBQVQsRUFBOEI7QUFBQSxvQkFDcEJBLG1CQURvQixHQUNJRCxJQURKLENBQ3BCQyxtQkFEb0I7O0FBRTVCLGVBQUMsTUFBTSxPQUFLQyxhQUFMLENBQW1CRCxvQkFBb0JFLElBQXZDLEVBQTZDSixPQUE3QyxDQUFQLEtBQWlFUCxLQUFLRyxJQUFMLENBQVVLLElBQVYsQ0FBakU7QUFDRDtBQUNGO0FBTnNCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFPeEIsT0FQRCxNQVFLO0FBQ0hSLGFBQUtHLElBQUwsQ0FBVUwsU0FBUyxDQUFULENBQVY7QUFDRDtBQUNELGFBQU9FLElBQVA7QUFoQmM7QUFpQmY7O0FBMUNtRDtrQkFBakNqQixnQiIsImZpbGUiOiJJbmNsdXNpdmVHYXRld2F5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEdhdGV3YXkgZnJvbSAnbGliL0VsZW1lbnRzL0dhdGV3YXknO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbmNsdXNpdmVHYXRld2F5IGV4dGVuZHMgR2F0ZXdheSB7XG4gIG1ha2VSZWFkeSA9IGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCB0aGlzLmNhbGxQbHVnaW5zKCdvblJlYWR5Jyk7XG5cbiAgICAvLyBpZiB0aGlzIHRva2VuIGhhcyBhIHBhcmVudFxuICAgIC8vIHdlIHB1bGwgb3Vyc2VsdmVzIG91dCBvZiBpdHMgY2hpbGRzXG4gICAgaWYgKHRoaXMudG9rZW5JbnN0YW5jZS5wYXJlbnQpIHtcbiAgICAgIGNvbnN0IHBhcmVudFRva2VuID0gYXdhaXQgdGhpcy5wZXJzaXN0LnRva2VuSW5zdGFuY2UudXBkYXRlKFxuICAgICAgICB7XG4gICAgICAgICAgdG9rZW5JZDogdGhpcy50b2tlbkluc3RhbmNlLnBhcmVudCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICRwdWxsOiB7IGNoaWxkczogdGhpcy50b2tlbkluc3RhbmNlLnRva2VuSWQgfSxcbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIC8vIGlmIHRoZXJlIGFyZSBzdGlsbCBjaGlsZHMgbGVmdFxuICAgICAgLy8gd2Ugc2V0IHVzIHRvIGJlIHBhdXNlZCwgc2luY2Ugb25seSB0aGUgbGFzdFxuICAgICAgLy8gdG9rZW4gc2hvdWxkIGJlIGNvbnRpbnVlZFxuICAgICAgaWYgKHBhcmVudFRva2VuLmNoaWxkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMudG9rZW5JbnN0YW5jZS5zdGF0dXMgPSAncGF1c2VkJztcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgYXN5bmMgZ2V0TmV4dCgpIHtcbiAgICBjb25zdCB7IG91dGdvaW5nIH0gPSB0aGlzLmRlZmluaXRpb247XG4gICAgY29uc3QgeyBwYXlsb2FkIH0gPSB0aGlzLnRva2VuSW5zdGFuY2U7XG5cbiAgICBjb25zdCBuZXh0ID0gW107XG4gICAgaWYgKG91dGdvaW5nLmxlbmd0aCA+IDEpIHtcbiAgICAgIGZvciAoY29uc3QgcGF0aCBvZiBvdXRnb2luZykge1xuICAgICAgICBpZiAocGF0aC5jb25kaXRpb25FeHByZXNzaW9uKSB7XG4gICAgICAgICAgY29uc3QgeyBjb25kaXRpb25FeHByZXNzaW9uIH0gPSBwYXRoO1xuICAgICAgICAgIChhd2FpdCB0aGlzLmV2YWxDb25kaXRpb24oY29uZGl0aW9uRXhwcmVzc2lvbi5ib2R5LCBwYXlsb2FkKSkgJiYgbmV4dC5wdXNoKHBhdGgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgbmV4dC5wdXNoKG91dGdvaW5nWzBdKTtcbiAgICB9XG4gICAgcmV0dXJuIG5leHQ7XG4gIH1cblxuICBtYWtlQ29tcGxldGUgPSBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgeyBvdXRnb2luZyB9ID0gdGhpcy5kZWZpbml0aW9uO1xuXG4gICAgYXdhaXQgdGhpcy5jYWxsUGx1Z2lucygnb25Db21wbGV0ZScpO1xuXG4gICAgaWYgKG91dGdvaW5nLmxlbmd0aCA+IDEpIHtcbiAgICAgIGNvbnN0IG5leHQgPSBhd2FpdCB0aGlzLmdldE5leHQoKTtcblxuICAgICAgaWYgKCFuZXh0Lmxlbmd0aCkge1xuICAgICAgICBpZiAodGhpcy5kZWZpbml0aW9uLmRlZmF1bHQpIHtcbiAgICAgICAgICBuZXh0LnB1c2godGhpcy5kZWZpbml0aW9uLmRlZmF1bHQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBjaGlsZFRva2VuSW5zdGFuY2VzID0gYXdhaXQgdGhpcy5pbnN0YW50aWF0ZUNoaWxkVG9rZW5JbnN0YW5jZXMobmV4dCk7XG4gICAgICB0aGlzLnRva2VuSW5zdGFuY2Uuc3RhdHVzID0gJ3BhdXNlZCc7XG4gICAgICBhd2FpdCB0aGlzLnByb2Nlc3NDaGlsZHMoY2hpbGRUb2tlbkluc3RhbmNlcyk7XG4gICAgfVxuICB9O1xufVxuIl19