bpmnlint-plugin-camunda-compat 2.22.0 → 2.24.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.
package/index.js CHANGED
@@ -11,11 +11,13 @@ const camundaCloud10Rules = withConfig({
11
11
  'executable-process': 'error',
12
12
  'loop-characteristics': 'error',
13
13
  'message-reference': 'error',
14
+ 'no-binding-type': 'error',
14
15
  'no-candidate-users': 'error',
15
16
  'no-execution-listeners': 'error',
16
17
  'no-expression': 'error',
17
18
  'no-loop': 'error',
18
19
  'no-multiple-none-start-events': 'error',
20
+ 'no-priority-definition': 'error',
19
21
  'no-propagate-all-parent-variables': 'error',
20
22
  'no-task-schedule': 'error',
21
23
  'no-template': 'error',
@@ -77,9 +79,15 @@ const camundaCloud85Rules = withConfig({
77
79
  }, { version: '8.5' });
78
80
 
79
81
  const camundaCloud86Rules = withConfig({
80
- ...omit(camundaCloud85Rules, [ 'inclusive-gateway', 'no-execution-listeners' ]),
82
+ ...omit(camundaCloud85Rules, [
83
+ 'inclusive-gateway',
84
+ 'no-binding-type',
85
+ 'no-execution-listeners',
86
+ 'no-priority-definition'
87
+ ]),
81
88
  'duplicate-execution-listeners': 'error',
82
- 'execution-listener': 'error'
89
+ 'execution-listener': 'error',
90
+ 'priority-definition': 'error'
83
91
  }, { version: '8.6' });
84
92
 
85
93
  const camundaPlatform719Rules = withConfig({
@@ -124,17 +132,20 @@ const rules = {
124
132
  'link-event': './rules/camunda-cloud/link-event',
125
133
  'loop-characteristics': './rules/camunda-cloud/loop-characteristics',
126
134
  'message-reference': './rules/camunda-cloud/message-reference',
135
+ 'no-binding-type': './rules/camunda-cloud/no-binding-type',
127
136
  'no-candidate-users': './rules/camunda-cloud/no-candidate-users',
128
137
  'no-execution-listeners': './rules/camunda-cloud/no-execution-listeners',
129
138
  'no-expression': './rules/camunda-cloud/no-expression',
130
139
  'no-loop': './rules/camunda-cloud/no-loop',
131
140
  'no-multiple-none-start-events': './rules/camunda-cloud/no-multiple-none-start-events',
141
+ 'no-priority-definition': './rules/camunda-cloud/no-priority-definition',
132
142
  'no-propagate-all-parent-variables': './rules/camunda-cloud/no-propagate-all-parent-variables',
133
143
  'no-signal-event-sub-process': './rules/camunda-cloud/no-signal-event-sub-process',
134
144
  'no-task-schedule': './rules/camunda-cloud/no-task-schedule',
135
145
  'no-template': './rules/camunda-cloud/no-template',
136
146
  'no-zeebe-properties': './rules/camunda-cloud/no-zeebe-properties',
137
147
  'no-zeebe-user-task': './rules/camunda-cloud/no-zeebe-user-task',
148
+ 'priority-definition': './rules/camunda-cloud/priority-definition',
138
149
  'secrets': './rules/camunda-cloud/secrets',
139
150
  'sequence-flow-condition': './rules/camunda-cloud/sequence-flow-condition',
140
151
  'signal-reference': './rules/camunda-cloud/signal-reference',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bpmnlint-plugin-camunda-compat",
3
- "version": "2.22.0",
3
+ "version": "2.24.0",
4
4
  "description": "A bpmnlint plug-in for Camunda compatibility",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -34,7 +34,7 @@
34
34
  "modeler-moddle": "^0.2.0",
35
35
  "sinon": "^17.0.1",
36
36
  "sinon-chai": "^3.7.0",
37
- "zeebe-bpmn-moddle": "^1.4.0"
37
+ "zeebe-bpmn-moddle": "^1.5.1"
38
38
  },
39
39
  "dependencies": {
40
40
  "@bpmn-io/feel-lint": "^1.2.0",
@@ -0,0 +1,44 @@
1
+ const { isAny } = require('bpmnlint-utils');
2
+
3
+ const { hasProperties, findExtensionElement } = require('../utils/element');
4
+
5
+ const { reportErrors } = require('../utils/reporter');
6
+
7
+ const { skipInNonExecutableProcess } = require('../utils/rule');
8
+
9
+ module.exports = skipInNonExecutableProcess(function() {
10
+ function check(node, reporter) {
11
+ if (!isAny(node, [
12
+ 'bpmn:BusinessRuleTask',
13
+ 'bpmn:CallActivity',
14
+ 'bpmn:UserTask'
15
+ ])) {
16
+ return;
17
+ }
18
+
19
+ const extensionElement = findExtensionElement(node, [
20
+ 'zeebe:CalledDecision',
21
+ 'zeebe:CalledElement',
22
+ 'zeebe:FormDefinition'
23
+ ]);
24
+
25
+ if (!extensionElement) {
26
+ return;
27
+ }
28
+
29
+ const errors = hasProperties(extensionElement, {
30
+ bindingType: {
31
+ allowed: (value) => !value || value === 'latest',
32
+ allowedVersion: '8.6'
33
+ }
34
+ }, node);
35
+
36
+ if (errors && errors.length) {
37
+ reportErrors(node, reporter, errors);
38
+ }
39
+ }
40
+
41
+ return {
42
+ check
43
+ };
44
+ });
@@ -0,0 +1,19 @@
1
+ const { hasNoExtensionElement } = require('../utils/element');
2
+
3
+ const { reportErrors } = require('../utils/reporter');
4
+
5
+ const { skipInNonExecutableProcess } = require('../utils/rule');
6
+
7
+ module.exports = skipInNonExecutableProcess(function() {
8
+ function check(node, reporter) {
9
+ const errors = hasNoExtensionElement(node, 'zeebe:PriorityDefinition', node, '8.6');
10
+
11
+ if (errors && errors.length) {
12
+ reportErrors(node, reporter, errors);
13
+ }
14
+ }
15
+
16
+ return {
17
+ check
18
+ };
19
+ });
@@ -0,0 +1,62 @@
1
+ const { is } = require('bpmnlint-utils');
2
+ const { isDefined } = require('min-dash');
3
+
4
+ const {
5
+ findExtensionElement,
6
+ hasExpression
7
+ } = require('../utils/element');
8
+
9
+ const { reportErrors } = require('../utils/reporter');
10
+
11
+ const { skipInNonExecutableProcess } = require('../utils/rule');
12
+
13
+ module.exports = skipInNonExecutableProcess(function() {
14
+ function check(node, reporter) {
15
+ if (!is(node, 'bpmn:UserTask')) {
16
+ return;
17
+ }
18
+
19
+ const priorityDefinition = findExtensionElement(node, 'zeebe:PriorityDefinition');
20
+
21
+ if (!priorityDefinition) {
22
+ return;
23
+ }
24
+
25
+ const priority = priorityDefinition.get('priority');
26
+
27
+ let errors = [];
28
+
29
+ if (isDefined(priority)) {
30
+ errors = [
31
+ ...errors,
32
+ ...hasExpression(priorityDefinition, 'priority', {
33
+ allowed: value => isValidPriority(value)
34
+ }, node)
35
+ ];
36
+ }
37
+
38
+ if (errors.length) {
39
+ reportErrors(node, reporter, errors);
40
+ }
41
+ }
42
+
43
+ return {
44
+ check
45
+ };
46
+ });
47
+
48
+ function isValidPriority(value) {
49
+ return isExpression(value) || isIntegerStringBetween(value, 0, 100);
50
+ }
51
+
52
+ function isExpression(value) {
53
+ return value.startsWith('=');
54
+ }
55
+
56
+ function isIntegerStringBetween(value, min, max) {
57
+ if (/^\d+$/.test(value)) {
58
+ const number = parseInt(value, 10);
59
+ return number >= min && number <= max;
60
+ }
61
+ return false;
62
+ }