@yh-ui/flow 0.1.21

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 (354) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +234 -0
  3. package/dist/Flow.d.vue.ts +306 -0
  4. package/dist/Flow.vue +959 -0
  5. package/dist/Flow.vue.d.ts +306 -0
  6. package/dist/__tests__/ai-workflow.ssr.test.cjs +352 -0
  7. package/dist/__tests__/ai-workflow.ssr.test.d.ts +1 -0
  8. package/dist/__tests__/ai-workflow.ssr.test.mjs +283 -0
  9. package/dist/__tests__/ai-workflow.test.cjs +109 -0
  10. package/dist/__tests__/ai-workflow.test.d.ts +1 -0
  11. package/dist/__tests__/ai-workflow.test.mjs +112 -0
  12. package/dist/__tests__/bpmn.ssr.test.cjs +278 -0
  13. package/dist/__tests__/bpmn.ssr.test.d.ts +1 -0
  14. package/dist/__tests__/bpmn.ssr.test.mjs +237 -0
  15. package/dist/__tests__/bpmn.test.cjs +103 -0
  16. package/dist/__tests__/bpmn.test.d.ts +1 -0
  17. package/dist/__tests__/bpmn.test.mjs +106 -0
  18. package/dist/__tests__/custom-types.test.cjs +300 -0
  19. package/dist/__tests__/custom-types.test.d.ts +1 -0
  20. package/dist/__tests__/custom-types.test.mjs +248 -0
  21. package/dist/__tests__/edge.test.cjs +56 -0
  22. package/dist/__tests__/edge.test.d.ts +1 -0
  23. package/dist/__tests__/edge.test.mjs +69 -0
  24. package/dist/__tests__/event-bus.test.cjs +80 -0
  25. package/dist/__tests__/event-bus.test.d.ts +1 -0
  26. package/dist/__tests__/event-bus.test.mjs +51 -0
  27. package/dist/__tests__/flow.ssr.test.cjs +156 -0
  28. package/dist/__tests__/flow.ssr.test.d.ts +1 -0
  29. package/dist/__tests__/flow.ssr.test.mjs +112 -0
  30. package/dist/__tests__/geometry.test.cjs +191 -0
  31. package/dist/__tests__/geometry.test.d.ts +1 -0
  32. package/dist/__tests__/geometry.test.mjs +105 -0
  33. package/dist/__tests__/graph.test.cjs +115 -0
  34. package/dist/__tests__/graph.test.d.ts +1 -0
  35. package/dist/__tests__/graph.test.mjs +85 -0
  36. package/dist/__tests__/history-plugin.test.cjs +191 -0
  37. package/dist/__tests__/history-plugin.test.d.ts +1 -0
  38. package/dist/__tests__/history-plugin.test.mjs +161 -0
  39. package/dist/__tests__/history.test.cjs +81 -0
  40. package/dist/__tests__/history.test.d.ts +1 -0
  41. package/dist/__tests__/history.test.mjs +43 -0
  42. package/dist/__tests__/layout.test.cjs +213 -0
  43. package/dist/__tests__/layout.test.d.ts +1 -0
  44. package/dist/__tests__/layout.test.mjs +170 -0
  45. package/dist/__tests__/node-edit-panel.ssr.test.cjs +168 -0
  46. package/dist/__tests__/node-edit-panel.ssr.test.d.ts +1 -0
  47. package/dist/__tests__/node-edit-panel.ssr.test.mjs +118 -0
  48. package/dist/__tests__/node-group-plugin.test.cjs +235 -0
  49. package/dist/__tests__/node-group-plugin.test.d.ts +1 -0
  50. package/dist/__tests__/node-group-plugin.test.mjs +187 -0
  51. package/dist/__tests__/node-handles.test.cjs +340 -0
  52. package/dist/__tests__/node-handles.test.d.ts +1 -0
  53. package/dist/__tests__/node-handles.test.mjs +230 -0
  54. package/dist/__tests__/plugin.test.cjs +151 -0
  55. package/dist/__tests__/plugin.test.d.ts +1 -0
  56. package/dist/__tests__/plugin.test.mjs +116 -0
  57. package/dist/__tests__/transform.test.cjs +58 -0
  58. package/dist/__tests__/transform.test.d.ts +1 -0
  59. package/dist/__tests__/transform.test.mjs +38 -0
  60. package/dist/__tests__/useAlignment.test.cjs +91 -0
  61. package/dist/__tests__/useAlignment.test.d.ts +1 -0
  62. package/dist/__tests__/useAlignment.test.mjs +52 -0
  63. package/dist/__tests__/useEdges.test.cjs +117 -0
  64. package/dist/__tests__/useEdges.test.d.ts +1 -0
  65. package/dist/__tests__/useEdges.test.mjs +80 -0
  66. package/dist/__tests__/useKeyboard.test.cjs +88 -0
  67. package/dist/__tests__/useKeyboard.test.d.ts +1 -0
  68. package/dist/__tests__/useKeyboard.test.mjs +56 -0
  69. package/dist/__tests__/useNodes.test.cjs +150 -0
  70. package/dist/__tests__/useNodes.test.d.ts +1 -0
  71. package/dist/__tests__/useNodes.test.mjs +80 -0
  72. package/dist/__tests__/useSelection.test.cjs +112 -0
  73. package/dist/__tests__/useSelection.test.d.ts +1 -0
  74. package/dist/__tests__/useSelection.test.mjs +76 -0
  75. package/dist/__tests__/useViewport.test.cjs +171 -0
  76. package/dist/__tests__/useViewport.test.d.ts +1 -0
  77. package/dist/__tests__/useViewport.test.mjs +82 -0
  78. package/dist/__tests__/utils/ssr.cjs +124 -0
  79. package/dist/__tests__/utils/ssr.d.ts +33 -0
  80. package/dist/__tests__/utils/ssr.mjs +129 -0
  81. package/dist/__tests__/validation.test.cjs +95 -0
  82. package/dist/__tests__/validation.test.d.ts +1 -0
  83. package/dist/__tests__/validation.test.mjs +36 -0
  84. package/dist/components/AiNodeEditPanel.d.vue.ts +13 -0
  85. package/dist/components/AiNodeEditPanel.vue +413 -0
  86. package/dist/components/AiNodeEditPanel.vue.d.ts +13 -0
  87. package/dist/components/EdgeEditPanel.d.vue.ts +14 -0
  88. package/dist/components/EdgeEditPanel.vue +205 -0
  89. package/dist/components/EdgeEditPanel.vue.d.ts +14 -0
  90. package/dist/components/NodeEditPanel.d.vue.ts +13 -0
  91. package/dist/components/NodeEditPanel.vue +214 -0
  92. package/dist/components/NodeEditPanel.vue.d.ts +13 -0
  93. package/dist/components/edges/BaseEdge.d.vue.ts +23 -0
  94. package/dist/components/edges/BaseEdge.vue +55 -0
  95. package/dist/components/edges/BaseEdge.vue.d.ts +23 -0
  96. package/dist/components/edges/BezierEdge.d.vue.ts +22 -0
  97. package/dist/components/edges/BezierEdge.vue +57 -0
  98. package/dist/components/edges/BezierEdge.vue.d.ts +22 -0
  99. package/dist/components/edges/DataFlowEdge.d.vue.ts +41 -0
  100. package/dist/components/edges/DataFlowEdge.vue +211 -0
  101. package/dist/components/edges/DataFlowEdge.vue.d.ts +41 -0
  102. package/dist/components/edges/SmoothEdge.d.vue.ts +22 -0
  103. package/dist/components/edges/SmoothEdge.vue +53 -0
  104. package/dist/components/edges/SmoothEdge.vue.d.ts +22 -0
  105. package/dist/components/edges/StepEdge.d.vue.ts +22 -0
  106. package/dist/components/edges/StepEdge.vue +42 -0
  107. package/dist/components/edges/StepEdge.vue.d.ts +22 -0
  108. package/dist/components/edges/index.cjs +41 -0
  109. package/dist/components/edges/index.d.ts +5 -0
  110. package/dist/components/edges/index.mjs +5 -0
  111. package/dist/components/nodes/BaseNode.d.vue.ts +25 -0
  112. package/dist/components/nodes/BaseNode.vue +93 -0
  113. package/dist/components/nodes/BaseNode.vue.d.ts +25 -0
  114. package/dist/components/nodes/CustomNode.d.vue.ts +36 -0
  115. package/dist/components/nodes/CustomNode.vue +44 -0
  116. package/dist/components/nodes/CustomNode.vue.d.ts +36 -0
  117. package/dist/components/nodes/DatabaseNode.d.vue.ts +19 -0
  118. package/dist/components/nodes/DatabaseNode.vue +62 -0
  119. package/dist/components/nodes/DatabaseNode.vue.d.ts +19 -0
  120. package/dist/components/nodes/DiamondNode.d.vue.ts +19 -0
  121. package/dist/components/nodes/DiamondNode.vue +62 -0
  122. package/dist/components/nodes/DiamondNode.vue.d.ts +19 -0
  123. package/dist/components/nodes/GroupNode.d.vue.ts +31 -0
  124. package/dist/components/nodes/GroupNode.vue +48 -0
  125. package/dist/components/nodes/GroupNode.vue.d.ts +31 -0
  126. package/dist/components/nodes/InputNode.d.vue.ts +23 -0
  127. package/dist/components/nodes/InputNode.vue +63 -0
  128. package/dist/components/nodes/InputNode.vue.d.ts +23 -0
  129. package/dist/components/nodes/NodeResizer.d.vue.ts +27 -0
  130. package/dist/components/nodes/NodeResizer.vue +89 -0
  131. package/dist/components/nodes/NodeResizer.vue.d.ts +27 -0
  132. package/dist/components/nodes/NodeToolbar.d.vue.ts +32 -0
  133. package/dist/components/nodes/NodeToolbar.vue +101 -0
  134. package/dist/components/nodes/NodeToolbar.vue.d.ts +32 -0
  135. package/dist/components/nodes/OutputNode.d.vue.ts +21 -0
  136. package/dist/components/nodes/OutputNode.vue +53 -0
  137. package/dist/components/nodes/OutputNode.vue.d.ts +21 -0
  138. package/dist/components/nodes/ai-workflow/AiAgentNode.d.vue.ts +20 -0
  139. package/dist/components/nodes/ai-workflow/AiAgentNode.vue +59 -0
  140. package/dist/components/nodes/ai-workflow/AiAgentNode.vue.d.ts +20 -0
  141. package/dist/components/nodes/ai-workflow/AiConditionNode.d.vue.ts +19 -0
  142. package/dist/components/nodes/ai-workflow/AiConditionNode.vue +65 -0
  143. package/dist/components/nodes/ai-workflow/AiConditionNode.vue.d.ts +19 -0
  144. package/dist/components/nodes/ai-workflow/AiEndNode.d.vue.ts +19 -0
  145. package/dist/components/nodes/ai-workflow/AiEndNode.vue +47 -0
  146. package/dist/components/nodes/ai-workflow/AiEndNode.vue.d.ts +19 -0
  147. package/dist/components/nodes/ai-workflow/AiLlmNode.d.vue.ts +19 -0
  148. package/dist/components/nodes/ai-workflow/AiLlmNode.vue +64 -0
  149. package/dist/components/nodes/ai-workflow/AiLlmNode.vue.d.ts +19 -0
  150. package/dist/components/nodes/ai-workflow/AiMemoryNode.d.vue.ts +19 -0
  151. package/dist/components/nodes/ai-workflow/AiMemoryNode.vue +59 -0
  152. package/dist/components/nodes/ai-workflow/AiMemoryNode.vue.d.ts +19 -0
  153. package/dist/components/nodes/ai-workflow/AiPromptNode.d.vue.ts +19 -0
  154. package/dist/components/nodes/ai-workflow/AiPromptNode.vue +61 -0
  155. package/dist/components/nodes/ai-workflow/AiPromptNode.vue.d.ts +19 -0
  156. package/dist/components/nodes/ai-workflow/AiStartNode.d.vue.ts +19 -0
  157. package/dist/components/nodes/ai-workflow/AiStartNode.vue +47 -0
  158. package/dist/components/nodes/ai-workflow/AiStartNode.vue.d.ts +19 -0
  159. package/dist/components/nodes/ai-workflow/AiToolNode.d.vue.ts +19 -0
  160. package/dist/components/nodes/ai-workflow/AiToolNode.vue +59 -0
  161. package/dist/components/nodes/ai-workflow/AiToolNode.vue.d.ts +19 -0
  162. package/dist/components/nodes/ai-workflow/index.cjs +109 -0
  163. package/dist/components/nodes/ai-workflow/index.d.ts +23 -0
  164. package/dist/components/nodes/ai-workflow/index.mjs +37 -0
  165. package/dist/components/nodes/bpmn/BpmnEndEvent.d.vue.ts +19 -0
  166. package/dist/components/nodes/bpmn/BpmnEndEvent.vue +50 -0
  167. package/dist/components/nodes/bpmn/BpmnEndEvent.vue.d.ts +19 -0
  168. package/dist/components/nodes/bpmn/BpmnExclusiveGateway.d.vue.ts +19 -0
  169. package/dist/components/nodes/bpmn/BpmnExclusiveGateway.vue +60 -0
  170. package/dist/components/nodes/bpmn/BpmnExclusiveGateway.vue.d.ts +19 -0
  171. package/dist/components/nodes/bpmn/BpmnInclusiveGateway.d.vue.ts +19 -0
  172. package/dist/components/nodes/bpmn/BpmnInclusiveGateway.vue +60 -0
  173. package/dist/components/nodes/bpmn/BpmnInclusiveGateway.vue.d.ts +19 -0
  174. package/dist/components/nodes/bpmn/BpmnParallelGateway.d.vue.ts +19 -0
  175. package/dist/components/nodes/bpmn/BpmnParallelGateway.vue +60 -0
  176. package/dist/components/nodes/bpmn/BpmnParallelGateway.vue.d.ts +19 -0
  177. package/dist/components/nodes/bpmn/BpmnServiceTask.d.vue.ts +19 -0
  178. package/dist/components/nodes/bpmn/BpmnServiceTask.vue +55 -0
  179. package/dist/components/nodes/bpmn/BpmnServiceTask.vue.d.ts +19 -0
  180. package/dist/components/nodes/bpmn/BpmnStartEvent.d.vue.ts +19 -0
  181. package/dist/components/nodes/bpmn/BpmnStartEvent.vue +50 -0
  182. package/dist/components/nodes/bpmn/BpmnStartEvent.vue.d.ts +19 -0
  183. package/dist/components/nodes/bpmn/BpmnTask.d.vue.ts +19 -0
  184. package/dist/components/nodes/bpmn/BpmnTask.vue +54 -0
  185. package/dist/components/nodes/bpmn/BpmnTask.vue.d.ts +19 -0
  186. package/dist/components/nodes/bpmn/BpmnUserTask.d.vue.ts +19 -0
  187. package/dist/components/nodes/bpmn/BpmnUserTask.vue +55 -0
  188. package/dist/components/nodes/bpmn/BpmnUserTask.vue.d.ts +19 -0
  189. package/dist/components/nodes/bpmn/index.cjs +109 -0
  190. package/dist/components/nodes/bpmn/index.d.ts +23 -0
  191. package/dist/components/nodes/bpmn/index.mjs +37 -0
  192. package/dist/components/nodes/index.cjs +246 -0
  193. package/dist/components/nodes/index.d.ts +13 -0
  194. package/dist/components/nodes/index.mjs +44 -0
  195. package/dist/core/FlowContext.cjs +21 -0
  196. package/dist/core/FlowContext.d.ts +10 -0
  197. package/dist/core/FlowContext.mjs +13 -0
  198. package/dist/core/index.cjs +104 -0
  199. package/dist/core/index.d.ts +9 -0
  200. package/dist/core/index.mjs +9 -0
  201. package/dist/core/useAlignment.cjs +81 -0
  202. package/dist/core/useAlignment.d.ts +33 -0
  203. package/dist/core/useAlignment.mjs +71 -0
  204. package/dist/core/useEdges.cjs +132 -0
  205. package/dist/core/useEdges.d.ts +29 -0
  206. package/dist/core/useEdges.mjs +89 -0
  207. package/dist/core/useFlow.cjs +40 -0
  208. package/dist/core/useFlow.d.ts +31 -0
  209. package/dist/core/useFlow.mjs +32 -0
  210. package/dist/core/useHistory.cjs +63 -0
  211. package/dist/core/useHistory.d.ts +15 -0
  212. package/dist/core/useHistory.mjs +54 -0
  213. package/dist/core/useKeyboard.cjs +54 -0
  214. package/dist/core/useKeyboard.d.ts +18 -0
  215. package/dist/core/useKeyboard.mjs +45 -0
  216. package/dist/core/useNodeDistribution.cjs +171 -0
  217. package/dist/core/useNodeDistribution.d.ts +12 -0
  218. package/dist/core/useNodeDistribution.mjs +145 -0
  219. package/dist/core/useNodes.cjs +146 -0
  220. package/dist/core/useNodes.d.ts +26 -0
  221. package/dist/core/useNodes.mjs +101 -0
  222. package/dist/core/useSelection.cjs +83 -0
  223. package/dist/core/useSelection.d.ts +18 -0
  224. package/dist/core/useSelection.mjs +53 -0
  225. package/dist/core/useViewport.cjs +157 -0
  226. package/dist/core/useViewport.d.ts +65 -0
  227. package/dist/core/useViewport.mjs +125 -0
  228. package/dist/flow.cjs +240 -0
  229. package/dist/flow.d.ts +276 -0
  230. package/dist/flow.mjs +230 -0
  231. package/dist/index.cjs +378 -0
  232. package/dist/index.d.ts +28 -0
  233. package/dist/index.mjs +50 -0
  234. package/dist/plugins/index.cjs +96 -0
  235. package/dist/plugins/index.d.ts +34 -0
  236. package/dist/plugins/index.mjs +47 -0
  237. package/dist/plugins/plugin.cjs +117 -0
  238. package/dist/plugins/plugin.d.ts +72 -0
  239. package/dist/plugins/plugin.mjs +110 -0
  240. package/dist/plugins/plugins/controls.cjs +38 -0
  241. package/dist/plugins/plugins/controls.d.ts +12 -0
  242. package/dist/plugins/plugins/controls.mjs +28 -0
  243. package/dist/plugins/plugins/export.cjs +102 -0
  244. package/dist/plugins/plugins/export.d.ts +12 -0
  245. package/dist/plugins/plugins/export.mjs +89 -0
  246. package/dist/plugins/plugins/grid.cjs +36 -0
  247. package/dist/plugins/plugins/grid.d.ts +11 -0
  248. package/dist/plugins/plugins/grid.mjs +26 -0
  249. package/dist/plugins/plugins/history.cjs +140 -0
  250. package/dist/plugins/plugins/history.d.ts +53 -0
  251. package/dist/plugins/plugins/history.mjs +132 -0
  252. package/dist/plugins/plugins/index.cjs +104 -0
  253. package/dist/plugins/plugins/index.d.ts +9 -0
  254. package/dist/plugins/plugins/index.mjs +9 -0
  255. package/dist/plugins/plugins/keyboard.cjs +27 -0
  256. package/dist/plugins/plugins/keyboard.d.ts +10 -0
  257. package/dist/plugins/plugins/keyboard.mjs +18 -0
  258. package/dist/plugins/plugins/layout.cjs +275 -0
  259. package/dist/plugins/plugins/layout.d.ts +34 -0
  260. package/dist/plugins/plugins/layout.mjs +246 -0
  261. package/dist/plugins/plugins/minimap.cjs +60 -0
  262. package/dist/plugins/plugins/minimap.d.ts +25 -0
  263. package/dist/plugins/plugins/minimap.mjs +50 -0
  264. package/dist/plugins/plugins/node-group.cjs +209 -0
  265. package/dist/plugins/plugins/node-group.d.ts +26 -0
  266. package/dist/plugins/plugins/node-group.mjs +178 -0
  267. package/dist/plugins/plugins/snap.cjs +36 -0
  268. package/dist/plugins/plugins/snap.d.ts +12 -0
  269. package/dist/plugins/plugins/snap.mjs +26 -0
  270. package/dist/renderer/AlignmentLines.d.vue.ts +5 -0
  271. package/dist/renderer/AlignmentLines.vue +113 -0
  272. package/dist/renderer/AlignmentLines.vue.d.ts +5 -0
  273. package/dist/renderer/Background.d.vue.ts +7 -0
  274. package/dist/renderer/Background.vue +86 -0
  275. package/dist/renderer/Background.vue.d.ts +7 -0
  276. package/dist/renderer/Controls.d.vue.ts +13 -0
  277. package/dist/renderer/Controls.vue +82 -0
  278. package/dist/renderer/Controls.vue.d.ts +13 -0
  279. package/dist/renderer/EdgeHandlesRenderer.d.vue.ts +11 -0
  280. package/dist/renderer/EdgeHandlesRenderer.vue +75 -0
  281. package/dist/renderer/EdgeHandlesRenderer.vue.d.ts +11 -0
  282. package/dist/renderer/EdgeRenderer.d.vue.ts +39 -0
  283. package/dist/renderer/EdgeRenderer.vue +204 -0
  284. package/dist/renderer/EdgeRenderer.vue.d.ts +39 -0
  285. package/dist/renderer/FlowBackground.d.vue.ts +11 -0
  286. package/dist/renderer/FlowBackground.vue +82 -0
  287. package/dist/renderer/FlowBackground.vue.d.ts +11 -0
  288. package/dist/renderer/Minimap.d.vue.ts +30 -0
  289. package/dist/renderer/Minimap.vue +290 -0
  290. package/dist/renderer/Minimap.vue.d.ts +30 -0
  291. package/dist/renderer/NodeRenderer.d.vue.ts +56 -0
  292. package/dist/renderer/NodeRenderer.vue +328 -0
  293. package/dist/renderer/NodeRenderer.vue.d.ts +56 -0
  294. package/dist/renderer/SelectionBox.d.vue.ts +11 -0
  295. package/dist/renderer/SelectionBox.vue +28 -0
  296. package/dist/renderer/SelectionBox.vue.d.ts +11 -0
  297. package/dist/types/edge.cjs +13 -0
  298. package/dist/types/edge.d.ts +65 -0
  299. package/dist/types/edge.mjs +6 -0
  300. package/dist/types/events.cjs +1 -0
  301. package/dist/types/events.d.ts +115 -0
  302. package/dist/types/events.mjs +0 -0
  303. package/dist/types/index.cjs +1 -0
  304. package/dist/types/index.d.ts +366 -0
  305. package/dist/types/index.mjs +0 -0
  306. package/dist/types/node.cjs +9 -0
  307. package/dist/types/node.d.ts +90 -0
  308. package/dist/types/node.mjs +3 -0
  309. package/dist/types/viewport.cjs +42 -0
  310. package/dist/types/viewport.d.ts +62 -0
  311. package/dist/types/viewport.mjs +36 -0
  312. package/dist/utils/bpmn-engine.cjs +390 -0
  313. package/dist/utils/bpmn-engine.d.ts +164 -0
  314. package/dist/utils/bpmn-engine.mjs +378 -0
  315. package/dist/utils/bpmn.cjs +492 -0
  316. package/dist/utils/bpmn.d.ts +53 -0
  317. package/dist/utils/bpmn.mjs +430 -0
  318. package/dist/utils/collaboration.cjs +537 -0
  319. package/dist/utils/collaboration.d.ts +189 -0
  320. package/dist/utils/collaboration.mjs +521 -0
  321. package/dist/utils/custom-types.cjs +138 -0
  322. package/dist/utils/custom-types.d.ts +78 -0
  323. package/dist/utils/custom-types.mjs +108 -0
  324. package/dist/utils/edge.cjs +235 -0
  325. package/dist/utils/edge.d.ts +79 -0
  326. package/dist/utils/edge.mjs +172 -0
  327. package/dist/utils/event-bus.cjs +91 -0
  328. package/dist/utils/event-bus.d.ts +39 -0
  329. package/dist/utils/event-bus.mjs +82 -0
  330. package/dist/utils/geometry.cjs +178 -0
  331. package/dist/utils/geometry.d.ts +186 -0
  332. package/dist/utils/geometry.mjs +144 -0
  333. package/dist/utils/graph.cjs +158 -0
  334. package/dist/utils/graph.d.ts +40 -0
  335. package/dist/utils/graph.mjs +147 -0
  336. package/dist/utils/index.cjs +137 -0
  337. package/dist/utils/index.d.ts +12 -0
  338. package/dist/utils/index.mjs +12 -0
  339. package/dist/utils/performance.cjs +94 -0
  340. package/dist/utils/performance.d.ts +18 -0
  341. package/dist/utils/performance.mjs +82 -0
  342. package/dist/utils/screenshot.cjs +87 -0
  343. package/dist/utils/screenshot.d.ts +22 -0
  344. package/dist/utils/screenshot.mjs +66 -0
  345. package/dist/utils/theme.cjs +228 -0
  346. package/dist/utils/theme.d.ts +92 -0
  347. package/dist/utils/theme.mjs +217 -0
  348. package/dist/utils/transform.cjs +76 -0
  349. package/dist/utils/transform.d.ts +45 -0
  350. package/dist/utils/transform.mjs +57 -0
  351. package/dist/utils/validation.cjs +107 -0
  352. package/dist/utils/validation.d.ts +29 -0
  353. package/dist/utils/validation.mjs +85 -0
  354. package/package.json +61 -0
@@ -0,0 +1,283 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import AiLlmNode from "../components/nodes/ai-workflow/AiLlmNode.vue";
3
+ import AiPromptNode from "../components/nodes/ai-workflow/AiPromptNode.vue";
4
+ import AiAgentNode from "../components/nodes/ai-workflow/AiAgentNode.vue";
5
+ import AiToolNode from "../components/nodes/ai-workflow/AiToolNode.vue";
6
+ import AiConditionNode from "../components/nodes/ai-workflow/AiConditionNode.vue";
7
+ import AiStartNode from "../components/nodes/ai-workflow/AiStartNode.vue";
8
+ import AiEndNode from "../components/nodes/ai-workflow/AiEndNode.vue";
9
+ import AiMemoryNode from "../components/nodes/ai-workflow/AiMemoryNode.vue";
10
+ import { renderSSR, expectSSRContains, testHydration } from "./utils/ssr.mjs";
11
+ describe("AI Workflow Nodes SSR", () => {
12
+ describe("AiLlmNode", () => {
13
+ it("should render LLM node in SSR", async () => {
14
+ const html = await renderSSR(AiLlmNode, {
15
+ id: "llm-1",
16
+ type: "ai-llm",
17
+ data: { label: "GPT-4", model: "gpt-4" },
18
+ selected: false,
19
+ dragging: false,
20
+ connectable: true
21
+ });
22
+ expectSSRContains(html, "gpt-4");
23
+ });
24
+ it("should render with model info in SSR", async () => {
25
+ const html = await renderSSR(AiLlmNode, {
26
+ id: "llm-1",
27
+ type: "ai-llm",
28
+ data: { label: "LLM", model: "gpt-4", temperature: 0.7 },
29
+ selected: false,
30
+ dragging: false,
31
+ connectable: true
32
+ });
33
+ expectSSRContains(html, "gpt-4");
34
+ });
35
+ it("should hydrate without mismatch", async () => {
36
+ const result = await testHydration(AiLlmNode, {
37
+ id: "llm-1",
38
+ type: "ai-llm",
39
+ data: { label: "GPT-4", model: "gpt-4" },
40
+ selected: false,
41
+ dragging: false,
42
+ connectable: true
43
+ });
44
+ expect(result.isMatch).toBe(true);
45
+ });
46
+ });
47
+ describe("AiPromptNode", () => {
48
+ it("should render prompt node in SSR", async () => {
49
+ const html = await renderSSR(AiPromptNode, {
50
+ id: "prompt-1",
51
+ type: "ai-prompt",
52
+ data: { label: "Prompt", prompt: "Hello world" },
53
+ selected: false,
54
+ dragging: false,
55
+ connectable: true
56
+ });
57
+ expectSSRContains(html, "\u63D0\u793A\u8BCD");
58
+ });
59
+ it("should render with prompt content in SSR", async () => {
60
+ const html = await renderSSR(AiPromptNode, {
61
+ id: "prompt-1",
62
+ type: "ai-prompt",
63
+ data: { label: "Prompt", prompt: "Summarize this text" },
64
+ selected: false,
65
+ dragging: false,
66
+ connectable: true
67
+ });
68
+ expectSSRContains(html, "Summarize");
69
+ });
70
+ it("should hydrate without mismatch", async () => {
71
+ const result = await testHydration(AiPromptNode, {
72
+ id: "prompt-1",
73
+ type: "ai-prompt",
74
+ data: { label: "Prompt", prompt: "Test prompt" },
75
+ selected: false,
76
+ dragging: false,
77
+ connectable: true
78
+ });
79
+ expect(result.isMatch).toBe(true);
80
+ });
81
+ });
82
+ describe("AiAgentNode", () => {
83
+ it("should render agent node in SSR", async () => {
84
+ const html = await renderSSR(AiAgentNode, {
85
+ id: "agent-1",
86
+ type: "ai-agent",
87
+ data: { label: "Agent", tools: ["tool1", "tool2"] },
88
+ selected: false,
89
+ dragging: false,
90
+ connectable: true
91
+ });
92
+ expectSSRContains(html, "Agent");
93
+ });
94
+ it("should render tools count in SSR", async () => {
95
+ const html = await renderSSR(AiAgentNode, {
96
+ id: "agent-1",
97
+ type: "ai-agent",
98
+ data: { label: "Agent", tools: ["search", "calculator"] },
99
+ selected: false,
100
+ dragging: false,
101
+ connectable: true
102
+ });
103
+ expectSSRContains(html, "2");
104
+ });
105
+ it("should hydrate without mismatch", async () => {
106
+ const result = await testHydration(AiAgentNode, {
107
+ id: "agent-1",
108
+ type: "ai-agent",
109
+ data: { label: "Agent", tools: ["tool1"] },
110
+ selected: false,
111
+ dragging: false,
112
+ connectable: true
113
+ });
114
+ expect(result.isMatch).toBe(true);
115
+ });
116
+ });
117
+ describe("AiToolNode", () => {
118
+ it("should render tool node in SSR", async () => {
119
+ const html = await renderSSR(AiToolNode, {
120
+ id: "tool-1",
121
+ type: "ai-tool",
122
+ data: { label: "Search Tool", toolName: "search" },
123
+ selected: false,
124
+ dragging: false,
125
+ connectable: true
126
+ });
127
+ expectSSRContains(html, "\u5DE5\u5177");
128
+ expectSSRContains(html, "search");
129
+ });
130
+ it("should render with tool name in SSR", async () => {
131
+ const html = await renderSSR(AiToolNode, {
132
+ id: "tool-1",
133
+ type: "ai-tool",
134
+ data: { label: "Tool", toolName: "calculator" },
135
+ selected: false,
136
+ dragging: false,
137
+ connectable: true
138
+ });
139
+ expectSSRContains(html, "calculator");
140
+ });
141
+ it("should hydrate without mismatch", async () => {
142
+ const result = await testHydration(AiToolNode, {
143
+ id: "tool-1",
144
+ type: "ai-tool",
145
+ data: { label: "Search", toolName: "search" },
146
+ selected: false,
147
+ dragging: false,
148
+ connectable: true
149
+ });
150
+ expect(result.isMatch).toBe(true);
151
+ });
152
+ });
153
+ describe("AiConditionNode", () => {
154
+ it("should render condition node in SSR", async () => {
155
+ const html = await renderSSR(AiConditionNode, {
156
+ id: "cond-1",
157
+ type: "ai-condition",
158
+ data: { label: "Condition", condition: "if" },
159
+ selected: false,
160
+ dragging: false,
161
+ connectable: true
162
+ });
163
+ expectSSRContains(html, "\u6761\u4EF6\u5206\u652F");
164
+ });
165
+ it("should render with condition text in SSR", async () => {
166
+ const html = await renderSSR(AiConditionNode, {
167
+ id: "cond-1",
168
+ type: "ai-condition",
169
+ data: { label: "Check", condition: "score > 60" },
170
+ selected: false,
171
+ dragging: false,
172
+ connectable: true
173
+ });
174
+ expectSSRContains(html, "score");
175
+ });
176
+ it("should hydrate without mismatch", async () => {
177
+ const result = await testHydration(AiConditionNode, {
178
+ id: "cond-1",
179
+ type: "ai-condition",
180
+ data: { label: "Condition", condition: "if" },
181
+ selected: false,
182
+ dragging: false,
183
+ connectable: true
184
+ });
185
+ expect(result.isMatch).toBe(true);
186
+ });
187
+ });
188
+ describe("AiStartNode", () => {
189
+ it("should render start node in SSR", async () => {
190
+ const html = await renderSSR(AiStartNode, {
191
+ id: "start-1",
192
+ type: "ai-start",
193
+ data: { label: "Start" },
194
+ selected: false,
195
+ dragging: false,
196
+ connectable: true
197
+ });
198
+ expectSSRContains(html, "\u25B6");
199
+ });
200
+ it("should hydrate without mismatch", async () => {
201
+ const result = await testHydration(AiStartNode, {
202
+ id: "start-1",
203
+ type: "ai-start",
204
+ data: { label: "Start" },
205
+ selected: false,
206
+ dragging: false,
207
+ connectable: true
208
+ });
209
+ expect(result.isMatch).toBe(true);
210
+ });
211
+ });
212
+ describe("AiEndNode", () => {
213
+ it("should render end node in SSR", async () => {
214
+ const html = await renderSSR(AiEndNode, {
215
+ id: "end-1",
216
+ type: "ai-end",
217
+ data: { label: "End" },
218
+ selected: false,
219
+ dragging: false,
220
+ connectable: true
221
+ });
222
+ expectSSRContains(html, "\u25A0");
223
+ });
224
+ it("should render with status in SSR", async () => {
225
+ const html = await renderSSR(AiEndNode, {
226
+ id: "end-1",
227
+ type: "ai-end",
228
+ data: { label: "End", status: "success" },
229
+ selected: false,
230
+ dragging: false,
231
+ connectable: true
232
+ });
233
+ expectSSRContains(html, "\u25A0");
234
+ });
235
+ it("should hydrate without mismatch", async () => {
236
+ const result = await testHydration(AiEndNode, {
237
+ id: "end-1",
238
+ type: "ai-end",
239
+ data: { label: "End" },
240
+ selected: false,
241
+ dragging: false,
242
+ connectable: true
243
+ });
244
+ expect(result.isMatch).toBe(true);
245
+ });
246
+ });
247
+ describe("AiMemoryNode", () => {
248
+ it("should render memory node in SSR", async () => {
249
+ const html = await renderSSR(AiMemoryNode, {
250
+ id: "mem-1",
251
+ type: "ai-memory",
252
+ data: { label: "Memory", memoryType: "buffer" },
253
+ selected: false,
254
+ dragging: false,
255
+ connectable: true
256
+ });
257
+ expectSSRContains(html, "\u8BB0\u5FC6");
258
+ expectSSRContains(html, "buffer");
259
+ });
260
+ it("should render with memory type in SSR", async () => {
261
+ const html = await renderSSR(AiMemoryNode, {
262
+ id: "mem-1",
263
+ type: "ai-memory",
264
+ data: { label: "Memory", memoryType: "vector" },
265
+ selected: false,
266
+ dragging: false,
267
+ connectable: true
268
+ });
269
+ expectSSRContains(html, "vector");
270
+ });
271
+ it("should hydrate without mismatch", async () => {
272
+ const result = await testHydration(AiMemoryNode, {
273
+ id: "mem-1",
274
+ type: "ai-memory",
275
+ data: { label: "Memory", memoryType: "buffer" },
276
+ selected: false,
277
+ dragging: false,
278
+ connectable: true
279
+ });
280
+ expect(result.isMatch).toBe(true);
281
+ });
282
+ });
283
+ });
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+
3
+ var _vitest = require("vitest");
4
+ var _customTypes = require("../utils/custom-types.cjs");
5
+ var _aiWorkflow = require("../components/nodes/ai-workflow/index.cjs");
6
+ (0, _vitest.describe)("flow/components/nodes/ai-workflow", () => {
7
+ (0, _vitest.beforeEach)(() => {
8
+ (0, _customTypes.clearCustomTypes)();
9
+ });
10
+ (0, _vitest.describe)("AI Workflow Node Types", () => {
11
+ (0, _vitest.it)("should have correct AI workflow node type constants", () => {
12
+ (0, _vitest.expect)(_aiWorkflow.AI_WORKFLOW_NODE_TYPES.LLM).toBe("ai-llm");
13
+ (0, _vitest.expect)(_aiWorkflow.AI_WORKFLOW_NODE_TYPES.Prompt).toBe("ai-prompt");
14
+ (0, _vitest.expect)(_aiWorkflow.AI_WORKFLOW_NODE_TYPES.Agent).toBe("ai-agent");
15
+ (0, _vitest.expect)(_aiWorkflow.AI_WORKFLOW_NODE_TYPES.Tool).toBe("ai-tool");
16
+ (0, _vitest.expect)(_aiWorkflow.AI_WORKFLOW_NODE_TYPES.Condition).toBe("ai-condition");
17
+ (0, _vitest.expect)(_aiWorkflow.AI_WORKFLOW_NODE_TYPES.Start).toBe("ai-start");
18
+ (0, _vitest.expect)(_aiWorkflow.AI_WORKFLOW_NODE_TYPES.End).toBe("ai-end");
19
+ (0, _vitest.expect)(_aiWorkflow.AI_WORKFLOW_NODE_TYPES.Memory).toBe("ai-memory");
20
+ });
21
+ (0, _vitest.it)("should have 8 AI workflow node types", () => {
22
+ const types = Object.values(_aiWorkflow.AI_WORKFLOW_NODE_TYPES);
23
+ (0, _vitest.expect)(types).toHaveLength(8);
24
+ });
25
+ });
26
+ (0, _vitest.describe)("AI Workflow Node Registration", () => {
27
+ (0, _vitest.it)("should register all AI workflow node types", () => {
28
+ (0, _aiWorkflow.registerAiWorkflowNodes)();
29
+ const allNodes = (0, _customTypes.getAllCustomNodes)();
30
+ (0, _vitest.expect)(allNodes).toHaveLength(8);
31
+ });
32
+ (0, _vitest.it)("should register LLM node", () => {
33
+ (0, _aiWorkflow.registerAiWorkflowNodes)();
34
+ const node = (0, _customTypes.getCustomNode)(_aiWorkflow.AI_WORKFLOW_NODE_TYPES.LLM);
35
+ (0, _vitest.expect)(node).toBeDefined();
36
+ (0, _vitest.expect)(node?.type).toBe(_aiWorkflow.AI_WORKFLOW_NODE_TYPES.LLM);
37
+ (0, _vitest.expect)(node?.component).toBeDefined();
38
+ });
39
+ (0, _vitest.it)("should register Prompt node", () => {
40
+ (0, _aiWorkflow.registerAiWorkflowNodes)();
41
+ const node = (0, _customTypes.getCustomNode)(_aiWorkflow.AI_WORKFLOW_NODE_TYPES.Prompt);
42
+ (0, _vitest.expect)(node).toBeDefined();
43
+ (0, _vitest.expect)(node?.type).toBe(_aiWorkflow.AI_WORKFLOW_NODE_TYPES.Prompt);
44
+ (0, _vitest.expect)(node?.component).toBeDefined();
45
+ });
46
+ (0, _vitest.it)("should register Agent node", () => {
47
+ (0, _aiWorkflow.registerAiWorkflowNodes)();
48
+ const node = (0, _customTypes.getCustomNode)(_aiWorkflow.AI_WORKFLOW_NODE_TYPES.Agent);
49
+ (0, _vitest.expect)(node).toBeDefined();
50
+ (0, _vitest.expect)(node?.type).toBe(_aiWorkflow.AI_WORKFLOW_NODE_TYPES.Agent);
51
+ (0, _vitest.expect)(node?.component).toBeDefined();
52
+ });
53
+ (0, _vitest.it)("should register Tool node", () => {
54
+ (0, _aiWorkflow.registerAiWorkflowNodes)();
55
+ const node = (0, _customTypes.getCustomNode)(_aiWorkflow.AI_WORKFLOW_NODE_TYPES.Tool);
56
+ (0, _vitest.expect)(node).toBeDefined();
57
+ (0, _vitest.expect)(node?.type).toBe(_aiWorkflow.AI_WORKFLOW_NODE_TYPES.Tool);
58
+ (0, _vitest.expect)(node?.component).toBeDefined();
59
+ });
60
+ (0, _vitest.it)("should register Condition node", () => {
61
+ (0, _aiWorkflow.registerAiWorkflowNodes)();
62
+ const node = (0, _customTypes.getCustomNode)(_aiWorkflow.AI_WORKFLOW_NODE_TYPES.Condition);
63
+ (0, _vitest.expect)(node).toBeDefined();
64
+ (0, _vitest.expect)(node?.type).toBe(_aiWorkflow.AI_WORKFLOW_NODE_TYPES.Condition);
65
+ (0, _vitest.expect)(node?.component).toBeDefined();
66
+ });
67
+ (0, _vitest.it)("should register Start node", () => {
68
+ (0, _aiWorkflow.registerAiWorkflowNodes)();
69
+ const node = (0, _customTypes.getCustomNode)(_aiWorkflow.AI_WORKFLOW_NODE_TYPES.Start);
70
+ (0, _vitest.expect)(node).toBeDefined();
71
+ (0, _vitest.expect)(node?.type).toBe(_aiWorkflow.AI_WORKFLOW_NODE_TYPES.Start);
72
+ (0, _vitest.expect)(node?.component).toBeDefined();
73
+ });
74
+ (0, _vitest.it)("should register End node", () => {
75
+ (0, _aiWorkflow.registerAiWorkflowNodes)();
76
+ const node = (0, _customTypes.getCustomNode)(_aiWorkflow.AI_WORKFLOW_NODE_TYPES.End);
77
+ (0, _vitest.expect)(node).toBeDefined();
78
+ (0, _vitest.expect)(node?.type).toBe(_aiWorkflow.AI_WORKFLOW_NODE_TYPES.End);
79
+ (0, _vitest.expect)(node?.component).toBeDefined();
80
+ });
81
+ (0, _vitest.it)("should register Memory node", () => {
82
+ (0, _aiWorkflow.registerAiWorkflowNodes)();
83
+ const node = (0, _customTypes.getCustomNode)(_aiWorkflow.AI_WORKFLOW_NODE_TYPES.Memory);
84
+ (0, _vitest.expect)(node).toBeDefined();
85
+ (0, _vitest.expect)(node?.type).toBe(_aiWorkflow.AI_WORKFLOW_NODE_TYPES.Memory);
86
+ (0, _vitest.expect)(node?.component).toBeDefined();
87
+ });
88
+ (0, _vitest.it)("should check if AI workflow nodes are registered", () => {
89
+ (0, _vitest.expect)((0, _customTypes.hasCustomNode)(_aiWorkflow.AI_WORKFLOW_NODE_TYPES.LLM)).toBe(false);
90
+ (0, _vitest.expect)((0, _customTypes.hasCustomNode)(_aiWorkflow.AI_WORKFLOW_NODE_TYPES.Prompt)).toBe(false);
91
+ (0, _aiWorkflow.registerAiWorkflowNodes)();
92
+ (0, _vitest.expect)((0, _customTypes.hasCustomNode)(_aiWorkflow.AI_WORKFLOW_NODE_TYPES.LLM)).toBe(true);
93
+ (0, _vitest.expect)((0, _customTypes.hasCustomNode)(_aiWorkflow.AI_WORKFLOW_NODE_TYPES.Prompt)).toBe(true);
94
+ (0, _vitest.expect)((0, _customTypes.hasCustomNode)(_aiWorkflow.AI_WORKFLOW_NODE_TYPES.Agent)).toBe(true);
95
+ (0, _vitest.expect)((0, _customTypes.hasCustomNode)(_aiWorkflow.AI_WORKFLOW_NODE_TYPES.Tool)).toBe(true);
96
+ (0, _vitest.expect)((0, _customTypes.hasCustomNode)(_aiWorkflow.AI_WORKFLOW_NODE_TYPES.Condition)).toBe(true);
97
+ (0, _vitest.expect)((0, _customTypes.hasCustomNode)(_aiWorkflow.AI_WORKFLOW_NODE_TYPES.Start)).toBe(true);
98
+ (0, _vitest.expect)((0, _customTypes.hasCustomNode)(_aiWorkflow.AI_WORKFLOW_NODE_TYPES.End)).toBe(true);
99
+ (0, _vitest.expect)((0, _customTypes.hasCustomNode)(_aiWorkflow.AI_WORKFLOW_NODE_TYPES.Memory)).toBe(true);
100
+ });
101
+ (0, _vitest.it)("should not duplicate nodes on re-registration", () => {
102
+ (0, _aiWorkflow.registerAiWorkflowNodes)();
103
+ const firstCount = (0, _customTypes.getAllCustomNodes)().length;
104
+ (0, _aiWorkflow.registerAiWorkflowNodes)();
105
+ const secondCount = (0, _customTypes.getAllCustomNodes)().length;
106
+ (0, _vitest.expect)(firstCount).toBe(secondCount);
107
+ });
108
+ });
109
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,112 @@
1
+ import { describe, it, expect, beforeEach } from "vitest";
2
+ import {
3
+ clearCustomTypes,
4
+ getCustomNode,
5
+ getAllCustomNodes,
6
+ hasCustomNode
7
+ } from "../utils/custom-types.mjs";
8
+ import { registerAiWorkflowNodes, AI_WORKFLOW_NODE_TYPES } from "../components/nodes/ai-workflow/index.mjs";
9
+ describe("flow/components/nodes/ai-workflow", () => {
10
+ beforeEach(() => {
11
+ clearCustomTypes();
12
+ });
13
+ describe("AI Workflow Node Types", () => {
14
+ it("should have correct AI workflow node type constants", () => {
15
+ expect(AI_WORKFLOW_NODE_TYPES.LLM).toBe("ai-llm");
16
+ expect(AI_WORKFLOW_NODE_TYPES.Prompt).toBe("ai-prompt");
17
+ expect(AI_WORKFLOW_NODE_TYPES.Agent).toBe("ai-agent");
18
+ expect(AI_WORKFLOW_NODE_TYPES.Tool).toBe("ai-tool");
19
+ expect(AI_WORKFLOW_NODE_TYPES.Condition).toBe("ai-condition");
20
+ expect(AI_WORKFLOW_NODE_TYPES.Start).toBe("ai-start");
21
+ expect(AI_WORKFLOW_NODE_TYPES.End).toBe("ai-end");
22
+ expect(AI_WORKFLOW_NODE_TYPES.Memory).toBe("ai-memory");
23
+ });
24
+ it("should have 8 AI workflow node types", () => {
25
+ const types = Object.values(AI_WORKFLOW_NODE_TYPES);
26
+ expect(types).toHaveLength(8);
27
+ });
28
+ });
29
+ describe("AI Workflow Node Registration", () => {
30
+ it("should register all AI workflow node types", () => {
31
+ registerAiWorkflowNodes();
32
+ const allNodes = getAllCustomNodes();
33
+ expect(allNodes).toHaveLength(8);
34
+ });
35
+ it("should register LLM node", () => {
36
+ registerAiWorkflowNodes();
37
+ const node = getCustomNode(AI_WORKFLOW_NODE_TYPES.LLM);
38
+ expect(node).toBeDefined();
39
+ expect(node?.type).toBe(AI_WORKFLOW_NODE_TYPES.LLM);
40
+ expect(node?.component).toBeDefined();
41
+ });
42
+ it("should register Prompt node", () => {
43
+ registerAiWorkflowNodes();
44
+ const node = getCustomNode(AI_WORKFLOW_NODE_TYPES.Prompt);
45
+ expect(node).toBeDefined();
46
+ expect(node?.type).toBe(AI_WORKFLOW_NODE_TYPES.Prompt);
47
+ expect(node?.component).toBeDefined();
48
+ });
49
+ it("should register Agent node", () => {
50
+ registerAiWorkflowNodes();
51
+ const node = getCustomNode(AI_WORKFLOW_NODE_TYPES.Agent);
52
+ expect(node).toBeDefined();
53
+ expect(node?.type).toBe(AI_WORKFLOW_NODE_TYPES.Agent);
54
+ expect(node?.component).toBeDefined();
55
+ });
56
+ it("should register Tool node", () => {
57
+ registerAiWorkflowNodes();
58
+ const node = getCustomNode(AI_WORKFLOW_NODE_TYPES.Tool);
59
+ expect(node).toBeDefined();
60
+ expect(node?.type).toBe(AI_WORKFLOW_NODE_TYPES.Tool);
61
+ expect(node?.component).toBeDefined();
62
+ });
63
+ it("should register Condition node", () => {
64
+ registerAiWorkflowNodes();
65
+ const node = getCustomNode(AI_WORKFLOW_NODE_TYPES.Condition);
66
+ expect(node).toBeDefined();
67
+ expect(node?.type).toBe(AI_WORKFLOW_NODE_TYPES.Condition);
68
+ expect(node?.component).toBeDefined();
69
+ });
70
+ it("should register Start node", () => {
71
+ registerAiWorkflowNodes();
72
+ const node = getCustomNode(AI_WORKFLOW_NODE_TYPES.Start);
73
+ expect(node).toBeDefined();
74
+ expect(node?.type).toBe(AI_WORKFLOW_NODE_TYPES.Start);
75
+ expect(node?.component).toBeDefined();
76
+ });
77
+ it("should register End node", () => {
78
+ registerAiWorkflowNodes();
79
+ const node = getCustomNode(AI_WORKFLOW_NODE_TYPES.End);
80
+ expect(node).toBeDefined();
81
+ expect(node?.type).toBe(AI_WORKFLOW_NODE_TYPES.End);
82
+ expect(node?.component).toBeDefined();
83
+ });
84
+ it("should register Memory node", () => {
85
+ registerAiWorkflowNodes();
86
+ const node = getCustomNode(AI_WORKFLOW_NODE_TYPES.Memory);
87
+ expect(node).toBeDefined();
88
+ expect(node?.type).toBe(AI_WORKFLOW_NODE_TYPES.Memory);
89
+ expect(node?.component).toBeDefined();
90
+ });
91
+ it("should check if AI workflow nodes are registered", () => {
92
+ expect(hasCustomNode(AI_WORKFLOW_NODE_TYPES.LLM)).toBe(false);
93
+ expect(hasCustomNode(AI_WORKFLOW_NODE_TYPES.Prompt)).toBe(false);
94
+ registerAiWorkflowNodes();
95
+ expect(hasCustomNode(AI_WORKFLOW_NODE_TYPES.LLM)).toBe(true);
96
+ expect(hasCustomNode(AI_WORKFLOW_NODE_TYPES.Prompt)).toBe(true);
97
+ expect(hasCustomNode(AI_WORKFLOW_NODE_TYPES.Agent)).toBe(true);
98
+ expect(hasCustomNode(AI_WORKFLOW_NODE_TYPES.Tool)).toBe(true);
99
+ expect(hasCustomNode(AI_WORKFLOW_NODE_TYPES.Condition)).toBe(true);
100
+ expect(hasCustomNode(AI_WORKFLOW_NODE_TYPES.Start)).toBe(true);
101
+ expect(hasCustomNode(AI_WORKFLOW_NODE_TYPES.End)).toBe(true);
102
+ expect(hasCustomNode(AI_WORKFLOW_NODE_TYPES.Memory)).toBe(true);
103
+ });
104
+ it("should not duplicate nodes on re-registration", () => {
105
+ registerAiWorkflowNodes();
106
+ const firstCount = getAllCustomNodes().length;
107
+ registerAiWorkflowNodes();
108
+ const secondCount = getAllCustomNodes().length;
109
+ expect(firstCount).toBe(secondCount);
110
+ });
111
+ });
112
+ });