bpmnlint-plugin-camunda-compat 2.15.0 → 2.17.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
@@ -19,10 +19,12 @@ const camundaCloud10Rules = withConfig({
19
19
  'no-task-schedule': 'error',
20
20
  'no-template': 'error',
21
21
  'no-zeebe-properties': 'error',
22
+ 'no-zeebe-user-task': 'error',
22
23
  'sequence-flow-condition': 'error',
23
24
  'start-event-form': 'error',
24
25
  'subscription': 'error',
25
26
  'timer': 'error',
27
+ 'user-task-definition': 'warn',
26
28
  'user-task-form': 'error',
27
29
  'feel': 'error'
28
30
  }, { version: '1.0' });
@@ -64,8 +66,14 @@ const camundaCloud83Rules = withConfig({
64
66
  const camundaCloud84Rules = withConfig(
65
67
  omit(camundaCloud83Rules, 'collapsed-subprocess'), { version: '8.4' });
66
68
 
69
+ const camundaCloud85Rules = withConfig(
70
+ omit(camundaCloud83Rules, [
71
+ 'collapsed-subprocess',
72
+ 'no-zeebe-user-task'
73
+ ]), { version: '8.5' });
74
+
67
75
  const camundaPlatform719Rules = withConfig({
68
- 'history-time-to-live': 'error'
76
+ 'history-time-to-live': 'info'
69
77
  }, {
70
78
  platform: 'camunda-platform',
71
79
  version: '7.19'
@@ -107,6 +115,7 @@ const rules = {
107
115
  'no-task-schedule': './rules/camunda-cloud/no-task-schedule',
108
116
  'no-template': './rules/camunda-cloud/no-template',
109
117
  'no-zeebe-properties': './rules/camunda-cloud/no-zeebe-properties',
118
+ 'no-zeebe-user-task': './rules/camunda-cloud/no-zeebe-user-task',
110
119
  'secrets': './rules/camunda-cloud/secrets',
111
120
  'sequence-flow-condition': './rules/camunda-cloud/sequence-flow-condition',
112
121
  'signal-reference': './rules/camunda-cloud/signal-reference',
@@ -114,52 +123,70 @@ const rules = {
114
123
  'subscription': './rules/camunda-cloud/subscription',
115
124
  'task-schedule': './rules/camunda-cloud/task-schedule',
116
125
  'timer': './rules/camunda-cloud/timer',
126
+ 'user-task-definition': './rules/camunda-cloud/user-task-definition',
117
127
  'user-task-form': './rules/camunda-cloud/user-task-form'
118
128
  };
119
129
 
130
+ const configs = {
131
+ 'camunda-cloud-1-0': {
132
+ rules: camundaCloud10Rules
133
+ },
134
+ 'camunda-cloud-1-1': {
135
+ rules: camundaCloud11Rules
136
+ },
137
+ 'camunda-cloud-1-2': {
138
+ rules: camundaCloud12Rules
139
+ },
140
+ 'camunda-cloud-1-3': {
141
+ rules: camundaCloud13Rules
142
+ },
143
+ 'camunda-cloud-8-0': {
144
+ rules: camundaCloud80Rules
145
+ },
146
+ 'camunda-cloud-8-1': {
147
+ rules: camundaCloud81Rules
148
+ },
149
+ 'camunda-cloud-8-2': {
150
+ rules: camundaCloud82Rules
151
+ },
152
+ 'camunda-cloud-8-3': {
153
+ rules: camundaCloud83Rules
154
+ },
155
+ 'camunda-cloud-8-4': {
156
+ rules: camundaCloud84Rules
157
+ },
158
+ 'camunda-cloud-8-5': {
159
+ rules: camundaCloud85Rules
160
+ },
161
+ 'camunda-platform-7-19': {
162
+ rules: camundaPlatform719Rules
163
+ },
164
+ 'camunda-platform-7-20': {
165
+ rules: camundaPlatform720Rules
166
+ },
167
+ 'camunda-platform-7-21': {
168
+ rules: camundaPlatform721Rules
169
+ }
170
+ };
171
+
120
172
  module.exports = {
121
173
  configs: {
122
- 'camunda-cloud-1-0': {
123
- rules: camundaCloud10Rules
124
- },
125
- 'camunda-cloud-1-1': {
126
- rules: camundaCloud11Rules
127
- },
128
- 'camunda-cloud-1-2': {
129
- rules: camundaCloud12Rules
130
- },
131
- 'camunda-cloud-1-3': {
132
- rules: camundaCloud13Rules
133
- },
134
- 'camunda-cloud-8-0': {
135
- rules: camundaCloud80Rules
136
- },
137
- 'camunda-cloud-8-1': {
138
- rules: camundaCloud81Rules
139
- },
140
- 'camunda-cloud-8-2': {
141
- rules: camundaCloud82Rules
142
- },
143
- 'camunda-cloud-8-3': {
144
- rules: camundaCloud83Rules
145
- },
146
- 'camunda-cloud-8-4': {
147
- rules: camundaCloud84Rules
148
- },
149
- 'camunda-platform-7-19': {
150
- rules: camundaPlatform719Rules
151
- },
152
- 'camunda-platform-7-20': {
153
- rules: camundaPlatform720Rules
154
- },
155
- 'camunda-platform-7-21': {
156
- rules: camundaPlatform721Rules
157
- },
174
+ ...configs,
158
175
  'all': {
159
176
  rules: Object.keys(rules).reduce((allRules, rule) => {
160
177
  return {
161
178
  ...allRules,
162
- [ rule ]: 'error'
179
+ [ rule ]: Object.values(configs).reduce((type, { rules }) => {
180
+ if (type) {
181
+ return type;
182
+ }
183
+
184
+ if (rules[ rule ]) {
185
+ return Array.isArray(rules[ rule ]) ? rules[ rule ][0] : rules[ rule ];
186
+ }
187
+
188
+ return type;
189
+ }, null)
163
190
  };
164
191
  }, {})
165
192
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bpmnlint-plugin-camunda-compat",
3
- "version": "2.15.0",
3
+ "version": "2.17.0",
4
4
  "description": "A bpmnlint plug-in for Camunda compatibility",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -24,17 +24,17 @@
24
24
  },
25
25
  "license": "MIT",
26
26
  "devDependencies": {
27
- "bpmn-moddle": "^8.0.1",
28
- "bpmnlint": "^9.2.0",
27
+ "bpmn-moddle": "^8.1.0",
28
+ "bpmnlint": "^10.2.0",
29
29
  "camunda-bpmn-moddle": "^7.0.1",
30
- "chai": "^4.3.10",
31
- "eslint": "^8.51.0",
30
+ "chai": "^4.4.1",
31
+ "eslint": "^8.56.0",
32
32
  "eslint-plugin-bpmn-io": "^1.0.0",
33
33
  "mocha": "^10.2.0",
34
34
  "modeler-moddle": "^0.2.0",
35
- "sinon": "^16.1.0",
35
+ "sinon": "^17.0.1",
36
36
  "sinon-chai": "^3.7.0",
37
- "zeebe-bpmn-moddle": "^1.0.0"
37
+ "zeebe-bpmn-moddle": "^1.1.0"
38
38
  },
39
39
  "dependencies": {
40
40
  "@bpmn-io/feel-lint": "^1.2.0",
@@ -62,6 +62,6 @@ module.exports = skipInNonExecutableProcess(function() {
62
62
  };
63
63
  });
64
64
 
65
- function isNoEscalationRefAllowed(node, version) {
66
- return is(node, 'bpmn:BoundaryEvent');
65
+ function isNoEscalationRefAllowed(node) {
66
+ return isAny(node, [ 'bpmn:CatchEvent', 'bpmn:BoundaryEvent' ]);
67
67
  }
@@ -0,0 +1,27 @@
1
+ const { is } = require('bpmnlint-utils');
2
+
3
+ const { reportErrors } = require('../utils/reporter');
4
+
5
+ const { skipInNonExecutableProcess } = require('../utils/rule');
6
+
7
+ const { hasNoExtensionElement } = require('../utils/element');
8
+
9
+ const ALLOWED_VERSION = '8.5';
10
+
11
+ module.exports = skipInNonExecutableProcess(function() {
12
+ function check(node, reporter) {
13
+ if (!is(node, 'bpmn:UserTask')) {
14
+ return;
15
+ }
16
+
17
+ const errors = hasNoExtensionElement(node, 'zeebe:UserTask', node, ALLOWED_VERSION);
18
+
19
+ if (errors && errors.length) {
20
+ reportErrors(node, reporter, errors);
21
+ }
22
+ }
23
+
24
+ return {
25
+ check
26
+ };
27
+ });
@@ -0,0 +1,25 @@
1
+ const { is } = require('bpmnlint-utils');
2
+
3
+ const { hasExtensionElement } = 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 (!is(node, 'bpmn:UserTask')) {
12
+ return;
13
+ }
14
+
15
+ let errors = hasExtensionElement(node, 'zeebe:FormDefinition', node);
16
+
17
+ if (errors && errors.length) {
18
+ reportErrors(node, reporter, errors);
19
+ }
20
+ }
21
+
22
+ return {
23
+ check
24
+ };
25
+ });
@@ -5,8 +5,7 @@ const {
5
5
  findExtensionElements,
6
6
  findParent,
7
7
  hasProperties,
8
- hasProperty,
9
- hasExtensionElement
8
+ hasProperty
10
9
  } = require('../utils/element');
11
10
 
12
11
  const { reportErrors } = require('../utils/reporter');
@@ -20,23 +19,41 @@ const formIdAllowedVersions = {
20
19
  web: '8.0'
21
20
  };
22
21
 
22
+ const ZEEBE_USER_TASK_VERSION = '8.5';
23
+
23
24
  module.exports = skipInNonExecutableProcess(function({ modeler = 'desktop', version }) {
24
25
  function check(node, reporter) {
25
26
  if (!is(node, 'bpmn:UserTask')) {
26
27
  return;
27
28
  }
28
29
 
29
- let errors = hasExtensionElement(node, 'zeebe:FormDefinition', node);
30
-
31
- if (errors && errors.length) {
32
- reportErrors(node, reporter, errors);
30
+ const formDefinition = findExtensionElement(node, 'zeebe:FormDefinition');
33
31
 
32
+ if (!formDefinition) {
34
33
  return;
35
34
  }
36
35
 
37
- const formDefinition = findExtensionElement(node, 'zeebe:FormDefinition');
36
+ // handle Zebee User Task
37
+ if (isZeebeUserTask(node)) {
38
+
39
+ // handled by no-zeebe-user-task rule
40
+ if (!greaterOrEqual(version, ZEEBE_USER_TASK_VERSION)) {
41
+ return;
42
+ }
43
+
44
+ const errors = hasProperty(formDefinition, [
45
+ 'externalReference',
46
+ 'formId'
47
+ ], node) || [];
38
48
 
39
- errors = [];
49
+ if (errors.length) {
50
+ reportErrors(node, reporter, errors);
51
+ }
52
+
53
+ return;
54
+ }
55
+
56
+ let errors;
40
57
 
41
58
  const formIdAllowedVersion = formIdAllowedVersions[ modeler ];
42
59
 
@@ -118,4 +135,8 @@ function findUserTaskForm(node, formKey) {
118
135
 
119
136
  function isFormIdAllowed(version, formIdAllowedVersion) {
120
137
  return greaterOrEqual(version, formIdAllowedVersion);
121
- }
138
+ }
139
+
140
+ function isZeebeUserTask(node) {
141
+ return !!findExtensionElement(node, 'zeebe:UserTask');
142
+ }
@@ -1,9 +1,5 @@
1
1
  const { is } = require('bpmnlint-utils');
2
2
 
3
- const { hasProperties } = require('../utils/element');
4
-
5
- const { reportErrors } = require('../utils/reporter');
6
-
7
3
  const { skipInNonExecutableProcess } = require('../utils/rule');
8
4
 
9
5
  module.exports = skipInNonExecutableProcess(function() {
@@ -13,16 +9,9 @@ module.exports = skipInNonExecutableProcess(function() {
13
9
  return;
14
10
  }
15
11
 
16
- let errors = hasProperties(node, {
17
- 'historyTimeToLive': {
18
- required: true
19
- }
20
- }, node);
21
-
22
- if (errors) {
23
- reportErrors(node, reporter, errors);
12
+ if (!node.get('camunda:historyTimeToLive')) {
13
+ reporter.report(node.id, 'Property <historyTimeToLive> should be configured on <bpmn:Process> or engine level.', [ 'historyTimeToLive' ]);
24
14
  }
25
- return;
26
15
  }
27
16
 
28
17
  return {