UNPKG

bpm-engine

Version:

Business Process Management Engine for JavaScript

91 lines (72 loc) 8.49 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); 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 ParallelGateway extends _Gateway2.default { constructor(...args) { var _temp, _this; return _temp = _this = super(...args), this.makeReady = (0, _asyncToGenerator3.default)(function* () { yield _this.callPlugins('onReady'); const incoming = _this.definition.incoming; // converging if (incoming.length > 1) { // did any other waiting token arrive here yet? const anyOtherToken = yield _this.persist.tokenInstance.find({ processId: _this.tokenInstance.processId, status: 'paused', currentActivity: _this.definition.id }); // no other active tokens have arrived here yet, // so use this token as the first which arrived if (!anyOtherToken) { const pending = incoming.map(function (el) { return el.id; }); const index = pending.indexOf(_this.tokenInstance.lastActivity); if (index !== -1) { pending.splice(index, 1); } yield _this.persist.tokenInstance.update({ tokenId: _this.tokenInstance.tokenId }, { $set: { currentActivity: _this.definition.id, status: 'paused', pending } }); _this.tokenInstance.status = 'paused'; } else { // else if (anyOtherToken.pending.length === 0) { // this.tokenInstance.status = 'paused'; // } const updatedOtherToken = yield _this.persist.tokenInstance.update({ tokenId: anyOtherToken.tokenId }, { $pull: { pending: _this.tokenInstance.lastActivity } }); if (updatedOtherToken.pending.length > 0) { _this.tokenInstance.status = 'paused'; } } } }), this.makeComplete = (0, _asyncToGenerator3.default)(function* () { yield _this.callPlugins('onComplete'); const outgoing = _this.definition.outgoing; if (outgoing.length > 1) { const childTokenInstances = yield _this.instantiateChildTokenInstances(outgoing); _this.tokenInstance.status = 'paused'; yield _this.processChilds(childTokenInstances); } }), _temp; } } exports.default = ParallelGateway; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvRWxlbWVudHMvUGFyYWxsZWxHYXRld2F5LmpzIl0sIm5hbWVzIjpbIlBhcmFsbGVsR2F0ZXdheSIsIkdhdGV3YXkiLCJtYWtlUmVhZHkiLCJjYWxsUGx1Z2lucyIsImluY29taW5nIiwiZGVmaW5pdGlvbiIsImxlbmd0aCIsImFueU90aGVyVG9rZW4iLCJwZXJzaXN0IiwidG9rZW5JbnN0YW5jZSIsImZpbmQiLCJwcm9jZXNzSWQiLCJzdGF0dXMiLCJjdXJyZW50QWN0aXZpdHkiLCJpZCIsInBlbmRpbmciLCJtYXAiLCJlbCIsImluZGV4IiwiaW5kZXhPZiIsImxhc3RBY3Rpdml0eSIsInNwbGljZSIsInVwZGF0ZSIsInRva2VuSWQiLCIkc2V0IiwidXBkYXRlZE90aGVyVG9rZW4iLCIkcHVsbCIsIm1ha2VDb21wbGV0ZSIsIm91dGdvaW5nIiwiY2hpbGRUb2tlbkluc3RhbmNlcyIsImluc3RhbnRpYXRlQ2hpbGRUb2tlbkluc3RhbmNlcyIsInByb2Nlc3NDaGlsZHMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQTs7Ozs7O0FBRWUsTUFBTUEsZUFBTixTQUE4QkMsaUJBQTlCLENBQXNDO0FBQUE7QUFBQTs7QUFBQSxnREFDbkRDLFNBRG1ELG1DQUN2QyxhQUFZO0FBQ3RCLFlBQU0sTUFBS0MsV0FBTCxDQUFpQixTQUFqQixDQUFOOztBQURzQixZQUdkQyxRQUhjLEdBR0QsTUFBS0MsVUFISixDQUdkRCxRQUhjOztBQUt0Qjs7QUFDQSxVQUFJQSxTQUFTRSxNQUFULEdBQWtCLENBQXRCLEVBQXlCO0FBQ3ZCO0FBQ0EsY0FBTUMsZ0JBQWdCLE1BQU0sTUFBS0MsT0FBTCxDQUFhQyxhQUFiLENBQTJCQyxJQUEzQixDQUFnQztBQUMxREMscUJBQVcsTUFBS0YsYUFBTCxDQUFtQkUsU0FENEI7QUFFMURDLGtCQUFRLFFBRmtEO0FBRzFEQywyQkFBaUIsTUFBS1IsVUFBTCxDQUFnQlM7QUFIeUIsU0FBaEMsQ0FBNUI7O0FBTUE7QUFDQTtBQUNBLFlBQUksQ0FBQ1AsYUFBTCxFQUFvQjtBQUNsQixnQkFBTVEsVUFBVVgsU0FBU1ksR0FBVCxDQUFhO0FBQUEsbUJBQU1DLEdBQUdILEVBQVQ7QUFBQSxXQUFiLENBQWhCO0FBQ0EsZ0JBQU1JLFFBQVFILFFBQVFJLE9BQVIsQ0FBZ0IsTUFBS1YsYUFBTCxDQUFtQlcsWUFBbkMsQ0FBZDs7QUFFQSxjQUFJRixVQUFVLENBQUMsQ0FBZixFQUFrQjtBQUNoQkgsb0JBQVFNLE1BQVIsQ0FBZUgsS0FBZixFQUFzQixDQUF0QjtBQUNEOztBQUVELGdCQUFNLE1BQUtWLE9BQUwsQ0FBYUMsYUFBYixDQUEyQmEsTUFBM0IsQ0FDSjtBQUNFQyxxQkFBUyxNQUFLZCxhQUFMLENBQW1CYztBQUQ5QixXQURJLEVBSUo7QUFDRUMsa0JBQU07QUFDSlgsK0JBQWlCLE1BQUtSLFVBQUwsQ0FBZ0JTLEVBRDdCO0FBRUpGLHNCQUFRLFFBRko7QUFHSkc7QUFISTtBQURSLFdBSkksQ0FBTjtBQVlBLGdCQUFLTixhQUFMLENBQW1CRyxNQUFuQixHQUE0QixRQUE1QjtBQUNELFNBckJELE1Bc0JLO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsZ0JBQU1hLG9CQUFvQixNQUFNLE1BQUtqQixPQUFMLENBQWFDLGFBQWIsQ0FBMkJhLE1BQTNCLENBQzlCO0FBQ0VDLHFCQUFTaEIsY0FBY2dCO0FBRHpCLFdBRDhCLEVBSTlCO0FBQ0VHLG1CQUFPO0FBQ0xYLHVCQUFTLE1BQUtOLGFBQUwsQ0FBbUJXO0FBRHZCO0FBRFQsV0FKOEIsQ0FBaEM7O0FBV0EsY0FBSUssa0JBQWtCVixPQUFsQixDQUEwQlQsTUFBMUIsR0FBbUMsQ0FBdkMsRUFBMEM7QUFDeEMsa0JBQUtHLGFBQUwsQ0FBbUJHLE1BQW5CLEdBQTRCLFFBQTVCO0FBQ0Q7QUFDRjtBQUNGO0FBQ0YsS0EzRGtELFFBNkRuRGUsWUE3RG1ELG1DQTZEcEMsYUFBWTtBQUN6QixZQUFNLE1BQUt4QixXQUFMLENBQWlCLFlBQWpCLENBQU47O0FBRHlCLFlBR2pCeUIsUUFIaUIsR0FHSixNQUFLdkIsVUFIRCxDQUdqQnVCLFFBSGlCOzs7QUFLekIsVUFBSUEsU0FBU3RCLE1BQVQsR0FBa0IsQ0FBdEIsRUFBeUI7QUFDdkIsY0FBTXVCLHNCQUFzQixNQUFNLE1BQUtDLDhCQUFMLENBQW9DRixRQUFwQyxDQUFsQztBQUNBLGNBQUtuQixhQUFMLENBQW1CRyxNQUFuQixHQUE0QixRQUE1QjtBQUNBLGNBQU0sTUFBS21CLGFBQUwsQ0FBbUJGLG1CQUFuQixDQUFOO0FBQ0Q7QUFDRixLQXZFa0Q7QUFBQTs7QUFBQTtrQkFBaEM3QixlIiwiZmlsZSI6IlBhcmFsbGVsR2F0ZXdheS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBHYXRld2F5IGZyb20gJ2xpYi9FbGVtZW50cy9HYXRld2F5JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFyYWxsZWxHYXRld2F5IGV4dGVuZHMgR2F0ZXdheSB7XG4gIG1ha2VSZWFkeSA9IGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCB0aGlzLmNhbGxQbHVnaW5zKCdvblJlYWR5Jyk7XG5cbiAgICBjb25zdCB7IGluY29taW5nIH0gPSB0aGlzLmRlZmluaXRpb247XG5cbiAgICAvLyBjb252ZXJnaW5nXG4gICAgaWYgKGluY29taW5nLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIGRpZCBhbnkgb3RoZXIgd2FpdGluZyB0b2tlbiBhcnJpdmUgaGVyZSB5ZXQ/XG4gICAgICBjb25zdCBhbnlPdGhlclRva2VuID0gYXdhaXQgdGhpcy5wZXJzaXN0LnRva2VuSW5zdGFuY2UuZmluZCh7XG4gICAgICAgIHByb2Nlc3NJZDogdGhpcy50b2tlbkluc3RhbmNlLnByb2Nlc3NJZCxcbiAgICAgICAgc3RhdHVzOiAncGF1c2VkJyxcbiAgICAgICAgY3VycmVudEFjdGl2aXR5OiB0aGlzLmRlZmluaXRpb24uaWQsXG4gICAgICB9KTtcblxuICAgICAgLy8gbm8gb3RoZXIgYWN0aXZlIHRva2VucyBoYXZlIGFycml2ZWQgaGVyZSB5ZXQsXG4gICAgICAvLyBzbyB1c2UgdGhpcyB0b2tlbiBhcyB0aGUgZmlyc3Qgd2hpY2ggYXJyaXZlZFxuICAgICAgaWYgKCFhbnlPdGhlclRva2VuKSB7XG4gICAgICAgIGNvbnN0IHBlbmRpbmcgPSBpbmNvbWluZy5tYXAoZWwgPT4gZWwuaWQpO1xuICAgICAgICBjb25zdCBpbmRleCA9IHBlbmRpbmcuaW5kZXhPZih0aGlzLnRva2VuSW5zdGFuY2UubGFzdEFjdGl2aXR5KTtcblxuICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgcGVuZGluZy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgdGhpcy5wZXJzaXN0LnRva2VuSW5zdGFuY2UudXBkYXRlKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRva2VuSWQ6IHRoaXMudG9rZW5JbnN0YW5jZS50b2tlbklkLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgJHNldDoge1xuICAgICAgICAgICAgICBjdXJyZW50QWN0aXZpdHk6IHRoaXMuZGVmaW5pdGlvbi5pZCxcbiAgICAgICAgICAgICAgc3RhdHVzOiAncGF1c2VkJyxcbiAgICAgICAgICAgICAgcGVuZGluZyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy50b2tlbkluc3RhbmNlLnN0YXR1cyA9ICdwYXVzZWQnO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIC8vIGVsc2UgaWYgKGFueU90aGVyVG9rZW4ucGVuZGluZy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgLy8gICB0aGlzLnRva2VuSW5zdGFuY2Uuc3RhdHVzID0gJ3BhdXNlZCc7XG4gICAgICAgIC8vIH1cbiAgICAgICAgY29uc3QgdXBkYXRlZE90aGVyVG9rZW4gPSBhd2FpdCB0aGlzLnBlcnNpc3QudG9rZW5JbnN0YW5jZS51cGRhdGUoXG4gICAgICAgICAge1xuICAgICAgICAgICAgdG9rZW5JZDogYW55T3RoZXJUb2tlbi50b2tlbklkLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgJHB1bGw6IHtcbiAgICAgICAgICAgICAgcGVuZGluZzogdGhpcy50b2tlbkluc3RhbmNlLmxhc3RBY3Rpdml0eSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAodXBkYXRlZE90aGVyVG9rZW4ucGVuZGluZy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdGhpcy50b2tlbkluc3RhbmNlLnN0YXR1cyA9ICdwYXVzZWQnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIG1ha2VDb21wbGV0ZSA9IGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCB0aGlzLmNhbGxQbHVnaW5zKCdvbkNvbXBsZXRlJyk7XG5cbiAgICBjb25zdCB7IG91dGdvaW5nIH0gPSB0aGlzLmRlZmluaXRpb247XG5cbiAgICBpZiAob3V0Z29pbmcubGVuZ3RoID4gMSkge1xuICAgICAgY29uc3QgY2hpbGRUb2tlbkluc3RhbmNlcyA9IGF3YWl0IHRoaXMuaW5zdGFudGlhdGVDaGlsZFRva2VuSW5zdGFuY2VzKG91dGdvaW5nKTtcbiAgICAgIHRoaXMudG9rZW5JbnN0YW5jZS5zdGF0dXMgPSAncGF1c2VkJztcbiAgICAgIGF3YWl0IHRoaXMucHJvY2Vzc0NoaWxkcyhjaGlsZFRva2VuSW5zdGFuY2VzKTtcbiAgICB9XG4gIH07XG59XG4iXX0=