@aranzatech/diagrams-bpmn 0.2.4 → 0.2.5

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.
@@ -1,4 +1,4 @@
1
- import { e as BpmnElementType, c as BpmnElementMeta, d as BpmnElementSize } from './types-DznxZxpV.js';
1
+ import { f as BpmnElementType, d as BpmnElementMeta, e as BpmnElementSize } from './types-rWbKYrHH.js';
2
2
 
3
3
  declare const BPMN_ELEMENT_CATALOG: Record<BpmnElementType, BpmnElementMeta>;
4
4
  declare function getElementMeta(type: BpmnElementType): BpmnElementMeta;
@@ -1,4 +1,4 @@
1
- import { e as BpmnElementType, c as BpmnElementMeta, d as BpmnElementSize } from './types-DznxZxpV.cjs';
1
+ import { f as BpmnElementType, d as BpmnElementMeta, e as BpmnElementSize } from './types-rWbKYrHH.cjs';
2
2
 
3
3
  declare const BPMN_ELEMENT_CATALOG: Record<BpmnElementType, BpmnElementMeta>;
4
4
  declare function getElementMeta(type: BpmnElementType): BpmnElementMeta;
@@ -182,9 +182,84 @@ function extractLaneMembership(process) {
182
182
  function extractTrigger(el) {
183
183
  const defs = asElements(el.eventDefinitions);
184
184
  if (defs.length === 0) return void 0;
185
- if (defs.length > 1) return el.$type.includes("Parallel") ? "parallelMultiple" : "multiple";
185
+ if (defs.length > 1) {
186
+ return defs.some((def) => def.$type === "bpmn:ParallelMultipleEventDefinition") ? "parallelMultiple" : "multiple";
187
+ }
186
188
  return EVENT_DEF_TO_TRIGGER[defs[0].$type];
187
189
  }
190
+ function parseVariableType(value) {
191
+ const text = asString(value) ?? "";
192
+ if (text.includes("int")) return "integer";
193
+ if (text.includes("boolean")) return "boolean";
194
+ if (text.includes("date")) return "date";
195
+ if (text.includes("array")) return "array";
196
+ if (text.includes("anyType")) return "object";
197
+ return "string";
198
+ }
199
+ function extractEventDefinition(el) {
200
+ const defs = asElements(el.eventDefinitions);
201
+ if (defs.length === 0) return void 0;
202
+ if (defs.length > 1) {
203
+ return {
204
+ type: defs.some((def2) => def2.$type === "bpmn:ParallelMultipleEventDefinition") ? "parallelMultiple" : "multiple"
205
+ };
206
+ }
207
+ const [def] = defs;
208
+ const type = EVENT_DEF_TO_TRIGGER[def.$type];
209
+ if (!type) return void 0;
210
+ const eventDefinition = {
211
+ type,
212
+ ...asString(def.messageRef?.id) ? { messageRef: def.messageRef.id } : {},
213
+ ...asString(def.signalRef?.id) ? { signalRef: def.signalRef.id } : {},
214
+ ...asString(def.errorRef?.id) ? { errorRef: def.errorRef.id } : {},
215
+ ...asString(def.escalationRef?.id) ? { escalationRef: def.escalationRef.id } : {},
216
+ ...asString(def.condition?.body) ? { conditionExpression: def.condition.body } : {}
217
+ };
218
+ const timeDate = asString(def.timeDate?.body);
219
+ const timeDuration = asString(def.timeDuration?.body);
220
+ const timeCycle = asString(def.timeCycle?.body);
221
+ if (timeDate) eventDefinition.timer = { kind: "date", value: timeDate };
222
+ else if (timeCycle) eventDefinition.timer = { kind: "cycle", value: timeCycle };
223
+ else if (timeDuration) eventDefinition.timer = { kind: "duration", value: timeDuration };
224
+ if (type === "link") {
225
+ const linkName = asString(el.name) ?? asString(def.name);
226
+ if (linkName) eventDefinition.linkName = linkName;
227
+ }
228
+ return eventDefinition;
229
+ }
230
+ function extractDefinitions(rootElement) {
231
+ const definitions = {};
232
+ const rootElements = asElements(rootElement.rootElements);
233
+ const messages = rootElements.filter((element) => element.$type === "bpmn:Message" && asString(element.id)).map((message) => ({
234
+ id: message.id,
235
+ name: asString(message.name) ?? message.id
236
+ }));
237
+ if (messages.length > 0) definitions.messages = messages;
238
+ const signals = rootElements.filter((element) => element.$type === "bpmn:Signal" && asString(element.id)).map((signal) => ({
239
+ id: signal.id,
240
+ name: asString(signal.name) ?? signal.id
241
+ }));
242
+ if (signals.length > 0) definitions.signals = signals;
243
+ const errors = rootElements.filter((element) => element.$type === "bpmn:Error" && asString(element.id)).map((error) => ({
244
+ id: error.id,
245
+ name: asString(error.name) ?? error.id,
246
+ ...asString(error.errorCode) ? { errorCode: error.errorCode } : {}
247
+ }));
248
+ if (errors.length > 0) definitions.errors = errors;
249
+ const escalations = rootElements.filter((element) => element.$type === "bpmn:Escalation" && asString(element.id)).map((escalation) => ({
250
+ id: escalation.id,
251
+ name: asString(escalation.name) ?? escalation.id,
252
+ ...asString(escalation.escalationCode) ? { escalationCode: escalation.escalationCode } : {}
253
+ }));
254
+ if (escalations.length > 0) definitions.escalations = escalations;
255
+ const itemDefinitions = asElements(rootElement.itemDefinitions).filter((item) => asString(item.id)).map((item) => ({
256
+ id: String(item.id).replace(/_item$/, ""),
257
+ name: String(item.id).replace(/_item$/, ""),
258
+ type: parseVariableType(item.structureRef)
259
+ }));
260
+ if (itemDefinitions.length > 0) definitions.variables = itemDefinitions;
261
+ return Object.keys(definitions).length > 0 ? definitions : void 0;
262
+ }
188
263
  function extractSubProcessVariant(el) {
189
264
  if (el.$type === "bpmn:Transaction") return "transaction";
190
265
  if (el.$type === "bpmn:AdHocSubProcess") return "adhoc";
@@ -225,6 +300,7 @@ function buildNode(el, elementType, parentId, ctx, nodes) {
225
300
  const label = asString(el.name);
226
301
  const documentation = extractDocumentation(el);
227
302
  const trigger = extractTrigger(el);
303
+ const eventDefinition = extractEventDefinition(el);
228
304
  const isNonInterrupting = el.cancelActivity === false;
229
305
  const attachedToRef = el.attachedToRef?.id;
230
306
  const data = {
@@ -232,8 +308,17 @@ function buildNode(el, elementType, parentId, ctx, nodes) {
232
308
  ...label ? { label } : {},
233
309
  ...documentation ? { documentation } : {},
234
310
  ...trigger ? { trigger } : {},
311
+ ...eventDefinition ? { eventDefinition } : {},
235
312
  ...isNonInterrupting ? { isNonInterrupting: true } : {},
236
- ...attachedToRef ? { attachedToRef } : {}
313
+ ...elementType === "BoundaryEvent" ? { cancelActivity: el.cancelActivity !== false } : {},
314
+ ...attachedToRef ? { attachedToRef } : {},
315
+ ...eventDefinition?.timer ? { timer: eventDefinition.timer, timerExpression: eventDefinition.timer } : {},
316
+ ...eventDefinition?.messageRef ? { messageRef: eventDefinition.messageRef } : {},
317
+ ...eventDefinition?.signalRef ? { signalRef: eventDefinition.signalRef } : {},
318
+ ...eventDefinition?.errorRef ? { errorRef: eventDefinition.errorRef } : {},
319
+ ...eventDefinition?.escalationRef ? { escalationRef: eventDefinition.escalationRef } : {},
320
+ ...eventDefinition?.conditionExpression ? { conditionExpression: eventDefinition.conditionExpression } : {},
321
+ ...eventDefinition?.linkName ? { linkName: eventDefinition.linkName } : {}
237
322
  };
238
323
  if (elementType === "SubProcess" || elementType === "Transaction" || elementType === "EventSubProcess" || elementType === "AdHocSubProcess") {
239
324
  const variant = extractSubProcessVariant(el);
@@ -383,10 +468,23 @@ async function parseBpmnXml(xml) {
383
468
  };
384
469
  return { ...edge, data };
385
470
  });
471
+ const firstProcess = asElements(rootElement.rootElements).find((rootEl) => rootEl.$type === "bpmn:Process");
472
+ const importedDefinitions = extractDefinitions(rootElement);
473
+ const process = firstProcess ? (() => {
474
+ const importedProcess = {};
475
+ const processId = asString(firstProcess.id);
476
+ const documentation = extractDocumentation(firstProcess);
477
+ if (processId) importedProcess.processId = processId;
478
+ if (typeof firstProcess.isExecutable === "boolean") importedProcess.executable = firstProcess.isExecutable;
479
+ if (documentation) importedProcess.documentation = documentation;
480
+ if (importedDefinitions) importedProcess.definitions = importedDefinitions;
481
+ return importedProcess;
482
+ })() : importedDefinitions ? { definitions: importedDefinitions } : void 0;
386
483
  return {
387
484
  nodes: normalizeChildPositions(nodes, nodeIds),
388
485
  edges: normalizedEdges,
389
- warnings
486
+ warnings,
487
+ ...process ? { process } : {}
390
488
  };
391
489
  }
392
490
  function collectDefaultFlows(el, defaultFlowById) {
@@ -416,6 +514,99 @@ function uid(prefix, id) {
416
514
  function asNodes(nodes, types) {
417
515
  return nodes.filter((n) => types.includes(n.data.elementType));
418
516
  }
517
+ function normalizeEventDefinition(data) {
518
+ const trigger = data.eventDefinition?.type ?? data.trigger;
519
+ if (!trigger || trigger === "none") return void 0;
520
+ const normalized = { type: trigger };
521
+ const timer = data.eventDefinition?.timer ?? data.timer ?? data.timerExpression;
522
+ const messageRef = data.eventDefinition?.messageRef ?? (typeof data.messageRef === "string" ? data.messageRef : void 0);
523
+ const signalRef = data.eventDefinition?.signalRef ?? (typeof data.signalRef === "string" ? data.signalRef : void 0);
524
+ const errorRef = data.eventDefinition?.errorRef ?? (typeof data.errorRef === "string" ? data.errorRef : void 0);
525
+ const escalationRef = data.eventDefinition?.escalationRef ?? (typeof data.escalationRef === "string" ? data.escalationRef : void 0);
526
+ const conditionExpression = data.eventDefinition?.conditionExpression ?? (typeof data.conditionExpression === "string" ? data.conditionExpression : void 0);
527
+ const linkName = data.eventDefinition?.linkName ?? (typeof data.linkName === "string" ? data.linkName : void 0);
528
+ if (timer) normalized.timer = timer;
529
+ if (messageRef) normalized.messageRef = messageRef;
530
+ if (signalRef) normalized.signalRef = signalRef;
531
+ if (errorRef) normalized.errorRef = errorRef;
532
+ if (escalationRef) normalized.escalationRef = escalationRef;
533
+ if (conditionExpression) normalized.conditionExpression = conditionExpression;
534
+ if (linkName) normalized.linkName = linkName;
535
+ return normalized;
536
+ }
537
+ function parseVariableType2(type) {
538
+ switch (type) {
539
+ case "integer":
540
+ return "xsd:int";
541
+ case "boolean":
542
+ return "xsd:boolean";
543
+ case "date":
544
+ return "xsd:dateTime";
545
+ case "object":
546
+ return "xsd:anyType";
547
+ case "array":
548
+ return "xsd:anyType";
549
+ default:
550
+ return "xsd:string";
551
+ }
552
+ }
553
+ function buildGlobalDefinitions(moddle, definitionsSet) {
554
+ if (!definitionsSet) return [];
555
+ const rootElements = [];
556
+ for (const message of definitionsSet.messages ?? []) {
557
+ rootElements.push(moddle.create("bpmn:Message", { id: message.id, name: message.name }));
558
+ }
559
+ for (const signal of definitionsSet.signals ?? []) {
560
+ rootElements.push(moddle.create("bpmn:Signal", { id: signal.id, name: signal.name }));
561
+ }
562
+ for (const error of definitionsSet.errors ?? []) {
563
+ rootElements.push(moddle.create("bpmn:Error", {
564
+ id: error.id,
565
+ name: error.name,
566
+ ...error.errorCode ? { errorCode: error.errorCode } : {}
567
+ }));
568
+ }
569
+ for (const escalation of definitionsSet.escalations ?? []) {
570
+ rootElements.push(moddle.create("bpmn:Escalation", {
571
+ id: escalation.id,
572
+ name: escalation.name,
573
+ ...escalation.escalationCode ? { escalationCode: escalation.escalationCode } : {}
574
+ }));
575
+ }
576
+ return rootElements;
577
+ }
578
+ function buildItemDefinitions(moddle, variables) {
579
+ return (variables ?? []).map(
580
+ (variable) => moddle.create("bpmn:ItemDefinition", {
581
+ id: `${variable.id}_item`,
582
+ itemKind: "Information",
583
+ structureRef: parseVariableType2(variable.type)
584
+ })
585
+ );
586
+ }
587
+ function buildEventDefinitions(moddle, node, eventDefinition) {
588
+ if (eventDefinition.type === "multiple" || eventDefinition.type === "parallelMultiple") {
589
+ return [];
590
+ }
591
+ const defType = TRIGGER_TO_EVENT_DEF[eventDefinition.type];
592
+ if (!defType) return [];
593
+ const attrs = { id: uid("EventDef", node.id) };
594
+ if (eventDefinition.messageRef) attrs.messageRef = { id: eventDefinition.messageRef };
595
+ if (eventDefinition.signalRef) attrs.signalRef = { id: eventDefinition.signalRef };
596
+ if (eventDefinition.errorRef) attrs.errorRef = { id: eventDefinition.errorRef };
597
+ if (eventDefinition.escalationRef) attrs.escalationRef = { id: eventDefinition.escalationRef };
598
+ if (eventDefinition.conditionExpression) {
599
+ attrs.condition = moddle.create("bpmn:FormalExpression", {
600
+ body: eventDefinition.conditionExpression
601
+ });
602
+ }
603
+ if (eventDefinition.timer?.value) {
604
+ attrs[eventDefinition.timer.kind === "date" ? "timeDate" : eventDefinition.timer.kind === "cycle" ? "timeCycle" : "timeDuration"] = moddle.create("bpmn:FormalExpression", {
605
+ body: eventDefinition.timer.value
606
+ });
607
+ }
608
+ return [moddle.create(defType, attrs)];
609
+ }
419
610
  function buildSemanticModel(moddle, nodes, edges, opts) {
420
611
  const defId = opts.id ?? "Definitions_1";
421
612
  const defName = opts.name;
@@ -427,13 +618,19 @@ function buildSemanticModel(moddle, nodes, edges, opts) {
427
618
  targetNamespace: "http://bpmn.io/schema/bpmn",
428
619
  ...defName ? { name: defName } : {}
429
620
  });
430
- const rootElements = [];
621
+ const rootElements = [
622
+ ...buildGlobalDefinitions(moddle, opts.process?.definitions)
623
+ ];
624
+ const itemDefinitions = buildItemDefinitions(moddle, opts.process?.definitions?.variables);
625
+ if (itemDefinitions.length > 0) {
626
+ definitions.itemDefinitions = itemDefinitions;
627
+ }
431
628
  if (isCollaboration) {
432
629
  const participants = [];
433
630
  const processes = [];
434
631
  for (const pool of poolNodes) {
435
632
  const processId = `Process_${pool.id}`;
436
- const process = buildProcess(moddle, nodes, edges, pool.id, laneNodes, processId);
633
+ const process = buildProcess(moddle, nodes, edges, pool.id, laneNodes, processId, opts);
437
634
  processes.push(process);
438
635
  const participant = moddle.create("bpmn:Participant", {
439
636
  id: pool.id,
@@ -467,13 +664,21 @@ function buildSemanticModel(moddle, nodes, edges, opts) {
467
664
  });
468
665
  rootElements.push(collaboration, ...processes);
469
666
  } else {
470
- const process = buildProcess(moddle, nodes, edges, void 0, laneNodes, "Process_1");
667
+ const process = buildProcess(
668
+ moddle,
669
+ nodes,
670
+ edges,
671
+ void 0,
672
+ laneNodes,
673
+ opts.process?.processId ?? "Process_1",
674
+ opts
675
+ );
471
676
  rootElements.push(process);
472
677
  }
473
678
  definitions.rootElements = rootElements;
474
679
  return definitions;
475
680
  }
476
- function buildProcess(moddle, allNodes, allEdges, poolId, laneNodes, processId) {
681
+ function buildProcess(moddle, allNodes, allEdges, poolId, laneNodes, processId, opts) {
477
682
  const subProcessIds = new Set(
478
683
  allNodes.filter(
479
684
  (n) => n.data.elementType === "SubProcess" || n.data.elementType === "Transaction" || n.data.elementType === "EventSubProcess" || n.data.elementType === "AdHocSubProcess"
@@ -523,9 +728,14 @@ function buildProcess(moddle, allNodes, allEdges, poolId, laneNodes, processId)
523
728
  }
524
729
  const process = moddle.create("bpmn:Process", {
525
730
  id: processId,
526
- isExecutable: true,
731
+ isExecutable: opts.process?.executable ?? true,
527
732
  flowElements
528
733
  });
734
+ if (opts.process?.documentation) {
735
+ process.documentation = [
736
+ moddle.create("bpmn:Documentation", { text: opts.process.documentation })
737
+ ];
738
+ }
529
739
  if (myLanes.length > 0) {
530
740
  const laneElements = myLanes.map(
531
741
  (l) => moddle.create("bpmn:Lane", {
@@ -542,7 +752,8 @@ function buildProcess(moddle, allNodes, allEdges, poolId, laneNodes, processId)
542
752
  return process;
543
753
  }
544
754
  function buildFlowElement(moddle, node, allNodes, allEdges) {
545
- const { elementType, label, trigger } = node.data;
755
+ const { elementType, label } = node.data;
756
+ const eventDefinition = normalizeEventDefinition(node.data);
546
757
  if (elementType === "Pool" || elementType === "Lane") return null;
547
758
  const moddleType = ELEMENT_TYPE_TO_MODDLE[elementType];
548
759
  if (!moddleType) return null;
@@ -555,15 +766,15 @@ function buildFlowElement(moddle, node, allNodes, allEdges) {
555
766
  moddle.create("bpmn:Documentation", { text: node.data.documentation })
556
767
  ];
557
768
  }
558
- if (trigger && trigger !== "none") {
559
- const defType = TRIGGER_TO_EVENT_DEF[trigger];
560
- if (defType) {
561
- attrs.eventDefinitions = [moddle.create(defType, { id: uid("EventDef", node.id) })];
562
- }
769
+ if (eventDefinition) {
770
+ const eventDefinitions = buildEventDefinitions(moddle, node, eventDefinition);
771
+ if (eventDefinitions.length > 0) attrs.eventDefinitions = eventDefinitions;
772
+ if (eventDefinition.linkName) attrs.name = eventDefinition.linkName;
563
773
  }
564
774
  if (elementType === "BoundaryEvent") {
565
775
  attrs.attachedToRef = { id: node.data.attachedToRef ?? node.parentId };
566
- attrs.cancelActivity = node.data.isNonInterrupting ? false : true;
776
+ const interrupting = node.data.cancelActivity ?? !node.data.isNonInterrupting;
777
+ attrs.cancelActivity = interrupting;
567
778
  }
568
779
  const isSubProcess = elementType === "SubProcess" || elementType === "Transaction" || elementType === "EventSubProcess" || elementType === "AdHocSubProcess";
569
780
  if (isSubProcess) {
@@ -712,5 +923,5 @@ async function serializeBpmnXml(nodes, edges, opts = {}) {
712
923
  }
713
924
 
714
925
  export { parseBpmnXml, serializeBpmnXml };
715
- //# sourceMappingURL=chunk-33AR3PXF.js.map
716
- //# sourceMappingURL=chunk-33AR3PXF.js.map
926
+ //# sourceMappingURL=chunk-ASZ3TFNQ.js.map
927
+ //# sourceMappingURL=chunk-ASZ3TFNQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/xml/mapper.ts","../src/xml/importer.ts","../src/xml/exporter.ts"],"names":["laneSet","def","parseVariableType","BpmnModdle"],"mappings":"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","file":"chunk-ASZ3TFNQ.js","sourcesContent":["import type { BpmnElementType, BpmnEdgeType, EventTrigger } from \"../elements/types\";\n\n// ─── BPMN moddle $type → our BpmnElementType ─────────────────────────────────\n\nexport const MODDLE_TO_ELEMENT_TYPE: Record<string, BpmnElementType | undefined> = {\n \"bpmn:StartEvent\": \"StartEvent\",\n \"bpmn:EndEvent\": \"EndEvent\",\n \"bpmn:IntermediateCatchEvent\": \"IntermediateCatchEvent\",\n \"bpmn:IntermediateThrowEvent\": \"IntermediateThrowEvent\",\n \"bpmn:BoundaryEvent\": \"BoundaryEvent\",\n \"bpmn:Task\": \"Task\",\n \"bpmn:UserTask\": \"UserTask\",\n \"bpmn:ServiceTask\": \"ServiceTask\",\n \"bpmn:ScriptTask\": \"ScriptTask\",\n \"bpmn:ManualTask\": \"ManualTask\",\n \"bpmn:BusinessRuleTask\": \"BusinessRuleTask\",\n \"bpmn:ReceiveTask\": \"ReceiveTask\",\n \"bpmn:SendTask\": \"SendTask\",\n \"bpmn:CallActivity\": \"CallActivity\",\n \"bpmn:ExclusiveGateway\": \"ExclusiveGateway\",\n \"bpmn:InclusiveGateway\": \"InclusiveGateway\",\n \"bpmn:ParallelGateway\": \"ParallelGateway\",\n \"bpmn:EventBasedGateway\": \"EventBasedGateway\",\n \"bpmn:ComplexGateway\": \"ComplexGateway\",\n \"bpmn:SubProcess\": \"SubProcess\",\n \"bpmn:AdHocSubProcess\": \"AdHocSubProcess\",\n \"bpmn:Transaction\": \"Transaction\",\n \"bpmn:TextAnnotation\": \"Annotation\",\n \"bpmn:Group\": \"Group\",\n \"bpmn:DataObject\": \"DataObject\",\n \"bpmn:DataObjectReference\": \"DataObjectReference\",\n \"bpmn:DataInput\": \"DataInput\",\n \"bpmn:DataOutput\": \"DataOutput\",\n \"bpmn:DataStore\": \"DataStore\",\n \"bpmn:DataStoreReference\": \"DataStoreReference\",\n \"bpmn:Conversation\": \"Conversation\",\n \"bpmn:SubConversation\": \"SubConversation\",\n \"bpmn:CallConversation\": \"CallConversation\",\n \"bpmn:ChoreographyTask\": \"ChoreographyTask\",\n \"bpmn:SubChoreography\": \"SubChoreography\",\n \"bpmn:CallChoreography\": \"CallChoreography\",\n \"bpmn:Lane\": \"Lane\",\n};\n\n// ─── Our BpmnElementType → canonical bpmn: type ──────────────────────────────\n\nexport const ELEMENT_TYPE_TO_MODDLE: Partial<Record<BpmnElementType, string>> = {\n StartEvent: \"bpmn:StartEvent\",\n EndEvent: \"bpmn:EndEvent\",\n IntermediateCatchEvent: \"bpmn:IntermediateCatchEvent\",\n IntermediateThrowEvent: \"bpmn:IntermediateThrowEvent\",\n BoundaryEvent: \"bpmn:BoundaryEvent\",\n Task: \"bpmn:Task\",\n UserTask: \"bpmn:UserTask\",\n ServiceTask: \"bpmn:ServiceTask\",\n ScriptTask: \"bpmn:ScriptTask\",\n ManualTask: \"bpmn:ManualTask\",\n BusinessRuleTask: \"bpmn:BusinessRuleTask\",\n ReceiveTask: \"bpmn:ReceiveTask\",\n SendTask: \"bpmn:SendTask\",\n CallActivity: \"bpmn:CallActivity\",\n ExclusiveGateway: \"bpmn:ExclusiveGateway\",\n InclusiveGateway: \"bpmn:InclusiveGateway\",\n ParallelGateway: \"bpmn:ParallelGateway\",\n EventBasedGateway: \"bpmn:EventBasedGateway\",\n ComplexGateway: \"bpmn:ComplexGateway\",\n SubProcess: \"bpmn:SubProcess\",\n Transaction: \"bpmn:Transaction\",\n EventSubProcess: \"bpmn:SubProcess\",\n AdHocSubProcess: \"bpmn:AdHocSubProcess\",\n Pool: \"bpmn:Participant\",\n Lane: \"bpmn:Lane\",\n Annotation: \"bpmn:TextAnnotation\",\n Group: \"bpmn:Group\",\n DataObject: \"bpmn:DataObject\",\n DataObjectReference: \"bpmn:DataObjectReference\",\n DataInput: \"bpmn:DataInput\",\n DataOutput: \"bpmn:DataOutput\",\n DataStore: \"bpmn:DataStore\",\n DataStoreReference: \"bpmn:DataStoreReference\",\n Conversation: \"bpmn:Conversation\",\n SubConversation: \"bpmn:SubConversation\",\n CallConversation: \"bpmn:CallConversation\",\n ChoreographyTask: \"bpmn:ChoreographyTask\",\n SubChoreography: \"bpmn:SubChoreography\",\n CallChoreography: \"bpmn:CallChoreography\",\n};\n\n// ─── Edge type mappings ───────────────────────────────────────────────────────\n\nexport const MODDLE_TO_EDGE_TYPE: Record<string, BpmnEdgeType | undefined> = {\n \"bpmn:SequenceFlow\": \"sequenceFlow\",\n \"bpmn:MessageFlow\": \"messageFlow\",\n \"bpmn:Association\": \"association\",\n \"bpmn:DataInputAssociation\": \"dataAssociation\",\n \"bpmn:DataOutputAssociation\": \"dataAssociation\",\n \"bpmn:ConversationLink\": \"conversationLink\",\n};\n\nexport const EDGE_TYPE_TO_MODDLE: Record<BpmnEdgeType, string> = {\n sequenceFlow: \"bpmn:SequenceFlow\",\n messageFlow: \"bpmn:MessageFlow\",\n association: \"bpmn:Association\",\n dataAssociation: \"bpmn:DataInputAssociation\",\n conversationLink:\"bpmn:ConversationLink\",\n};\n\n// ─── Event definition type → trigger ─────────────────────────────────────────\n\nexport const EVENT_DEF_TO_TRIGGER: Record<string, EventTrigger> = {\n \"bpmn:MessageEventDefinition\": \"message\",\n \"bpmn:TimerEventDefinition\": \"timer\",\n \"bpmn:EscalationEventDefinition\": \"escalation\",\n \"bpmn:ConditionalEventDefinition\": \"conditional\",\n \"bpmn:ErrorEventDefinition\": \"error\",\n \"bpmn:CancelEventDefinition\": \"cancel\",\n \"bpmn:CompensateEventDefinition\": \"compensation\",\n \"bpmn:SignalEventDefinition\": \"signal\",\n \"bpmn:LinkEventDefinition\": \"link\",\n \"bpmn:TerminateEventDefinition\": \"terminate\",\n};\n\nexport const TRIGGER_TO_EVENT_DEF: Partial<Record<EventTrigger, string>> = {\n message: \"bpmn:MessageEventDefinition\",\n timer: \"bpmn:TimerEventDefinition\",\n escalation: \"bpmn:EscalationEventDefinition\",\n conditional: \"bpmn:ConditionalEventDefinition\",\n error: \"bpmn:ErrorEventDefinition\",\n cancel: \"bpmn:CancelEventDefinition\",\n compensation: \"bpmn:CompensateEventDefinition\",\n signal: \"bpmn:SignalEventDefinition\",\n link: \"bpmn:LinkEventDefinition\",\n terminate: \"bpmn:TerminateEventDefinition\",\n};\n","import { BpmnModdle, type ModdleElement } from \"bpmn-moddle\";\nimport { BPMN_ELEMENT_CATALOG } from \"../elements/catalog\";\nimport type {\n BpmnElementType,\n BpmnEdgeType,\n BpmnNodeData,\n BpmnEdgeData,\n EventTrigger,\n SubProcessVariant,\n BpmnDefinitionsSet,\n BpmnEventDefinition,\n BpmnProcessVariable,\n} from \"../elements/types\";\nimport type { BpmnRFNode, BpmnRFEdge, BpmnImportResult } from \"./types\";\nimport {\n MODDLE_TO_ELEMENT_TYPE,\n MODDLE_TO_EDGE_TYPE,\n EVENT_DEF_TO_TRIGGER,\n} from \"./mapper\";\n\n// ─── Internal helpers ─────────────────────────────────────────────────────────\n\ninterface ShapeInfo {\n x: number;\n y: number;\n width: number;\n height: number;\n isExpanded?: boolean;\n}\n\ntype ShapeMap = Map<string, ShapeInfo>;\ntype WaypointMap = Map<string, Array<{ x: number; y: number }>>;\n\nfunction asElements(v: unknown): ModdleElement[] {\n return Array.isArray(v) ? (v as ModdleElement[]) : [];\n}\n\nfunction asString(v: unknown): string | undefined {\n return typeof v === \"string\" && v.trim() ? v.trim() : undefined;\n}\n\nfunction extractDocumentation(el: ModdleElement): string | undefined {\n const [doc] = asElements(el.documentation);\n return asString(doc?.text);\n}\n\n// ─── Extract BPMNDI shape/edge positions ─────────────────────────────────────\n\nfunction extractDiagramInfo(definitions: ModdleElement): {\n shapes: ShapeMap;\n waypoints: WaypointMap;\n} {\n const shapes: ShapeMap = new Map();\n const waypoints: WaypointMap = new Map();\n\n for (const diagram of asElements(definitions.diagrams)) {\n const plane = diagram.plane as ModdleElement | undefined;\n if (!plane) continue;\n\n for (const el of asElements(plane.planeElement)) {\n const bpmnEl = el.bpmnElement as ModdleElement | undefined;\n if (!bpmnEl?.id) continue;\n const id = bpmnEl.id as string;\n\n if (el.$type === \"bpmndi:BPMNShape\") {\n const b = el.bounds as { x: number; y: number; width: number; height: number } | undefined;\n if (b) {\n shapes.set(id, {\n x: b.x,\n y: b.y,\n width: b.width,\n height: b.height,\n ...(typeof el.isExpanded === \"boolean\" ? { isExpanded: el.isExpanded as boolean } : {}),\n });\n }\n } else if (el.$type === \"bpmndi:BPMNEdge\") {\n const pts = (el.waypoint ?? []) as Array<{ x: number; y: number }>;\n if (pts.length) waypoints.set(id, pts);\n }\n }\n }\n\n return { shapes, waypoints };\n}\n\n// ─── Lane membership (flowNodeId → laneId) ───────────────────────────────────\n\nfunction extractLaneMembership(process: ModdleElement): Map<string, string> {\n const map = new Map<string, string>();\n\n function walkLaneSet(laneSet: ModdleElement) {\n for (const lane of asElements(laneSet.lanes)) {\n const laneId = lane.id as string | undefined;\n if (!laneId) continue;\n for (const ref of asElements(lane.flowNodeRef)) {\n if (ref.id) map.set(ref.id as string, laneId);\n }\n const child = lane.childLaneSet as ModdleElement | undefined;\n if (child) walkLaneSet(child);\n }\n }\n\n const laneSet = process.laneSet as ModdleElement | undefined;\n if (laneSet) walkLaneSet(laneSet);\n return map;\n}\n\n// ─── Event trigger from eventDefinitions ─────────────────────────────────────\n\nfunction extractTrigger(el: ModdleElement): EventTrigger | undefined {\n const defs = asElements(el.eventDefinitions);\n if (defs.length === 0) return undefined;\n if (defs.length > 1) {\n return defs.some((def) => def.$type === \"bpmn:ParallelMultipleEventDefinition\")\n ? \"parallelMultiple\"\n : \"multiple\";\n }\n return EVENT_DEF_TO_TRIGGER[defs[0].$type];\n}\n\nfunction parseVariableType(value: unknown): BpmnProcessVariable[\"type\"] {\n const text = asString(value) ?? \"\";\n if (text.includes(\"int\")) return \"integer\";\n if (text.includes(\"boolean\")) return \"boolean\";\n if (text.includes(\"date\")) return \"date\";\n if (text.includes(\"array\")) return \"array\";\n if (text.includes(\"anyType\")) return \"object\";\n return \"string\";\n}\n\nfunction extractEventDefinition(el: ModdleElement): BpmnEventDefinition | undefined {\n const defs = asElements(el.eventDefinitions);\n if (defs.length === 0) return undefined;\n if (defs.length > 1) {\n return {\n type: defs.some((def) => def.$type === \"bpmn:ParallelMultipleEventDefinition\")\n ? \"parallelMultiple\"\n : \"multiple\",\n };\n }\n\n const [def] = defs;\n const type = EVENT_DEF_TO_TRIGGER[def.$type];\n if (!type) return undefined;\n\n const eventDefinition: BpmnEventDefinition = {\n type,\n ...(asString((def.messageRef as ModdleElement | undefined)?.id) ? { messageRef: (def.messageRef as ModdleElement).id as string } : {}),\n ...(asString((def.signalRef as ModdleElement | undefined)?.id) ? { signalRef: (def.signalRef as ModdleElement).id as string } : {}),\n ...(asString((def.errorRef as ModdleElement | undefined)?.id) ? { errorRef: (def.errorRef as ModdleElement).id as string } : {}),\n ...(asString((def.escalationRef as ModdleElement | undefined)?.id) ? { escalationRef: (def.escalationRef as ModdleElement).id as string } : {}),\n ...(asString((def.condition as ModdleElement | undefined)?.body) ? { conditionExpression: (def.condition as ModdleElement).body as string } : {}),\n };\n\n const timeDate = asString((def.timeDate as ModdleElement | undefined)?.body);\n const timeDuration = asString((def.timeDuration as ModdleElement | undefined)?.body);\n const timeCycle = asString((def.timeCycle as ModdleElement | undefined)?.body);\n if (timeDate) eventDefinition.timer = { kind: \"date\", value: timeDate };\n else if (timeCycle) eventDefinition.timer = { kind: \"cycle\", value: timeCycle };\n else if (timeDuration) eventDefinition.timer = { kind: \"duration\", value: timeDuration };\n\n if (type === \"link\") {\n const linkName = asString(el.name) ?? asString(def.name);\n if (linkName) eventDefinition.linkName = linkName;\n }\n\n return eventDefinition;\n}\n\nfunction extractDefinitions(rootElement: ModdleElement): BpmnDefinitionsSet | undefined {\n const definitions: BpmnDefinitionsSet = {};\n const rootElements = asElements(rootElement.rootElements);\n\n const messages = rootElements\n .filter((element) => element.$type === \"bpmn:Message\" && asString(element.id))\n .map((message) => ({\n id: message.id as string,\n name: asString(message.name) ?? message.id as string,\n }));\n if (messages.length > 0) definitions.messages = messages;\n\n const signals = rootElements\n .filter((element) => element.$type === \"bpmn:Signal\" && asString(element.id))\n .map((signal) => ({\n id: signal.id as string,\n name: asString(signal.name) ?? signal.id as string,\n }));\n if (signals.length > 0) definitions.signals = signals;\n\n const errors = rootElements\n .filter((element) => element.$type === \"bpmn:Error\" && asString(element.id))\n .map((error) => ({\n id: error.id as string,\n name: asString(error.name) ?? error.id as string,\n ...(asString(error.errorCode) ? { errorCode: error.errorCode as string } : {}),\n }));\n if (errors.length > 0) definitions.errors = errors;\n\n const escalations = rootElements\n .filter((element) => element.$type === \"bpmn:Escalation\" && asString(element.id))\n .map((escalation) => ({\n id: escalation.id as string,\n name: asString(escalation.name) ?? escalation.id as string,\n ...(asString(escalation.escalationCode) ? { escalationCode: escalation.escalationCode as string } : {}),\n }));\n if (escalations.length > 0) definitions.escalations = escalations;\n\n const itemDefinitions = asElements(rootElement.itemDefinitions)\n .filter((item) => asString(item.id))\n .map((item) => ({\n id: String(item.id).replace(/_item$/, \"\"),\n name: String(item.id).replace(/_item$/, \"\"),\n type: parseVariableType(item.structureRef),\n }));\n if (itemDefinitions.length > 0) definitions.variables = itemDefinitions;\n\n return Object.keys(definitions).length > 0 ? definitions : undefined;\n}\n\n// ─── SubProcessVariant from moddle type / properties ─────────────────────────\n\nfunction extractSubProcessVariant(el: ModdleElement): SubProcessVariant | undefined {\n if (el.$type === \"bpmn:Transaction\") return \"transaction\";\n if (el.$type === \"bpmn:AdHocSubProcess\") return \"adhoc\";\n if (el.$type === \"bpmn:SubProcess\" && el.triggeredByEvent === true) return \"event\";\n if (el.triggeredByEvent === true) return \"event\";\n return \"embedded\";\n}\n\n// ─── Walk a flowElements list, producing nodes and edges ─────────────────────\n\ninterface WalkContext {\n shapes: ShapeMap;\n waypoints: WaypointMap;\n laneMembership: Map<string, string>;\n warnings: string[];\n autoX: { value: number };\n}\n\nfunction walkFlowElements(\n elements: ModdleElement[],\n parentId: string | undefined,\n ctx: WalkContext,\n nodes: BpmnRFNode[],\n edges: BpmnRFEdge[],\n) {\n for (const el of elements) {\n const { $type, id } = el;\n if (!id) continue;\n\n const edgeType = MODDLE_TO_EDGE_TYPE[$type];\n if (edgeType !== undefined) {\n buildEdge(el, edgeType, ctx, edges);\n continue;\n }\n\n // Lane nodes are handled separately via laneMembership\n if ($type === \"bpmn:LaneSet\") continue;\n\n const elementType =\n $type === \"bpmn:SubProcess\" && el.triggeredByEvent === true\n ? \"EventSubProcess\"\n : MODDLE_TO_ELEMENT_TYPE[$type];\n if (!elementType) {\n ctx.warnings.push(`Unknown element type \"${$type}\" (id=${id as string}) — skipped.`);\n continue;\n }\n\n buildNode(el, elementType, parentId, ctx, nodes);\n\n // Recurse into subprocess children\n if ($type === \"bpmn:SubProcess\" || $type === \"bpmn:Transaction\" || $type === \"bpmn:AdHocSubProcess\") {\n const children = asElements(el.flowElements);\n const laneMembership = extractLaneMembership(el);\n walkFlowElements(children, id as string, { ...ctx, laneMembership }, nodes, edges);\n }\n }\n}\n\nfunction buildNode(\n el: ModdleElement,\n elementType: BpmnElementType,\n parentId: string | undefined,\n ctx: WalkContext,\n nodes: BpmnRFNode[],\n) {\n const id = el.id as string;\n const meta = BPMN_ELEMENT_CATALOG[elementType];\n const shape = ctx.shapes.get(id);\n\n // Position: use BPMNDI if available, otherwise auto-grid\n const x = shape?.x ?? ctx.autoX.value;\n const y = shape?.y ?? 100;\n if (!shape) ctx.autoX.value += (meta?.defaultWidth ?? 120) + 20;\n\n const label = asString(el.name);\n const documentation = extractDocumentation(el);\n const trigger = extractTrigger(el);\n const eventDefinition = extractEventDefinition(el);\n const isNonInterrupting = el.cancelActivity === false;\n const attachedToRef = (el.attachedToRef as ModdleElement | undefined)?.id as string | undefined;\n\n const data: BpmnNodeData = {\n elementType,\n ...(label ? { label } : {}),\n ...(documentation ? { documentation } : {}),\n ...(trigger ? { trigger } : {}),\n ...(eventDefinition ? { eventDefinition } : {}),\n ...(isNonInterrupting ? { isNonInterrupting: true } : {}),\n ...(elementType === \"BoundaryEvent\" ? { cancelActivity: el.cancelActivity !== false } : {}),\n ...(attachedToRef ? { attachedToRef } : {}),\n ...(eventDefinition?.timer ? { timer: eventDefinition.timer, timerExpression: eventDefinition.timer } : {}),\n ...(eventDefinition?.messageRef ? { messageRef: eventDefinition.messageRef } : {}),\n ...(eventDefinition?.signalRef ? { signalRef: eventDefinition.signalRef } : {}),\n ...(eventDefinition?.errorRef ? { errorRef: eventDefinition.errorRef } : {}),\n ...(eventDefinition?.escalationRef ? { escalationRef: eventDefinition.escalationRef } : {}),\n ...(eventDefinition?.conditionExpression ? { conditionExpression: eventDefinition.conditionExpression } : {}),\n ...(eventDefinition?.linkName ? { linkName: eventDefinition.linkName } : {}),\n };\n\n // SubProcess variant\n if (elementType === \"SubProcess\" || elementType === \"Transaction\" || elementType === \"EventSubProcess\" || elementType === \"AdHocSubProcess\") {\n const variant = extractSubProcessVariant(el);\n if (variant) data.subProcessVariant = variant;\n const isExpanded = shape?.isExpanded ?? true;\n data.isExpanded = isExpanded;\n }\n\n // Determine effective parentId: lane membership overrides process-level parent\n const laneId = ctx.laneMembership.get(id);\n const effectiveParentId = attachedToRef ?? laneId ?? parentId;\n\n const node: BpmnRFNode = {\n id,\n type: elementType,\n position: { x, y },\n data,\n width: shape?.width ?? meta?.defaultWidth,\n height: shape?.height ?? meta?.defaultHeight,\n ...(effectiveParentId ? { parentId: effectiveParentId } : {}),\n };\n\n nodes.push(node);\n}\n\nfunction buildEdge(\n el: ModdleElement,\n edgeType: BpmnEdgeType,\n ctx: WalkContext,\n edges: BpmnRFEdge[],\n) {\n const id = el.id as string;\n const source = (el.sourceRef as ModdleElement | undefined)?.id as string | undefined;\n const target = (el.targetRef as ModdleElement | undefined)?.id as string | undefined;\n\n if (!source || !target) {\n ctx.warnings.push(`Edge \"${id}\" missing source or target — skipped.`);\n return;\n }\n\n const label = asString(el.name);\n const documentation = extractDocumentation(el);\n const condExpr = el.conditionExpression as { body?: string } | undefined;\n\n const data: BpmnEdgeData = {\n edgeType,\n ...(label ? { label } : {}),\n ...(documentation ? { documentation } : {}),\n ...(condExpr?.body ? { conditionExpression: condExpr.body } : {}),\n };\n\n const waypoints = ctx.waypoints.get(id);\n if (waypoints?.length) data.routingPoints = waypoints;\n\n edges.push({ id, type: edgeType, source, target, data });\n}\n\n// ─── Handle Collaboration: Participants → Pool nodes ──────────────────────────\n\nfunction handleCollaboration(\n collaboration: ModdleElement,\n ctx: WalkContext,\n nodes: BpmnRFNode[],\n edges: BpmnRFEdge[],\n) {\n // Participants become Pool nodes\n for (const participant of asElements(collaboration.participants)) {\n const id = participant.id as string | undefined;\n if (!id) continue;\n const label = asString(participant.name);\n const shape = ctx.shapes.get(id);\n\n const poolNode: BpmnRFNode = {\n id,\n type: \"Pool\",\n position: { x: shape?.x ?? 0, y: shape?.y ?? 0 },\n data: { elementType: \"Pool\", ...(label ? { label } : {}) },\n width: shape?.width ?? 600,\n height: shape?.height ?? 200,\n };\n nodes.push(poolNode);\n\n // Walk the referenced process, assigning pool as parent\n const processRef = participant.processRef as ModdleElement | undefined;\n if (processRef) {\n const laneMembership = extractLaneMembership(processRef);\n walkFlowElements(\n asElements(processRef.flowElements),\n id,\n { ...ctx, laneMembership },\n nodes,\n edges,\n );\n\n // Add Lane nodes\n const laneSet = processRef.laneSet as ModdleElement | undefined;\n if (laneSet) {\n addLaneNodes(laneSet, id, ctx, nodes);\n }\n }\n }\n\n // Message flows\n for (const mf of asElements(collaboration.messageFlows)) {\n buildEdge(mf, \"messageFlow\", ctx, edges);\n }\n\n // Conversation links\n for (const cl of asElements(collaboration.conversationLinks)) {\n buildEdge(cl, \"conversationLink\", ctx, edges);\n }\n}\n\nfunction addLaneNodes(\n laneSet: ModdleElement,\n poolId: string,\n ctx: WalkContext,\n nodes: BpmnRFNode[],\n) {\n for (const lane of asElements(laneSet.lanes)) {\n const id = lane.id as string | undefined;\n if (!id) continue;\n const label = asString(lane.name);\n const shape = ctx.shapes.get(id);\n\n nodes.push({\n id,\n type: \"Lane\",\n position: { x: shape?.x ?? 30, y: shape?.y ?? 0 },\n data: { elementType: \"Lane\", ...(label ? { label } : {}) },\n width: shape?.width ?? 570,\n height: shape?.height ?? 120,\n parentId: poolId,\n });\n\n const child = lane.childLaneSet as ModdleElement | undefined;\n if (child) addLaneNodes(child, poolId, ctx, nodes);\n }\n}\n\n// ─── Public: parseBpmnXml ─────────────────────────────────────────────────────\n\nexport async function parseBpmnXml(xml: string): Promise<BpmnImportResult> {\n const moddle = new BpmnModdle();\n const warnings: string[] = [];\n\n let rootElement: ModdleElement;\n try {\n const result = await moddle.fromXML(xml);\n rootElement = result.rootElement;\n for (const w of result.warnings) warnings.push(w.message);\n } catch (err) {\n throw new Error(`Failed to parse BPMN XML: ${String(err)}`);\n }\n\n const nodes: BpmnRFNode[] = [];\n const edges: BpmnRFEdge[] = [];\n\n const { shapes, waypoints } = extractDiagramInfo(rootElement);\n const ctx: WalkContext = {\n shapes,\n waypoints,\n laneMembership: new Map(),\n warnings,\n autoX: { value: 50 },\n };\n\n for (const rootEl of asElements(rootElement.rootElements)) {\n if (rootEl.$type === \"bpmn:Collaboration\") {\n handleCollaboration(rootEl, ctx, nodes, edges);\n } else if (rootEl.$type === \"bpmn:Process\") {\n const laneMembership = extractLaneMembership(rootEl);\n const laneSet = rootEl.laneSet as ModdleElement | undefined;\n if (laneSet) addLaneNodes(laneSet, \"\", ctx, nodes);\n walkFlowElements(\n asElements(rootEl.flowElements),\n undefined,\n { ...ctx, laneMembership },\n nodes,\n edges,\n );\n }\n }\n\n const defaultFlowById = new Set<string>();\n const nodeIds = new Set(nodes.map((node) => node.id));\n for (const rootEl of asElements(rootElement.rootElements)) {\n collectDefaultFlows(rootEl, defaultFlowById);\n }\n\n const normalizedEdges: BpmnRFEdge[] = edges.map((edge) => {\n if (!defaultFlowById.has(edge.id)) return edge;\n const data: BpmnEdgeData = {\n edgeType: edge.data?.edgeType ?? (edge.type as BpmnEdgeType),\n ...(edge.data ?? {}),\n isDefault: true,\n };\n return { ...edge, data };\n });\n\n const firstProcess = asElements(rootElement.rootElements).find((rootEl) => rootEl.$type === \"bpmn:Process\");\n\n const importedDefinitions = extractDefinitions(rootElement);\n const process =\n firstProcess\n ? (() => {\n const importedProcess: NonNullable<BpmnImportResult[\"process\"]> = {};\n const processId = asString(firstProcess.id);\n const documentation = extractDocumentation(firstProcess);\n if (processId) importedProcess.processId = processId;\n if (typeof firstProcess.isExecutable === \"boolean\") importedProcess.executable = firstProcess.isExecutable as boolean;\n if (documentation) importedProcess.documentation = documentation;\n if (importedDefinitions) importedProcess.definitions = importedDefinitions;\n return importedProcess;\n })()\n : importedDefinitions\n ? { definitions: importedDefinitions }\n : undefined;\n\n return {\n nodes: normalizeChildPositions(nodes, nodeIds),\n edges: normalizedEdges,\n warnings,\n ...(process ? { process } : {}),\n };\n}\n\nfunction collectDefaultFlows(el: ModdleElement, defaultFlowById: Set<string>): void {\n const defaultRef = el.default as ModdleElement | undefined;\n if (defaultRef?.id) defaultFlowById.add(defaultRef.id as string);\n\n for (const child of asElements(el.rootElements)) collectDefaultFlows(child, defaultFlowById);\n for (const child of asElements(el.flowElements)) collectDefaultFlows(child, defaultFlowById);\n}\n\nfunction normalizeChildPositions(nodes: BpmnRFNode[], nodeIds: Set<string>): BpmnRFNode[] {\n const absoluteById = new Map(nodes.map((node) => [node.id, node.position]));\n\n return nodes.map((node) => {\n if (!node.parentId || !nodeIds.has(node.parentId)) return node;\n const parentPosition = absoluteById.get(node.parentId);\n if (!parentPosition) return node;\n\n return {\n ...node,\n position: {\n x: node.position.x - parentPosition.x,\n y: node.position.y - parentPosition.y,\n },\n };\n });\n}\n","import { BpmnModdle, type ModdleElement } from \"bpmn-moddle\";\nimport { BPMN_ELEMENT_CATALOG } from \"../elements/catalog\";\nimport type { BpmnRFNode, BpmnRFEdge, BpmnExportOptions } from \"./types\";\nimport type {\n BpmnDefinitionsSet,\n BpmnEventDefinition,\n BpmnNodeData,\n BpmnProcessVariable,\n} from \"../elements/types\";\nimport {\n ELEMENT_TYPE_TO_MODDLE,\n EDGE_TYPE_TO_MODDLE,\n TRIGGER_TO_EVENT_DEF,\n} from \"./mapper\";\n\n// ─── Helpers ──────────────────────────────────────────────────────────────────\n\nfunction uid(prefix: string, id: string): string {\n return `${prefix}_${id}`;\n}\n\nfunction asNodes(nodes: BpmnRFNode[], types: string[]): BpmnRFNode[] {\n return nodes.filter((n) => types.includes(n.data.elementType));\n}\n\nfunction normalizeEventDefinition(data: BpmnNodeData): BpmnEventDefinition | undefined {\n const trigger = data.eventDefinition?.type ?? data.trigger;\n if (!trigger || trigger === \"none\") return undefined;\n const normalized: BpmnEventDefinition = { type: trigger };\n const timer = data.eventDefinition?.timer ?? data.timer ?? data.timerExpression;\n const messageRef = data.eventDefinition?.messageRef ?? (typeof data.messageRef === \"string\" ? data.messageRef : undefined);\n const signalRef = data.eventDefinition?.signalRef ?? (typeof data.signalRef === \"string\" ? data.signalRef : undefined);\n const errorRef = data.eventDefinition?.errorRef ?? (typeof data.errorRef === \"string\" ? data.errorRef : undefined);\n const escalationRef = data.eventDefinition?.escalationRef ?? (typeof data.escalationRef === \"string\" ? data.escalationRef : undefined);\n const conditionExpression = data.eventDefinition?.conditionExpression ?? (typeof data.conditionExpression === \"string\" ? data.conditionExpression : undefined);\n const linkName = data.eventDefinition?.linkName ?? (typeof data.linkName === \"string\" ? data.linkName : undefined);\n\n if (timer) normalized.timer = timer;\n if (messageRef) normalized.messageRef = messageRef;\n if (signalRef) normalized.signalRef = signalRef;\n if (errorRef) normalized.errorRef = errorRef;\n if (escalationRef) normalized.escalationRef = escalationRef;\n if (conditionExpression) normalized.conditionExpression = conditionExpression;\n if (linkName) normalized.linkName = linkName;\n\n return normalized;\n}\n\nfunction parseVariableType(type: string | undefined): string {\n switch (type) {\n case \"integer\":\n return \"xsd:int\";\n case \"boolean\":\n return \"xsd:boolean\";\n case \"date\":\n return \"xsd:dateTime\";\n case \"object\":\n return \"xsd:anyType\";\n case \"array\":\n return \"xsd:anyType\";\n default:\n return \"xsd:string\";\n }\n}\n\nfunction buildGlobalDefinitions(moddle: BpmnModdle, definitionsSet?: BpmnDefinitionsSet): ModdleElement[] {\n if (!definitionsSet) return [];\n const rootElements: ModdleElement[] = [];\n\n for (const message of definitionsSet.messages ?? []) {\n rootElements.push(moddle.create(\"bpmn:Message\", { id: message.id, name: message.name }));\n }\n for (const signal of definitionsSet.signals ?? []) {\n rootElements.push(moddle.create(\"bpmn:Signal\", { id: signal.id, name: signal.name }));\n }\n for (const error of definitionsSet.errors ?? []) {\n rootElements.push(moddle.create(\"bpmn:Error\", {\n id: error.id,\n name: error.name,\n ...(error.errorCode ? { errorCode: error.errorCode } : {}),\n }));\n }\n for (const escalation of definitionsSet.escalations ?? []) {\n rootElements.push(moddle.create(\"bpmn:Escalation\", {\n id: escalation.id,\n name: escalation.name,\n ...(escalation.escalationCode ? { escalationCode: escalation.escalationCode } : {}),\n }));\n }\n\n return rootElements;\n}\n\nfunction buildItemDefinitions(moddle: BpmnModdle, variables?: BpmnProcessVariable[]): ModdleElement[] {\n return (variables ?? []).map((variable) =>\n moddle.create(\"bpmn:ItemDefinition\", {\n id: `${variable.id}_item`,\n itemKind: \"Information\",\n structureRef: parseVariableType(variable.type),\n }),\n );\n}\n\nfunction buildEventDefinitions(\n moddle: BpmnModdle,\n node: BpmnRFNode,\n eventDefinition: BpmnEventDefinition,\n): ModdleElement[] {\n if (eventDefinition.type === \"multiple\" || eventDefinition.type === \"parallelMultiple\") {\n return [];\n }\n const defType = TRIGGER_TO_EVENT_DEF[eventDefinition.type];\n if (!defType) return [];\n\n const attrs: Record<string, unknown> = { id: uid(\"EventDef\", node.id) };\n\n if (eventDefinition.messageRef) attrs.messageRef = { id: eventDefinition.messageRef };\n if (eventDefinition.signalRef) attrs.signalRef = { id: eventDefinition.signalRef };\n if (eventDefinition.errorRef) attrs.errorRef = { id: eventDefinition.errorRef };\n if (eventDefinition.escalationRef) attrs.escalationRef = { id: eventDefinition.escalationRef };\n if (eventDefinition.conditionExpression) {\n attrs.condition = moddle.create(\"bpmn:FormalExpression\", {\n body: eventDefinition.conditionExpression,\n });\n }\n if (eventDefinition.timer?.value) {\n attrs[eventDefinition.timer.kind === \"date\"\n ? \"timeDate\"\n : eventDefinition.timer.kind === \"cycle\"\n ? \"timeCycle\"\n : \"timeDuration\"] = moddle.create(\"bpmn:FormalExpression\", {\n body: eventDefinition.timer.value,\n });\n }\n\n return [moddle.create(defType, attrs)];\n}\n\n// ─── Build BPMN semantic model ────────────────────────────────────────────────\n\nfunction buildSemanticModel(\n moddle: BpmnModdle,\n nodes: BpmnRFNode[],\n edges: BpmnRFEdge[],\n opts: BpmnExportOptions,\n): ModdleElement {\n const defId = opts.id ?? \"Definitions_1\";\n const defName = opts.name;\n\n // Collect pool nodes → Collaboration + Participants\n const poolNodes = asNodes(nodes, [\"Pool\"]);\n const laneNodes = asNodes(nodes, [\"Lane\"]);\n const isCollaboration = poolNodes.length > 0;\n\n const definitions = moddle.create(\"bpmn:Definitions\", {\n id: defId,\n targetNamespace: \"http://bpmn.io/schema/bpmn\",\n ...(defName ? { name: defName } : {}),\n });\n // Flowable namespace: bpmn-moddle serializes xmlns:* from the element's own namespace map.\n // Injected via the moddle descriptor when a full Flowable extension is loaded.\n // For now, individual elements declare their own flowable:* attributes via $attrs.\n\n const rootElements: ModdleElement[] = [\n ...buildGlobalDefinitions(moddle, opts.process?.definitions),\n ];\n const itemDefinitions = buildItemDefinitions(moddle, opts.process?.definitions?.variables);\n if (itemDefinitions.length > 0) {\n (definitions as Record<string, unknown>).itemDefinitions = itemDefinitions;\n }\n\n if (isCollaboration) {\n const participants: ModdleElement[] = [];\n const processes: ModdleElement[] = [];\n\n for (const pool of poolNodes) {\n const processId = `Process_${pool.id}`;\n const process = buildProcess(moddle, nodes, edges, pool.id, laneNodes, processId, opts);\n processes.push(process);\n\n const participant = moddle.create(\"bpmn:Participant\", {\n id: pool.id,\n name: pool.data.label ?? \"\",\n processRef: process,\n });\n participants.push(participant);\n }\n\n // Message flows and conversation links belong to collaboration\n const messageFlowEdges = edges.filter((e) => e.data?.edgeType === \"messageFlow\");\n const conversationLinkEdges = edges.filter((e) => e.data?.edgeType === \"conversationLink\");\n\n const messageFlows = messageFlowEdges.map((e) =>\n moddle.create(\"bpmn:MessageFlow\", {\n id: e.id,\n name: e.data?.label ?? \"\",\n sourceRef: { id: e.source },\n targetRef: { id: e.target },\n }),\n );\n\n const conversationLinks = conversationLinkEdges.map((e) =>\n moddle.create(\"bpmn:ConversationLink\", {\n id: e.id,\n sourceRef: { id: e.source },\n targetRef: { id: e.target },\n }),\n );\n\n const collaboration = moddle.create(\"bpmn:Collaboration\", {\n id: `Collaboration_${defId}`,\n participants,\n messageFlows,\n conversationLinks,\n });\n\n rootElements.push(collaboration, ...processes);\n } else {\n // Single process — no collaboration\n const process = buildProcess(\n moddle,\n nodes,\n edges,\n undefined,\n laneNodes,\n opts.process?.processId ?? \"Process_1\",\n opts,\n );\n rootElements.push(process);\n }\n\n (definitions as Record<string, unknown>).rootElements = rootElements;\n return definitions;\n}\n\n// Build a bpmn:Process element containing flow nodes and sequence flows\nfunction buildProcess(\n moddle: BpmnModdle,\n allNodes: BpmnRFNode[],\n allEdges: BpmnRFEdge[],\n poolId: string | undefined,\n laneNodes: BpmnRFNode[],\n processId: string,\n opts: BpmnExportOptions,\n): ModdleElement {\n // Collect flow nodes that belong to this pool (or all if no pools)\n const subProcessIds = new Set(\n allNodes\n .filter((n) =>\n n.data.elementType === \"SubProcess\" ||\n n.data.elementType === \"Transaction\" ||\n n.data.elementType === \"EventSubProcess\" ||\n n.data.elementType === \"AdHocSubProcess\",\n )\n .map((n) => n.id),\n );\n const isInsideSubProcess = (node: BpmnRFNode) => {\n let parentId = node.parentId;\n while (parentId) {\n if (subProcessIds.has(parentId)) return true;\n parentId = allNodes.find((candidate) => candidate.id === parentId)?.parentId;\n }\n return false;\n };\n\n const belongsToPool = (node: BpmnRFNode): boolean => {\n let parentId = node.parentId;\n while (parentId) {\n if (parentId === poolId) return true;\n parentId = allNodes.find((candidate) => candidate.id === parentId)?.parentId;\n }\n return false;\n };\n\n const myNodes = (poolId\n ? allNodes.filter((n) => belongsToPool(n))\n : allNodes.filter((n) => n.data.elementType !== \"Pool\" && n.data.elementType !== \"Lane\"))\n .filter((n) => !isInsideSubProcess(n));\n\n const myLanes = laneNodes.filter((l) => (poolId ? l.parentId === poolId : true));\n\n // Build flow elements\n const flowElements: ModdleElement[] = [];\n\n for (const node of myNodes) {\n const el = buildFlowElement(moddle, node, allNodes, allEdges);\n if (el) flowElements.push(el);\n }\n\n // Sequence flows and associations\n const myNodeIds = new Set(myNodes.map((n) => n.id));\n const myEdges = allEdges.filter(\n (e) =>\n (e.data?.edgeType === \"sequenceFlow\" ||\n e.data?.edgeType === \"association\" ||\n e.data?.edgeType === \"dataAssociation\") &&\n myNodeIds.has(e.source) &&\n myNodeIds.has(e.target),\n );\n\n for (const edge of myEdges) {\n const edgeMeta = buildEdgeElement(moddle, edge);\n if (edgeMeta) flowElements.push(edgeMeta);\n }\n\n const elementById = new Map(\n flowElements\n .filter((element) => typeof element.id === \"string\")\n .map((element) => [element.id as string, element]),\n );\n for (const edge of myEdges) {\n if (!edge.data?.isDefault) continue;\n const sourceElement = elementById.get(edge.source);\n const edgeElement = elementById.get(edge.id);\n if (sourceElement && edgeElement) {\n (sourceElement as Record<string, unknown>).default = edgeElement;\n }\n }\n\n const process = moddle.create(\"bpmn:Process\", {\n id: processId,\n isExecutable: opts.process?.executable ?? true,\n flowElements,\n });\n\n if (opts.process?.documentation) {\n (process as Record<string, unknown>).documentation = [\n moddle.create(\"bpmn:Documentation\", { text: opts.process.documentation }),\n ];\n }\n\n // Lane set\n if (myLanes.length > 0) {\n const laneElements = myLanes.map((l) =>\n moddle.create(\"bpmn:Lane\", {\n id: l.id,\n name: l.data.label ?? \"\",\n flowNodeRef: myNodes\n .filter((n) => n.parentId === l.id)\n .map((n) => ({ id: n.id })),\n }),\n );\n (process as Record<string, unknown>).laneSet = moddle.create(\"bpmn:LaneSet\", {\n id: `LaneSet_${processId}`,\n lanes: laneElements,\n });\n }\n\n return process;\n}\n\nfunction buildFlowElement(\n moddle: BpmnModdle,\n node: BpmnRFNode,\n allNodes: BpmnRFNode[],\n allEdges: BpmnRFEdge[],\n): ModdleElement | null {\n const { elementType, label } = node.data;\n const eventDefinition = normalizeEventDefinition(node.data);\n\n // Pools and Lanes are handled in buildProcess / collaboration\n if (elementType === \"Pool\" || elementType === \"Lane\") return null;\n\n const moddleType = ELEMENT_TYPE_TO_MODDLE[elementType];\n if (!moddleType) return null;\n\n const attrs: Record<string, unknown> = {\n id: node.id,\n name: label ?? \"\",\n };\n\n if (node.data.documentation) {\n attrs.documentation = [\n moddle.create(\"bpmn:Documentation\", { text: node.data.documentation }),\n ];\n }\n\n // Event definitions\n if (eventDefinition) {\n const eventDefinitions = buildEventDefinitions(moddle, node, eventDefinition);\n if (eventDefinitions.length > 0) attrs.eventDefinitions = eventDefinitions;\n if (eventDefinition.linkName) attrs.name = eventDefinition.linkName;\n }\n\n if (elementType === \"BoundaryEvent\") {\n attrs.attachedToRef = { id: node.data.attachedToRef ?? node.parentId };\n const interrupting = node.data.cancelActivity ?? !node.data.isNonInterrupting;\n attrs.cancelActivity = interrupting;\n }\n\n const isSubProcess =\n elementType === \"SubProcess\" ||\n elementType === \"Transaction\" ||\n elementType === \"EventSubProcess\" ||\n elementType === \"AdHocSubProcess\";\n\n if (isSubProcess) {\n attrs.flowElements = buildNestedFlowElements(moddle, node, allNodes, allEdges);\n if (elementType === \"EventSubProcess\" || node.data.subProcessVariant === \"event\") {\n attrs.triggeredByEvent = true;\n }\n }\n\n const element = moddle.create(moddleType, attrs);\n\n return element;\n}\n\nfunction buildNestedFlowElements(\n moddle: BpmnModdle,\n parent: BpmnRFNode,\n allNodes: BpmnRFNode[],\n allEdges: BpmnRFEdge[],\n): ModdleElement[] {\n const childNodes = allNodes.filter((node) => node.parentId === parent.id);\n const childNodeIds = new Set(childNodes.map((node) => node.id));\n const flowElements: ModdleElement[] = [];\n\n for (const child of childNodes) {\n const element = buildFlowElement(moddle, child, allNodes, allEdges);\n if (element) flowElements.push(element);\n }\n\n for (const edge of allEdges) {\n if (!childNodeIds.has(edge.source) || !childNodeIds.has(edge.target)) continue;\n const element = buildEdgeElement(moddle, edge);\n if (element) flowElements.push(element);\n }\n\n return flowElements;\n}\n\nfunction buildEdgeElement(moddle: BpmnModdle, edge: BpmnRFEdge): ModdleElement | null {\n if (!edge.data) return null;\n const moddleType = EDGE_TYPE_TO_MODDLE[edge.data.edgeType];\n if (!moddleType) return null;\n\n const attrs: Record<string, unknown> = {\n id: edge.id,\n name: edge.data.label ?? \"\",\n sourceRef: { id: edge.source },\n targetRef: { id: edge.target },\n };\n\n if (edge.data.documentation) {\n attrs.documentation = [\n moddle.create(\"bpmn:Documentation\", { text: edge.data.documentation }),\n ];\n }\n\n if (edge.data.conditionExpression) {\n attrs.conditionExpression = moddle.create(\"bpmn:FormalExpression\", {\n body: edge.data.conditionExpression,\n });\n }\n\n return moddle.create(moddleType, attrs);\n}\n\n// ─── Build BPMNDI (diagram interchange / layout) ─────────────────────────────\n\nfunction buildBpmnDI(\n moddle: BpmnModdle,\n definitions: ModdleElement,\n nodes: BpmnRFNode[],\n edges: BpmnRFEdge[],\n): void {\n const shapes: ModdleElement[] = [];\n const edgeShapes: ModdleElement[] = [];\n\n const absolutePositionById = buildAbsolutePositionMap(nodes);\n\n for (const node of nodes) {\n const meta = BPMN_ELEMENT_CATALOG[node.data.elementType];\n const w = node.width ?? meta?.defaultWidth ?? 120;\n const h = node.height ?? meta?.defaultHeight ?? 60;\n\n const bounds = moddle.create(\"dc:Bounds\", {\n x: absolutePositionById.get(node.id)?.x ?? node.position.x,\n y: absolutePositionById.get(node.id)?.y ?? node.position.y,\n width: w,\n height: h,\n });\n\n const shape = moddle.create(\"bpmndi:BPMNShape\", {\n id: uid(\"BPMNShape\", node.id),\n bpmnElement: { id: node.id },\n bounds,\n });\n\n if (node.data.isExpanded !== undefined) {\n (shape as Record<string, unknown>).isExpanded = node.data.isExpanded;\n }\n\n shapes.push(shape);\n }\n\n for (const edge of edges) {\n const waypoints = resolveEdgeWaypoints(edge, nodes, absolutePositionById).map((p) =>\n moddle.create(\"dc:Point\", { x: p.x, y: p.y }),\n );\n\n edgeShapes.push(\n moddle.create(\"bpmndi:BPMNEdge\", {\n id: uid(\"BPMNEdge\", edge.id),\n bpmnElement: { id: edge.id },\n waypoint: waypoints,\n }),\n );\n }\n\n // Find the main process / collaboration element\n const rootEls = (definitions as Record<string, unknown>).rootElements as ModdleElement[] | undefined;\n const planeElement = rootEls?.[0];\n\n const plane = moddle.create(\"bpmndi:BPMNPlane\", {\n id: \"BPMNPlane_1\",\n bpmnElement: planeElement ?? { id: \"unknown\" },\n planeElement: [...shapes, ...edgeShapes],\n });\n\n const diagram = moddle.create(\"bpmndi:BPMNDiagram\", {\n id: \"BPMNDiagram_1\",\n plane,\n });\n\n (definitions as Record<string, unknown>).diagrams = [diagram];\n}\n\nfunction resolveEdgeWaypoints(\n edge: BpmnRFEdge,\n nodes: BpmnRFNode[],\n absolutePositionById: Map<string, { x: number; y: number }>,\n): Array<{ x: number; y: number }> {\n if (edge.data?.routingPoints && edge.data.routingPoints.length >= 2) {\n return edge.data.routingPoints;\n }\n\n const source = nodes.find((node) => node.id === edge.source);\n const target = nodes.find((node) => node.id === edge.target);\n if (!source || !target) return [];\n\n const sourceMeta = BPMN_ELEMENT_CATALOG[source.data.elementType];\n const targetMeta = BPMN_ELEMENT_CATALOG[target.data.elementType];\n const sourcePosition = absolutePositionById.get(source.id) ?? source.position;\n const targetPosition = absolutePositionById.get(target.id) ?? target.position;\n return [\n {\n x: sourcePosition.x + (source.width ?? sourceMeta.defaultWidth) / 2,\n y: sourcePosition.y + (source.height ?? sourceMeta.defaultHeight) / 2,\n },\n {\n x: targetPosition.x + (target.width ?? targetMeta.defaultWidth) / 2,\n y: targetPosition.y + (target.height ?? targetMeta.defaultHeight) / 2,\n },\n ];\n}\n\nfunction buildAbsolutePositionMap(nodes: BpmnRFNode[]): Map<string, { x: number; y: number }> {\n const nodeById = new Map(nodes.map((node) => [node.id, node]));\n const absoluteById = new Map<string, { x: number; y: number }>();\n\n function resolve(node: BpmnRFNode): { x: number; y: number } {\n const cached = absoluteById.get(node.id);\n if (cached) return cached;\n\n const parent = node.parentId ? nodeById.get(node.parentId) : undefined;\n const parentPosition = parent ? resolve(parent) : { x: 0, y: 0 };\n const absolute = {\n x: parentPosition.x + node.position.x,\n y: parentPosition.y + node.position.y,\n };\n absoluteById.set(node.id, absolute);\n return absolute;\n }\n\n for (const node of nodes) resolve(node);\n return absoluteById;\n}\n\n// ─── Public: serializeBpmnXml ─────────────────────────────────────────────────\n\nexport async function serializeBpmnXml(\n nodes: BpmnRFNode[],\n edges: BpmnRFEdge[],\n opts: BpmnExportOptions = {},\n): Promise<string> {\n const moddle = new BpmnModdle();\n\n const definitions = buildSemanticModel(moddle, nodes, edges, opts);\n buildBpmnDI(moddle, definitions, nodes, edges);\n\n const { xml } = await moddle.toXML(definitions, {\n format: opts.format ?? true,\n });\n\n return xml;\n}\n"]}
@@ -1,6 +1,6 @@
1
- export { B as BPMN_ELEMENT_CATALOG, a as BPMN_RESIZABLE_ELEMENT_TYPES, g as getBpmnElementSize, b as getElementMeta, i as isBpmnElementResizable } from '../catalog-m8fHIiKH.cjs';
2
- import { e as BpmnElementType, g as BpmnHandlePolicy, i as BpmnOrientation } from '../types-DznxZxpV.cjs';
3
- export { B as BpmnCategory, a as BpmnEdgeData, b as BpmnEdgeType, c as BpmnElementMeta, d as BpmnElementSize, f as BpmnEventSemantics, h as BpmnNodeData, E as EventTrigger, S as SubProcessVariant, T as TaskMarker } from '../types-DznxZxpV.cjs';
1
+ export { B as BPMN_ELEMENT_CATALOG, a as BPMN_RESIZABLE_ELEMENT_TYPES, g as getBpmnElementSize, b as getElementMeta, i as isBpmnElementResizable } from '../catalog-D2AcvrDO.cjs';
2
+ import { f as BpmnElementType, k as BpmnHandlePolicy, n as BpmnOrientation } from '../types-rWbKYrHH.cjs';
3
+ export { B as BpmnCategory, a as BpmnDefinitionsSet, b as BpmnEdgeData, c as BpmnEdgeType, d as BpmnElementMeta, e as BpmnElementSize, g as BpmnErrorDefinition, h as BpmnEscalationDefinition, i as BpmnEventDefinition, j as BpmnEventSemantics, l as BpmnMessageDefinition, m as BpmnNodeData, o as BpmnProcessVariable, p as BpmnSignalDefinition, q as BpmnTimerDefinition, r as BpmnTimerKind, E as EventTrigger, S as SubProcessVariant, T as TaskMarker } from '../types-rWbKYrHH.cjs';
4
4
 
5
5
  declare function isTaskType(type: BpmnElementType): boolean;
6
6
  declare function isGatewayType(type: BpmnElementType): boolean;
@@ -1,6 +1,6 @@
1
- export { B as BPMN_ELEMENT_CATALOG, a as BPMN_RESIZABLE_ELEMENT_TYPES, g as getBpmnElementSize, b as getElementMeta, i as isBpmnElementResizable } from '../catalog-DIBySQqA.js';
2
- import { e as BpmnElementType, g as BpmnHandlePolicy, i as BpmnOrientation } from '../types-DznxZxpV.js';
3
- export { B as BpmnCategory, a as BpmnEdgeData, b as BpmnEdgeType, c as BpmnElementMeta, d as BpmnElementSize, f as BpmnEventSemantics, h as BpmnNodeData, E as EventTrigger, S as SubProcessVariant, T as TaskMarker } from '../types-DznxZxpV.js';
1
+ export { B as BPMN_ELEMENT_CATALOG, a as BPMN_RESIZABLE_ELEMENT_TYPES, g as getBpmnElementSize, b as getElementMeta, i as isBpmnElementResizable } from '../catalog-CQtKEV7q.js';
2
+ import { f as BpmnElementType, k as BpmnHandlePolicy, n as BpmnOrientation } from '../types-rWbKYrHH.js';
3
+ export { B as BpmnCategory, a as BpmnDefinitionsSet, b as BpmnEdgeData, c as BpmnEdgeType, d as BpmnElementMeta, e as BpmnElementSize, g as BpmnErrorDefinition, h as BpmnEscalationDefinition, i as BpmnEventDefinition, j as BpmnEventSemantics, l as BpmnMessageDefinition, m as BpmnNodeData, o as BpmnProcessVariable, p as BpmnSignalDefinition, q as BpmnTimerDefinition, r as BpmnTimerKind, E as EventTrigger, S as SubProcessVariant, T as TaskMarker } from '../types-rWbKYrHH.js';
4
4
 
5
5
  declare function isTaskType(type: BpmnElementType): boolean;
6
6
  declare function isGatewayType(type: BpmnElementType): boolean;