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 +65 -38
- package/package.json +7 -7
- package/rules/camunda-cloud/escalation-reference.js +2 -2
- package/rules/camunda-cloud/no-zeebe-user-task.js +27 -0
- package/rules/camunda-cloud/user-task-definition.js +25 -0
- package/rules/camunda-cloud/user-task-form.js +30 -9
- package/rules/camunda-platform/history-time-to-live.js +2 -13
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': '
|
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
|
-
|
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 ]:
|
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.
|
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
|
28
|
-
"bpmnlint": "^
|
27
|
+
"bpmn-moddle": "^8.1.0",
|
28
|
+
"bpmnlint": "^10.2.0",
|
29
29
|
"camunda-bpmn-moddle": "^7.0.1",
|
30
|
-
"chai": "^4.
|
31
|
-
"eslint": "^8.
|
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": "^
|
35
|
+
"sinon": "^17.0.1",
|
36
36
|
"sinon-chai": "^3.7.0",
|
37
|
-
"zeebe-bpmn-moddle": "^1.
|
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
|
66
|
-
return
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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 {
|