@nocobase/flow-engine 2.0.0-alpha.4 → 2.0.0-alpha.41

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 (466) hide show
  1. package/lib/BlockScopedFlowEngine.d.ts +23 -0
  2. package/lib/BlockScopedFlowEngine.js +90 -0
  3. package/lib/FlowContextProvider.d.ts +2 -2
  4. package/lib/FlowContextProvider.js +3 -3
  5. package/lib/FlowDefinition.d.ts +4 -2
  6. package/lib/JSRunner.js +3 -0
  7. package/lib/ViewScopedFlowEngine.d.ts +1 -1
  8. package/lib/ViewScopedFlowEngine.js +12 -0
  9. package/lib/acl/Acl.d.ts +1 -0
  10. package/lib/acl/Acl.js +11 -0
  11. package/lib/components/FieldModelRenderer.js +14 -6
  12. package/lib/components/FieldSkeleton.d.ts +10 -0
  13. package/lib/components/FieldSkeleton.js +64 -0
  14. package/lib/components/FlowContextSelector.js +7 -2
  15. package/lib/components/FlowModelRenderer.d.ts +3 -6
  16. package/lib/components/FlowModelRenderer.js +16 -47
  17. package/lib/components/FormItem.js +5 -1
  18. package/lib/components/MobilePopup.d.ts +20 -0
  19. package/lib/components/MobilePopup.js +102 -0
  20. package/lib/components/MobilePopup.style.d.ts +17 -0
  21. package/lib/components/MobilePopup.style.js +186 -0
  22. package/lib/components/index.d.ts +1 -0
  23. package/lib/components/index.js +3 -1
  24. package/lib/components/settings/independents/dropdown/FlowsDropdownButton.js +2 -2
  25. package/lib/components/settings/wrappers/contextual/DefaultSettingsIcon.js +17 -5
  26. package/lib/components/settings/wrappers/contextual/FlowsContextMenu.js +2 -2
  27. package/lib/components/settings/wrappers/contextual/FlowsFloatContextMenu.d.ts +2 -2
  28. package/lib/components/settings/wrappers/contextual/FlowsFloatContextMenu.js +35 -6
  29. package/lib/components/settings/wrappers/contextual/StepSettingsDialog.js +7 -1
  30. package/lib/components/variables/VariableInput.js +19 -5
  31. package/lib/components/variables/VariableTag.js +43 -2
  32. package/lib/components/variables/types.d.ts +2 -0
  33. package/lib/data-source/index.d.ts +15 -4
  34. package/lib/data-source/index.js +42 -13
  35. package/lib/data-source/sortCollectionsByInherits.d.ts +10 -0
  36. package/lib/data-source/sortCollectionsByInherits.js +71 -0
  37. package/lib/emitter.d.ts +6 -0
  38. package/lib/emitter.js +12 -0
  39. package/lib/executor/FlowExecutor.d.ts +4 -5
  40. package/lib/executor/FlowExecutor.js +168 -99
  41. package/lib/flow-registry/GlobalFlowRegistry.d.ts +1 -0
  42. package/lib/flow-registry/GlobalFlowRegistry.js +3 -0
  43. package/lib/flow-registry/InstanceFlowRegistry.d.ts +1 -0
  44. package/lib/flow-registry/InstanceFlowRegistry.js +3 -0
  45. package/lib/flowContext.d.ts +37 -5
  46. package/lib/flowContext.js +224 -87
  47. package/lib/flowEngine.d.ts +24 -1
  48. package/lib/flowEngine.js +81 -8
  49. package/lib/flowSettings.d.ts +2 -1
  50. package/lib/flowSettings.js +16 -8
  51. package/lib/hooks/useApplyAutoFlows.js +2 -1
  52. package/lib/index.d.ts +7 -1
  53. package/lib/index.js +32 -3
  54. package/lib/locale/en-US.json +4 -2
  55. package/lib/locale/index.d.ts +4 -0
  56. package/lib/locale/zh-CN.json +4 -2
  57. package/lib/models/CollectionFieldModel.d.ts +3 -0
  58. package/lib/models/CollectionFieldModel.js +52 -6
  59. package/lib/models/flowModel.d.ts +30 -29
  60. package/lib/models/flowModel.js +153 -100
  61. package/lib/models/forkFlowModel.d.ts +8 -4
  62. package/lib/models/forkFlowModel.js +38 -8
  63. package/lib/provider.d.ts +3 -1
  64. package/lib/provider.js +7 -5
  65. package/lib/resources/multiRecordResource.js +25 -1
  66. package/lib/resources/singleRecordResource.js +19 -1
  67. package/lib/resources/sqlResource.d.ts +1 -0
  68. package/lib/resources/sqlResource.js +20 -24
  69. package/lib/runjs-context/contexts/FormJSFieldItemRunJSContext.d.ts +1 -6
  70. package/lib/runjs-context/contexts/FormJSFieldItemRunJSContext.js +27 -20
  71. package/lib/runjs-context/contexts/JSBlockRunJSContext.d.ts +1 -6
  72. package/lib/runjs-context/contexts/JSBlockRunJSContext.js +46 -33
  73. package/lib/runjs-context/contexts/JSCollectionActionRunJSContext.d.ts +1 -2
  74. package/lib/runjs-context/contexts/JSCollectionActionRunJSContext.js +14 -15
  75. package/lib/runjs-context/contexts/{LinkageRunJSContext.d.ts → JSColumnRunJSContext.d.ts} +6 -3
  76. package/lib/runjs-context/contexts/JSColumnRunJSContext.js +78 -0
  77. package/lib/runjs-context/contexts/JSFieldRunJSContext.d.ts +1 -6
  78. package/lib/runjs-context/contexts/JSFieldRunJSContext.js +28 -24
  79. package/lib/runjs-context/contexts/JSItemRunJSContext.d.ts +1 -6
  80. package/lib/runjs-context/contexts/JSItemRunJSContext.js +24 -20
  81. package/lib/runjs-context/contexts/JSRecordActionRunJSContext.d.ts +1 -2
  82. package/lib/runjs-context/contexts/JSRecordActionRunJSContext.js +16 -17
  83. package/lib/runjs-context/contexts/base.d.ts +9 -0
  84. package/lib/runjs-context/contexts/base.js +205 -0
  85. package/lib/runjs-context/helpers.d.ts +5 -2
  86. package/lib/runjs-context/helpers.js +36 -27
  87. package/lib/runjs-context/registry.d.ts +7 -4
  88. package/lib/runjs-context/registry.js +10 -42
  89. package/lib/runjs-context/setup.d.ts +9 -0
  90. package/lib/runjs-context/setup.js +82 -0
  91. package/lib/runjs-context/snippets/global/{copy-record-json.snippet.js → api-request.snippet.js} +25 -10
  92. package/lib/runjs-context/snippets/global/clipboard-copy-text.snippet.js +61 -0
  93. package/lib/runjs-context/snippets/global/{view-navigation-push.snippet.js → import-esm.snippet.js} +26 -12
  94. package/lib/runjs-context/snippets/global/message-error.snippet.js +6 -0
  95. package/lib/runjs-context/snippets/global/message-success.snippet.js +6 -0
  96. package/lib/runjs-context/snippets/global/notification-open.snippet.d.ts +3 -8
  97. package/lib/runjs-context/snippets/global/notification-open.snippet.js +8 -1
  98. package/lib/runjs-context/snippets/global/open-view-dialog.snippet.js +10 -3
  99. package/lib/runjs-context/snippets/global/open-view-drawer.snippet.js +10 -3
  100. package/lib/runjs-context/snippets/global/query-selector.snippet.js +53 -0
  101. package/lib/runjs-context/snippets/global/require-amd.snippet.d.ts +11 -0
  102. package/lib/runjs-context/snippets/global/{requireAsync.snippet.js → require-amd.snippet.js} +16 -13
  103. package/lib/runjs-context/snippets/global/window-open.snippet.d.ts +3 -8
  104. package/lib/runjs-context/snippets/global/window-open.snippet.js +8 -1
  105. package/lib/runjs-context/snippets/index.d.ts +14 -3
  106. package/lib/runjs-context/snippets/index.js +162 -40
  107. package/lib/runjs-context/snippets/scene/block/add-event-listener.snippet.d.ts +11 -0
  108. package/lib/runjs-context/snippets/scene/{jsblock → block}/add-event-listener.snippet.js +11 -2
  109. package/lib/runjs-context/snippets/scene/block/api-fetch-render-list.snippet.d.ts +11 -0
  110. package/lib/runjs-context/snippets/scene/block/api-fetch-render-list.snippet.js +64 -0
  111. package/lib/runjs-context/snippets/scene/block/chartjs-bar.snippet.d.ts +11 -0
  112. package/lib/runjs-context/snippets/scene/block/chartjs-bar.snippet.js +99 -0
  113. package/lib/runjs-context/snippets/{libs → scene/block}/echarts-init.snippet.js +24 -7
  114. package/lib/runjs-context/snippets/scene/block/render-antd-icons.snippet.d.ts +11 -0
  115. package/lib/runjs-context/snippets/scene/block/render-antd-icons.snippet.js +65 -0
  116. package/lib/runjs-context/snippets/scene/block/render-button-handler.snippet.d.ts +11 -0
  117. package/lib/runjs-context/snippets/scene/{jsblock → block}/render-button-handler.snippet.js +17 -9
  118. package/lib/runjs-context/snippets/scene/block/render-iframe.snippet.d.ts +11 -0
  119. package/lib/runjs-context/snippets/scene/block/render-iframe.snippet.js +57 -0
  120. package/lib/runjs-context/snippets/scene/block/render-info-card.snippet.d.ts +11 -0
  121. package/lib/runjs-context/snippets/scene/block/render-info-card.snippet.js +71 -0
  122. package/lib/runjs-context/snippets/scene/block/render-react-jsx.snippet.d.ts +11 -0
  123. package/lib/runjs-context/snippets/scene/{jsblock/render-card.snippet.js → block/render-react-jsx.snippet.js} +26 -13
  124. package/lib/runjs-context/snippets/scene/block/render-react.snippet.d.ts +11 -0
  125. package/lib/runjs-context/snippets/scene/{jsblock → block}/render-react.snippet.js +18 -17
  126. package/lib/runjs-context/snippets/scene/block/render-statistics.snippet.d.ts +11 -0
  127. package/lib/runjs-context/snippets/scene/block/render-statistics.snippet.js +95 -0
  128. package/lib/runjs-context/snippets/scene/block/render-timeline.snippet.d.ts +11 -0
  129. package/lib/runjs-context/snippets/scene/block/render-timeline.snippet.js +84 -0
  130. package/lib/runjs-context/snippets/scene/block/resource-example.snippet.d.ts +11 -0
  131. package/lib/runjs-context/snippets/scene/block/resource-example.snippet.js +60 -0
  132. package/lib/runjs-context/snippets/scene/block/three-users-orbit.snippet.d.ts +11 -0
  133. package/lib/runjs-context/snippets/scene/block/three-users-orbit.snippet.js +283 -0
  134. package/lib/runjs-context/snippets/scene/block/vue-component.snippet.d.ts +11 -0
  135. package/lib/runjs-context/snippets/scene/block/vue-component.snippet.js +124 -0
  136. package/lib/runjs-context/snippets/scene/detail/color-by-value.snippet.d.ts +11 -0
  137. package/lib/runjs-context/snippets/scene/{jsfield → detail}/color-by-value.snippet.js +13 -3
  138. package/lib/runjs-context/snippets/scene/detail/copy-to-clipboard.snippet.d.ts +11 -0
  139. package/lib/runjs-context/snippets/{global → scene/detail}/copy-to-clipboard.snippet.js +28 -6
  140. package/lib/runjs-context/snippets/scene/detail/format-number.snippet.d.ts +11 -0
  141. package/lib/runjs-context/snippets/scene/{jsfield → detail}/format-number.snippet.js +13 -3
  142. package/lib/runjs-context/snippets/scene/detail/innerHTML-value.snippet.d.ts +11 -0
  143. package/lib/runjs-context/snippets/scene/{jsfield → detail}/innerHTML-value.snippet.js +13 -3
  144. package/lib/runjs-context/snippets/scene/detail/percentage-bar.snippet.d.ts +11 -0
  145. package/lib/runjs-context/snippets/scene/detail/percentage-bar.snippet.js +82 -0
  146. package/lib/runjs-context/snippets/scene/detail/relative-time.snippet.d.ts +11 -0
  147. package/lib/runjs-context/snippets/scene/detail/relative-time.snippet.js +80 -0
  148. package/lib/runjs-context/snippets/scene/detail/status-tag.snippet.d.ts +11 -0
  149. package/lib/runjs-context/snippets/scene/detail/status-tag.snippet.js +74 -0
  150. package/lib/runjs-context/snippets/scene/form/calculate-total.snippet.d.ts +11 -0
  151. package/lib/runjs-context/snippets/scene/form/calculate-total.snippet.js +63 -0
  152. package/lib/runjs-context/snippets/scene/form/cascade-select.snippet.d.ts +11 -0
  153. package/lib/runjs-context/snippets/scene/form/cascade-select.snippet.js +81 -0
  154. package/lib/runjs-context/snippets/scene/form/conditional-required.snippet.d.ts +11 -0
  155. package/lib/runjs-context/snippets/scene/form/conditional-required.snippet.js +64 -0
  156. package/lib/runjs-context/snippets/scene/form/copy-field-values.snippet.d.ts +11 -0
  157. package/lib/runjs-context/snippets/scene/form/copy-field-values.snippet.js +74 -0
  158. package/lib/runjs-context/snippets/scene/form/render-basic.snippet.d.ts +11 -0
  159. package/lib/runjs-context/snippets/scene/{jsitem → form}/render-basic.snippet.js +11 -2
  160. package/lib/runjs-context/snippets/scene/form/set-disabled.snippet.d.ts +11 -0
  161. package/lib/runjs-context/snippets/scene/{linkage → form}/set-disabled.snippet.js +12 -3
  162. package/lib/runjs-context/snippets/scene/form/set-field-value.snippet.d.ts +11 -0
  163. package/lib/runjs-context/snippets/scene/{linkage → form}/set-field-value.snippet.js +12 -3
  164. package/lib/runjs-context/snippets/scene/form/set-required.snippet.d.ts +11 -0
  165. package/lib/runjs-context/snippets/scene/{linkage → form}/set-required.snippet.js +12 -3
  166. package/lib/runjs-context/snippets/scene/form/toggle-multiple-fields.snippet.d.ts +11 -0
  167. package/lib/runjs-context/snippets/scene/form/toggle-multiple-fields.snippet.js +67 -0
  168. package/lib/runjs-context/snippets/scene/form/toggle-visible.snippet.d.ts +11 -0
  169. package/lib/runjs-context/snippets/scene/{linkage → form}/toggle-visible.snippet.js +12 -3
  170. package/lib/runjs-context/snippets/scene/table/cell-open-dialog.snippet.d.ts +11 -0
  171. package/lib/runjs-context/snippets/scene/table/cell-open-dialog.snippet.js +64 -0
  172. package/lib/runjs-context/snippets/scene/table/collection-selected-count.snippet.d.ts +11 -0
  173. package/lib/runjs-context/snippets/scene/{actions → table}/collection-selected-count.snippet.js +11 -2
  174. package/lib/runjs-context/snippets/scene/table/concat-fields.snippet.d.ts +11 -0
  175. package/lib/runjs-context/snippets/scene/table/concat-fields.snippet.js +79 -0
  176. package/lib/runjs-context/snippets/scene/table/destroy-selected.snippet.d.ts +11 -0
  177. package/lib/runjs-context/snippets/{global/log-json-record.snippet.js → scene/table/destroy-selected.snippet.js} +24 -11
  178. package/lib/runjs-context/snippets/scene/table/export-selected-json.snippet.d.ts +11 -0
  179. package/lib/runjs-context/snippets/scene/table/export-selected-json.snippet.js +64 -0
  180. package/lib/runjs-context/snippets/scene/table/iterate-selected-rows.snippet.d.ts +11 -0
  181. package/lib/runjs-context/snippets/scene/{actions → table}/iterate-selected-rows.snippet.js +11 -2
  182. package/lib/runjs-context/snippets/types.d.ts +9 -1
  183. package/lib/scheduler/ModelOperationScheduler.d.ts +51 -0
  184. package/lib/scheduler/ModelOperationScheduler.js +262 -0
  185. package/lib/types.d.ts +28 -3
  186. package/lib/types.js +4 -3
  187. package/lib/utils/associationObjectVariable.d.ts +32 -0
  188. package/lib/utils/associationObjectVariable.js +157 -0
  189. package/lib/utils/buildSettingsViewInputArgs.d.ts +19 -0
  190. package/lib/utils/buildSettingsViewInputArgs.js +75 -0
  191. package/lib/utils/createEphemeralContext.d.ts +13 -0
  192. package/lib/utils/createEphemeralContext.js +140 -0
  193. package/lib/utils/flows.d.ts +10 -0
  194. package/lib/{runjs-context/snippets/global/api-request-post.snippet.js → utils/flows.js} +21 -15
  195. package/lib/utils/index.d.ts +7 -2
  196. package/lib/utils/index.js +21 -2
  197. package/lib/utils/jsxTransform.d.ts +15 -0
  198. package/lib/utils/jsxTransform.js +68 -0
  199. package/lib/utils/params-resolvers.js +3 -3
  200. package/lib/utils/parsePathnameToViewParams.d.ts +1 -1
  201. package/lib/utils/parsePathnameToViewParams.js +41 -5
  202. package/lib/utils/pruneFilter.d.ts +21 -0
  203. package/lib/{runjs-context/snippets/global/try-catch-async.snippet.js → utils/pruneFilter.js} +24 -16
  204. package/lib/utils/safeGlobals.d.ts +5 -3
  205. package/lib/utils/safeGlobals.js +40 -0
  206. package/lib/utils/schema-utils.js +2 -2
  207. package/lib/utils/serverContextParams.d.ts +1 -0
  208. package/lib/utils/translation.d.ts +4 -1
  209. package/lib/utils/translation.js +6 -2
  210. package/lib/utils/variablesParams.d.ts +22 -5
  211. package/lib/utils/variablesParams.js +132 -36
  212. package/lib/views/DrawerComponent.js +21 -2
  213. package/lib/views/PageComponent.js +2 -1
  214. package/lib/views/ViewNavigation.d.ts +3 -9
  215. package/lib/views/ViewNavigation.js +16 -2
  216. package/lib/views/createViewMeta.d.ts +29 -1
  217. package/lib/views/createViewMeta.js +338 -72
  218. package/lib/views/index.d.ts +1 -0
  219. package/lib/views/index.js +3 -0
  220. package/lib/views/useDialog.d.ts +9 -8
  221. package/lib/views/useDialog.js +19 -14
  222. package/lib/views/useDrawer.d.ts +9 -8
  223. package/lib/views/useDrawer.js +54 -35
  224. package/lib/views/usePage.d.ts +9 -8
  225. package/lib/views/usePage.js +20 -14
  226. package/package.json +6 -3
  227. package/src/BlockScopedFlowEngine.ts +86 -0
  228. package/src/FlowContextProvider.tsx +4 -2
  229. package/src/JSRunner.ts +3 -0
  230. package/src/ViewScopedFlowEngine.ts +15 -1
  231. package/src/__tests__/JSRunner.test.ts +62 -53
  232. package/src/__tests__/blockScopedFlowEngine.test.ts +154 -0
  233. package/src/__tests__/createViewMeta.popup.test.ts +132 -0
  234. package/src/__tests__/flow-engine.test.ts +3 -0
  235. package/src/__tests__/flowContext.test.ts +52 -0
  236. package/src/__tests__/flowContextCreateJSRunner.test.ts +163 -0
  237. package/src/__tests__/flowEngine.saveModel.test.ts +4 -0
  238. package/src/__tests__/flowRunJSContextDefine.test.ts +508 -0
  239. package/src/__tests__/flowSettings.open.test.tsx +2 -0
  240. package/src/__tests__/flowSettings.test.ts +2 -0
  241. package/src/__tests__/globalFlowRegistry.test.ts +1 -1
  242. package/src/__tests__/modelOperationScheduler.test.ts +346 -0
  243. package/src/__tests__/objectVariable.test.ts +464 -0
  244. package/src/__tests__/runjsContext.test.ts +216 -35
  245. package/src/__tests__/runjsContextImplementations.test.ts +217 -0
  246. package/src/__tests__/runjsContextRuntime.test.ts +269 -0
  247. package/src/__tests__/runjsEdgeCases.test.ts +281 -0
  248. package/src/__tests__/runjsLocales.test.ts +36 -0
  249. package/src/__tests__/runjsRuntimeFeatures.test.ts +461 -0
  250. package/src/__tests__/runjsSnippets.test.ts +140 -0
  251. package/src/__tests__/viewScopedFlowEngine.test.ts +3 -3
  252. package/src/acl/Acl.tsx +14 -0
  253. package/src/acl/__tests__/Acl.test.tsx +43 -0
  254. package/src/components/DynamicFlowsEditor.tsx +3 -4
  255. package/src/components/FieldModelRenderer.tsx +20 -7
  256. package/src/components/FieldSkeleton.tsx +27 -0
  257. package/src/components/FlowContextSelector.tsx +6 -2
  258. package/src/components/FlowModelRenderer.tsx +33 -81
  259. package/src/components/FormItem.tsx +8 -1
  260. package/src/components/MobilePopup.style.ts +220 -0
  261. package/src/components/MobilePopup.tsx +86 -0
  262. package/src/components/__tests__/flow-model-render-error-fallback.test.tsx +6 -6
  263. package/src/components/index.ts +1 -0
  264. package/src/components/settings/independents/dropdown/FlowsDropdownButton.tsx +1 -1
  265. package/src/components/settings/wrappers/contextual/DefaultSettingsIcon.tsx +17 -4
  266. package/src/components/settings/wrappers/contextual/FlowsContextMenu.tsx +1 -1
  267. package/src/components/settings/wrappers/contextual/FlowsFloatContextMenu.tsx +39 -10
  268. package/src/components/settings/wrappers/contextual/StepSettingsDialog.tsx +14 -1
  269. package/src/components/settings/wrappers/contextual/__tests__/DefaultSettingsIcon.test.tsx +425 -0
  270. package/src/components/subModel/__tests__/AddSubModelButton.test.tsx +5 -7
  271. package/src/components/variables/VariableInput.tsx +25 -5
  272. package/src/components/variables/VariableTag.tsx +54 -2
  273. package/src/components/variables/types.ts +2 -0
  274. package/src/data-source/__tests__/sortCollectionsByInherits.test.ts +125 -0
  275. package/src/data-source/index.ts +42 -11
  276. package/src/data-source/sortCollectionsByInherits.ts +61 -0
  277. package/src/emitter.ts +14 -0
  278. package/src/executor/FlowExecutor.ts +213 -119
  279. package/src/executor/__tests__/ctx-defs-injection.test.ts +197 -0
  280. package/src/executor/__tests__/flowExecutor.test.ts +151 -5
  281. package/src/flow-registry/GlobalFlowRegistry.ts +1 -0
  282. package/src/flow-registry/InstanceFlowRegistry.ts +1 -0
  283. package/src/flow-registry/__tests__/globalFlowRegistry.test.ts +54 -0
  284. package/src/flowContext.ts +303 -104
  285. package/src/flowEngine.ts +96 -6
  286. package/src/flowSettings.ts +12 -4
  287. package/src/hooks/useApplyAutoFlows.ts +3 -1
  288. package/src/index.ts +12 -1
  289. package/src/locale/en-US.json +4 -2
  290. package/src/locale/zh-CN.json +4 -2
  291. package/src/models/CollectionFieldModel.tsx +60 -8
  292. package/src/models/__tests__/dispatchEvent.behavior.test.ts +169 -0
  293. package/src/models/__tests__/flowModel.getFlows.sort.test.ts +33 -9
  294. package/src/models/__tests__/flowModel.scheduleModelOperation.test.tsx +129 -0
  295. package/src/models/__tests__/flowModel.test.ts +234 -111
  296. package/src/models/__tests__/forkFlowModel.test.ts +40 -7
  297. package/src/models/flowModel.tsx +197 -132
  298. package/src/models/forkFlowModel.ts +48 -8
  299. package/src/provider.tsx +10 -7
  300. package/src/resources/multiRecordResource.ts +28 -1
  301. package/src/resources/singleRecordResource.ts +19 -1
  302. package/src/resources/sqlResource.ts +20 -25
  303. package/src/runjs-context/contexts/FormJSFieldItemRunJSContext.ts +28 -21
  304. package/src/runjs-context/contexts/JSBlockRunJSContext.ts +46 -34
  305. package/src/runjs-context/contexts/JSCollectionActionRunJSContext.ts +15 -16
  306. package/src/runjs-context/contexts/JSColumnRunJSContext.ts +58 -0
  307. package/src/runjs-context/contexts/JSFieldRunJSContext.ts +30 -25
  308. package/src/runjs-context/contexts/JSItemRunJSContext.ts +25 -21
  309. package/src/runjs-context/contexts/JSRecordActionRunJSContext.ts +17 -18
  310. package/src/runjs-context/contexts/base.ts +196 -0
  311. package/src/runjs-context/helpers.ts +32 -30
  312. package/src/runjs-context/registry.ts +16 -47
  313. package/src/runjs-context/setup.ts +51 -0
  314. package/src/runjs-context/snippets/global/api-request.snippet.ts +38 -0
  315. package/src/runjs-context/snippets/global/clipboard-copy-text.snippet.ts +42 -0
  316. package/src/runjs-context/snippets/global/import-esm.snippet.ts +39 -0
  317. package/src/runjs-context/snippets/global/message-error.snippet.ts +6 -0
  318. package/src/runjs-context/snippets/global/message-success.snippet.ts +6 -0
  319. package/src/runjs-context/snippets/global/notification-open.snippet.ts +11 -1
  320. package/src/runjs-context/snippets/global/open-view-dialog.snippet.ts +10 -3
  321. package/src/runjs-context/snippets/global/open-view-drawer.snippet.ts +10 -3
  322. package/src/runjs-context/snippets/global/query-selector.snippet.ts +34 -0
  323. package/src/runjs-context/snippets/global/require-amd.snippet.ts +30 -0
  324. package/src/runjs-context/snippets/global/window-open.snippet.ts +11 -1
  325. package/src/runjs-context/snippets/index.ts +178 -39
  326. package/src/runjs-context/snippets/scene/{jsblock → block}/add-event-listener.snippet.ts +14 -2
  327. package/src/runjs-context/snippets/scene/block/api-fetch-render-list.snippet.ts +45 -0
  328. package/src/runjs-context/snippets/scene/block/chartjs-bar.snippet.ts +80 -0
  329. package/src/runjs-context/snippets/scene/block/echarts-init.snippet.ts +44 -0
  330. package/src/runjs-context/snippets/scene/block/render-antd-icons.snippet.ts +46 -0
  331. package/src/runjs-context/snippets/scene/block/render-button-handler.snippet.ts +35 -0
  332. package/src/runjs-context/snippets/scene/block/render-iframe.snippet.ts +38 -0
  333. package/src/runjs-context/snippets/scene/block/render-info-card.snippet.ts +52 -0
  334. package/src/runjs-context/snippets/scene/block/render-react-jsx.snippet.ts +39 -0
  335. package/src/runjs-context/snippets/scene/block/render-react.snippet.ts +38 -0
  336. package/src/runjs-context/snippets/scene/block/render-statistics.snippet.ts +76 -0
  337. package/src/runjs-context/snippets/scene/block/render-timeline.snippet.ts +65 -0
  338. package/src/runjs-context/snippets/scene/block/resource-example.snippet.ts +46 -0
  339. package/src/runjs-context/snippets/scene/block/three-users-orbit.snippet.ts +264 -0
  340. package/src/runjs-context/snippets/scene/block/vue-component.snippet.ts +105 -0
  341. package/src/runjs-context/snippets/scene/detail/color-by-value.snippet.ts +33 -0
  342. package/src/runjs-context/snippets/scene/detail/copy-to-clipboard.snippet.ts +45 -0
  343. package/src/runjs-context/snippets/scene/detail/format-number.snippet.ts +32 -0
  344. package/src/runjs-context/snippets/scene/detail/innerHTML-value.snippet.ts +31 -0
  345. package/src/runjs-context/snippets/scene/detail/percentage-bar.snippet.ts +63 -0
  346. package/src/runjs-context/snippets/scene/detail/relative-time.snippet.ts +61 -0
  347. package/src/runjs-context/snippets/scene/detail/status-tag.snippet.ts +55 -0
  348. package/src/runjs-context/snippets/scene/form/calculate-total.snippet.ts +44 -0
  349. package/src/runjs-context/snippets/scene/form/cascade-select.snippet.ts +62 -0
  350. package/src/runjs-context/snippets/scene/form/conditional-required.snippet.ts +45 -0
  351. package/src/runjs-context/snippets/scene/form/copy-field-values.snippet.ts +55 -0
  352. package/src/runjs-context/snippets/scene/{jsitem → form}/render-basic.snippet.ts +14 -2
  353. package/src/runjs-context/snippets/scene/{linkage → form}/set-disabled.snippet.ts +15 -3
  354. package/src/runjs-context/snippets/scene/{linkage → form}/set-field-value.snippet.ts +15 -3
  355. package/src/runjs-context/snippets/scene/{linkage → form}/set-required.snippet.ts +15 -3
  356. package/src/runjs-context/snippets/scene/form/toggle-multiple-fields.snippet.ts +48 -0
  357. package/src/runjs-context/snippets/scene/{linkage → form}/toggle-visible.snippet.ts +15 -3
  358. package/src/runjs-context/snippets/scene/table/cell-open-dialog.snippet.ts +45 -0
  359. package/src/runjs-context/snippets/scene/{actions → table}/collection-selected-count.snippet.ts +14 -2
  360. package/src/runjs-context/snippets/scene/table/concat-fields.snippet.ts +60 -0
  361. package/src/runjs-context/snippets/scene/table/destroy-selected.snippet.ts +36 -0
  362. package/src/runjs-context/snippets/scene/table/export-selected-json.snippet.ts +45 -0
  363. package/src/runjs-context/snippets/scene/{actions → table}/iterate-selected-rows.snippet.ts +14 -2
  364. package/src/runjs-context/snippets/types.ts +5 -1
  365. package/src/scheduler/ModelOperationScheduler.ts +304 -0
  366. package/src/types.ts +34 -0
  367. package/src/utils/__tests__/flows.test.ts +65 -0
  368. package/src/utils/__tests__/jsxTransform.test.ts +38 -0
  369. package/src/utils/__tests__/parsePathnameToViewParams.test.ts +25 -0
  370. package/src/utils/__tests__/pruneFilter.test.ts +38 -0
  371. package/src/utils/__tests__/safeGlobals.test.ts +22 -1
  372. package/src/utils/__tests__/variablesParams.test.ts +63 -0
  373. package/src/utils/associationObjectVariable.ts +180 -0
  374. package/src/utils/buildSettingsViewInputArgs.ts +72 -0
  375. package/src/utils/createEphemeralContext.ts +142 -0
  376. package/src/utils/flows.ts +23 -0
  377. package/src/utils/index.ts +11 -2
  378. package/src/utils/jsxTransform.ts +39 -0
  379. package/src/utils/params-resolvers.ts +2 -2
  380. package/src/utils/parsePathnameToViewParams.ts +50 -6
  381. package/src/utils/pruneFilter.ts +41 -0
  382. package/src/utils/safeGlobals.ts +49 -3
  383. package/src/utils/schema-utils.ts +1 -1
  384. package/src/utils/serverContextParams.ts +1 -0
  385. package/src/utils/translation.ts +7 -2
  386. package/src/utils/variablesParams.ts +156 -38
  387. package/src/views/DrawerComponent.tsx +21 -2
  388. package/src/views/PageComponent.tsx +1 -1
  389. package/src/views/ViewNavigation.ts +20 -12
  390. package/src/views/__tests__/ViewNavigation.test.ts +10 -0
  391. package/src/views/createViewMeta.ts +393 -70
  392. package/src/views/index.tsx +1 -0
  393. package/src/views/useDialog.tsx +24 -18
  394. package/src/views/useDrawer.tsx +74 -45
  395. package/src/views/usePage.tsx +26 -17
  396. package/lib/runjs-context/contexts/FlowRunJSContext.d.ts +0 -38
  397. package/lib/runjs-context/contexts/FlowRunJSContext.js +0 -217
  398. package/lib/runjs-context/contexts/LinkageRunJSContext.js +0 -62
  399. package/lib/runjs-context/index.d.ts +0 -19
  400. package/lib/runjs-context/index.js +0 -57
  401. package/lib/runjs-context/snippets/global/api-request-get.snippet.d.ts +0 -16
  402. package/lib/runjs-context/snippets/global/api-request-get.snippet.js +0 -42
  403. package/lib/runjs-context/snippets/global/api-request-post.snippet.d.ts +0 -16
  404. package/lib/runjs-context/snippets/global/console-log-ctx.snippet.d.ts +0 -16
  405. package/lib/runjs-context/snippets/global/console-log-ctx.snippet.js +0 -41
  406. package/lib/runjs-context/snippets/global/requireAsync.snippet.d.ts +0 -16
  407. package/lib/runjs-context/snippets/global/sleep.snippet.d.ts +0 -16
  408. package/lib/runjs-context/snippets/global/sleep.snippet.js +0 -43
  409. package/lib/runjs-context/snippets/global/try-catch-async.snippet.d.ts +0 -16
  410. package/lib/runjs-context/snippets/libs/echarts-init.snippet.d.ts +0 -15
  411. package/lib/runjs-context/snippets/scene/actions/collection-selected-count.snippet.d.ts +0 -15
  412. package/lib/runjs-context/snippets/scene/actions/iterate-selected-rows.snippet.d.ts +0 -15
  413. package/lib/runjs-context/snippets/scene/actions/record-id-message.snippet.d.ts +0 -15
  414. package/lib/runjs-context/snippets/scene/actions/record-id-message.snippet.js +0 -43
  415. package/lib/runjs-context/snippets/scene/actions/run-action-basic.snippet.d.ts +0 -15
  416. package/lib/runjs-context/snippets/scene/actions/run-action-basic.snippet.js +0 -40
  417. package/lib/runjs-context/snippets/scene/jsblock/add-event-listener.snippet.d.ts +0 -15
  418. package/lib/runjs-context/snippets/scene/jsblock/append-style.snippet.d.ts +0 -15
  419. package/lib/runjs-context/snippets/scene/jsblock/append-style.snippet.js +0 -42
  420. package/lib/runjs-context/snippets/scene/jsblock/jsx-mount.snippet.d.ts +0 -15
  421. package/lib/runjs-context/snippets/scene/jsblock/jsx-mount.snippet.js +0 -46
  422. package/lib/runjs-context/snippets/scene/jsblock/jsx-unmount.snippet.d.ts +0 -15
  423. package/lib/runjs-context/snippets/scene/jsblock/jsx-unmount.snippet.js +0 -41
  424. package/lib/runjs-context/snippets/scene/jsblock/render-basic.snippet.d.ts +0 -15
  425. package/lib/runjs-context/snippets/scene/jsblock/render-basic.snippet.js +0 -41
  426. package/lib/runjs-context/snippets/scene/jsblock/render-button-handler.snippet.d.ts +0 -15
  427. package/lib/runjs-context/snippets/scene/jsblock/render-react.snippet.d.ts +0 -15
  428. package/lib/runjs-context/snippets/scene/jsfield/color-by-value.snippet.d.ts +0 -15
  429. package/lib/runjs-context/snippets/scene/jsfield/format-number.snippet.d.ts +0 -15
  430. package/lib/runjs-context/snippets/scene/jsfield/innerHTML-value.snippet.d.ts +0 -15
  431. package/lib/runjs-context/snippets/scene/jsitem/render-basic.snippet.d.ts +0 -15
  432. package/lib/runjs-context/snippets/scene/linkage/set-disabled.snippet.d.ts +0 -15
  433. package/lib/runjs-context/snippets/scene/linkage/set-field-value.snippet.d.ts +0 -15
  434. package/lib/runjs-context/snippets/scene/linkage/set-required.snippet.d.ts +0 -15
  435. package/lib/runjs-context/snippets/scene/linkage/toggle-visible.snippet.d.ts +0 -15
  436. package/src/runjs-context/contexts/FlowRunJSContext.ts +0 -190
  437. package/src/runjs-context/contexts/LinkageRunJSContext.ts +0 -35
  438. package/src/runjs-context/index.ts +0 -20
  439. package/src/runjs-context/snippets/global/api-request-get.snippet.ts +0 -20
  440. package/src/runjs-context/snippets/global/api-request-post.snippet.ts +0 -20
  441. package/src/runjs-context/snippets/global/console-log-ctx.snippet.ts +0 -19
  442. package/src/runjs-context/snippets/global/copy-record-json.snippet.ts +0 -21
  443. package/src/runjs-context/snippets/global/copy-to-clipboard.snippet.ts +0 -21
  444. package/src/runjs-context/snippets/global/log-json-record.snippet.ts +0 -21
  445. package/src/runjs-context/snippets/global/requireAsync.snippet.ts +0 -24
  446. package/src/runjs-context/snippets/global/sleep.snippet.ts +0 -21
  447. package/src/runjs-context/snippets/global/try-catch-async.snippet.ts +0 -22
  448. package/src/runjs-context/snippets/global/view-navigation-push.snippet.ts +0 -23
  449. package/src/runjs-context/snippets/libs/echarts-init.snippet.ts +0 -24
  450. package/src/runjs-context/snippets/scene/actions/record-id-message.snippet.ts +0 -21
  451. package/src/runjs-context/snippets/scene/actions/run-action-basic.snippet.ts +0 -18
  452. package/src/runjs-context/snippets/scene/jsblock/append-style.snippet.ts +0 -20
  453. package/src/runjs-context/snippets/scene/jsblock/jsx-mount.snippet.ts +0 -24
  454. package/src/runjs-context/snippets/scene/jsblock/jsx-unmount.snippet.ts +0 -19
  455. package/src/runjs-context/snippets/scene/jsblock/render-basic.snippet.ts +0 -24
  456. package/src/runjs-context/snippets/scene/jsblock/render-button-handler.snippet.ts +0 -24
  457. package/src/runjs-context/snippets/scene/jsblock/render-card.snippet.ts +0 -30
  458. package/src/runjs-context/snippets/scene/jsblock/render-react.snippet.ts +0 -34
  459. package/src/runjs-context/snippets/scene/jsfield/color-by-value.snippet.ts +0 -20
  460. package/src/runjs-context/snippets/scene/jsfield/format-number.snippet.ts +0 -19
  461. package/src/runjs-context/snippets/scene/jsfield/innerHTML-value.snippet.ts +0 -18
  462. /package/lib/runjs-context/snippets/global/{copy-record-json.snippet.d.ts → api-request.snippet.d.ts} +0 -0
  463. /package/lib/runjs-context/snippets/global/{copy-to-clipboard.snippet.d.ts → clipboard-copy-text.snippet.d.ts} +0 -0
  464. /package/lib/runjs-context/snippets/global/{log-json-record.snippet.d.ts → import-esm.snippet.d.ts} +0 -0
  465. /package/lib/runjs-context/snippets/global/{view-navigation-push.snippet.d.ts → query-selector.snippet.d.ts} +0 -0
  466. /package/lib/runjs-context/snippets/scene/{jsblock/render-card.snippet.d.ts → block/echarts-init.snippet.d.ts} +0 -0
@@ -46,10 +46,38 @@ var import_flowEngine = require("../flowEngine");
46
46
  var import_utils = require("../utils");
47
47
  var import_exceptions = require("../utils/exceptions");
48
48
  var import_setupRuntimeContextSteps = require("../utils/setupRuntimeContextSteps");
49
+ var import_createEphemeralContext = require("../utils/createEphemeralContext");
49
50
  const _FlowExecutor = class _FlowExecutor {
50
51
  constructor(engine) {
51
52
  this.engine = engine;
52
53
  }
54
+ /** Cache wrapper for applyFlow cache lifecycle */
55
+ async withApplyFlowCache(cacheKey, executor) {
56
+ if (!cacheKey || !this.engine) return await executor();
57
+ const cachedEntry = this.engine.applyFlowCache.get(cacheKey);
58
+ if (cachedEntry) {
59
+ if (cachedEntry.status === "resolved") return cachedEntry.data;
60
+ if (cachedEntry.status === "rejected") throw cachedEntry.error;
61
+ if (cachedEntry.status === "pending") return await cachedEntry.promise;
62
+ }
63
+ const promise = executor().then((result) => {
64
+ this.engine.applyFlowCache.set(cacheKey, {
65
+ status: "resolved",
66
+ data: result,
67
+ promise: Promise.resolve(result)
68
+ });
69
+ return result;
70
+ }).catch((err) => {
71
+ this.engine.applyFlowCache.set(cacheKey, {
72
+ status: "rejected",
73
+ error: err,
74
+ promise: Promise.reject(err)
75
+ });
76
+ throw err;
77
+ });
78
+ this.engine.applyFlowCache.set(cacheKey, { status: "pending", promise });
79
+ return await promise;
80
+ }
53
81
  /**
54
82
  * Execute a single flow on model.
55
83
  */
@@ -77,34 +105,40 @@ const _FlowExecutor = class _FlowExecutor {
77
105
  let eventStep = model.getEvent(typeof flow.on === "string" ? flow.on : (_a = flow.on) == null ? void 0 : _a.eventName);
78
106
  if (eventStep) {
79
107
  eventStep = { ...eventStep };
80
- eventStep.defaultParams = { ...import_lodash.default.get(flow, "on.defaultParams", {}), ...eventStep.defaultParams };
108
+ eventStep.defaultParams = {
109
+ ...import_lodash.default.get(flow, "on.defaultParams", {}),
110
+ ...eventStep.defaultParams
111
+ };
81
112
  }
82
113
  const stepDefs = eventStep ? { eventStep, ...flow.steps } : flow.steps;
83
114
  (0, import_setupRuntimeContextSteps.setupRuntimeContextSteps)(flowContext, stepDefs, model, flowKey);
84
115
  const stepsRuntime = flowContext.steps;
85
- for (const stepKey in stepDefs) {
86
- if (!Object.prototype.hasOwnProperty.call(stepDefs, stepKey)) continue;
87
- const step = stepDefs[stepKey];
116
+ for (const [stepKey, step] of Object.entries(stepDefs)) {
88
117
  let handler;
89
118
  let combinedParams = {};
90
- let actionDefinition;
91
119
  let useRawParams = step.useRawParams;
120
+ let runtimeCtx;
92
121
  if (step.use) {
93
- actionDefinition = model.getAction(step.use);
122
+ const actionDefinition = model.getAction(step.use);
94
123
  if (!actionDefinition) {
95
124
  flowContext.logger.error(
96
125
  `BaseModel.applyFlow: Action '${step.use}' not found for step '${stepKey}' in flow '${flowKey}'. Skipping.`
97
126
  );
98
127
  continue;
99
128
  }
129
+ runtimeCtx = await (0, import_createEphemeralContext.createEphemeralContext)(flowContext, {
130
+ ...actionDefinition,
131
+ ...step
132
+ });
100
133
  handler = step.handler || actionDefinition.handler;
101
134
  useRawParams = useRawParams ?? actionDefinition.useRawParams;
102
- const actionDefaultParams = await (0, import_utils.resolveDefaultParams)(actionDefinition.defaultParams, flowContext);
103
- const stepDefaultParams = await (0, import_utils.resolveDefaultParams)(step.defaultParams, flowContext);
135
+ const actionDefaultParams = await (0, import_utils.resolveDefaultParams)(actionDefinition.defaultParams, runtimeCtx);
136
+ const stepDefaultParams = await (0, import_utils.resolveDefaultParams)(step.defaultParams, runtimeCtx);
104
137
  combinedParams = { ...actionDefaultParams, ...stepDefaultParams };
105
138
  } else if (step.handler) {
139
+ runtimeCtx = await (0, import_createEphemeralContext.createEphemeralContext)(flowContext, step);
106
140
  handler = step.handler;
107
- const stepDefaultParams = await (0, import_utils.resolveDefaultParams)(step.defaultParams, flowContext);
141
+ const stepDefaultParams = await (0, import_utils.resolveDefaultParams)(step.defaultParams, runtimeCtx);
108
142
  combinedParams = { ...stepDefaultParams };
109
143
  } else {
110
144
  flowContext.logger.error(
@@ -117,10 +151,10 @@ const _FlowExecutor = class _FlowExecutor {
117
151
  combinedParams = { ...combinedParams, ...modelStepParams };
118
152
  }
119
153
  if (typeof useRawParams === "function") {
120
- useRawParams = await useRawParams(flowContext);
154
+ useRawParams = await useRawParams(runtimeCtx);
121
155
  }
122
156
  if (!useRawParams) {
123
- combinedParams = await flowContext.resolveJsonTemplate(combinedParams);
157
+ combinedParams = await runtimeCtx.resolveJsonTemplate(combinedParams);
124
158
  }
125
159
  try {
126
160
  if (!handler) {
@@ -129,7 +163,7 @@ const _FlowExecutor = class _FlowExecutor {
129
163
  );
130
164
  continue;
131
165
  }
132
- const currentStepResult = handler(flowContext, combinedParams);
166
+ const currentStepResult = handler(runtimeCtx, combinedParams);
133
167
  const isAwait = step.isAwait !== false;
134
168
  lastResult = isAwait ? await currentStepResult : currentStepResult;
135
169
  stepResults[stepKey] = lastResult;
@@ -152,106 +186,141 @@ const _FlowExecutor = class _FlowExecutor {
152
186
  }
153
187
  return Promise.resolve(stepResults);
154
188
  }
189
+ // runAutoFlows 已移除:统一通过 dispatchEvent('beforeRender') + useCache 控制
155
190
  /**
156
- * Execute all auto-apply flows for model.
191
+ * Dispatch an event to flows bound via flow.on and execute them.
157
192
  */
158
- async runAutoFlows(model, inputArgs, useCache = true) {
159
- const autoApplyFlows = model.getAutoFlows();
160
- if (autoApplyFlows.length === 0) {
161
- model.context.logger.warn(`FlowModel: No auto-apply flows found for model '${model.uid}'`);
162
- return [];
163
- }
164
- const cacheKey = useCache ? import_flowEngine.FlowEngine.generateApplyFlowCacheKey(model.getAutoFlowCacheScope(), "all", model.uid) : null;
165
- if (cacheKey && this.engine) {
166
- const cachedEntry = this.engine.applyFlowCache.get(cacheKey);
167
- if (cachedEntry) {
168
- if (cachedEntry.status === "resolved") {
169
- model.context.logger.debug(`[FlowEngine.applyAutoFlows] Using cached result for model: ${model.uid}`);
170
- return cachedEntry.data;
171
- }
172
- if (cachedEntry.status === "rejected") throw cachedEntry.error;
173
- if (cachedEntry.status === "pending") return await cachedEntry.promise;
193
+ async dispatchEvent(model, eventName, inputArgs, options) {
194
+ var _a, _b, _c, _d;
195
+ const isBeforeRender = eventName === "beforeRender";
196
+ const sequential = !!(options == null ? void 0 : options.sequential);
197
+ const useCache = !!(options == null ? void 0 : options.useCache);
198
+ const throwOnError = isBeforeRender;
199
+ const runId = `${model.uid}-${eventName}-${Date.now()}`;
200
+ const logger = model.context.logger;
201
+ try {
202
+ await this.engine.emitter.emitAsync(`model:event:${eventName}:start`, {
203
+ uid: model.uid,
204
+ model,
205
+ runId,
206
+ inputArgs
207
+ });
208
+ await ((_a = model.onDispatchEventStart) == null ? void 0 : _a.call(model, eventName, options, inputArgs));
209
+ } catch (err) {
210
+ if (isBeforeRender && err instanceof import_utils.FlowExitException) {
211
+ logger.debug(`[FlowModel.dispatchEvent] ${err.message}`);
212
+ return [];
174
213
  }
175
- }
176
- const executeAutoFlows = /* @__PURE__ */ __name(async () => {
177
- const results = [];
178
- const runId = `${model.uid}-autoFlow-${Date.now()}-${Math.floor(Math.random() * 1e3)}`;
179
- const logger = model.context.logger.child({ module: "flow-engine", component: "FlowExecutor", runId });
180
- logger.debug(
181
- `[FlowExecutor] runAutoFlows: uid=${model.uid}, isFork=${(model == null ? void 0 : model.isFork) === true}, useCache=${useCache}, runId=${runId}, flows=${autoApplyFlows.map((f) => f.key).join(",")}`
182
- );
183
214
  try {
184
- if (autoApplyFlows.length === 0) {
185
- logger.warn(`FlowModel: No auto-apply flows found for model '${model.uid}'`);
186
- } else {
187
- for (const flow of autoApplyFlows) {
188
- try {
189
- logger.debug(`[FlowExecutor] runFlow: uid=${model.uid}, flowKey=${flow.key}`);
190
- const result = await this.runFlow(model, flow.key, inputArgs, runId);
191
- if (result instanceof import_exceptions.FlowExitAllException) {
192
- logger.debug(`[FlowEngine.applyAutoFlows] ${result.message}`);
193
- break;
194
- }
195
- results.push(result);
196
- } catch (error) {
197
- logger.error({ err: error }, `FlowModel.applyAutoFlows: Error executing auto-apply flow '${flow.key}':`);
198
- throw error;
199
- }
200
- }
201
- }
202
- return results;
203
- } catch (error) {
204
- if (error instanceof import_utils.FlowExitException) {
205
- logger.debug(`[FlowEngine.applyAutoFlows] ${error.message}`);
206
- return results;
207
- }
208
- throw error;
215
+ await ((_b = model.onDispatchEventError) == null ? void 0 : _b.call(model, eventName, options, inputArgs, err));
216
+ } finally {
217
+ logger.error({ err }, `BaseModel.dispatchEvent: Start hook error for event '${eventName}'`);
209
218
  }
210
- }, "executeAutoFlows");
211
- if (!cacheKey || !this.engine) {
212
- return await executeAutoFlows();
219
+ if (throwOnError) throw err;
220
+ return;
213
221
  }
214
- const promise = executeAutoFlows().then((result) => {
215
- this.engine.applyFlowCache.set(cacheKey, {
216
- status: "resolved",
217
- data: result,
218
- promise: Promise.resolve(result)
219
- });
220
- return result;
221
- }).catch((err) => {
222
- this.engine.applyFlowCache.set(cacheKey, {
223
- status: "rejected",
224
- error: err,
225
- promise: Promise.reject(err)
226
- });
227
- throw err;
228
- });
229
- this.engine.applyFlowCache.set(cacheKey, { status: "pending", promise });
230
- return await promise;
231
- }
232
- /**
233
- * Dispatch an event to flows bound via flow.on and execute them.
234
- */
235
- async dispatchEvent(model, eventName, inputArgs) {
236
- const flows = Array.from(model.getFlows().values()).filter((flow) => {
222
+ const flows = isBeforeRender ? model.getEventFlows("beforeRender") : Array.from(model.getFlows().values()).filter((flow) => {
237
223
  const on = flow.on;
238
224
  if (!on) return false;
239
225
  if (typeof on === "string") return on === eventName;
240
226
  if (typeof on === "object") return on.eventName === eventName;
241
227
  return false;
242
228
  });
243
- const runId = `${model.uid}-${eventName}-${Date.now()}`;
244
- const logger = model.context.logger;
245
- const promises = flows.map((flow) => {
246
- logger.debug(`BaseModel '${model.uid}' dispatching event '${eventName}' to flow '${flow.key}'.`);
247
- return this.runFlow(model, flow.key, inputArgs, runId).catch((error) => {
248
- logger.error(
249
- { err: error },
250
- `BaseModel.dispatchEvent: Error executing event-triggered flow '${flow.key}' for event '${eventName}':`
251
- );
229
+ const execute = /* @__PURE__ */ __name(async () => {
230
+ if (sequential) {
231
+ const flowsWithIndex = flows.map((f, i) => ({ f, i }));
232
+ const ordered = flowsWithIndex.slice().sort((a, b) => {
233
+ var _a2, _b2;
234
+ const regA = a.f["flowRegistry"];
235
+ const regB = b.f["flowRegistry"];
236
+ const typeA = (_a2 = regA == null ? void 0 : regA.constructor) == null ? void 0 : _a2._type;
237
+ const typeB = (_b2 = regB == null ? void 0 : regB.constructor) == null ? void 0 : _b2._type;
238
+ const groupA = typeA === "instance" ? 0 : 1;
239
+ const groupB = typeB === "instance" ? 0 : 1;
240
+ if (groupA !== groupB) return groupA - groupB;
241
+ const sa = a.f.sort ?? 0;
242
+ const sb = b.f.sort ?? 0;
243
+ if (sa !== sb) return sa - sb;
244
+ return a.i - b.i;
245
+ }).map((x) => x.f);
246
+ const results2 = [];
247
+ for (const flow of ordered) {
248
+ try {
249
+ logger.debug(
250
+ `BaseModel '${model.uid}' dispatching event '${eventName}' to flow '${flow.key}' (sequential).`
251
+ );
252
+ const result = await this.runFlow(model, flow.key, inputArgs, runId);
253
+ if (result instanceof import_exceptions.FlowExitAllException) {
254
+ logger.debug(`[FlowEngine.dispatchEvent] ${result.message}`);
255
+ break;
256
+ }
257
+ results2.push(result);
258
+ } catch (error) {
259
+ logger.error(
260
+ { err: error },
261
+ `BaseModel.dispatchEvent: Error executing event-triggered flow '${flow.key}' for event '${eventName}' (sequential):`
262
+ );
263
+ throw error;
264
+ }
265
+ }
266
+ return results2;
267
+ }
268
+ const results = await Promise.all(
269
+ flows.map(async (flow) => {
270
+ logger.debug(`BaseModel '${model.uid}' dispatching event '${eventName}' to flow '${flow.key}'.`);
271
+ try {
272
+ return await this.runFlow(model, flow.key, inputArgs, runId);
273
+ } catch (error) {
274
+ logger.error(
275
+ { err: error },
276
+ `BaseModel.dispatchEvent: Error executing event-triggered flow '${flow.key}' for event '${eventName}':`
277
+ );
278
+ if (throwOnError) throw error;
279
+ return void 0;
280
+ }
281
+ })
282
+ );
283
+ return results.filter((x) => x !== void 0);
284
+ }, "execute");
285
+ const argsKey = useCache ? JSON.stringify(inputArgs ?? {}) : "";
286
+ const cacheKey = useCache ? import_flowEngine.FlowEngine.generateApplyFlowCacheKey(
287
+ `event:${model.getFlowCacheScope(eventName)}:${argsKey}`,
288
+ eventName,
289
+ model.uid
290
+ ) : null;
291
+ try {
292
+ const result = await this.withApplyFlowCache(cacheKey, execute);
293
+ try {
294
+ await ((_c = model.onDispatchEventEnd) == null ? void 0 : _c.call(model, eventName, options, inputArgs, result));
295
+ } catch (hookErr) {
296
+ logger.error({ err: hookErr }, `BaseModel.dispatchEvent: End hook error for event '${eventName}'`);
297
+ }
298
+ await this.engine.emitter.emitAsync(`model:event:${eventName}:end`, {
299
+ uid: model.uid,
300
+ model,
301
+ runId,
302
+ inputArgs,
303
+ result
252
304
  });
253
- });
254
- await Promise.all(promises);
305
+ return result;
306
+ } catch (error) {
307
+ try {
308
+ await ((_d = model.onDispatchEventError) == null ? void 0 : _d.call(model, eventName, options, inputArgs, error));
309
+ } catch (_2) {
310
+ }
311
+ model.context.logger.error(
312
+ { err: error },
313
+ `BaseModel.dispatchEvent: Error executing event '${eventName}' for model '${model.uid}':`
314
+ );
315
+ await this.engine.emitter.emitAsync(`model:event:${eventName}:error`, {
316
+ uid: model.uid,
317
+ model,
318
+ runId,
319
+ inputArgs,
320
+ error
321
+ });
322
+ if (throwOnError) throw error;
323
+ }
255
324
  }
256
325
  };
257
326
  __name(_FlowExecutor, "FlowExecutor");
@@ -12,6 +12,7 @@ import { BaseFlowRegistry } from './BaseFlowRegistry';
12
12
  type FlowKey = string;
13
13
  export declare class GlobalFlowRegistry extends BaseFlowRegistry {
14
14
  protected target: ModelConstructor;
15
+ static readonly _type: "global";
15
16
  constructor(target: ModelConstructor);
16
17
  removeFlow(flowKey: FlowKey): void;
17
18
  getFlow(flowKey: FlowKey): FlowDefinition | undefined;
@@ -11,6 +11,7 @@ var __defProp = Object.defineProperty;
11
11
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
12
12
  var __getOwnPropNames = Object.getOwnPropertyNames;
13
13
  var __hasOwnProp = Object.prototype.hasOwnProperty;
14
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
14
15
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
15
16
  var __export = (target, all) => {
16
17
  for (var name in all)
@@ -25,6 +26,7 @@ var __copyProps = (to, from, except, desc) => {
25
26
  return to;
26
27
  };
27
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
28
30
  var GlobalFlowRegistry_exports = {};
29
31
  __export(GlobalFlowRegistry_exports, {
30
32
  GlobalFlowRegistry: () => GlobalFlowRegistry
@@ -88,6 +90,7 @@ const _GlobalFlowRegistry = class _GlobalFlowRegistry extends import_BaseFlowReg
88
90
  }
89
91
  };
90
92
  __name(_GlobalFlowRegistry, "GlobalFlowRegistry");
93
+ __publicField(_GlobalFlowRegistry, "_type", "global");
91
94
  let GlobalFlowRegistry = _GlobalFlowRegistry;
92
95
  // Annotate the CommonJS export names for ESM import in node:
93
96
  0 && (module.exports = {
@@ -12,6 +12,7 @@ import { BaseFlowRegistry } from './BaseFlowRegistry';
12
12
  type FlowKey = string;
13
13
  export declare class InstanceFlowRegistry extends BaseFlowRegistry {
14
14
  protected model: FlowModel;
15
+ static readonly _type: "instance";
15
16
  constructor(model: FlowModel);
16
17
  save(): Promise<void>;
17
18
  saveFlow(flow: FlowDefinition): Promise<void>;
@@ -11,6 +11,7 @@ var __defProp = Object.defineProperty;
11
11
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
12
12
  var __getOwnPropNames = Object.getOwnPropertyNames;
13
13
  var __hasOwnProp = Object.prototype.hasOwnProperty;
14
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
14
15
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
15
16
  var __export = (target, all) => {
16
17
  for (var name in all)
@@ -25,6 +26,7 @@ var __copyProps = (to, from, except, desc) => {
25
26
  return to;
26
27
  };
27
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
28
30
  var InstanceFlowRegistry_exports = {};
29
31
  __export(InstanceFlowRegistry_exports, {
30
32
  InstanceFlowRegistry: () => InstanceFlowRegistry
@@ -52,6 +54,7 @@ const _InstanceFlowRegistry = class _InstanceFlowRegistry extends import_BaseFlo
52
54
  }
53
55
  };
54
56
  __name(_InstanceFlowRegistry, "InstanceFlowRegistry");
57
+ __publicField(_InstanceFlowRegistry, "_type", "instance");
55
58
  let InstanceFlowRegistry = _InstanceFlowRegistry;
56
59
  // Annotate the CommonJS export names for ESM import in node:
57
60
  0 && (module.exports = {
@@ -18,7 +18,8 @@ import type { Location } from 'react-router-dom';
18
18
  import { DataSourceManager } from './data-source';
19
19
  import { FlowEngine } from './flowEngine';
20
20
  import { JSRunner, JSRunnerOptions } from './JSRunner';
21
- import { FlowModel, ForkFlowModel } from './models';
21
+ import type { FlowModel } from './models/flowModel';
22
+ import type { ForkFlowModel } from './models/forkFlowModel';
22
23
  import { FlowResource, FlowSQLRepository } from './resources';
23
24
  import type { ActionDefinition, EventDefinition, ResourceType } from './types';
24
25
  import { JSONValue } from './utils/params-resolvers';
@@ -71,6 +72,7 @@ export interface PropertyOptions {
71
72
  observable?: boolean;
72
73
  meta?: PropertyMetaOrFactory;
73
74
  resolveOnServer?: boolean | ((subPath: string) => boolean);
75
+ serverOnlyWhenContextParams?: boolean;
74
76
  }
75
77
  type RouteOptions = {
76
78
  name?: string;
@@ -138,21 +140,21 @@ export declare class FlowContext {
138
140
  */
139
141
  getPropertyOptions(key: string): PropertyOptions | undefined;
140
142
  }
141
- export declare class FlowRunjsContext extends FlowContext {
142
- constructor(delegate: FlowContext);
143
- }
144
143
  declare class BaseFlowEngineContext extends FlowContext {
145
144
  router: Router;
146
145
  dataSourceManager: DataSourceManager;
147
146
  requireAsync: (url: string) => Promise<any>;
147
+ importAsync: (url: string) => Promise<any>;
148
148
  createJSRunner: (options?: JSRunnerOptions) => JSRunner;
149
+ pageInfo: {
150
+ version?: 'v1' | 'v2';
151
+ };
149
152
  /**
150
153
  * @deprecated use `resolveJsonTemplate` instead
151
154
  */
152
155
  renderJson: (template: JSONValue) => Promise<any>;
153
156
  resolveJsonTemplate: (template: JSONValue) => Promise<any>;
154
157
  runjs: (code: string, variables?: Record<string, any>, options?: JSRunnerOptions) => Promise<any>;
155
- copyToClipboard: (text: string) => Promise<void>;
156
158
  getAction: <TModel extends FlowModel = FlowModel, TCtx extends FlowContext = FlowContext>(name: string) => ActionDefinition<TModel, TCtx> | undefined;
157
159
  getActions: <TModel extends FlowModel = FlowModel, TCtx extends FlowContext = FlowContext>() => Map<string, ActionDefinition<TModel, TCtx>>;
158
160
  getEvents: <TModel extends FlowModel = FlowModel, TCtx extends FlowContext = FlowContext>() => Map<string, EventDefinition<TModel, TCtx>>;
@@ -212,4 +214,34 @@ export declare class FlowRuntimeContext<TModel extends FlowModel = FlowModel, TM
212
214
  get mode(): TMode;
213
215
  }
214
216
  export type FlowSettingsContext<TModel extends FlowModel = FlowModel> = FlowRuntimeContext<TModel, 'settings'>;
217
+ export type RunJSDocCompletionDoc = {
218
+ insertText?: string;
219
+ };
220
+ export type RunJSDocPropertyDoc = string | {
221
+ description?: string;
222
+ detail?: string;
223
+ type?: string;
224
+ examples?: string[];
225
+ completion?: RunJSDocCompletionDoc;
226
+ properties?: Record<string, RunJSDocPropertyDoc>;
227
+ };
228
+ export type RunJSDocMethodDoc = string | {
229
+ description?: string;
230
+ detail?: string;
231
+ examples?: string[];
232
+ completion?: RunJSDocCompletionDoc;
233
+ };
234
+ export type RunJSDocMeta = {
235
+ label?: string;
236
+ properties?: Record<string, RunJSDocPropertyDoc>;
237
+ methods?: Record<string, RunJSDocMethodDoc>;
238
+ snippets?: Record<string, any>;
239
+ };
240
+ export declare class FlowRunJSContext extends FlowContext {
241
+ constructor(delegate: FlowContext);
242
+ static define(meta: RunJSDocMeta, options?: {
243
+ locale?: string;
244
+ }): void;
245
+ static getDoc(locale?: string): RunJSDocMeta;
246
+ }
215
247
  export {};