@aranzatech/diagrams-bpmn 0.2.15 → 0.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/README.md +34 -4
- package/dist/{catalog-xOMF2ifW.d.cts → catalog-DAGDhO-D.d.cts} +1 -1
- package/dist/{catalog-CK3_4cOb.d.ts → catalog-Q1QmKLDD.d.ts} +1 -1
- package/dist/{chunk-YUE5EM3W.js → chunk-334WN4JZ.js} +276 -107
- package/dist/chunk-334WN4JZ.js.map +1 -0
- package/dist/chunk-77L6O76M.js +3 -0
- package/dist/chunk-77L6O76M.js.map +1 -0
- package/dist/{chunk-QSMP34CT.js → chunk-CPFUQM6H.js} +80 -44
- package/dist/chunk-CPFUQM6H.js.map +1 -0
- package/dist/{chunk-XMVV7FRZ.js → chunk-FFWJA5BV.js} +3 -3
- package/dist/{chunk-XMVV7FRZ.js.map → chunk-FFWJA5BV.js.map} +1 -1
- package/dist/{chunk-FBTGIYZS.js → chunk-JEGYVEJO.js} +80 -3
- package/dist/{chunk-FBTGIYZS.js.map → chunk-JEGYVEJO.js.map} +1 -1
- package/dist/chunk-TB6V4S5N.js +104 -0
- package/dist/chunk-TB6V4S5N.js.map +1 -0
- package/dist/{chunk-HOWK3ZOO.js → chunk-YAYZW45I.js} +379 -16
- package/dist/chunk-YAYZW45I.js.map +1 -0
- package/dist/edges/index.cjs +78 -42
- package/dist/edges/index.cjs.map +1 -1
- package/dist/edges/index.js +1 -1
- package/dist/elements/index.cjs +78 -0
- package/dist/elements/index.cjs.map +1 -1
- package/dist/elements/index.d.cts +24 -5
- package/dist/elements/index.d.ts +24 -5
- package/dist/elements/index.js +1 -1
- package/dist/elk-QT7H4252.js +6 -0
- package/dist/elk-QT7H4252.js.map +1 -0
- package/dist/extensions/index.cjs +108 -0
- package/dist/extensions/index.cjs.map +1 -0
- package/dist/extensions/index.d.cts +145 -0
- package/dist/extensions/index.d.ts +145 -0
- package/dist/extensions/index.js +4 -0
- package/dist/extensions/index.js.map +1 -0
- package/dist/index.cjs +922 -160
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +7 -5
- package/dist/index.d.ts +7 -5
- package/dist/index.js +6 -4
- package/dist/index.js.map +1 -1
- package/dist/layout/index.cjs +11 -1
- package/dist/layout/index.cjs.map +1 -1
- package/dist/layout/index.d.cts +4 -3
- package/dist/layout/index.d.ts +4 -3
- package/dist/layout/index.js +3 -3
- package/dist/modeling/index.cjs +387 -13
- package/dist/modeling/index.cjs.map +1 -1
- package/dist/modeling/index.d.cts +62 -4
- package/dist/modeling/index.d.ts +62 -4
- package/dist/modeling/index.js +1 -1
- package/dist/types-BX_o95GC.d.cts +40 -0
- package/dist/{types-y-ZbX-ff.d.ts → types-BYN4Zuee.d.cts} +15 -1
- package/dist/{types-y-ZbX-ff.d.cts → types-BYN4Zuee.d.ts} +15 -1
- package/dist/{types-jIDz306Y.d.cts → types-CggktCqr.d.cts} +4 -1
- package/dist/types-D7zel9dq.d.ts +40 -0
- package/dist/{types-DG5yPKld.d.ts → types-DmDODKlh.d.ts} +4 -1
- package/dist/validation/index.cjs +81 -125
- package/dist/validation/index.cjs.map +1 -1
- package/dist/validation/index.d.cts +22 -5
- package/dist/validation/index.d.ts +22 -5
- package/dist/validation/index.js +82 -126
- package/dist/validation/index.js.map +1 -1
- package/dist/xml/index.cjs +319 -49
- package/dist/xml/index.cjs.map +1 -1
- package/dist/xml/index.d.cts +5 -3
- package/dist/xml/index.d.ts +5 -3
- package/dist/xml/index.js +2 -1
- package/package.json +6 -1
- package/dist/chunk-HOWK3ZOO.js.map +0 -1
- package/dist/chunk-QSMP34CT.js.map +0 -1
- package/dist/chunk-YUE5EM3W.js.map +0 -1
- package/dist/elk-FSFIEL6O.js +0 -6
- package/dist/elk-FSFIEL6O.js.map +0 -1
- package/dist/guards-C70uIY_O.d.cts +0 -16
- package/dist/guards-foB6XIfZ.d.ts +0 -16
package/dist/index.d.cts
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
|
-
export { B as BPMN_ELEMENT_CATALOG, a as BPMN_RESIZABLE_ELEMENT_TYPES, g as getBpmnElementSize, b as getElementMeta, i as isBpmnElementResizable } from './catalog-
|
|
2
|
-
export {
|
|
3
|
-
export { B as BpmnCategory, a as BpmnDefinitionsSet, b as BpmnEdgeData, c as BpmnEdgeType, d as BpmnElementMeta, e as BpmnElementSize, f as BpmnElementType, g as BpmnErrorDefinition, h as BpmnEscalationDefinition, i as BpmnEventDefinition, j as BpmnEventSemantics, k as BpmnHandlePolicy, l as BpmnMessageDefinition, m as BpmnNodeData, n as BpmnOrientation, o as BpmnProcessVariable, p as
|
|
1
|
+
export { B as BPMN_ELEMENT_CATALOG, a as BPMN_RESIZABLE_ELEMENT_TYPES, g as getBpmnElementSize, b as getElementMeta, i as isBpmnElementResizable } from './catalog-DAGDhO-D.cjs';
|
|
2
|
+
export { GetAllowedEventTriggersOptions, acceptsBoundaryEvents, getAllowedEventTriggers, getHandlePolicy, getOrientation, isChoreographyType, isContainerType, isConversationType, isDataType, isEventType, isGatewayType, isTaskType, supportsCollapse, supportsMarkers } from './elements/index.cjs';
|
|
3
|
+
export { B as BpmnCategory, a as BpmnDefinitionsSet, b as BpmnEdgeData, c as BpmnEdgeType, d as BpmnElementMeta, e as BpmnElementSize, f as BpmnElementType, g as BpmnErrorDefinition, h as BpmnEscalationDefinition, i as BpmnEventDefinition, j as BpmnEventSemantics, k as BpmnHandlePolicy, l as BpmnMessageDefinition, m as BpmnNodeData, n as BpmnOrientation, o as BpmnProcessVariable, p as BpmnServiceTaskConfig, q as BpmnSignalDefinition, r as BpmnTimerDefinition, s as BpmnTimerKind, E as EventTrigger, S as SubProcessVariant, T as TaskMarker } from './types-BYN4Zuee.cjs';
|
|
4
|
+
export { ARANZA_DESCRIPTOR } from './extensions/index.cjs';
|
|
5
|
+
export { B as BpmnAranzaTaskExtensions, a as BpmnExecutionEngine, b as BpmnFlowableExportOptions, c as BpmnFlowableTaskExtensions, d as BpmnMessageFlowExecutionExtensions, e as BpmnTaskExecutionExtensions, g as getBpmnMessageFlowExecutionExtensions, f as getBpmnTaskExecutionExtensions } from './types-BX_o95GC.cjs';
|
|
4
6
|
export { AnnotationNode, BPMN_NODE_TYPES, BoundaryEventNode, CallChoreographyNode, CallConversationNode, ChoreographyTaskNode, ConversationNode, DataInputNode, DataObjectNode, DataObjectReferenceNode, DataOutputNode, DataStoreNode, DataStoreReferenceNode, EndEventNode, GatewayNode, GroupNode, IntermediateCatchEventNode, IntermediateThrowEventNode, LaneNode, PoolNode, StartEventNode, SubChoreographyNode, SubConversationNode, SubProcessNode, TaskNode } from './nodes/index.cjs';
|
|
5
7
|
export { AssociationEdge, BPMN_EDGE_TYPES, ConversationLinkEdge, DataAssociationEdge, MessageFlowEdge, SequenceFlowEdge } from './edges/index.cjs';
|
|
6
8
|
export { parseBpmnXml, serializeBpmnXml } from './xml/index.cjs';
|
|
7
|
-
export { B as BpmnExportOptions, a as BpmnImportResult, b as BpmnProcessModel, c as BpmnRFEdge, d as BpmnRFNode } from './types-
|
|
9
|
+
export { B as BpmnExportOptions, a as BpmnImportResult, b as BpmnProcessModel, c as BpmnRFEdge, d as BpmnRFNode } from './types-CggktCqr.cjs';
|
|
8
10
|
import { SimDiagram } from './simulation/index.cjs';
|
|
9
11
|
export { SimEdge, SimLogEntry, SimLogType, SimNode, SimStatus, SimToken, SimVariables, SimulationState, createSimulation, fire, getFireable, isCompleted, setVariable, tick } from './simulation/index.cjs';
|
|
10
|
-
export { BPMN_EDGE_CONNECTION_RULES, BPMN_MODELING_RULES, BPMN_POOL_LANE_LAYOUT, BPMN_ROUTABLE_EDGE_TYPES, BPMN_SELECTION_STYLE, BpmnClipboardState, BpmnConnectionRule, BpmnDiagramDocument, BpmnDiagramSnapshot, BpmnDiagramState, BpmnDropTargetResolution, BpmnEventBus, ConnectBpmnOptions, CreateBpmnNodeOptions, FindBpmnContainerAtOptions, GroupAsBpmnSubProcessOptions, MoveBpmnLaneOptions, PasteBpmnOptions, ReorderBpmnLaneOptions, ReparentBpmnNodeAtPositionOptions, ReparentBpmnNodeOptions, ReplaceBpmnNodeOptions, ResizeBpmnNodeByHandleOptions, ResizeBpmnNodeOptions, ResolveBpmnDropTargetOptions, RouteBpmnEdgeOptions, attachBoundaryEventCommand, bpmnConnectionValidators, canContainBpmnElement, computeBpmnSmartGuides, connectBpmnCommand, copyBpmnElements, createBpmnDiagramDocument, createBpmnEventBus, createBpmnLayoutCache, createBpmnNode, createBpmnNodeCommand, deleteBpmnElementsCommand, deserializeBpmnDiagram, deserializeBpmnDiagramSnapshot, findBpmnContainerAt, getBpmnDragHandleSelector, getBpmnEdgeLabelLayout, getBpmnLaneIndexAtPosition, getBpmnNodeAbsolutePosition, getBpmnNodeCenter, getBpmnNodeSize, getBpmnNodeZIndex, getBpmnPoolLanes, getBpmnTabOrder, groupAsBpmnSubProcessCommand, inferBpmnEdgeType, isBpmnDroppableInContainer, isBpmnEdgeRoutingEditable, isBpmnProcessNode, layoutBpmnPoolLaneNodes, layoutBpmnPoolLanes, moveBpmnLaneCommand, parseBpmnDiagramDocument, pasteBpmnElementsCommand, persistBpmnHistory, reorderBpmnLane, reorderBpmnLaneAfterDrop, reorderBpmnLaneCommand, reparentBpmnNodeAtPosition, reparentBpmnNodeCommand, replaceBpmnNodeCommand, resizeBpmnNodeByHandleCommand, resizeBpmnNodeCommand, resolveBpmnDropTarget, restoreBpmnHistory, routeBpmnEdgeCommand, runBpmnCommand, runBpmnCommands, selectBpmnElementsCommand, serializeBpmnDiagram, toBpmnRelativePosition, validateBpmnConnectionForEdgeType, withBpmnLayoutCache, withBpmnNodeZIndexes } from './modeling/index.cjs';
|
|
12
|
+
export { BPMN_EDGE_CONNECTION_RULES, BPMN_MODELING_RULES, BPMN_POOL_LANE_LAYOUT, BPMN_POOL_LANE_STACK_LAYOUT, BPMN_ROUTABLE_EDGE_TYPES, BPMN_SELECTION_STYLE, BpmnBoundaryAttachment, BpmnClipboardState, BpmnConnectionResolution, BpmnConnectionRule, BpmnDiagramDocument, BpmnDiagramSnapshot, BpmnDiagramState, BpmnDropTargetResolution, BpmnEdgeLaneContext, BpmnEventBus, ConnectBpmnOptions, CreateBpmnNodeOptions, FindBpmnContainerAtOptions, GroupAsBpmnSubProcessOptions, MoveBpmnLaneOptions, PasteBpmnOptions, ReorderBpmnLaneOptions, ReparentBpmnNodeAtPositionOptions, ReparentBpmnNodeOptions, ReplaceBpmnNodeOptions, ResizeBpmnNodeByHandleOptions, ResizeBpmnNodeOptions, ResolveBpmnDropTargetOptions, RouteBpmnEdgeOptions, applyBpmnPoolLaneDimensionChange, attachBoundaryEventCommand, bpmnConnectionValidators, canContainBpmnElement, computeBpmnSmartGuides, connectBpmnCommand, copyBpmnElements, createBpmnDiagramDocument, createBpmnEventBus, createBpmnLayoutCache, createBpmnNode, createBpmnNodeCommand, deleteBpmnElementsCommand, deserializeBpmnDiagram, deserializeBpmnDiagramSnapshot, findBpmnContainerAt, getAppendedBpmnLaneFrame, getBoundaryEventAttachment, getBpmnDragHandleSelector, getBpmnEdgeLabelLayout, getBpmnEdgeLaneContext, getBpmnLaneIndexAtPosition, getBpmnNodeAbsolutePosition, getBpmnNodeCenter, getBpmnNodeSize, getBpmnNodeZIndex, getBpmnPoolLaneNodeMaxSize, getBpmnPoolLaneNodeMinSize, getBpmnPoolLanes, getBpmnPoolOrientation, getBpmnTabOrder, groupAsBpmnSubProcessCommand, inferBpmnEdgeType, isBpmnDroppableInContainer, isBpmnEdgeRoutingEditable, isBpmnProcessNode, layoutBpmnPoolLaneNodes, layoutBpmnPoolLaneNodesPreservingHeights, layoutBpmnPoolLanes, moveBpmnLaneCommand, parseBpmnDiagramDocument, pasteBpmnElementsCommand, persistBpmnHistory, reorderBpmnLane, reorderBpmnLaneAfterDrop, reorderBpmnLaneCommand, reorderBpmnPoolLaneAfterDropPreservingHeights, reparentBpmnNodeAtPosition, reparentBpmnNodeCommand, replaceBpmnNodeCommand, resizeBpmnNodeByHandleCommand, resizeBpmnNodeCommand, resolveBpmnConnection, resolveBpmnDropTarget, restoreBpmnHistory, routeBpmnEdgeCommand, runBpmnCommand, runBpmnCommands, selectBpmnElementsCommand, serializeBpmnDiagram, toBpmnRelativePosition, validateBpmnConnectionForEdgeType, withBpmnLayoutCache, withBpmnNodeZIndexes } from './modeling/index.cjs';
|
|
11
13
|
export { BpmnValidationIssue, BpmnValidationOptions, BpmnValidationResult, BpmnValidationSeverity } from './validation/index.cjs';
|
|
12
14
|
import 'react/jsx-runtime';
|
|
13
15
|
import '@xyflow/react';
|
package/dist/index.d.ts
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
|
-
export { B as BPMN_ELEMENT_CATALOG, a as BPMN_RESIZABLE_ELEMENT_TYPES, g as getBpmnElementSize, b as getElementMeta, i as isBpmnElementResizable } from './catalog-
|
|
2
|
-
export {
|
|
3
|
-
export { B as BpmnCategory, a as BpmnDefinitionsSet, b as BpmnEdgeData, c as BpmnEdgeType, d as BpmnElementMeta, e as BpmnElementSize, f as BpmnElementType, g as BpmnErrorDefinition, h as BpmnEscalationDefinition, i as BpmnEventDefinition, j as BpmnEventSemantics, k as BpmnHandlePolicy, l as BpmnMessageDefinition, m as BpmnNodeData, n as BpmnOrientation, o as BpmnProcessVariable, p as
|
|
1
|
+
export { B as BPMN_ELEMENT_CATALOG, a as BPMN_RESIZABLE_ELEMENT_TYPES, g as getBpmnElementSize, b as getElementMeta, i as isBpmnElementResizable } from './catalog-Q1QmKLDD.js';
|
|
2
|
+
export { GetAllowedEventTriggersOptions, acceptsBoundaryEvents, getAllowedEventTriggers, getHandlePolicy, getOrientation, isChoreographyType, isContainerType, isConversationType, isDataType, isEventType, isGatewayType, isTaskType, supportsCollapse, supportsMarkers } from './elements/index.js';
|
|
3
|
+
export { B as BpmnCategory, a as BpmnDefinitionsSet, b as BpmnEdgeData, c as BpmnEdgeType, d as BpmnElementMeta, e as BpmnElementSize, f as BpmnElementType, g as BpmnErrorDefinition, h as BpmnEscalationDefinition, i as BpmnEventDefinition, j as BpmnEventSemantics, k as BpmnHandlePolicy, l as BpmnMessageDefinition, m as BpmnNodeData, n as BpmnOrientation, o as BpmnProcessVariable, p as BpmnServiceTaskConfig, q as BpmnSignalDefinition, r as BpmnTimerDefinition, s as BpmnTimerKind, E as EventTrigger, S as SubProcessVariant, T as TaskMarker } from './types-BYN4Zuee.js';
|
|
4
|
+
export { ARANZA_DESCRIPTOR } from './extensions/index.js';
|
|
5
|
+
export { B as BpmnAranzaTaskExtensions, a as BpmnExecutionEngine, b as BpmnFlowableExportOptions, c as BpmnFlowableTaskExtensions, d as BpmnMessageFlowExecutionExtensions, e as BpmnTaskExecutionExtensions, g as getBpmnMessageFlowExecutionExtensions, f as getBpmnTaskExecutionExtensions } from './types-D7zel9dq.js';
|
|
4
6
|
export { AnnotationNode, BPMN_NODE_TYPES, BoundaryEventNode, CallChoreographyNode, CallConversationNode, ChoreographyTaskNode, ConversationNode, DataInputNode, DataObjectNode, DataObjectReferenceNode, DataOutputNode, DataStoreNode, DataStoreReferenceNode, EndEventNode, GatewayNode, GroupNode, IntermediateCatchEventNode, IntermediateThrowEventNode, LaneNode, PoolNode, StartEventNode, SubChoreographyNode, SubConversationNode, SubProcessNode, TaskNode } from './nodes/index.js';
|
|
5
7
|
export { AssociationEdge, BPMN_EDGE_TYPES, ConversationLinkEdge, DataAssociationEdge, MessageFlowEdge, SequenceFlowEdge } from './edges/index.js';
|
|
6
8
|
export { parseBpmnXml, serializeBpmnXml } from './xml/index.js';
|
|
7
|
-
export { B as BpmnExportOptions, a as BpmnImportResult, b as BpmnProcessModel, c as BpmnRFEdge, d as BpmnRFNode } from './types-
|
|
9
|
+
export { B as BpmnExportOptions, a as BpmnImportResult, b as BpmnProcessModel, c as BpmnRFEdge, d as BpmnRFNode } from './types-DmDODKlh.js';
|
|
8
10
|
import { SimDiagram } from './simulation/index.js';
|
|
9
11
|
export { SimEdge, SimLogEntry, SimLogType, SimNode, SimStatus, SimToken, SimVariables, SimulationState, createSimulation, fire, getFireable, isCompleted, setVariable, tick } from './simulation/index.js';
|
|
10
|
-
export { BPMN_EDGE_CONNECTION_RULES, BPMN_MODELING_RULES, BPMN_POOL_LANE_LAYOUT, BPMN_ROUTABLE_EDGE_TYPES, BPMN_SELECTION_STYLE, BpmnClipboardState, BpmnConnectionRule, BpmnDiagramDocument, BpmnDiagramSnapshot, BpmnDiagramState, BpmnDropTargetResolution, BpmnEventBus, ConnectBpmnOptions, CreateBpmnNodeOptions, FindBpmnContainerAtOptions, GroupAsBpmnSubProcessOptions, MoveBpmnLaneOptions, PasteBpmnOptions, ReorderBpmnLaneOptions, ReparentBpmnNodeAtPositionOptions, ReparentBpmnNodeOptions, ReplaceBpmnNodeOptions, ResizeBpmnNodeByHandleOptions, ResizeBpmnNodeOptions, ResolveBpmnDropTargetOptions, RouteBpmnEdgeOptions, attachBoundaryEventCommand, bpmnConnectionValidators, canContainBpmnElement, computeBpmnSmartGuides, connectBpmnCommand, copyBpmnElements, createBpmnDiagramDocument, createBpmnEventBus, createBpmnLayoutCache, createBpmnNode, createBpmnNodeCommand, deleteBpmnElementsCommand, deserializeBpmnDiagram, deserializeBpmnDiagramSnapshot, findBpmnContainerAt, getBpmnDragHandleSelector, getBpmnEdgeLabelLayout, getBpmnLaneIndexAtPosition, getBpmnNodeAbsolutePosition, getBpmnNodeCenter, getBpmnNodeSize, getBpmnNodeZIndex, getBpmnPoolLanes, getBpmnTabOrder, groupAsBpmnSubProcessCommand, inferBpmnEdgeType, isBpmnDroppableInContainer, isBpmnEdgeRoutingEditable, isBpmnProcessNode, layoutBpmnPoolLaneNodes, layoutBpmnPoolLanes, moveBpmnLaneCommand, parseBpmnDiagramDocument, pasteBpmnElementsCommand, persistBpmnHistory, reorderBpmnLane, reorderBpmnLaneAfterDrop, reorderBpmnLaneCommand, reparentBpmnNodeAtPosition, reparentBpmnNodeCommand, replaceBpmnNodeCommand, resizeBpmnNodeByHandleCommand, resizeBpmnNodeCommand, resolveBpmnDropTarget, restoreBpmnHistory, routeBpmnEdgeCommand, runBpmnCommand, runBpmnCommands, selectBpmnElementsCommand, serializeBpmnDiagram, toBpmnRelativePosition, validateBpmnConnectionForEdgeType, withBpmnLayoutCache, withBpmnNodeZIndexes } from './modeling/index.js';
|
|
12
|
+
export { BPMN_EDGE_CONNECTION_RULES, BPMN_MODELING_RULES, BPMN_POOL_LANE_LAYOUT, BPMN_POOL_LANE_STACK_LAYOUT, BPMN_ROUTABLE_EDGE_TYPES, BPMN_SELECTION_STYLE, BpmnBoundaryAttachment, BpmnClipboardState, BpmnConnectionResolution, BpmnConnectionRule, BpmnDiagramDocument, BpmnDiagramSnapshot, BpmnDiagramState, BpmnDropTargetResolution, BpmnEdgeLaneContext, BpmnEventBus, ConnectBpmnOptions, CreateBpmnNodeOptions, FindBpmnContainerAtOptions, GroupAsBpmnSubProcessOptions, MoveBpmnLaneOptions, PasteBpmnOptions, ReorderBpmnLaneOptions, ReparentBpmnNodeAtPositionOptions, ReparentBpmnNodeOptions, ReplaceBpmnNodeOptions, ResizeBpmnNodeByHandleOptions, ResizeBpmnNodeOptions, ResolveBpmnDropTargetOptions, RouteBpmnEdgeOptions, applyBpmnPoolLaneDimensionChange, attachBoundaryEventCommand, bpmnConnectionValidators, canContainBpmnElement, computeBpmnSmartGuides, connectBpmnCommand, copyBpmnElements, createBpmnDiagramDocument, createBpmnEventBus, createBpmnLayoutCache, createBpmnNode, createBpmnNodeCommand, deleteBpmnElementsCommand, deserializeBpmnDiagram, deserializeBpmnDiagramSnapshot, findBpmnContainerAt, getAppendedBpmnLaneFrame, getBoundaryEventAttachment, getBpmnDragHandleSelector, getBpmnEdgeLabelLayout, getBpmnEdgeLaneContext, getBpmnLaneIndexAtPosition, getBpmnNodeAbsolutePosition, getBpmnNodeCenter, getBpmnNodeSize, getBpmnNodeZIndex, getBpmnPoolLaneNodeMaxSize, getBpmnPoolLaneNodeMinSize, getBpmnPoolLanes, getBpmnPoolOrientation, getBpmnTabOrder, groupAsBpmnSubProcessCommand, inferBpmnEdgeType, isBpmnDroppableInContainer, isBpmnEdgeRoutingEditable, isBpmnProcessNode, layoutBpmnPoolLaneNodes, layoutBpmnPoolLaneNodesPreservingHeights, layoutBpmnPoolLanes, moveBpmnLaneCommand, parseBpmnDiagramDocument, pasteBpmnElementsCommand, persistBpmnHistory, reorderBpmnLane, reorderBpmnLaneAfterDrop, reorderBpmnLaneCommand, reorderBpmnPoolLaneAfterDropPreservingHeights, reparentBpmnNodeAtPosition, reparentBpmnNodeCommand, replaceBpmnNodeCommand, resizeBpmnNodeByHandleCommand, resizeBpmnNodeCommand, resolveBpmnConnection, resolveBpmnDropTarget, restoreBpmnHistory, routeBpmnEdgeCommand, runBpmnCommand, runBpmnCommands, selectBpmnElementsCommand, serializeBpmnDiagram, toBpmnRelativePosition, validateBpmnConnectionForEdgeType, withBpmnLayoutCache, withBpmnNodeZIndexes } from './modeling/index.js';
|
|
11
13
|
export { BpmnValidationIssue, BpmnValidationOptions, BpmnValidationResult, BpmnValidationSeverity } from './validation/index.js';
|
|
12
14
|
import 'react/jsx-runtime';
|
|
13
15
|
import '@xyflow/react';
|
package/dist/index.js
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
|
|
1
|
+
export { getAllowedEventTriggers } from './chunk-JEGYVEJO.js';
|
|
2
2
|
export { AnnotationNode, BPMN_NODE_TYPES, BoundaryEventNode, CallChoreographyNode, CallConversationNode, ChoreographyTaskNode, ConversationNode, DataInputNode, DataObjectNode, DataObjectReferenceNode, DataOutputNode, DataStoreNode, DataStoreReferenceNode, EndEventNode, GatewayNode, GroupNode, IntermediateCatchEventNode, IntermediateThrowEventNode, LaneNode, PoolNode, StartEventNode, SubChoreographyNode, SubConversationNode, SubProcessNode, TaskNode } from './chunk-X54NHLBA.js';
|
|
3
|
-
export { AssociationEdge, BPMN_EDGE_TYPES, ConversationLinkEdge, DataAssociationEdge, MessageFlowEdge, SequenceFlowEdge } from './chunk-
|
|
3
|
+
export { AssociationEdge, BPMN_EDGE_TYPES, ConversationLinkEdge, DataAssociationEdge, MessageFlowEdge, SequenceFlowEdge } from './chunk-CPFUQM6H.js';
|
|
4
4
|
import './chunk-PDTXM32P.js';
|
|
5
|
-
export { parseBpmnXml, serializeBpmnXml } from './chunk-
|
|
5
|
+
export { parseBpmnXml, serializeBpmnXml } from './chunk-334WN4JZ.js';
|
|
6
|
+
import './chunk-77L6O76M.js';
|
|
7
|
+
export { ARANZA_DESCRIPTOR, getBpmnMessageFlowExecutionExtensions, getBpmnTaskExecutionExtensions } from './chunk-TB6V4S5N.js';
|
|
6
8
|
import { createSimulation, tick, getFireable, fire } from './chunk-M46UDUN3.js';
|
|
7
9
|
export { createSimulation, fire, getFireable, isCompleted, setVariable, tick } from './chunk-M46UDUN3.js';
|
|
8
|
-
export { BPMN_EDGE_CONNECTION_RULES, BPMN_MODELING_RULES, BPMN_POOL_LANE_LAYOUT, BPMN_ROUTABLE_EDGE_TYPES, BPMN_SELECTION_STYLE, attachBoundaryEventCommand, bpmnConnectionValidators, canContainBpmnElement, computeBpmnSmartGuides, connectBpmnCommand, copyBpmnElements, createBpmnDiagramDocument, createBpmnEventBus, createBpmnLayoutCache, createBpmnNode, createBpmnNodeCommand, deleteBpmnElementsCommand, deserializeBpmnDiagram, deserializeBpmnDiagramSnapshot, findBpmnContainerAt, getBpmnDragHandleSelector, getBpmnEdgeLabelLayout, getBpmnLaneIndexAtPosition, getBpmnNodeAbsolutePosition, getBpmnNodeCenter, getBpmnNodeSize, getBpmnNodeZIndex, getBpmnPoolLanes, getBpmnTabOrder, groupAsBpmnSubProcessCommand, inferBpmnEdgeType, isBpmnDroppableInContainer, isBpmnEdgeRoutingEditable, isBpmnProcessNode, layoutBpmnPoolLaneNodes, layoutBpmnPoolLanes, moveBpmnLaneCommand, parseBpmnDiagramDocument, pasteBpmnElementsCommand, persistBpmnHistory, reorderBpmnLane, reorderBpmnLaneAfterDrop, reorderBpmnLaneCommand, reparentBpmnNodeAtPosition, reparentBpmnNodeCommand, replaceBpmnNodeCommand, resizeBpmnNodeByHandleCommand, resizeBpmnNodeCommand, resolveBpmnDropTarget, restoreBpmnHistory, routeBpmnEdgeCommand, runBpmnCommand, runBpmnCommands, selectBpmnElementsCommand, serializeBpmnDiagram, toBpmnRelativePosition, validateBpmnConnectionForEdgeType, withBpmnLayoutCache, withBpmnNodeZIndexes } from './chunk-
|
|
10
|
+
export { BPMN_EDGE_CONNECTION_RULES, BPMN_MODELING_RULES, BPMN_POOL_LANE_LAYOUT, BPMN_POOL_LANE_STACK_LAYOUT, BPMN_ROUTABLE_EDGE_TYPES, BPMN_SELECTION_STYLE, applyBpmnPoolLaneDimensionChange, attachBoundaryEventCommand, bpmnConnectionValidators, canContainBpmnElement, computeBpmnSmartGuides, connectBpmnCommand, copyBpmnElements, createBpmnDiagramDocument, createBpmnEventBus, createBpmnLayoutCache, createBpmnNode, createBpmnNodeCommand, deleteBpmnElementsCommand, deserializeBpmnDiagram, deserializeBpmnDiagramSnapshot, findBpmnContainerAt, getAppendedBpmnLaneFrame, getBoundaryEventAttachment, getBpmnDragHandleSelector, getBpmnEdgeLabelLayout, getBpmnEdgeLaneContext, getBpmnLaneIndexAtPosition, getBpmnNodeAbsolutePosition, getBpmnNodeCenter, getBpmnNodeSize, getBpmnNodeZIndex, getBpmnPoolLaneNodeMaxSize, getBpmnPoolLaneNodeMinSize, getBpmnPoolLanes, getBpmnPoolOrientation, getBpmnTabOrder, groupAsBpmnSubProcessCommand, inferBpmnEdgeType, isBpmnDroppableInContainer, isBpmnEdgeRoutingEditable, isBpmnProcessNode, layoutBpmnPoolLaneNodes, layoutBpmnPoolLaneNodesPreservingHeights, layoutBpmnPoolLanes, moveBpmnLaneCommand, parseBpmnDiagramDocument, pasteBpmnElementsCommand, persistBpmnHistory, reorderBpmnLane, reorderBpmnLaneAfterDrop, reorderBpmnLaneCommand, reorderBpmnPoolLaneAfterDropPreservingHeights, reparentBpmnNodeAtPosition, reparentBpmnNodeCommand, replaceBpmnNodeCommand, resizeBpmnNodeByHandleCommand, resizeBpmnNodeCommand, resolveBpmnConnection, resolveBpmnDropTarget, restoreBpmnHistory, routeBpmnEdgeCommand, runBpmnCommand, runBpmnCommands, selectBpmnElementsCommand, serializeBpmnDiagram, toBpmnRelativePosition, validateBpmnConnectionForEdgeType, withBpmnLayoutCache, withBpmnNodeZIndexes } from './chunk-YAYZW45I.js';
|
|
9
11
|
export { acceptsBoundaryEvents, getHandlePolicy, getOrientation, isChoreographyType, isContainerType, isConversationType, isDataType, isEventType, isGatewayType, isTaskType, supportsCollapse, supportsMarkers } from './chunk-RLAJNRF2.js';
|
|
10
12
|
export { BPMN_ELEMENT_CATALOG, BPMN_RESIZABLE_ELEMENT_TYPES, getBpmnElementSize, getElementMeta, isBpmnElementResizable } from './chunk-L5Z22RLX.js';
|
|
11
13
|
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/simulation/batch.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import {\n createSimulation,\n tick,\n fire,\n getFireable,\n} from \"./index\";\nimport type { SimDiagram, SimEdge } from \"./index\";\n\n// ─── Public types ─────────────────────────────────────────────────────────────\n\n/**\n * Branch weights for one gateway.\n * Maps each outgoing sequence-flow edge ID to a non-negative weight.\n * Weights are normalised internally so they need not sum to any specific value.\n * An edge absent from the map inherits weight 1.\n */\nexport type GatewayWeights = Record<string, number>;\n\nexport interface BatchSimConfig {\n /**\n * Number of process instances to simulate.\n * @default 100\n */\n instances?: number;\n\n /**\n * Gateway branch weights. Keys are gateway node IDs; values map\n * each outgoing edge ID to its relative weight.\n * Applies to ExclusiveGateway and InclusiveGateway nodes.\n * Gateways absent from this map fall back to condition evaluation\n * or first-edge behaviour.\n */\n gatewayWeights?: Record<string, GatewayWeights>;\n\n /**\n * Simulated activity duration per node in milliseconds.\n * Used to compute the `totalDurationMs` load indicator:\n * totalDurationMs = visits × nodeDurations[nodeId]\n * Nodes absent from this map contribute 0 ms.\n */\n nodeDurations?: Record<string, number>;\n\n /**\n * Safety limit: maximum tick iterations per instance.\n * Prevents infinite-loop diagrams from blocking indefinitely.\n * @default 500\n */\n maxSteps?: number;\n}\n\nexport interface NodeSimStats {\n /**\n * Number of instances in which at least one token passed through\n * this node. Value in [0, config.instances].\n */\n visits: number;\n\n /**\n * visits × nodeDurations[nodeId].\n * Higher values indicate heavier aggregate load on this activity.\n */\n totalDurationMs: number;\n\n /**\n * Highest number of concurrent tokens at this node observed within\n * any single instance. Values > 1 occur inside parallel branches.\n */\n peakConcurrency: number;\n}\n\nexport interface BatchSimResult {\n /** Per-node aggregated statistics, keyed by node ID. */\n nodeStats: Record<string, NodeSimStats>;\n\n /** Instances that reached the EndEvent(s) successfully. */\n completed: number;\n\n /** Instances that stalled with tokens still present (deadlock). */\n deadlocked: number;\n\n /** Total instances attempted — equals `config.instances`. */\n total: number;\n\n /**\n * Mean number of simulation steps across completed instances.\n * Proxy for relative cycle time (higher = longer path).\n * 0 when no instance completed.\n */\n avgSteps: number;\n}\n\n// ─── Internal helpers ─────────────────────────────────────────────────────────\n\n/** Weighted random selection from a list of edge IDs. */\nfunction weightedChoice(edgeIds: string[], weights: GatewayWeights): string {\n if (edgeIds.length === 0) return \"\";\n const w = edgeIds.map((id) => Math.max(0, weights[id] ?? 1));\n const total = w.reduce((a, b) => a + b, 0);\n if (total === 0) return edgeIds[0];\n\n let r = Math.random() * total;\n for (let i = 0; i < edgeIds.length; i++) {\n r -= w[i];\n if (r <= 0) return edgeIds[i];\n }\n return edgeIds[edgeIds.length - 1];\n}\n\n/**\n * Builds a modified diagram where each weighted gateway's outgoing\n * sequence edges carry a synthetic condition expression keyed to a\n * deterministic per-instance variable `__g{i}`.\n *\n * This lets the existing ExclusiveGateway evaluator (condition-based)\n * implement probabilistic branching without touching the engine core.\n */\nfunction buildBatchDiagram(\n diagram: SimDiagram,\n gatewayWeights: Record<string, GatewayWeights>,\n gwVarMap: Record<string, string>,\n): SimDiagram {\n const patchedEdges: SimEdge[] = diagram.edges.map((edge) => {\n const gwId = edge.source;\n if (!(gwId in gatewayWeights) || edge.type !== \"sequenceFlow\") return edge;\n\n const varName = gwVarMap[gwId];\n const outEdges = diagram.edges.filter(\n (e) => e.source === gwId && e.type === \"sequenceFlow\",\n );\n const idx = outEdges.findIndex((e) => e.id === edge.id);\n if (idx === -1) return edge;\n\n return {\n ...edge,\n conditionExpression: `\\${${varName} == ${idx}}`,\n isDefault: false,\n };\n });\n\n return { nodes: diagram.nodes, edges: patchedEdges };\n}\n\ninterface InstanceResult {\n /** All node IDs touched by any token during this instance. */\n visitedNodes: Set<string>;\n /** Peak concurrent-token count per node observed during this instance. */\n peakPerNode: Record<string, number>;\n /** Final simulation step count. */\n steps: number;\n completed: boolean;\n}\n\n/**\n * Runs a single process instance to completion (or until the safety\n * limit is reached). Manual elements (Tasks, CatchEvents) are fired\n * immediately — simulating instant activity completion — so the\n * run is fully automated.\n */\nfunction runOneInstance(\n diagram: SimDiagram,\n initialVars: Record<string, string | number | boolean>,\n maxSteps: number,\n): InstanceResult {\n let state = createSimulation(diagram, initialVars);\n state = tick(diagram, state);\n\n const visitedNodes = new Set<string>();\n const peakPerNode: Record<string, number> = {};\n\n function snapshot() {\n // Track which nodes are occupied and peak concurrency.\n const counts: Record<string, number> = {};\n for (const token of state.tokens) {\n visitedNodes.add(token.elementId);\n counts[token.elementId] = (counts[token.elementId] ?? 0) + 1;\n }\n for (const [nodeId, c] of Object.entries(counts)) {\n if (c > (peakPerNode[nodeId] ?? 0)) peakPerNode[nodeId] = c;\n }\n }\n\n snapshot();\n\n let steps = 0;\n while (state.status === \"running\" && steps < maxSteps) {\n const fireable = getFireable(diagram, state);\n if (fireable.length === 0) break;\n\n for (const id of fireable) {\n if (state.status !== \"running\") break;\n state = fire(diagram, state, id);\n snapshot();\n }\n steps++;\n }\n\n // Capture all nodes mentioned in the log (covers automatics that\n // never appear as token positions but do appear in log entries).\n for (const entry of state.log) {\n visitedNodes.add(entry.elementId);\n }\n\n return {\n visitedNodes,\n peakPerNode,\n steps: state.step,\n completed: state.status === \"completed\",\n };\n}\n\n// ─── Public API ───────────────────────────────────────────────────────────────\n\n/**\n * Run `config.instances` process instances through the diagram and\n * aggregate per-node statistics for bottleneck analysis.\n *\n * Tasks are completed instantly (no wait time); gateway choices follow\n * either the weights in `config.gatewayWeights` or the existing\n * condition/default/first-edge logic when no weights are specified.\n *\n * @param diagram - The BPMN graph to simulate.\n * @param config - Simulation parameters.\n * @returns Aggregated {@link BatchSimResult}.\n *\n * @example\n * ```ts\n * const result = runBatchSimulation(diagram, {\n * instances: 200,\n * gatewayWeights: {\n * \"gw_approve\": { \"edge_approved\": 70, \"edge_rejected\": 30 },\n * },\n * nodeDurations: { \"task_review\": 3600_000 }, // 1 hour\n * });\n * const topBottleneck = Object.entries(result.nodeStats)\n * .sort((a, b) => b[1].totalDurationMs - a[1].totalDurationMs)[0];\n * ```\n */\nexport function runBatchSimulation(\n diagram: SimDiagram,\n config: BatchSimConfig = {},\n): BatchSimResult {\n const n = Math.max(1, config.instances ?? 100);\n const maxSteps = Math.max(1, config.maxSteps ?? 500);\n const gwWeights = config.gatewayWeights ?? {};\n const nodeDurations = config.nodeDurations ?? {};\n\n // Map each weighted gateway to a synthetic variable name (__g0, __g1, …)\n const gwVarMap: Record<string, string> = {};\n Object.keys(gwWeights).forEach((gwId, i) => {\n gwVarMap[gwId] = `__g${i}`;\n });\n\n const batchDiagram =\n Object.keys(gwWeights).length > 0\n ? buildBatchDiagram(diagram, gwWeights, gwVarMap)\n : diagram;\n\n const nodeStats: Record<string, NodeSimStats> = {};\n\n function node(id: string): NodeSimStats {\n if (!nodeStats[id]) {\n nodeStats[id] = { visits: 0, totalDurationMs: 0, peakConcurrency: 0 };\n }\n return nodeStats[id];\n }\n\n let completed = 0;\n let deadlocked = 0;\n let totalSteps = 0;\n\n for (let i = 0; i < n; i++) {\n // Resolve branch choices for this instance based on configured weights.\n const instanceVars: Record<string, string | number | boolean> = {};\n for (const [gwId, varName] of Object.entries(gwVarMap)) {\n const outEdges = diagram.edges.filter(\n (e) => e.source === gwId && e.type === \"sequenceFlow\",\n );\n const edgeIds = outEdges.map((e) => e.id);\n const chosen = weightedChoice(edgeIds, gwWeights[gwId]);\n instanceVars[varName] = outEdges.findIndex((e) => e.id === chosen);\n }\n\n const result = runOneInstance(batchDiagram, instanceVars, maxSteps);\n\n if (result.completed) {\n completed++;\n totalSteps += result.steps;\n } else {\n deadlocked++;\n }\n\n // Accumulate per-node stats.\n for (const nodeId of result.visitedNodes) {\n const s = node(nodeId);\n s.visits++;\n s.totalDurationMs += nodeDurations[nodeId] ?? 0;\n }\n\n for (const [nodeId, peak] of Object.entries(result.peakPerNode)) {\n const s = node(nodeId);\n if (peak > s.peakConcurrency) s.peakConcurrency = peak;\n }\n }\n\n return {\n nodeStats,\n completed,\n deadlocked,\n total: n,\n avgSteps: completed > 0 ? Math.round(totalSteps / completed) : 0,\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/simulation/batch.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import {\n createSimulation,\n tick,\n fire,\n getFireable,\n} from \"./index\";\nimport type { SimDiagram, SimEdge } from \"./index\";\n\n// ─── Public types ─────────────────────────────────────────────────────────────\n\n/**\n * Branch weights for one gateway.\n * Maps each outgoing sequence-flow edge ID to a non-negative weight.\n * Weights are normalised internally so they need not sum to any specific value.\n * An edge absent from the map inherits weight 1.\n */\nexport type GatewayWeights = Record<string, number>;\n\nexport interface BatchSimConfig {\n /**\n * Number of process instances to simulate.\n * @default 100\n */\n instances?: number;\n\n /**\n * Gateway branch weights. Keys are gateway node IDs; values map\n * each outgoing edge ID to its relative weight.\n * Applies to ExclusiveGateway and InclusiveGateway nodes.\n * Gateways absent from this map fall back to condition evaluation\n * or first-edge behaviour.\n */\n gatewayWeights?: Record<string, GatewayWeights>;\n\n /**\n * Simulated activity duration per node in milliseconds.\n * Used to compute the `totalDurationMs` load indicator:\n * totalDurationMs = visits × nodeDurations[nodeId]\n * Nodes absent from this map contribute 0 ms.\n */\n nodeDurations?: Record<string, number>;\n\n /**\n * Safety limit: maximum tick iterations per instance.\n * Prevents infinite-loop diagrams from blocking indefinitely.\n * @default 500\n */\n maxSteps?: number;\n}\n\nexport interface NodeSimStats {\n /**\n * Number of instances in which at least one token passed through\n * this node. Value in [0, config.instances].\n */\n visits: number;\n\n /**\n * visits × nodeDurations[nodeId].\n * Higher values indicate heavier aggregate load on this activity.\n */\n totalDurationMs: number;\n\n /**\n * Highest number of concurrent tokens at this node observed within\n * any single instance. Values > 1 occur inside parallel branches.\n */\n peakConcurrency: number;\n}\n\nexport interface BatchSimResult {\n /** Per-node aggregated statistics, keyed by node ID. */\n nodeStats: Record<string, NodeSimStats>;\n\n /** Instances that reached the EndEvent(s) successfully. */\n completed: number;\n\n /** Instances that stalled with tokens still present (deadlock). */\n deadlocked: number;\n\n /** Total instances attempted — equals `config.instances`. */\n total: number;\n\n /**\n * Mean number of simulation steps across completed instances.\n * Proxy for relative cycle time (higher = longer path).\n * 0 when no instance completed.\n */\n avgSteps: number;\n}\n\n// ─── Internal helpers ─────────────────────────────────────────────────────────\n\n/** Weighted random selection from a list of edge IDs. */\nfunction weightedChoice(edgeIds: string[], weights: GatewayWeights): string {\n if (edgeIds.length === 0) return \"\";\n const w = edgeIds.map((id) => Math.max(0, weights[id] ?? 1));\n const total = w.reduce((a, b) => a + b, 0);\n if (total === 0) return edgeIds[0];\n\n let r = Math.random() * total;\n for (let i = 0; i < edgeIds.length; i++) {\n r -= w[i];\n if (r <= 0) return edgeIds[i];\n }\n return edgeIds[edgeIds.length - 1];\n}\n\n/**\n * Builds a modified diagram where each weighted gateway's outgoing\n * sequence edges carry a synthetic condition expression keyed to a\n * deterministic per-instance variable `__g{i}`.\n *\n * This lets the existing ExclusiveGateway evaluator (condition-based)\n * implement probabilistic branching without touching the engine core.\n */\nfunction buildBatchDiagram(\n diagram: SimDiagram,\n gatewayWeights: Record<string, GatewayWeights>,\n gwVarMap: Record<string, string>,\n): SimDiagram {\n const patchedEdges: SimEdge[] = diagram.edges.map((edge) => {\n const gwId = edge.source;\n if (!(gwId in gatewayWeights) || edge.type !== \"sequenceFlow\") return edge;\n\n const varName = gwVarMap[gwId];\n const outEdges = diagram.edges.filter(\n (e) => e.source === gwId && e.type === \"sequenceFlow\",\n );\n const idx = outEdges.findIndex((e) => e.id === edge.id);\n if (idx === -1) return edge;\n\n return {\n ...edge,\n conditionExpression: `\\${${varName} == ${idx}}`,\n isDefault: false,\n };\n });\n\n return { nodes: diagram.nodes, edges: patchedEdges };\n}\n\ninterface InstanceResult {\n /** All node IDs touched by any token during this instance. */\n visitedNodes: Set<string>;\n /** Peak concurrent-token count per node observed during this instance. */\n peakPerNode: Record<string, number>;\n /** Final simulation step count. */\n steps: number;\n completed: boolean;\n}\n\n/**\n * Runs a single process instance to completion (or until the safety\n * limit is reached). Manual elements (Tasks, CatchEvents) are fired\n * immediately — simulating instant activity completion — so the\n * run is fully automated.\n */\nfunction runOneInstance(\n diagram: SimDiagram,\n initialVars: Record<string, string | number | boolean>,\n maxSteps: number,\n): InstanceResult {\n let state = createSimulation(diagram, initialVars);\n state = tick(diagram, state);\n\n const visitedNodes = new Set<string>();\n const peakPerNode: Record<string, number> = {};\n\n function snapshot() {\n // Track which nodes are occupied and peak concurrency.\n const counts: Record<string, number> = {};\n for (const token of state.tokens) {\n visitedNodes.add(token.elementId);\n counts[token.elementId] = (counts[token.elementId] ?? 0) + 1;\n }\n for (const [nodeId, c] of Object.entries(counts)) {\n if (c > (peakPerNode[nodeId] ?? 0)) peakPerNode[nodeId] = c;\n }\n }\n\n snapshot();\n\n let steps = 0;\n while (state.status === \"running\" && steps < maxSteps) {\n const fireable = getFireable(diagram, state);\n if (fireable.length === 0) break;\n\n for (const id of fireable) {\n if (state.status !== \"running\") break;\n state = fire(diagram, state, id);\n snapshot();\n }\n steps++;\n }\n\n // Capture all nodes mentioned in the log (covers automatics that\n // never appear as token positions but do appear in log entries).\n for (const entry of state.log) {\n visitedNodes.add(entry.elementId);\n }\n\n return {\n visitedNodes,\n peakPerNode,\n steps: state.step,\n completed: state.status === \"completed\",\n };\n}\n\n// ─── Public API ───────────────────────────────────────────────────────────────\n\n/**\n * Run `config.instances` process instances through the diagram and\n * aggregate per-node statistics for bottleneck analysis.\n *\n * Tasks are completed instantly (no wait time); gateway choices follow\n * either the weights in `config.gatewayWeights` or the existing\n * condition/default/first-edge logic when no weights are specified.\n *\n * @param diagram - The BPMN graph to simulate.\n * @param config - Simulation parameters.\n * @returns Aggregated {@link BatchSimResult}.\n *\n * @example\n * ```ts\n * const result = runBatchSimulation(diagram, {\n * instances: 200,\n * gatewayWeights: {\n * \"gw_approve\": { \"edge_approved\": 70, \"edge_rejected\": 30 },\n * },\n * nodeDurations: { \"task_review\": 3600_000 }, // 1 hour\n * });\n * const topBottleneck = Object.entries(result.nodeStats)\n * .sort((a, b) => b[1].totalDurationMs - a[1].totalDurationMs)[0];\n * ```\n */\nexport function runBatchSimulation(\n diagram: SimDiagram,\n config: BatchSimConfig = {},\n): BatchSimResult {\n const n = Math.max(1, config.instances ?? 100);\n const maxSteps = Math.max(1, config.maxSteps ?? 500);\n const gwWeights = config.gatewayWeights ?? {};\n const nodeDurations = config.nodeDurations ?? {};\n\n // Map each weighted gateway to a synthetic variable name (__g0, __g1, …)\n const gwVarMap: Record<string, string> = {};\n Object.keys(gwWeights).forEach((gwId, i) => {\n gwVarMap[gwId] = `__g${i}`;\n });\n\n const batchDiagram =\n Object.keys(gwWeights).length > 0\n ? buildBatchDiagram(diagram, gwWeights, gwVarMap)\n : diagram;\n\n const nodeStats: Record<string, NodeSimStats> = {};\n\n function node(id: string): NodeSimStats {\n if (!nodeStats[id]) {\n nodeStats[id] = { visits: 0, totalDurationMs: 0, peakConcurrency: 0 };\n }\n return nodeStats[id];\n }\n\n let completed = 0;\n let deadlocked = 0;\n let totalSteps = 0;\n\n for (let i = 0; i < n; i++) {\n // Resolve branch choices for this instance based on configured weights.\n const instanceVars: Record<string, string | number | boolean> = {};\n for (const [gwId, varName] of Object.entries(gwVarMap)) {\n const outEdges = diagram.edges.filter(\n (e) => e.source === gwId && e.type === \"sequenceFlow\",\n );\n const edgeIds = outEdges.map((e) => e.id);\n const chosen = weightedChoice(edgeIds, gwWeights[gwId]);\n instanceVars[varName] = outEdges.findIndex((e) => e.id === chosen);\n }\n\n const result = runOneInstance(batchDiagram, instanceVars, maxSteps);\n\n if (result.completed) {\n completed++;\n totalSteps += result.steps;\n } else {\n deadlocked++;\n }\n\n // Accumulate per-node stats.\n for (const nodeId of result.visitedNodes) {\n const s = node(nodeId);\n s.visits++;\n s.totalDurationMs += nodeDurations[nodeId] ?? 0;\n }\n\n for (const [nodeId, peak] of Object.entries(result.peakPerNode)) {\n const s = node(nodeId);\n if (peak > s.peakConcurrency) s.peakConcurrency = peak;\n }\n }\n\n return {\n nodeStats,\n completed,\n deadlocked,\n total: n,\n avgSteps: completed > 0 ? Math.round(totalSteps / completed) : 0,\n };\n}\n"]}
|
package/dist/layout/index.cjs
CHANGED
|
@@ -706,7 +706,9 @@ function inferBpmnEdgeType(state, sourceId, targetId) {
|
|
|
706
706
|
if (source.data.elementType === "Conversation" || source.data.elementType === "SubConversation" || source.data.elementType === "CallConversation" || target.data.elementType === "Conversation" || target.data.elementType === "SubConversation" || target.data.elementType === "CallConversation") {
|
|
707
707
|
return "conversationLink";
|
|
708
708
|
}
|
|
709
|
-
|
|
709
|
+
const sourcePoolId = getAncestorContainerId(state, source, "Pool");
|
|
710
|
+
const targetPoolId = getAncestorContainerId(state, target, "Pool");
|
|
711
|
+
if (sourcePoolId && targetPoolId && sourcePoolId !== targetPoolId) {
|
|
710
712
|
return "messageFlow";
|
|
711
713
|
}
|
|
712
714
|
return "sequenceFlow";
|
|
@@ -744,6 +746,14 @@ function canContainBpmnElement(parentType, childType) {
|
|
|
744
746
|
}
|
|
745
747
|
return `${parentType} cannot contain BPMN child elements.`;
|
|
746
748
|
}
|
|
749
|
+
function getAncestorContainerId(state, node, elementType) {
|
|
750
|
+
let current = node;
|
|
751
|
+
while (current) {
|
|
752
|
+
if (current.data.elementType === elementType) return current.id;
|
|
753
|
+
current = current.parentId ? diagramsCore.getNode(state, current.parentId) : void 0;
|
|
754
|
+
}
|
|
755
|
+
return void 0;
|
|
756
|
+
}
|
|
747
757
|
function getBpmnNodeSize(node) {
|
|
748
758
|
return diagramsCore.getNodeSize(node, getBpmnElementSize(node.data.elementType));
|
|
749
759
|
}
|