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,114 +13,183 @@ var _Errors = require("./error/Errors");
13
13
 
14
14
  var _smqp = require("smqp");
15
15
 
16
+ const onMessageSymbol = Symbol.for('onMessage');
17
+ const executionSymbol = Symbol.for('execution');
18
+
16
19
  function Formatter(element, formatQ) {
17
20
  const {
18
21
  id,
19
22
  broker,
20
23
  logger
21
24
  } = element;
22
- return function formatRunMessage(runMessage, callback) {
23
- const startFormatMsg = formatQ.get();
24
- if (!startFormatMsg) return callback(null, runMessage.content, false);
25
- const pendingFormats = [];
26
- const {
27
- fields,
28
- content
29
- } = runMessage;
30
- const fundamentals = {
31
- id: content.id,
32
- type: content.type,
33
- parent: (0, _messageHelper.cloneParent)(content.parent),
34
- attachedTo: content.attachedTo,
35
- executionId: content.executionId,
36
- isSubProcess: content.isSubProcess,
37
- isMultiInstance: content.isMultiInstance
38
- };
39
-
40
- if (content.inbound) {
41
- fundamentals.inbound = content.inbound.slice();
42
- }
43
-
44
- if (content.outbound) {
45
- fundamentals.outbound = content.outbound.slice();
46
- }
25
+ this.id = id;
26
+ this.broker = broker;
27
+ this.logger = logger;
28
+ this.formatQ = formatQ;
29
+ this.pendingFormats = [];
30
+ this[onMessageSymbol] = this._onMessage.bind(this);
31
+ }
32
+
33
+ Formatter.prototype.format = function format(message, callback) {
34
+ const correlationId = this._runId = (0, _shared.getUniqueId)(message.fields.routingKey);
35
+ const consumerTag = '_formatter-' + correlationId;
36
+ const formatQ = this.formatQ;
37
+ formatQ.queueMessage({
38
+ routingKey: '_formatting.exec'
39
+ }, {}, {
40
+ correlationId,
41
+ persistent: false
42
+ });
43
+ this[executionSymbol] = {
44
+ correlationId,
45
+ formatKey: message.fields.routingKey,
46
+ runMessage: (0, _messageHelper.cloneMessage)(message),
47
+ callback,
48
+ pending: [],
49
+ formatted: false,
50
+ executeMessage: null
51
+ };
52
+ formatQ.consume(this[onMessageSymbol], {
53
+ consumerTag,
54
+ prefetch: 100
55
+ });
56
+ };
47
57
 
48
- let formattingError;
49
- let formattedContent = (0, _messageHelper.cloneContent)(content);
50
- const depleted = formatQ.on('depleted', () => {
51
- if (pendingFormats.length) return;
52
- depleted.cancel();
53
- logger.debug(`<${id}> completed formatting ${fields.routingKey}`);
54
- broker.cancel('_format-consumer');
55
- if (formattingError) return callback(formattingError);
56
- return callback(null, (0, _shared.filterUndefined)(formattedContent), true);
57
- });
58
- startFormatMsg.nack(false, true);
59
- formatQ.assertConsumer(onFormatMessage, {
60
- consumerTag: '_format-consumer',
61
- prefetch: 100
62
- });
63
-
64
- function onFormatMessage(routingKey, message) {
65
- const {
66
- endRoutingKey,
67
- error
68
- } = message.content || {};
69
-
70
- if (endRoutingKey) {
71
- pendingFormats.push(message);
72
- return logger.debug(`<${id}> start formatting ${fields.routingKey} message content with formatter ${routingKey}`);
58
+ Formatter.prototype._onMessage = function onMessage(routingKey, message) {
59
+ const {
60
+ formatKey,
61
+ correlationId,
62
+ pending,
63
+ executeMessage
64
+ } = this[executionSymbol];
65
+ const asyncFormatting = pending.length;
66
+
67
+ switch (routingKey) {
68
+ case '_formatting.exec':
69
+ if (message.properties.correlationId !== correlationId) return message.ack();
70
+
71
+ if (!asyncFormatting) {
72
+ message.ack();
73
+ return this._complete(message);
73
74
  }
74
75
 
75
- const {
76
- isError,
77
- message: formatStart
78
- } = popFormattingStart(routingKey);
79
- logger.debug(`<${id}> format ${fields.routingKey} message content with formatter ${routingKey}`);
80
- formattedContent = { ...formattedContent,
81
- ...message.content,
82
- ...fundamentals
83
- };
84
- message.ack();
85
-
86
- if (formatStart) {
87
- if (isError) {
88
- const errMessage = error && error.message || 'formatting failed';
89
- logger.debug(`<${id}> formatting of ${fields.routingKey} failed with ${routingKey}: ${errMessage}`);
90
- formattingError = new _Errors.ActivityError(errMessage, (0, _messageHelper.cloneMessage)(runMessage, formattedContent), error);
91
- pendingFormats.splice(0).forEach(({
92
- nack
93
- }) => nack(false, false));
76
+ this[executionSymbol].executeMessage = message;
77
+ break;
78
+
79
+ default:
80
+ {
81
+ message.ack();
82
+ const endRoutingKey = message.content && message.content.endRoutingKey;
83
+
84
+ if (endRoutingKey) {
85
+ this._decorate(message.content);
86
+
87
+ pending.push(message);
88
+ return this._debug(`start formatting ${formatKey} message content with formatter ${routingKey}`);
94
89
  }
95
90
 
96
- formatStart.ack(isError);
97
- }
98
- }
91
+ if (asyncFormatting) {
92
+ const {
93
+ isError,
94
+ message: startMessage
95
+ } = this._popFormatStart(pending, routingKey);
96
+
97
+ if (startMessage) startMessage.ack();
98
+
99
+ if (isError) {
100
+ return this._complete(message, true);
101
+ }
102
+ }
103
+
104
+ this._decorate(message.content);
99
105
 
100
- function popFormattingStart(routingKey) {
101
- for (let i = 0; i < pendingFormats.length; i++) {
102
- const pendingFormat = pendingFormats[i];
103
- const {
104
- endRoutingKey,
105
- errorRoutingKey = '#.error'
106
- } = pendingFormat.content;
107
-
108
- if ((0, _smqp.getRoutingKeyPattern)(endRoutingKey).test(routingKey)) {
109
- logger.debug(`<${id}> completed formatting ${fields.routingKey} message content with formatter ${routingKey}`);
110
- pendingFormats.splice(i, 1);
111
- return {
112
- message: pendingFormat
113
- };
114
- } else if ((0, _smqp.getRoutingKeyPattern)(errorRoutingKey).test(routingKey)) {
115
- pendingFormats.splice(i, 1);
116
- return {
117
- isError: true,
118
- message: pendingFormat
119
- };
106
+ this._debug(`format ${message.fields.routingKey} message content with formatter ${routingKey}`);
107
+
108
+ if (executeMessage && asyncFormatting && !pending.length) {
109
+ this._complete(message);
120
110
  }
121
111
  }
112
+ }
113
+ };
122
114
 
123
- return {};
115
+ Formatter.prototype._complete = function complete(message, isError) {
116
+ const {
117
+ runMessage,
118
+ formatKey,
119
+ callback,
120
+ formatted,
121
+ executeMessage
122
+ } = this[executionSymbol];
123
+ this[executionSymbol] = null;
124
+ if (executeMessage) executeMessage.ack();
125
+ this.broker.cancel(message.fields.consumerTag);
126
+
127
+ if (isError) {
128
+ const error = message.content && message.content.error || new Error('formatting failed');
129
+ const errMessage = error.message || 'formatting failed';
130
+
131
+ this._debug(`formatting of ${formatKey} failed with ${message.fields.routingKey}: ${errMessage}`);
132
+
133
+ return callback(new _Errors.ActivityError(errMessage, (0, _messageHelper.cloneMessage)(runMessage), error));
134
+ }
135
+
136
+ return callback(null, runMessage.content, formatted);
137
+ };
138
+
139
+ Formatter.prototype._decorate = function decorate(withContent) {
140
+ const content = this[executionSymbol].runMessage.content;
141
+
142
+ for (const key in withContent) {
143
+ switch (key) {
144
+ case 'id':
145
+ case 'type':
146
+ case 'parent':
147
+ case 'attachedTo':
148
+ case 'executionId':
149
+ case 'isSubProcess':
150
+ case 'isMultiInstance':
151
+ case 'inbound':
152
+ case 'outbound':
153
+ case 'endRoutingKey':
154
+ case 'errorRoutingKey':
155
+ break;
156
+
157
+ default:
158
+ {
159
+ content[key] = withContent[key];
160
+ this[executionSymbol].formatted = true;
161
+ }
124
162
  }
125
- };
126
- }
163
+ }
164
+ };
165
+
166
+ Formatter.prototype._popFormatStart = function popFormattingStart(pending, routingKey) {
167
+ for (let idx = 0; idx < pending.length; idx++) {
168
+ const msg = pending[idx];
169
+ const {
170
+ endRoutingKey,
171
+ errorRoutingKey = '#.error'
172
+ } = msg.content;
173
+
174
+ if (endRoutingKey && (0, _smqp.getRoutingKeyPattern)(endRoutingKey).test(routingKey)) {
175
+ this._debug(`completed formatting ${msg.fields.routingKey} message content with formatter ${routingKey}`);
176
+
177
+ pending.splice(idx, 1);
178
+ return {
179
+ message: msg
180
+ };
181
+ } else if ((0, _smqp.getRoutingKeyPattern)(errorRoutingKey).test(routingKey)) {
182
+ pending.splice(idx, 1);
183
+ return {
184
+ isError: true,
185
+ message: msg
186
+ };
187
+ }
188
+ }
189
+
190
+ return {};
191
+ };
192
+
193
+ Formatter.prototype._debug = function debug(msg) {
194
+ this.logger.debug(`<${this.id}> ${msg}`);
195
+ };
@@ -11,7 +11,11 @@ function Scripts() {
11
11
  register
12
12
  };
13
13
 
14
- function getScript() {}
14
+ function
15
+ /*scriptType, activity*/
16
+ getScript() {}
15
17
 
16
- function register() {}
18
+ function
19
+ /*activity*/
20
+ register() {}
17
21
  }
@@ -46,7 +46,7 @@ function Timers(options) {
46
46
  owner: this
47
47
  };
48
48
  executing.push(ref);
49
- ref.timerRef = options.setTimeout.call(this, onTimeout, delay, ...args);
49
+ ref.timerRef = options.setTimeout.call(null, onTimeout, delay, ...args);
50
50
  return ref;
51
51
 
52
52
  function onTimeout(...rargs) {
@@ -60,12 +60,10 @@ function Timers(options) {
60
60
  const idx = executing.indexOf(ref);
61
61
 
62
62
  if (idx > -1) {
63
- const [{
64
- owner
65
- }] = executing.splice(idx, 1);
66
- return options.clearTimeout.call(owner, ref.timerRef);
63
+ executing.splice(idx, 1);
64
+ return options.clearTimeout.call(null, ref.timerRef);
67
65
  }
68
66
 
69
- return options.clearTimeout(ref);
67
+ return options.clearTimeout.call(null, ref);
70
68
  }
71
69
  }