@camunda/linting 3.22.0 → 3.23.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.
@@ -33,12 +33,14 @@ const rules = {
33
33
  "camunda-compat/called-element": "error",
34
34
  "camunda-compat/collapsed-subprocess": "error",
35
35
  "camunda-compat/connector-properties": "warn",
36
+ "camunda-compat/duplicate-execution-listeners": "error",
36
37
  "camunda-compat/duplicate-task-headers": "error",
37
38
  "camunda-compat/error-reference": "error",
38
39
  "camunda-compat/escalation-boundary-event-attached-to-ref": "error",
39
40
  "camunda-compat/escalation-reference": "error",
40
41
  "camunda-compat/event-based-gateway-target": "error",
41
42
  "camunda-compat/executable-process": "error",
43
+ "camunda-compat/execution-listener": "error",
42
44
  "camunda-compat/feel": "error",
43
45
  "camunda-compat/history-time-to-live": "info",
44
46
  "camunda-compat/implementation": "error",
@@ -47,6 +49,7 @@ const rules = {
47
49
  "camunda-compat/loop-characteristics": "error",
48
50
  "camunda-compat/message-reference": "error",
49
51
  "camunda-compat/no-candidate-users": "error",
52
+ "camunda-compat/no-execution-listeners": "error",
50
53
  "camunda-compat/no-expression": "error",
51
54
  "camunda-compat/no-loop": "error",
52
55
  "camunda-compat/no-multiple-none-start-events": "error",
@@ -97,134 +100,146 @@ import rule_3 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/connector
97
100
 
98
101
  cache['bpmnlint-plugin-camunda-compat/connector-properties'] = rule_3;
99
102
 
100
- import rule_4 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/duplicate-task-headers';
103
+ import rule_4 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/duplicate-execution-listeners';
101
104
 
102
- cache['bpmnlint-plugin-camunda-compat/duplicate-task-headers'] = rule_4;
105
+ cache['bpmnlint-plugin-camunda-compat/duplicate-execution-listeners'] = rule_4;
103
106
 
104
- import rule_5 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/error-reference';
107
+ import rule_5 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/duplicate-task-headers';
105
108
 
106
- cache['bpmnlint-plugin-camunda-compat/error-reference'] = rule_5;
109
+ cache['bpmnlint-plugin-camunda-compat/duplicate-task-headers'] = rule_5;
107
110
 
108
- import rule_6 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/escalation-boundary-event-attached-to-ref';
111
+ import rule_6 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/error-reference';
109
112
 
110
- cache['bpmnlint-plugin-camunda-compat/escalation-boundary-event-attached-to-ref'] = rule_6;
113
+ cache['bpmnlint-plugin-camunda-compat/error-reference'] = rule_6;
111
114
 
112
- import rule_7 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/escalation-reference';
115
+ import rule_7 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/escalation-boundary-event-attached-to-ref';
113
116
 
114
- cache['bpmnlint-plugin-camunda-compat/escalation-reference'] = rule_7;
117
+ cache['bpmnlint-plugin-camunda-compat/escalation-boundary-event-attached-to-ref'] = rule_7;
115
118
 
116
- import rule_8 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/event-based-gateway-target';
119
+ import rule_8 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/escalation-reference';
117
120
 
118
- cache['bpmnlint-plugin-camunda-compat/event-based-gateway-target'] = rule_8;
121
+ cache['bpmnlint-plugin-camunda-compat/escalation-reference'] = rule_8;
119
122
 
120
- import rule_9 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/executable-process';
123
+ import rule_9 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/event-based-gateway-target';
121
124
 
122
- cache['bpmnlint-plugin-camunda-compat/executable-process'] = rule_9;
125
+ cache['bpmnlint-plugin-camunda-compat/event-based-gateway-target'] = rule_9;
123
126
 
124
- import rule_10 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/feel';
127
+ import rule_10 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/executable-process';
125
128
 
126
- cache['bpmnlint-plugin-camunda-compat/feel'] = rule_10;
129
+ cache['bpmnlint-plugin-camunda-compat/executable-process'] = rule_10;
127
130
 
128
- import rule_11 from 'bpmnlint-plugin-camunda-compat/rules/camunda-platform/history-time-to-live';
131
+ import rule_11 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/execution-listener';
129
132
 
130
- cache['bpmnlint-plugin-camunda-compat/history-time-to-live'] = rule_11;
133
+ cache['bpmnlint-plugin-camunda-compat/execution-listener'] = rule_11;
131
134
 
132
- import rule_12 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/implementation';
135
+ import rule_12 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/feel';
133
136
 
134
- cache['bpmnlint-plugin-camunda-compat/implementation'] = rule_12;
137
+ cache['bpmnlint-plugin-camunda-compat/feel'] = rule_12;
135
138
 
136
- import rule_13 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/inclusive-gateway';
139
+ import rule_13 from 'bpmnlint-plugin-camunda-compat/rules/camunda-platform/history-time-to-live';
137
140
 
138
- cache['bpmnlint-plugin-camunda-compat/inclusive-gateway'] = rule_13;
141
+ cache['bpmnlint-plugin-camunda-compat/history-time-to-live'] = rule_13;
139
142
 
140
- import rule_14 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/link-event';
143
+ import rule_14 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/implementation';
141
144
 
142
- cache['bpmnlint-plugin-camunda-compat/link-event'] = rule_14;
145
+ cache['bpmnlint-plugin-camunda-compat/implementation'] = rule_14;
143
146
 
144
- import rule_15 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/loop-characteristics';
147
+ import rule_15 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/inclusive-gateway';
145
148
 
146
- cache['bpmnlint-plugin-camunda-compat/loop-characteristics'] = rule_15;
149
+ cache['bpmnlint-plugin-camunda-compat/inclusive-gateway'] = rule_15;
147
150
 
148
- import rule_16 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/message-reference';
151
+ import rule_16 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/link-event';
149
152
 
150
- cache['bpmnlint-plugin-camunda-compat/message-reference'] = rule_16;
153
+ cache['bpmnlint-plugin-camunda-compat/link-event'] = rule_16;
151
154
 
152
- import rule_17 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/no-candidate-users';
155
+ import rule_17 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/loop-characteristics';
153
156
 
154
- cache['bpmnlint-plugin-camunda-compat/no-candidate-users'] = rule_17;
157
+ cache['bpmnlint-plugin-camunda-compat/loop-characteristics'] = rule_17;
155
158
 
156
- import rule_18 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/no-expression';
159
+ import rule_18 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/message-reference';
157
160
 
158
- cache['bpmnlint-plugin-camunda-compat/no-expression'] = rule_18;
161
+ cache['bpmnlint-plugin-camunda-compat/message-reference'] = rule_18;
159
162
 
160
- import rule_19 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/no-loop';
163
+ import rule_19 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/no-candidate-users';
161
164
 
162
- cache['bpmnlint-plugin-camunda-compat/no-loop'] = rule_19;
165
+ cache['bpmnlint-plugin-camunda-compat/no-candidate-users'] = rule_19;
163
166
 
164
- import rule_20 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/no-multiple-none-start-events';
167
+ import rule_20 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/no-execution-listeners';
165
168
 
166
- cache['bpmnlint-plugin-camunda-compat/no-multiple-none-start-events'] = rule_20;
169
+ cache['bpmnlint-plugin-camunda-compat/no-execution-listeners'] = rule_20;
167
170
 
168
- import rule_21 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/no-propagate-all-parent-variables';
171
+ import rule_21 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/no-expression';
169
172
 
170
- cache['bpmnlint-plugin-camunda-compat/no-propagate-all-parent-variables'] = rule_21;
173
+ cache['bpmnlint-plugin-camunda-compat/no-expression'] = rule_21;
171
174
 
172
- import rule_22 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/no-signal-event-sub-process';
175
+ import rule_22 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/no-loop';
173
176
 
174
- cache['bpmnlint-plugin-camunda-compat/no-signal-event-sub-process'] = rule_22;
177
+ cache['bpmnlint-plugin-camunda-compat/no-loop'] = rule_22;
175
178
 
176
- import rule_23 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/no-task-schedule';
179
+ import rule_23 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/no-multiple-none-start-events';
177
180
 
178
- cache['bpmnlint-plugin-camunda-compat/no-task-schedule'] = rule_23;
181
+ cache['bpmnlint-plugin-camunda-compat/no-multiple-none-start-events'] = rule_23;
179
182
 
180
- import rule_24 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/no-template';
183
+ import rule_24 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/no-propagate-all-parent-variables';
181
184
 
182
- cache['bpmnlint-plugin-camunda-compat/no-template'] = rule_24;
185
+ cache['bpmnlint-plugin-camunda-compat/no-propagate-all-parent-variables'] = rule_24;
183
186
 
184
- import rule_25 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/no-zeebe-properties';
187
+ import rule_25 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/no-signal-event-sub-process';
185
188
 
186
- cache['bpmnlint-plugin-camunda-compat/no-zeebe-properties'] = rule_25;
189
+ cache['bpmnlint-plugin-camunda-compat/no-signal-event-sub-process'] = rule_25;
187
190
 
188
- import rule_26 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/no-zeebe-user-task';
191
+ import rule_26 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/no-task-schedule';
189
192
 
190
- cache['bpmnlint-plugin-camunda-compat/no-zeebe-user-task'] = rule_26;
193
+ cache['bpmnlint-plugin-camunda-compat/no-task-schedule'] = rule_26;
191
194
 
192
- import rule_27 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/secrets';
195
+ import rule_27 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/no-template';
193
196
 
194
- cache['bpmnlint-plugin-camunda-compat/secrets'] = rule_27;
197
+ cache['bpmnlint-plugin-camunda-compat/no-template'] = rule_27;
195
198
 
196
- import rule_28 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/sequence-flow-condition';
199
+ import rule_28 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/no-zeebe-properties';
197
200
 
198
- cache['bpmnlint-plugin-camunda-compat/sequence-flow-condition'] = rule_28;
201
+ cache['bpmnlint-plugin-camunda-compat/no-zeebe-properties'] = rule_28;
199
202
 
200
- import rule_29 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/signal-reference';
203
+ import rule_29 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/no-zeebe-user-task';
201
204
 
202
- cache['bpmnlint-plugin-camunda-compat/signal-reference'] = rule_29;
205
+ cache['bpmnlint-plugin-camunda-compat/no-zeebe-user-task'] = rule_29;
203
206
 
204
- import rule_30 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/start-event-form';
207
+ import rule_30 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/secrets';
205
208
 
206
- cache['bpmnlint-plugin-camunda-compat/start-event-form'] = rule_30;
209
+ cache['bpmnlint-plugin-camunda-compat/secrets'] = rule_30;
207
210
 
208
- import rule_31 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/subscription';
211
+ import rule_31 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/sequence-flow-condition';
209
212
 
210
- cache['bpmnlint-plugin-camunda-compat/subscription'] = rule_31;
213
+ cache['bpmnlint-plugin-camunda-compat/sequence-flow-condition'] = rule_31;
211
214
 
212
- import rule_32 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/task-schedule';
215
+ import rule_32 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/signal-reference';
213
216
 
214
- cache['bpmnlint-plugin-camunda-compat/task-schedule'] = rule_32;
217
+ cache['bpmnlint-plugin-camunda-compat/signal-reference'] = rule_32;
215
218
 
216
- import rule_33 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/timer';
219
+ import rule_33 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/start-event-form';
217
220
 
218
- cache['bpmnlint-plugin-camunda-compat/timer'] = rule_33;
221
+ cache['bpmnlint-plugin-camunda-compat/start-event-form'] = rule_33;
219
222
 
220
- import rule_34 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/user-task-definition';
223
+ import rule_34 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/subscription';
221
224
 
222
- cache['bpmnlint-plugin-camunda-compat/user-task-definition'] = rule_34;
225
+ cache['bpmnlint-plugin-camunda-compat/subscription'] = rule_34;
223
226
 
224
- import rule_35 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/user-task-form';
227
+ import rule_35 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/task-schedule';
225
228
 
226
- cache['bpmnlint-plugin-camunda-compat/user-task-form'] = rule_35;
229
+ cache['bpmnlint-plugin-camunda-compat/task-schedule'] = rule_35;
227
230
 
228
- import rule_36 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/wait-for-completion';
231
+ import rule_36 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/timer';
229
232
 
230
- cache['bpmnlint-plugin-camunda-compat/wait-for-completion'] = rule_36;
233
+ cache['bpmnlint-plugin-camunda-compat/timer'] = rule_36;
234
+
235
+ import rule_37 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/user-task-definition';
236
+
237
+ cache['bpmnlint-plugin-camunda-compat/user-task-definition'] = rule_37;
238
+
239
+ import rule_38 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/user-task-form';
240
+
241
+ cache['bpmnlint-plugin-camunda-compat/user-task-form'] = rule_38;
242
+
243
+ import rule_39 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/wait-for-completion';
244
+
245
+ cache['bpmnlint-plugin-camunda-compat/wait-for-completion'] = rule_39;
@@ -121,6 +121,10 @@ export function getErrorMessage(report, executionPlatform, executionPlatformVers
121
121
  return getPropertyValueDuplicatedErrorMessage(report);
122
122
  }
123
123
 
124
+ if (type === ERROR_TYPES.PROPERTY_VALUES_DUPLICATED) {
125
+ return getPropertyValuesDuplicatedErrorMessage(report);
126
+ }
127
+
124
128
  if (type == ERROR_TYPES.PROPERTY_VALUE_NOT_ALLOWED) {
125
129
  return getPropertyValueNotAllowedErrorMessage(report, executionPlatform, executionPlatformVersion, modeler);
126
130
  }
@@ -228,6 +232,33 @@ function getPropertyValueDuplicatedErrorMessage(report) {
228
232
  return message;
229
233
  }
230
234
 
235
+ function getPropertyValuesDuplicatedErrorMessage(report) {
236
+ const {
237
+ data,
238
+ message
239
+ } = report;
240
+
241
+ const {
242
+ node,
243
+ parentNode,
244
+ duplicatedProperties,
245
+ properties
246
+ } = data;
247
+
248
+ const {
249
+ eventType,
250
+ type
251
+ } = duplicatedProperties;
252
+
253
+ const typeString = getTypeString(parentNode || node);
254
+
255
+ if (is(node, 'zeebe:ExecutionListeners') && every(properties, property => is(property, 'zeebe:ExecutionListener'))) {
256
+ return `${ getIndefiniteArticle(typeString) } <${ typeString }> with two or more <Execution Listeners> with the same <Event Type> (${ eventType }) and <Type> (${ type }) is not supported`;
257
+ }
258
+
259
+ return message;
260
+ }
261
+
231
262
  function getPropertyValueRequiredErrorMessage(report, executionPlatform, executionPlatformVersion) {
232
263
  const {
233
264
  data,
@@ -297,6 +328,10 @@ function getExtensionElementNotAllowedErrorMessage(report, executionPlatform, ex
297
328
  return getSupportedMessage('A <Start Event> with <User Task Form>', executionPlatform, executionPlatformVersion, allowedVersion);
298
329
  }
299
330
 
331
+ if (is(extensionElement, 'zeebe:ExecutionListeners')) {
332
+ return getSupportedMessage(`${ getIndefiniteArticle(typeString) } <${ typeString }> with <Execution listeners>`, executionPlatform, executionPlatformVersion, allowedVersion);
333
+ }
334
+
300
335
  return message;
301
336
  }
302
337
 
@@ -485,6 +520,10 @@ function getPropertyRequiredErrorMessage(report, executionPlatform, executionPla
485
520
  return `${ getIndefiniteArticle(typeString) } <${ typeString }> with <Implementation: Job worker> must have a defined <Task definition type>`;
486
521
  }
487
522
 
523
+ if (is(node, 'zeebe:ExecutionListener') && requiredProperty === 'type') {
524
+ return 'An <Execution Listener> must have a defined <Type>';
525
+ }
526
+
488
527
  if (requiredProperty === 'errorRef') {
489
528
 
490
529
  if (parentNode && is(parentNode, 'bpmn:CatchEvent')) {
@@ -316,6 +316,22 @@ export function getEntryIds(report) {
316
316
  return [ 'waitForCompletion' ];
317
317
  }
318
318
 
319
+ if (isPropertyError(data, 'type', 'zeebe:ExecutionListener')) {
320
+ const index = path[ path.length - 2 ];
321
+
322
+ return [ `${id}-executionListener-${index}-listenerType` ];
323
+ }
324
+
325
+ if (isPropertyValuesDuplicatedError(data, 'zeebe:ExecutionListeners')) {
326
+ const { properties, propertiesName } = data;
327
+
328
+ return properties.map(property => {
329
+ const index = data.node.get(propertiesName).indexOf(property);
330
+
331
+ return `${ id }-executionListener-${ index }-listenerType`;
332
+ });
333
+ }
334
+
319
335
  return [];
320
336
  }
321
337
 
@@ -528,6 +544,14 @@ export function getErrorMessage(id, report) {
528
544
  if (id === 'waitForCompletion') {
529
545
  return 'Must wait for completion.';
530
546
  }
547
+
548
+ if (/^.+-executionListener-[0-9]+-listenerType$/.test(id)) {
549
+ if (type === ERROR_TYPES.PROPERTY_VALUES_DUPLICATED) {
550
+ return 'Must be unique.';
551
+ } else {
552
+ return 'Must be defined.';
553
+ }
554
+ }
531
555
  }
532
556
 
533
557
  function isExtensionElementNotAllowedError(data, extensionElement, type) {
@@ -580,6 +604,11 @@ function isPropertyValueDuplicatedError(data, propertiesName, duplicatedProperty
580
604
  && (!type || is(data.node, type));
581
605
  }
582
606
 
607
+ function isPropertyValuesDuplicatedError(data, type) {
608
+ return data.type === ERROR_TYPES.PROPERTY_VALUES_DUPLICATED
609
+ && (!type || is(data.node, type));
610
+ }
611
+
583
612
  function isExpressionRequiredError(data, propertyName, type) {
584
613
  return data.type === ERROR_TYPES.EXPRESSION_REQUIRED
585
614
  && data.property === propertyName
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camunda/linting",
3
- "version": "3.22.0",
3
+ "version": "3.23.0",
4
4
  "description": "Linting for Camunda",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -32,7 +32,7 @@
32
32
  "@bpmn-io/diagram-js-ui": "^0.2.3",
33
33
  "bpmn-moddle": "^9.0.1",
34
34
  "bpmnlint": "^10.3.0",
35
- "bpmnlint-plugin-camunda-compat": "^2.21.0",
35
+ "bpmnlint-plugin-camunda-compat": "^2.22.0",
36
36
  "bpmnlint-utils": "^1.0.2",
37
37
  "camunda-bpmn-moddle": "^7.0.1",
38
38
  "clsx": "^2.0.0",
@@ -40,13 +40,13 @@
40
40
  "min-dom": "^5.1.1",
41
41
  "modeler-moddle": "^0.2.0",
42
42
  "semver-compare": "^1.0.0",
43
- "zeebe-bpmn-moddle": "^1.1.0"
43
+ "zeebe-bpmn-moddle": "^1.4.0"
44
44
  },
45
45
  "devDependencies": {
46
46
  "bpmn-js": "^17.9.0",
47
47
  "bpmn-js-element-templates": "^1.16.0",
48
- "bpmn-js-properties-panel": "^5.18.0",
49
- "camunda-bpmn-js-behaviors": "^1.3.0",
48
+ "bpmn-js-properties-panel": "^5.20.0",
49
+ "camunda-bpmn-js-behaviors": "^1.5.0",
50
50
  "chai": "^4.4.1",
51
51
  "cross-env": "^7.0.3",
52
52
  "eslint": "^8.57.0",