json-to-bpmn-xml 1.0.0 → 1.0.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.
package/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # json-to-bpmn-xml
2
2
 
3
+ [![npm version](https://img.shields.io/npm/v/json-to-bpmn-xml.svg)](https://www.npmjs.com/package/json-to-bpmn-xml)
4
+
3
5
  Convert JSON workflow definitions into BPMN 2.0 XML.
4
6
 
5
7
  ## Features
@@ -9,6 +11,16 @@ Convert JSON workflow definitions into BPMN 2.0 XML.
9
11
  - TypeScript support
10
12
  - ESM module
11
13
 
14
+ ## Supported Node Types
15
+
16
+ - start → Start Event
17
+ - end → End Event
18
+ - userTask → User Task
19
+ - serviceTask → Service Task
20
+ - exclusiveGateway → Exclusive Gateway
21
+
22
+ **Note**: This list is not final. Additional BPMN node types are planned and will be added in future releases.
23
+
12
24
  ## Installation
13
25
 
14
26
  ```bash
@@ -18,28 +30,69 @@ npm install json-to-bpmn-xml
18
30
  ## USAGE
19
31
 
20
32
  ```typescript
21
- import { convert } from "json-to-bpmn-xml";
33
+ import { convert, type ProcessModel } from "json-to-bpmn-xml";
22
34
 
23
- const model = {
35
+ const model: ProcessModel = {
24
36
  id: "process_1",
25
37
  name: "Simple Process",
26
38
  nodes: [
27
39
  { id: "start", type: "start" },
28
40
  { id: "task1", type: "userTask", name: "Do something" },
29
- { id: "end", type: "end" }
41
+ { id: "end", type: "end" },
30
42
  ],
31
43
  edges: [
32
44
  { id: "e1", source: "start", target: "task1" },
33
- { id: "e2", source: "task1", target: "end" }
34
- ]
45
+ { id: "e2", source: "task1", target: "end" },
46
+ ],
35
47
  };
36
48
 
37
49
  const xml = await convert(model);
50
+ ```
38
51
 
39
- console.log(xml);
52
+ ### OUTPUT
53
+
54
+ ```xml
55
+ <?xml version="1.0" encoding="UTF-8"?>
56
+ <bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="process_1_definitions" targetNamespace="http://www.omg.org/spec/BPMN/20100524/MODEL" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd">
57
+ <bpmn:process id="process_1" name="Simple Process" isExecutable="false">
58
+ <bpmn:startEvent id="start">
59
+ <bpmn:outgoing>e1</bpmn:outgoing>
60
+ </bpmn:startEvent>
61
+ <bpmn:userTask id="task1" name="Do something">
62
+ <bpmn:incoming>e1</bpmn:incoming>
63
+ <bpmn:outgoing>e2</bpmn:outgoing>
64
+ </bpmn:userTask>
65
+ <bpmn:endEvent id="end">
66
+ <bpmn:incoming>e2</bpmn:incoming>
67
+ </bpmn:endEvent>
68
+ <bpmn:sequenceFlow id="e1" sourceRef="start" targetRef="task1"/>
69
+ <bpmn:sequenceFlow id="e2" sourceRef="task1" targetRef="end"/>
70
+ </bpmn:process>
71
+ <bpmndi:BPMNDiagram id="BPMNDiagram_1">
72
+ <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="process_1">
73
+ <bpmndi:BPMNShape id="start_di" bpmnElement="start">
74
+ <dc:Bounds x="12" y="34" width="36" height="36"/>
75
+ </bpmndi:BPMNShape>
76
+ <bpmndi:BPMNShape id="task1_di" bpmnElement="task1">
77
+ <dc:Bounds x="168" y="12" width="100" height="80"/>
78
+ </bpmndi:BPMNShape>
79
+ <bpmndi:BPMNShape id="end_di" bpmnElement="end">
80
+ <dc:Bounds x="388" y="34" width="36" height="36"/>
81
+ </bpmndi:BPMNShape>
82
+ <bpmndi:BPMNEdge id="e1_di" bpmnElement="e1">
83
+ <di:waypoint x="48" y="52"/>
84
+ <di:waypoint x="168" y="52"/>
85
+ </bpmndi:BPMNEdge>
86
+ <bpmndi:BPMNEdge id="e2_di" bpmnElement="e2">
87
+ <di:waypoint x="268" y="52"/>
88
+ <di:waypoint x="388" y="52"/>
89
+ </bpmndi:BPMNEdge>
90
+ </bpmndi:BPMNPlane>
91
+ </bpmndi:BPMNDiagram>
92
+ </bpmn:definitions>
40
93
  ```
41
94
 
42
- ## ProcessModel
95
+ ## ProcessModel
43
96
 
44
97
  ```typescript
45
98
  type ProcessModel = {
@@ -64,4 +117,4 @@ This library is built on top of [bpmn-moddle](https://github.com/bpmn-io/bpmn-mo
64
117
 
65
118
  ## License
66
119
 
67
- Use under the terms of the [Apache-2.0](https://opensource.org/license/Apache-2.0).
120
+ Use under the terms of the [Apache-2.0](https://opensource.org/license/Apache-2.0).
package/dist/index.js CHANGED
@@ -82,14 +82,13 @@ var DefinitionsBuilder = class {
82
82
  }
83
83
  moddle;
84
84
  build(process) {
85
- return this.moddle.create("bpmn:Definitions", {
85
+ const definitions = this.moddle.create("bpmn:Definitions", {
86
86
  id: `${process.id}_definitions`,
87
- targetNamespace: "http://bpmn.io/schema/bpmn",
88
- rootElements: [process],
89
- $attrs: {
90
- "xsi:schemaLocation": "http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd"
91
- }
87
+ targetNamespace: "http://www.omg.org/spec/BPMN/20100524/MODEL",
88
+ rootElements: [process]
92
89
  });
90
+ definitions.$attrs["xsi:schemaLocation"] = "http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd";
91
+ return definitions;
93
92
  }
94
93
  };
95
94
 
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/converter/BpmnConverter.ts","../src/constants/node-map.ts","../src/builders/node.builder.ts","../src/builders/flow.builder.ts","../src/builders/process.builder.ts","../src/builders/definitions.builder.ts","../src/elk.layout.ts","../src/builders/diagram.builder.ts","../src/index.ts"],"sourcesContent":["import { BpmnModdle } from \"bpmn-moddle\";\nimport { NodeBuilder } from \"../builders/node.builder\";\nimport { FlowBuilder } from \"../builders/flow.builder\";\nimport { ProcessBuilder } from \"../builders/process.builder\";\nimport { DefinitionsBuilder } from \"../builders/definitions.builder\";\nimport { DiagramBuilder } from \"../builders/diagram.builder\";\nimport { ProcessModel } from \"../types/process\";\nimport type { BPMNModdle, FlowNode } from \"bpmn-moddle\";\nimport format from \"xml-formatter\";\n\nexport class BpmnConverter {\n private moddle: BPMNModdle;\n private nodeBuilder: NodeBuilder;\n private flowBuilder: FlowBuilder;\n private processBuilder: ProcessBuilder;\n private definitionsBuilder: DefinitionsBuilder;\n private diagramBuilder: DiagramBuilder;\n\n constructor() {\n this.moddle = new BpmnModdle();\n this.nodeBuilder = new NodeBuilder(this.moddle);\n this.flowBuilder = new FlowBuilder(this.moddle);\n this.processBuilder = new ProcessBuilder(this.moddle);\n this.definitionsBuilder = new DefinitionsBuilder(this.moddle);\n this.diagramBuilder = new DiagramBuilder(this.moddle);\n }\n\n async convert(model: ProcessModel): Promise<string> {\n const elements = this.buildElements(model);\n const elementById = this.buildElementMap(elements);\n\n const flows = this.buildFlows(model, elementById);\n const flowMeta = this.buildFlowMeta(model, flows);\n\n const process = this.processBuilder.build(\n model.id,\n model.name,\n elements,\n flows,\n );\n\n const definitions = this.definitionsBuilder.build(process);\n definitions.diagrams = [\n await this.diagramBuilder.build(process, elements, flowMeta),\n ];\n\n const { xml } = await this.moddle.toXML(definitions);\n return this.normalizeXml(xml);\n }\n\n private buildElements(model: ProcessModel) {\n return model.nodes.map((node) => this.nodeBuilder.build(node));\n }\n\n private buildElementMap(elements: any[]) {\n return new Map(\n elements.map((el) => [String(el.id), el] as [string, FlowNode]),\n );\n }\n\n private buildFlows(model: ProcessModel, elementById: Map<string, FlowNode>) {\n return model.edges.map((edge, index) =>\n this.flowBuilder.build(edge, elementById, index),\n );\n }\n\n private buildFlowMeta(model: ProcessModel, flows: any[]) {\n return model.edges.map((edge, index) =>\n this.flowBuilder.buildMeta(edge, flows[index], index),\n );\n }\n\n private normalizeXml(xml: string) {\n return format(xml, {\n indentation: \" \",\n collapseContent: true,\n lineSeparator: \"\\n\",\n });\n }\n}","import { NodeType } from \"../types/Node\";\n\nexport const NODE_MAP: Record<NodeType, string> = {\n start: \"bpmn:StartEvent\",\n end: \"bpmn:EndEvent\",\n userTask: \"bpmn:UserTask\",\n serviceTask: \"bpmn:ServiceTask\",\n exclusiveGateway: \"bpmn:ExclusiveGateway\",\n parallelGateway: \"bpmn:ParallelGateway\",\n};","import type { BPMNModdle as BPMNModdleInstance } from \"bpmn-moddle\";\nimport { NODE_MAP } from \"../constants/node-map\";\nimport { INode } from \"../types/Node\";\n\nexport class NodeBuilder {\n constructor(private moddle: BPMNModdleInstance) {}\n\n build(node: INode) {\n const type = NODE_MAP[node.type];\n\n return this.moddle.create(type, {\n id: node.id,\n name: node.name,\n });\n }\n}\n","import type { BPMNModdle, FlowNode } from \"bpmn-moddle\";\nimport type { IEdge } from \"../types/edge\";\n\nexport interface FlowMeta {\n id: string;\n source: string;\n target: string;\n flow: any;\n}\n\nexport class FlowBuilder {\n constructor(private moddle: BPMNModdle) {}\n\n build(edge: IEdge, elementById: Map<string, FlowNode>, index: number) {\n const source = elementById.get(String(edge.source));\n const target = elementById.get(String(edge.target));\n\n const flow = this.moddle.create(\"bpmn:SequenceFlow\", {\n id: edge.id ?? `Flow_${index + 1}`,\n name: edge.name,\n sourceRef: source,\n targetRef: target,\n });\n\n if (source) {\n source.outgoing = [...(source.outgoing ?? []), flow];\n }\n\n if (target) {\n target.incoming = [...(target.incoming ?? []), flow];\n }\n\n return flow;\n }\n\n buildMeta(edge: IEdge, flow: any, index: number): FlowMeta {\n return {\n id: String(edge.id ?? `Flow_${index + 1}`),\n source: String(edge.source),\n target: String(edge.target),\n flow,\n };\n }\n}","import type { BPMNModdle } from \"bpmn-moddle\";\n\nexport class ProcessBuilder {\n constructor(private moddle: BPMNModdle) {}\n\n build(id: string, name: string | undefined, elements: any[], flows: any[]) {\n return this.moddle.create(\"bpmn:Process\", {\n id,\n name,\n isExecutable: false,\n flowElements: [...elements, ...flows],\n });\n }\n}","import type { BPMNModdle } from \"bpmn-moddle\";\n\nexport class DefinitionsBuilder {\n constructor(private moddle: BPMNModdle) {}\n\n build(process: any) {\n return this.moddle.create(\"bpmn:Definitions\", {\n id: `${process.id}_definitions`,\n targetNamespace: \"http://bpmn.io/schema/bpmn\",\n rootElements: [process],\n $attrs: {\n \"xsi:schemaLocation\":\n \"http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd\",\n },\n });\n }\n}","import ELK from \"elkjs\";\n\nconst elk = new ELK();\n\nexport async function layoutGraph(nodes: any[], edges: any[]) {\n const graph = {\n id: \"root\",\n\n layoutOptions: {\n \"elk.algorithm\": \"layered\",\n \"elk.direction\": \"RIGHT\",\n\n \"elk.layered.spacing.nodeNodeBetweenLayers\": \"120\",\n \"elk.spacing.nodeNode\": \"80\",\n\n \"elk.layered.nodePlacement.strategy\": \"NETWORK_SIMPLEX\",\n \"elk.layered.crossingMinimization.strategy\": \"LAYER_SWEEP\",\n \"elk.layered.considerModelOrder.strategy\": \"NODES_AND_EDGES\",\n },\n\n children: nodes.map((n) => ({\n id: n.id,\n width: n.width ?? 120,\n height: n.height ?? 80,\n })),\n\n edges: edges.map((e) => ({\n id: e.id,\n sources: [e.source],\n targets: [e.target],\n\n junctionPoints: [],\n })),\n };\n\n return await elk.layout(graph);\n}","import type { BPMNModdle } from \"bpmn-moddle\";\nimport { layoutGraph } from \"../elk.layout\";\nimport type { FlowMeta } from \"./flow.builder\";\n\nconst NODE_SIZE = {\n default: { width: 100, height: 80 },\n start: { width: 36, height: 36 },\n end: { width: 36, height: 36 },\n gateway: { width: 50, height: 50 },\n};\n\nfunction getBounds(type: string) {\n if (type === \"bpmn:StartEvent\" || type === \"bpmn:EndEvent\") {\n return NODE_SIZE.start;\n }\n\n if (type.endsWith(\"Gateway\")) {\n return NODE_SIZE.gateway;\n }\n\n return NODE_SIZE.default;\n}\n\nexport class DiagramBuilder {\n constructor(private moddle: BPMNModdle) {}\n\n async build(process: any, elements: any[], flows: FlowMeta[]) {\n const nodes = elements.map((el) => {\n const bounds = getBounds(el.$type);\n\n return {\n id: String(el.id),\n width: bounds.width,\n height: bounds.height,\n bpmnElement: el,\n };\n });\n\n const edges = flows.map((flow) => ({\n id: String(flow.id),\n source: String(flow.source),\n target: String(flow.target),\n flow: flow.flow,\n }));\n\n const layout = await layoutGraph(nodes, edges);\n\n const nodeMap = new Map(\n (layout.children ?? [])\n .filter((n: any) => n && n.id)\n .map((n: any) => [String(n.id), n]),\n );\n\n const shapes = elements\n .map((element) => {\n const pos = nodeMap.get(String(element.id));\n if (!pos) return null;\n\n const bounds = {\n x: Number(pos.x ?? 0),\n y: Number(pos.y ?? 0),\n width: Number(pos.width ?? NODE_SIZE.default.width),\n height: Number(pos.height ?? NODE_SIZE.default.height),\n };\n\n return this.moddle.create(\"bpmndi:BPMNShape\", {\n id: `${element.id}_di`,\n bpmnElement: element,\n bounds: this.moddle.create(\"dc:Bounds\", bounds),\n });\n })\n .filter(Boolean);\n\n const flowById = new Map(edges.map((f) => [String(f.id), f.flow]));\n\n const edgeWaypoints = (layout.edges ?? [])\n .map((edge: any) => {\n if (!edge || !edge.id) return null;\n\n const section = edge.sections?.[0];\n if (!section) return null;\n\n const points = [\n section.startPoint,\n ...(section.bendPoints ?? []),\n section.endPoint,\n ]\n .filter(\n (point) =>\n point &&\n point.x !== undefined &&\n point.y !== undefined &&\n !Number.isNaN(Number(point.x)) &&\n !Number.isNaN(Number(point.y)),\n )\n .map((point: any) => ({\n x: Number(point.x),\n y: Number(point.y),\n }));\n\n if (points.length < 2) return null;\n\n const flow =\n flowById.get(String(edge.id)) ??\n edges.find(\n (f) =>\n String(f.source) === String(edge.sources?.[0]) &&\n String(f.target) === String(edge.targets?.[0]),\n )?.flow;\n\n if (!flow) return null;\n\n return this.moddle.create(\"bpmndi:BPMNEdge\", {\n id: `${edge.id}_di`,\n bpmnElement: flow,\n waypoint: points.map((point) =>\n this.moddle.create(\"dc:Point\", {\n x: point.x,\n y: point.y,\n }),\n ),\n });\n })\n .filter(Boolean);\n\n const plane = this.moddle.create(\"bpmndi:BPMNPlane\", {\n id: \"BPMNPlane_1\",\n bpmnElement: process,\n planeElement: [...shapes, ...edgeWaypoints],\n });\n\n return this.moddle.create(\"bpmndi:BPMNDiagram\", {\n id: \"BPMNDiagram_1\",\n plane,\n });\n }\n}","import { BpmnConverter } from \"./converter/BpmnConverter\";\nimport type { ProcessModel } from \"./types/process\";\n\nexport async function convert(model: ProcessModel): Promise<string> {\n const converter = new BpmnConverter();\n return await converter.convert(model);\n}\n\nexport type { ProcessModel };\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/converter/BpmnConverter.ts","../src/constants/node-map.ts","../src/builders/node.builder.ts","../src/builders/flow.builder.ts","../src/builders/process.builder.ts","../src/builders/definitions.builder.ts","../src/elk.layout.ts","../src/builders/diagram.builder.ts","../src/index.ts"],"sourcesContent":["import { BpmnModdle } from \"bpmn-moddle\";\nimport { NodeBuilder } from \"../builders/node.builder\";\nimport { FlowBuilder } from \"../builders/flow.builder\";\nimport { ProcessBuilder } from \"../builders/process.builder\";\nimport { DefinitionsBuilder } from \"../builders/definitions.builder\";\nimport { DiagramBuilder } from \"../builders/diagram.builder\";\nimport { ProcessModel } from \"../types/process\";\nimport type { BPMNModdle, FlowNode } from \"bpmn-moddle\";\nimport format from \"xml-formatter\";\n\nexport class BpmnConverter {\n private moddle: BPMNModdle;\n private nodeBuilder: NodeBuilder;\n private flowBuilder: FlowBuilder;\n private processBuilder: ProcessBuilder;\n private definitionsBuilder: DefinitionsBuilder;\n private diagramBuilder: DiagramBuilder;\n\n constructor() {\n this.moddle = new BpmnModdle();\n this.nodeBuilder = new NodeBuilder(this.moddle);\n this.flowBuilder = new FlowBuilder(this.moddle);\n this.processBuilder = new ProcessBuilder(this.moddle);\n this.definitionsBuilder = new DefinitionsBuilder(this.moddle);\n this.diagramBuilder = new DiagramBuilder(this.moddle);\n }\n\n async convert(model: ProcessModel): Promise<string> {\n const elements = this.buildElements(model);\n const elementById = this.buildElementMap(elements);\n\n const flows = this.buildFlows(model, elementById);\n const flowMeta = this.buildFlowMeta(model, flows);\n\n const process = this.processBuilder.build(\n model.id,\n model.name,\n elements,\n flows,\n );\n\n const definitions = this.definitionsBuilder.build(process);\n definitions.diagrams = [\n await this.diagramBuilder.build(process, elements, flowMeta),\n ];\n\n const { xml } = await this.moddle.toXML(definitions);\n return this.normalizeXml(xml);\n }\n\n private buildElements(model: ProcessModel) {\n return model.nodes.map((node) => this.nodeBuilder.build(node));\n }\n\n private buildElementMap(elements: any[]) {\n return new Map(\n elements.map((el) => [String(el.id), el] as [string, FlowNode]),\n );\n }\n\n private buildFlows(model: ProcessModel, elementById: Map<string, FlowNode>) {\n return model.edges.map((edge, index) =>\n this.flowBuilder.build(edge, elementById, index),\n );\n }\n\n private buildFlowMeta(model: ProcessModel, flows: any[]) {\n return model.edges.map((edge, index) =>\n this.flowBuilder.buildMeta(edge, flows[index], index),\n );\n }\n\n private normalizeXml(xml: string) {\n return format(xml, {\n indentation: \" \",\n collapseContent: true,\n lineSeparator: \"\\n\",\n });\n }\n}","import { NodeType } from \"../types/Node\";\n\nexport const NODE_MAP: Record<NodeType, string> = {\n start: \"bpmn:StartEvent\",\n end: \"bpmn:EndEvent\",\n userTask: \"bpmn:UserTask\",\n serviceTask: \"bpmn:ServiceTask\",\n exclusiveGateway: \"bpmn:ExclusiveGateway\",\n parallelGateway: \"bpmn:ParallelGateway\",\n};","import type { BPMNModdle as BPMNModdleInstance } from \"bpmn-moddle\";\nimport { NODE_MAP } from \"../constants/node-map\";\nimport { INode } from \"../types/Node\";\n\nexport class NodeBuilder {\n constructor(private moddle: BPMNModdleInstance) {}\n\n build(node: INode) {\n const type = NODE_MAP[node.type];\n\n return this.moddle.create(type, {\n id: node.id,\n name: node.name,\n });\n }\n}\n","import type { BPMNModdle, FlowNode } from \"bpmn-moddle\";\nimport type { IEdge } from \"../types/edge\";\n\nexport interface FlowMeta {\n id: string;\n source: string;\n target: string;\n flow: any;\n}\n\nexport class FlowBuilder {\n constructor(private moddle: BPMNModdle) {}\n\n build(edge: IEdge, elementById: Map<string, FlowNode>, index: number) {\n const source = elementById.get(String(edge.source));\n const target = elementById.get(String(edge.target));\n\n const flow = this.moddle.create(\"bpmn:SequenceFlow\", {\n id: edge.id ?? `Flow_${index + 1}`,\n name: edge.name,\n sourceRef: source,\n targetRef: target,\n });\n\n if (source) {\n source.outgoing = [...(source.outgoing ?? []), flow];\n }\n\n if (target) {\n target.incoming = [...(target.incoming ?? []), flow];\n }\n\n return flow;\n }\n\n buildMeta(edge: IEdge, flow: any, index: number): FlowMeta {\n return {\n id: String(edge.id ?? `Flow_${index + 1}`),\n source: String(edge.source),\n target: String(edge.target),\n flow,\n };\n }\n}","import type { BPMNModdle } from \"bpmn-moddle\";\n\nexport class ProcessBuilder {\n constructor(private moddle: BPMNModdle) {}\n\n build(id: string, name: string | undefined, elements: any[], flows: any[]) {\n return this.moddle.create(\"bpmn:Process\", {\n id,\n name,\n isExecutable: false,\n flowElements: [...elements, ...flows],\n });\n }\n}","import type { BPMNModdle } from \"bpmn-moddle\";\n\nexport class DefinitionsBuilder {\n constructor(private moddle: BPMNModdle) {}\n\n build(process: any) {\n const definitions = this.moddle.create(\"bpmn:Definitions\", {\n id: `${process.id}_definitions`,\n targetNamespace: \"http://www.omg.org/spec/BPMN/20100524/MODEL\",\n rootElements: [process],\n });\n\n definitions.$attrs![\"xsi:schemaLocation\"] =\n \"http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd\";\n\n return definitions;\n }\n}\n","import ELK from \"elkjs\";\n\nconst elk = new ELK();\n\nexport async function layoutGraph(nodes: any[], edges: any[]) {\n const graph = {\n id: \"root\",\n\n layoutOptions: {\n \"elk.algorithm\": \"layered\",\n \"elk.direction\": \"RIGHT\",\n\n \"elk.layered.spacing.nodeNodeBetweenLayers\": \"120\",\n \"elk.spacing.nodeNode\": \"80\",\n\n \"elk.layered.nodePlacement.strategy\": \"NETWORK_SIMPLEX\",\n \"elk.layered.crossingMinimization.strategy\": \"LAYER_SWEEP\",\n \"elk.layered.considerModelOrder.strategy\": \"NODES_AND_EDGES\",\n },\n\n children: nodes.map((n) => ({\n id: n.id,\n width: n.width ?? 120,\n height: n.height ?? 80,\n })),\n\n edges: edges.map((e) => ({\n id: e.id,\n sources: [e.source],\n targets: [e.target],\n\n junctionPoints: [],\n })),\n };\n\n return await elk.layout(graph);\n}","import type { BPMNModdle } from \"bpmn-moddle\";\nimport { layoutGraph } from \"../elk.layout\";\nimport type { FlowMeta } from \"./flow.builder\";\n\nconst NODE_SIZE = {\n default: { width: 100, height: 80 },\n start: { width: 36, height: 36 },\n end: { width: 36, height: 36 },\n gateway: { width: 50, height: 50 },\n};\n\nfunction getBounds(type: string) {\n if (type === \"bpmn:StartEvent\" || type === \"bpmn:EndEvent\") {\n return NODE_SIZE.start;\n }\n\n if (type.endsWith(\"Gateway\")) {\n return NODE_SIZE.gateway;\n }\n\n return NODE_SIZE.default;\n}\n\nexport class DiagramBuilder {\n constructor(private moddle: BPMNModdle) {}\n\n async build(process: any, elements: any[], flows: FlowMeta[]) {\n const nodes = elements.map((el) => {\n const bounds = getBounds(el.$type);\n\n return {\n id: String(el.id),\n width: bounds.width,\n height: bounds.height,\n bpmnElement: el,\n };\n });\n\n const edges = flows.map((flow) => ({\n id: String(flow.id),\n source: String(flow.source),\n target: String(flow.target),\n flow: flow.flow,\n }));\n\n const layout = await layoutGraph(nodes, edges);\n\n const nodeMap = new Map(\n (layout.children ?? [])\n .filter((n: any) => n && n.id)\n .map((n: any) => [String(n.id), n]),\n );\n\n const shapes = elements\n .map((element) => {\n const pos = nodeMap.get(String(element.id));\n if (!pos) return null;\n\n const bounds = {\n x: Number(pos.x ?? 0),\n y: Number(pos.y ?? 0),\n width: Number(pos.width ?? NODE_SIZE.default.width),\n height: Number(pos.height ?? NODE_SIZE.default.height),\n };\n\n return this.moddle.create(\"bpmndi:BPMNShape\", {\n id: `${element.id}_di`,\n bpmnElement: element,\n bounds: this.moddle.create(\"dc:Bounds\", bounds),\n });\n })\n .filter(Boolean);\n\n const flowById = new Map(edges.map((f) => [String(f.id), f.flow]));\n\n const edgeWaypoints = (layout.edges ?? [])\n .map((edge: any) => {\n if (!edge || !edge.id) return null;\n\n const section = edge.sections?.[0];\n if (!section) return null;\n\n const points = [\n section.startPoint,\n ...(section.bendPoints ?? []),\n section.endPoint,\n ]\n .filter(\n (point) =>\n point &&\n point.x !== undefined &&\n point.y !== undefined &&\n !Number.isNaN(Number(point.x)) &&\n !Number.isNaN(Number(point.y)),\n )\n .map((point: any) => ({\n x: Number(point.x),\n y: Number(point.y),\n }));\n\n if (points.length < 2) return null;\n\n const flow =\n flowById.get(String(edge.id)) ??\n edges.find(\n (f) =>\n String(f.source) === String(edge.sources?.[0]) &&\n String(f.target) === String(edge.targets?.[0]),\n )?.flow;\n\n if (!flow) return null;\n\n return this.moddle.create(\"bpmndi:BPMNEdge\", {\n id: `${edge.id}_di`,\n bpmnElement: flow,\n waypoint: points.map((point) =>\n this.moddle.create(\"dc:Point\", {\n x: point.x,\n y: point.y,\n }),\n ),\n });\n })\n .filter(Boolean);\n\n const plane = this.moddle.create(\"bpmndi:BPMNPlane\", {\n id: \"BPMNPlane_1\",\n bpmnElement: process,\n planeElement: [...shapes, ...edgeWaypoints],\n });\n\n return this.moddle.create(\"bpmndi:BPMNDiagram\", {\n id: \"BPMNDiagram_1\",\n plane,\n });\n }\n}","import { BpmnConverter } from \"./converter/BpmnConverter\";\nimport type { ProcessModel } from \"./types/process\";\n\nexport async function convert(model: ProcessModel): Promise<string> {\n const converter = new BpmnConverter();\n return await converter.convert(model);\n}\n\nexport type { ProcessModel };\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "json-to-bpmn-xml",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "description": "JSON to BPMN XML converter",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -30,6 +30,7 @@
30
30
  "bpmn-moddle": "^10.0.0",
31
31
  "dagre": "^0.8.5",
32
32
  "elkjs": "^0.11.1",
33
+ "json-to-bpmn-xml": "^1.0.1",
33
34
  "xml-formatter": "^3.7.0"
34
35
  },
35
36
  "devDependencies": {
@@ -39,4 +40,4 @@
39
40
  "typescript": "^6.0.3",
40
41
  "vitest": "^4.1.9"
41
42
  }
42
- }
43
+ }