json-to-bpmn-xml 1.0.1 → 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
@@ -41,7 +53,7 @@ const xml = await convert(model);
41
53
 
42
54
  ```xml
43
55
  <?xml version="1.0" encoding="UTF-8"?>
44
- <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" id="process_1_definitions" targetNamespace="http://bpmn.io/schema/bpmn" $attrs="[object Object]">
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">
45
57
  <bpmn:process id="process_1" name="Simple Process" isExecutable="false">
46
58
  <bpmn:startEvent id="start">
47
59
  <bpmn:outgoing>e1</bpmn:outgoing>
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.1",
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,7 +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.0",
33
+ "json-to-bpmn-xml": "^1.0.1",
34
34
  "xml-formatter": "^3.7.0"
35
35
  },
36
36
  "devDependencies": {