-
Notifications
You must be signed in to change notification settings - Fork 2
/
duplicate-task-headers.js
59 lines (45 loc) · 1.18 KB
/
duplicate-task-headers.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
const {
is,
isAny
} = require('bpmnlint-utils');
const {
findExtensionElement,
getMessageEventDefinition,
hasDuplicatedPropertyValues
} = require('../utils/element');
const { reportErrors } = require('../utils/reporter');
const { skipInNonExecutableProcess } = require('../utils/rule');
module.exports = skipInNonExecutableProcess(function() {
function check(node, reporter) {
if (!is(node, 'bpmn:UserTask') && !isZeebeServiceTask(node)) {
return;
}
const taskHeaders = findExtensionElement(node, 'zeebe:TaskHeaders');
if (!taskHeaders) {
return;
}
const errors = hasDuplicatedPropertyValues(taskHeaders, 'values', 'key', node);
if (errors && errors.length) {
reportErrors(node, reporter, errors);
}
}
return {
check
};
});
// helpers //////////
function isZeebeServiceTask(element) {
if (is(element, 'zeebe:ZeebeServiceTask')) {
return true;
}
if (isAny(element, [
'bpmn:EndEvent',
'bpmn:IntermediateThrowEvent'
])) {
return getMessageEventDefinition(element);
}
if (is(element, 'bpmn:BusinessRuleTask')) {
return findExtensionElement(element, 'zeebe:TaskDefinition');
}
return false;
}