@logicflow/extension 1.2.26 → 2.0.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (615) hide show
  1. package/.turbo/turbo-build.log +734 -0
  2. package/CHANGELOG.md +1916 -0
  3. package/LICENSE +206 -0
  4. package/README.md +1 -2
  5. package/__test__/bpmn-adapter.test.js +227 -0
  6. package/dist/index.css +215 -0
  7. package/dist/index.js +26 -0
  8. package/dist/index.js.map +1 -0
  9. package/es/NodeResize/BasicShape/Ellipse.d.ts +3 -0
  10. package/es/NodeResize/BasicShape/Ellipse.js +19 -0
  11. package/es/NodeResize/BasicShape/Ellipse.js.map +1 -0
  12. package/es/NodeResize/BasicShape/Polygon.d.ts +1 -9
  13. package/es/NodeResize/BasicShape/Polygon.js +3 -2
  14. package/es/NodeResize/BasicShape/Polygon.js.map +1 -0
  15. package/es/NodeResize/BasicShape/Rect.d.ts +6 -4
  16. package/es/NodeResize/BasicShape/Rect.js +5 -5
  17. package/es/NodeResize/BasicShape/Rect.js.map +1 -0
  18. package/es/NodeResize/control/Control.d.ts +47 -0
  19. package/es/NodeResize/{Control → control}/Control.js +139 -67
  20. package/es/NodeResize/control/Control.js.map +1 -0
  21. package/es/NodeResize/{Control → control}/ControlGroup.d.ts +3 -4
  22. package/es/NodeResize/{Control → control}/ControlGroup.js +9 -8
  23. package/es/NodeResize/control/ControlGroup.js.map +1 -0
  24. package/es/NodeResize/{Control → control}/Util.js +18 -9
  25. package/es/NodeResize/control/Util.js.map +1 -0
  26. package/es/NodeResize/index.d.ts +4 -7
  27. package/es/NodeResize/index.js +11 -26
  28. package/es/NodeResize/index.js.map +1 -0
  29. package/es/NodeResize/node/DiamondResize.d.ts +44 -0
  30. package/es/NodeResize/{Node → node}/DiamondResize.js +28 -16
  31. package/es/NodeResize/node/DiamondResize.js.map +1 -0
  32. package/es/NodeResize/node/EllipseResize.d.ts +44 -0
  33. package/es/NodeResize/{Node → node}/EllipseResize.js +26 -12
  34. package/es/NodeResize/node/EllipseResize.js.map +1 -0
  35. package/es/NodeResize/node/HtmlResize.d.ts +35 -0
  36. package/es/NodeResize/{Node → node}/HtmlResize.js +26 -12
  37. package/es/NodeResize/node/HtmlResize.js.map +1 -0
  38. package/es/NodeResize/node/RectResize.d.ts +58 -0
  39. package/es/NodeResize/{Node → node}/RectResize.js +27 -16
  40. package/es/NodeResize/node/RectResize.js.map +1 -0
  41. package/es/NodeResize/node/index.d.ts +4 -0
  42. package/es/NodeResize/node/index.js +5 -0
  43. package/es/NodeResize/node/index.js.map +1 -0
  44. package/es/bpmn/constant.d.ts +2 -26
  45. package/es/bpmn/constant.js +1 -0
  46. package/es/bpmn/constant.js.map +1 -0
  47. package/es/bpmn/events/EndEvent.d.ts +6 -7
  48. package/es/bpmn/events/EndEvent.js +10 -8
  49. package/es/bpmn/events/EndEvent.js.map +1 -0
  50. package/es/bpmn/events/StartEvent.d.ts +2 -2
  51. package/es/bpmn/events/StartEvent.js +7 -6
  52. package/es/bpmn/events/StartEvent.js.map +1 -0
  53. package/es/bpmn/events/index.d.ts +2 -0
  54. package/es/bpmn/events/index.js +3 -0
  55. package/es/bpmn/events/index.js.map +1 -0
  56. package/es/bpmn/flow/SequenceFlow.d.ts +3 -4
  57. package/es/bpmn/flow/SequenceFlow.js +9 -7
  58. package/es/bpmn/flow/SequenceFlow.js.map +1 -0
  59. package/es/bpmn/flow/index.d.ts +1 -0
  60. package/es/bpmn/flow/index.js +2 -0
  61. package/es/bpmn/flow/index.js.map +1 -0
  62. package/es/bpmn/gateways/ExclusiveGateway.d.ts +7 -7
  63. package/es/bpmn/gateways/ExclusiveGateway.js +14 -10
  64. package/es/bpmn/gateways/ExclusiveGateway.js.map +1 -0
  65. package/es/bpmn/gateways/index.d.ts +1 -0
  66. package/es/bpmn/gateways/index.js +2 -0
  67. package/es/bpmn/gateways/index.js.map +1 -0
  68. package/es/bpmn/getBpmnId.js +2 -3
  69. package/es/bpmn/getBpmnId.js.map +1 -0
  70. package/es/bpmn/index.d.ts +4 -6
  71. package/es/bpmn/index.js +5 -8
  72. package/es/bpmn/index.js.map +1 -0
  73. package/es/bpmn/tasks/ServiceTask.d.ts +6 -7
  74. package/es/bpmn/tasks/ServiceTask.js +10 -9
  75. package/es/bpmn/tasks/ServiceTask.js.map +1 -0
  76. package/es/bpmn/tasks/UserTask.d.ts +6 -7
  77. package/es/bpmn/tasks/UserTask.js +10 -9
  78. package/es/bpmn/tasks/UserTask.js.map +1 -0
  79. package/es/bpmn/tasks/index.d.ts +2 -0
  80. package/es/bpmn/tasks/index.js +3 -0
  81. package/es/bpmn/tasks/index.js.map +1 -0
  82. package/es/bpmn-adapter/bpmnIds.d.ts +6 -0
  83. package/es/bpmn-adapter/bpmnIds.js +9 -9
  84. package/es/bpmn-adapter/bpmnIds.js.map +1 -0
  85. package/es/bpmn-adapter/index.d.ts +44 -7
  86. package/es/bpmn-adapter/index.js +27 -16
  87. package/es/bpmn-adapter/index.js.map +1 -0
  88. package/es/bpmn-adapter/json2xml.js +22 -22
  89. package/es/bpmn-adapter/json2xml.js.map +1 -0
  90. package/es/bpmn-adapter/xml2json.js +1 -0
  91. package/es/bpmn-adapter/xml2json.js.map +1 -0
  92. package/es/bpmn-elements/index.js +2 -3
  93. package/es/bpmn-elements/index.js.map +1 -0
  94. package/es/bpmn-elements/presets/Event/EndEventFactory.js +25 -17
  95. package/es/bpmn-elements/presets/Event/EndEventFactory.js.map +1 -0
  96. package/es/bpmn-elements/presets/Event/IntermediateCatchEvent.js +23 -13
  97. package/es/bpmn-elements/presets/Event/IntermediateCatchEvent.js.map +1 -0
  98. package/es/bpmn-elements/presets/Event/IntermediateThrowEvent.js +23 -14
  99. package/es/bpmn-elements/presets/Event/IntermediateThrowEvent.js.map +1 -0
  100. package/es/bpmn-elements/presets/Event/StartEventFactory.js +23 -15
  101. package/es/bpmn-elements/presets/Event/StartEventFactory.js.map +1 -0
  102. package/es/bpmn-elements/presets/Event/boundaryEventFactory.js +22 -12
  103. package/es/bpmn-elements/presets/Event/boundaryEventFactory.js.map +1 -0
  104. package/es/bpmn-elements/presets/Event/index.js +1 -0
  105. package/es/bpmn-elements/presets/Event/index.js.map +1 -0
  106. package/es/bpmn-elements/presets/Flow/index.js +1 -0
  107. package/es/bpmn-elements/presets/Flow/index.js.map +1 -0
  108. package/es/bpmn-elements/presets/Flow/manhattan.d.ts +39 -0
  109. package/es/bpmn-elements/presets/Flow/manhattan.js +636 -0
  110. package/es/bpmn-elements/presets/Flow/manhattan.js.map +1 -0
  111. package/es/bpmn-elements/presets/Flow/sequenceFlow.js +7 -7
  112. package/es/bpmn-elements/presets/Flow/sequenceFlow.js.map +1 -0
  113. package/es/bpmn-elements/presets/Gateway/gateway.d.ts +5 -0
  114. package/es/bpmn-elements/presets/Gateway/gateway.js +10 -11
  115. package/es/bpmn-elements/presets/Gateway/gateway.js.map +1 -0
  116. package/es/bpmn-elements/presets/Gateway/index.js +1 -0
  117. package/es/bpmn-elements/presets/Gateway/index.js.map +1 -0
  118. package/es/bpmn-elements/presets/Pool/Lane.d.ts +31 -0
  119. package/es/bpmn-elements/presets/Pool/Lane.js +217 -0
  120. package/es/bpmn-elements/presets/Pool/Lane.js.map +1 -0
  121. package/es/bpmn-elements/presets/Pool/Pool.d.ts +32 -0
  122. package/es/bpmn-elements/presets/Pool/Pool.js +298 -0
  123. package/es/bpmn-elements/presets/Pool/Pool.js.map +1 -0
  124. package/es/bpmn-elements/presets/Pool/index.d.ts +4 -0
  125. package/es/bpmn-elements/presets/Pool/index.js +86 -0
  126. package/es/bpmn-elements/presets/Pool/index.js.map +1 -0
  127. package/es/bpmn-elements/presets/Task/index.js +12 -3
  128. package/es/bpmn-elements/presets/Task/index.js.map +1 -0
  129. package/es/bpmn-elements/presets/Task/subProcess.js +22 -16
  130. package/es/bpmn-elements/presets/Task/subProcess.js.map +1 -0
  131. package/es/bpmn-elements/presets/Task/task.js +28 -21
  132. package/es/bpmn-elements/presets/Task/task.js.map +1 -0
  133. package/es/bpmn-elements/presets/icons.d.ts +4 -3
  134. package/es/bpmn-elements/presets/icons.js +1 -0
  135. package/es/bpmn-elements/presets/icons.js.map +1 -0
  136. package/es/bpmn-elements/utils.d.ts +1 -1
  137. package/es/bpmn-elements/utils.js +8 -7
  138. package/es/bpmn-elements/utils.js.map +1 -0
  139. package/es/bpmn-elements-adapter/constant.js +1 -0
  140. package/es/bpmn-elements-adapter/constant.js.map +1 -0
  141. package/es/bpmn-elements-adapter/index.d.ts +6 -6
  142. package/es/bpmn-elements-adapter/index.js +52 -39
  143. package/es/bpmn-elements-adapter/index.js.map +1 -0
  144. package/es/bpmn-elements-adapter/json2xml.js +8 -7
  145. package/es/bpmn-elements-adapter/json2xml.js.map +1 -0
  146. package/es/bpmn-elements-adapter/xml2json.js +13 -11
  147. package/es/bpmn-elements-adapter/xml2json.js.map +1 -0
  148. package/es/components/context-menu/index.d.ts +9 -3
  149. package/es/components/context-menu/index.js +85 -70
  150. package/es/components/context-menu/index.js.map +1 -0
  151. package/es/components/control/index.d.ts +13 -15
  152. package/es/components/control/index.js +20 -10
  153. package/es/components/control/index.js.map +1 -0
  154. package/es/components/dnd-panel/index.d.ts +10 -9
  155. package/es/components/dnd-panel/index.js +15 -7
  156. package/es/components/dnd-panel/index.js.map +1 -0
  157. package/es/components/highlight/index.d.ts +4 -4
  158. package/es/components/highlight/index.js +23 -17
  159. package/es/components/highlight/index.js.map +1 -0
  160. package/es/components/menu/index.d.ts +7 -7
  161. package/es/components/menu/index.js +195 -155
  162. package/es/components/menu/index.js.map +1 -0
  163. package/es/components/mini-map/index.d.ts +196 -48
  164. package/es/components/mini-map/index.js +372 -290
  165. package/es/components/mini-map/index.js.map +1 -0
  166. package/es/components/selection-select/index.d.ts +17 -26
  167. package/es/components/selection-select/index.js +76 -64
  168. package/es/components/selection-select/index.js.map +1 -0
  169. package/es/index.css +215 -0
  170. package/es/index.js +1 -1
  171. package/es/index.js.map +1 -0
  172. package/es/index.less +1 -0
  173. package/es/insert-node-in-polyline/edge.d.ts +3 -2
  174. package/es/insert-node-in-polyline/edge.js +20 -8
  175. package/es/insert-node-in-polyline/edge.js.map +1 -0
  176. package/es/insert-node-in-polyline/index.d.ts +7 -7
  177. package/es/insert-node-in-polyline/index.js +18 -10
  178. package/es/insert-node-in-polyline/index.js.map +1 -0
  179. package/es/materials/curved-edge/__test__/curved-edge.test.d.ts +1 -0
  180. package/es/materials/curved-edge/__test__/curved-edge.test.js +19 -0
  181. package/es/materials/curved-edge/__test__/curved-edge.test.js.map +1 -0
  182. package/es/materials/curved-edge/index.d.ts +2 -2
  183. package/es/materials/curved-edge/index.js +12 -9
  184. package/es/materials/curved-edge/index.js.map +1 -0
  185. package/es/materials/group/GroupNode.d.ts +22 -20
  186. package/es/materials/group/GroupNode.js +90 -58
  187. package/es/materials/group/GroupNode.js.map +1 -0
  188. package/es/materials/group/index.d.ts +28 -30
  189. package/es/materials/group/index.js +153 -112
  190. package/es/materials/group/index.js.map +1 -0
  191. package/es/materials/node-selection/index.d.ts +28 -0
  192. package/es/materials/node-selection/index.js +297 -0
  193. package/es/materials/node-selection/index.js.map +1 -0
  194. package/es/mindmap/fakerRoot.d.ts +13 -0
  195. package/es/mindmap/fakerRoot.js +41 -0
  196. package/es/mindmap/fakerRoot.js.map +1 -0
  197. package/es/mindmap/index.d.ts +41 -0
  198. package/es/mindmap/index.js +314 -0
  199. package/es/mindmap/index.js.map +1 -0
  200. package/es/mindmap/markContent.d.ts +17 -0
  201. package/es/mindmap/markContent.js +91 -0
  202. package/es/mindmap/markContent.js.map +1 -0
  203. package/es/mindmap/markContentOption.d.ts +17 -0
  204. package/es/mindmap/markContentOption.js +92 -0
  205. package/es/mindmap/markContentOption.js.map +1 -0
  206. package/es/mindmap/markEntity.d.ts +17 -0
  207. package/es/mindmap/markEntity.js +92 -0
  208. package/es/mindmap/markEntity.js.map +1 -0
  209. package/es/mindmap/markRoot.d.ts +17 -0
  210. package/es/mindmap/markRoot.js +93 -0
  211. package/es/mindmap/markRoot.js.map +1 -0
  212. package/es/mindmap/theme.d.ts +10 -0
  213. package/es/mindmap/theme.js +12 -0
  214. package/es/mindmap/theme.js.map +1 -0
  215. package/es/rect-label-node/RectLabelNodeView.d.ts +5 -0
  216. package/es/rect-label-node/RectLabelNodeView.js +54 -0
  217. package/es/rect-label-node/RectLabelNodeView.js.map +1 -0
  218. package/es/rect-label-node/index.d.ts +5 -0
  219. package/es/rect-label-node/index.js +14 -0
  220. package/es/rect-label-node/index.js.map +1 -0
  221. package/es/style/index.css +53 -60
  222. package/es/style/index.less +255 -0
  223. package/es/style/raw.d.ts +4 -0
  224. package/es/style/raw.js +6 -0
  225. package/es/style/raw.js.map +1 -0
  226. package/es/tools/auto-layout/index.js +8 -4
  227. package/es/tools/auto-layout/index.js.map +1 -0
  228. package/es/tools/flow-path/index.d.ts +8 -8
  229. package/es/tools/flow-path/index.js +51 -36
  230. package/es/tools/flow-path/index.js.map +1 -0
  231. package/es/tools/snapshot/index.d.ts +4 -5
  232. package/es/tools/snapshot/index.js +41 -29
  233. package/es/tools/snapshot/index.js.map +1 -0
  234. package/es/turbo-adapter/index.d.ts +4 -14
  235. package/es/turbo-adapter/index.js +17 -14
  236. package/es/turbo-adapter/index.js.map +1 -0
  237. package/jest.config.js +198 -0
  238. package/lib/NodeResize/BasicShape/Ellipse.d.ts +3 -0
  239. package/lib/NodeResize/BasicShape/Ellipse.js +21 -0
  240. package/lib/NodeResize/BasicShape/Ellipse.js.map +1 -0
  241. package/lib/NodeResize/BasicShape/Polygon.d.ts +2 -0
  242. package/{cjs → lib}/NodeResize/BasicShape/Polygon.js +3 -2
  243. package/lib/NodeResize/BasicShape/Polygon.js.map +1 -0
  244. package/lib/NodeResize/BasicShape/Rect.d.ts +19 -0
  245. package/{cjs → lib}/NodeResize/BasicShape/Rect.js +5 -5
  246. package/lib/NodeResize/BasicShape/Rect.js.map +1 -0
  247. package/lib/NodeResize/control/Control.d.ts +47 -0
  248. package/{cjs/NodeResize/Control → lib/NodeResize/control}/Control.js +141 -69
  249. package/lib/NodeResize/control/Control.js.map +1 -0
  250. package/lib/NodeResize/control/ControlGroup.d.ts +12 -0
  251. package/{cjs/NodeResize/Control → lib/NodeResize/control}/ControlGroup.js +14 -10
  252. package/lib/NodeResize/control/ControlGroup.js.map +1 -0
  253. package/lib/NodeResize/control/Util.d.ts +33 -0
  254. package/{cjs/NodeResize/Control → lib/NodeResize/control}/Util.js +19 -10
  255. package/lib/NodeResize/control/Util.js.map +1 -0
  256. package/lib/NodeResize/index.d.ts +8 -0
  257. package/lib/NodeResize/index.js +38 -0
  258. package/lib/NodeResize/index.js.map +1 -0
  259. package/lib/NodeResize/node/DiamondResize.d.ts +44 -0
  260. package/{cjs/NodeResize/Node → lib/NodeResize/node}/DiamondResize.js +31 -15
  261. package/lib/NodeResize/node/DiamondResize.js.map +1 -0
  262. package/lib/NodeResize/node/EllipseResize.d.ts +44 -0
  263. package/{cjs/NodeResize/Node → lib/NodeResize/node}/EllipseResize.js +30 -12
  264. package/lib/NodeResize/node/EllipseResize.js.map +1 -0
  265. package/lib/NodeResize/node/HtmlResize.d.ts +35 -0
  266. package/{cjs/NodeResize/Node → lib/NodeResize/node}/HtmlResize.js +30 -12
  267. package/lib/NodeResize/node/HtmlResize.js.map +1 -0
  268. package/lib/NodeResize/node/RectResize.d.ts +58 -0
  269. package/{cjs/NodeResize/Node → lib/NodeResize/node}/RectResize.js +31 -16
  270. package/lib/NodeResize/node/RectResize.js.map +1 -0
  271. package/lib/NodeResize/node/index.d.ts +4 -0
  272. package/lib/NodeResize/node/index.js +21 -0
  273. package/lib/NodeResize/node/index.js.map +1 -0
  274. package/lib/bpmn/constant.d.ts +22 -0
  275. package/{cjs → lib}/bpmn/constant.js +1 -0
  276. package/lib/bpmn/constant.js.map +1 -0
  277. package/lib/bpmn/events/EndEvent.d.ts +20 -0
  278. package/{cjs → lib}/bpmn/events/EndEvent.js +11 -10
  279. package/lib/bpmn/events/EndEvent.js.map +1 -0
  280. package/lib/bpmn/events/StartEvent.d.ts +17 -0
  281. package/{cjs → lib}/bpmn/events/StartEvent.js +9 -8
  282. package/lib/bpmn/events/StartEvent.js.map +1 -0
  283. package/lib/bpmn/events/index.d.ts +2 -0
  284. package/lib/bpmn/events/index.js +19 -0
  285. package/lib/bpmn/events/index.js.map +1 -0
  286. package/lib/bpmn/flow/SequenceFlow.d.ts +14 -0
  287. package/{cjs → lib}/bpmn/flow/SequenceFlow.js +9 -8
  288. package/lib/bpmn/flow/SequenceFlow.js.map +1 -0
  289. package/lib/bpmn/flow/index.d.ts +1 -0
  290. package/lib/bpmn/flow/index.js +18 -0
  291. package/lib/bpmn/flow/index.js.map +1 -0
  292. package/lib/bpmn/gateways/ExclusiveGateway.d.ts +16 -0
  293. package/{cjs → lib}/bpmn/gateways/ExclusiveGateway.js +14 -11
  294. package/lib/bpmn/gateways/ExclusiveGateway.js.map +1 -0
  295. package/lib/bpmn/gateways/index.d.ts +1 -0
  296. package/lib/bpmn/gateways/index.js +18 -0
  297. package/lib/bpmn/gateways/index.js.map +1 -0
  298. package/lib/bpmn/getBpmnId.d.ts +1 -0
  299. package/{cjs → lib}/bpmn/getBpmnId.js +2 -3
  300. package/lib/bpmn/getBpmnId.js.map +1 -0
  301. package/lib/bpmn/index.d.ts +11 -0
  302. package/{cjs → lib}/bpmn/index.js +23 -26
  303. package/lib/bpmn/index.js.map +1 -0
  304. package/lib/bpmn/tasks/ServiceTask.d.ts +16 -0
  305. package/{cjs → lib}/bpmn/tasks/ServiceTask.js +13 -13
  306. package/lib/bpmn/tasks/ServiceTask.js.map +1 -0
  307. package/lib/bpmn/tasks/UserTask.d.ts +16 -0
  308. package/{cjs → lib}/bpmn/tasks/UserTask.js +13 -13
  309. package/lib/bpmn/tasks/UserTask.js.map +1 -0
  310. package/lib/bpmn/tasks/index.d.ts +2 -0
  311. package/lib/bpmn/tasks/index.js +19 -0
  312. package/lib/bpmn/tasks/index.js.map +1 -0
  313. package/lib/bpmn-adapter/bpmnIds.d.ts +7 -0
  314. package/{cjs → lib}/bpmn-adapter/bpmnIds.js +10 -10
  315. package/lib/bpmn-adapter/bpmnIds.js.map +1 -0
  316. package/lib/bpmn-adapter/index.d.ts +100 -0
  317. package/{cjs → lib}/bpmn-adapter/index.js +30 -19
  318. package/lib/bpmn-adapter/index.js.map +1 -0
  319. package/lib/bpmn-adapter/json2xml.d.ts +3 -0
  320. package/{cjs → lib}/bpmn-adapter/json2xml.js +22 -22
  321. package/lib/bpmn-adapter/json2xml.js.map +1 -0
  322. package/lib/bpmn-adapter/xml2json.d.ts +2 -0
  323. package/{cjs → lib}/bpmn-adapter/xml2json.js +1 -0
  324. package/lib/bpmn-adapter/xml2json.js.map +1 -0
  325. package/lib/bpmn-elements/index.d.ts +17 -0
  326. package/{cjs → lib}/bpmn-elements/index.js +26 -11
  327. package/lib/bpmn-elements/index.js.map +1 -0
  328. package/lib/bpmn-elements/presets/Event/EndEventFactory.d.ts +5 -0
  329. package/{cjs → lib}/bpmn-elements/presets/Event/EndEventFactory.js +25 -17
  330. package/lib/bpmn-elements/presets/Event/EndEventFactory.js.map +1 -0
  331. package/lib/bpmn-elements/presets/Event/IntermediateCatchEvent.d.ts +5 -0
  332. package/{cjs → lib}/bpmn-elements/presets/Event/IntermediateCatchEvent.js +23 -13
  333. package/lib/bpmn-elements/presets/Event/IntermediateCatchEvent.js.map +1 -0
  334. package/lib/bpmn-elements/presets/Event/IntermediateThrowEvent.d.ts +5 -0
  335. package/{cjs → lib}/bpmn-elements/presets/Event/IntermediateThrowEvent.js +23 -14
  336. package/lib/bpmn-elements/presets/Event/IntermediateThrowEvent.js.map +1 -0
  337. package/lib/bpmn-elements/presets/Event/StartEventFactory.d.ts +5 -0
  338. package/{cjs → lib}/bpmn-elements/presets/Event/StartEventFactory.js +23 -15
  339. package/lib/bpmn-elements/presets/Event/StartEventFactory.js.map +1 -0
  340. package/lib/bpmn-elements/presets/Event/boundaryEventFactory.d.ts +5 -0
  341. package/{cjs → lib}/bpmn-elements/presets/Event/boundaryEventFactory.js +23 -13
  342. package/lib/bpmn-elements/presets/Event/boundaryEventFactory.js.map +1 -0
  343. package/lib/bpmn-elements/presets/Event/index.d.ts +2 -0
  344. package/{cjs → lib}/bpmn-elements/presets/Event/index.js +6 -5
  345. package/lib/bpmn-elements/presets/Event/index.js.map +1 -0
  346. package/lib/bpmn-elements/presets/Flow/index.d.ts +7 -0
  347. package/{cjs → lib}/bpmn-elements/presets/Flow/index.js +2 -1
  348. package/lib/bpmn-elements/presets/Flow/index.js.map +1 -0
  349. package/lib/bpmn-elements/presets/Flow/manhattan.d.ts +39 -0
  350. package/lib/bpmn-elements/presets/Flow/manhattan.js +641 -0
  351. package/lib/bpmn-elements/presets/Flow/manhattan.js.map +1 -0
  352. package/lib/bpmn-elements/presets/Flow/sequenceFlow.d.ts +5 -0
  353. package/{cjs → lib}/bpmn-elements/presets/Flow/sequenceFlow.js +8 -8
  354. package/lib/bpmn-elements/presets/Flow/sequenceFlow.js.map +1 -0
  355. package/lib/bpmn-elements/presets/Gateway/gateway.d.ts +22 -0
  356. package/{cjs → lib}/bpmn-elements/presets/Gateway/gateway.js +12 -13
  357. package/lib/bpmn-elements/presets/Gateway/gateway.js.map +1 -0
  358. package/lib/bpmn-elements/presets/Gateway/index.d.ts +2 -0
  359. package/{cjs → lib}/bpmn-elements/presets/Gateway/index.js +4 -3
  360. package/lib/bpmn-elements/presets/Gateway/index.js.map +1 -0
  361. package/lib/bpmn-elements/presets/Pool/Lane.d.ts +31 -0
  362. package/lib/bpmn-elements/presets/Pool/Lane.js +219 -0
  363. package/lib/bpmn-elements/presets/Pool/Lane.js.map +1 -0
  364. package/lib/bpmn-elements/presets/Pool/Pool.d.ts +32 -0
  365. package/lib/bpmn-elements/presets/Pool/Pool.js +301 -0
  366. package/lib/bpmn-elements/presets/Pool/Pool.js.map +1 -0
  367. package/lib/bpmn-elements/presets/Pool/index.d.ts +4 -0
  368. package/lib/bpmn-elements/presets/Pool/index.js +95 -0
  369. package/lib/bpmn-elements/presets/Pool/index.js.map +1 -0
  370. package/lib/bpmn-elements/presets/Task/index.d.ts +2 -0
  371. package/{cjs → lib}/bpmn-elements/presets/Task/index.js +15 -6
  372. package/lib/bpmn-elements/presets/Task/index.js.map +1 -0
  373. package/lib/bpmn-elements/presets/Task/subProcess.d.ts +5 -0
  374. package/{cjs → lib}/bpmn-elements/presets/Task/subProcess.js +27 -21
  375. package/lib/bpmn-elements/presets/Task/subProcess.js.map +1 -0
  376. package/lib/bpmn-elements/presets/Task/task.d.ts +12 -0
  377. package/{cjs → lib}/bpmn-elements/presets/Task/task.js +31 -24
  378. package/lib/bpmn-elements/presets/Task/task.js.map +1 -0
  379. package/lib/bpmn-elements/presets/icons.d.ts +26 -0
  380. package/{cjs → lib}/bpmn-elements/presets/icons.js +17 -16
  381. package/lib/bpmn-elements/presets/icons.js.map +1 -0
  382. package/lib/bpmn-elements/utils.d.ts +2 -0
  383. package/{cjs → lib}/bpmn-elements/utils.js +8 -7
  384. package/lib/bpmn-elements/utils.js.map +1 -0
  385. package/lib/bpmn-elements-adapter/constant.d.ts +66 -0
  386. package/{cjs → lib}/bpmn-elements-adapter/constant.js +1 -0
  387. package/lib/bpmn-elements-adapter/constant.js.map +1 -0
  388. package/lib/bpmn-elements-adapter/index.d.ts +103 -0
  389. package/{cjs → lib}/bpmn-elements-adapter/index.js +59 -43
  390. package/lib/bpmn-elements-adapter/index.js.map +1 -0
  391. package/lib/bpmn-elements-adapter/json2xml.d.ts +3 -0
  392. package/{cjs → lib}/bpmn-elements-adapter/json2xml.js +8 -7
  393. package/lib/bpmn-elements-adapter/json2xml.js.map +1 -0
  394. package/lib/bpmn-elements-adapter/xml2json.d.ts +2 -0
  395. package/{cjs → lib}/bpmn-elements-adapter/xml2json.js +13 -11
  396. package/lib/bpmn-elements-adapter/xml2json.js.map +1 -0
  397. package/lib/components/context-menu/index.d.ts +40 -0
  398. package/{cjs → lib}/components/context-menu/index.js +84 -69
  399. package/lib/components/context-menu/index.js.map +1 -0
  400. package/lib/components/control/index.d.ts +24 -0
  401. package/{cjs → lib}/components/control/index.js +19 -9
  402. package/lib/components/control/index.js.map +1 -0
  403. package/lib/components/dnd-panel/index.d.ts +27 -0
  404. package/{cjs → lib}/components/dnd-panel/index.js +14 -6
  405. package/lib/components/dnd-panel/index.js.map +1 -0
  406. package/lib/components/highlight/index.d.ts +21 -0
  407. package/{cjs → lib}/components/highlight/index.js +23 -17
  408. package/lib/components/highlight/index.js.map +1 -0
  409. package/lib/components/menu/index.d.ts +50 -0
  410. package/lib/components/menu/index.js +417 -0
  411. package/lib/components/menu/index.js.map +1 -0
  412. package/lib/components/mini-map/index.d.ts +236 -0
  413. package/lib/components/mini-map/index.js +519 -0
  414. package/lib/components/mini-map/index.js.map +1 -0
  415. package/lib/components/selection-select/index.d.ts +34 -0
  416. package/{cjs → lib}/components/selection-select/index.js +76 -64
  417. package/lib/components/selection-select/index.js.map +1 -0
  418. package/lib/index.css +215 -0
  419. package/lib/index.d.ts +21 -0
  420. package/{cjs → lib}/index.js +7 -3
  421. package/lib/index.js.map +1 -0
  422. package/lib/index.less +1 -0
  423. package/lib/insert-node-in-polyline/edge.d.ts +32 -0
  424. package/{cjs → lib}/insert-node-in-polyline/edge.js +31 -14
  425. package/lib/insert-node-in-polyline/edge.js.map +1 -0
  426. package/lib/insert-node-in-polyline/index.d.ts +28 -0
  427. package/{cjs → lib}/insert-node-in-polyline/index.js +24 -16
  428. package/lib/insert-node-in-polyline/index.js.map +1 -0
  429. package/lib/materials/curved-edge/__test__/curved-edge.test.d.ts +1 -0
  430. package/lib/materials/curved-edge/__test__/curved-edge.test.js +21 -0
  431. package/lib/materials/curved-edge/__test__/curved-edge.test.js.map +1 -0
  432. package/lib/materials/curved-edge/index.d.ts +14 -0
  433. package/{cjs → lib}/materials/curved-edge/index.js +12 -9
  434. package/lib/materials/curved-edge/index.js.map +1 -0
  435. package/lib/materials/group/GroupNode.d.ts +127 -0
  436. package/{cjs → lib}/materials/group/GroupNode.js +95 -62
  437. package/lib/materials/group/GroupNode.js.map +1 -0
  438. package/lib/materials/group/index.d.ts +65 -0
  439. package/{cjs → lib}/materials/group/index.js +171 -114
  440. package/lib/materials/group/index.js.map +1 -0
  441. package/lib/materials/node-selection/index.d.ts +28 -0
  442. package/lib/materials/node-selection/index.js +300 -0
  443. package/lib/materials/node-selection/index.js.map +1 -0
  444. package/lib/mindmap/fakerRoot.d.ts +13 -0
  445. package/lib/mindmap/fakerRoot.js +43 -0
  446. package/lib/mindmap/fakerRoot.js.map +1 -0
  447. package/lib/mindmap/index.d.ts +41 -0
  448. package/lib/mindmap/index.js +320 -0
  449. package/lib/mindmap/index.js.map +1 -0
  450. package/lib/mindmap/markContent.d.ts +17 -0
  451. package/lib/mindmap/markContent.js +93 -0
  452. package/lib/mindmap/markContent.js.map +1 -0
  453. package/lib/mindmap/markContentOption.d.ts +17 -0
  454. package/lib/mindmap/markContentOption.js +95 -0
  455. package/lib/mindmap/markContentOption.js.map +1 -0
  456. package/lib/mindmap/markEntity.d.ts +17 -0
  457. package/lib/mindmap/markEntity.js +94 -0
  458. package/lib/mindmap/markEntity.js.map +1 -0
  459. package/lib/mindmap/markRoot.d.ts +17 -0
  460. package/lib/mindmap/markRoot.js +95 -0
  461. package/lib/mindmap/markRoot.js.map +1 -0
  462. package/lib/mindmap/theme.d.ts +10 -0
  463. package/lib/mindmap/theme.js +15 -0
  464. package/lib/mindmap/theme.js.map +1 -0
  465. package/lib/rect-label-node/RectLabelNodeView.d.ts +5 -0
  466. package/lib/rect-label-node/RectLabelNodeView.js +57 -0
  467. package/lib/rect-label-node/RectLabelNodeView.js.map +1 -0
  468. package/lib/rect-label-node/index.d.ts +5 -0
  469. package/lib/rect-label-node/index.js +17 -0
  470. package/lib/rect-label-node/index.js.map +1 -0
  471. package/lib/style/index.css +53 -60
  472. package/lib/style/index.less +255 -0
  473. package/lib/style/raw.d.ts +4 -0
  474. package/lib/style/raw.js +9 -0
  475. package/lib/style/raw.js.map +1 -0
  476. package/lib/tools/auto-layout/index.d.ts +40 -0
  477. package/{cjs → lib}/tools/auto-layout/index.js +8 -4
  478. package/lib/tools/auto-layout/index.js.map +1 -0
  479. package/lib/tools/flow-path/index.d.ts +47 -0
  480. package/{cjs → lib}/tools/flow-path/index.js +50 -35
  481. package/lib/tools/flow-path/index.js.map +1 -0
  482. package/lib/tools/snapshot/index.d.ts +25 -0
  483. package/{cjs → lib}/tools/snapshot/index.js +42 -30
  484. package/lib/tools/snapshot/index.js.map +1 -0
  485. package/lib/turbo-adapter/index.d.ts +11 -0
  486. package/{cjs → lib}/turbo-adapter/index.js +17 -14
  487. package/lib/turbo-adapter/index.js.map +1 -0
  488. package/package.json +29 -83
  489. package/rollup.config.js +3 -0
  490. package/src/NodeResize/BasicShape/Ellipse.tsx +22 -0
  491. package/src/NodeResize/BasicShape/Polygon.tsx +24 -0
  492. package/src/NodeResize/BasicShape/Rect.tsx +44 -0
  493. package/src/NodeResize/control/Control.tsx +527 -0
  494. package/src/NodeResize/control/ControlGroup.tsx +76 -0
  495. package/src/NodeResize/control/Util.ts +206 -0
  496. package/src/NodeResize/index.ts +22 -0
  497. package/src/NodeResize/node/DiamondResize.tsx +148 -0
  498. package/src/NodeResize/node/EllipseResize.tsx +139 -0
  499. package/src/NodeResize/node/HtmlResize.tsx +124 -0
  500. package/src/NodeResize/node/RectResize.tsx +146 -0
  501. package/src/NodeResize/node/index.ts +4 -0
  502. package/src/bpmn/constant.ts +53 -0
  503. package/src/bpmn/events/EndEvent.ts +73 -0
  504. package/src/bpmn/events/StartEvent.ts +52 -0
  505. package/src/bpmn/events/index.ts +2 -0
  506. package/src/bpmn/flow/SequenceFlow.ts +25 -0
  507. package/src/bpmn/flow/index.ts +1 -0
  508. package/src/bpmn/gateways/ExclusiveGateway.ts +71 -0
  509. package/src/bpmn/gateways/index.ts +1 -0
  510. package/src/bpmn/getBpmnId.ts +31 -0
  511. package/src/bpmn/index.ts +57 -0
  512. package/src/bpmn/tasks/ServiceTask.ts +63 -0
  513. package/src/bpmn/tasks/UserTask.ts +64 -0
  514. package/src/bpmn/tasks/index.ts +2 -0
  515. package/src/bpmn-adapter/bpmnIds.ts +31 -0
  516. package/src/bpmn-adapter/index.ts +596 -0
  517. package/src/bpmn-adapter/json2xml.ts +90 -0
  518. package/src/bpmn-adapter/xml2json.ts +544 -0
  519. package/src/bpmn-elements/README.md +223 -0
  520. package/src/bpmn-elements/__tests__/definition.test.js +72 -0
  521. package/src/bpmn-elements/index.d.ts +26 -0
  522. package/src/bpmn-elements/index.ts +107 -0
  523. package/src/bpmn-elements/presets/Event/EndEventFactory.ts +114 -0
  524. package/src/bpmn-elements/presets/Event/IntermediateCatchEvent.ts +108 -0
  525. package/src/bpmn-elements/presets/Event/IntermediateThrowEvent.ts +109 -0
  526. package/src/bpmn-elements/presets/Event/StartEventFactory.ts +114 -0
  527. package/src/bpmn-elements/presets/Event/boundaryEventFactory.ts +117 -0
  528. package/src/bpmn-elements/presets/Event/index.ts +14 -0
  529. package/src/bpmn-elements/presets/Flow/flow.d.ts +6 -0
  530. package/src/bpmn-elements/presets/Flow/index.ts +8 -0
  531. package/src/bpmn-elements/presets/Flow/manhattan.ts +691 -0
  532. package/src/bpmn-elements/presets/Flow/sequenceFlow.ts +65 -0
  533. package/src/bpmn-elements/presets/Gateway/gateway.ts +107 -0
  534. package/src/bpmn-elements/presets/Gateway/index.ts +23 -0
  535. package/src/bpmn-elements/presets/Pool/Lane.ts +211 -0
  536. package/src/bpmn-elements/presets/Pool/Pool.ts +284 -0
  537. package/src/bpmn-elements/presets/Pool/index.ts +89 -0
  538. package/src/bpmn-elements/presets/Task/index.ts +122 -0
  539. package/src/bpmn-elements/presets/Task/subProcess.ts +190 -0
  540. package/src/bpmn-elements/presets/Task/task.ts +193 -0
  541. package/src/bpmn-elements/presets/icons.ts +155 -0
  542. package/src/bpmn-elements/utils.ts +52 -0
  543. package/src/bpmn-elements-adapter/README.md +295 -0
  544. package/src/bpmn-elements-adapter/__tests__/adapter_in.test.js +526 -0
  545. package/src/bpmn-elements-adapter/__tests__/adapter_out.test.js +569 -0
  546. package/src/bpmn-elements-adapter/constant.ts +76 -0
  547. package/src/bpmn-elements-adapter/index.ts +1134 -0
  548. package/src/bpmn-elements-adapter/json2xml.ts +91 -0
  549. package/src/bpmn-elements-adapter/xml2json.ts +548 -0
  550. package/src/components/context-menu/index.ts +253 -0
  551. package/src/components/control/index.ts +141 -0
  552. package/src/components/dnd-panel/index.ts +129 -0
  553. package/src/components/highlight/index.ts +173 -0
  554. package/src/components/menu/index.ts +435 -0
  555. package/src/components/mini-map/index.ts +666 -0
  556. package/src/components/selection-select/index.ts +184 -0
  557. package/src/index.less +1 -0
  558. package/src/index.ts +22 -0
  559. package/src/insert-node-in-polyline/edge.ts +175 -0
  560. package/src/insert-node-in-polyline/index.ts +187 -0
  561. package/src/materials/curved-edge/__test__/curved-edge.test.ts +43 -0
  562. package/src/materials/curved-edge/index.ts +185 -0
  563. package/src/materials/group/GroupNode.ts +443 -0
  564. package/src/materials/group/index.ts +542 -0
  565. package/src/materials/node-selection/index.ts +271 -0
  566. package/src/mindmap/fakerRoot.ts +19 -0
  567. package/src/mindmap/index.ts +328 -0
  568. package/src/mindmap/markContent.ts +81 -0
  569. package/src/mindmap/markContentOption.ts +81 -0
  570. package/src/mindmap/markEntity.ts +82 -0
  571. package/src/mindmap/markRoot.ts +83 -0
  572. package/src/mindmap/theme.ts +11 -0
  573. package/src/rect-label-node/RectLabelNodeView.ts +33 -0
  574. package/src/rect-label-node/index.ts +15 -0
  575. package/src/style/index.less +255 -0
  576. package/src/style/raw.ts +222 -0
  577. package/src/tools/auto-layout/index.ts +282 -0
  578. package/src/tools/flow-path/index.ts +234 -0
  579. package/src/tools/snapshot/README.md +9 -0
  580. package/src/tools/snapshot/index.ts +275 -0
  581. package/src/turbo-adapter/index.ts +212 -0
  582. package/tsconfig.json +18 -0
  583. package/cjs/NodeResize/index.js +0 -40
  584. package/cjs/components/menu/index.js +0 -377
  585. package/cjs/components/mini-map/index.js +0 -437
  586. package/cjs/style/index.css +0 -222
  587. package/cjs/type/index.js +0 -2
  588. package/es/NodeResize/Control/Control.d.ts +0 -66
  589. package/es/NodeResize/Node/DiamondResize.d.ts +0 -30
  590. package/es/NodeResize/Node/EllipseResize.d.ts +0 -30
  591. package/es/NodeResize/Node/HtmlResize.d.ts +0 -30
  592. package/es/NodeResize/Node/RectResize.d.ts +0 -32
  593. package/es/type/index.d.ts +0 -6
  594. package/es/type/index.js +0 -0
  595. package/lib/AutoLayout.js +0 -1
  596. package/lib/BpmnAdapter.js +0 -1
  597. package/lib/BpmnElement.js +0 -1
  598. package/lib/ContextMenu.js +0 -1
  599. package/lib/Control.js +0 -1
  600. package/lib/CurvedEdge.js +0 -1
  601. package/lib/DndPanel.js +0 -1
  602. package/lib/FlowPath.js +0 -1
  603. package/lib/Group.js +0 -1
  604. package/lib/Highlight.js +0 -1
  605. package/lib/InsertNodeInPolyline.js +0 -1
  606. package/lib/Menu.js +0 -1
  607. package/lib/MiniMap.js +0 -1
  608. package/lib/NodeResize.js +0 -1
  609. package/lib/RectLabelNode.js +0 -1
  610. package/lib/SelectionSelect.js +0 -1
  611. package/lib/Snapshot.js +0 -1
  612. package/lib/TurboAdapter.js +0 -1
  613. package/lib/lfJson2Xml.js +0 -1
  614. package/lib/lfXml2Json.js +0 -1
  615. /package/es/NodeResize/{Control → control}/Util.d.ts +0 -0
@@ -0,0 +1,1134 @@
1
+ /* eslint-disable func-names */
2
+ /* eslint-disable no-continue */
3
+ /* eslint-disable @typescript-eslint/naming-convention */
4
+ /* eslint-disable no-cond-assign */
5
+ /* eslint-disable no-shadow */
6
+ import _ from 'lodash-es'
7
+ import {
8
+ ExclusiveGatewayConfig,
9
+ InclusiveGatewayConfig,
10
+ ParallelGatewayConfig,
11
+ StartEventConfig,
12
+ EndEventConfig,
13
+ BoundaryEventConfig,
14
+ IntermediateEventConfig,
15
+ ServiceTaskConfig,
16
+ UserTaskConfig,
17
+ SubProcessConfig,
18
+ } from './constant'
19
+ import { lfXml2Json } from './xml2json'
20
+ import { lfJson2Xml, handleAttributes } from './json2xml'
21
+
22
+ type NodeConfig = {
23
+ id: string
24
+ properties?: Record<string, unknown>
25
+ text?: {
26
+ x: number
27
+ y: number
28
+ value: string
29
+ }
30
+ type: string
31
+ x: number
32
+ y: number
33
+ children?: string[]
34
+ }
35
+
36
+ type Point = {
37
+ x: number
38
+ y: number
39
+ }
40
+
41
+ type EdgeConfig = {
42
+ id: string
43
+ sourceNodeId: string
44
+ targetNodeId: string
45
+ type: string
46
+ startPoint?: {
47
+ x: number
48
+ y: number
49
+ }
50
+ endPoint?: {
51
+ x: number
52
+ y: number
53
+ }
54
+ text?: {
55
+ x: number
56
+ y: number
57
+ value: string
58
+ }
59
+ pointsList?: Point[]
60
+ properties: Record<string, unknown>
61
+ }
62
+
63
+ type TransformerType = {
64
+ [key: string]: {
65
+ in?: (key: string, data: any) => any
66
+ out?: (data: any) => any
67
+ }
68
+ }
69
+
70
+ type MappingType = {
71
+ in?: {
72
+ [key: string]: string
73
+ }
74
+ out?: {
75
+ [key: string]: string
76
+ }
77
+ }
78
+
79
+ type excludeFieldsType = {
80
+ in?: Set<string>
81
+ out?: Set<string>
82
+ }
83
+
84
+ type ExtraPropsType = {
85
+ retainedAttrsFields?: string[]
86
+ excludeFields?: excludeFieldsType
87
+ transformer?: TransformerType
88
+ mapping?: MappingType
89
+ }
90
+
91
+ enum BpmnElements {
92
+ START = 'bpmn:startEvent',
93
+ END = 'bpmn:endEvent',
94
+ INTERMEDIATE_CATCH = 'bpmn:intermediateCatchEvent',
95
+ INTERMEDIATE_THROW = 'bpmn:intermediateThrowEvent',
96
+ BOUNDARY = 'bpmn:boundaryEvent',
97
+ PARALLEL_GATEWAY = 'bpmn:parallelGateway',
98
+ INCLUSIVE_GATEWAY = 'bpmn:inclusiveGateway',
99
+ EXCLUSIVE_GATEWAY = 'bpmn:exclusiveGateway',
100
+ USER = 'bpmn:userTask',
101
+ SYSTEM = 'bpmn:serviceTask',
102
+ FLOW = 'bpmn:sequenceFlow',
103
+ SUBPROCESS = 'bpmn:subProcess',
104
+ }
105
+
106
+ const defaultAttrsForInput = [
107
+ '-name',
108
+ '-id',
109
+ 'bpmn:incoming',
110
+ 'bpmn:outgoing',
111
+ '-sourceRef',
112
+ '-targetRef',
113
+ '-children',
114
+ ]
115
+
116
+ const defaultRetainedProperties = [
117
+ 'properties',
118
+ 'startPoint',
119
+ 'endPoint',
120
+ 'pointsList',
121
+ ]
122
+
123
+ const defaultExcludeFields = {
124
+ in: [],
125
+ out: [
126
+ 'properties.panels',
127
+ 'properties.nodeSize',
128
+ 'properties.definitionId',
129
+ 'properties.timerValue',
130
+ 'properties.timerType',
131
+ 'properties.definitionType',
132
+ 'properties.parent',
133
+ 'properties.isBoundaryEventTouchingTask',
134
+ ],
135
+ }
136
+
137
+ const mergeInNOutObject = (target: any, source: any): TransformerType => {
138
+ const sourceKeys = Object.keys(source || {})
139
+ sourceKeys.forEach((key) => {
140
+ if (target[key]) {
141
+ const { in: fnIn, out: fnOut } = source[key]
142
+ if (fnIn) {
143
+ target[key].in = fnIn
144
+ }
145
+ if (fnOut) {
146
+ target[key].out = fnOut
147
+ }
148
+ } else {
149
+ target[key] = source[key]
150
+ }
151
+ })
152
+ return target
153
+ }
154
+
155
+ // @ts-ignore
156
+ let defaultTransformer: TransformerType = {
157
+ 'bpmn:startEvent': {
158
+ out(data: any) {
159
+ const { properties } = data
160
+ return defaultTransformer[properties.definitionType]?.out?.(data) || {}
161
+ },
162
+ },
163
+ // 'bpmn:endEvent': undefined,
164
+ 'bpmn:intermediateCatchEvent': {
165
+ out(data: any) {
166
+ const { properties } = data
167
+ return defaultTransformer[properties.definitionType]?.out?.(data) || {}
168
+ },
169
+ },
170
+ 'bpmn:intermediateThrowEvent': {
171
+ out(data: any) {
172
+ const { properties } = data
173
+ return defaultTransformer[properties.definitionType]?.out?.(data) || {}
174
+ },
175
+ },
176
+ 'bpmn:boundaryEvent': {
177
+ out(data: any) {
178
+ const { properties } = data
179
+ return defaultTransformer[properties.definitionType]?.out?.(data) || {}
180
+ },
181
+ },
182
+ // 'bpmn:userTask': undefined,
183
+ 'bpmn:sequenceFlow': {
184
+ out(data: any) {
185
+ const {
186
+ properties: { expressionType, condition },
187
+ } = data
188
+ if (condition) {
189
+ if (expressionType === 'cdata') {
190
+ return {
191
+ json: `<bpmn:conditionExpression xsi:type="bpmn2:tFormalExpression"><![CDATA[\${${condition}}]]></bpmn:conditionExpression>`,
192
+ }
193
+ }
194
+ return {
195
+ json: `<bpmn:conditionExpression xsi:type="bpmn2:tFormalExpression">${condition}</bpmn:conditionExpression>`,
196
+ }
197
+ }
198
+ return {
199
+ json: '',
200
+ }
201
+ },
202
+ },
203
+ // 'bpmn:subProcess': undefined,
204
+ // 'bpmn:participant': undefined,
205
+ 'bpmn:timerEventDefinition': {
206
+ out(data: any) {
207
+ const {
208
+ properties: { timerType, timerValue, definitionId },
209
+ } = data
210
+
211
+ const typeFunc = () =>
212
+ `<bpmn:${timerType} xsi:type="bpmn:tFormalExpression">${timerValue}</bpmn:${timerType}>`
213
+
214
+ return {
215
+ json: `<bpmn:timerEventDefinition id="${definitionId}"${
216
+ timerType && timerValue
217
+ ? `>${typeFunc()}</bpmn:timerEventDefinition>`
218
+ : '/>'
219
+ }`,
220
+ }
221
+ },
222
+ in(key: string, data: any) {
223
+ const definitionType = key
224
+ const definitionId = data['-id']
225
+ let timerType = ''
226
+ let timerValue = ''
227
+ for (const key of Object.keys(data)) {
228
+ if (key.includes('bpmn:')) {
229
+ ;[, timerType] = key.split(':')
230
+ timerValue = data[key]?.['#text']
231
+ }
232
+ }
233
+ return {
234
+ '-definitionId': definitionId,
235
+ '-definitionType': definitionType,
236
+ '-timerType': timerType,
237
+ '-timerValue': timerValue,
238
+ }
239
+ },
240
+ },
241
+ 'bpmn:conditionExpression': {
242
+ in(_key: string, data: any) {
243
+ let condition = ''
244
+ let expressionType = ''
245
+ if (data['#cdata-section']) {
246
+ expressionType = 'cdata'
247
+ condition = /^\$\{(.*)\}$/g.exec(data['#cdata-section'])?.[1] || ''
248
+ } else if (data['#text']) {
249
+ expressionType = 'normal'
250
+ condition = data['#text']
251
+ }
252
+
253
+ return {
254
+ '-condition': condition,
255
+ '-expressionType': expressionType,
256
+ }
257
+ },
258
+ },
259
+ }
260
+
261
+ /**
262
+ * 将普通json转换为xmlJson
263
+ * xmlJson中property会以“-”开头
264
+ * 如果没有“-”表示为子节点
265
+ * fix issue https://github.com/didi/LogicFlow/issues/718, contain the process of #text/#cdata and array
266
+ * @reference node type reference https://www.w3schools.com/xml/dom_nodetype.asp
267
+ * @param retainedAttrsFields retainedAttrsFields会和默认的defaultRetainedProperties:
268
+ * ["properties", "startPoint", "endPoint", "pointsList"]合并
269
+ * 这意味着出现在这个数组里的字段当它的值是数组或是对象时不会被视为一个节点而是一个属性
270
+ * @param excludeFields excludeFields会和默认的defaultExcludeFields合并,出现在这个数组中的字段在转换时会被忽略
271
+ * @param transformer 对应节点或者边的子内容转换规则
272
+ */
273
+ function convertNormalToXml(other?: ExtraPropsType) {
274
+ const { retainedAttrsFields, excludeFields, transformer } = other ?? {}
275
+ const retainedAttrsSet = new Set([
276
+ ...defaultRetainedProperties,
277
+ ...(retainedAttrsFields || []),
278
+ ])
279
+ const excludeFieldsSet = {
280
+ in: new Set([...defaultExcludeFields.in, ...(excludeFields?.in || [])]),
281
+ out: new Set([...defaultExcludeFields.out, ...(excludeFields?.out || [])]),
282
+ }
283
+
284
+ defaultTransformer = mergeInNOutObject(defaultTransformer, transformer)
285
+
286
+ return (object: { nodes: any; edges: any }) => {
287
+ const { nodes } = object
288
+ const { edges } = object
289
+ function ToXmlJson(obj: any, path: string): any {
290
+ if (obj?.flag === 1) {
291
+ return
292
+ }
293
+
294
+ let fn
295
+ // @ts-ignore
296
+ if ((fn = defaultTransformer[obj.type]) && fn.out) {
297
+ const output = fn.out(obj)
298
+ const keys = Object.keys(output)
299
+ if (keys.length > 0) {
300
+ keys.forEach((key: string) => {
301
+ obj[key] = output[key]
302
+ })
303
+ }
304
+ }
305
+
306
+ if (obj?.children) {
307
+ obj.children = obj.children.map((key: any) => {
308
+ const target =
309
+ nodes.find((item: { id: any }) => item.id === key) ||
310
+ edges.find((item: { id: any }) => item.id === key)
311
+ return target || {}
312
+ })
313
+ }
314
+
315
+ const xmlJson: any = {}
316
+
317
+ if (typeof obj === 'string') {
318
+ return obj
319
+ }
320
+
321
+ if (Array.isArray(obj)) {
322
+ return (
323
+ obj
324
+ .map((item) => ToXmlJson(item, ''))
325
+ // eslint-disable-next-line eqeqeq
326
+ .filter((item) => item != undefined)
327
+ )
328
+ }
329
+
330
+ for (const [key, value] of Object.entries(obj)) {
331
+ if ((value as any)?.['flag'] === 1) {
332
+ return
333
+ }
334
+ const newPath = [path, key].filter((item) => item).join('.')
335
+ if (excludeFieldsSet.out.has(newPath)) {
336
+ continue
337
+ } else if (typeof value !== 'object') {
338
+ // node type reference https://www.w3schools.com/xml/dom_nodetype.asp
339
+ if (
340
+ key.indexOf('-') === 0 ||
341
+ ['#text', '#cdata-section', '#comment'].includes(key)
342
+ ) {
343
+ xmlJson[key] = value
344
+ } else {
345
+ xmlJson[`-${key}`] = value
346
+ }
347
+ } else if (retainedAttrsSet.has(newPath)) {
348
+ xmlJson[`-${key}`] = ToXmlJson(value, newPath)
349
+ } else {
350
+ xmlJson[key] = ToXmlJson(value, newPath)
351
+ }
352
+ }
353
+
354
+ return xmlJson
355
+ }
356
+ return ToXmlJson(object, '')
357
+ }
358
+ }
359
+
360
+ /**
361
+ * 将xmlJson转换为普通的json,在内部使用。
362
+ */
363
+ function convertXmlToNormal(xmlJson: any) {
364
+ const json: any = {}
365
+ for (const [key, value] of Object.entries(xmlJson)) {
366
+ if (key.indexOf('-') === 0) {
367
+ json[key.substring(1)] = handleAttributes(value)
368
+ } else if (typeof value === 'string') {
369
+ json[key] = value
370
+ } else if (Object.prototype.toString.call(value) === '[object Object]') {
371
+ json[key] = convertXmlToNormal(value)
372
+ } else if (Array.isArray(value)) {
373
+ // contain the process of array
374
+ json[key] = value.map((v) => convertXmlToNormal(v))
375
+ } else {
376
+ json[key] = value
377
+ }
378
+ }
379
+ return json
380
+ }
381
+
382
+ /**
383
+ * 设置bpmn process信息
384
+ * 目标格式请参考examples/bpmn.json
385
+ * bpmn因为是默认基于xml格式的,其特点与json存在差异。
386
+ * 1) 如果是xml的属性,json中属性用'-'开头
387
+ * 2)如果只有一个子元素,json中表示为正常属性
388
+ * 3)如果是多个子元素,json中使用数组存储
389
+ */
390
+ function convertLf2ProcessData(
391
+ bpmnData: any,
392
+ data: any,
393
+ other?: ExtraPropsType,
394
+ ) {
395
+ const nodeIdMap = new Map()
396
+
397
+ const xmlJsonData = convertNormalToXml(other)(data)
398
+
399
+ xmlJsonData.nodes.forEach((node: any) => {
400
+ const {
401
+ '-id': nodeId,
402
+ '-type': nodeType,
403
+ text,
404
+ children,
405
+ ...otherProps
406
+ } = node
407
+ const processNode: any = { '-id': nodeId }
408
+
409
+ if (text?.['-value']) {
410
+ processNode['-name'] = text['-value']
411
+ }
412
+
413
+ if (otherProps['-json']) {
414
+ processNode['-json'] = otherProps['-json']
415
+ }
416
+
417
+ if (otherProps['-properties']) {
418
+ Object.assign(processNode, otherProps['-properties'])
419
+ }
420
+
421
+ if (children) {
422
+ processNode.children = children
423
+ }
424
+
425
+ // (bpmnData[nodeType] ??= []).push(processNode);
426
+
427
+ if (!bpmnData[nodeType]) {
428
+ bpmnData[nodeType] = []
429
+ }
430
+ bpmnData[nodeType].push(processNode)
431
+
432
+ nodeIdMap.set(nodeId, processNode)
433
+ })
434
+
435
+ const sequenceFlow = xmlJsonData.edges.map((edge: any) => {
436
+ const {
437
+ '-id': id,
438
+ // '-type': type,
439
+ '-sourceNodeId': sourceNodeId,
440
+ '-targetNodeId': targetNodeId,
441
+ text,
442
+ ...otherProps
443
+ } = edge
444
+ const targetNode = nodeIdMap.get(targetNodeId)
445
+ // (targetNode['bpmn:incoming'] ??= []).push(id);
446
+
447
+ if (!targetNode['bpmn:incoming']) {
448
+ targetNode['bpmn:incoming'] = []
449
+ }
450
+ targetNode['bpmn:incoming'].push(id)
451
+
452
+ const edgeConfig: any = {
453
+ '-id': id,
454
+ '-sourceRef': sourceNodeId,
455
+ '-targetRef': targetNodeId,
456
+ }
457
+
458
+ if (text?.['-value']) {
459
+ edgeConfig['-name'] = text['-value']
460
+ }
461
+
462
+ if (otherProps['-json']) {
463
+ edgeConfig['-json'] = otherProps['-json']
464
+ }
465
+
466
+ if (otherProps['-properties']) {
467
+ Object.assign(edgeConfig, otherProps['-properties'])
468
+ }
469
+
470
+ return edgeConfig
471
+ })
472
+
473
+ // @see https://github.com/didi/LogicFlow/issues/325
474
+ // 需要保证incoming在outgoing之前
475
+ data.edges.forEach(({ sourceNodeId, id }: any) => {
476
+ const sourceNode = nodeIdMap.get(sourceNodeId)
477
+ // (sourceNode['bpmn:outgoing'] ??= []).push(id);
478
+
479
+ if (!sourceNode['bpmn:outgoing']) {
480
+ sourceNode['bpmn:outgoing'] = []
481
+ }
482
+ sourceNode['bpmn:outgoing'].push(id)
483
+ })
484
+
485
+ bpmnData['bpmn:subProcess']?.forEach((item: any) => {
486
+ const setMap: any = {
487
+ 'bpmn:incoming': new Set<string>(),
488
+ 'bpmn:outgoing': new Set<string>(),
489
+ }
490
+ const edgesInSubProcess: any = []
491
+ item.children.forEach((child: any) => {
492
+ const target = nodeIdMap.get(child['-id'])
493
+ ;['bpmn:incoming', 'bpmn:outgoing'].forEach((key: string) => {
494
+ target[key] &&
495
+ target[key].forEach((value: string) => {
496
+ setMap[key].add(value)
497
+ })
498
+ })
499
+
500
+ const index = bpmnData[child['-type']]?.findIndex(
501
+ (_item: any) => _item['-id'] === child['-id'],
502
+ )
503
+ if (index >= 0) {
504
+ bpmnData[child['-type']].splice(index, 1)
505
+ }
506
+
507
+ nodeIdMap.delete(child['-id'])
508
+
509
+ // (item[child['-type']] ??= []).push(target);
510
+ if (!item[child['-type']]) {
511
+ item[child['-type']] = []
512
+ }
513
+ item[child['-type']].push(target)
514
+ })
515
+
516
+ const { 'bpmn:incoming': incomingSet, 'bpmn:outgoing': outgoingSet } =
517
+ setMap
518
+
519
+ outgoingSet.forEach((value: string) => {
520
+ incomingSet.has(value) && edgesInSubProcess.push(value)
521
+ })
522
+
523
+ for (let i = 0; i < edgesInSubProcess.length; ) {
524
+ const index = sequenceFlow.findIndex(
525
+ (item: any) => item['-id'] === edgesInSubProcess[i],
526
+ )
527
+ if (index >= 0) {
528
+ // (item['bpmn:sequenceFlow'] ??= []).push(sequenceFlow[index]);
529
+ if (!item['bpmn:sequenceFlow']) {
530
+ item['bpmn:sequenceFlow'] = []
531
+ }
532
+ item['bpmn:sequenceFlow'].push(sequenceFlow[index])
533
+ sequenceFlow.splice(index, 1)
534
+ } else {
535
+ i++
536
+ }
537
+ }
538
+
539
+ delete item.children
540
+ })
541
+
542
+ bpmnData[BpmnElements.FLOW] = sequenceFlow
543
+
544
+ return bpmnData
545
+ }
546
+
547
+ /**
548
+ * adapterOut 设置bpmn diagram信息
549
+ */
550
+ function convertLf2DiagramData(bpmnDiagramData: any, data: any) {
551
+ bpmnDiagramData['bpmndi:BPMNEdge'] = data.edges.map((edge: any) => {
552
+ const edgeId = edge.id
553
+ const pointsList = edge.pointsList.map(
554
+ ({ x, y }: { x: number; y: number }) => ({
555
+ '-x': x,
556
+ '-y': y,
557
+ }),
558
+ )
559
+ const diagramData: any = {
560
+ '-id': `${edgeId}_di`,
561
+ '-bpmnElement': edgeId,
562
+ 'di:waypoint': pointsList,
563
+ }
564
+ if (edge.text?.value) {
565
+ diagramData['bpmndi:BPMNLabel'] = {
566
+ 'dc:Bounds': {
567
+ '-x': edge.text.x - (edge.text.value.length * 10) / 2,
568
+ '-y': edge.text.y - 7,
569
+ '-width': edge.text.value.length * 10,
570
+ '-height': 14,
571
+ },
572
+ }
573
+ }
574
+ return diagramData
575
+ })
576
+ bpmnDiagramData['bpmndi:BPMNShape'] = data.nodes.map((node: any) => {
577
+ const nodeId = node.id
578
+ let width = 100
579
+ let height = 80
580
+ let { x, y } = node
581
+ // bpmn坐标是基于左上角,LogicFlow基于中心点,此处处理一下。
582
+ const shapeConfig = BPMNBaseAdapter.shapeConfigMap.get(node.type)
583
+ if (shapeConfig) {
584
+ width = shapeConfig.width
585
+ height = shapeConfig.height
586
+ }
587
+ x -= width / 2
588
+ y -= height / 2
589
+ const diagramData: any = {
590
+ '-id': `${nodeId}_di`,
591
+ '-bpmnElement': nodeId,
592
+ 'dc:Bounds': {
593
+ '-x': x,
594
+ '-y': y,
595
+ '-width': width,
596
+ '-height': height,
597
+ },
598
+ }
599
+ if (node.text?.value) {
600
+ diagramData['bpmndi:BPMNLabel'] = {
601
+ 'dc:Bounds': {
602
+ '-x': node.text.x - (node.text.value.length * 10) / 2,
603
+ '-y': node.text.y - 7,
604
+ '-width': node.text.value.length * 10,
605
+ '-height': 14,
606
+ },
607
+ }
608
+ }
609
+ return diagramData
610
+ })
611
+ }
612
+
613
+ const ignoreType = ['bpmn:incoming', 'bpmn:outgoing']
614
+
615
+ /**
616
+ * 将bpmn数据转换为LogicFlow内部能识别数据
617
+ */
618
+ function convertBpmn2LfData(bpmnData: any, other?: ExtraPropsType) {
619
+ let nodes: any[] = []
620
+ let edges: any[] = []
621
+
622
+ const eleMap = new Map<string, any>()
623
+
624
+ const { transformer, excludeFields } = other ?? {}
625
+
626
+ const excludeFieldsSet = {
627
+ in: new Set([...defaultExcludeFields.in, ...(excludeFields?.in || [])]),
628
+ out: new Set([...defaultExcludeFields.out, ...(excludeFields?.out || [])]),
629
+ }
630
+
631
+ defaultTransformer = mergeInNOutObject(defaultTransformer, transformer)
632
+
633
+ const definitions = bpmnData['bpmn:definitions']
634
+ if (definitions) {
635
+ const process = definitions['bpmn:process']
636
+ ;(function (data, callbacks) {
637
+ callbacks.forEach((callback) => {
638
+ try {
639
+ Object.keys(data).forEach((key: string) => {
640
+ try {
641
+ callback(key)
642
+ } catch (error) {
643
+ console.error(error)
644
+ }
645
+ })
646
+ } catch (error) {
647
+ console.error(error)
648
+ }
649
+ })
650
+ })(process, [
651
+ (key: string) => {
652
+ // 将bpmn:subProcess中的数据提升到process中
653
+ function subProcessProcessing(data: any) {
654
+ // data['-children'] ??= [];
655
+ if (!data['-children']) {
656
+ data['-children'] = []
657
+ }
658
+ Object.keys(data).forEach((key: string) => {
659
+ if (key.indexOf('bpmn:') === 0 && !ignoreType.includes(key)) {
660
+ // process[key] ??= [];
661
+ if (!process[key]) {
662
+ process[key] = []
663
+ }
664
+ !Array.isArray(process[key]) && (process[key] = [process[key]])
665
+ Array.isArray(data[key])
666
+ ? process[key].push(...data[key])
667
+ : process[key].push(data[key])
668
+ if (Array.isArray(data[key])) {
669
+ data[key].forEach((item: any) => {
670
+ !key.includes('Flow') && data['-children'].push(item['-id'])
671
+ })
672
+ } else {
673
+ !key.includes('Flow') &&
674
+ data['-children'].push(data[key]['-id'])
675
+ }
676
+ delete data[key]
677
+ }
678
+ })
679
+ }
680
+ if (key === 'bpmn:subProcess') {
681
+ const data = process[key]
682
+ if (Array.isArray(data)) {
683
+ data.forEach((item: any) => {
684
+ key === 'bpmn:subProcess' && subProcessProcessing(item)
685
+ })
686
+ } else {
687
+ subProcessProcessing(data)
688
+ }
689
+ }
690
+ },
691
+ (key: string) => {
692
+ // 处理被提升的节点、边, 主要是通过definitionTransformer处理出节点的属性
693
+ const fn = (obj: any) => {
694
+ Object.keys(obj).forEach((key: string) => {
695
+ if (key.includes('bpmn:')) {
696
+ let props: any = {}
697
+ if (defaultTransformer[key] && defaultTransformer[key].in) {
698
+ props = defaultTransformer[key].in?.(key, _.cloneDeep(obj[key]))
699
+ delete obj[key]
700
+ } else {
701
+ func(obj[key])
702
+ }
703
+ let keys: (string | number | symbol)[]
704
+ if ((keys = Reflect.ownKeys(props)).length > 0) {
705
+ keys.forEach((key) => {
706
+ Reflect.set(obj, key, props[key])
707
+ })
708
+ }
709
+ }
710
+ })
711
+ }
712
+ function func(data: any) {
713
+ eleMap.set(data['-id'], data)
714
+ if (Array.isArray(data)) {
715
+ data.forEach((item) => {
716
+ func(item)
717
+ })
718
+ } else if (typeof data === 'object') {
719
+ fn(data)
720
+ }
721
+ }
722
+ func(process[key])
723
+ },
724
+ (key: string) => {
725
+ if (key.indexOf('bpmn:') === 0) {
726
+ const value = process[key]
727
+ if (key === 'bpmn:sequenceFlow') {
728
+ const bpmnEdges =
729
+ definitions['bpmndi:BPMNDiagram']['bpmndi:BPMNPlane'][
730
+ 'bpmndi:BPMNEdge'
731
+ ]
732
+ edges = getLfEdges(value, bpmnEdges)
733
+ } else {
734
+ const shapes =
735
+ definitions['bpmndi:BPMNDiagram']['bpmndi:BPMNPlane'][
736
+ 'bpmndi:BPMNShape'
737
+ ]
738
+ if (key === 'bpmn:boundaryEvent') {
739
+ const data = process[key]
740
+ const fn = (item: any) => {
741
+ const { '-attachedToRef': attachedToRef } = item
742
+ const attachedToNode = eleMap.get(attachedToRef)
743
+
744
+ // attachedToNode['-boundaryEvents'] ??= [];
745
+
746
+ if (!attachedToNode['-boundaryEvents']) {
747
+ attachedToNode['-boundaryEvents'] = []
748
+ }
749
+
750
+ attachedToNode['-boundaryEvents'].push(item['-id'])
751
+ }
752
+ if (Array.isArray(data)) {
753
+ data.forEach((item) => {
754
+ fn(item)
755
+ })
756
+ } else {
757
+ fn(data)
758
+ }
759
+ }
760
+ nodes = nodes.concat(getLfNodes(value, shapes, key))
761
+ }
762
+ }
763
+ },
764
+ ])
765
+ }
766
+
767
+ const ignoreFields = (
768
+ obj: Record<string, any>,
769
+ filterSet: Set<string>,
770
+ path: string,
771
+ ) => {
772
+ Object.keys(obj).forEach((key) => {
773
+ const tmpPath = path ? `${path}.${key}` : key
774
+ if (filterSet.has(tmpPath)) {
775
+ delete obj[key]
776
+ } else if (typeof obj[key] === 'object') {
777
+ ignoreFields(obj[key], filterSet, tmpPath)
778
+ }
779
+ })
780
+ }
781
+
782
+ nodes.forEach((node) => {
783
+ if (other?.mapping?.in) {
784
+ const mapping = other?.mapping?.in
785
+ const { type } = node
786
+ if (mapping[type]) {
787
+ node.type = mapping[type]
788
+ }
789
+ }
790
+ ignoreFields(node, excludeFieldsSet.in, '')
791
+ // Object.keys(node.properties).forEach((key) => {
792
+ // excludeFieldsSet.in.has(key) && delete node.properties[key];
793
+ // });
794
+ })
795
+
796
+ edges.forEach((edge) => {
797
+ if (other?.mapping?.in) {
798
+ const mapping = other?.mapping?.in
799
+ const { type } = edge
800
+ if (mapping[type]) {
801
+ edge.type = mapping[type]
802
+ }
803
+ }
804
+ ignoreFields(edge, excludeFieldsSet.in, '')
805
+ // Object.keys(edge.properties).forEach((key) => {
806
+ // excludeFieldsSet.in.has(key) && delete edge.properties[key];
807
+ // });
808
+ })
809
+
810
+ return {
811
+ nodes,
812
+ edges,
813
+ }
814
+ }
815
+
816
+ function getLfNodes(value: any, shapes: any, key: any) {
817
+ const nodes: NodeConfig[] = []
818
+ if (Array.isArray(value)) {
819
+ // 数组
820
+ value.forEach((val) => {
821
+ let shapeValue: any
822
+ if (Array.isArray(shapes)) {
823
+ shapeValue = shapes.find(
824
+ (shape) => shape['-bpmnElement'] === val['-id'],
825
+ )
826
+ } else {
827
+ shapeValue = shapes
828
+ }
829
+ const node = getNodeConfig(shapeValue, key, val)
830
+ nodes.push(node)
831
+ })
832
+ } else {
833
+ let shapeValue
834
+ if (Array.isArray(shapes)) {
835
+ shapeValue = shapes.find(
836
+ (shape) => shape['-bpmnElement'] === value['-id'],
837
+ )
838
+ } else {
839
+ shapeValue = shapes
840
+ }
841
+ const node = getNodeConfig(shapeValue, key, value)
842
+ nodes.push(node)
843
+ }
844
+ return nodes
845
+ }
846
+
847
+ function getNodeConfig(shapeValue: any, type: any, processValue: any) {
848
+ let x = Number(shapeValue['dc:Bounds']['-x'])
849
+ let y = Number(shapeValue['dc:Bounds']['-y'])
850
+ const { '-children': children } = processValue
851
+ const name = processValue['-name']
852
+ const shapeConfig = BPMNBaseAdapter.shapeConfigMap.get(type)
853
+ if (shapeConfig) {
854
+ x += shapeConfig.width / 2
855
+ y += shapeConfig.height / 2
856
+ }
857
+ let properties: any = {}
858
+ // 判断是否存在额外的属性,将额外的属性放到properties中
859
+ Object.entries(processValue).forEach(([key, value]) => {
860
+ if (!defaultAttrsForInput.includes(key)) {
861
+ properties[key] = value
862
+ }
863
+ })
864
+ properties = convertXmlToNormal(properties)
865
+ let text
866
+ if (name) {
867
+ text = {
868
+ x,
869
+ y,
870
+ value: name,
871
+ }
872
+ // 自定义文本位置
873
+ if (
874
+ shapeValue['bpmndi:BPMNLabel'] &&
875
+ shapeValue['bpmndi:BPMNLabel']['dc:Bounds']
876
+ ) {
877
+ const textBounds = shapeValue['bpmndi:BPMNLabel']['dc:Bounds']
878
+ text.x = Number(textBounds['-x']) + Number(textBounds['-width']) / 2
879
+ text.y = Number(textBounds['-y']) + Number(textBounds['-height']) / 2
880
+ }
881
+ }
882
+ const nodeConfig: NodeConfig = {
883
+ id: shapeValue['-bpmnElement'],
884
+ type,
885
+ x,
886
+ y,
887
+ properties,
888
+ }
889
+ children && (nodeConfig.children = children)
890
+ if (text) {
891
+ nodeConfig.text = text
892
+ }
893
+ return nodeConfig
894
+ }
895
+
896
+ function getLfEdges(value: any, bpmnEdges: any) {
897
+ const edges: EdgeConfig[] = []
898
+ if (Array.isArray(value)) {
899
+ value.forEach((val) => {
900
+ let edgeValue
901
+ if (Array.isArray(bpmnEdges)) {
902
+ edgeValue = bpmnEdges.find(
903
+ (edge) => edge['-bpmnElement'] === val['-id'],
904
+ )
905
+ } else {
906
+ edgeValue = bpmnEdges
907
+ }
908
+ edges.push(getEdgeConfig(edgeValue, val))
909
+ })
910
+ } else {
911
+ let edgeValue
912
+ if (Array.isArray(bpmnEdges)) {
913
+ edgeValue = bpmnEdges.find(
914
+ (edge) => edge['-bpmnElement'] === value['-id'],
915
+ )
916
+ } else {
917
+ edgeValue = bpmnEdges
918
+ }
919
+ edges.push(getEdgeConfig(edgeValue, value))
920
+ }
921
+ return edges
922
+ }
923
+
924
+ function getEdgeConfig(edgeValue: any, processValue: any) {
925
+ let text
926
+ const textVal = processValue['-name']
927
+ if (textVal) {
928
+ const textBounds = edgeValue['bpmndi:BPMNLabel']['dc:Bounds']
929
+ // 如果边文本换行,则其偏移量应该是最长一行的位置
930
+ let textLength = 0
931
+ textVal.split('\n').forEach((textSpan: string) => {
932
+ if (textLength < textSpan.length) {
933
+ textLength = textSpan.length
934
+ }
935
+ })
936
+
937
+ text = {
938
+ value: textVal,
939
+ x: Number(textBounds['-x']) + (textLength * 10) / 2,
940
+ y: Number(textBounds['-y']) + 7,
941
+ }
942
+ }
943
+ let properties: any = {}
944
+ // 判断是否存在额外的属性,将额外的属性放到properties中
945
+ Object.entries(processValue).forEach(([key, value]) => {
946
+ if (!defaultAttrsForInput.includes(key)) {
947
+ properties[key] = value
948
+ }
949
+ })
950
+ properties = convertXmlToNormal(properties)
951
+ const pointsList = edgeValue['di:waypoint'].map((point: any) => ({
952
+ x: Number(point['-x']),
953
+ y: Number(point['-y']),
954
+ }))
955
+ const edge: EdgeConfig = {
956
+ id: processValue['-id'],
957
+ type: BpmnElements.FLOW,
958
+ pointsList,
959
+ sourceNodeId: processValue['-sourceRef'],
960
+ targetNodeId: processValue['-targetRef'],
961
+ properties,
962
+ }
963
+ if (text) {
964
+ edge.text = text
965
+ }
966
+ return edge
967
+ }
968
+
969
+ class BPMNBaseAdapter {
970
+ static pluginName = 'bpmn-adapter'
971
+ static shapeConfigMap = new Map()
972
+ processAttributes: {
973
+ ['-isExecutable']: string
974
+ ['-id']: string
975
+ }
976
+ definitionAttributes: {
977
+ ['-id']: string
978
+ ['-xmlns:xsi']: string
979
+ ['-xmlns:bpmn']: string
980
+ ['-xmlns:bpmndi']: string
981
+ ['-xmlns:dc']: string
982
+ ['-xmlns:di']: string
983
+ ['-targetNamespace']: string
984
+ ['-exporter']: string
985
+ ['-exporterVersion']: string
986
+ [key: string]: any
987
+ }
988
+ constructor({ lf }: any) {
989
+ lf.adapterIn = this.adapterIn
990
+ lf.adapterOut = this.adapterOut
991
+ this.processAttributes = {
992
+ '-isExecutable': 'true',
993
+ '-id': 'Process',
994
+ }
995
+ this.definitionAttributes = {
996
+ '-id': 'Definitions',
997
+ '-xmlns:xsi': 'http://www.w3.org/2001/XMLSchema-instance',
998
+ '-xmlns:bpmn': 'http://www.omg.org/spec/BPMN/20100524/MODEL',
999
+ '-xmlns:bpmndi': 'http://www.omg.org/spec/BPMN/20100524/DI',
1000
+ '-xmlns:dc': 'http://www.omg.org/spec/DD/20100524/DC',
1001
+ '-xmlns:di': 'http://www.omg.org/spec/DD/20100524/DI',
1002
+ '-targetNamespace': 'http://logic-flow.org',
1003
+ '-exporter': 'logicflow',
1004
+ '-exporterVersion': '1.2.10',
1005
+ }
1006
+ }
1007
+ setCustomShape(key: string, val: any) {
1008
+ BPMNBaseAdapter.shapeConfigMap.set(key, val)
1009
+ }
1010
+ /**
1011
+ * @param retainedAttrsFields?: string[] (可选)属性保留字段,retainedField会和默认的defaultRetainedFields:
1012
+ * ["properties", "startPoint", "endPoint", "pointsList"]合并,
1013
+ * 这意味着出现在这个数组里的字段当它的值是数组或是对象时不会被视为一个节点而是一个属性。
1014
+ * @param excludeFields excludeFields会和默认的defaultExcludeFields合并,出现在这个数组中的字段在转换时会被忽略
1015
+ * @param transformer 对应节点或者边的内容转换规则
1016
+ */
1017
+ adapterOut = (data: any, other?: ExtraPropsType) => {
1018
+ const bpmnProcessData = { ...this.processAttributes }
1019
+ convertLf2ProcessData(bpmnProcessData, data, other)
1020
+ const bpmnDiagramData = {
1021
+ '-id': 'BPMNPlane_1',
1022
+ '-bpmnElement': bpmnProcessData['-id'],
1023
+ }
1024
+ convertLf2DiagramData(bpmnDiagramData, data)
1025
+ const definitions = this.definitionAttributes
1026
+ definitions['bpmn:process'] = bpmnProcessData
1027
+ definitions['bpmndi:BPMNDiagram'] = {
1028
+ '-id': 'BPMNDiagram_1',
1029
+ 'bpmndi:BPMNPlane': bpmnDiagramData,
1030
+ }
1031
+ const bpmnData = {
1032
+ 'bpmn:definitions': definitions,
1033
+ }
1034
+
1035
+ if (other?.mapping?.out) {
1036
+ const mapping = other?.mapping?.out
1037
+
1038
+ const nameMapping = (obj: Record<string, any> | any[]): any => {
1039
+ if (Array.isArray(obj)) {
1040
+ obj.forEach((item) => nameMapping(item))
1041
+ }
1042
+ if (typeof obj === 'object') {
1043
+ Object.keys(obj).forEach((key: string) => {
1044
+ let mappingName: string
1045
+ if ((mappingName = mapping[key])) {
1046
+ obj[mappingName] = _.cloneDeep(obj[key])
1047
+ delete obj[key]
1048
+ nameMapping(obj[mappingName])
1049
+ } else {
1050
+ nameMapping(obj[key])
1051
+ }
1052
+ })
1053
+ }
1054
+ }
1055
+ nameMapping(bpmnData)
1056
+ }
1057
+
1058
+ return bpmnData
1059
+ }
1060
+ adapterIn = (bpmnData: any, other?: ExtraPropsType) => {
1061
+ if (bpmnData) {
1062
+ return convertBpmn2LfData(bpmnData, other)
1063
+ }
1064
+ }
1065
+ }
1066
+
1067
+ BPMNBaseAdapter.shapeConfigMap.set(BpmnElements.START, {
1068
+ width: StartEventConfig.width,
1069
+ height: StartEventConfig.height,
1070
+ })
1071
+ BPMNBaseAdapter.shapeConfigMap.set(BpmnElements.END, {
1072
+ width: EndEventConfig.width,
1073
+ height: EndEventConfig.height,
1074
+ })
1075
+ BPMNBaseAdapter.shapeConfigMap.set(BpmnElements.INTERMEDIATE_CATCH, {
1076
+ width: IntermediateEventConfig.width,
1077
+ height: IntermediateEventConfig.height,
1078
+ })
1079
+ BPMNBaseAdapter.shapeConfigMap.set(BpmnElements.INTERMEDIATE_THROW, {
1080
+ width: IntermediateEventConfig.width,
1081
+ height: IntermediateEventConfig.height,
1082
+ })
1083
+ BPMNBaseAdapter.shapeConfigMap.set(BpmnElements.BOUNDARY, {
1084
+ width: BoundaryEventConfig.width,
1085
+ height: BoundaryEventConfig.height,
1086
+ })
1087
+ BPMNBaseAdapter.shapeConfigMap.set(BpmnElements.PARALLEL_GATEWAY, {
1088
+ width: ParallelGatewayConfig.width,
1089
+ height: ParallelGatewayConfig.height,
1090
+ })
1091
+ BPMNBaseAdapter.shapeConfigMap.set(BpmnElements.INCLUSIVE_GATEWAY, {
1092
+ width: InclusiveGatewayConfig.width,
1093
+ height: InclusiveGatewayConfig.height,
1094
+ })
1095
+ BPMNBaseAdapter.shapeConfigMap.set(BpmnElements.EXCLUSIVE_GATEWAY, {
1096
+ width: ExclusiveGatewayConfig.width,
1097
+ height: ExclusiveGatewayConfig.height,
1098
+ })
1099
+ BPMNBaseAdapter.shapeConfigMap.set(BpmnElements.SYSTEM, {
1100
+ width: ServiceTaskConfig.width,
1101
+ height: ServiceTaskConfig.height,
1102
+ })
1103
+ BPMNBaseAdapter.shapeConfigMap.set(BpmnElements.USER, {
1104
+ width: UserTaskConfig.width,
1105
+ height: UserTaskConfig.height,
1106
+ })
1107
+ BPMNBaseAdapter.shapeConfigMap.set(BpmnElements.SUBPROCESS, {
1108
+ width: SubProcessConfig.width,
1109
+ height: SubProcessConfig.height,
1110
+ })
1111
+
1112
+ class BPMNAdapter extends BPMNBaseAdapter {
1113
+ static pluginName = 'BPMNAdapter'
1114
+ private props: ExtraPropsType
1115
+ constructor(data: any) {
1116
+ super(data)
1117
+ const { lf, props } = data
1118
+ lf.adapterIn = this.adapterXmlIn
1119
+ lf.adapterOut = this.adapterXmlOut
1120
+ this.props = props
1121
+ }
1122
+ adapterXmlIn = (bpmnData: any) => {
1123
+ const json = lfXml2Json(bpmnData)
1124
+ return this.adapterIn(json, this.props)
1125
+ }
1126
+ adapterXmlOut = (data: any) => {
1127
+ const outData = this.adapterOut(data, this.props)
1128
+ return lfJson2Xml(outData)
1129
+ }
1130
+ }
1131
+
1132
+ export { BPMNBaseAdapter, BPMNAdapter, convertNormalToXml, convertXmlToNormal }
1133
+
1134
+ export default BPMNAdapter