Skip to content

Commit

Permalink
refactor Extensions loading
Browse files Browse the repository at this point in the history
- bpmn io added to extensions list
  • Loading branch information
paed01 committed Oct 5, 2022
1 parent 2f91bcd commit ca02792
Show file tree
Hide file tree
Showing 15 changed files with 95 additions and 62 deletions.
2 changes: 1 addition & 1 deletion .nvmrc
Original file line number Diff line number Diff line change
@@ -1 +1 @@
12
14
5 changes: 3 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
Changelog
=========

# Unreleased
# 8.2.0

- fix resume at formatting
- fix resume when activity has formatting status
- fix InputOutputSpecification output now passed as dataOutput instead of dataInput, as it should
- refactor Extensions loading, bpmn io is now added to extensions list

# 8.1.0

Expand Down
8 changes: 7 additions & 1 deletion dist/src/Context.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ Object.defineProperty(exports, "__esModule", {
});
exports.default = Context;

var _BpmnIO = _interopRequireDefault(require("./io/BpmnIO"));

var _Environment = _interopRequireDefault(require("./Environment"));

var _ExtensionsMapper = _interopRequireDefault(require("./ExtensionsMapper"));
Expand Down Expand Up @@ -204,5 +206,9 @@ proto.getStartActivities = function getStartActivities(filterOptions, scopeId) {
};

proto.loadExtensions = function loadExtensions(activity) {
return this.extensionsMapper.get(activity);
const io = new _BpmnIO.default(activity, this);
const extensions = this.extensionsMapper.get(activity);
if (io.hasIo) extensions.extensions.push(io);
if (!extensions.extensions.length) return;
return extensions;
};
42 changes: 16 additions & 26 deletions dist/src/activity/Activity.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,6 @@ exports.default = void 0;

var _ActivityExecution = _interopRequireDefault(require("./ActivityExecution"));

var _BpmnIO = _interopRequireDefault(require("../io/BpmnIO"));

var _shared = require("../shared");

var _Api = require("../Api");
Expand All @@ -24,7 +22,6 @@ var _Errors = require("../error/Errors");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

const kActivityDef = Symbol.for('activityDefinition');
const kBpmnIo = Symbol.for('bpmnIo');
const kConsuming = Symbol.for('consuming');
const kCounters = Symbol.for('counters');
const kEventDefinitions = Symbol.for('eventDefinitions');
Expand Down Expand Up @@ -145,6 +142,7 @@ function Activity(Behaviour, activityDef, context) {
}

this[kEventDefinitions] = eventDefinitions && eventDefinitions.map(ed => new ed.Behaviour(this, ed, this.context));
this[kExtensions] = context.loadExtensions(this);
}

const proto = Activity.prototype;
Expand Down Expand Up @@ -173,23 +171,20 @@ Object.defineProperty(proto, 'executionId', {
}

});
Object.defineProperty(proto, 'bpmnIo', {
Object.defineProperty(proto, 'extensions', {
enumerable: true,

get() {
if (kBpmnIo in this) return this[kBpmnIo];
const bpmnIo = this[kBpmnIo] = new _BpmnIO.default(this, this.context);
return bpmnIo;
return this[kExtensions];
}

});
Object.defineProperty(proto, 'extensions', {
Object.defineProperty(proto, 'bpmnIo', {
enumerable: true,

get() {
if (kExtensions in this) return this[kExtensions];
const extensions = this[kExtensions] = this.context.loadExtensions(this);
return extensions;
const extensions = this[kExtensions];
return extensions && extensions.extensions.find(e => e.type === 'bpmnio');
}

});
Expand Down Expand Up @@ -485,10 +480,11 @@ proto._discardRun = function discardRun() {

this._deactivateRunConsumers();

if (this.extensions) this.extensions.deactivate();
const message = this[kStateMessage];
if (this.extensions) this.extensions.deactivate((0, _messageHelper.cloneMessage)(message));
const broker = this.broker;
broker.getQueue('run-q').purge();
broker.publish('run', 'run.discard', (0, _messageHelper.cloneContent)(this[kStateMessage].content));
broker.publish('run', 'run.discard', (0, _messageHelper.cloneContent)(message.content));

this._consumeRunQ();
};
Expand Down Expand Up @@ -722,8 +718,7 @@ proto._continueRunMessage = function continueRunMessage(routingKey, message) {
this[kExec].execution = null;
}

if (this.extensions) this.extensions.activate((0, _messageHelper.cloneMessage)(message), this);
if (this.bpmnIo) this.bpmnIo.activate(message);
if (this.extensions) this.extensions.activate((0, _messageHelper.cloneMessage)(message));
if (!isRedelivered) this._publishEvent('enter', content, {
correlationId
});
Expand All @@ -735,8 +730,7 @@ proto._continueRunMessage = function continueRunMessage(routingKey, message) {
this.logger.debug(`<${id}> discard`, isRedelivered ? 'redelivered' : '');
this.status = 'discard';
this[kExec].execution = null;
if (this.extensions) this.extensions.activate((0, _messageHelper.cloneMessage)(message), this);
if (this.bpmnIo) this.bpmnIo.activate(message);
if (this.extensions) this.extensions.activate((0, _messageHelper.cloneMessage)(message));

if (!isRedelivered) {
this.broker.publish('run', 'run.discarded', content, {
Expand Down Expand Up @@ -861,8 +855,7 @@ proto._continueRunMessage = function continueRunMessage(routingKey, message) {
case 'run.leave':
{
this.status = undefined;
if (this.bpmnIo) this.bpmnIo.deactivate(message);
if (this.extensions) this.extensions.deactivate(message);
if (this.extensions) this.extensions.deactivate((0, _messageHelper.cloneMessage)(message));

if (!isRedelivered) {
this.broker.publish('run', 'run.next', content, {
Expand Down Expand Up @@ -1061,7 +1054,6 @@ proto._onResumeMessage = function onResumeMessage(message) {
}

if (this.extensions) this.extensions.activate((0, _messageHelper.cloneMessage)(stateMessage));
if (this.bpmnIo) this.bpmnIo.activate((0, _messageHelper.cloneMessage)(stateMessage));
this.logger.debug(`<${this.id}> resume from ${message.content.status}`);
return this.broker.publish('run', fields.routingKey, (0, _messageHelper.cloneContent)(stateMessage.content), stateMessage.properties);
};
Expand All @@ -1088,7 +1080,7 @@ proto._onStop = function onStop(message) {
broker.cancel('_format-consumer');

if (running) {
if (this.extensions) this.extensions.deactivate(message || this._createMessage());
if (this.extensions) this.extensions.deactivate(message ? (0, _messageHelper.cloneMessage)(message) : this._createMessage());

this._publishEvent('stop', this._createMessage());
}
Expand Down Expand Up @@ -1155,11 +1147,9 @@ proto._getOutboundSequenceFlowById = function getOutboundSequenceFlowById(flowId
};

proto._resumeExtensions = function resumeExtensions(message, callback) {
const extensions = this.extensions,
bpmnIo = this.bpmnIo;
if (!extensions && !bpmnIo) return callback();
if (extensions) extensions.activate((0, _messageHelper.cloneMessage)(message), this);
if (bpmnIo) bpmnIo.activate((0, _messageHelper.cloneMessage)(message), this);
const extensions = this.extensions;
if (!extensions) return callback();
extensions.activate((0, _messageHelper.cloneMessage)(message));
this.status = 'formatting';
return this.formatter.format(message, (err, formattedContent, formatted) => {
if (err) return callback(err);
Expand Down
8 changes: 8 additions & 0 deletions dist/src/io/BpmnIO.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ exports.default = BpmnIO;
function BpmnIO(activity, context) {
this.activity = activity;
this.context = context;
this.type = 'bpmnio';
const {
ioSpecification: ioSpecificationDef,
properties: propertiesDef
Expand All @@ -16,6 +17,13 @@ function BpmnIO(activity, context) {
this.properties = propertiesDef && new propertiesDef.Behaviour(activity, propertiesDef, context);
}

Object.defineProperty(BpmnIO.prototype, 'hasIo', {
get() {
return this.specification || this.properties;
}

});

BpmnIO.prototype.activate = function activate(message) {
const properties = this.properties,
specification = this.specification;
Expand Down
8 changes: 4 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "bpmn-elements",
"version": "8.1.0",
"version": "8.2.0",
"description": "Executable workflow elements based on BPMN 2.0",
"main": "dist/index.js",
"module": "index.js",
Expand Down Expand Up @@ -46,9 +46,9 @@
],
"devDependencies": {
"@aircall/expression-parser": "^1.0.4",
"@babel/cli": "^7.18.6",
"@babel/core": "^7.18.6",
"@babel/preset-env": "^7.18.6",
"@babel/cli": "^7.19.3",
"@babel/core": "^7.19.3",
"@babel/preset-env": "^7.19.3",
"@babel/register": "^7.18.6",
"bpmn-moddle": "^7.1.2",
"camunda-bpmn-moddle": "^6.1.2",
Expand Down
7 changes: 6 additions & 1 deletion src/Context.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import BpmnIO from './io/BpmnIO';
import Environment from './Environment';
import ExtensionsMapper from './ExtensionsMapper';
import {getUniqueId} from './shared';
Expand Down Expand Up @@ -196,6 +197,10 @@ proto.getStartActivities = function getStartActivities(filterOptions, scopeId) {
};

proto.loadExtensions = function loadExtensions(activity) {
return this.extensionsMapper.get(activity);
const io = new BpmnIO(activity, this);
const extensions = this.extensionsMapper.get(activity);
if (io.hasIo) extensions.extensions.push(io);
if (!extensions.extensions.length) return;
return extensions;
};

41 changes: 17 additions & 24 deletions src/activity/Activity.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import ActivityExecution from './ActivityExecution';
import BpmnIO from '../io/BpmnIO';
import {brokerSafeId, getUniqueId} from '../shared';
import {ActivityApi} from '../Api';
import {ActivityBroker} from '../EventBroker';
Expand All @@ -8,7 +7,6 @@ import {cloneContent, cloneParent, cloneMessage} from '../messageHelper';
import {makeErrorFromMessage, ActivityError} from '../error/Errors';

const kActivityDef = Symbol.for('activityDefinition');
const kBpmnIo = Symbol.for('bpmnIo');
const kConsuming = Symbol.for('consuming');
const kCounters = Symbol.for('counters');
const kEventDefinitions = Symbol.for('eventDefinitions');
Expand Down Expand Up @@ -105,6 +103,7 @@ function Activity(Behaviour, activityDef, context) {
}

this[kEventDefinitions] = eventDefinitions && eventDefinitions.map((ed) => new ed.Behaviour(this, ed, this.context));
this[kExtensions] = context.loadExtensions(this);
}

const proto = Activity.prototype;
Expand All @@ -130,21 +129,18 @@ Object.defineProperty(proto, 'executionId', {
},
});

Object.defineProperty(proto, 'bpmnIo', {
Object.defineProperty(proto, 'extensions', {
enumerable: true,
get() {
if (kBpmnIo in this) return this[kBpmnIo];
const bpmnIo = this[kBpmnIo] = new BpmnIO(this, this.context);
return bpmnIo;
return this[kExtensions];
},
});

Object.defineProperty(proto, 'extensions', {
Object.defineProperty(proto, 'bpmnIo', {
enumerable: true,
get() {
if (kExtensions in this) return this[kExtensions];
const extensions = this[kExtensions] = this.context.loadExtensions(this);
return extensions;
const extensions = this[kExtensions];
return extensions && extensions.extensions.find(e => e.type === 'bpmnio');
},
});

Expand Down Expand Up @@ -408,10 +404,12 @@ proto._discardRun = function discardRun() {
}

this._deactivateRunConsumers();
if (this.extensions) this.extensions.deactivate();

const message = this[kStateMessage];
if (this.extensions) this.extensions.deactivate(cloneMessage(message));
const broker = this.broker;
broker.getQueue('run-q').purge();
broker.publish('run', 'run.discard', cloneContent(this[kStateMessage].content));
broker.publish('run', 'run.discard', cloneContent(message.content));
this._consumeRunQ();
};

Expand Down Expand Up @@ -603,8 +601,7 @@ proto._continueRunMessage = function continueRunMessage(routingKey, message) {
this[kExec].execution = null;
}

if (this.extensions) this.extensions.activate(cloneMessage(message), this);
if (this.bpmnIo) this.bpmnIo.activate(message);
if (this.extensions) this.extensions.activate(cloneMessage(message));

if (!isRedelivered) this._publishEvent('enter', content, {correlationId});
break;
Expand All @@ -615,8 +612,7 @@ proto._continueRunMessage = function continueRunMessage(routingKey, message) {
this.status = 'discard';
this[kExec].execution = null;

if (this.extensions) this.extensions.activate(cloneMessage(message), this);
if (this.bpmnIo) this.bpmnIo.activate(message);
if (this.extensions) this.extensions.activate(cloneMessage(message));

if (!isRedelivered) {
this.broker.publish('run', 'run.discarded', content, {correlationId});
Expand Down Expand Up @@ -707,8 +703,7 @@ proto._continueRunMessage = function continueRunMessage(routingKey, message) {
case 'run.leave': {
this.status = undefined;

if (this.bpmnIo) this.bpmnIo.deactivate(message);
if (this.extensions) this.extensions.deactivate(message);
if (this.extensions) this.extensions.deactivate(cloneMessage(message));

if (!isRedelivered) {
this.broker.publish('run', 'run.next', content, {persistent: false});
Expand Down Expand Up @@ -859,7 +854,6 @@ proto._onResumeMessage = function onResumeMessage(message) {
}

if (this.extensions) this.extensions.activate(cloneMessage(stateMessage));
if (this.bpmnIo) this.bpmnIo.activate(cloneMessage(stateMessage));

this.logger.debug(`<${this.id}> resume from ${message.content.status}`);

Expand Down Expand Up @@ -889,7 +883,7 @@ proto._onStop = function onStop(message) {
broker.cancel('_format-consumer');

if (running) {
if (this.extensions) this.extensions.deactivate(message || this._createMessage());
if (this.extensions) this.extensions.deactivate(message ? cloneMessage(message) : this._createMessage());
this._publishEvent('stop', this._createMessage());
}
};
Expand Down Expand Up @@ -939,11 +933,10 @@ proto._getOutboundSequenceFlowById = function getOutboundSequenceFlowById(flowId
};

proto._resumeExtensions = function resumeExtensions(message, callback) {
const extensions = this.extensions, bpmnIo = this.bpmnIo;
if (!extensions && !bpmnIo) return callback();
const extensions = this.extensions;
if (!extensions) return callback();

if (extensions) extensions.activate(cloneMessage(message), this);
if (bpmnIo) bpmnIo.activate(cloneMessage(message), this);
extensions.activate(cloneMessage(message));

this.status = 'formatting';
return this.formatter.format(message, (err, formattedContent, formatted) => {
Expand Down
7 changes: 7 additions & 0 deletions src/io/BpmnIO.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
export default function BpmnIO(activity, context) {
this.activity = activity;
this.context = context;
this.type = 'bpmnio';

const {
ioSpecification: ioSpecificationDef,
Expand All @@ -11,6 +12,12 @@ export default function BpmnIO(activity, context) {
this.properties = propertiesDef && new propertiesDef.Behaviour(activity, propertiesDef, context);
}

Object.defineProperty(BpmnIO.prototype, 'hasIo', {
get() {
return this.specification || this.properties;
},
});

BpmnIO.prototype.activate = function activate(message) {
const properties = this.properties, specification = this.specification;
if (properties) properties.activate(message);
Expand Down
1 change: 0 additions & 1 deletion test/activities-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -485,7 +485,6 @@ describe('activity', () => {

const state = activity.getState();


const assertMessage = AssertMessage(context, messages, true);
assertMessage('activity.enter');
assertMessage('activity.start');
Expand Down

0 comments on commit ca02792

Please sign in to comment.