bpmn-js 18.2.0 → 18.3.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/LICENSE +23 -23
- package/README.md +95 -95
- package/dist/assets/bpmn-js.css +145 -145
- package/dist/bpmn-modeler.development.js +38704 -38477
- package/dist/bpmn-modeler.production.min.js +11 -11
- package/dist/bpmn-navigated-viewer.development.js +21139 -21139
- package/dist/bpmn-navigated-viewer.production.min.js +1 -1
- package/dist/bpmn-viewer.development.js +21080 -21080
- package/dist/bpmn-viewer.production.min.js +1 -1
- package/lib/BaseModeler.d.ts +15 -15
- package/lib/BaseModeler.js +79 -79
- package/lib/BaseViewer.d.ts +352 -352
- package/lib/BaseViewer.js +858 -858
- package/lib/Modeler.d.ts +86 -86
- package/lib/Modeler.js +206 -206
- package/lib/NavigatedViewer.d.ts +11 -11
- package/lib/NavigatedViewer.js +37 -37
- package/lib/Viewer.d.ts +47 -47
- package/lib/Viewer.js +76 -76
- package/lib/core/index.d.ts +10 -10
- package/lib/core/index.js +8 -8
- package/lib/draw/BpmnRenderUtil.d.ts +123 -123
- package/lib/draw/BpmnRenderUtil.js +256 -256
- package/lib/draw/BpmnRenderer.d.ts +116 -116
- package/lib/draw/BpmnRenderer.js +2339 -2339
- package/lib/draw/PathMap.d.ts +330 -330
- package/lib/draw/PathMap.js +478 -478
- package/lib/draw/TextRenderer.d.ts +74 -74
- package/lib/draw/TextRenderer.js +136 -136
- package/lib/draw/index.d.ts +10 -10
- package/lib/draw/index.js +11 -11
- package/lib/features/align-elements/AlignElementsContextPadProvider.d.ts +32 -32
- package/lib/features/align-elements/AlignElementsContextPadProvider.js +105 -105
- package/lib/features/align-elements/AlignElementsIcons.d.ts +10 -10
- package/lib/features/align-elements/AlignElementsIcons.js +43 -43
- package/lib/features/align-elements/AlignElementsMenuProvider.d.ts +32 -32
- package/lib/features/align-elements/AlignElementsMenuProvider.js +100 -100
- package/lib/features/align-elements/BpmnAlignElements.d.ts +9 -9
- package/lib/features/align-elements/BpmnAlignElements.js +45 -45
- package/lib/features/align-elements/index.d.ts +11 -11
- package/lib/features/align-elements/index.js +23 -23
- package/lib/features/append-preview/AppendPreview.d.ts +36 -36
- package/lib/features/append-preview/AppendPreview.js +108 -108
- package/lib/features/append-preview/index.d.ts +16 -16
- package/lib/features/append-preview/index.js +15 -15
- package/lib/features/auto-place/BpmnAutoPlace.d.ts +15 -15
- package/lib/features/auto-place/BpmnAutoPlace.js +22 -22
- package/lib/features/auto-place/BpmnAutoPlaceUtil.d.ts +52 -52
- package/lib/features/auto-place/BpmnAutoPlaceUtil.js +226 -226
- package/lib/features/auto-place/index.d.ts +7 -7
- package/lib/features/auto-place/index.js +8 -8
- package/lib/features/auto-resize/BpmnAutoResize.d.ts +25 -25
- package/lib/features/auto-resize/BpmnAutoResize.js +45 -45
- package/lib/features/auto-resize/BpmnAutoResizeProvider.d.ts +26 -26
- package/lib/features/auto-resize/BpmnAutoResizeProvider.js +69 -69
- package/lib/features/auto-resize/index.d.ts +8 -8
- package/lib/features/auto-resize/index.js +12 -12
- package/lib/features/context-pad/ContextPadProvider.d.ts +62 -62
- package/lib/features/context-pad/ContextPadProvider.js +582 -582
- package/lib/features/context-pad/index.d.ts +7 -7
- package/lib/features/context-pad/index.js +22 -22
- package/lib/features/copy-paste/BpmnCopyPaste.d.ts +17 -17
- package/lib/features/copy-paste/BpmnCopyPaste.js +192 -192
- package/lib/features/copy-paste/ModdleCopy.d.ts +45 -45
- package/lib/features/copy-paste/index.d.ts +9 -9
- package/lib/features/copy-paste/index.js +13 -13
- package/lib/features/di-ordering/BpmnDiOrdering.d.ts +11 -11
- package/lib/features/di-ordering/BpmnDiOrdering.js +48 -48
- package/lib/features/di-ordering/index.d.ts +6 -6
- package/lib/features/di-ordering/index.js +7 -7
- package/lib/features/distribute-elements/BpmnDistributeElements.d.ts +10 -10
- package/lib/features/distribute-elements/BpmnDistributeElements.js +60 -60
- package/lib/features/distribute-elements/DistributeElementsIcons.d.ts +5 -5
- package/lib/features/distribute-elements/DistributeElementsIcons.js +18 -18
- package/lib/features/distribute-elements/DistributeElementsMenuProvider.d.ts +32 -32
- package/lib/features/distribute-elements/DistributeElementsMenuProvider.js +92 -92
- package/lib/features/distribute-elements/index.d.ts +9 -9
- package/lib/features/distribute-elements/index.js +19 -19
- package/lib/features/drilldown/DrilldownBreadcrumbs.d.ts +19 -19
- package/lib/features/drilldown/DrilldownBreadcrumbs.js +138 -138
- package/lib/features/drilldown/DrilldownCentering.d.ts +17 -17
- package/lib/features/drilldown/DrilldownCentering.js +122 -122
- package/lib/features/drilldown/DrilldownOverlayBehavior.d.ts +20 -20
- package/lib/features/drilldown/DrilldownOverlayBehavior.js +218 -218
- package/lib/features/drilldown/SubprocessCompatibility.d.ts +21 -21
- package/lib/features/drilldown/SubprocessCompatibility.js +266 -266
- package/lib/features/drilldown/index.d.ts +13 -13
- package/lib/features/drilldown/index.js +16 -16
- package/lib/features/editor-actions/BpmnEditorActions.d.ts +13 -13
- package/lib/features/editor-actions/BpmnEditorActions.js +187 -187
- package/lib/features/editor-actions/index.d.ts +6 -6
- package/lib/features/editor-actions/index.js +10 -10
- package/lib/features/grid-snapping/BpmnGridSnapping.d.ts +9 -9
- package/lib/features/grid-snapping/behavior/GridSnappingAutoPlaceBehavior.d.ts +14 -14
- package/lib/features/grid-snapping/behavior/GridSnappingLayoutConnectionBehavior.d.ts +27 -27
- package/lib/features/grid-snapping/behavior/GridSnappingLayoutConnectionBehavior.js +155 -155
- package/lib/features/grid-snapping/behavior/GridSnappingParticipantBehavior.d.ts +13 -13
- package/lib/features/grid-snapping/behavior/index.d.ts +10 -10
- package/lib/features/grid-snapping/index.d.ts +11 -11
- package/lib/features/interaction-events/BpmnInteractionEvents.d.ts +18 -18
- package/lib/features/interaction-events/BpmnInteractionEvents.js +146 -146
- package/lib/features/interaction-events/index.d.ts +6 -6
- package/lib/features/interaction-events/index.js +5 -5
- package/lib/features/keyboard/BpmnKeyboardBindings.d.ts +15 -15
- package/lib/features/keyboard/BpmnKeyboardBindings.js +179 -179
- package/lib/features/keyboard/index.d.ts +7 -7
- package/lib/features/keyboard/index.js +11 -11
- package/lib/features/label-editing/LabelEditingPreview.d.ts +13 -13
- package/lib/features/label-editing/LabelEditingPreview.js +145 -145
- package/lib/features/label-editing/LabelEditingProvider.d.ts +62 -62
- package/lib/features/label-editing/LabelEditingProvider.js +519 -519
- package/lib/features/label-editing/LabelUtil.d.ts +1 -1
- package/lib/features/label-editing/LabelUtil.js +4 -4
- package/lib/features/label-editing/cmd/UpdateLabelHandler.d.ts +22 -22
- package/lib/features/label-editing/cmd/UpdateLabelHandler.js +149 -149
- package/lib/features/label-editing/index.d.ts +9 -9
- package/lib/features/label-editing/index.js +21 -21
- package/lib/features/modeling/BpmnFactory.d.ts +73 -73
- package/lib/features/modeling/BpmnFactory.js +180 -180
- package/lib/features/modeling/BpmnLayouter.d.ts +30 -30
- package/lib/features/modeling/BpmnLayouter.js +488 -488
- package/lib/features/modeling/BpmnUpdater.d.ts +90 -90
- package/lib/features/modeling/BpmnUpdater.js +818 -818
- package/lib/features/modeling/ElementFactory.d.ts +117 -117
- package/lib/features/modeling/ElementFactory.js +412 -412
- package/lib/features/modeling/ElementFactory.test.ts +132 -132
- package/lib/features/modeling/Modeling.d.ts +150 -150
- package/lib/features/modeling/Modeling.js +309 -309
- package/lib/features/modeling/Modeling.test.ts +147 -147
- package/lib/features/modeling/behavior/AdaptiveLabelPositioningBehavior.d.ts +19 -19
- package/lib/features/modeling/behavior/AdaptiveLabelPositioningBehavior.js +288 -288
- package/lib/features/modeling/behavior/AppendBehavior.d.ts +6 -6
- package/lib/features/modeling/behavior/AppendBehavior.js +42 -42
- package/lib/features/modeling/behavior/AssociationBehavior.d.ts +11 -11
- package/lib/features/modeling/behavior/AttachEventBehavior.d.ts +15 -15
- package/lib/features/modeling/behavior/AttachEventBehavior.js +106 -106
- package/lib/features/modeling/behavior/BoundaryEventBehavior.d.ts +15 -15
- package/lib/features/modeling/behavior/BoundaryEventBehavior.js +74 -74
- package/lib/features/modeling/behavior/CompensateBoundaryEventBehavior.d.ts +17 -17
- package/lib/features/modeling/behavior/CompensateBoundaryEventBehavior.js +222 -222
- package/lib/features/modeling/behavior/CreateBehavior.d.ts +9 -9
- package/lib/features/modeling/behavior/CreateBehavior.js +33 -33
- package/lib/features/modeling/behavior/CreateDataObjectBehavior.d.ts +15 -15
- package/lib/features/modeling/behavior/CreateDataObjectBehavior.js +43 -43
- package/lib/features/modeling/behavior/CreateParticipantBehavior.d.ts +19 -19
- package/lib/features/modeling/behavior/CreateParticipantBehavior.js +237 -237
- package/lib/features/modeling/behavior/DataInputAssociationBehavior.d.ts +21 -21
- package/lib/features/modeling/behavior/DataInputAssociationBehavior.js +162 -162
- package/lib/features/modeling/behavior/DataStoreBehavior.d.ts +19 -19
- package/lib/features/modeling/behavior/DeleteLaneBehavior.d.ts +15 -15
- package/lib/features/modeling/behavior/DeleteLaneBehavior.js +162 -162
- package/lib/features/modeling/behavior/DetachEventBehavior.d.ts +15 -15
- package/lib/features/modeling/behavior/DetachEventBehavior.js +101 -101
- package/lib/features/modeling/behavior/DropOnFlowBehavior.d.ts +13 -13
- package/lib/features/modeling/behavior/DropOnFlowBehavior.js +221 -221
- package/lib/features/modeling/behavior/EventBasedGatewayBehavior.d.ts +11 -11
- package/lib/features/modeling/behavior/EventBasedGatewayBehavior.js +110 -110
- package/lib/features/modeling/behavior/FixHoverBehavior.d.ts +17 -17
- package/lib/features/modeling/behavior/GroupBehavior.d.ts +26 -26
- package/lib/features/modeling/behavior/ImportDockingFix.d.ts +13 -13
- package/lib/features/modeling/behavior/ImportDockingFix.js +83 -83
- package/lib/features/modeling/behavior/IsHorizontalFix.d.ts +10 -10
- package/lib/features/modeling/behavior/IsHorizontalFix.js +54 -54
- package/lib/features/modeling/behavior/LabelBehavior.d.ts +56 -56
- package/lib/features/modeling/behavior/LabelBehavior.js +364 -364
- package/lib/features/modeling/behavior/LayoutConnectionBehavior.d.ts +16 -16
- package/lib/features/modeling/behavior/LayoutConnectionBehavior.js +121 -121
- package/lib/features/modeling/behavior/MessageFlowBehavior.d.ts +15 -15
- package/lib/features/modeling/behavior/NonInterruptingBehavior.d.ts +4 -4
- package/lib/features/modeling/behavior/NonInterruptingBehavior.js +41 -41
- package/lib/features/modeling/behavior/RemoveElementBehavior.d.ts +13 -13
- package/lib/features/modeling/behavior/RemoveElementBehavior.js +91 -91
- package/lib/features/modeling/behavior/RemoveEmbeddedLabelBoundsBehavior.d.ts +16 -16
- package/lib/features/modeling/behavior/RemoveEmbeddedLabelBoundsBehavior.js +41 -41
- package/lib/features/modeling/behavior/RemoveParticipantBehavior.d.ts +15 -15
- package/lib/features/modeling/behavior/RemoveParticipantBehavior.js +59 -59
- package/lib/features/modeling/behavior/ReplaceConnectionBehavior.d.ts +15 -15
- package/lib/features/modeling/behavior/ReplaceConnectionBehavior.js +194 -194
- package/lib/features/modeling/behavior/ReplaceElementBehaviour.d.ts +23 -23
- package/lib/features/modeling/behavior/ReplaceElementBehaviour.js +144 -144
- package/lib/features/modeling/behavior/ResizeBehavior.d.ts +64 -64
- package/lib/features/modeling/behavior/ResizeBehavior.js +265 -265
- package/lib/features/modeling/behavior/ResizeLaneBehavior.d.ts +16 -16
- package/lib/features/modeling/behavior/ResizeLaneBehavior.js +70 -70
- package/lib/features/modeling/behavior/RootElementReferenceBehavior.d.ts +25 -25
- package/lib/features/modeling/behavior/SetCompensationActivityAfterPasteBehavior.d.ts +16 -16
- package/lib/features/modeling/behavior/SetCompensationActivityAfterPasteBehavior.js +66 -66
- package/lib/features/modeling/behavior/SpaceToolBehavior.d.ts +10 -10
- package/lib/features/modeling/behavior/SpaceToolBehavior.js +207 -207
- package/lib/features/modeling/behavior/SubProcessPlaneBehavior.d.ts +28 -28
- package/lib/features/modeling/behavior/SubProcessPlaneBehavior.js +588 -588
- package/lib/features/modeling/behavior/SubProcessStartEventBehavior.d.ts +15 -15
- package/lib/features/modeling/behavior/SubProcessStartEventBehavior.js +55 -55
- package/lib/features/modeling/behavior/TextAnnotationBehavior.d.ts +6 -6
- package/lib/features/modeling/behavior/TextAnnotationBehavior.js +42 -42
- package/lib/features/modeling/behavior/ToggleCollapseConnectionBehaviour.d.ts +14 -14
- package/lib/features/modeling/behavior/ToggleCollapseConnectionBehaviour.js +87 -87
- package/lib/features/modeling/behavior/ToggleElementCollapseBehaviour.d.ts +13 -13
- package/lib/features/modeling/behavior/ToggleElementCollapseBehaviour.js +156 -156
- package/lib/features/modeling/behavior/UnclaimIdBehavior.d.ts +19 -19
- package/lib/features/modeling/behavior/UnclaimIdBehavior.js +64 -64
- package/lib/features/modeling/behavior/UnsetDefaultFlowBehavior.d.ts +16 -16
- package/lib/features/modeling/behavior/UnsetDefaultFlowBehavior.js +59 -59
- package/lib/features/modeling/behavior/UpdateFlowNodeRefsBehavior.d.ts +15 -15
- package/lib/features/modeling/behavior/UpdateFlowNodeRefsBehavior.js +157 -157
- package/lib/features/modeling/behavior/index.d.ts +2 -2
- package/lib/features/modeling/behavior/index.js +131 -131
- package/lib/features/modeling/behavior/util/CategoryUtil.d.ts +49 -49
- package/lib/features/modeling/behavior/util/CategoryUtil.js +86 -86
- package/lib/features/modeling/behavior/util/ConnectionLayoutUtil.d.ts +19 -19
- package/lib/features/modeling/behavior/util/ConnectionLayoutUtil.js +22 -22
- package/lib/features/modeling/behavior/util/GeometricUtil.d.ts +1 -1
- package/lib/features/modeling/behavior/util/LabelLayoutUtil.d.ts +32 -32
- package/lib/features/modeling/behavior/util/LabelLayoutUtil.js +41 -41
- package/lib/features/modeling/behavior/util/LayoutUtil.d.ts +48 -48
- package/lib/features/modeling/behavior/util/LayoutUtil.js +259 -259
- package/lib/features/modeling/behavior/util/LineAttachmentUtil.d.ts +37 -37
- package/lib/features/modeling/behavior/util/LineAttachmentUtil.js +241 -241
- package/lib/features/modeling/behavior/util/LineIntersect.d.ts +13 -13
- package/lib/features/modeling/behavior/util/LineIntersect.js +39 -39
- package/lib/features/modeling/behavior/util/NonInterruptingUtil.d.ts +3 -3
- package/lib/features/modeling/behavior/util/NonInterruptingUtil.js +32 -32
- package/lib/features/modeling/behavior/util/ResizeUtil.d.ts +1 -1
- package/lib/features/modeling/cmd/AddLaneHandler.d.ts +22 -22
- package/lib/features/modeling/cmd/AddLaneHandler.js +187 -187
- package/lib/features/modeling/cmd/IdClaimHandler.d.ts +22 -22
- package/lib/features/modeling/cmd/IdClaimHandler.js +51 -51
- package/lib/features/modeling/cmd/ResizeLaneHandler.d.ts +39 -39
- package/lib/features/modeling/cmd/ResizeLaneHandler.js +146 -146
- package/lib/features/modeling/cmd/SetColorHandler.d.ts +18 -18
- package/lib/features/modeling/cmd/SplitLaneHandler.d.ts +20 -20
- package/lib/features/modeling/cmd/SplitLaneHandler.js +99 -99
- package/lib/features/modeling/cmd/UpdateCanvasRootHandler.d.ts +20 -20
- package/lib/features/modeling/cmd/UpdateCanvasRootHandler.js +99 -99
- package/lib/features/modeling/cmd/UpdateFlowNodeRefsHandler.d.ts +21 -21
- package/lib/features/modeling/cmd/UpdateFlowNodeRefsHandler.js +218 -218
- package/lib/features/modeling/cmd/UpdateModdlePropertiesHandler.d.ts +20 -20
- package/lib/features/modeling/cmd/UpdateModdlePropertiesHandler.js +107 -107
- package/lib/features/modeling/cmd/UpdatePropertiesHandler.d.ts +58 -58
- package/lib/features/modeling/cmd/UpdatePropertiesHandler.js +260 -260
- package/lib/features/modeling/cmd/UpdateSemanticParentHandler.d.ts +18 -18
- package/lib/features/modeling/index.d.ts +27 -27
- package/lib/features/modeling/index.js +45 -45
- package/lib/features/modeling/util/LaneUtil.d.ts +46 -46
- package/lib/features/modeling/util/LaneUtil.js +188 -188
- package/lib/features/modeling/util/ModelingUtil.d.ts +23 -23
- package/lib/features/modeling/util/ModelingUtil.js +88 -88
- package/lib/features/modeling-feedback/ModelingFeedback.d.ts +13 -13
- package/lib/features/modeling-feedback/ModelingFeedback.js +46 -46
- package/lib/features/modeling-feedback/index.d.ts +7 -7
- package/lib/features/modeling-feedback/index.js +12 -12
- package/lib/features/ordering/BpmnOrderingProvider.d.ts +19 -19
- package/lib/features/ordering/BpmnOrderingProvider.js +191 -191
- package/lib/features/ordering/index.d.ts +6 -6
- package/lib/features/ordering/index.js +5 -5
- package/lib/features/outline/OutlineProvider.d.ts +39 -39
- package/lib/features/outline/OutlineProvider.js +189 -189
- package/lib/features/outline/OutlineUtil.d.ts +23 -23
- package/lib/features/outline/OutlineUtil.js +35 -35
- package/lib/features/outline/index.d.ts +7 -7
- package/lib/features/outline/index.js +10 -10
- package/lib/features/palette/PaletteProvider.d.ts +34 -34
- package/lib/features/palette/PaletteProvider.js +214 -214
- package/lib/features/palette/index.d.ts +9 -9
- package/lib/features/palette/index.js +23 -23
- package/lib/features/popup-menu/ReplaceMenuProvider.d.ts +52 -52
- package/lib/features/popup-menu/ReplaceMenuProvider.js +656 -629
- package/lib/features/popup-menu/index.d.ts +11 -11
- package/lib/features/popup-menu/index.js +16 -16
- package/lib/features/popup-menu/util/Icons.d.ts +5 -5
- package/lib/features/popup-menu/util/Icons.js +14 -14
- package/lib/features/popup-menu/util/TypeUtil.d.ts +14 -14
- package/lib/features/popup-menu/util/TypeUtil.js +52 -52
- package/lib/features/replace/BpmnReplace.d.ts +45 -45
- package/lib/features/replace/BpmnReplace.js +391 -391
- package/lib/features/replace/ReplaceOptions.d.ts +85 -79
- package/lib/features/replace/ReplaceOptions.js +1198 -998
- package/lib/features/replace/index.d.ts +9 -9
- package/lib/features/replace/index.js +14 -14
- package/lib/features/replace-preview/BpmnReplacePreview.d.ts +17 -17
- package/lib/features/replace-preview/BpmnReplacePreview.js +139 -139
- package/lib/features/replace-preview/index.d.ts +7 -7
- package/lib/features/replace-preview/index.js +11 -11
- package/lib/features/rules/BpmnRules.d.ts +181 -181
- package/lib/features/rules/BpmnRules.js +1191 -1191
- package/lib/features/rules/index.d.ts +7 -7
- package/lib/features/rules/index.js +11 -11
- package/lib/features/search/BpmnSearchProvider.d.ts +34 -34
- package/lib/features/search/BpmnSearchProvider.js +91 -91
- package/lib/features/search/index.d.ts +7 -7
- package/lib/features/search/index.js +14 -14
- package/lib/features/snapping/BpmnConnectSnapping.d.ts +17 -17
- package/lib/features/snapping/BpmnCreateMoveSnapping.d.ts +41 -41
- package/lib/features/snapping/BpmnCreateMoveSnapping.js +289 -289
- package/lib/features/snapping/BpmnSnappingUtil.d.ts +11 -11
- package/lib/features/snapping/index.d.ts +9 -9
- package/lib/features/snapping/index.js +12 -12
- package/lib/features/space-tool/BpmnSpaceTool.d.ts +21 -21
- package/lib/features/space-tool/BpmnSpaceTool.js +69 -69
- package/lib/features/space-tool/index.d.ts +6 -6
- package/lib/features/space-tool/index.js +7 -7
- package/lib/import/BpmnImporter.d.ts +51 -51
- package/lib/import/BpmnImporter.js +363 -363
- package/lib/import/BpmnTreeWalker.d.ts +20 -20
- package/lib/import/BpmnTreeWalker.js +453 -453
- package/lib/import/Importer.d.ts +25 -25
- package/lib/import/Importer.js +222 -222
- package/lib/import/Util.d.ts +1 -1
- package/lib/import/Util.js +6 -6
- package/lib/import/index.d.ts +6 -6
- package/lib/import/index.js +9 -9
- package/lib/index.d.ts +1 -1
- package/lib/index.js +2 -2
- package/lib/model/Types.d.ts +25 -25
- package/lib/model/Types.ts +40 -40
- package/lib/util/CompatibilityUtil.d.ts +8 -8
- package/lib/util/CompatibilityUtil.js +29 -29
- package/lib/util/DiUtil.d.ts +60 -60
- package/lib/util/DiUtil.js +122 -122
- package/lib/util/DrilldownUtil.d.ts +39 -39
- package/lib/util/DrilldownUtil.js +69 -69
- package/lib/util/LabelUtil.d.ts +83 -83
- package/lib/util/LabelUtil.js +266 -266
- package/lib/util/ModelUtil.d.ts +40 -40
- package/lib/util/ModelUtil.js +58 -58
- package/lib/util/PoweredByUtil.d.ts +8 -8
- package/lib/util/PoweredByUtil.js +99 -99
- package/lib/util/Types.js +4 -4
- package/lib/util/Types.ts +3 -3
- package/package.json +131 -131
- package/test/helper/TranslationCollector.js +15 -15
- package/test/helper/index.js +313 -313
- package/test/matchers/BoundsMatchers.js +252 -252
- package/test/matchers/ConnectionMatchers.js +165 -165
- package/test/matchers/JSONMatcher.js +19 -19
- package/test/util/KeyEvents.js +22 -22
- package/test/util/MockEvents.js +61 -61
- package/test/util/custom-rules/CustomRules.js +16 -16
- package/test/util/custom-rules/index.js +6 -6
|
@@ -1,453 +1,453 @@
|
|
|
1
|
-
import {
|
|
2
|
-
filter,
|
|
3
|
-
find,
|
|
4
|
-
forEach
|
|
5
|
-
} from 'min-dash';
|
|
6
|
-
|
|
7
|
-
import {
|
|
8
|
-
elementToString
|
|
9
|
-
} from './Util';
|
|
10
|
-
|
|
11
|
-
import {
|
|
12
|
-
ensureCompatDiRef
|
|
13
|
-
} from '../util/CompatibilityUtil';
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* @typedef {import('../model/Types').ModdleElement} ModdleElement
|
|
17
|
-
*/
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Returns true if an element is of the given meta-model type.
|
|
21
|
-
*
|
|
22
|
-
* @param {ModdleElement} element
|
|
23
|
-
* @param {string} type
|
|
24
|
-
*
|
|
25
|
-
* @return {boolean}
|
|
26
|
-
*/
|
|
27
|
-
function is(element, type) {
|
|
28
|
-
return element.$instanceOf(type);
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* Find a suitable display candidate for definitions where the DI does not
|
|
34
|
-
* correctly specify one.
|
|
35
|
-
*
|
|
36
|
-
* @param {ModdleElement} definitions
|
|
37
|
-
*
|
|
38
|
-
* @return {ModdleElement}
|
|
39
|
-
*/
|
|
40
|
-
function findDisplayCandidate(definitions) {
|
|
41
|
-
return find(definitions.rootElements, function(e) {
|
|
42
|
-
return is(e, 'bpmn:Process') || is(e, 'bpmn:Collaboration');
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* @param {Record<'element' | 'root' | 'error', Function>} handler
|
|
48
|
-
*/
|
|
49
|
-
export default function BpmnTreeWalker(handler) {
|
|
50
|
-
|
|
51
|
-
// list of containers already walked
|
|
52
|
-
var handledElements = {};
|
|
53
|
-
|
|
54
|
-
// list of elements to handle deferred to ensure
|
|
55
|
-
// prerequisites are drawn
|
|
56
|
-
var deferred = [];
|
|
57
|
-
|
|
58
|
-
var diMap = {};
|
|
59
|
-
|
|
60
|
-
// Helpers //////////////////////
|
|
61
|
-
|
|
62
|
-
function contextual(fn, ctx) {
|
|
63
|
-
return function(e) {
|
|
64
|
-
fn(e, ctx);
|
|
65
|
-
};
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
function handled(element) {
|
|
69
|
-
handledElements[element.id] = element;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
function isHandled(element) {
|
|
73
|
-
return handledElements[element.id];
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
function visit(element, ctx) {
|
|
77
|
-
|
|
78
|
-
var gfx = element.gfx;
|
|
79
|
-
|
|
80
|
-
// avoid multiple rendering of elements
|
|
81
|
-
if (gfx) {
|
|
82
|
-
throw new Error(
|
|
83
|
-
`already rendered ${ elementToString(element) }`
|
|
84
|
-
);
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
// call handler
|
|
88
|
-
return handler.element(element, diMap[element.id], ctx);
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
function visitRoot(element, diagram) {
|
|
92
|
-
return handler.root(element, diMap[element.id], diagram);
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
function visitIfDi(element, ctx) {
|
|
96
|
-
|
|
97
|
-
try {
|
|
98
|
-
var gfx = diMap[element.id] && visit(element, ctx);
|
|
99
|
-
|
|
100
|
-
handled(element);
|
|
101
|
-
|
|
102
|
-
return gfx;
|
|
103
|
-
} catch (error) {
|
|
104
|
-
logError(error.message, { element, error });
|
|
105
|
-
|
|
106
|
-
console.error(`failed to import ${ elementToString(element) }`, error);
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
function logError(message, context) {
|
|
111
|
-
handler.error(message, context);
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
// DI handling //////////////////////
|
|
115
|
-
|
|
116
|
-
var registerDi = this.registerDi = function registerDi(di) {
|
|
117
|
-
var bpmnElement = di.bpmnElement;
|
|
118
|
-
|
|
119
|
-
if (bpmnElement) {
|
|
120
|
-
if (diMap[bpmnElement.id]) {
|
|
121
|
-
logError(
|
|
122
|
-
`multiple DI elements defined for ${ elementToString(bpmnElement) }`,
|
|
123
|
-
{ element: bpmnElement }
|
|
124
|
-
);
|
|
125
|
-
} else {
|
|
126
|
-
diMap[bpmnElement.id] = di;
|
|
127
|
-
|
|
128
|
-
ensureCompatDiRef(bpmnElement);
|
|
129
|
-
}
|
|
130
|
-
} else {
|
|
131
|
-
logError(
|
|
132
|
-
`no bpmnElement referenced in ${ elementToString(di) }`,
|
|
133
|
-
{ element: di }
|
|
134
|
-
);
|
|
135
|
-
}
|
|
136
|
-
};
|
|
137
|
-
|
|
138
|
-
function handleDiagram(diagram) {
|
|
139
|
-
handlePlane(diagram.plane);
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
function handlePlane(plane) {
|
|
143
|
-
registerDi(plane);
|
|
144
|
-
|
|
145
|
-
forEach(plane.planeElement, handlePlaneElement);
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
function handlePlaneElement(planeElement) {
|
|
149
|
-
registerDi(planeElement);
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
// Semantic handling //////////////////////
|
|
154
|
-
|
|
155
|
-
/**
|
|
156
|
-
* Handle definitions and return the rendered diagram (if any).
|
|
157
|
-
*
|
|
158
|
-
* @param {ModdleElement} definitions to walk and import
|
|
159
|
-
* @param {ModdleElement} [diagram] specific diagram to import and display
|
|
160
|
-
*
|
|
161
|
-
* @throws {Error} if no diagram to display could be found
|
|
162
|
-
*/
|
|
163
|
-
this.handleDefinitions = function handleDefinitions(definitions, diagram) {
|
|
164
|
-
|
|
165
|
-
// make sure we walk the correct bpmnElement
|
|
166
|
-
|
|
167
|
-
var diagrams = definitions.diagrams;
|
|
168
|
-
|
|
169
|
-
if (diagram && diagrams.indexOf(diagram) === -1) {
|
|
170
|
-
throw new Error('diagram not part of <bpmn:Definitions />');
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
if (!diagram && diagrams && diagrams.length) {
|
|
174
|
-
diagram = diagrams[0];
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
// no diagram -> nothing to import
|
|
178
|
-
if (!diagram) {
|
|
179
|
-
throw new Error('no diagram to display');
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
// load DI from selected diagram only
|
|
183
|
-
diMap = {};
|
|
184
|
-
handleDiagram(diagram);
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
var plane = diagram.plane;
|
|
188
|
-
|
|
189
|
-
if (!plane) {
|
|
190
|
-
throw new Error(
|
|
191
|
-
`no plane for ${ elementToString(diagram) }`
|
|
192
|
-
);
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
var rootElement = plane.bpmnElement;
|
|
196
|
-
|
|
197
|
-
// ensure we default to a suitable display candidate (process or collaboration),
|
|
198
|
-
// even if non is specified in DI
|
|
199
|
-
if (!rootElement) {
|
|
200
|
-
rootElement = findDisplayCandidate(definitions);
|
|
201
|
-
|
|
202
|
-
if (!rootElement) {
|
|
203
|
-
throw new Error('no process or collaboration to display');
|
|
204
|
-
} else {
|
|
205
|
-
|
|
206
|
-
logError(
|
|
207
|
-
`correcting missing bpmnElement on ${ elementToString(plane) } to ${ elementToString(rootElement) }`
|
|
208
|
-
);
|
|
209
|
-
|
|
210
|
-
// correct DI on the fly
|
|
211
|
-
plane.bpmnElement = rootElement;
|
|
212
|
-
registerDi(plane);
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
var ctx = visitRoot(rootElement, plane);
|
|
218
|
-
|
|
219
|
-
if (is(rootElement, 'bpmn:Process') || is(rootElement, 'bpmn:SubProcess')) {
|
|
220
|
-
handleProcess(rootElement, ctx);
|
|
221
|
-
} else if (is(rootElement, 'bpmn:Collaboration')) {
|
|
222
|
-
handleCollaboration(rootElement, ctx);
|
|
223
|
-
|
|
224
|
-
// force drawing of everything not yet drawn that is part of the target DI
|
|
225
|
-
handleUnhandledProcesses(definitions.rootElements, ctx);
|
|
226
|
-
} else {
|
|
227
|
-
throw new Error(
|
|
228
|
-
`unsupported bpmnElement for ${ elementToString(plane) }: ${ elementToString(rootElement) }`
|
|
229
|
-
);
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
// handle all deferred elements
|
|
233
|
-
handleDeferred(deferred);
|
|
234
|
-
};
|
|
235
|
-
|
|
236
|
-
var handleDeferred = this.handleDeferred = function handleDeferred() {
|
|
237
|
-
|
|
238
|
-
var fn;
|
|
239
|
-
|
|
240
|
-
// drain deferred until empty
|
|
241
|
-
while (deferred.length) {
|
|
242
|
-
fn = deferred.shift();
|
|
243
|
-
|
|
244
|
-
fn();
|
|
245
|
-
}
|
|
246
|
-
};
|
|
247
|
-
|
|
248
|
-
function handleProcess(process, context) {
|
|
249
|
-
handleFlowElementsContainer(process, context);
|
|
250
|
-
handleIoSpecification(process.ioSpecification, context);
|
|
251
|
-
|
|
252
|
-
handleArtifacts(process.artifacts, context);
|
|
253
|
-
|
|
254
|
-
// log process handled
|
|
255
|
-
handled(process);
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
function handleUnhandledProcesses(rootElements, ctx) {
|
|
259
|
-
|
|
260
|
-
// walk through all processes that have not yet been drawn and draw them
|
|
261
|
-
// if they contain lanes with DI information.
|
|
262
|
-
// we do this to pass the free-floating lane test cases in the MIWG test suite
|
|
263
|
-
var processes = filter(rootElements, function(e) {
|
|
264
|
-
return !isHandled(e) && is(e, 'bpmn:Process') && e.laneSets;
|
|
265
|
-
});
|
|
266
|
-
|
|
267
|
-
processes.forEach(contextual(handleProcess, ctx));
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
function handleMessageFlow(messageFlow, context) {
|
|
271
|
-
visitIfDi(messageFlow, context);
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
function handleMessageFlows(messageFlows, context) {
|
|
275
|
-
forEach(messageFlows, contextual(handleMessageFlow, context));
|
|
276
|
-
}
|
|
277
|
-
|
|
278
|
-
function handleDataAssociation(association, context) {
|
|
279
|
-
visitIfDi(association, context);
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
function handleDataInput(dataInput, context) {
|
|
283
|
-
visitIfDi(dataInput, context);
|
|
284
|
-
}
|
|
285
|
-
|
|
286
|
-
function handleDataOutput(dataOutput, context) {
|
|
287
|
-
visitIfDi(dataOutput, context);
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
function handleArtifact(artifact, context) {
|
|
291
|
-
|
|
292
|
-
// bpmn:TextAnnotation
|
|
293
|
-
// bpmn:Group
|
|
294
|
-
// bpmn:Association
|
|
295
|
-
|
|
296
|
-
visitIfDi(artifact, context);
|
|
297
|
-
}
|
|
298
|
-
|
|
299
|
-
function handleArtifacts(artifacts, context) {
|
|
300
|
-
|
|
301
|
-
forEach(artifacts, function(e) {
|
|
302
|
-
if (is(e, 'bpmn:Association')) {
|
|
303
|
-
deferred.push(function() {
|
|
304
|
-
handleArtifact(e, context);
|
|
305
|
-
});
|
|
306
|
-
} else {
|
|
307
|
-
handleArtifact(e, context);
|
|
308
|
-
}
|
|
309
|
-
});
|
|
310
|
-
}
|
|
311
|
-
|
|
312
|
-
function handleIoSpecification(ioSpecification, context) {
|
|
313
|
-
|
|
314
|
-
if (!ioSpecification) {
|
|
315
|
-
return;
|
|
316
|
-
}
|
|
317
|
-
|
|
318
|
-
forEach(ioSpecification.dataInputs, contextual(handleDataInput, context));
|
|
319
|
-
forEach(ioSpecification.dataOutputs, contextual(handleDataOutput, context));
|
|
320
|
-
}
|
|
321
|
-
|
|
322
|
-
var handleSubProcess = this.handleSubProcess = function handleSubProcess(subProcess, context) {
|
|
323
|
-
handleFlowElementsContainer(subProcess, context);
|
|
324
|
-
handleArtifacts(subProcess.artifacts, context);
|
|
325
|
-
};
|
|
326
|
-
|
|
327
|
-
function handleFlowNode(flowNode, context) {
|
|
328
|
-
var childCtx = visitIfDi(flowNode, context);
|
|
329
|
-
|
|
330
|
-
if (is(flowNode, 'bpmn:SubProcess')) {
|
|
331
|
-
handleSubProcess(flowNode, childCtx || context);
|
|
332
|
-
}
|
|
333
|
-
|
|
334
|
-
if (is(flowNode, 'bpmn:Activity')) {
|
|
335
|
-
handleIoSpecification(flowNode.ioSpecification, context);
|
|
336
|
-
}
|
|
337
|
-
|
|
338
|
-
// defer handling of associations
|
|
339
|
-
// affected types:
|
|
340
|
-
//
|
|
341
|
-
// * bpmn:Activity
|
|
342
|
-
// * bpmn:ThrowEvent
|
|
343
|
-
// * bpmn:CatchEvent
|
|
344
|
-
//
|
|
345
|
-
deferred.push(function() {
|
|
346
|
-
forEach(flowNode.dataInputAssociations, contextual(handleDataAssociation, context));
|
|
347
|
-
forEach(flowNode.dataOutputAssociations, contextual(handleDataAssociation, context));
|
|
348
|
-
});
|
|
349
|
-
}
|
|
350
|
-
|
|
351
|
-
function handleSequenceFlow(sequenceFlow, context) {
|
|
352
|
-
visitIfDi(sequenceFlow, context);
|
|
353
|
-
}
|
|
354
|
-
|
|
355
|
-
function handleDataElement(dataObject, context) {
|
|
356
|
-
visitIfDi(dataObject, context);
|
|
357
|
-
}
|
|
358
|
-
|
|
359
|
-
function handleLane(lane, context) {
|
|
360
|
-
|
|
361
|
-
deferred.push(function() {
|
|
362
|
-
|
|
363
|
-
var newContext = visitIfDi(lane, context);
|
|
364
|
-
|
|
365
|
-
if (lane.childLaneSet) {
|
|
366
|
-
handleLaneSet(lane.childLaneSet, newContext || context);
|
|
367
|
-
}
|
|
368
|
-
|
|
369
|
-
wireFlowNodeRefs(lane);
|
|
370
|
-
});
|
|
371
|
-
}
|
|
372
|
-
|
|
373
|
-
function handleLaneSet(laneSet, context) {
|
|
374
|
-
forEach(laneSet.lanes, contextual(handleLane, context));
|
|
375
|
-
}
|
|
376
|
-
|
|
377
|
-
function handleLaneSets(laneSets, context) {
|
|
378
|
-
forEach(laneSets, contextual(handleLaneSet, context));
|
|
379
|
-
}
|
|
380
|
-
|
|
381
|
-
function handleFlowElementsContainer(container, context) {
|
|
382
|
-
handleFlowElements(container.flowElements, context);
|
|
383
|
-
|
|
384
|
-
if (container.laneSets) {
|
|
385
|
-
handleLaneSets(container.laneSets, context);
|
|
386
|
-
}
|
|
387
|
-
}
|
|
388
|
-
|
|
389
|
-
function handleFlowElements(flowElements, context) {
|
|
390
|
-
forEach(flowElements, function(flowElement) {
|
|
391
|
-
if (is(flowElement, 'bpmn:SequenceFlow')) {
|
|
392
|
-
deferred.push(function() {
|
|
393
|
-
handleSequenceFlow(flowElement, context);
|
|
394
|
-
});
|
|
395
|
-
} else if (is(flowElement, 'bpmn:BoundaryEvent')) {
|
|
396
|
-
deferred.unshift(function() {
|
|
397
|
-
handleFlowNode(flowElement, context);
|
|
398
|
-
});
|
|
399
|
-
} else if (is(flowElement, 'bpmn:FlowNode')) {
|
|
400
|
-
handleFlowNode(flowElement, context);
|
|
401
|
-
} else if (is(flowElement, 'bpmn:DataObject')) {
|
|
402
|
-
|
|
403
|
-
// SKIP (assume correct referencing via DataObjectReference)
|
|
404
|
-
} else if (is(flowElement, 'bpmn:DataStoreReference')) {
|
|
405
|
-
handleDataElement(flowElement, context);
|
|
406
|
-
} else if (is(flowElement, 'bpmn:DataObjectReference')) {
|
|
407
|
-
handleDataElement(flowElement, context);
|
|
408
|
-
} else {
|
|
409
|
-
logError(
|
|
410
|
-
`unrecognized flowElement ${ elementToString(flowElement) } in context ${ elementToString(context && context.businessObject) }`,
|
|
411
|
-
{
|
|
412
|
-
element: flowElement,
|
|
413
|
-
context
|
|
414
|
-
}
|
|
415
|
-
);
|
|
416
|
-
}
|
|
417
|
-
});
|
|
418
|
-
}
|
|
419
|
-
|
|
420
|
-
function handleParticipant(participant, context) {
|
|
421
|
-
var newCtx = visitIfDi(participant, context);
|
|
422
|
-
|
|
423
|
-
var process = participant.processRef;
|
|
424
|
-
if (process) {
|
|
425
|
-
handleProcess(process, newCtx || context);
|
|
426
|
-
}
|
|
427
|
-
}
|
|
428
|
-
|
|
429
|
-
function handleCollaboration(collaboration, context) {
|
|
430
|
-
|
|
431
|
-
forEach(collaboration.participants, contextual(handleParticipant, context));
|
|
432
|
-
|
|
433
|
-
handleArtifacts(collaboration.artifacts, context);
|
|
434
|
-
|
|
435
|
-
// handle message flows latest in the process
|
|
436
|
-
deferred.push(function() {
|
|
437
|
-
handleMessageFlows(collaboration.messageFlows, context);
|
|
438
|
-
});
|
|
439
|
-
}
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
function wireFlowNodeRefs(lane) {
|
|
443
|
-
|
|
444
|
-
// wire the virtual flowNodeRefs <-> relationship
|
|
445
|
-
forEach(lane.flowNodeRef, function(flowNode) {
|
|
446
|
-
var lanes = flowNode.get('lanes');
|
|
447
|
-
|
|
448
|
-
if (lanes) {
|
|
449
|
-
lanes.push(lane);
|
|
450
|
-
}
|
|
451
|
-
});
|
|
452
|
-
}
|
|
453
|
-
}
|
|
1
|
+
import {
|
|
2
|
+
filter,
|
|
3
|
+
find,
|
|
4
|
+
forEach
|
|
5
|
+
} from 'min-dash';
|
|
6
|
+
|
|
7
|
+
import {
|
|
8
|
+
elementToString
|
|
9
|
+
} from './Util';
|
|
10
|
+
|
|
11
|
+
import {
|
|
12
|
+
ensureCompatDiRef
|
|
13
|
+
} from '../util/CompatibilityUtil';
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* @typedef {import('../model/Types').ModdleElement} ModdleElement
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Returns true if an element is of the given meta-model type.
|
|
21
|
+
*
|
|
22
|
+
* @param {ModdleElement} element
|
|
23
|
+
* @param {string} type
|
|
24
|
+
*
|
|
25
|
+
* @return {boolean}
|
|
26
|
+
*/
|
|
27
|
+
function is(element, type) {
|
|
28
|
+
return element.$instanceOf(type);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Find a suitable display candidate for definitions where the DI does not
|
|
34
|
+
* correctly specify one.
|
|
35
|
+
*
|
|
36
|
+
* @param {ModdleElement} definitions
|
|
37
|
+
*
|
|
38
|
+
* @return {ModdleElement}
|
|
39
|
+
*/
|
|
40
|
+
function findDisplayCandidate(definitions) {
|
|
41
|
+
return find(definitions.rootElements, function(e) {
|
|
42
|
+
return is(e, 'bpmn:Process') || is(e, 'bpmn:Collaboration');
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* @param {Record<'element' | 'root' | 'error', Function>} handler
|
|
48
|
+
*/
|
|
49
|
+
export default function BpmnTreeWalker(handler) {
|
|
50
|
+
|
|
51
|
+
// list of containers already walked
|
|
52
|
+
var handledElements = {};
|
|
53
|
+
|
|
54
|
+
// list of elements to handle deferred to ensure
|
|
55
|
+
// prerequisites are drawn
|
|
56
|
+
var deferred = [];
|
|
57
|
+
|
|
58
|
+
var diMap = {};
|
|
59
|
+
|
|
60
|
+
// Helpers //////////////////////
|
|
61
|
+
|
|
62
|
+
function contextual(fn, ctx) {
|
|
63
|
+
return function(e) {
|
|
64
|
+
fn(e, ctx);
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
function handled(element) {
|
|
69
|
+
handledElements[element.id] = element;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function isHandled(element) {
|
|
73
|
+
return handledElements[element.id];
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
function visit(element, ctx) {
|
|
77
|
+
|
|
78
|
+
var gfx = element.gfx;
|
|
79
|
+
|
|
80
|
+
// avoid multiple rendering of elements
|
|
81
|
+
if (gfx) {
|
|
82
|
+
throw new Error(
|
|
83
|
+
`already rendered ${ elementToString(element) }`
|
|
84
|
+
);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// call handler
|
|
88
|
+
return handler.element(element, diMap[element.id], ctx);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
function visitRoot(element, diagram) {
|
|
92
|
+
return handler.root(element, diMap[element.id], diagram);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
function visitIfDi(element, ctx) {
|
|
96
|
+
|
|
97
|
+
try {
|
|
98
|
+
var gfx = diMap[element.id] && visit(element, ctx);
|
|
99
|
+
|
|
100
|
+
handled(element);
|
|
101
|
+
|
|
102
|
+
return gfx;
|
|
103
|
+
} catch (error) {
|
|
104
|
+
logError(error.message, { element, error });
|
|
105
|
+
|
|
106
|
+
console.error(`failed to import ${ elementToString(element) }`, error);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
function logError(message, context) {
|
|
111
|
+
handler.error(message, context);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// DI handling //////////////////////
|
|
115
|
+
|
|
116
|
+
var registerDi = this.registerDi = function registerDi(di) {
|
|
117
|
+
var bpmnElement = di.bpmnElement;
|
|
118
|
+
|
|
119
|
+
if (bpmnElement) {
|
|
120
|
+
if (diMap[bpmnElement.id]) {
|
|
121
|
+
logError(
|
|
122
|
+
`multiple DI elements defined for ${ elementToString(bpmnElement) }`,
|
|
123
|
+
{ element: bpmnElement }
|
|
124
|
+
);
|
|
125
|
+
} else {
|
|
126
|
+
diMap[bpmnElement.id] = di;
|
|
127
|
+
|
|
128
|
+
ensureCompatDiRef(bpmnElement);
|
|
129
|
+
}
|
|
130
|
+
} else {
|
|
131
|
+
logError(
|
|
132
|
+
`no bpmnElement referenced in ${ elementToString(di) }`,
|
|
133
|
+
{ element: di }
|
|
134
|
+
);
|
|
135
|
+
}
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
function handleDiagram(diagram) {
|
|
139
|
+
handlePlane(diagram.plane);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
function handlePlane(plane) {
|
|
143
|
+
registerDi(plane);
|
|
144
|
+
|
|
145
|
+
forEach(plane.planeElement, handlePlaneElement);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
function handlePlaneElement(planeElement) {
|
|
149
|
+
registerDi(planeElement);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
// Semantic handling //////////////////////
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Handle definitions and return the rendered diagram (if any).
|
|
157
|
+
*
|
|
158
|
+
* @param {ModdleElement} definitions to walk and import
|
|
159
|
+
* @param {ModdleElement} [diagram] specific diagram to import and display
|
|
160
|
+
*
|
|
161
|
+
* @throws {Error} if no diagram to display could be found
|
|
162
|
+
*/
|
|
163
|
+
this.handleDefinitions = function handleDefinitions(definitions, diagram) {
|
|
164
|
+
|
|
165
|
+
// make sure we walk the correct bpmnElement
|
|
166
|
+
|
|
167
|
+
var diagrams = definitions.diagrams;
|
|
168
|
+
|
|
169
|
+
if (diagram && diagrams.indexOf(diagram) === -1) {
|
|
170
|
+
throw new Error('diagram not part of <bpmn:Definitions />');
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
if (!diagram && diagrams && diagrams.length) {
|
|
174
|
+
diagram = diagrams[0];
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
// no diagram -> nothing to import
|
|
178
|
+
if (!diagram) {
|
|
179
|
+
throw new Error('no diagram to display');
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
// load DI from selected diagram only
|
|
183
|
+
diMap = {};
|
|
184
|
+
handleDiagram(diagram);
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
var plane = diagram.plane;
|
|
188
|
+
|
|
189
|
+
if (!plane) {
|
|
190
|
+
throw new Error(
|
|
191
|
+
`no plane for ${ elementToString(diagram) }`
|
|
192
|
+
);
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
var rootElement = plane.bpmnElement;
|
|
196
|
+
|
|
197
|
+
// ensure we default to a suitable display candidate (process or collaboration),
|
|
198
|
+
// even if non is specified in DI
|
|
199
|
+
if (!rootElement) {
|
|
200
|
+
rootElement = findDisplayCandidate(definitions);
|
|
201
|
+
|
|
202
|
+
if (!rootElement) {
|
|
203
|
+
throw new Error('no process or collaboration to display');
|
|
204
|
+
} else {
|
|
205
|
+
|
|
206
|
+
logError(
|
|
207
|
+
`correcting missing bpmnElement on ${ elementToString(plane) } to ${ elementToString(rootElement) }`
|
|
208
|
+
);
|
|
209
|
+
|
|
210
|
+
// correct DI on the fly
|
|
211
|
+
plane.bpmnElement = rootElement;
|
|
212
|
+
registerDi(plane);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
var ctx = visitRoot(rootElement, plane);
|
|
218
|
+
|
|
219
|
+
if (is(rootElement, 'bpmn:Process') || is(rootElement, 'bpmn:SubProcess')) {
|
|
220
|
+
handleProcess(rootElement, ctx);
|
|
221
|
+
} else if (is(rootElement, 'bpmn:Collaboration')) {
|
|
222
|
+
handleCollaboration(rootElement, ctx);
|
|
223
|
+
|
|
224
|
+
// force drawing of everything not yet drawn that is part of the target DI
|
|
225
|
+
handleUnhandledProcesses(definitions.rootElements, ctx);
|
|
226
|
+
} else {
|
|
227
|
+
throw new Error(
|
|
228
|
+
`unsupported bpmnElement for ${ elementToString(plane) }: ${ elementToString(rootElement) }`
|
|
229
|
+
);
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
// handle all deferred elements
|
|
233
|
+
handleDeferred(deferred);
|
|
234
|
+
};
|
|
235
|
+
|
|
236
|
+
var handleDeferred = this.handleDeferred = function handleDeferred() {
|
|
237
|
+
|
|
238
|
+
var fn;
|
|
239
|
+
|
|
240
|
+
// drain deferred until empty
|
|
241
|
+
while (deferred.length) {
|
|
242
|
+
fn = deferred.shift();
|
|
243
|
+
|
|
244
|
+
fn();
|
|
245
|
+
}
|
|
246
|
+
};
|
|
247
|
+
|
|
248
|
+
function handleProcess(process, context) {
|
|
249
|
+
handleFlowElementsContainer(process, context);
|
|
250
|
+
handleIoSpecification(process.ioSpecification, context);
|
|
251
|
+
|
|
252
|
+
handleArtifacts(process.artifacts, context);
|
|
253
|
+
|
|
254
|
+
// log process handled
|
|
255
|
+
handled(process);
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
function handleUnhandledProcesses(rootElements, ctx) {
|
|
259
|
+
|
|
260
|
+
// walk through all processes that have not yet been drawn and draw them
|
|
261
|
+
// if they contain lanes with DI information.
|
|
262
|
+
// we do this to pass the free-floating lane test cases in the MIWG test suite
|
|
263
|
+
var processes = filter(rootElements, function(e) {
|
|
264
|
+
return !isHandled(e) && is(e, 'bpmn:Process') && e.laneSets;
|
|
265
|
+
});
|
|
266
|
+
|
|
267
|
+
processes.forEach(contextual(handleProcess, ctx));
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
function handleMessageFlow(messageFlow, context) {
|
|
271
|
+
visitIfDi(messageFlow, context);
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
function handleMessageFlows(messageFlows, context) {
|
|
275
|
+
forEach(messageFlows, contextual(handleMessageFlow, context));
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
function handleDataAssociation(association, context) {
|
|
279
|
+
visitIfDi(association, context);
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
function handleDataInput(dataInput, context) {
|
|
283
|
+
visitIfDi(dataInput, context);
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
function handleDataOutput(dataOutput, context) {
|
|
287
|
+
visitIfDi(dataOutput, context);
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
function handleArtifact(artifact, context) {
|
|
291
|
+
|
|
292
|
+
// bpmn:TextAnnotation
|
|
293
|
+
// bpmn:Group
|
|
294
|
+
// bpmn:Association
|
|
295
|
+
|
|
296
|
+
visitIfDi(artifact, context);
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
function handleArtifacts(artifacts, context) {
|
|
300
|
+
|
|
301
|
+
forEach(artifacts, function(e) {
|
|
302
|
+
if (is(e, 'bpmn:Association')) {
|
|
303
|
+
deferred.push(function() {
|
|
304
|
+
handleArtifact(e, context);
|
|
305
|
+
});
|
|
306
|
+
} else {
|
|
307
|
+
handleArtifact(e, context);
|
|
308
|
+
}
|
|
309
|
+
});
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
function handleIoSpecification(ioSpecification, context) {
|
|
313
|
+
|
|
314
|
+
if (!ioSpecification) {
|
|
315
|
+
return;
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
forEach(ioSpecification.dataInputs, contextual(handleDataInput, context));
|
|
319
|
+
forEach(ioSpecification.dataOutputs, contextual(handleDataOutput, context));
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
var handleSubProcess = this.handleSubProcess = function handleSubProcess(subProcess, context) {
|
|
323
|
+
handleFlowElementsContainer(subProcess, context);
|
|
324
|
+
handleArtifacts(subProcess.artifacts, context);
|
|
325
|
+
};
|
|
326
|
+
|
|
327
|
+
function handleFlowNode(flowNode, context) {
|
|
328
|
+
var childCtx = visitIfDi(flowNode, context);
|
|
329
|
+
|
|
330
|
+
if (is(flowNode, 'bpmn:SubProcess')) {
|
|
331
|
+
handleSubProcess(flowNode, childCtx || context);
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
if (is(flowNode, 'bpmn:Activity')) {
|
|
335
|
+
handleIoSpecification(flowNode.ioSpecification, context);
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
// defer handling of associations
|
|
339
|
+
// affected types:
|
|
340
|
+
//
|
|
341
|
+
// * bpmn:Activity
|
|
342
|
+
// * bpmn:ThrowEvent
|
|
343
|
+
// * bpmn:CatchEvent
|
|
344
|
+
//
|
|
345
|
+
deferred.push(function() {
|
|
346
|
+
forEach(flowNode.dataInputAssociations, contextual(handleDataAssociation, context));
|
|
347
|
+
forEach(flowNode.dataOutputAssociations, contextual(handleDataAssociation, context));
|
|
348
|
+
});
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
function handleSequenceFlow(sequenceFlow, context) {
|
|
352
|
+
visitIfDi(sequenceFlow, context);
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
function handleDataElement(dataObject, context) {
|
|
356
|
+
visitIfDi(dataObject, context);
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
function handleLane(lane, context) {
|
|
360
|
+
|
|
361
|
+
deferred.push(function() {
|
|
362
|
+
|
|
363
|
+
var newContext = visitIfDi(lane, context);
|
|
364
|
+
|
|
365
|
+
if (lane.childLaneSet) {
|
|
366
|
+
handleLaneSet(lane.childLaneSet, newContext || context);
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
wireFlowNodeRefs(lane);
|
|
370
|
+
});
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
function handleLaneSet(laneSet, context) {
|
|
374
|
+
forEach(laneSet.lanes, contextual(handleLane, context));
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
function handleLaneSets(laneSets, context) {
|
|
378
|
+
forEach(laneSets, contextual(handleLaneSet, context));
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
function handleFlowElementsContainer(container, context) {
|
|
382
|
+
handleFlowElements(container.flowElements, context);
|
|
383
|
+
|
|
384
|
+
if (container.laneSets) {
|
|
385
|
+
handleLaneSets(container.laneSets, context);
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
function handleFlowElements(flowElements, context) {
|
|
390
|
+
forEach(flowElements, function(flowElement) {
|
|
391
|
+
if (is(flowElement, 'bpmn:SequenceFlow')) {
|
|
392
|
+
deferred.push(function() {
|
|
393
|
+
handleSequenceFlow(flowElement, context);
|
|
394
|
+
});
|
|
395
|
+
} else if (is(flowElement, 'bpmn:BoundaryEvent')) {
|
|
396
|
+
deferred.unshift(function() {
|
|
397
|
+
handleFlowNode(flowElement, context);
|
|
398
|
+
});
|
|
399
|
+
} else if (is(flowElement, 'bpmn:FlowNode')) {
|
|
400
|
+
handleFlowNode(flowElement, context);
|
|
401
|
+
} else if (is(flowElement, 'bpmn:DataObject')) {
|
|
402
|
+
|
|
403
|
+
// SKIP (assume correct referencing via DataObjectReference)
|
|
404
|
+
} else if (is(flowElement, 'bpmn:DataStoreReference')) {
|
|
405
|
+
handleDataElement(flowElement, context);
|
|
406
|
+
} else if (is(flowElement, 'bpmn:DataObjectReference')) {
|
|
407
|
+
handleDataElement(flowElement, context);
|
|
408
|
+
} else {
|
|
409
|
+
logError(
|
|
410
|
+
`unrecognized flowElement ${ elementToString(flowElement) } in context ${ elementToString(context && context.businessObject) }`,
|
|
411
|
+
{
|
|
412
|
+
element: flowElement,
|
|
413
|
+
context
|
|
414
|
+
}
|
|
415
|
+
);
|
|
416
|
+
}
|
|
417
|
+
});
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
function handleParticipant(participant, context) {
|
|
421
|
+
var newCtx = visitIfDi(participant, context);
|
|
422
|
+
|
|
423
|
+
var process = participant.processRef;
|
|
424
|
+
if (process) {
|
|
425
|
+
handleProcess(process, newCtx || context);
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
function handleCollaboration(collaboration, context) {
|
|
430
|
+
|
|
431
|
+
forEach(collaboration.participants, contextual(handleParticipant, context));
|
|
432
|
+
|
|
433
|
+
handleArtifacts(collaboration.artifacts, context);
|
|
434
|
+
|
|
435
|
+
// handle message flows latest in the process
|
|
436
|
+
deferred.push(function() {
|
|
437
|
+
handleMessageFlows(collaboration.messageFlows, context);
|
|
438
|
+
});
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
|
|
442
|
+
function wireFlowNodeRefs(lane) {
|
|
443
|
+
|
|
444
|
+
// wire the virtual flowNodeRefs <-> relationship
|
|
445
|
+
forEach(lane.flowNodeRef, function(flowNode) {
|
|
446
|
+
var lanes = flowNode.get('lanes');
|
|
447
|
+
|
|
448
|
+
if (lanes) {
|
|
449
|
+
lanes.push(lane);
|
|
450
|
+
}
|
|
451
|
+
});
|
|
452
|
+
}
|
|
453
|
+
}
|