@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
@@ -51,27 +51,32 @@ __export(flowContext_exports, {
51
51
  FlowEngineContext: () => FlowEngineContext,
52
52
  FlowForkModelContext: () => FlowForkModelContext,
53
53
  FlowModelContext: () => FlowModelContext,
54
- FlowRunjsContext: () => FlowRunjsContext,
54
+ FlowRunJSContext: () => FlowRunJSContext,
55
55
  FlowRuntimeContext: () => FlowRuntimeContext
56
56
  });
57
57
  module.exports = __toCommonJS(flowContext_exports);
58
58
  var import_reactive = require("@formily/reactive");
59
59
  var antd = __toESM(require("antd"));
60
+ var antdIcons = __toESM(require("@ant-design/icons"));
60
61
  var import_lodash = __toESM(require("lodash"));
61
62
  var import_qs = __toESM(require("qs"));
62
63
  var import_react = __toESM(require("react"));
64
+ var ReactDOMClient = __toESM(require("react-dom/client"));
65
+ var import_ElementProxy = require("./ElementProxy");
63
66
  var import_Acl = require("./acl/Acl");
64
67
  var import_ContextPathProxy = require("./ContextPathProxy");
65
68
  var import_data_source = require("./data-source");
66
69
  var import_flowEngine = require("./flowEngine");
67
70
  var import_flowI18n = require("./flowI18n");
68
71
  var import_JSRunner = require("./JSRunner");
69
- var import_models = require("./models");
70
72
  var import_resources = require("./resources");
71
73
  var import_utils = require("./utils");
72
74
  var import_exceptions = require("./utils/exceptions");
73
75
  var import_params_resolvers = require("./utils/params-resolvers");
74
76
  var import_serverContextParams = require("./utils/serverContextParams");
77
+ var import_registry = require("./runjs-context/registry");
78
+ var import_createEphemeralContext = require("./utils/createEphemeralContext");
79
+ var import_dayjs = __toESM(require("dayjs"));
75
80
  var _proxy, _FlowContext_instances, createChildNodes_fn, findMetaByPath_fn, findMetaInDelegatesDeep_fn, findMetaInProperty_fn, resolvePathInMeta_fn, resolvePathInMetaAsync_fn, buildParentTitles_fn, toTreeNode_fn;
76
81
  function isRecordRefLike(val) {
77
82
  return !!(val && typeof val === "object" && "collection" in val && "filterByTk" in val);
@@ -657,34 +662,6 @@ toTreeNode_fn = /* @__PURE__ */ __name(function(name, metaOrFactory, paths = [na
657
662
  }, "#toTreeNode");
658
663
  __name(_FlowContext, "FlowContext");
659
664
  let FlowContext = _FlowContext;
660
- const _FlowRunjsContext = class _FlowRunjsContext extends FlowContext {
661
- constructor(delegate) {
662
- super();
663
- this.addDelegate(delegate);
664
- this.defineProperty("React", { value: import_react.default });
665
- this.defineProperty("antd", { value: antd });
666
- this.defineMethod(
667
- "dispatchModelEvent",
668
- async (modelOrUid, eventName, inputArgs) => {
669
- var _a, _b;
670
- let model = null;
671
- if (typeof modelOrUid === "string") {
672
- model = await this.engine.loadModel({ uid: modelOrUid });
673
- } else if (modelOrUid instanceof import_models.FlowModel) {
674
- model = modelOrUid;
675
- }
676
- if (model) {
677
- model.context.addDelegate(this);
678
- model.dispatchEvent(eventName, { navigation: false, ...(_b = (_a = this.model) == null ? void 0 : _a["getInputArgs"]) == null ? void 0 : _b.call(_a), ...inputArgs });
679
- } else {
680
- this.message.error(this.t("Model with ID {{uid}} not found", { uid: modelOrUid }));
681
- }
682
- }
683
- );
684
- }
685
- };
686
- __name(_FlowRunjsContext, "FlowRunjsContext");
687
- let FlowRunjsContext = _FlowRunjsContext;
688
665
  const _BaseFlowEngineContext = class _BaseFlowEngineContext extends FlowContext {
689
666
  };
690
667
  __name(_BaseFlowEngineContext, "BaseFlowEngineContext");
@@ -724,7 +701,7 @@ const _FlowEngineContext = class _FlowEngineContext extends BaseFlowEngineContex
724
701
  });
725
702
  this.defineMethod("runjs", async (code, variables, options) => {
726
703
  const mergedGlobals = { ...(options == null ? void 0 : options.globals) || {}, ...variables || {} };
727
- const runner = this.createJSRunner({
704
+ const runner = await this.createJSRunner({
728
705
  ...options || {},
729
706
  globals: mergedGlobals
730
707
  });
@@ -797,6 +774,16 @@ const _FlowEngineContext = class _FlowEngineContext extends BaseFlowEngineContex
797
774
  const inputFromMeta = await collectFromMeta();
798
775
  const autoInput = { ...inputFromMeta };
799
776
  const autoContextParams = Object.keys(autoInput).length ? (0, import_serverContextParams.buildServerContextParams)(this, autoInput) : void 0;
777
+ if (!autoContextParams) {
778
+ const keys = Object.keys(serverVarPaths);
779
+ const allOptional = keys.length > 0 && keys.every((k) => {
780
+ var _a2;
781
+ return (_a2 = this.getPropertyOptions(k)) == null ? void 0 : _a2.serverOnlyWhenContextParams;
782
+ });
783
+ if (allOptional) {
784
+ return (0, import_utils.resolveExpressions)(template, this);
785
+ }
786
+ }
800
787
  if (this.api) {
801
788
  try {
802
789
  serverResolved = await (0, import_params_resolvers.enqueueVariablesResolve)(this, {
@@ -930,45 +917,54 @@ const _FlowEngineContext = class _FlowEngineContext extends BaseFlowEngineContex
930
917
  );
931
918
  });
932
919
  });
933
- this.defineMethod("createJSRunner", function(options) {
934
- const runCtx = new FlowRunjsContext(this.createProxy());
935
- return new import_JSRunner.JSRunner({
936
- ...options,
937
- globals: {
938
- ctx: runCtx,
939
- window: (0, import_utils.createSafeWindow)(),
940
- document: (0, import_utils.createSafeDocument)(),
941
- ...options == null ? void 0 : options.globals
942
- }
943
- });
944
- });
945
- this.defineMethod("copyToClipboard", async (text) => {
946
- const content = String(text ?? "");
947
- try {
948
- if (typeof navigator !== "undefined" && navigator.clipboard && navigator.clipboard.writeText) {
949
- await navigator.clipboard.writeText(content);
950
- return;
951
- }
952
- } catch (e) {
920
+ this.defineMethod("importAsync", async (url) => {
921
+ if (!url || typeof url !== "string") {
922
+ throw new Error("invalid url");
953
923
  }
954
- return new Promise((resolve, reject) => {
924
+ const u = url.trim();
925
+ const g = globalThis;
926
+ g.__nocobaseImportAsyncCache = g.__nocobaseImportAsyncCache || /* @__PURE__ */ new Map();
927
+ const cache = g.__nocobaseImportAsyncCache;
928
+ if (cache.has(u)) return cache.get(u);
929
+ const nativeImport = /* @__PURE__ */ __name(() => import(
930
+ /* @vite-ignore */
931
+ /* webpackIgnore: true */
932
+ u
933
+ ), "nativeImport");
934
+ const evalImport = /* @__PURE__ */ __name(() => {
935
+ const importer = (0, eval)("u => import(u)");
936
+ return importer(u);
937
+ }, "evalImport");
938
+ const p = (async () => {
955
939
  try {
956
- const ta = document.createElement("textarea");
957
- ta.value = content;
958
- ta.setAttribute("readonly", "");
959
- ta.style.position = "fixed";
960
- ta.style.top = "-9999px";
961
- document.body.appendChild(ta);
962
- ta.focus();
963
- ta.select();
964
- const ok = document.execCommand("copy");
965
- document.body.removeChild(ta);
966
- if (ok) resolve();
967
- else reject(new Error("execCommand copy failed"));
940
+ return await nativeImport();
968
941
  } catch (err) {
969
- reject(err);
942
+ try {
943
+ return await evalImport();
944
+ } catch (err2) {
945
+ throw err2 || err;
946
+ }
970
947
  }
971
- });
948
+ })();
949
+ cache.set(u, p);
950
+ return p;
951
+ });
952
+ this.defineMethod("createJSRunner", async function(options) {
953
+ try {
954
+ const mod = await import("./runjs-context/setup");
955
+ if (typeof (mod == null ? void 0 : mod.setupRunJSContexts) === "function") await mod.setupRunJSContexts();
956
+ } catch (_2) {
957
+ }
958
+ const version = (options == null ? void 0 : options.version) || "v1";
959
+ const modelClass = (0, import_registry.getModelClassName)(this);
960
+ const Ctor = import_registry.RunJSContextRegistry.resolve(version, modelClass) || import_registry.RunJSContextRegistry.resolve(version, "*") || FlowRunJSContext;
961
+ let runCtx;
962
+ if (Ctor) {
963
+ runCtx = new Ctor(this);
964
+ }
965
+ const globals = { ctx: runCtx, ...(options == null ? void 0 : options.globals) || {} };
966
+ const { timeoutMs } = options || {};
967
+ return new import_JSRunner.JSRunner({ globals, timeoutMs });
972
968
  });
973
969
  this.defineMethod("buildServerContextParams", function(input) {
974
970
  return (0, import_serverContextParams.buildServerContextParams)(this, input);
@@ -986,7 +982,7 @@ const _FlowEngineContext = class _FlowEngineContext extends BaseFlowEngineContex
986
982
  "runAction",
987
983
  async function(actionName, params) {
988
984
  const def = this.engine.getAction(actionName);
989
- const ctx = this.createProxy();
985
+ const ctx = await (0, import_createEphemeralContext.createEphemeralContext)(this, def);
990
986
  if (!def) {
991
987
  throw new Error(`Action '${actionName}' not found.`);
992
988
  }
@@ -1019,13 +1015,22 @@ const _FlowEngineContext = class _FlowEngineContext extends BaseFlowEngineContex
1019
1015
  context: this.createProxy()
1020
1016
  });
1021
1017
  });
1018
+ this.defineMethod(
1019
+ "useResource",
1020
+ function(className) {
1021
+ if (this.has("resource")) return;
1022
+ this.defineProperty("resource", {
1023
+ get: /* @__PURE__ */ __name(() => this.createResource(className), "get")
1024
+ });
1025
+ }
1026
+ );
1022
1027
  }
1023
1028
  };
1024
1029
  __name(_FlowEngineContext, "FlowEngineContext");
1025
1030
  let FlowEngineContext = _FlowEngineContext;
1026
1031
  const _FlowModelContext = class _FlowModelContext extends BaseFlowModelContext {
1027
1032
  constructor(model) {
1028
- if (!(model instanceof import_models.FlowModel)) {
1033
+ if (!model || typeof model !== "object") {
1029
1034
  throw new Error("Invalid FlowModel instance");
1030
1035
  }
1031
1036
  super();
@@ -1034,7 +1039,7 @@ const _FlowModelContext = class _FlowModelContext extends BaseFlowModelContext {
1034
1039
  this.engine.reactView.onRefReady(ref, cb, timeout);
1035
1040
  });
1036
1041
  this.defineMethod("runjs", async (code, variables, options) => {
1037
- const runner = this.createJSRunner({
1042
+ const runner = await this.createJSRunner({
1038
1043
  globals: variables,
1039
1044
  version: options == null ? void 0 : options.version
1040
1045
  });
@@ -1051,7 +1056,7 @@ const _FlowModelContext = class _FlowModelContext extends BaseFlowModelContext {
1051
1056
  }, "get")
1052
1057
  });
1053
1058
  this.defineMethod("openView", async function(uid, options) {
1054
- var _a, _b, _c, _d, _e, _f, _g;
1059
+ var _a, _b, _c, _d, _e, _f;
1055
1060
  const opts = { ...options };
1056
1061
  if (opts.defineProperties || opts.defineMethod) {
1057
1062
  opts.navigation = false;
@@ -1069,28 +1074,29 @@ const _FlowModelContext = class _FlowModelContext extends BaseFlowModelContext {
1069
1074
  stepParams: {
1070
1075
  popupSettings: {
1071
1076
  openView: {
1072
- ...import_lodash.default.pick(opts, ["dataSourceKey", "collectionName", "associationName"])
1077
+ // 持久化首次传入的关键展示/数据参数,供后续路由与再次打开复用
1078
+ ...import_lodash.default.pick(opts, ["dataSourceKey", "collectionName", "associationName", "mode", "size"])
1073
1079
  }
1074
1080
  }
1075
1081
  }
1076
1082
  });
1077
1083
  await model2.save();
1078
1084
  }
1079
- if ((_b = (_a = model2.getStepParams("popupSettings")) == null ? void 0 : _a.openView) == null ? void 0 : _b.dataSourceKey) {
1080
- model2.setStepParams("popupSettings", {
1081
- openView: {
1082
- ...(_c = model2.getStepParams("popupSettings")) == null ? void 0 : _c.openView,
1083
- ...import_lodash.default.pick(opts, ["dataSourceKey", "collectionName", "associationName"])
1084
- }
1085
- });
1086
- await model2.save();
1085
+ if ((_a = model2.getStepParams("popupSettings")) == null ? void 0 : _a.openView) {
1086
+ const prevOpenView = ((_b = model2.getStepParams("popupSettings")) == null ? void 0 : _b.openView) || {};
1087
+ const incoming = import_lodash.default.pick(opts, ["dataSourceKey", "collectionName", "associationName", "mode", "size"]);
1088
+ const nextOpenView = { ...prevOpenView, ...incoming };
1089
+ if (!import_lodash.default.isEqual(prevOpenView, nextOpenView)) {
1090
+ model2.setStepParams("popupSettings", { openView: nextOpenView });
1091
+ await model2.save();
1092
+ }
1087
1093
  }
1088
- const viewUid = (opts == null ? void 0 : opts.routeViewUid) ?? (opts == null ? void 0 : opts.viewUid) ?? (((_e = (_d = model2.stepParams) == null ? void 0 : _d.popupSettings) == null ? void 0 : _e.openView) ? model2.uid : this.model.uid);
1094
+ const viewUid = (opts == null ? void 0 : opts.routeViewUid) ?? (opts == null ? void 0 : opts.viewUid) ?? (((_d = (_c = model2.stepParams) == null ? void 0 : _c.popupSettings) == null ? void 0 : _d.openView) ? model2.uid : this.model.uid);
1089
1095
  const parentView = this.view;
1090
1096
  const pendingType = (opts == null ? void 0 : opts.isMobileLayout) ? "embed" : (opts == null ? void 0 : opts.mode) || "drawer";
1091
1097
  const pendingInputArgs = { ...opts, viewUid, navigation: opts.navigation };
1092
- pendingInputArgs.filterByTk = pendingInputArgs.filterByTk || ((_f = this.inputArgs) == null ? void 0 : _f.filterByTk);
1093
- pendingInputArgs.sourceId = pendingInputArgs.sourceId || ((_g = this.inputArgs) == null ? void 0 : _g.sourceId);
1098
+ pendingInputArgs.filterByTk = pendingInputArgs.filterByTk || ((_e = this.inputArgs) == null ? void 0 : _e.filterByTk);
1099
+ pendingInputArgs.sourceId = pendingInputArgs.sourceId || ((_f = this.inputArgs) == null ? void 0 : _f.sourceId);
1094
1100
  const pendingView = {
1095
1101
  type: pendingType,
1096
1102
  inputArgs: pendingInputArgs,
@@ -1119,7 +1125,7 @@ const _FlowModelContext = class _FlowModelContext extends BaseFlowModelContext {
1119
1125
  "runAction",
1120
1126
  async function(actionName, params) {
1121
1127
  const def = this.model.getAction(actionName);
1122
- const ctx = this.createProxy();
1128
+ const ctx = await (0, import_createEphemeralContext.createEphemeralContext)(this, def);
1123
1129
  if (!def) {
1124
1130
  throw new Error(`Action '${actionName}' not found.`);
1125
1131
  }
@@ -1144,7 +1150,7 @@ __name(_FlowModelContext, "FlowModelContext");
1144
1150
  let FlowModelContext = _FlowModelContext;
1145
1151
  const _FlowForkModelContext = class _FlowForkModelContext extends BaseFlowModelContext {
1146
1152
  constructor(master, fork) {
1147
- if (!(master instanceof import_models.FlowModel)) {
1153
+ if (!master || typeof master !== "object") {
1148
1154
  throw new Error("Invalid FlowModel instance");
1149
1155
  }
1150
1156
  super();
@@ -1165,7 +1171,7 @@ const _FlowForkModelContext = class _FlowForkModelContext extends BaseFlowModelC
1165
1171
  }, "get")
1166
1172
  });
1167
1173
  this.defineMethod("runjs", async (code, variables, options) => {
1168
- const runner = this.createJSRunner({
1174
+ const runner = await this.createJSRunner({
1169
1175
  globals: variables,
1170
1176
  version: options == null ? void 0 : options.version
1171
1177
  });
@@ -1216,7 +1222,7 @@ const _FlowRuntimeContext = class _FlowRuntimeContext extends BaseFlowModelConte
1216
1222
  this.engine.reactView.onRefReady(ref, cb, timeout);
1217
1223
  });
1218
1224
  this.defineMethod("runjs", async (code, variables, options) => {
1219
- const runner = this.createJSRunner({
1225
+ const runner = await this.createJSRunner({
1220
1226
  globals: variables,
1221
1227
  version: options == null ? void 0 : options.version
1222
1228
  });
@@ -1257,12 +1263,143 @@ const _FlowRuntimeContext = class _FlowRuntimeContext extends BaseFlowModelConte
1257
1263
  };
1258
1264
  __name(_FlowRuntimeContext, "FlowRuntimeContext");
1259
1265
  let FlowRuntimeContext = _FlowRuntimeContext;
1266
+ const __runjsClassDefaultMeta = /* @__PURE__ */ new WeakMap();
1267
+ const __runjsClassLocaleMeta = /* @__PURE__ */ new WeakMap();
1268
+ const __runjsDocCache = /* @__PURE__ */ new WeakMap();
1269
+ function __runjsDeepMerge(base, patch) {
1270
+ if (patch === null) return void 0;
1271
+ if (Array.isArray(base) || Array.isArray(patch) || typeof base !== "object" || typeof patch !== "object") {
1272
+ return patch ?? base;
1273
+ }
1274
+ const out = { ...base };
1275
+ for (const k of Object.keys(patch)) {
1276
+ const v = __runjsDeepMerge(base == null ? void 0 : base[k], patch[k]);
1277
+ if (typeof v === "undefined") delete out[k];
1278
+ else out[k] = v;
1279
+ }
1280
+ return out;
1281
+ }
1282
+ __name(__runjsDeepMerge, "__runjsDeepMerge");
1283
+ const _FlowRunJSContext = class _FlowRunJSContext extends FlowContext {
1284
+ constructor(delegate) {
1285
+ super();
1286
+ this.addDelegate(delegate);
1287
+ this.defineProperty("React", { value: import_react.default });
1288
+ this.defineProperty("antd", { value: antd });
1289
+ this.defineProperty("dayjs", { value: import_dayjs.default });
1290
+ const ReactDOMShim = {
1291
+ ...ReactDOMClient,
1292
+ createRoot: /* @__PURE__ */ __name((container, options) => {
1293
+ const realContainer = (container == null ? void 0 : container.__el) || container;
1294
+ return this.engine.reactView.createRoot(realContainer, options);
1295
+ }, "createRoot")
1296
+ };
1297
+ this.defineProperty("ReactDOM", { value: ReactDOMShim });
1298
+ const libs = Object.freeze({
1299
+ React: import_react.default,
1300
+ ReactDOM: ReactDOMShim,
1301
+ antd,
1302
+ dayjs: import_dayjs.default,
1303
+ antdIcons
1304
+ });
1305
+ this.defineProperty("libs", { value: libs });
1306
+ this.defineMethod(
1307
+ "render",
1308
+ function(vnode, container) {
1309
+ const el = container || this.element;
1310
+ if (!el) throw new Error("ctx.render: container not provided and ctx.element is not available");
1311
+ const containerEl = (el == null ? void 0 : el.__el) || el;
1312
+ const globalRef = globalThis;
1313
+ globalRef.__nbRunjsRoots = globalRef.__nbRunjsRoots || /* @__PURE__ */ new WeakMap();
1314
+ const rootMap = globalRef.__nbRunjsRoots;
1315
+ if (typeof vnode === "string") {
1316
+ const existingRoot = rootMap.get(containerEl);
1317
+ if (existingRoot && typeof existingRoot.unmount === "function") {
1318
+ try {
1319
+ existingRoot.unmount();
1320
+ } finally {
1321
+ rootMap.delete(containerEl);
1322
+ }
1323
+ }
1324
+ const proxy = new import_ElementProxy.ElementProxy(containerEl);
1325
+ proxy.innerHTML = String(vnode ?? "");
1326
+ return null;
1327
+ }
1328
+ if (vnode && vnode.nodeType && (vnode.nodeType === 1 || vnode.nodeType === 3 || vnode.nodeType === 11)) {
1329
+ const existingRoot = rootMap.get(containerEl);
1330
+ if (existingRoot && typeof existingRoot.unmount === "function") {
1331
+ try {
1332
+ existingRoot.unmount();
1333
+ } finally {
1334
+ rootMap.delete(containerEl);
1335
+ }
1336
+ }
1337
+ while (containerEl.firstChild) containerEl.removeChild(containerEl.firstChild);
1338
+ containerEl.appendChild(vnode);
1339
+ return null;
1340
+ }
1341
+ let root = rootMap.get(containerEl);
1342
+ if (!root) {
1343
+ root = this.ReactDOM.createRoot(containerEl);
1344
+ rootMap.set(containerEl, root);
1345
+ }
1346
+ root.render(vnode);
1347
+ return root;
1348
+ }
1349
+ );
1350
+ }
1351
+ static define(meta, options) {
1352
+ const locale = options == null ? void 0 : options.locale;
1353
+ if (locale) {
1354
+ const map = __runjsClassLocaleMeta.get(this) || /* @__PURE__ */ new Map();
1355
+ const prev = map.get(locale) || {};
1356
+ map.set(locale, __runjsDeepMerge(prev, meta));
1357
+ __runjsClassLocaleMeta.set(this, map);
1358
+ } else {
1359
+ const prev = __runjsClassDefaultMeta.get(this) || {};
1360
+ __runjsClassDefaultMeta.set(this, __runjsDeepMerge(prev, meta));
1361
+ }
1362
+ __runjsDocCache.delete(this);
1363
+ }
1364
+ static getDoc(locale) {
1365
+ const self = this;
1366
+ let cacheForClass = __runjsDocCache.get(self);
1367
+ const cacheKey = String(locale || "default");
1368
+ if (cacheForClass && cacheForClass.has(cacheKey)) return cacheForClass.get(cacheKey);
1369
+ const chain = [];
1370
+ let cur = self;
1371
+ while (cur && cur.prototype) {
1372
+ chain.unshift(cur);
1373
+ cur = Object.getPrototypeOf(cur);
1374
+ }
1375
+ let merged = {};
1376
+ for (const cls of chain) {
1377
+ merged = __runjsDeepMerge(merged, __runjsClassDefaultMeta.get(cls) || {});
1378
+ }
1379
+ if (locale) {
1380
+ for (const cls of chain) {
1381
+ const lmap = __runjsClassLocaleMeta.get(cls);
1382
+ if (lmap && lmap.has(locale)) {
1383
+ merged = __runjsDeepMerge(merged, lmap.get(locale));
1384
+ }
1385
+ }
1386
+ }
1387
+ if (!cacheForClass) {
1388
+ cacheForClass = /* @__PURE__ */ new Map();
1389
+ __runjsDocCache.set(self, cacheForClass);
1390
+ }
1391
+ cacheForClass.set(cacheKey, merged);
1392
+ return merged;
1393
+ }
1394
+ };
1395
+ __name(_FlowRunJSContext, "FlowRunJSContext");
1396
+ let FlowRunJSContext = _FlowRunJSContext;
1260
1397
  // Annotate the CommonJS export names for ESM import in node:
1261
1398
  0 && (module.exports = {
1262
1399
  FlowContext,
1263
1400
  FlowEngineContext,
1264
1401
  FlowForkModelContext,
1265
1402
  FlowModelContext,
1266
- FlowRunjsContext,
1403
+ FlowRunJSContext,
1267
1404
  FlowRuntimeContext
1268
1405
  });
@@ -5,6 +5,9 @@ import { FlowSettings } from './flowSettings';
5
5
  import { FlowModel } from './models';
6
6
  import { ReactView } from './ReactView';
7
7
  import { FlowResource } from './resources';
8
+ import { Emitter } from './emitter';
9
+ import ModelOperationScheduler from './scheduler/ModelOperationScheduler';
10
+ import type { ScheduleOptions, ScheduledCancel } from './scheduler/ModelOperationScheduler';
8
11
  import type { ActionDefinition, ApplyFlowCacheEntry, CreateModelOptions, EventDefinition, FlowModelOptions, IFlowModelRepository, ModelConstructor, PersistOptions, ResourceType } from './types';
9
12
  /**
10
13
  * FlowEngine is the core class of the flow engine, responsible for managing flow models, actions, model repository, and more.
@@ -81,6 +84,13 @@ export declare class FlowEngine {
81
84
  private _previousEngine?;
82
85
  private _nextEngine?;
83
86
  private _resources;
87
+ /**
88
+ * 引擎事件总线(目前用于模型生命周期等事件)。
89
+ * ViewScopedFlowEngine 持有自己的实例,实现作用域隔离。
90
+ */
91
+ emitter: Emitter;
92
+ /** 调度器:仅在 View 作用域引擎本地启用;根/Block 作用域默认不持有 */
93
+ private _modelOperationScheduler?;
84
94
  logger: pino.Logger;
85
95
  /**
86
96
  * Flow settings, including components and form scopes.
@@ -95,13 +105,19 @@ export declare class FlowEngine {
95
105
  */
96
106
  reactView: ReactView;
97
107
  /**
98
- * Flow executor that runs flows and auto-flows.
108
+ * Flow executor that runs event flows.
99
109
  */
100
110
  executor: FlowExecutor;
101
111
  /**
102
112
  * Constructor. Initializes React view, registers default model and form scopes.
103
113
  */
104
114
  constructor();
115
+ /** 获取/创建当前引擎的调度器(仅在本地作用域) */
116
+ getScheduler(): ModelOperationScheduler;
117
+ /** 释放并清理当前引擎本地调度器(若存在) */
118
+ disposeScheduler(): void;
119
+ /** 在目标模型生命周期达成时执行操作(仅在 View 引擎本地存储计划) */
120
+ scheduleModelOperation(fromModelOrUid: FlowModel | string, toUid: string, fn: (model: FlowModel) => Promise<void> | void, options?: ScheduleOptions): ScheduledCancel;
105
121
  /** 上一个引擎(根引擎为 undefined) */
106
122
  get previousEngine(): FlowEngine | undefined;
107
123
  /** 下一个引擎(若存在) */
@@ -304,6 +320,13 @@ export declare class FlowEngine {
304
320
  * @returns {Promise<boolean>} Whether destroyed successfully
305
321
  */
306
322
  destroyModel(uid: string): Promise<boolean>;
323
+ /**
324
+ * Duplicate a model tree via repository API.
325
+ * Returns the duplicated model JSON (root with subModels) or null if not available.
326
+ * @param {string} uid UID of the model to duplicate
327
+ * @returns {Promise<any | null>} Duplicated model JSON or null
328
+ */
329
+ duplicateModel(uid: string): Promise<Record<string, any>>;
307
330
  /**
308
331
  * Replace a model instance with a new instance of a class.
309
332
  * @template T New model type