bpmnlint-plugin-camunda-compat 2.23.0 → 2.25.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
@@ -17,9 +17,11 @@ const camundaCloud10Rules = withConfig({
17
17
  'no-expression': 'error',
18
18
  'no-loop': 'error',
19
19
  'no-multiple-none-start-events': 'error',
20
+ 'no-priority-definition': 'error',
20
21
  'no-propagate-all-parent-variables': 'error',
21
22
  'no-task-schedule': 'error',
22
23
  'no-template': 'error',
24
+ 'no-version-tag': 'error',
23
25
  'no-zeebe-properties': 'error',
24
26
  'no-zeebe-user-task': 'error',
25
27
  'sequence-flow-condition': 'error',
@@ -81,10 +83,13 @@ const camundaCloud86Rules = withConfig({
81
83
  ...omit(camundaCloud85Rules, [
82
84
  'inclusive-gateway',
83
85
  'no-binding-type',
84
- 'no-execution-listeners'
86
+ 'no-execution-listeners',
87
+ 'no-priority-definition',
88
+ 'no-version-tag'
85
89
  ]),
86
90
  'duplicate-execution-listeners': 'error',
87
- 'execution-listener': 'error'
91
+ 'execution-listener': 'error',
92
+ 'priority-definition': 'error'
88
93
  }, { version: '8.6' });
89
94
 
90
95
  const camundaPlatform719Rules = withConfig({
@@ -135,12 +140,15 @@ const rules = {
135
140
  'no-expression': './rules/camunda-cloud/no-expression',
136
141
  'no-loop': './rules/camunda-cloud/no-loop',
137
142
  'no-multiple-none-start-events': './rules/camunda-cloud/no-multiple-none-start-events',
143
+ 'no-priority-definition': './rules/camunda-cloud/no-priority-definition',
138
144
  'no-propagate-all-parent-variables': './rules/camunda-cloud/no-propagate-all-parent-variables',
139
145
  'no-signal-event-sub-process': './rules/camunda-cloud/no-signal-event-sub-process',
140
146
  'no-task-schedule': './rules/camunda-cloud/no-task-schedule',
141
147
  'no-template': './rules/camunda-cloud/no-template',
148
+ 'no-version-tag': './rules/camunda-cloud/no-version-tag',
142
149
  'no-zeebe-properties': './rules/camunda-cloud/no-zeebe-properties',
143
150
  'no-zeebe-user-task': './rules/camunda-cloud/no-zeebe-user-task',
151
+ 'priority-definition': './rules/camunda-cloud/priority-definition',
144
152
  'secrets': './rules/camunda-cloud/secrets',
145
153
  'sequence-flow-condition': './rules/camunda-cloud/sequence-flow-condition',
146
154
  '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.23.0",
3
+ "version": "2.25.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.6.0"
38
38
  },
39
39
  "dependencies": {
40
40
  "@bpmn-io/feel-lint": "^1.2.0",
@@ -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,50 @@
1
+ const { is } = require('bpmnlint-utils');
2
+
3
+ const { hasProperties, findExtensionElement, hasNoExtensionElement } = require('../utils/element');
4
+
5
+ const { reportErrors } = require('../utils/reporter');
6
+
7
+ const { skipInNonExecutableProcess } = require('../utils/rule');
8
+
9
+ const allowedVersion = '8.6';
10
+
11
+ module.exports = skipInNonExecutableProcess(function() {
12
+ function check(node, reporter) {
13
+ if (is(node, 'bpmn:Process')) {
14
+ const errors = hasNoExtensionElement(node, 'zeebe:VersionTag', node, allowedVersion);
15
+
16
+ if (errors && errors.length) {
17
+ reportErrors(node, reporter, errors);
18
+ }
19
+
20
+ return;
21
+ }
22
+
23
+ let extensionElement;
24
+
25
+ if (is(node, 'bpmn:BusinessRuleTask')) {
26
+ extensionElement = findExtensionElement(node, 'zeebe:CalledDecision');
27
+ } else if (is(node, 'bpmn:CallActivity')) {
28
+ extensionElement = findExtensionElement(node, 'zeebe:CalledElement');
29
+ } else if (is(node, 'bpmn:UserTask')) {
30
+ extensionElement = findExtensionElement(node, 'zeebe:FormDefinition');
31
+ }
32
+
33
+ if (extensionElement) {
34
+ const errors = hasProperties(extensionElement, {
35
+ versionTag: {
36
+ allowed: false,
37
+ allowedVersion
38
+ }
39
+ }, node);
40
+
41
+ if (errors && errors.length) {
42
+ reportErrors(node, reporter, errors);
43
+ }
44
+ }
45
+ }
46
+
47
+ return {
48
+ check
49
+ };
50
+ });
@@ -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
+ }