bpmn-elements 5.1.3 → 7.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. package/CHANGELOG.md +322 -0
  2. package/README.md +9 -3
  3. package/dist/index.js +71 -39
  4. package/dist/src/Api.js +77 -76
  5. package/dist/src/Context.js +169 -164
  6. package/dist/src/Environment.js +90 -102
  7. package/dist/src/EventBroker.js +89 -88
  8. package/dist/src/ExtensionsMapper.js +2 -2
  9. package/dist/src/MessageFormatter.js +164 -95
  10. package/dist/src/Scripts.js +6 -2
  11. package/dist/src/Timers.js +4 -6
  12. package/dist/src/activity/Activity.js +1108 -901
  13. package/dist/src/activity/ActivityExecution.js +342 -297
  14. package/dist/src/activity/Dummy.js +3 -3
  15. package/dist/src/definition/Definition.js +498 -444
  16. package/dist/src/definition/DefinitionExecution.js +722 -409
  17. package/dist/src/error/Errors.js +17 -7
  18. package/dist/src/eventDefinitions/CancelEventDefinition.js +190 -150
  19. package/dist/src/eventDefinitions/CompensateEventDefinition.js +194 -161
  20. package/dist/src/eventDefinitions/ConditionalEventDefinition.js +197 -135
  21. package/dist/src/eventDefinitions/ErrorEventDefinition.js +207 -165
  22. package/dist/src/eventDefinitions/EscalationEventDefinition.js +175 -141
  23. package/dist/src/eventDefinitions/EventDefinitionExecution.js +157 -129
  24. package/dist/src/eventDefinitions/LinkEventDefinition.js +174 -149
  25. package/dist/src/eventDefinitions/MessageEventDefinition.js +213 -176
  26. package/dist/src/eventDefinitions/SignalEventDefinition.js +203 -161
  27. package/dist/src/eventDefinitions/TerminateEventDefinition.js +21 -23
  28. package/dist/src/eventDefinitions/TimerEventDefinition.js +243 -228
  29. package/dist/src/events/BoundaryEvent.js +180 -144
  30. package/dist/src/events/EndEvent.js +18 -23
  31. package/dist/src/events/IntermediateCatchEvent.js +44 -58
  32. package/dist/src/events/IntermediateThrowEvent.js +18 -23
  33. package/dist/src/events/StartEvent.js +109 -94
  34. package/dist/src/flows/Association.js +94 -101
  35. package/dist/src/flows/MessageFlow.js +86 -103
  36. package/dist/src/flows/SequenceFlow.js +172 -184
  37. package/dist/src/gateways/EventBasedGateway.js +88 -84
  38. package/dist/src/gateways/ExclusiveGateway.js +13 -16
  39. package/dist/src/gateways/InclusiveGateway.js +11 -14
  40. package/dist/src/gateways/ParallelGateway.js +11 -14
  41. package/dist/src/getPropertyValue.js +34 -34
  42. package/dist/src/io/BpmnIO.js +31 -0
  43. package/dist/src/io/EnvironmentDataObject.js +33 -29
  44. package/dist/src/io/EnvironmentDataStore.js +52 -0
  45. package/dist/src/io/EnvironmentDataStoreReference.js +52 -0
  46. package/dist/src/io/InputOutputSpecification.js +177 -168
  47. package/dist/src/io/Properties.js +252 -0
  48. package/dist/src/messageHelper.js +1 -1
  49. package/dist/src/process/Process.js +433 -359
  50. package/dist/src/process/ProcessExecution.js +744 -645
  51. package/dist/src/shared.js +3 -6
  52. package/dist/src/tasks/CallActivity.js +160 -0
  53. package/dist/src/tasks/LoopCharacteristics.js +309 -330
  54. package/dist/src/tasks/ReceiveTask.js +233 -182
  55. package/dist/src/tasks/ScriptTask.js +35 -41
  56. package/dist/src/tasks/ServiceImplementation.js +13 -20
  57. package/dist/src/tasks/ServiceTask.js +82 -75
  58. package/dist/src/tasks/SignalTask.js +97 -93
  59. package/dist/src/tasks/StandardLoopCharacteristics.js +1 -1
  60. package/dist/src/tasks/SubProcess.js +195 -175
  61. package/dist/src/tasks/Task.js +17 -19
  62. package/index.js +8 -0
  63. package/package.json +16 -15
  64. package/src/Api.js +65 -59
  65. package/src/Context.js +142 -132
  66. package/src/Environment.js +88 -100
  67. package/src/EventBroker.js +67 -68
  68. package/src/ExtensionsMapper.js +2 -2
  69. package/src/MessageFormatter.js +132 -74
  70. package/src/Timers.js +4 -4
  71. package/src/activity/Activity.js +916 -757
  72. package/src/activity/ActivityExecution.js +293 -247
  73. package/src/activity/Dummy.js +2 -2
  74. package/src/definition/Definition.js +436 -401
  75. package/src/definition/DefinitionExecution.js +603 -343
  76. package/src/error/Errors.js +11 -6
  77. package/src/eventDefinitions/CancelEventDefinition.js +164 -121
  78. package/src/eventDefinitions/CompensateEventDefinition.js +158 -124
  79. package/src/eventDefinitions/ConditionalEventDefinition.js +147 -104
  80. package/src/eventDefinitions/ErrorEventDefinition.js +190 -131
  81. package/src/eventDefinitions/EscalationEventDefinition.js +139 -101
  82. package/src/eventDefinitions/EventDefinitionExecution.js +127 -95
  83. package/src/eventDefinitions/LinkEventDefinition.js +160 -129
  84. package/src/eventDefinitions/MessageEventDefinition.js +178 -121
  85. package/src/eventDefinitions/SignalEventDefinition.js +162 -106
  86. package/src/eventDefinitions/TerminateEventDefinition.js +19 -19
  87. package/src/eventDefinitions/TimerEventDefinition.js +202 -167
  88. package/src/events/BoundaryEvent.js +156 -115
  89. package/src/events/EndEvent.js +15 -18
  90. package/src/events/IntermediateCatchEvent.js +40 -44
  91. package/src/events/IntermediateThrowEvent.js +15 -18
  92. package/src/events/StartEvent.js +84 -50
  93. package/src/flows/Association.js +98 -113
  94. package/src/flows/MessageFlow.js +81 -97
  95. package/src/flows/SequenceFlow.js +145 -163
  96. package/src/gateways/EventBasedGateway.js +75 -68
  97. package/src/gateways/ExclusiveGateway.js +8 -13
  98. package/src/gateways/InclusiveGateway.js +8 -13
  99. package/src/gateways/ParallelGateway.js +8 -13
  100. package/src/getPropertyValue.js +34 -33
  101. package/src/io/BpmnIO.js +20 -0
  102. package/src/io/EnvironmentDataObject.js +29 -18
  103. package/src/io/EnvironmentDataStore.js +33 -0
  104. package/src/io/EnvironmentDataStoreReference.js +33 -0
  105. package/src/io/InputOutputSpecification.js +154 -157
  106. package/src/io/Properties.js +199 -0
  107. package/src/process/Process.js +374 -333
  108. package/src/process/ProcessExecution.js +606 -554
  109. package/src/shared.js +1 -5
  110. package/src/tasks/CallActivity.js +130 -0
  111. package/src/tasks/LoopCharacteristics.js +290 -289
  112. package/src/tasks/ReceiveTask.js +174 -107
  113. package/src/tasks/ScriptTask.js +27 -30
  114. package/src/tasks/ServiceImplementation.js +13 -18
  115. package/src/tasks/ServiceTask.js +67 -60
  116. package/src/tasks/SignalTask.js +77 -52
  117. package/src/tasks/StandardLoopCharacteristics.js +1 -1
  118. package/src/tasks/SubProcess.js +184 -157
  119. package/src/tasks/Task.js +15 -19
@@ -13,122 +13,110 @@ var _Timers = require("./Timers");
13
13
 
14
14
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
15
 
16
+ const optionsSymbol = Symbol.for('options');
17
+ const variablesSymbol = Symbol.for('variables');
16
18
  const defaultOptions = ['extensions', 'output', 'services', 'scripts', 'settings', 'variables', 'Logger'];
17
19
 
18
20
  function Environment(options = {}) {
19
- const initialOptions = validateOptions(options);
20
- let variables = options.variables || {};
21
- const settings = { ...options.settings
21
+ this[optionsSymbol] = options;
22
+ this.options = validateOptions(options);
23
+ this.expressions = options.expressions || (0, _Expressions.default)();
24
+ this.extensions = options.extensions;
25
+ this.output = options.output || {};
26
+ this.scripts = options.scripts || (0, _Scripts.Scripts)();
27
+ this.services = options.services || {};
28
+ this.settings = { ...options.settings
22
29
  };
23
- const output = options.output || {};
24
- const services = options.services || {};
25
- const scripts = options.scripts || (0, _Scripts.Scripts)();
26
- const timers = options.timers || (0, _Timers.Timers)();
27
- const expressions = options.expressions || (0, _Expressions.default)();
28
- const Logger = options.Logger || DummyLogger;
29
- const extensions = options.extensions;
30
- const environmentApi = {
31
- options: initialOptions,
32
- expressions,
33
- extensions,
34
- output,
35
- scripts,
36
- services,
37
- settings,
38
- timers,
39
-
40
- get variables() {
41
- return variables;
42
- },
30
+ this.timers = options.timers || (0, _Timers.Timers)();
31
+ this.Logger = options.Logger || DummyLogger;
32
+ this[variablesSymbol] = options.variables || {};
33
+ }
43
34
 
44
- addService,
45
- assignVariables,
46
- clone,
47
- getScript,
48
- getServiceByName,
49
- getState,
50
- registerScript,
51
- resolveExpression,
52
- recover,
53
- Logger
54
- };
55
- return environmentApi;
56
-
57
- function getState() {
58
- return {
59
- settings: { ...settings
60
- },
61
- variables: { ...variables
62
- },
63
- output: { ...output
64
- }
65
- };
66
- }
35
+ const proto = Environment.prototype;
36
+ Object.defineProperty(proto, 'variables', {
37
+ enumerable: true,
67
38
 
68
- function recover(state) {
69
- if (!state) return environmentApi;
70
- const recoverOptions = validateOptions(state);
71
- Object.assign(options, recoverOptions);
72
- if (state.settings) Object.assign(settings, state.settings);
73
- if (state.variables) Object.assign(variables, state.variables);
74
- if (state.output) Object.assign(output, state.output);
75
- return environmentApi;
39
+ get() {
40
+ return this[variablesSymbol];
76
41
  }
77
42
 
78
- function clone(overrideOptions = {}) {
79
- const newOptions = {
80
- settings: { ...settings
81
- },
82
- variables: { ...variables
83
- },
84
- output: { ...output
85
- },
86
- Logger,
87
- extensions,
88
- scripts,
89
- timers,
90
- expressions,
91
- ...initialOptions,
92
- ...overrideOptions,
93
- services
94
- };
95
- if (overrideOptions.services) newOptions.services = { ...services,
96
- ...overrideOptions.services
97
- };
98
- return Environment(newOptions);
99
- }
43
+ });
100
44
 
101
- function assignVariables(newVars) {
102
- if (!newVars || typeof newVars !== 'object') return;
103
- variables = { ...variables,
104
- ...newVars
105
- };
106
- }
45
+ proto.getState = function getState() {
46
+ return {
47
+ settings: { ...this.settings
48
+ },
49
+ variables: { ...this.variables
50
+ },
51
+ output: { ...this.output
52
+ }
53
+ };
54
+ };
55
+
56
+ proto.recover = function recover(state) {
57
+ if (!state) return this;
58
+ const recoverOptions = validateOptions(state);
59
+ Object.assign(this[optionsSymbol], recoverOptions);
60
+ if (state.settings) Object.assign(this.settings, state.settings);
61
+ if (state.variables) Object.assign(this[variablesSymbol], state.variables);
62
+ if (state.output) Object.assign(this.output, state.output);
63
+ return this;
64
+ };
65
+
66
+ proto.clone = function clone(overrideOptions = {}) {
67
+ const services = this.services;
68
+ const newOptions = {
69
+ settings: { ...this.settings
70
+ },
71
+ variables: { ...this.variables
72
+ },
73
+ output: { ...this.output
74
+ },
75
+ Logger: this.Logger,
76
+ extensions: this.extensions,
77
+ scripts: this.scripts,
78
+ timers: this.timers,
79
+ expressions: this.expressions,
80
+ ...this.options,
81
+ ...overrideOptions,
82
+ services
83
+ };
84
+ if (overrideOptions.services) newOptions.services = { ...services,
85
+ ...overrideOptions.services
86
+ };
87
+ return new this.constructor(newOptions);
88
+ };
107
89
 
108
- function getScript(...args) {
109
- return scripts.getScript(...args);
110
- }
90
+ proto.assignVariables = function assignVariables(newVars) {
91
+ if (!newVars || typeof newVars !== 'object') return;
92
+ this[variablesSymbol] = { ...this.variables,
93
+ ...newVars
94
+ };
95
+ };
111
96
 
112
- function registerScript(...args) {
113
- return scripts.register(...args);
114
- }
97
+ proto.getScript = function getScript(...args) {
98
+ return this.scripts.getScript(...args);
99
+ };
115
100
 
116
- function getServiceByName(serviceName) {
117
- return services[serviceName];
118
- }
101
+ proto.registerScript = function registerScript(...args) {
102
+ return this.scripts.register(...args);
103
+ };
119
104
 
120
- function resolveExpression(expression, message = {}, expressionFnContext) {
121
- const from = {
122
- environment: environmentApi,
123
- ...message
124
- };
125
- return expressions.resolveExpression(expression, from, expressionFnContext);
126
- }
105
+ proto.getServiceByName = function getServiceByName(serviceName) {
106
+ return this.services[serviceName];
107
+ };
127
108
 
128
- function addService(name, fn) {
129
- services[name] = fn;
130
- }
131
- }
109
+ proto.resolveExpression = function resolveExpression(expression, message = {}, expressionFnContext) {
110
+ const from = {
111
+ environment: this,
112
+ ...message
113
+ };
114
+ return this.expressions.resolveExpression(expression, from, expressionFnContext);
115
+ };
116
+
117
+ proto.addService = function addService(name, fn) {
118
+ this.services[name] = fn;
119
+ };
132
120
 
133
121
  function validateOptions(input) {
134
122
  const options = {};
@@ -5,9 +5,9 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.ActivityBroker = ActivityBroker;
7
7
  exports.DefinitionBroker = DefinitionBroker;
8
+ exports.EventBroker = EventBroker;
8
9
  exports.MessageFlowBroker = MessageFlowBroker;
9
10
  exports.ProcessBroker = ProcessBroker;
10
- exports.EventBroker = EventBroker;
11
11
 
12
12
  var _smqp = require("smqp");
13
13
 
@@ -27,7 +27,7 @@ function DefinitionBroker(owner, onBrokerReturn) {
27
27
  }
28
28
 
29
29
  function MessageFlowBroker(owner) {
30
- const eventBroker = EventBroker(owner, {
30
+ const eventBroker = new EventBroker(owner, {
31
31
  prefix: 'messageflow',
32
32
  autoDelete: false,
33
33
  durable: false
@@ -46,7 +46,7 @@ function MessageFlowBroker(owner) {
46
46
  }
47
47
 
48
48
  function ExecutionBroker(brokerOwner, prefix, onBrokerReturn) {
49
- const eventBroker = EventBroker(brokerOwner, {
49
+ const eventBroker = new EventBroker(brokerOwner, {
50
50
  prefix,
51
51
  autoDelete: false,
52
52
  durable: false
@@ -84,104 +84,105 @@ function ExecutionBroker(brokerOwner, prefix, onBrokerReturn) {
84
84
  }
85
85
 
86
86
  function EventBroker(brokerOwner, options, onBrokerReturn) {
87
- const broker = (0, _smqp.Broker)(brokerOwner);
88
- const pfx = options.prefix;
87
+ this.options = options;
88
+ this.eventPrefix = options.prefix;
89
+ const broker = this.broker = (0, _smqp.Broker)(brokerOwner);
89
90
  broker.assertExchange('event', 'topic', options);
90
- broker.on('return', onBrokerReturn || onBrokerReturnFn);
91
- return {
92
- eventPrefix: pfx,
93
- broker,
94
- on,
95
- once,
96
- waitFor,
97
- emit,
98
- emitFatal
99
- };
100
-
101
- function on(eventName, callback, eventOptions = {
102
- once: false
103
- }) {
104
- const key = getEventRoutingKey(eventName);
105
- if (eventOptions.once) return broker.subscribeOnce('event', key, eventCallback, eventOptions);
106
- return broker.subscribeTmp('event', key, eventCallback, { ...eventOptions,
107
- noAck: true
108
- });
91
+ broker.on('return', onBrokerReturn ? onBrokerReturn.bind(brokerOwner) : this._onBrokerReturnFn.bind(this));
92
+ this.on = this.on.bind(this);
93
+ this.once = this.once.bind(this);
94
+ this.waitFor = this.waitFor.bind(this);
95
+ this.emit = this.emit.bind(this);
96
+ this.emitFatal = this.emitFatal.bind(this);
97
+ }
109
98
 
110
- function eventCallback(routingKey, message, owner) {
111
- if (eventName === 'error') return callback((0, _Errors.makeErrorFromMessage)(message));
112
- callback(owner.getApi(message));
113
- }
114
- }
99
+ EventBroker.prototype.on = function on(eventName, callback, eventOptions = {
100
+ once: false
101
+ }) {
102
+ const key = this._getEventRoutingKey(eventName);
103
+
104
+ if (eventOptions.once) return this.broker.subscribeOnce('event', key, eventCallback, eventOptions);
105
+ return this.broker.subscribeTmp('event', key, eventCallback, { ...eventOptions,
106
+ noAck: true
107
+ });
115
108
 
116
- function once(eventName, callback, eventOptions = {}) {
117
- return on(eventName, callback, { ...eventOptions,
118
- once: true
119
- });
109
+ function eventCallback(routingKey, message, owner) {
110
+ if (eventName === 'error') return callback((0, _Errors.makeErrorFromMessage)(message));
111
+ callback(owner.getApi(message));
120
112
  }
113
+ };
121
114
 
122
- function waitFor(eventName, onMessage) {
123
- const key = getEventRoutingKey(eventName);
124
- return new Promise((resolve, reject) => {
125
- const consumers = [broker.subscribeTmp('event', key, eventCallback, {
126
- noAck: true
127
- }), broker.subscribeTmp('event', '*.error', errorCallback, {
128
- noAck: true
129
- })];
130
-
131
- function eventCallback(routingKey, message, owner) {
132
- if (onMessage && !onMessage(routingKey, message, owner)) return;
133
- unsubscribe();
134
- return resolve(owner.getApi(message));
135
- }
115
+ EventBroker.prototype.once = function once(eventName, callback, eventOptions = {}) {
116
+ return this.on(eventName, callback, { ...eventOptions,
117
+ once: true
118
+ });
119
+ };
136
120
 
137
- function errorCallback(routingKey, message, owner) {
138
- if (!message.properties.mandatory) return;
139
- unsubscribe();
140
- return reject((0, _Errors.makeErrorFromMessage)(message, owner));
141
- }
121
+ EventBroker.prototype.waitFor = function waitFor(eventName, onMessage) {
122
+ const key = this._getEventRoutingKey(eventName);
142
123
 
143
- function unsubscribe() {
144
- consumers.forEach(consumer => consumer.cancel());
145
- }
146
- });
147
- }
124
+ return new Promise((resolve, reject) => {
125
+ const consumers = [this.broker.subscribeTmp('event', key, eventCallback, {
126
+ noAck: true
127
+ }), this.broker.subscribeTmp('event', '*.error', errorCallback, {
128
+ noAck: true
129
+ })];
148
130
 
149
- function onBrokerReturnFn(message) {
150
- if (message.properties.type === 'error') {
151
- const err = (0, _Errors.makeErrorFromMessage)(message);
152
- throw err;
131
+ function eventCallback(routingKey, message, owner) {
132
+ if (onMessage && !onMessage(routingKey, message, owner)) return;
133
+ unsubscribe();
134
+ return resolve(owner.getApi(message));
153
135
  }
154
- }
155
136
 
156
- function getEventRoutingKey(eventName) {
157
- if (eventName.indexOf('.') > -1) return eventName;
158
-
159
- switch (eventName) {
160
- case 'wait':
161
- {
162
- return `activity.${eventName}`;
163
- }
137
+ function errorCallback(routingKey, message, owner) {
138
+ if (!message.properties.mandatory) return;
139
+ unsubscribe();
140
+ return reject((0, _Errors.makeErrorFromMessage)(message, owner));
141
+ }
164
142
 
165
- default:
166
- {
167
- return `${pfx}.${eventName}`;
168
- }
143
+ function unsubscribe() {
144
+ for (const consumer of consumers) {
145
+ consumer.cancel();
146
+ }
169
147
  }
170
- }
148
+ });
149
+ };
171
150
 
172
- function emit(eventName, content = {}, props = {}) {
173
- broker.publish('event', `${pfx}.${eventName}`, { ...content
174
- }, {
175
- type: eventName,
176
- ...props
177
- });
151
+ EventBroker.prototype.emit = function emit(eventName, content, props) {
152
+ this.broker.publish('event', `${this.eventPrefix}.${eventName}`, { ...content
153
+ }, {
154
+ type: eventName,
155
+ ...props
156
+ });
157
+ };
158
+
159
+ EventBroker.prototype.emitFatal = function emitFatal(error, content) {
160
+ this.emit('error', { ...content,
161
+ error
162
+ }, {
163
+ mandatory: true
164
+ });
165
+ };
166
+
167
+ EventBroker.prototype._onBrokerReturnFn = function onBrokerReturnFn(message) {
168
+ if (message.properties.type === 'error') {
169
+ const err = (0, _Errors.makeErrorFromMessage)(message);
170
+ throw err;
178
171
  }
172
+ };
173
+
174
+ EventBroker.prototype._getEventRoutingKey = function getEventRoutingKey(eventName) {
175
+ if (eventName.indexOf('.') > -1) return eventName;
179
176
 
180
- function emitFatal(error, content = {}) {
181
- emit('error', { ...content,
182
- error
183
- }, {
184
- mandatory: true
185
- });
177
+ switch (eventName) {
178
+ case 'wait':
179
+ {
180
+ return `activity.${eventName}`;
181
+ }
182
+
183
+ default:
184
+ {
185
+ return `${this.eventPrefix}.${eventName}`;
186
+ }
186
187
  }
187
- }
188
+ };
@@ -28,11 +28,11 @@ function ExtensionsMapper(context) {
28
28
  }
29
29
 
30
30
  function activate(message) {
31
- activityExtensions.forEach(extension => extension.activate(message));
31
+ for (const extension of activityExtensions) extension.activate(message);
32
32
  }
33
33
 
34
34
  function deactivate(message) {
35
- activityExtensions.forEach(extension => extension.deactivate(message));
35
+ for (const extension of activityExtensions) extension.deactivate(message);
36
36
  }
37
37
  }
38
38