bpmnlint-plugin-camunda-compat 2.36.0 → 2.37.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.
Files changed (64) hide show
  1. package/LICENSE +20 -20
  2. package/README.md +88 -39
  3. package/index.js +286 -286
  4. package/package.json +53 -53
  5. package/rules/camunda-cloud/ad-hoc-sub-process.js +60 -60
  6. package/rules/camunda-cloud/called-element.js +44 -44
  7. package/rules/camunda-cloud/collapsed-subprocess.js +40 -40
  8. package/rules/camunda-cloud/connector-properties/config.js +90 -90
  9. package/rules/camunda-cloud/connector-properties/index.js +47 -47
  10. package/rules/camunda-cloud/duplicate-execution-listeners.js +33 -33
  11. package/rules/camunda-cloud/duplicate-task-headers.js +58 -58
  12. package/rules/camunda-cloud/element-type/config.js +67 -67
  13. package/rules/camunda-cloud/element-type/index.js +135 -135
  14. package/rules/camunda-cloud/error-reference.js +72 -72
  15. package/rules/camunda-cloud/escalation-boundary-event-attached-to-ref.js +47 -47
  16. package/rules/camunda-cloud/escalation-reference.js +67 -67
  17. package/rules/camunda-cloud/event-based-gateway-target.js +38 -38
  18. package/rules/camunda-cloud/executable-process.js +61 -61
  19. package/rules/camunda-cloud/execution-listener.js +33 -33
  20. package/rules/camunda-cloud/feel.js +88 -86
  21. package/rules/camunda-cloud/implementation/config.js +19 -19
  22. package/rules/camunda-cloud/implementation/index.js +218 -218
  23. package/rules/camunda-cloud/inclusive-gateway.js +35 -35
  24. package/rules/camunda-cloud/link-event.js +142 -142
  25. package/rules/camunda-cloud/loop-characteristics.js +66 -66
  26. package/rules/camunda-cloud/message-reference.js +61 -61
  27. package/rules/camunda-cloud/no-binding-type.js +43 -43
  28. package/rules/camunda-cloud/no-candidate-users.js +38 -38
  29. package/rules/camunda-cloud/no-execution-listeners.js +21 -21
  30. package/rules/camunda-cloud/no-expression.js +173 -173
  31. package/rules/camunda-cloud/no-loop.js +316 -316
  32. package/rules/camunda-cloud/no-multiple-none-start-events.js +41 -41
  33. package/rules/camunda-cloud/no-priority-definition.js +18 -18
  34. package/rules/camunda-cloud/no-propagate-all-parent-variables.js +44 -44
  35. package/rules/camunda-cloud/no-signal-event-sub-process.js +45 -45
  36. package/rules/camunda-cloud/no-task-listeners.js +21 -21
  37. package/rules/camunda-cloud/no-task-schedule.js +18 -18
  38. package/rules/camunda-cloud/no-template.js +23 -23
  39. package/rules/camunda-cloud/no-version-tag.js +24 -24
  40. package/rules/camunda-cloud/no-zeebe-properties.js +18 -18
  41. package/rules/camunda-cloud/no-zeebe-user-task.js +27 -27
  42. package/rules/camunda-cloud/priority-definition.js +61 -61
  43. package/rules/camunda-cloud/secrets.js +119 -119
  44. package/rules/camunda-cloud/sequence-flow-condition.js +56 -56
  45. package/rules/camunda-cloud/signal-reference.js +64 -64
  46. package/rules/camunda-cloud/start-event-form.js +97 -97
  47. package/rules/camunda-cloud/subscription.js +65 -65
  48. package/rules/camunda-cloud/task-listener.js +39 -39
  49. package/rules/camunda-cloud/task-schedule.js +67 -67
  50. package/rules/camunda-cloud/timer/config.js +46 -46
  51. package/rules/camunda-cloud/timer/index.js +183 -183
  52. package/rules/camunda-cloud/user-task-definition.js +24 -24
  53. package/rules/camunda-cloud/user-task-form.js +142 -142
  54. package/rules/camunda-cloud/wait-for-completion.js +46 -46
  55. package/rules/camunda-cloud/zeebe-user-task.js +30 -30
  56. package/rules/camunda-platform/history-time-to-live.js +24 -24
  57. package/rules/helper.js +38 -38
  58. package/rules/utils/cron.js +95 -95
  59. package/rules/utils/element.js +533 -533
  60. package/rules/utils/error-types.js +26 -26
  61. package/rules/utils/iso8601.js +52 -52
  62. package/rules/utils/reporter.js +37 -37
  63. package/rules/utils/rule.js +46 -46
  64. package/rules/utils/version.js +4 -4
@@ -1,33 +1,33 @@
1
- const {
2
- findExtensionElement,
3
- hasDuplicatedPropertiesValues
4
- } = require('../utils/element');
5
-
6
- const { reportErrors } = require('../utils/reporter');
7
-
8
- const { skipInNonExecutableProcess } = require('../utils/rule');
9
-
10
- module.exports = skipInNonExecutableProcess(function() {
11
- function check(node, reporter) {
12
- const executionListeners = findExtensionElement(node, 'zeebe:ExecutionListeners');
13
-
14
- if (!executionListeners) {
15
- return;
16
- }
17
-
18
- const errors = hasDuplicatedExecutionListeners(executionListeners, node);
19
-
20
- if (errors && errors.length) {
21
- reportErrors(node, reporter, errors);
22
- }
23
- }
24
-
25
- return {
26
- check
27
- };
28
- });
29
-
30
- // helpers //////////
31
- function hasDuplicatedExecutionListeners(executionListeners, parentNode = null) {
32
- return hasDuplicatedPropertiesValues(executionListeners, 'listeners', [ 'eventType', 'type' ], parentNode);
33
- }
1
+ const {
2
+ findExtensionElement,
3
+ hasDuplicatedPropertiesValues
4
+ } = require('../utils/element');
5
+
6
+ const { reportErrors } = require('../utils/reporter');
7
+
8
+ const { skipInNonExecutableProcess } = require('../utils/rule');
9
+
10
+ module.exports = skipInNonExecutableProcess(function() {
11
+ function check(node, reporter) {
12
+ const executionListeners = findExtensionElement(node, 'zeebe:ExecutionListeners');
13
+
14
+ if (!executionListeners) {
15
+ return;
16
+ }
17
+
18
+ const errors = hasDuplicatedExecutionListeners(executionListeners, node);
19
+
20
+ if (errors && errors.length) {
21
+ reportErrors(node, reporter, errors);
22
+ }
23
+ }
24
+
25
+ return {
26
+ check
27
+ };
28
+ });
29
+
30
+ // helpers //////////
31
+ function hasDuplicatedExecutionListeners(executionListeners, parentNode = null) {
32
+ return hasDuplicatedPropertiesValues(executionListeners, 'listeners', [ 'eventType', 'type' ], parentNode);
33
+ }
@@ -1,59 +1,59 @@
1
- const {
2
- is,
3
- isAny
4
- } = require('bpmnlint-utils');
5
-
6
- const {
7
- findExtensionElement,
8
- getMessageEventDefinition,
9
- hasDuplicatedPropertyValues
10
- } = require('../utils/element');
11
-
12
- const { reportErrors } = require('../utils/reporter');
13
-
14
- const { skipInNonExecutableProcess } = require('../utils/rule');
15
-
16
- module.exports = skipInNonExecutableProcess(function() {
17
- function check(node, reporter) {
18
- if (!is(node, 'bpmn:UserTask') && !isZeebeServiceTask(node)) {
19
- return;
20
- }
21
-
22
- const taskHeaders = findExtensionElement(node, 'zeebe:TaskHeaders');
23
-
24
- if (!taskHeaders) {
25
- return;
26
- }
27
-
28
- const errors = hasDuplicatedPropertyValues(taskHeaders, 'values', 'key', node);
29
-
30
- if (errors && errors.length) {
31
- reportErrors(node, reporter, errors);
32
- }
33
- }
34
-
35
- return {
36
- check
37
- };
38
- });
39
-
40
- // helpers //////////
41
-
42
- function isZeebeServiceTask(element) {
43
- if (is(element, 'zeebe:ZeebeServiceTask')) {
44
- return true;
45
- }
46
-
47
- if (isAny(element, [
48
- 'bpmn:EndEvent',
49
- 'bpmn:IntermediateThrowEvent'
50
- ])) {
51
- return getMessageEventDefinition(element);
52
- }
53
-
54
- if (is(element, 'bpmn:BusinessRuleTask')) {
55
- return findExtensionElement(element, 'zeebe:TaskDefinition');
56
- }
57
-
58
- return false;
1
+ const {
2
+ is,
3
+ isAny
4
+ } = require('bpmnlint-utils');
5
+
6
+ const {
7
+ findExtensionElement,
8
+ getMessageEventDefinition,
9
+ hasDuplicatedPropertyValues
10
+ } = require('../utils/element');
11
+
12
+ const { reportErrors } = require('../utils/reporter');
13
+
14
+ const { skipInNonExecutableProcess } = require('../utils/rule');
15
+
16
+ module.exports = skipInNonExecutableProcess(function() {
17
+ function check(node, reporter) {
18
+ if (!is(node, 'bpmn:UserTask') && !isZeebeServiceTask(node)) {
19
+ return;
20
+ }
21
+
22
+ const taskHeaders = findExtensionElement(node, 'zeebe:TaskHeaders');
23
+
24
+ if (!taskHeaders) {
25
+ return;
26
+ }
27
+
28
+ const errors = hasDuplicatedPropertyValues(taskHeaders, 'values', 'key', node);
29
+
30
+ if (errors && errors.length) {
31
+ reportErrors(node, reporter, errors);
32
+ }
33
+ }
34
+
35
+ return {
36
+ check
37
+ };
38
+ });
39
+
40
+ // helpers //////////
41
+
42
+ function isZeebeServiceTask(element) {
43
+ if (is(element, 'zeebe:ZeebeServiceTask')) {
44
+ return true;
45
+ }
46
+
47
+ if (isAny(element, [
48
+ 'bpmn:EndEvent',
49
+ 'bpmn:IntermediateThrowEvent'
50
+ ])) {
51
+ return getMessageEventDefinition(element);
52
+ }
53
+
54
+ if (is(element, 'bpmn:BusinessRuleTask')) {
55
+ return findExtensionElement(element, 'zeebe:TaskDefinition');
56
+ }
57
+
58
+ return false;
59
59
  }
@@ -1,68 +1,68 @@
1
- module.exports = {
2
- 'bpmn:Association': '1.0',
3
- 'bpmn:BoundaryEvent': {
4
- 'bpmn:CompensateEventDefinition': '8.5',
5
- 'bpmn:ErrorEventDefinition': '1.0',
6
- 'bpmn:EscalationEventDefinition': '8.2',
7
- 'bpmn:MessageEventDefinition': '1.0',
8
- 'bpmn:TimerEventDefinition': '1.0',
9
- 'bpmn:SignalEventDefinition': '8.3',
10
- },
11
- 'bpmn:BusinessRuleTask': '1.1',
12
- 'bpmn:CallActivity': '1.0',
13
- 'bpmn:Collaboration': '1.0',
14
- 'bpmn:DataObject': '8.0',
15
- 'bpmn:DataObjectReference': '8.0',
16
- 'bpmn:DataStoreReference': '8.0',
17
- 'bpmn:Definitions': '1.0',
18
- 'bpmn:EndEvent': {
19
- '_': '1.0',
20
- 'bpmn:CompensateEventDefinition': '8.5',
21
- 'bpmn:ErrorEventDefinition': '1.0',
22
- 'bpmn:EscalationEventDefinition': '8.2',
23
- 'bpmn:MessageEventDefinition': '1.2',
24
- 'bpmn:SignalEventDefinition': '8.3',
25
- 'bpmn:TerminateEventDefinition': '8.1'
26
- },
27
- 'bpmn:EventBasedGateway': '1.0',
28
- 'bpmn:ExclusiveGateway': '1.0',
29
- 'bpmn:Group': '1.0',
30
- 'bpmn:InclusiveGateway': '8.1',
31
- 'bpmn:IntermediateCatchEvent': {
32
- 'bpmn:MessageEventDefinition': '1.0',
33
- 'bpmn:LinkEventDefinition': '8.2',
34
- 'bpmn:TimerEventDefinition': '1.0',
35
- 'bpmn:SignalEventDefinition': '8.3'
36
- },
37
- 'bpmn:IntermediateThrowEvent': {
38
- '_': '1.1',
39
- 'bpmn:CompensateEventDefinition': '8.5',
40
- 'bpmn:EscalationEventDefinition': '8.2',
41
- 'bpmn:LinkEventDefinition': '8.2',
42
- 'bpmn:MessageEventDefinition': '1.2',
43
- 'bpmn:SignalEventDefinition': '8.3'
44
- },
45
- 'bpmn:ManualTask': '1.1',
46
- 'bpmn:MessageFlow': '1.0',
47
- 'bpmn:ParallelGateway': '1.0',
48
- 'bpmn:Participant': '1.0',
49
- 'bpmn:Process': '1.0',
50
- 'bpmn:ReceiveTask': '1.0',
51
- 'bpmn:ScriptTask': '1.1',
52
- 'bpmn:SendTask': '1.1',
53
- 'bpmn:SequenceFlow': '1.0',
54
- 'bpmn:ServiceTask': '1.0',
55
- 'bpmn:StartEvent': {
56
- '_': '1.0',
57
- 'bpmn:ErrorEventDefinition': '1.0',
58
- 'bpmn:EscalationEventDefinition': '8.2',
59
- 'bpmn:MessageEventDefinition': '1.0',
60
- 'bpmn:SignalEventDefinition': '8.2',
61
- 'bpmn:TimerEventDefinition': '1.0'
62
- },
63
- 'bpmn:SubProcess': '1.0',
64
- 'bpmn:Task': '8.2',
65
- 'bpmn:TextAnnotation': '1.0',
66
- 'bpmn:UserTask': '1.0',
67
- 'bpmn:AdHocSubProcess': '8.7',
1
+ module.exports = {
2
+ 'bpmn:Association': '1.0',
3
+ 'bpmn:BoundaryEvent': {
4
+ 'bpmn:CompensateEventDefinition': '8.5',
5
+ 'bpmn:ErrorEventDefinition': '1.0',
6
+ 'bpmn:EscalationEventDefinition': '8.2',
7
+ 'bpmn:MessageEventDefinition': '1.0',
8
+ 'bpmn:TimerEventDefinition': '1.0',
9
+ 'bpmn:SignalEventDefinition': '8.3',
10
+ },
11
+ 'bpmn:BusinessRuleTask': '1.1',
12
+ 'bpmn:CallActivity': '1.0',
13
+ 'bpmn:Collaboration': '1.0',
14
+ 'bpmn:DataObject': '8.0',
15
+ 'bpmn:DataObjectReference': '8.0',
16
+ 'bpmn:DataStoreReference': '8.0',
17
+ 'bpmn:Definitions': '1.0',
18
+ 'bpmn:EndEvent': {
19
+ '_': '1.0',
20
+ 'bpmn:CompensateEventDefinition': '8.5',
21
+ 'bpmn:ErrorEventDefinition': '1.0',
22
+ 'bpmn:EscalationEventDefinition': '8.2',
23
+ 'bpmn:MessageEventDefinition': '1.2',
24
+ 'bpmn:SignalEventDefinition': '8.3',
25
+ 'bpmn:TerminateEventDefinition': '8.1'
26
+ },
27
+ 'bpmn:EventBasedGateway': '1.0',
28
+ 'bpmn:ExclusiveGateway': '1.0',
29
+ 'bpmn:Group': '1.0',
30
+ 'bpmn:InclusiveGateway': '8.1',
31
+ 'bpmn:IntermediateCatchEvent': {
32
+ 'bpmn:MessageEventDefinition': '1.0',
33
+ 'bpmn:LinkEventDefinition': '8.2',
34
+ 'bpmn:TimerEventDefinition': '1.0',
35
+ 'bpmn:SignalEventDefinition': '8.3'
36
+ },
37
+ 'bpmn:IntermediateThrowEvent': {
38
+ '_': '1.1',
39
+ 'bpmn:CompensateEventDefinition': '8.5',
40
+ 'bpmn:EscalationEventDefinition': '8.2',
41
+ 'bpmn:LinkEventDefinition': '8.2',
42
+ 'bpmn:MessageEventDefinition': '1.2',
43
+ 'bpmn:SignalEventDefinition': '8.3'
44
+ },
45
+ 'bpmn:ManualTask': '1.1',
46
+ 'bpmn:MessageFlow': '1.0',
47
+ 'bpmn:ParallelGateway': '1.0',
48
+ 'bpmn:Participant': '1.0',
49
+ 'bpmn:Process': '1.0',
50
+ 'bpmn:ReceiveTask': '1.0',
51
+ 'bpmn:ScriptTask': '1.1',
52
+ 'bpmn:SendTask': '1.1',
53
+ 'bpmn:SequenceFlow': '1.0',
54
+ 'bpmn:ServiceTask': '1.0',
55
+ 'bpmn:StartEvent': {
56
+ '_': '1.0',
57
+ 'bpmn:ErrorEventDefinition': '1.0',
58
+ 'bpmn:EscalationEventDefinition': '8.2',
59
+ 'bpmn:MessageEventDefinition': '1.0',
60
+ 'bpmn:SignalEventDefinition': '8.2',
61
+ 'bpmn:TimerEventDefinition': '1.0'
62
+ },
63
+ 'bpmn:SubProcess': '1.0',
64
+ 'bpmn:Task': '8.2',
65
+ 'bpmn:TextAnnotation': '1.0',
66
+ 'bpmn:UserTask': '1.0',
67
+ 'bpmn:AdHocSubProcess': '8.7',
68
68
  };
@@ -1,136 +1,136 @@
1
- const { isString } = require('min-dash');
2
-
3
- const { isAny } = require('bpmnlint-utils');
4
-
5
- const config = require('./config');
6
-
7
- const { greaterOrEqual } = require('../../utils/version');
8
-
9
- const { getEventDefinition } = require('../../utils/element');
10
-
11
- const { ERROR_TYPES } = require('../../utils/error-types');
12
-
13
- const { reportErrors } = require('../../utils/reporter');
14
-
15
- const { skipInNonExecutableProcess } = require('../../utils/rule');
16
-
17
- const { annotateRule } = require('../../helper');
18
-
19
- module.exports = skipInNonExecutableProcess(function({ version }) {
20
- function check(node, reporter) {
21
- if (!isAny(node, [ 'bpmn:FlowElement', 'bpmn:FlowElementsContainer' ])) {
22
- return;
23
- }
24
-
25
- const element = config[ node.$type ];
26
-
27
- if (!element || (isString(element) && !greaterOrEqual(version, element))) {
28
-
29
- // (1) Element not allowed
30
- const allowedVersion = element || null;
31
-
32
- let message = `Element of type <${ node.$type }> not allowed`;
33
-
34
- let data = {
35
- type: ERROR_TYPES.ELEMENT_TYPE_NOT_ALLOWED,
36
- node,
37
- parentNode: null
38
- };
39
-
40
- if (allowedVersion) {
41
- message = `Element of type <${ node.$type }> only allowed by Camunda ${ allowedVersion } or newer`;
42
-
43
- data = {
44
- ...data,
45
- allowedVersion
46
- };
47
- }
48
-
49
- const error = {
50
- message,
51
- path: null,
52
- data
53
- };
54
-
55
- reportErrors(node, reporter, error);
56
-
57
- return;
58
- }
59
-
60
- if (!isAny(node, [ 'bpmn:CatchEvent', 'bpmn:ThrowEvent' ])) {
61
- return;
62
- }
63
-
64
- const eventDefinition = getEventDefinition(node);
65
-
66
- if (eventDefinition) {
67
- if (!element[ eventDefinition.$type ] || !greaterOrEqual(version, element[ eventDefinition.$type ])) {
68
-
69
- // (2) Element with event definition not allowed
70
- const allowedVersion = element[ eventDefinition.$type ] || null;
71
-
72
- let message = `Element of type <${ node.$type }> with event definition of type <${ eventDefinition.$type }> not allowed`;
73
-
74
- let data = {
75
- type: ERROR_TYPES.ELEMENT_TYPE_NOT_ALLOWED,
76
- node,
77
- parentNode: null,
78
- eventDefinition
79
- };
80
-
81
- if (allowedVersion) {
82
- message = `Element of type <${ node.$type }> with event definition of type <${ eventDefinition.$type }> only allowed by Camunda ${ allowedVersion } or newer`;
83
-
84
- data = {
85
- ...data,
86
- allowedVersion
87
- };
88
- }
89
-
90
- const error = {
91
- message,
92
- path: null,
93
- data
94
- };
95
-
96
- reportErrors(node, reporter, error);
97
- }
98
- } else {
99
- if (!element[ '_' ] || !greaterOrEqual(version, element[ '_' ])) {
100
-
101
- // (3) Element without event definition not allowed
102
- const allowedVersion = element[ '_' ] || null;
103
-
104
- let message = `Element of type <${ node.$type }> with no event definition not allowed`;
105
-
106
- let data = {
107
- type: ERROR_TYPES.ELEMENT_TYPE_NOT_ALLOWED,
108
- node,
109
- parentNode: null,
110
- eventDefinition
111
- };
112
-
113
- if (allowedVersion) {
114
- message = `Element of type <${ node.$type }> with no event definition only allowed by Camunda ${ allowedVersion } or newer`;
115
-
116
- data = {
117
- ...data,
118
- allowedVersion
119
- };
120
- }
121
-
122
- const error = {
123
- message,
124
- path: null,
125
- data
126
- };
127
-
128
- reportErrors(node, reporter, error);
129
- }
130
- }
131
- }
132
-
133
- return annotateRule('element-type', {
134
- check
135
- });
1
+ const { isString } = require('min-dash');
2
+
3
+ const { isAny } = require('bpmnlint-utils');
4
+
5
+ const config = require('./config');
6
+
7
+ const { greaterOrEqual } = require('../../utils/version');
8
+
9
+ const { getEventDefinition } = require('../../utils/element');
10
+
11
+ const { ERROR_TYPES } = require('../../utils/error-types');
12
+
13
+ const { reportErrors } = require('../../utils/reporter');
14
+
15
+ const { skipInNonExecutableProcess } = require('../../utils/rule');
16
+
17
+ const { annotateRule } = require('../../helper');
18
+
19
+ module.exports = skipInNonExecutableProcess(function({ version }) {
20
+ function check(node, reporter) {
21
+ if (!isAny(node, [ 'bpmn:FlowElement', 'bpmn:FlowElementsContainer' ])) {
22
+ return;
23
+ }
24
+
25
+ const element = config[ node.$type ];
26
+
27
+ if (!element || (isString(element) && !greaterOrEqual(version, element))) {
28
+
29
+ // (1) Element not allowed
30
+ const allowedVersion = element || null;
31
+
32
+ let message = `Element of type <${ node.$type }> not allowed`;
33
+
34
+ let data = {
35
+ type: ERROR_TYPES.ELEMENT_TYPE_NOT_ALLOWED,
36
+ node,
37
+ parentNode: null
38
+ };
39
+
40
+ if (allowedVersion) {
41
+ message = `Element of type <${ node.$type }> only allowed by Camunda ${ allowedVersion } or newer`;
42
+
43
+ data = {
44
+ ...data,
45
+ allowedVersion
46
+ };
47
+ }
48
+
49
+ const error = {
50
+ message,
51
+ path: null,
52
+ data
53
+ };
54
+
55
+ reportErrors(node, reporter, error);
56
+
57
+ return;
58
+ }
59
+
60
+ if (!isAny(node, [ 'bpmn:CatchEvent', 'bpmn:ThrowEvent' ])) {
61
+ return;
62
+ }
63
+
64
+ const eventDefinition = getEventDefinition(node);
65
+
66
+ if (eventDefinition) {
67
+ if (!element[ eventDefinition.$type ] || !greaterOrEqual(version, element[ eventDefinition.$type ])) {
68
+
69
+ // (2) Element with event definition not allowed
70
+ const allowedVersion = element[ eventDefinition.$type ] || null;
71
+
72
+ let message = `Element of type <${ node.$type }> with event definition of type <${ eventDefinition.$type }> not allowed`;
73
+
74
+ let data = {
75
+ type: ERROR_TYPES.ELEMENT_TYPE_NOT_ALLOWED,
76
+ node,
77
+ parentNode: null,
78
+ eventDefinition
79
+ };
80
+
81
+ if (allowedVersion) {
82
+ message = `Element of type <${ node.$type }> with event definition of type <${ eventDefinition.$type }> only allowed by Camunda ${ allowedVersion } or newer`;
83
+
84
+ data = {
85
+ ...data,
86
+ allowedVersion
87
+ };
88
+ }
89
+
90
+ const error = {
91
+ message,
92
+ path: null,
93
+ data
94
+ };
95
+
96
+ reportErrors(node, reporter, error);
97
+ }
98
+ } else {
99
+ if (!element[ '_' ] || !greaterOrEqual(version, element[ '_' ])) {
100
+
101
+ // (3) Element without event definition not allowed
102
+ const allowedVersion = element[ '_' ] || null;
103
+
104
+ let message = `Element of type <${ node.$type }> with no event definition not allowed`;
105
+
106
+ let data = {
107
+ type: ERROR_TYPES.ELEMENT_TYPE_NOT_ALLOWED,
108
+ node,
109
+ parentNode: null,
110
+ eventDefinition
111
+ };
112
+
113
+ if (allowedVersion) {
114
+ message = `Element of type <${ node.$type }> with no event definition only allowed by Camunda ${ allowedVersion } or newer`;
115
+
116
+ data = {
117
+ ...data,
118
+ allowedVersion
119
+ };
120
+ }
121
+
122
+ const error = {
123
+ message,
124
+ path: null,
125
+ data
126
+ };
127
+
128
+ reportErrors(node, reporter, error);
129
+ }
130
+ }
131
+ }
132
+
133
+ return annotateRule('element-type', {
134
+ check
135
+ });
136
136
  });