@aranzatech/diagrams-bpmn 0.2.0 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/dist/catalog-DIBySQqA.d.ts +9 -0
  3. package/dist/catalog-m8fHIiKH.d.cts +9 -0
  4. package/dist/{chunk-MF2WE3OM.js → chunk-33AR3PXF.js} +36 -8
  5. package/dist/chunk-33AR3PXF.js.map +1 -0
  6. package/dist/{chunk-3AFZDIMQ.js → chunk-ECTJRD7Z.js} +3 -3
  7. package/dist/{chunk-3AFZDIMQ.js.map → chunk-ECTJRD7Z.js.map} +1 -1
  8. package/dist/{chunk-S3GGEEA5.js → chunk-H3YMTGFG.js} +50 -32
  9. package/dist/chunk-H3YMTGFG.js.map +1 -0
  10. package/dist/chunk-KALSGH4D.js +36 -0
  11. package/dist/chunk-KALSGH4D.js.map +1 -0
  12. package/dist/{chunk-DNR5WBQH.js → chunk-L5Z22RLX.js} +81 -20
  13. package/dist/chunk-L5Z22RLX.js.map +1 -0
  14. package/dist/{chunk-57LA2WSJ.js → chunk-QOGZITWB.js} +10 -6
  15. package/dist/chunk-QOGZITWB.js.map +1 -0
  16. package/dist/{chunk-5GRCJ5X6.js → chunk-RLAJNRF2.js} +3 -3
  17. package/dist/{chunk-5GRCJ5X6.js.map → chunk-RLAJNRF2.js.map} +1 -1
  18. package/dist/chunk-YQTIODXH.js +532 -0
  19. package/dist/chunk-YQTIODXH.js.map +1 -0
  20. package/dist/chunk-ZFGQVLHB.js +226 -0
  21. package/dist/chunk-ZFGQVLHB.js.map +1 -0
  22. package/dist/edges/index.cjs +1 -1
  23. package/dist/edges/index.cjs.map +1 -1
  24. package/dist/edges/index.js +2 -2
  25. package/dist/elements/index.cjs +81 -17
  26. package/dist/elements/index.cjs.map +1 -1
  27. package/dist/elements/index.d.cts +4 -6
  28. package/dist/elements/index.d.ts +4 -6
  29. package/dist/elements/index.js +2 -2
  30. package/dist/index.cjs +697 -79
  31. package/dist/index.cjs.map +1 -1
  32. package/dist/index.d.cts +6 -4
  33. package/dist/index.d.ts +6 -4
  34. package/dist/index.js +9 -8
  35. package/dist/modeling/index.cjs +383 -36
  36. package/dist/modeling/index.cjs.map +1 -1
  37. package/dist/modeling/index.d.cts +61 -3
  38. package/dist/modeling/index.d.ts +61 -3
  39. package/dist/modeling/index.js +3 -3
  40. package/dist/nodes/index.cjs +62 -32
  41. package/dist/nodes/index.cjs.map +1 -1
  42. package/dist/nodes/index.js +2 -2
  43. package/dist/simulation/index.cjs +8 -4
  44. package/dist/simulation/index.cjs.map +1 -1
  45. package/dist/simulation/index.js +1 -1
  46. package/dist/{types-hj621ZRJ.d.ts → types-BxjCV2oX.d.ts} +1 -1
  47. package/dist/{types-BKA0GZz5.d.cts → types-DznxZxpV.d.cts} +11 -1
  48. package/dist/{types-BKA0GZz5.d.ts → types-DznxZxpV.d.ts} +11 -1
  49. package/dist/{types-CCkHqtC_.d.cts → types-vVi5T7qj.d.cts} +1 -1
  50. package/dist/validation/index.cjs +848 -0
  51. package/dist/validation/index.cjs.map +1 -0
  52. package/dist/validation/index.d.cts +25 -0
  53. package/dist/validation/index.d.ts +25 -0
  54. package/dist/validation/index.js +5 -0
  55. package/dist/validation/index.js.map +1 -0
  56. package/dist/xml/index.cjs +74 -22
  57. package/dist/xml/index.cjs.map +1 -1
  58. package/dist/xml/index.d.cts +2 -2
  59. package/dist/xml/index.d.ts +2 -2
  60. package/dist/xml/index.js +2 -2
  61. package/package.json +8 -3
  62. package/dist/chunk-23B2IGK5.js +0 -24
  63. package/dist/chunk-23B2IGK5.js.map +0 -1
  64. package/dist/chunk-57LA2WSJ.js.map +0 -1
  65. package/dist/chunk-DNR5WBQH.js.map +0 -1
  66. package/dist/chunk-G5S4ASP3.js +0 -277
  67. package/dist/chunk-G5S4ASP3.js.map +0 -1
  68. package/dist/chunk-MF2WE3OM.js.map +0 -1
  69. package/dist/chunk-S3GGEEA5.js.map +0 -1
@@ -1,4 +1,4 @@
1
- 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-S3GGEEA5.js';
2
- import '../chunk-23B2IGK5.js';
1
+ 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-H3YMTGFG.js';
2
+ import '../chunk-KALSGH4D.js';
3
3
  //# sourceMappingURL=index.js.map
4
4
  //# sourceMappingURL=index.js.map
@@ -77,7 +77,13 @@ function isManual(nodeType) {
77
77
  return TASK_TYPES.has(nodeType) || nodeType === "IntermediateCatchEvent" || nodeType === "BoundaryEvent";
78
78
  }
79
79
  function isSubProcess(nodeType) {
80
- return nodeType === "SubProcess" || nodeType === "Transaction" || nodeType === "AdHocSubProcess";
80
+ return nodeType === "SubProcess" || nodeType === "Transaction" || nodeType === "EventSubProcess" || nodeType === "AdHocSubProcess";
81
+ }
82
+ function isRootProcessStart(diagram, node) {
83
+ if (node.type !== "StartEvent") return false;
84
+ if (!node.parentId) return true;
85
+ const parent = nodeById(diagram, node.parentId);
86
+ return !parent || !isSubProcess(parent.type);
81
87
  }
82
88
  function getScopeId(diagram, nodeId) {
83
89
  const node = nodeById(diagram, nodeId);
@@ -313,9 +319,7 @@ function fireAutomatic(diagram, state, token) {
313
319
  }
314
320
  function createSimulation(diagram, initialVariables = {}) {
315
321
  _tokenCounter = 0;
316
- const startEvents = diagram.nodes.filter(
317
- (n) => n.type === "StartEvent" && !n.parentId
318
- );
322
+ const startEvents = diagram.nodes.filter((n) => isRootProcessStart(diagram, n));
319
323
  const tokens = startEvents.map((n) => ({
320
324
  id: nextTokenId(),
321
325
  elementId: n.id,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/simulation/evaluator.ts","../../src/simulation/index.ts"],"names":["next"],"mappings":"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","file":"index.cjs","sourcesContent":["export type SimVariables = Record<string, string | number | boolean>;\n\nfunction parseValue(raw: string): string | number | boolean {\n if (raw === \"true\") return true;\n if (raw === \"false\") return false;\n if ((raw.startsWith(\"'\") && raw.endsWith(\"'\")) || (raw.startsWith('\"') && raw.endsWith('\"')))\n return raw.slice(1, -1);\n const n = Number(raw);\n return isNaN(n) ? raw : n;\n}\n\n/**\n * Evaluates a BPMN condition expression (${...}) against a variables map.\n * Supports: bare variable (truthy), ==, !=, >, >=, <, <=, !var\n */\nexport function evalCondition(expr: string, variables: SimVariables): boolean {\n const body = expr.trim().replace(/^\\$\\{|\\}$/g, \"\").trim();\n if (!body) return false;\n\n // Logical NOT: !varName\n if (body.startsWith(\"!\")) {\n const inner = body.slice(1).trim();\n return !Boolean(variables[inner]);\n }\n\n // != comparison\n const neq = body.match(/^(\\w+)\\s*!=\\s*(.+)$/);\n if (neq) return String(variables[neq[1].trim()]) !== String(parseValue(neq[2].trim()));\n\n // == comparison\n const eq = body.match(/^(\\w+)\\s*==\\s*(.+)$/);\n if (eq) {\n const lhs = variables[eq[1].trim()];\n const rhs = parseValue(eq[2].trim());\n // eslint-disable-next-line eqeqeq\n return lhs == rhs;\n }\n\n // >= comparison\n const gte = body.match(/^(\\w+)\\s*>=\\s*(-?\\d+\\.?\\d*)$/);\n if (gte) return Number(variables[gte[1].trim()]) >= Number(gte[2]);\n\n // <= comparison\n const lte = body.match(/^(\\w+)\\s*<=\\s*(-?\\d+\\.?\\d*)$/);\n if (lte) return Number(variables[lte[1].trim()]) <= Number(lte[2]);\n\n // > comparison\n const gt = body.match(/^(\\w+)\\s*>\\s*(-?\\d+\\.?\\d*)$/);\n if (gt) return Number(variables[gt[1].trim()]) > Number(gt[2]);\n\n // < comparison\n const lt = body.match(/^(\\w+)\\s*<\\s*(-?\\d+\\.?\\d*)$/);\n if (lt) return Number(variables[lt[1].trim()]) < Number(lt[2]);\n\n // Bare variable → truthy\n return Boolean(variables[body]);\n}\n","import { evalCondition } from \"./evaluator\";\nexport type { SimVariables } from \"./evaluator\";\n\n// ─── Public types ─────────────────────────────────────────────────────────────\n\nexport interface SimNode {\n id: string;\n type: string;\n name?: string;\n parentId?: string;\n /** BoundaryEvent only — the task/subprocess this event is attached to. */\n attachedToRef?: string;\n /** BoundaryEvent: true = interrupting (default), false = non-interrupting. */\n isInterrupting?: boolean;\n}\n\nexport interface SimEdge {\n id: string;\n type: string;\n source: string;\n target: string;\n conditionExpression?: string;\n isDefault?: boolean;\n}\n\nexport interface SimDiagram {\n nodes: SimNode[];\n edges: SimEdge[];\n}\n\nexport interface SimToken {\n id: string;\n /** The element the token currently occupies. */\n elementId: string;\n /**\n * The subprocess scope this token belongs to.\n * \"root\" for top-level tokens; the subprocess node id for child tokens.\n */\n scopeId: string;\n}\n\nexport type SimStatus = \"idle\" | \"running\" | \"completed\" | \"deadlocked\";\n\nexport type SimLogType =\n | \"created\"\n | \"fired\"\n | \"split\"\n | \"joined\"\n | \"consumed\"\n | \"blocked\"\n | \"deadlocked\"\n | \"interrupted\";\n\nexport interface SimLogEntry {\n step: number;\n type: SimLogType;\n elementId: string;\n tokenId?: string;\n message: string;\n}\n\nexport interface SimulationState {\n tokens: SimToken[];\n step: number;\n status: SimStatus;\n log: SimLogEntry[];\n /** Process-level variables used for gateway condition evaluation. */\n variables: Record<string, string | number | boolean>;\n /** IDs of subprocess nodes whose internal execution has started. */\n enteredScopes: string[];\n}\n\n// ─── Diagram query helpers ────────────────────────────────────────────────────\n\nfunction seqOut(diagram: SimDiagram, nodeId: string): SimEdge[] {\n return diagram.edges.filter((e) => e.type === \"sequenceFlow\" && e.source === nodeId);\n}\n\nfunction seqIn(diagram: SimDiagram, nodeId: string): SimEdge[] {\n return diagram.edges.filter((e) => e.type === \"sequenceFlow\" && e.target === nodeId);\n}\n\nfunction nodeById(diagram: SimDiagram, id: string): SimNode | undefined {\n return diagram.nodes.find((n) => n.id === id);\n}\n\n/** Returns boundary events attached to the given host element. */\nfunction boundaryEventsOf(diagram: SimDiagram, hostId: string): SimNode[] {\n return diagram.nodes.filter((n) => n.type === \"BoundaryEvent\" && n.attachedToRef === hostId);\n}\n\nlet _tokenCounter = 0;\nfunction nextTokenId(): string {\n return `tok_${++_tokenCounter}`;\n}\n\n// ─── Element classification ───────────────────────────────────────────────────\n\nconst GATEWAY_TYPES = new Set([\n \"ExclusiveGateway\",\n \"InclusiveGateway\",\n \"ParallelGateway\",\n \"ComplexGateway\",\n \"EventBasedGateway\",\n]);\n\nconst TASK_TYPES = new Set([\n \"Task\",\n \"UserTask\",\n \"ServiceTask\",\n \"ScriptTask\",\n \"ManualTask\",\n \"BusinessRuleTask\",\n \"ReceiveTask\",\n \"SendTask\",\n \"CallActivity\",\n]);\n\nfunction isAutomatic(nodeType: string): boolean {\n return (\n nodeType === \"StartEvent\" ||\n nodeType === \"EndEvent\" ||\n nodeType === \"IntermediateThrowEvent\" ||\n GATEWAY_TYPES.has(nodeType)\n );\n}\n\nfunction isManual(nodeType: string): boolean {\n return (\n TASK_TYPES.has(nodeType) ||\n nodeType === \"IntermediateCatchEvent\" ||\n nodeType === \"BoundaryEvent\"\n );\n}\n\nfunction isSubProcess(nodeType: string): boolean {\n return (\n nodeType === \"SubProcess\" ||\n nodeType === \"Transaction\" ||\n nodeType === \"AdHocSubProcess\"\n );\n}\n\n// ─── Scope resolution ─────────────────────────────────────────────────────────\n\n/**\n * Determines the scope of a node by checking whether its parent is a SubProcess.\n * Returns \"root\" for top-level nodes or children of Pools/Lanes.\n */\nfunction getScopeId(diagram: SimDiagram, nodeId: string): string {\n const node = nodeById(diagram, nodeId);\n if (!node?.parentId) return \"root\";\n const parent = nodeById(diagram, node.parentId);\n return parent && isSubProcess(parent.type) ? node.parentId : \"root\";\n}\n\n// ─── Core token helpers ───────────────────────────────────────────────────────\n\nfunction withLog(\n state: SimulationState,\n entry: Omit<SimLogEntry, \"step\">,\n): SimulationState {\n return { ...state, log: [...state.log, { ...entry, step: state.step }] };\n}\n\n/**\n * Removes the consumed token and creates new tokens at each outgoing\n * sequence-flow target of sourceId. Each new token inherits the scope\n * determined by the target node's position in the diagram.\n */\nfunction disperseToTargets(\n diagram: SimDiagram,\n state: SimulationState,\n sourceId: string,\n consumedTokenId: string | null,\n): SimulationState {\n const outEdges = seqOut(diagram, sourceId);\n if (outEdges.length === 0) return state;\n\n let next: SimulationState = {\n ...state,\n tokens:\n consumedTokenId !== null\n ? state.tokens.filter((t) => t.id !== consumedTokenId)\n : state.tokens,\n };\n\n for (const edge of outEdges) {\n const target = nodeById(diagram, edge.target);\n if (!target) continue;\n\n const newToken: SimToken = {\n id: nextTokenId(),\n elementId: edge.target,\n scopeId: getScopeId(diagram, edge.target),\n };\n next = {\n ...next,\n tokens: [...next.tokens, newToken],\n };\n next = withLog(next, {\n type: \"created\",\n elementId: edge.target,\n tokenId: newToken.id,\n message: `Token created at \"${target.name ?? edge.target}\".`,\n });\n }\n\n return next;\n}\n\n// ─── SubProcess scope management ─────────────────────────────────────────────\n\nfunction enterSubProcess(\n diagram: SimDiagram,\n state: SimulationState,\n subProcNode: SimNode,\n): SimulationState {\n const childStarts = diagram.nodes.filter(\n (n) => n.type === \"StartEvent\" && n.parentId === subProcNode.id,\n );\n\n let next: SimulationState = {\n ...state,\n enteredScopes: [...state.enteredScopes, subProcNode.id],\n };\n\n for (const startNode of childStarts) {\n const newToken: SimToken = {\n id: nextTokenId(),\n elementId: startNode.id,\n scopeId: subProcNode.id,\n };\n next = {\n ...next,\n tokens: [...next.tokens, newToken],\n };\n next = withLog(next, {\n type: \"created\",\n elementId: startNode.id,\n tokenId: newToken.id,\n message: `SubProcess \"${subProcNode.name ?? subProcNode.id}\" entered — token at \"${startNode.name ?? startNode.id}\".`,\n });\n }\n\n return next;\n}\n\n// ─── Automatic element execution ──────────────────────────────────────────────\n\nfunction fireAutomatic(\n diagram: SimDiagram,\n state: SimulationState,\n token: SimToken,\n): SimulationState {\n const node = nodeById(diagram, token.elementId);\n if (!node) return state;\n const { type } = node;\n const vars = state.variables;\n\n // EndEvent ─────────────────────────────────────────────────────────────────\n if (type === \"EndEvent\") {\n let next: SimulationState = {\n ...state,\n tokens: state.tokens.filter((t) => t.id !== token.id),\n };\n next = withLog(next, {\n type: \"consumed\",\n elementId: node.id,\n tokenId: token.id,\n message: `Token consumed at end event \"${node.name ?? node.id}\".`,\n });\n return next;\n }\n\n // StartEvent / IntermediateThrowEvent ──────────────────────────────────────\n if (type === \"StartEvent\" || type === \"IntermediateThrowEvent\") {\n let next = withLog(state, {\n type: \"fired\",\n elementId: node.id,\n tokenId: token.id,\n message: `\"${node.name ?? node.id}\" (${type}) fired.`,\n });\n return disperseToTargets(diagram, next, node.id, token.id);\n }\n\n // ExclusiveGateway ─────────────────────────────────────────────────────────\n if (type === \"ExclusiveGateway\") {\n const incoming = seqIn(diagram, node.id);\n if (incoming.length >= 2) {\n // XOR join: pass through immediately\n let next = withLog(state, {\n type: \"joined\",\n elementId: node.id,\n tokenId: token.id,\n message: `ExclusiveGateway \"${node.name ?? node.id}\" join — token passes through.`,\n });\n return disperseToTargets(diagram, next, node.id, token.id);\n }\n\n const outEdges = seqOut(diagram, node.id);\n // Evaluate conditions; fall back to default, then first\n const chosen =\n outEdges.find(\n (e) => e.conditionExpression && !e.isDefault && evalCondition(e.conditionExpression, vars),\n ) ??\n outEdges.find((e) => e.isDefault) ??\n outEdges[0];\n\n if (!chosen) return state;\n const target = nodeById(diagram, chosen.target);\n if (!target) return state;\n\n const newToken: SimToken = {\n id: nextTokenId(),\n elementId: chosen.target,\n scopeId: getScopeId(diagram, chosen.target),\n };\n let next: SimulationState = {\n ...state,\n tokens: [...state.tokens.filter((t) => t.id !== token.id), newToken],\n };\n next = withLog(next, {\n type: \"fired\",\n elementId: node.id,\n tokenId: token.id,\n message: `ExclusiveGateway \"${node.name ?? node.id}\" split → \"${target.name ?? chosen.target}\".`,\n });\n return next;\n }\n\n // InclusiveGateway ─────────────────────────────────────────────────────────\n if (type === \"InclusiveGateway\") {\n const incoming = seqIn(diagram, node.id);\n if (incoming.length >= 2) {\n // OR join: pass through (simplified — full semantics require tracking active paths)\n let next = withLog(state, {\n type: \"joined\",\n elementId: node.id,\n tokenId: token.id,\n message: `InclusiveGateway \"${node.name ?? node.id}\" join.`,\n });\n return disperseToTargets(diagram, next, node.id, token.id);\n }\n\n const outEdges = seqOut(diagram, node.id);\n // Take all paths whose condition is true; if none match → take default\n const matching = outEdges.filter(\n (e) => e.conditionExpression && !e.isDefault && evalCondition(e.conditionExpression, vars),\n );\n const activePaths = matching.length > 0 ? matching : outEdges.filter((e) => e.isDefault);\n const paths = activePaths.length > 0 ? activePaths : outEdges; // all if no conditions defined\n\n let next = withLog(state, {\n type: \"split\",\n elementId: node.id,\n tokenId: token.id,\n message: `InclusiveGateway \"${node.name ?? node.id}\" split → ${paths.length} path(s).`,\n });\n\n next = { ...next, tokens: next.tokens.filter((t) => t.id !== token.id) };\n for (const edge of paths) {\n const tgt = nodeById(diagram, edge.target);\n if (!tgt) continue;\n const newToken: SimToken = {\n id: nextTokenId(),\n elementId: edge.target,\n scopeId: getScopeId(diagram, edge.target),\n };\n next = { ...next, tokens: [...next.tokens, newToken] };\n next = withLog(next, {\n type: \"created\",\n elementId: edge.target,\n tokenId: newToken.id,\n message: `Token created at \"${tgt.name ?? edge.target}\".`,\n });\n }\n return next;\n }\n\n // ParallelGateway ──────────────────────────────────────────────────────────\n if (type === \"ParallelGateway\") {\n const incoming = seqIn(diagram, node.id);\n if (incoming.length >= 2) {\n const atGateway = state.tokens.filter((t) => t.elementId === node.id);\n if (atGateway.length < incoming.length) {\n return withLog(state, {\n type: \"blocked\",\n elementId: node.id,\n tokenId: token.id,\n message: `ParallelGateway \"${node.name ?? node.id}\" waiting for ${incoming.length - atGateway.length} more token(s).`,\n });\n }\n const consumeIds = new Set(atGateway.map((t) => t.id));\n let next: SimulationState = {\n ...state,\n tokens: state.tokens.filter((t) => !consumeIds.has(t.id)),\n };\n next = withLog(next, {\n type: \"joined\",\n elementId: node.id,\n message: `ParallelGateway \"${node.name ?? node.id}\" join fired — all paths synchronized.`,\n });\n return disperseToTargets(diagram, next, node.id, null);\n }\n // AND split\n let next = withLog(state, {\n type: \"split\",\n elementId: node.id,\n tokenId: token.id,\n message: `ParallelGateway \"${node.name ?? node.id}\" split → ${seqOut(diagram, node.id).length} paths.`,\n });\n return disperseToTargets(diagram, next, node.id, token.id);\n }\n\n // EventBasedGateway ────────────────────────────────────────────────────────\n // Disperses to ALL outgoing catch events; first one fired wins (race).\n if (type === \"EventBasedGateway\") {\n let next = withLog(state, {\n type: \"split\",\n elementId: node.id,\n tokenId: token.id,\n message: `EventBasedGateway \"${node.name ?? node.id}\" waiting — ${seqOut(diagram, node.id).length} competing event(s).`,\n });\n return disperseToTargets(diagram, next, node.id, token.id);\n }\n\n // ComplexGateway (simplified: first path) ─────────────────────────────────\n if (type === \"ComplexGateway\") {\n const outEdges = seqOut(diagram, node.id);\n const chosen = outEdges[0];\n if (!chosen) return state;\n const newToken: SimToken = {\n id: nextTokenId(),\n elementId: chosen.target,\n scopeId: getScopeId(diagram, chosen.target),\n };\n let next: SimulationState = {\n ...state,\n tokens: [...state.tokens.filter((t) => t.id !== token.id), newToken],\n };\n next = withLog(next, {\n type: \"fired\",\n elementId: node.id,\n tokenId: token.id,\n message: `ComplexGateway \"${node.name ?? node.id}\" fired → \"${chosen.target}\".`,\n });\n return next;\n }\n\n return state;\n}\n\n// ─── Public API ───────────────────────────────────────────────────────────────\n\nexport function createSimulation(\n diagram: SimDiagram,\n initialVariables: Record<string, string | number | boolean> = {},\n): SimulationState {\n _tokenCounter = 0;\n\n const startEvents = diagram.nodes.filter(\n (n) => n.type === \"StartEvent\" && !n.parentId,\n );\n\n const tokens: SimToken[] = startEvents.map((n) => ({\n id: nextTokenId(),\n elementId: n.id,\n scopeId: \"root\",\n }));\n\n const log: SimLogEntry[] = startEvents.map((n, i) => ({\n step: 0,\n type: \"created\" as SimLogType,\n elementId: n.id,\n tokenId: tokens[i]?.id,\n message: `Simulation started — token placed at \"${n.name ?? n.id}\".`,\n }));\n\n return {\n tokens,\n step: 0,\n status: startEvents.length > 0 ? \"running\" : \"idle\",\n log,\n variables: initialVariables,\n enteredScopes: [],\n };\n}\n\nexport function tick(diagram: SimDiagram, state: SimulationState): SimulationState {\n if (state.status !== \"running\") return state;\n\n let current: SimulationState = { ...state, step: state.step + 1 };\n let changed = true;\n let guard = 0;\n\n while (changed && guard < 1000) {\n guard++;\n changed = false;\n\n for (const token of current.tokens) {\n const node = nodeById(diagram, token.elementId);\n if (!node) continue;\n\n // ── SubProcess enter / wait / complete ─────────────────────────────────\n if (isSubProcess(node.type)) {\n if (!current.enteredScopes.includes(node.id)) {\n // Enter: spawn child tokens at internal start events\n const childStarts = diagram.nodes.filter(\n (n) => n.type === \"StartEvent\" && n.parentId === node.id,\n );\n if (childStarts.length > 0) {\n current = enterSubProcess(diagram, current, node);\n changed = true;\n break;\n }\n // No internal structure → treat as manual task (don't advance)\n } else {\n // Check if scope completed\n const scopeTokens = current.tokens.filter((t) => t.scopeId === node.id);\n if (scopeTokens.length === 0) {\n let next = withLog(current, {\n type: \"fired\",\n elementId: node.id,\n tokenId: token.id,\n message: `SubProcess \"${node.name ?? node.id}\" completed.`,\n });\n current = disperseToTargets(diagram, next, node.id, token.id);\n changed = true;\n break;\n }\n }\n continue;\n }\n\n // ── ParallelGateway join: only fire when all tokens are present ─────────\n if (node.type === \"ParallelGateway\") {\n const incoming = seqIn(diagram, node.id);\n const atGateway = current.tokens.filter((t) => t.elementId === node.id);\n if (incoming.length >= 2 && atGateway.length < incoming.length) continue;\n }\n\n if (!isAutomatic(node.type)) continue;\n\n const prevLen = current.tokens.length;\n const prevIds = new Set(current.tokens.map((t) => t.id));\n current = fireAutomatic(diagram, current, token);\n\n const same =\n current.tokens.length === prevLen &&\n [...prevIds].every((id) => current.tokens.some((t) => t.id === id));\n\n if (!same) {\n changed = true;\n break;\n }\n }\n }\n\n // Determine final status\n if (current.tokens.length === 0) {\n current = { ...current, status: \"completed\" };\n }\n\n return current;\n}\n\nexport function fire(\n diagram: SimDiagram,\n state: SimulationState,\n elementId: string,\n variables?: Record<string, string | number | boolean>,\n): SimulationState {\n if (state.status !== \"running\") return state;\n\n const node = nodeById(diagram, elementId);\n if (!node) return state;\n\n const mergedVars = variables ? { ...state.variables, ...variables } : state.variables;\n\n // ── BoundaryEvent: fired from the host task context, no token at the event ─\n if (node.type === \"BoundaryEvent\") {\n const hostId = node.attachedToRef;\n if (!hostId) return state;\n\n // The boundary event is activated relative to a token at the host task\n const hostToken = state.tokens.find((t) => t.elementId === hostId);\n if (!hostToken) return state;\n\n const isInterrupting = node.isInterrupting !== false;\n\n let next: SimulationState = { ...state, variables: mergedVars, step: state.step + 1 };\n next = withLog(next, {\n type: isInterrupting ? \"interrupted\" : \"fired\",\n elementId,\n tokenId: hostToken.id,\n message: `BoundaryEvent \"${node.name ?? elementId}\" fired (${isInterrupting ? \"interrupting\" : \"non-interrupting\"}).`,\n });\n\n if (isInterrupting) {\n // Remove the host task token (interrupts the task)\n next = { ...next, tokens: next.tokens.filter((t) => t.id !== hostToken.id) };\n }\n // Non-interrupting: host token stays; a new parallel token follows the boundary path\n\n next = disperseToTargets(diagram, next, elementId, null);\n return tick(diagram, { ...next, step: next.step - 1 });\n }\n\n const token = state.tokens.find((t) => t.elementId === elementId);\n if (!token) return state;\n\n // ── IntermediateCatchEvent following an EventBasedGateway: cancel race ────\n if (node.type === \"IntermediateCatchEvent\") {\n const gwEdge = seqIn(diagram, elementId).find((e) => {\n const src = nodeById(diagram, e.source);\n return src?.type === \"EventBasedGateway\";\n });\n if (gwEdge) {\n // Cancel all sibling catch events in the race\n const gw = nodeById(diagram, gwEdge.source);\n if (gw) {\n const siblingTargets = new Set(\n seqOut(diagram, gw.id)\n .map((e) => e.target)\n .filter((id) => id !== elementId),\n );\n state = {\n ...state,\n tokens: state.tokens.filter((t) => !siblingTargets.has(t.elementId)),\n };\n }\n }\n }\n\n let next: SimulationState = { ...state, variables: mergedVars, step: state.step + 1 };\n next = withLog(next, {\n type: \"fired\",\n elementId,\n tokenId: token.id,\n message: `\"${node.name ?? elementId}\" (${node.type}) manually fired.`,\n });\n next = disperseToTargets(diagram, next, elementId, token.id);\n return tick(diagram, { ...next, step: next.step - 1 });\n}\n\nexport function getFireable(diagram: SimDiagram, state: SimulationState): string[] {\n if (state.status !== \"running\") return [];\n\n const fireable = new Set<string>();\n\n for (const token of state.tokens) {\n const node = nodeById(diagram, token.elementId);\n if (!node) continue;\n\n if (isManual(node.type)) {\n fireable.add(node.id);\n }\n\n // Expose boundary events attached to tasks that have tokens\n if (TASK_TYPES.has(node.type)) {\n for (const be of boundaryEventsOf(diagram, node.id)) {\n fireable.add(be.id);\n }\n }\n }\n\n return [...fireable];\n}\n\nexport function isCompleted(state: SimulationState): boolean {\n return state.status === \"completed\";\n}\n\n/** Set or update a process variable without advancing the simulation. */\nexport function setVariable(\n state: SimulationState,\n key: string,\n value: string | number | boolean,\n): SimulationState {\n return { ...state, variables: { ...state.variables, [key]: value } };\n}\n"]}
1
+ {"version":3,"sources":["../../src/simulation/evaluator.ts","../../src/simulation/index.ts"],"names":["next"],"mappings":";;;AAEA,SAAS,WAAW,GAAA,EAAwC;AAC1D,EAAA,IAAI,GAAA,KAAQ,QAAQ,OAAO,IAAA;AAC3B,EAAA,IAAI,GAAA,KAAQ,SAAS,OAAO,KAAA;AAC5B,EAAA,IAAK,GAAA,CAAI,UAAA,CAAW,GAAG,CAAA,IAAK,IAAI,QAAA,CAAS,GAAG,CAAA,IAAO,GAAA,CAAI,UAAA,CAAW,GAAG,CAAA,IAAK,GAAA,CAAI,SAAS,GAAG,CAAA;AACxF,IAAA,OAAO,GAAA,CAAI,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AACxB,EAAA,MAAM,CAAA,GAAI,OAAO,GAAG,CAAA;AACpB,EAAA,OAAO,KAAA,CAAM,CAAC,CAAA,GAAI,GAAA,GAAM,CAAA;AAC1B;AAMO,SAAS,aAAA,CAAc,MAAc,SAAA,EAAkC;AAC5E,EAAA,MAAM,IAAA,GAAO,KAAK,IAAA,EAAK,CAAE,QAAQ,YAAA,EAAc,EAAE,EAAE,IAAA,EAAK;AACxD,EAAA,IAAI,CAAC,MAAM,OAAO,KAAA;AAGlB,EAAA,IAAI,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,EAAG;AACxB,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,CAAC,EAAE,IAAA,EAAK;AACjC,IAAA,OAAO,CAAC,OAAA,CAAQ,SAAA,CAAU,KAAK,CAAC,CAAA;AAAA,EAClC;AAGA,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,qBAAqB,CAAA;AAC5C,EAAA,IAAI,KAAK,OAAO,MAAA,CAAO,UAAU,GAAA,CAAI,CAAC,EAAE,IAAA,EAAM,CAAC,CAAA,KAAM,OAAO,UAAA,CAAW,GAAA,CAAI,CAAC,CAAA,CAAE,IAAA,EAAM,CAAC,CAAA;AAGrF,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,KAAA,CAAM,qBAAqB,CAAA;AAC3C,EAAA,IAAI,EAAA,EAAI;AACN,IAAA,MAAM,MAAM,SAAA,CAAU,EAAA,CAAG,CAAC,CAAA,CAAE,MAAM,CAAA;AAClC,IAAA,MAAM,MAAM,UAAA,CAAW,EAAA,CAAG,CAAC,CAAA,CAAE,MAAM,CAAA;AAEnC,IAAA,OAAO,GAAA,IAAO,GAAA;AAAA,EAChB;AAGA,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,8BAA8B,CAAA;AACrD,EAAA,IAAI,GAAA,EAAK,OAAO,MAAA,CAAO,SAAA,CAAU,IAAI,CAAC,CAAA,CAAE,IAAA,EAAM,CAAC,CAAA,IAAK,MAAA,CAAO,GAAA,CAAI,CAAC,CAAC,CAAA;AAGjE,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,8BAA8B,CAAA;AACrD,EAAA,IAAI,GAAA,EAAK,OAAO,MAAA,CAAO,SAAA,CAAU,IAAI,CAAC,CAAA,CAAE,IAAA,EAAM,CAAC,CAAA,IAAK,MAAA,CAAO,GAAA,CAAI,CAAC,CAAC,CAAA;AAGjE,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,KAAA,CAAM,6BAA6B,CAAA;AACnD,EAAA,IAAI,EAAA,EAAI,OAAO,MAAA,CAAO,SAAA,CAAU,GAAG,CAAC,CAAA,CAAE,IAAA,EAAM,CAAC,CAAA,GAAI,MAAA,CAAO,EAAA,CAAG,CAAC,CAAC,CAAA;AAG7D,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,KAAA,CAAM,6BAA6B,CAAA;AACnD,EAAA,IAAI,EAAA,EAAI,OAAO,MAAA,CAAO,SAAA,CAAU,GAAG,CAAC,CAAA,CAAE,IAAA,EAAM,CAAC,CAAA,GAAI,MAAA,CAAO,EAAA,CAAG,CAAC,CAAC,CAAA;AAG7D,EAAA,OAAO,OAAA,CAAQ,SAAA,CAAU,IAAI,CAAC,CAAA;AAChC;;;ACkBA,SAAS,MAAA,CAAO,SAAqB,MAAA,EAA2B;AAC9D,EAAA,OAAO,OAAA,CAAQ,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,KAAM,EAAE,IAAA,KAAS,cAAA,IAAkB,CAAA,CAAE,MAAA,KAAW,MAAM,CAAA;AACrF;AAEA,SAAS,KAAA,CAAM,SAAqB,MAAA,EAA2B;AAC7D,EAAA,OAAO,OAAA,CAAQ,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,KAAM,EAAE,IAAA,KAAS,cAAA,IAAkB,CAAA,CAAE,MAAA,KAAW,MAAM,CAAA;AACrF;AAEA,SAAS,QAAA,CAAS,SAAqB,EAAA,EAAiC;AACtE,EAAA,OAAO,QAAQ,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,EAAE,CAAA;AAC9C;AAGA,SAAS,gBAAA,CAAiB,SAAqB,MAAA,EAA2B;AACxE,EAAA,OAAO,OAAA,CAAQ,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,KAAM,EAAE,IAAA,KAAS,eAAA,IAAmB,CAAA,CAAE,aAAA,KAAkB,MAAM,CAAA;AAC7F;AAEA,IAAI,aAAA,GAAgB,CAAA;AACpB,SAAS,WAAA,GAAsB;AAC7B,EAAA,OAAO,CAAA,IAAA,EAAO,EAAE,aAAa,CAAA,CAAA;AAC/B;AAIA,IAAM,aAAA,uBAAoB,GAAA,CAAI;AAAA,EAC5B,kBAAA;AAAA,EACA,kBAAA;AAAA,EACA,iBAAA;AAAA,EACA,gBAAA;AAAA,EACA;AACF,CAAC,CAAA;AAED,IAAM,UAAA,uBAAiB,GAAA,CAAI;AAAA,EACzB,MAAA;AAAA,EACA,UAAA;AAAA,EACA,aAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,kBAAA;AAAA,EACA,aAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAC,CAAA;AAED,SAAS,YAAY,QAAA,EAA2B;AAC9C,EAAA,OACE,QAAA,KAAa,gBACb,QAAA,KAAa,UAAA,IACb,aAAa,wBAAA,IACb,aAAA,CAAc,IAAI,QAAQ,CAAA;AAE9B;AAEA,SAAS,SAAS,QAAA,EAA2B;AAC3C,EAAA,OACE,WAAW,GAAA,CAAI,QAAQ,CAAA,IACvB,QAAA,KAAa,4BACb,QAAA,KAAa,eAAA;AAEjB;AAEA,SAAS,aAAa,QAAA,EAA2B;AAC/C,EAAA,OACE,aAAa,YAAA,IACb,QAAA,KAAa,aAAA,IACb,QAAA,KAAa,qBACb,QAAA,KAAa,iBAAA;AAEjB;AAEA,SAAS,kBAAA,CAAmB,SAAqB,IAAA,EAAwB;AACvE,EAAA,IAAI,IAAA,CAAK,IAAA,KAAS,YAAA,EAAc,OAAO,KAAA;AACvC,EAAA,IAAI,CAAC,IAAA,CAAK,QAAA,EAAU,OAAO,IAAA;AAC3B,EAAA,MAAM,MAAA,GAAS,QAAA,CAAS,OAAA,EAAS,IAAA,CAAK,QAAQ,CAAA;AAC9C,EAAA,OAAO,CAAC,MAAA,IAAU,CAAC,YAAA,CAAa,OAAO,IAAI,CAAA;AAC7C;AAQA,SAAS,UAAA,CAAW,SAAqB,MAAA,EAAwB;AAC/D,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,OAAA,EAAS,MAAM,CAAA;AACrC,EAAA,IAAI,CAAC,IAAA,EAAM,QAAA,EAAU,OAAO,MAAA;AAC5B,EAAA,MAAM,MAAA,GAAS,QAAA,CAAS,OAAA,EAAS,IAAA,CAAK,QAAQ,CAAA;AAC9C,EAAA,OAAO,UAAU,YAAA,CAAa,MAAA,CAAO,IAAI,CAAA,GAAI,KAAK,QAAA,GAAW,MAAA;AAC/D;AAIA,SAAS,OAAA,CACP,OACA,KAAA,EACiB;AACjB,EAAA,OAAO,EAAE,GAAG,KAAA,EAAO,GAAA,EAAK,CAAC,GAAG,KAAA,CAAM,GAAA,EAAK,EAAE,GAAG,KAAA,EAAO,IAAA,EAAM,KAAA,CAAM,IAAA,EAAM,CAAA,EAAE;AACzE;AAOA,SAAS,iBAAA,CACP,OAAA,EACA,KAAA,EACA,QAAA,EACA,eAAA,EACiB;AACjB,EAAA,MAAM,QAAA,GAAW,MAAA,CAAO,OAAA,EAAS,QAAQ,CAAA;AACzC,EAAA,IAAI,QAAA,CAAS,MAAA,KAAW,CAAA,EAAG,OAAO,KAAA;AAElC,EAAA,IAAI,IAAA,GAAwB;AAAA,IAC1B,GAAG,KAAA;AAAA,IACH,MAAA,EACE,eAAA,KAAoB,IAAA,GAChB,KAAA,CAAM,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,eAAe,CAAA,GACnD,KAAA,CAAM;AAAA,GACd;AAEA,EAAA,KAAA,MAAW,QAAQ,QAAA,EAAU;AAC3B,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,OAAA,EAAS,IAAA,CAAK,MAAM,CAAA;AAC5C,IAAA,IAAI,CAAC,MAAA,EAAQ;AAEb,IAAA,MAAM,QAAA,GAAqB;AAAA,MACzB,IAAI,WAAA,EAAY;AAAA,MAChB,WAAW,IAAA,CAAK,MAAA;AAAA,MAChB,OAAA,EAAS,UAAA,CAAW,OAAA,EAAS,IAAA,CAAK,MAAM;AAAA,KAC1C;AACA,IAAA,IAAA,GAAO;AAAA,MACL,GAAG,IAAA;AAAA,MACH,MAAA,EAAQ,CAAC,GAAG,IAAA,CAAK,QAAQ,QAAQ;AAAA,KACnC;AACA,IAAA,IAAA,GAAO,QAAQ,IAAA,EAAM;AAAA,MACnB,IAAA,EAAM,SAAA;AAAA,MACN,WAAW,IAAA,CAAK,MAAA;AAAA,MAChB,SAAS,QAAA,CAAS,EAAA;AAAA,MAClB,OAAA,EAAS,CAAA,kBAAA,EAAqB,MAAA,CAAO,IAAA,IAAQ,KAAK,MAAM,CAAA,EAAA;AAAA,KACzD,CAAA;AAAA,EACH;AAEA,EAAA,OAAO,IAAA;AACT;AAIA,SAAS,eAAA,CACP,OAAA,EACA,KAAA,EACA,WAAA,EACiB;AACjB,EAAA,MAAM,WAAA,GAAc,QAAQ,KAAA,CAAM,MAAA;AAAA,IAChC,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,YAAA,IAAgB,CAAA,CAAE,aAAa,WAAA,CAAY;AAAA,GAC/D;AAEA,EAAA,IAAI,IAAA,GAAwB;AAAA,IAC1B,GAAG,KAAA;AAAA,IACH,eAAe,CAAC,GAAG,KAAA,CAAM,aAAA,EAAe,YAAY,EAAE;AAAA,GACxD;AAEA,EAAA,KAAA,MAAW,aAAa,WAAA,EAAa;AACnC,IAAA,MAAM,QAAA,GAAqB;AAAA,MACzB,IAAI,WAAA,EAAY;AAAA,MAChB,WAAW,SAAA,CAAU,EAAA;AAAA,MACrB,SAAS,WAAA,CAAY;AAAA,KACvB;AACA,IAAA,IAAA,GAAO;AAAA,MACL,GAAG,IAAA;AAAA,MACH,MAAA,EAAQ,CAAC,GAAG,IAAA,CAAK,QAAQ,QAAQ;AAAA,KACnC;AACA,IAAA,IAAA,GAAO,QAAQ,IAAA,EAAM;AAAA,MACnB,IAAA,EAAM,SAAA;AAAA,MACN,WAAW,SAAA,CAAU,EAAA;AAAA,MACrB,SAAS,QAAA,CAAS,EAAA;AAAA,MAClB,OAAA,EAAS,CAAA,YAAA,EAAe,WAAA,CAAY,IAAA,IAAQ,WAAA,CAAY,EAAE,CAAA,2BAAA,EAAyB,SAAA,CAAU,IAAA,IAAQ,SAAA,CAAU,EAAE,CAAA,EAAA;AAAA,KAClH,CAAA;AAAA,EACH;AAEA,EAAA,OAAO,IAAA;AACT;AAIA,SAAS,aAAA,CACP,OAAA,EACA,KAAA,EACA,KAAA,EACiB;AACjB,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,OAAA,EAAS,KAAA,CAAM,SAAS,CAAA;AAC9C,EAAA,IAAI,CAAC,MAAM,OAAO,KAAA;AAClB,EAAA,MAAM,EAAE,MAAK,GAAI,IAAA;AACjB,EAAA,MAAM,OAAO,KAAA,CAAM,SAAA;AAGnB,EAAA,IAAI,SAAS,UAAA,EAAY;AACvB,IAAA,IAAI,IAAA,GAAwB;AAAA,MAC1B,GAAG,KAAA;AAAA,MACH,MAAA,EAAQ,MAAM,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,KAAA,CAAM,EAAE;AAAA,KACtD;AACA,IAAA,IAAA,GAAO,QAAQ,IAAA,EAAM;AAAA,MACnB,IAAA,EAAM,UAAA;AAAA,MACN,WAAW,IAAA,CAAK,EAAA;AAAA,MAChB,SAAS,KAAA,CAAM,EAAA;AAAA,MACf,OAAA,EAAS,CAAA,6BAAA,EAAgC,IAAA,CAAK,IAAA,IAAQ,KAAK,EAAE,CAAA,EAAA;AAAA,KAC9D,CAAA;AACD,IAAA,OAAO,IAAA;AAAA,EACT;AAGA,EAAA,IAAI,IAAA,KAAS,YAAA,IAAgB,IAAA,KAAS,wBAAA,EAA0B;AAC9D,IAAA,IAAI,IAAA,GAAO,QAAQ,KAAA,EAAO;AAAA,MACxB,IAAA,EAAM,OAAA;AAAA,MACN,WAAW,IAAA,CAAK,EAAA;AAAA,MAChB,SAAS,KAAA,CAAM,EAAA;AAAA,MACf,SAAS,CAAA,CAAA,EAAI,IAAA,CAAK,QAAQ,IAAA,CAAK,EAAE,MAAM,IAAI,CAAA,QAAA;AAAA,KAC5C,CAAA;AACD,IAAA,OAAO,kBAAkB,OAAA,EAAS,IAAA,EAAM,IAAA,CAAK,EAAA,EAAI,MAAM,EAAE,CAAA;AAAA,EAC3D;AAGA,EAAA,IAAI,SAAS,kBAAA,EAAoB;AAC/B,IAAA,MAAM,QAAA,GAAW,KAAA,CAAM,OAAA,EAAS,IAAA,CAAK,EAAE,CAAA;AACvC,IAAA,IAAI,QAAA,CAAS,UAAU,CAAA,EAAG;AAExB,MAAA,IAAIA,KAAAA,GAAO,QAAQ,KAAA,EAAO;AAAA,QACxB,IAAA,EAAM,QAAA;AAAA,QACN,WAAW,IAAA,CAAK,EAAA;AAAA,QAChB,SAAS,KAAA,CAAM,EAAA;AAAA,QACf,OAAA,EAAS,CAAA,kBAAA,EAAqB,IAAA,CAAK,IAAA,IAAQ,KAAK,EAAE,CAAA,mCAAA;AAAA,OACnD,CAAA;AACD,MAAA,OAAO,kBAAkB,OAAA,EAASA,KAAAA,EAAM,IAAA,CAAK,EAAA,EAAI,MAAM,EAAE,CAAA;AAAA,IAC3D;AAEA,IAAA,MAAM,QAAA,GAAW,MAAA,CAAO,OAAA,EAAS,IAAA,CAAK,EAAE,CAAA;AAExC,IAAA,MAAM,SACJ,QAAA,CAAS,IAAA;AAAA,MACP,CAAC,CAAA,KAAM,CAAA,CAAE,mBAAA,IAAuB,CAAC,EAAE,SAAA,IAAa,aAAA,CAAc,CAAA,CAAE,mBAAA,EAAqB,IAAI;AAAA,KAC3F,IACA,SAAS,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,SAAS,CAAA,IAChC,QAAA,CAAS,CAAC,CAAA;AAEZ,IAAA,IAAI,CAAC,QAAQ,OAAO,KAAA;AACpB,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,OAAA,EAAS,MAAA,CAAO,MAAM,CAAA;AAC9C,IAAA,IAAI,CAAC,QAAQ,OAAO,KAAA;AAEpB,IAAA,MAAM,QAAA,GAAqB;AAAA,MACzB,IAAI,WAAA,EAAY;AAAA,MAChB,WAAW,MAAA,CAAO,MAAA;AAAA,MAClB,OAAA,EAAS,UAAA,CAAW,OAAA,EAAS,MAAA,CAAO,MAAM;AAAA,KAC5C;AACA,IAAA,IAAI,IAAA,GAAwB;AAAA,MAC1B,GAAG,KAAA;AAAA,MACH,MAAA,EAAQ,CAAC,GAAG,KAAA,CAAM,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,KAAA,CAAM,EAAE,GAAG,QAAQ;AAAA,KACrE;AACA,IAAA,IAAA,GAAO,QAAQ,IAAA,EAAM;AAAA,MACnB,IAAA,EAAM,OAAA;AAAA,MACN,WAAW,IAAA,CAAK,EAAA;AAAA,MAChB,SAAS,KAAA,CAAM,EAAA;AAAA,MACf,OAAA,EAAS,CAAA,kBAAA,EAAqB,IAAA,CAAK,IAAA,IAAQ,IAAA,CAAK,EAAE,CAAA,gBAAA,EAAc,MAAA,CAAO,IAAA,IAAQ,MAAA,CAAO,MAAM,CAAA,EAAA;AAAA,KAC7F,CAAA;AACD,IAAA,OAAO,IAAA;AAAA,EACT;AAGA,EAAA,IAAI,SAAS,kBAAA,EAAoB;AAC/B,IAAA,MAAM,QAAA,GAAW,KAAA,CAAM,OAAA,EAAS,IAAA,CAAK,EAAE,CAAA;AACvC,IAAA,IAAI,QAAA,CAAS,UAAU,CAAA,EAAG;AAExB,MAAA,IAAIA,KAAAA,GAAO,QAAQ,KAAA,EAAO;AAAA,QACxB,IAAA,EAAM,QAAA;AAAA,QACN,WAAW,IAAA,CAAK,EAAA;AAAA,QAChB,SAAS,KAAA,CAAM,EAAA;AAAA,QACf,OAAA,EAAS,CAAA,kBAAA,EAAqB,IAAA,CAAK,IAAA,IAAQ,KAAK,EAAE,CAAA,OAAA;AAAA,OACnD,CAAA;AACD,MAAA,OAAO,kBAAkB,OAAA,EAASA,KAAAA,EAAM,IAAA,CAAK,EAAA,EAAI,MAAM,EAAE,CAAA;AAAA,IAC3D;AAEA,IAAA,MAAM,QAAA,GAAW,MAAA,CAAO,OAAA,EAAS,IAAA,CAAK,EAAE,CAAA;AAExC,IAAA,MAAM,WAAW,QAAA,CAAS,MAAA;AAAA,MACxB,CAAC,CAAA,KAAM,CAAA,CAAE,mBAAA,IAAuB,CAAC,EAAE,SAAA,IAAa,aAAA,CAAc,CAAA,CAAE,mBAAA,EAAqB,IAAI;AAAA,KAC3F;AACA,IAAA,MAAM,WAAA,GAAc,QAAA,CAAS,MAAA,GAAS,CAAA,GAAI,QAAA,GAAW,SAAS,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,CAAA;AACvF,IAAA,MAAM,KAAA,GAAQ,WAAA,CAAY,MAAA,GAAS,CAAA,GAAI,WAAA,GAAc,QAAA;AAErD,IAAA,IAAI,IAAA,GAAO,QAAQ,KAAA,EAAO;AAAA,MACxB,IAAA,EAAM,OAAA;AAAA,MACN,WAAW,IAAA,CAAK,EAAA;AAAA,MAChB,SAAS,KAAA,CAAM,EAAA;AAAA,MACf,OAAA,EAAS,qBAAqB,IAAA,CAAK,IAAA,IAAQ,KAAK,EAAE,CAAA,eAAA,EAAa,MAAM,MAAM,CAAA,SAAA;AAAA,KAC5E,CAAA;AAED,IAAA,IAAA,GAAO,EAAE,GAAG,IAAA,EAAM,MAAA,EAAQ,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,KAAA,CAAM,EAAE,CAAA,EAAE;AACvE,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,MAAM,GAAA,GAAM,QAAA,CAAS,OAAA,EAAS,IAAA,CAAK,MAAM,CAAA;AACzC,MAAA,IAAI,CAAC,GAAA,EAAK;AACV,MAAA,MAAM,QAAA,GAAqB;AAAA,QACzB,IAAI,WAAA,EAAY;AAAA,QAChB,WAAW,IAAA,CAAK,MAAA;AAAA,QAChB,OAAA,EAAS,UAAA,CAAW,OAAA,EAAS,IAAA,CAAK,MAAM;AAAA,OAC1C;AACA,MAAA,IAAA,GAAO,EAAE,GAAG,IAAA,EAAM,MAAA,EAAQ,CAAC,GAAG,IAAA,CAAK,MAAA,EAAQ,QAAQ,CAAA,EAAE;AACrD,MAAA,IAAA,GAAO,QAAQ,IAAA,EAAM;AAAA,QACnB,IAAA,EAAM,SAAA;AAAA,QACN,WAAW,IAAA,CAAK,MAAA;AAAA,QAChB,SAAS,QAAA,CAAS,EAAA;AAAA,QAClB,OAAA,EAAS,CAAA,kBAAA,EAAqB,GAAA,CAAI,IAAA,IAAQ,KAAK,MAAM,CAAA,EAAA;AAAA,OACtD,CAAA;AAAA,IACH;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAGA,EAAA,IAAI,SAAS,iBAAA,EAAmB;AAC9B,IAAA,MAAM,QAAA,GAAW,KAAA,CAAM,OAAA,EAAS,IAAA,CAAK,EAAE,CAAA;AACvC,IAAA,IAAI,QAAA,CAAS,UAAU,CAAA,EAAG;AACxB,MAAA,MAAM,SAAA,GAAY,MAAM,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,SAAA,KAAc,IAAA,CAAK,EAAE,CAAA;AACpE,MAAA,IAAI,SAAA,CAAU,MAAA,GAAS,QAAA,CAAS,MAAA,EAAQ;AACtC,QAAA,OAAO,QAAQ,KAAA,EAAO;AAAA,UACpB,IAAA,EAAM,SAAA;AAAA,UACN,WAAW,IAAA,CAAK,EAAA;AAAA,UAChB,SAAS,KAAA,CAAM,EAAA;AAAA,UACf,OAAA,EAAS,CAAA,iBAAA,EAAoB,IAAA,CAAK,IAAA,IAAQ,IAAA,CAAK,EAAE,CAAA,cAAA,EAAiB,QAAA,CAAS,MAAA,GAAS,SAAA,CAAU,MAAM,CAAA,eAAA;AAAA,SACrG,CAAA;AAAA,MACH;AACA,MAAA,MAAM,UAAA,GAAa,IAAI,GAAA,CAAI,SAAA,CAAU,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,EAAE,CAAC,CAAA;AACrD,MAAA,IAAIA,KAAAA,GAAwB;AAAA,QAC1B,GAAG,KAAA;AAAA,QACH,MAAA,EAAQ,KAAA,CAAM,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA,KAAM,CAAC,UAAA,CAAW,GAAA,CAAI,CAAA,CAAE,EAAE,CAAC;AAAA,OAC1D;AACA,MAAAA,KAAAA,GAAO,QAAQA,KAAAA,EAAM;AAAA,QACnB,IAAA,EAAM,QAAA;AAAA,QACN,WAAW,IAAA,CAAK,EAAA;AAAA,QAChB,OAAA,EAAS,CAAA,iBAAA,EAAoB,IAAA,CAAK,IAAA,IAAQ,KAAK,EAAE,CAAA,2CAAA;AAAA,OAClD,CAAA;AACD,MAAA,OAAO,iBAAA,CAAkB,OAAA,EAASA,KAAAA,EAAM,IAAA,CAAK,IAAI,IAAI,CAAA;AAAA,IACvD;AAEA,IAAA,IAAI,IAAA,GAAO,QAAQ,KAAA,EAAO;AAAA,MACxB,IAAA,EAAM,OAAA;AAAA,MACN,WAAW,IAAA,CAAK,EAAA;AAAA,MAChB,SAAS,KAAA,CAAM,EAAA;AAAA,MACf,OAAA,EAAS,CAAA,iBAAA,EAAoB,IAAA,CAAK,IAAA,IAAQ,IAAA,CAAK,EAAE,CAAA,eAAA,EAAa,MAAA,CAAO,OAAA,EAAS,IAAA,CAAK,EAAE,CAAA,CAAE,MAAM,CAAA,OAAA;AAAA,KAC9F,CAAA;AACD,IAAA,OAAO,kBAAkB,OAAA,EAAS,IAAA,EAAM,IAAA,CAAK,EAAA,EAAI,MAAM,EAAE,CAAA;AAAA,EAC3D;AAIA,EAAA,IAAI,SAAS,mBAAA,EAAqB;AAChC,IAAA,IAAI,IAAA,GAAO,QAAQ,KAAA,EAAO;AAAA,MACxB,IAAA,EAAM,OAAA;AAAA,MACN,WAAW,IAAA,CAAK,EAAA;AAAA,MAChB,SAAS,KAAA,CAAM,EAAA;AAAA,MACf,OAAA,EAAS,CAAA,mBAAA,EAAsB,IAAA,CAAK,IAAA,IAAQ,IAAA,CAAK,EAAE,CAAA,iBAAA,EAAe,MAAA,CAAO,OAAA,EAAS,IAAA,CAAK,EAAE,CAAA,CAAE,MAAM,CAAA,oBAAA;AAAA,KAClG,CAAA;AACD,IAAA,OAAO,kBAAkB,OAAA,EAAS,IAAA,EAAM,IAAA,CAAK,EAAA,EAAI,MAAM,EAAE,CAAA;AAAA,EAC3D;AAGA,EAAA,IAAI,SAAS,gBAAA,EAAkB;AAC7B,IAAA,MAAM,QAAA,GAAW,MAAA,CAAO,OAAA,EAAS,IAAA,CAAK,EAAE,CAAA;AACxC,IAAA,MAAM,MAAA,GAAS,SAAS,CAAC,CAAA;AACzB,IAAA,IAAI,CAAC,QAAQ,OAAO,KAAA;AACpB,IAAA,MAAM,QAAA,GAAqB;AAAA,MACzB,IAAI,WAAA,EAAY;AAAA,MAChB,WAAW,MAAA,CAAO,MAAA;AAAA,MAClB,OAAA,EAAS,UAAA,CAAW,OAAA,EAAS,MAAA,CAAO,MAAM;AAAA,KAC5C;AACA,IAAA,IAAI,IAAA,GAAwB;AAAA,MAC1B,GAAG,KAAA;AAAA,MACH,MAAA,EAAQ,CAAC,GAAG,KAAA,CAAM,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,KAAA,CAAM,EAAE,GAAG,QAAQ;AAAA,KACrE;AACA,IAAA,IAAA,GAAO,QAAQ,IAAA,EAAM;AAAA,MACnB,IAAA,EAAM,OAAA;AAAA,MACN,WAAW,IAAA,CAAK,EAAA;AAAA,MAChB,SAAS,KAAA,CAAM,EAAA;AAAA,MACf,OAAA,EAAS,mBAAmB,IAAA,CAAK,IAAA,IAAQ,KAAK,EAAE,CAAA,gBAAA,EAAc,OAAO,MAAM,CAAA,EAAA;AAAA,KAC5E,CAAA;AACD,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,OAAO,KAAA;AACT;AAIO,SAAS,gBAAA,CACd,OAAA,EACA,gBAAA,GAA8D,EAAC,EAC9C;AACjB,EAAA,aAAA,GAAgB,CAAA;AAEhB,EAAA,MAAM,WAAA,GAAc,QAAQ,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,KAAM,kBAAA,CAAmB,OAAA,EAAS,CAAC,CAAC,CAAA;AAE9E,EAAA,MAAM,MAAA,GAAqB,WAAA,CAAY,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,IACjD,IAAI,WAAA,EAAY;AAAA,IAChB,WAAW,CAAA,CAAE,EAAA;AAAA,IACb,OAAA,EAAS;AAAA,GACX,CAAE,CAAA;AAEF,EAAA,MAAM,GAAA,GAAqB,WAAA,CAAY,GAAA,CAAI,CAAC,GAAG,CAAA,MAAO;AAAA,IACpD,IAAA,EAAM,CAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,WAAW,CAAA,CAAE,EAAA;AAAA,IACb,OAAA,EAAS,MAAA,CAAO,CAAC,CAAA,EAAG,EAAA;AAAA,IACpB,OAAA,EAAS,CAAA,2CAAA,EAAyC,CAAA,CAAE,IAAA,IAAQ,EAAE,EAAE,CAAA,EAAA;AAAA,GAClE,CAAE,CAAA;AAEF,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,IAAA,EAAM,CAAA;AAAA,IACN,MAAA,EAAQ,WAAA,CAAY,MAAA,GAAS,CAAA,GAAI,SAAA,GAAY,MAAA;AAAA,IAC7C,GAAA;AAAA,IACA,SAAA,EAAW,gBAAA;AAAA,IACX,eAAe;AAAC,GAClB;AACF;AAEO,SAAS,IAAA,CAAK,SAAqB,KAAA,EAAyC;AACjF,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,SAAA,EAAW,OAAO,KAAA;AAEvC,EAAA,IAAI,UAA2B,EAAE,GAAG,OAAO,IAAA,EAAM,KAAA,CAAM,OAAO,CAAA,EAAE;AAChE,EAAA,IAAI,OAAA,GAAU,IAAA;AACd,EAAA,IAAI,KAAA,GAAQ,CAAA;AAEZ,EAAA,OAAO,OAAA,IAAW,QAAQ,GAAA,EAAM;AAC9B,IAAA,KAAA,EAAA;AACA,IAAA,OAAA,GAAU,KAAA;AAEV,IAAA,KAAA,MAAW,KAAA,IAAS,QAAQ,MAAA,EAAQ;AAClC,MAAA,MAAM,IAAA,GAAO,QAAA,CAAS,OAAA,EAAS,KAAA,CAAM,SAAS,CAAA;AAC9C,MAAA,IAAI,CAAC,IAAA,EAAM;AAGX,MAAA,IAAI,YAAA,CAAa,IAAA,CAAK,IAAI,CAAA,EAAG;AAC3B,QAAA,IAAI,CAAC,OAAA,CAAQ,aAAA,CAAc,QAAA,CAAS,IAAA,CAAK,EAAE,CAAA,EAAG;AAE5C,UAAA,MAAM,WAAA,GAAc,QAAQ,KAAA,CAAM,MAAA;AAAA,YAChC,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,YAAA,IAAgB,CAAA,CAAE,aAAa,IAAA,CAAK;AAAA,WACxD;AACA,UAAA,IAAI,WAAA,CAAY,SAAS,CAAA,EAAG;AAC1B,YAAA,OAAA,GAAU,eAAA,CAAgB,OAAA,EAAS,OAAA,EAAS,IAAI,CAAA;AAChD,YAAA,OAAA,GAAU,IAAA;AACV,YAAA;AAAA,UACF;AAAA,QAEF,CAAA,MAAO;AAEL,UAAA,MAAM,WAAA,GAAc,QAAQ,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,OAAA,KAAY,IAAA,CAAK,EAAE,CAAA;AACtE,UAAA,IAAI,WAAA,CAAY,WAAW,CAAA,EAAG;AAC5B,YAAA,IAAI,IAAA,GAAO,QAAQ,OAAA,EAAS;AAAA,cAC1B,IAAA,EAAM,OAAA;AAAA,cACN,WAAW,IAAA,CAAK,EAAA;AAAA,cAChB,SAAS,KAAA,CAAM,EAAA;AAAA,cACf,OAAA,EAAS,CAAA,YAAA,EAAe,IAAA,CAAK,IAAA,IAAQ,KAAK,EAAE,CAAA,YAAA;AAAA,aAC7C,CAAA;AACD,YAAA,OAAA,GAAU,kBAAkB,OAAA,EAAS,IAAA,EAAM,IAAA,CAAK,EAAA,EAAI,MAAM,EAAE,CAAA;AAC5D,YAAA,OAAA,GAAU,IAAA;AACV,YAAA;AAAA,UACF;AAAA,QACF;AACA,QAAA;AAAA,MACF;AAGA,MAAA,IAAI,IAAA,CAAK,SAAS,iBAAA,EAAmB;AACnC,QAAA,MAAM,QAAA,GAAW,KAAA,CAAM,OAAA,EAAS,IAAA,CAAK,EAAE,CAAA;AACvC,QAAA,MAAM,SAAA,GAAY,QAAQ,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,SAAA,KAAc,IAAA,CAAK,EAAE,CAAA;AACtE,QAAA,IAAI,SAAS,MAAA,IAAU,CAAA,IAAK,SAAA,CAAU,MAAA,GAAS,SAAS,MAAA,EAAQ;AAAA,MAClE;AAEA,MAAA,IAAI,CAAC,WAAA,CAAY,IAAA,CAAK,IAAI,CAAA,EAAG;AAE7B,MAAA,MAAM,OAAA,GAAU,QAAQ,MAAA,CAAO,MAAA;AAC/B,MAAA,MAAM,OAAA,GAAU,IAAI,GAAA,CAAI,OAAA,CAAQ,MAAA,CAAO,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,EAAE,CAAC,CAAA;AACvD,MAAA,OAAA,GAAU,aAAA,CAAc,OAAA,EAAS,OAAA,EAAS,KAAK,CAAA;AAE/C,MAAA,MAAM,IAAA,GACJ,QAAQ,MAAA,CAAO,MAAA,KAAW,WAC1B,CAAC,GAAG,OAAO,CAAA,CAAE,KAAA,CAAM,CAAC,EAAA,KAAO,OAAA,CAAQ,OAAO,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,EAAA,KAAO,EAAE,CAAC,CAAA;AAEpE,MAAA,IAAI,CAAC,IAAA,EAAM;AACT,QAAA,OAAA,GAAU,IAAA;AACV,QAAA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAGA,EAAA,IAAI,OAAA,CAAQ,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG;AAC/B,IAAA,OAAA,GAAU,EAAE,GAAG,OAAA,EAAS,MAAA,EAAQ,WAAA,EAAY;AAAA,EAC9C;AAEA,EAAA,OAAO,OAAA;AACT;AAEO,SAAS,IAAA,CACd,OAAA,EACA,KAAA,EACA,SAAA,EACA,SAAA,EACiB;AACjB,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,SAAA,EAAW,OAAO,KAAA;AAEvC,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,OAAA,EAAS,SAAS,CAAA;AACxC,EAAA,IAAI,CAAC,MAAM,OAAO,KAAA;AAElB,EAAA,MAAM,UAAA,GAAa,YAAY,EAAE,GAAG,MAAM,SAAA,EAAW,GAAG,SAAA,EAAU,GAAI,KAAA,CAAM,SAAA;AAG5E,EAAA,IAAI,IAAA,CAAK,SAAS,eAAA,EAAiB;AACjC,IAAA,MAAM,SAAS,IAAA,CAAK,aAAA;AACpB,IAAA,IAAI,CAAC,QAAQ,OAAO,KAAA;AAGpB,IAAA,MAAM,SAAA,GAAY,MAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,cAAc,MAAM,CAAA;AACjE,IAAA,IAAI,CAAC,WAAW,OAAO,KAAA;AAEvB,IAAA,MAAM,cAAA,GAAiB,KAAK,cAAA,KAAmB,KAAA;AAE/C,IAAA,IAAIA,KAAAA,GAAwB,EAAE,GAAG,KAAA,EAAO,WAAW,UAAA,EAAY,IAAA,EAAM,KAAA,CAAM,IAAA,GAAO,CAAA,EAAE;AACpF,IAAAA,KAAAA,GAAO,QAAQA,KAAAA,EAAM;AAAA,MACnB,IAAA,EAAM,iBAAiB,aAAA,GAAgB,OAAA;AAAA,MACvC,SAAA;AAAA,MACA,SAAS,SAAA,CAAU,EAAA;AAAA,MACnB,OAAA,EAAS,kBAAkB,IAAA,CAAK,IAAA,IAAQ,SAAS,CAAA,SAAA,EAAY,cAAA,GAAiB,iBAAiB,kBAAkB,CAAA,EAAA;AAAA,KAClH,CAAA;AAED,IAAA,IAAI,cAAA,EAAgB;AAElB,MAAAA,KAAAA,GAAO,EAAE,GAAGA,KAAAA,EAAM,QAAQA,KAAAA,CAAK,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,SAAA,CAAU,EAAE,CAAA,EAAE;AAAA,IAC7E;AAGA,IAAAA,KAAAA,GAAO,iBAAA,CAAkB,OAAA,EAASA,KAAAA,EAAM,WAAW,IAAI,CAAA;AACvD,IAAA,OAAO,IAAA,CAAK,SAAS,EAAE,GAAGA,OAAM,IAAA,EAAMA,KAAAA,CAAK,IAAA,GAAO,CAAA,EAAG,CAAA;AAAA,EACvD;AAEA,EAAA,MAAM,KAAA,GAAQ,MAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,cAAc,SAAS,CAAA;AAChE,EAAA,IAAI,CAAC,OAAO,OAAO,KAAA;AAGnB,EAAA,IAAI,IAAA,CAAK,SAAS,wBAAA,EAA0B;AAC1C,IAAA,MAAM,SAAS,KAAA,CAAM,OAAA,EAAS,SAAS,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,KAAM;AACnD,MAAA,MAAM,GAAA,GAAM,QAAA,CAAS,OAAA,EAAS,CAAA,CAAE,MAAM,CAAA;AACtC,MAAA,OAAO,KAAK,IAAA,KAAS,mBAAA;AAAA,IACvB,CAAC,CAAA;AACD,IAAA,IAAI,MAAA,EAAQ;AAEV,MAAA,MAAM,EAAA,GAAK,QAAA,CAAS,OAAA,EAAS,MAAA,CAAO,MAAM,CAAA;AAC1C,MAAA,IAAI,EAAA,EAAI;AACN,QAAA,MAAM,iBAAiB,IAAI,GAAA;AAAA,UACzB,MAAA,CAAO,OAAA,EAAS,EAAA,CAAG,EAAE,EAClB,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,MAAM,CAAA,CACnB,MAAA,CAAO,CAAC,EAAA,KAAO,OAAO,SAAS;AAAA,SACpC;AACA,QAAA,KAAA,GAAQ;AAAA,UACN,GAAG,KAAA;AAAA,UACH,MAAA,EAAQ,KAAA,CAAM,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA,KAAM,CAAC,cAAA,CAAe,GAAA,CAAI,CAAA,CAAE,SAAS,CAAC;AAAA,SACrE;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAI,IAAA,GAAwB,EAAE,GAAG,KAAA,EAAO,WAAW,UAAA,EAAY,IAAA,EAAM,KAAA,CAAM,IAAA,GAAO,CAAA,EAAE;AACpF,EAAA,IAAA,GAAO,QAAQ,IAAA,EAAM;AAAA,IACnB,IAAA,EAAM,OAAA;AAAA,IACN,SAAA;AAAA,IACA,SAAS,KAAA,CAAM,EAAA;AAAA,IACf,SAAS,CAAA,CAAA,EAAI,IAAA,CAAK,QAAQ,SAAS,CAAA,GAAA,EAAM,KAAK,IAAI,CAAA,iBAAA;AAAA,GACnD,CAAA;AACD,EAAA,IAAA,GAAO,iBAAA,CAAkB,OAAA,EAAS,IAAA,EAAM,SAAA,EAAW,MAAM,EAAE,CAAA;AAC3D,EAAA,OAAO,IAAA,CAAK,SAAS,EAAE,GAAG,MAAM,IAAA,EAAM,IAAA,CAAK,IAAA,GAAO,CAAA,EAAG,CAAA;AACvD;AAEO,SAAS,WAAA,CAAY,SAAqB,KAAA,EAAkC;AACjF,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,SAAA,EAAW,OAAO,EAAC;AAExC,EAAA,MAAM,QAAA,uBAAe,GAAA,EAAY;AAEjC,EAAA,KAAA,MAAW,KAAA,IAAS,MAAM,MAAA,EAAQ;AAChC,IAAA,MAAM,IAAA,GAAO,QAAA,CAAS,OAAA,EAAS,KAAA,CAAM,SAAS,CAAA;AAC9C,IAAA,IAAI,CAAC,IAAA,EAAM;AAEX,IAAA,IAAI,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA,EAAG;AACvB,MAAA,QAAA,CAAS,GAAA,CAAI,KAAK,EAAE,CAAA;AAAA,IACtB;AAGA,IAAA,IAAI,UAAA,CAAW,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA,EAAG;AAC7B,MAAA,KAAA,MAAW,EAAA,IAAM,gBAAA,CAAiB,OAAA,EAAS,IAAA,CAAK,EAAE,CAAA,EAAG;AACnD,QAAA,QAAA,CAAS,GAAA,CAAI,GAAG,EAAE,CAAA;AAAA,MACpB;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,CAAC,GAAG,QAAQ,CAAA;AACrB;AAEO,SAAS,YAAY,KAAA,EAAiC;AAC3D,EAAA,OAAO,MAAM,MAAA,KAAW,WAAA;AAC1B;AAGO,SAAS,WAAA,CACd,KAAA,EACA,GAAA,EACA,KAAA,EACiB;AACjB,EAAA,OAAO,EAAE,GAAG,KAAA,EAAO,SAAA,EAAW,EAAE,GAAG,KAAA,CAAM,SAAA,EAAW,CAAC,GAAG,GAAG,KAAA,EAAM,EAAE;AACrE","file":"index.cjs","sourcesContent":["export type SimVariables = Record<string, string | number | boolean>;\n\nfunction parseValue(raw: string): string | number | boolean {\n if (raw === \"true\") return true;\n if (raw === \"false\") return false;\n if ((raw.startsWith(\"'\") && raw.endsWith(\"'\")) || (raw.startsWith('\"') && raw.endsWith('\"')))\n return raw.slice(1, -1);\n const n = Number(raw);\n return isNaN(n) ? raw : n;\n}\n\n/**\n * Evaluates a BPMN condition expression (${...}) against a variables map.\n * Supports: bare variable (truthy), ==, !=, >, >=, <, <=, !var\n */\nexport function evalCondition(expr: string, variables: SimVariables): boolean {\n const body = expr.trim().replace(/^\\$\\{|\\}$/g, \"\").trim();\n if (!body) return false;\n\n // Logical NOT: !varName\n if (body.startsWith(\"!\")) {\n const inner = body.slice(1).trim();\n return !Boolean(variables[inner]);\n }\n\n // != comparison\n const neq = body.match(/^(\\w+)\\s*!=\\s*(.+)$/);\n if (neq) return String(variables[neq[1].trim()]) !== String(parseValue(neq[2].trim()));\n\n // == comparison\n const eq = body.match(/^(\\w+)\\s*==\\s*(.+)$/);\n if (eq) {\n const lhs = variables[eq[1].trim()];\n const rhs = parseValue(eq[2].trim());\n // eslint-disable-next-line eqeqeq\n return lhs == rhs;\n }\n\n // >= comparison\n const gte = body.match(/^(\\w+)\\s*>=\\s*(-?\\d+\\.?\\d*)$/);\n if (gte) return Number(variables[gte[1].trim()]) >= Number(gte[2]);\n\n // <= comparison\n const lte = body.match(/^(\\w+)\\s*<=\\s*(-?\\d+\\.?\\d*)$/);\n if (lte) return Number(variables[lte[1].trim()]) <= Number(lte[2]);\n\n // > comparison\n const gt = body.match(/^(\\w+)\\s*>\\s*(-?\\d+\\.?\\d*)$/);\n if (gt) return Number(variables[gt[1].trim()]) > Number(gt[2]);\n\n // < comparison\n const lt = body.match(/^(\\w+)\\s*<\\s*(-?\\d+\\.?\\d*)$/);\n if (lt) return Number(variables[lt[1].trim()]) < Number(lt[2]);\n\n // Bare variable → truthy\n return Boolean(variables[body]);\n}\n","import { evalCondition } from \"./evaluator\";\nexport type { SimVariables } from \"./evaluator\";\n\n// ─── Public types ─────────────────────────────────────────────────────────────\n\nexport interface SimNode {\n id: string;\n type: string;\n name?: string;\n parentId?: string;\n /** BoundaryEvent only — the task/subprocess this event is attached to. */\n attachedToRef?: string;\n /** BoundaryEvent: true = interrupting (default), false = non-interrupting. */\n isInterrupting?: boolean;\n}\n\nexport interface SimEdge {\n id: string;\n type: string;\n source: string;\n target: string;\n conditionExpression?: string;\n isDefault?: boolean;\n}\n\nexport interface SimDiagram {\n nodes: SimNode[];\n edges: SimEdge[];\n}\n\nexport interface SimToken {\n id: string;\n /** The element the token currently occupies. */\n elementId: string;\n /**\n * The subprocess scope this token belongs to.\n * \"root\" for top-level tokens; the subprocess node id for child tokens.\n */\n scopeId: string;\n}\n\nexport type SimStatus = \"idle\" | \"running\" | \"completed\" | \"deadlocked\";\n\nexport type SimLogType =\n | \"created\"\n | \"fired\"\n | \"split\"\n | \"joined\"\n | \"consumed\"\n | \"blocked\"\n | \"deadlocked\"\n | \"interrupted\";\n\nexport interface SimLogEntry {\n step: number;\n type: SimLogType;\n elementId: string;\n tokenId?: string;\n message: string;\n}\n\nexport interface SimulationState {\n tokens: SimToken[];\n step: number;\n status: SimStatus;\n log: SimLogEntry[];\n /** Process-level variables used for gateway condition evaluation. */\n variables: Record<string, string | number | boolean>;\n /** IDs of subprocess nodes whose internal execution has started. */\n enteredScopes: string[];\n}\n\n// ─── Diagram query helpers ────────────────────────────────────────────────────\n\nfunction seqOut(diagram: SimDiagram, nodeId: string): SimEdge[] {\n return diagram.edges.filter((e) => e.type === \"sequenceFlow\" && e.source === nodeId);\n}\n\nfunction seqIn(diagram: SimDiagram, nodeId: string): SimEdge[] {\n return diagram.edges.filter((e) => e.type === \"sequenceFlow\" && e.target === nodeId);\n}\n\nfunction nodeById(diagram: SimDiagram, id: string): SimNode | undefined {\n return diagram.nodes.find((n) => n.id === id);\n}\n\n/** Returns boundary events attached to the given host element. */\nfunction boundaryEventsOf(diagram: SimDiagram, hostId: string): SimNode[] {\n return diagram.nodes.filter((n) => n.type === \"BoundaryEvent\" && n.attachedToRef === hostId);\n}\n\nlet _tokenCounter = 0;\nfunction nextTokenId(): string {\n return `tok_${++_tokenCounter}`;\n}\n\n// ─── Element classification ───────────────────────────────────────────────────\n\nconst GATEWAY_TYPES = new Set([\n \"ExclusiveGateway\",\n \"InclusiveGateway\",\n \"ParallelGateway\",\n \"ComplexGateway\",\n \"EventBasedGateway\",\n]);\n\nconst TASK_TYPES = new Set([\n \"Task\",\n \"UserTask\",\n \"ServiceTask\",\n \"ScriptTask\",\n \"ManualTask\",\n \"BusinessRuleTask\",\n \"ReceiveTask\",\n \"SendTask\",\n \"CallActivity\",\n]);\n\nfunction isAutomatic(nodeType: string): boolean {\n return (\n nodeType === \"StartEvent\" ||\n nodeType === \"EndEvent\" ||\n nodeType === \"IntermediateThrowEvent\" ||\n GATEWAY_TYPES.has(nodeType)\n );\n}\n\nfunction isManual(nodeType: string): boolean {\n return (\n TASK_TYPES.has(nodeType) ||\n nodeType === \"IntermediateCatchEvent\" ||\n nodeType === \"BoundaryEvent\"\n );\n}\n\nfunction isSubProcess(nodeType: string): boolean {\n return (\n nodeType === \"SubProcess\" ||\n nodeType === \"Transaction\" ||\n nodeType === \"EventSubProcess\" ||\n nodeType === \"AdHocSubProcess\"\n );\n}\n\nfunction isRootProcessStart(diagram: SimDiagram, node: SimNode): boolean {\n if (node.type !== \"StartEvent\") return false;\n if (!node.parentId) return true;\n const parent = nodeById(diagram, node.parentId);\n return !parent || !isSubProcess(parent.type);\n}\n\n// ─── Scope resolution ─────────────────────────────────────────────────────────\n\n/**\n * Determines the scope of a node by checking whether its parent is a SubProcess.\n * Returns \"root\" for top-level nodes or children of Pools/Lanes.\n */\nfunction getScopeId(diagram: SimDiagram, nodeId: string): string {\n const node = nodeById(diagram, nodeId);\n if (!node?.parentId) return \"root\";\n const parent = nodeById(diagram, node.parentId);\n return parent && isSubProcess(parent.type) ? node.parentId : \"root\";\n}\n\n// ─── Core token helpers ───────────────────────────────────────────────────────\n\nfunction withLog(\n state: SimulationState,\n entry: Omit<SimLogEntry, \"step\">,\n): SimulationState {\n return { ...state, log: [...state.log, { ...entry, step: state.step }] };\n}\n\n/**\n * Removes the consumed token and creates new tokens at each outgoing\n * sequence-flow target of sourceId. Each new token inherits the scope\n * determined by the target node's position in the diagram.\n */\nfunction disperseToTargets(\n diagram: SimDiagram,\n state: SimulationState,\n sourceId: string,\n consumedTokenId: string | null,\n): SimulationState {\n const outEdges = seqOut(diagram, sourceId);\n if (outEdges.length === 0) return state;\n\n let next: SimulationState = {\n ...state,\n tokens:\n consumedTokenId !== null\n ? state.tokens.filter((t) => t.id !== consumedTokenId)\n : state.tokens,\n };\n\n for (const edge of outEdges) {\n const target = nodeById(diagram, edge.target);\n if (!target) continue;\n\n const newToken: SimToken = {\n id: nextTokenId(),\n elementId: edge.target,\n scopeId: getScopeId(diagram, edge.target),\n };\n next = {\n ...next,\n tokens: [...next.tokens, newToken],\n };\n next = withLog(next, {\n type: \"created\",\n elementId: edge.target,\n tokenId: newToken.id,\n message: `Token created at \"${target.name ?? edge.target}\".`,\n });\n }\n\n return next;\n}\n\n// ─── SubProcess scope management ─────────────────────────────────────────────\n\nfunction enterSubProcess(\n diagram: SimDiagram,\n state: SimulationState,\n subProcNode: SimNode,\n): SimulationState {\n const childStarts = diagram.nodes.filter(\n (n) => n.type === \"StartEvent\" && n.parentId === subProcNode.id,\n );\n\n let next: SimulationState = {\n ...state,\n enteredScopes: [...state.enteredScopes, subProcNode.id],\n };\n\n for (const startNode of childStarts) {\n const newToken: SimToken = {\n id: nextTokenId(),\n elementId: startNode.id,\n scopeId: subProcNode.id,\n };\n next = {\n ...next,\n tokens: [...next.tokens, newToken],\n };\n next = withLog(next, {\n type: \"created\",\n elementId: startNode.id,\n tokenId: newToken.id,\n message: `SubProcess \"${subProcNode.name ?? subProcNode.id}\" entered — token at \"${startNode.name ?? startNode.id}\".`,\n });\n }\n\n return next;\n}\n\n// ─── Automatic element execution ──────────────────────────────────────────────\n\nfunction fireAutomatic(\n diagram: SimDiagram,\n state: SimulationState,\n token: SimToken,\n): SimulationState {\n const node = nodeById(diagram, token.elementId);\n if (!node) return state;\n const { type } = node;\n const vars = state.variables;\n\n // EndEvent ─────────────────────────────────────────────────────────────────\n if (type === \"EndEvent\") {\n let next: SimulationState = {\n ...state,\n tokens: state.tokens.filter((t) => t.id !== token.id),\n };\n next = withLog(next, {\n type: \"consumed\",\n elementId: node.id,\n tokenId: token.id,\n message: `Token consumed at end event \"${node.name ?? node.id}\".`,\n });\n return next;\n }\n\n // StartEvent / IntermediateThrowEvent ──────────────────────────────────────\n if (type === \"StartEvent\" || type === \"IntermediateThrowEvent\") {\n let next = withLog(state, {\n type: \"fired\",\n elementId: node.id,\n tokenId: token.id,\n message: `\"${node.name ?? node.id}\" (${type}) fired.`,\n });\n return disperseToTargets(diagram, next, node.id, token.id);\n }\n\n // ExclusiveGateway ─────────────────────────────────────────────────────────\n if (type === \"ExclusiveGateway\") {\n const incoming = seqIn(diagram, node.id);\n if (incoming.length >= 2) {\n // XOR join: pass through immediately\n let next = withLog(state, {\n type: \"joined\",\n elementId: node.id,\n tokenId: token.id,\n message: `ExclusiveGateway \"${node.name ?? node.id}\" join — token passes through.`,\n });\n return disperseToTargets(diagram, next, node.id, token.id);\n }\n\n const outEdges = seqOut(diagram, node.id);\n // Evaluate conditions; fall back to default, then first\n const chosen =\n outEdges.find(\n (e) => e.conditionExpression && !e.isDefault && evalCondition(e.conditionExpression, vars),\n ) ??\n outEdges.find((e) => e.isDefault) ??\n outEdges[0];\n\n if (!chosen) return state;\n const target = nodeById(diagram, chosen.target);\n if (!target) return state;\n\n const newToken: SimToken = {\n id: nextTokenId(),\n elementId: chosen.target,\n scopeId: getScopeId(diagram, chosen.target),\n };\n let next: SimulationState = {\n ...state,\n tokens: [...state.tokens.filter((t) => t.id !== token.id), newToken],\n };\n next = withLog(next, {\n type: \"fired\",\n elementId: node.id,\n tokenId: token.id,\n message: `ExclusiveGateway \"${node.name ?? node.id}\" split → \"${target.name ?? chosen.target}\".`,\n });\n return next;\n }\n\n // InclusiveGateway ─────────────────────────────────────────────────────────\n if (type === \"InclusiveGateway\") {\n const incoming = seqIn(diagram, node.id);\n if (incoming.length >= 2) {\n // OR join: pass through (simplified — full semantics require tracking active paths)\n let next = withLog(state, {\n type: \"joined\",\n elementId: node.id,\n tokenId: token.id,\n message: `InclusiveGateway \"${node.name ?? node.id}\" join.`,\n });\n return disperseToTargets(diagram, next, node.id, token.id);\n }\n\n const outEdges = seqOut(diagram, node.id);\n // Take all paths whose condition is true; if none match → take default\n const matching = outEdges.filter(\n (e) => e.conditionExpression && !e.isDefault && evalCondition(e.conditionExpression, vars),\n );\n const activePaths = matching.length > 0 ? matching : outEdges.filter((e) => e.isDefault);\n const paths = activePaths.length > 0 ? activePaths : outEdges; // all if no conditions defined\n\n let next = withLog(state, {\n type: \"split\",\n elementId: node.id,\n tokenId: token.id,\n message: `InclusiveGateway \"${node.name ?? node.id}\" split → ${paths.length} path(s).`,\n });\n\n next = { ...next, tokens: next.tokens.filter((t) => t.id !== token.id) };\n for (const edge of paths) {\n const tgt = nodeById(diagram, edge.target);\n if (!tgt) continue;\n const newToken: SimToken = {\n id: nextTokenId(),\n elementId: edge.target,\n scopeId: getScopeId(diagram, edge.target),\n };\n next = { ...next, tokens: [...next.tokens, newToken] };\n next = withLog(next, {\n type: \"created\",\n elementId: edge.target,\n tokenId: newToken.id,\n message: `Token created at \"${tgt.name ?? edge.target}\".`,\n });\n }\n return next;\n }\n\n // ParallelGateway ──────────────────────────────────────────────────────────\n if (type === \"ParallelGateway\") {\n const incoming = seqIn(diagram, node.id);\n if (incoming.length >= 2) {\n const atGateway = state.tokens.filter((t) => t.elementId === node.id);\n if (atGateway.length < incoming.length) {\n return withLog(state, {\n type: \"blocked\",\n elementId: node.id,\n tokenId: token.id,\n message: `ParallelGateway \"${node.name ?? node.id}\" waiting for ${incoming.length - atGateway.length} more token(s).`,\n });\n }\n const consumeIds = new Set(atGateway.map((t) => t.id));\n let next: SimulationState = {\n ...state,\n tokens: state.tokens.filter((t) => !consumeIds.has(t.id)),\n };\n next = withLog(next, {\n type: \"joined\",\n elementId: node.id,\n message: `ParallelGateway \"${node.name ?? node.id}\" join fired — all paths synchronized.`,\n });\n return disperseToTargets(diagram, next, node.id, null);\n }\n // AND split\n let next = withLog(state, {\n type: \"split\",\n elementId: node.id,\n tokenId: token.id,\n message: `ParallelGateway \"${node.name ?? node.id}\" split → ${seqOut(diagram, node.id).length} paths.`,\n });\n return disperseToTargets(diagram, next, node.id, token.id);\n }\n\n // EventBasedGateway ────────────────────────────────────────────────────────\n // Disperses to ALL outgoing catch events; first one fired wins (race).\n if (type === \"EventBasedGateway\") {\n let next = withLog(state, {\n type: \"split\",\n elementId: node.id,\n tokenId: token.id,\n message: `EventBasedGateway \"${node.name ?? node.id}\" waiting — ${seqOut(diagram, node.id).length} competing event(s).`,\n });\n return disperseToTargets(diagram, next, node.id, token.id);\n }\n\n // ComplexGateway (simplified: first path) ─────────────────────────────────\n if (type === \"ComplexGateway\") {\n const outEdges = seqOut(diagram, node.id);\n const chosen = outEdges[0];\n if (!chosen) return state;\n const newToken: SimToken = {\n id: nextTokenId(),\n elementId: chosen.target,\n scopeId: getScopeId(diagram, chosen.target),\n };\n let next: SimulationState = {\n ...state,\n tokens: [...state.tokens.filter((t) => t.id !== token.id), newToken],\n };\n next = withLog(next, {\n type: \"fired\",\n elementId: node.id,\n tokenId: token.id,\n message: `ComplexGateway \"${node.name ?? node.id}\" fired → \"${chosen.target}\".`,\n });\n return next;\n }\n\n return state;\n}\n\n// ─── Public API ───────────────────────────────────────────────────────────────\n\nexport function createSimulation(\n diagram: SimDiagram,\n initialVariables: Record<string, string | number | boolean> = {},\n): SimulationState {\n _tokenCounter = 0;\n\n const startEvents = diagram.nodes.filter((n) => isRootProcessStart(diagram, n));\n\n const tokens: SimToken[] = startEvents.map((n) => ({\n id: nextTokenId(),\n elementId: n.id,\n scopeId: \"root\",\n }));\n\n const log: SimLogEntry[] = startEvents.map((n, i) => ({\n step: 0,\n type: \"created\" as SimLogType,\n elementId: n.id,\n tokenId: tokens[i]?.id,\n message: `Simulation started — token placed at \"${n.name ?? n.id}\".`,\n }));\n\n return {\n tokens,\n step: 0,\n status: startEvents.length > 0 ? \"running\" : \"idle\",\n log,\n variables: initialVariables,\n enteredScopes: [],\n };\n}\n\nexport function tick(diagram: SimDiagram, state: SimulationState): SimulationState {\n if (state.status !== \"running\") return state;\n\n let current: SimulationState = { ...state, step: state.step + 1 };\n let changed = true;\n let guard = 0;\n\n while (changed && guard < 1000) {\n guard++;\n changed = false;\n\n for (const token of current.tokens) {\n const node = nodeById(diagram, token.elementId);\n if (!node) continue;\n\n // ── SubProcess enter / wait / complete ─────────────────────────────────\n if (isSubProcess(node.type)) {\n if (!current.enteredScopes.includes(node.id)) {\n // Enter: spawn child tokens at internal start events\n const childStarts = diagram.nodes.filter(\n (n) => n.type === \"StartEvent\" && n.parentId === node.id,\n );\n if (childStarts.length > 0) {\n current = enterSubProcess(diagram, current, node);\n changed = true;\n break;\n }\n // No internal structure → treat as manual task (don't advance)\n } else {\n // Check if scope completed\n const scopeTokens = current.tokens.filter((t) => t.scopeId === node.id);\n if (scopeTokens.length === 0) {\n let next = withLog(current, {\n type: \"fired\",\n elementId: node.id,\n tokenId: token.id,\n message: `SubProcess \"${node.name ?? node.id}\" completed.`,\n });\n current = disperseToTargets(diagram, next, node.id, token.id);\n changed = true;\n break;\n }\n }\n continue;\n }\n\n // ── ParallelGateway join: only fire when all tokens are present ─────────\n if (node.type === \"ParallelGateway\") {\n const incoming = seqIn(diagram, node.id);\n const atGateway = current.tokens.filter((t) => t.elementId === node.id);\n if (incoming.length >= 2 && atGateway.length < incoming.length) continue;\n }\n\n if (!isAutomatic(node.type)) continue;\n\n const prevLen = current.tokens.length;\n const prevIds = new Set(current.tokens.map((t) => t.id));\n current = fireAutomatic(diagram, current, token);\n\n const same =\n current.tokens.length === prevLen &&\n [...prevIds].every((id) => current.tokens.some((t) => t.id === id));\n\n if (!same) {\n changed = true;\n break;\n }\n }\n }\n\n // Determine final status\n if (current.tokens.length === 0) {\n current = { ...current, status: \"completed\" };\n }\n\n return current;\n}\n\nexport function fire(\n diagram: SimDiagram,\n state: SimulationState,\n elementId: string,\n variables?: Record<string, string | number | boolean>,\n): SimulationState {\n if (state.status !== \"running\") return state;\n\n const node = nodeById(diagram, elementId);\n if (!node) return state;\n\n const mergedVars = variables ? { ...state.variables, ...variables } : state.variables;\n\n // ── BoundaryEvent: fired from the host task context, no token at the event ─\n if (node.type === \"BoundaryEvent\") {\n const hostId = node.attachedToRef;\n if (!hostId) return state;\n\n // The boundary event is activated relative to a token at the host task\n const hostToken = state.tokens.find((t) => t.elementId === hostId);\n if (!hostToken) return state;\n\n const isInterrupting = node.isInterrupting !== false;\n\n let next: SimulationState = { ...state, variables: mergedVars, step: state.step + 1 };\n next = withLog(next, {\n type: isInterrupting ? \"interrupted\" : \"fired\",\n elementId,\n tokenId: hostToken.id,\n message: `BoundaryEvent \"${node.name ?? elementId}\" fired (${isInterrupting ? \"interrupting\" : \"non-interrupting\"}).`,\n });\n\n if (isInterrupting) {\n // Remove the host task token (interrupts the task)\n next = { ...next, tokens: next.tokens.filter((t) => t.id !== hostToken.id) };\n }\n // Non-interrupting: host token stays; a new parallel token follows the boundary path\n\n next = disperseToTargets(diagram, next, elementId, null);\n return tick(diagram, { ...next, step: next.step - 1 });\n }\n\n const token = state.tokens.find((t) => t.elementId === elementId);\n if (!token) return state;\n\n // ── IntermediateCatchEvent following an EventBasedGateway: cancel race ────\n if (node.type === \"IntermediateCatchEvent\") {\n const gwEdge = seqIn(diagram, elementId).find((e) => {\n const src = nodeById(diagram, e.source);\n return src?.type === \"EventBasedGateway\";\n });\n if (gwEdge) {\n // Cancel all sibling catch events in the race\n const gw = nodeById(diagram, gwEdge.source);\n if (gw) {\n const siblingTargets = new Set(\n seqOut(diagram, gw.id)\n .map((e) => e.target)\n .filter((id) => id !== elementId),\n );\n state = {\n ...state,\n tokens: state.tokens.filter((t) => !siblingTargets.has(t.elementId)),\n };\n }\n }\n }\n\n let next: SimulationState = { ...state, variables: mergedVars, step: state.step + 1 };\n next = withLog(next, {\n type: \"fired\",\n elementId,\n tokenId: token.id,\n message: `\"${node.name ?? elementId}\" (${node.type}) manually fired.`,\n });\n next = disperseToTargets(diagram, next, elementId, token.id);\n return tick(diagram, { ...next, step: next.step - 1 });\n}\n\nexport function getFireable(diagram: SimDiagram, state: SimulationState): string[] {\n if (state.status !== \"running\") return [];\n\n const fireable = new Set<string>();\n\n for (const token of state.tokens) {\n const node = nodeById(diagram, token.elementId);\n if (!node) continue;\n\n if (isManual(node.type)) {\n fireable.add(node.id);\n }\n\n // Expose boundary events attached to tasks that have tokens\n if (TASK_TYPES.has(node.type)) {\n for (const be of boundaryEventsOf(diagram, node.id)) {\n fireable.add(be.id);\n }\n }\n }\n\n return [...fireable];\n}\n\nexport function isCompleted(state: SimulationState): boolean {\n return state.status === \"completed\";\n}\n\n/** Set or update a process variable without advancing the simulation. */\nexport function setVariable(\n state: SimulationState,\n key: string,\n value: string | number | boolean,\n): SimulationState {\n return { ...state, variables: { ...state.variables, [key]: value } };\n}\n"]}
@@ -1,3 +1,3 @@
1
- export { createSimulation, fire, getFireable, isCompleted, setVariable, tick } from '../chunk-57LA2WSJ.js';
1
+ export { createSimulation, fire, getFireable, isCompleted, setVariable, tick } from '../chunk-QOGZITWB.js';
2
2
  //# sourceMappingURL=index.js.map
3
3
  //# sourceMappingURL=index.js.map
@@ -1,5 +1,5 @@
1
1
  import { Node, Edge } from '@xyflow/react';
2
- import { g as BpmnNodeData, a as BpmnEdgeData } from './types-BKA0GZz5.js';
2
+ import { h as BpmnNodeData, a as BpmnEdgeData } from './types-DznxZxpV.js';
3
3
 
4
4
  type BpmnRFNode = Node<BpmnNodeData>;
5
5
  type BpmnRFEdge = Edge<BpmnEdgeData>;
@@ -14,6 +14,9 @@ interface BpmnElementMeta {
14
14
  category: BpmnCategory;
15
15
  defaultWidth: number;
16
16
  defaultHeight: number;
17
+ minWidth?: number;
18
+ minHeight?: number;
19
+ resizable?: boolean;
17
20
  /** Default handle exposure for the rendered node shape. */
18
21
  handlePolicy: BpmnHandlePolicy;
19
22
  /** Preferred orientation when the element acts as a container. */
@@ -37,6 +40,13 @@ interface BpmnElementMeta {
37
40
  /** Max number of outgoing sequence flows. undefined = unlimited. */
38
41
  maxOutgoing?: number;
39
42
  }
43
+ interface BpmnElementSize {
44
+ width: number;
45
+ height: number;
46
+ minWidth: number;
47
+ minHeight: number;
48
+ resizable: boolean;
49
+ }
40
50
  interface BpmnNodeData extends Record<string, unknown> {
41
51
  label?: string;
42
52
  elementType: BpmnElementType;
@@ -98,4 +108,4 @@ interface BpmnEdgeData extends Record<string, unknown> {
98
108
  }>;
99
109
  }
100
110
 
101
- export type { BpmnCategory as B, EventTrigger as E, SubProcessVariant as S, TaskMarker as T, BpmnEdgeData as a, BpmnEdgeType as b, BpmnElementMeta as c, BpmnElementType as d, BpmnEventSemantics as e, BpmnHandlePolicy as f, BpmnNodeData as g, BpmnOrientation as h };
111
+ export type { BpmnCategory as B, EventTrigger as E, SubProcessVariant as S, TaskMarker as T, BpmnEdgeData as a, BpmnEdgeType as b, BpmnElementMeta as c, BpmnElementSize as d, BpmnElementType as e, BpmnEventSemantics as f, BpmnHandlePolicy as g, BpmnNodeData as h, BpmnOrientation as i };
@@ -14,6 +14,9 @@ interface BpmnElementMeta {
14
14
  category: BpmnCategory;
15
15
  defaultWidth: number;
16
16
  defaultHeight: number;
17
+ minWidth?: number;
18
+ minHeight?: number;
19
+ resizable?: boolean;
17
20
  /** Default handle exposure for the rendered node shape. */
18
21
  handlePolicy: BpmnHandlePolicy;
19
22
  /** Preferred orientation when the element acts as a container. */
@@ -37,6 +40,13 @@ interface BpmnElementMeta {
37
40
  /** Max number of outgoing sequence flows. undefined = unlimited. */
38
41
  maxOutgoing?: number;
39
42
  }
43
+ interface BpmnElementSize {
44
+ width: number;
45
+ height: number;
46
+ minWidth: number;
47
+ minHeight: number;
48
+ resizable: boolean;
49
+ }
40
50
  interface BpmnNodeData extends Record<string, unknown> {
41
51
  label?: string;
42
52
  elementType: BpmnElementType;
@@ -98,4 +108,4 @@ interface BpmnEdgeData extends Record<string, unknown> {
98
108
  }>;
99
109
  }
100
110
 
101
- export type { BpmnCategory as B, EventTrigger as E, SubProcessVariant as S, TaskMarker as T, BpmnEdgeData as a, BpmnEdgeType as b, BpmnElementMeta as c, BpmnElementType as d, BpmnEventSemantics as e, BpmnHandlePolicy as f, BpmnNodeData as g, BpmnOrientation as h };
111
+ export type { BpmnCategory as B, EventTrigger as E, SubProcessVariant as S, TaskMarker as T, BpmnEdgeData as a, BpmnEdgeType as b, BpmnElementMeta as c, BpmnElementSize as d, BpmnElementType as e, BpmnEventSemantics as f, BpmnHandlePolicy as g, BpmnNodeData as h, BpmnOrientation as i };
@@ -1,5 +1,5 @@
1
1
  import { Node, Edge } from '@xyflow/react';
2
- import { g as BpmnNodeData, a as BpmnEdgeData } from './types-BKA0GZz5.cjs';
2
+ import { h as BpmnNodeData, a as BpmnEdgeData } from './types-DznxZxpV.cjs';
3
3
 
4
4
  type BpmnRFNode = Node<BpmnNodeData>;
5
5
  type BpmnRFEdge = Edge<BpmnEdgeData>;