@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
@@ -0,0 +1,13 @@
1
+ /**
2
+ * This file is part of the NocoBase (R) project.
3
+ * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
+ * Authors: NocoBase Team.
5
+ *
6
+ * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
+ * For more information, please refer to: https://www.nocobase.com/agreement.
8
+ */
9
+ import { FlowContext } from '../flowContext';
10
+ import type { ActionDefinition } from '../types';
11
+ type ContextDefsLike<TCtx extends FlowContext> = Partial<Pick<ActionDefinition<any, TCtx>, 'defineProperties' | 'defineMethods'>> | null | undefined;
12
+ export declare function createEphemeralContext<TCtx extends FlowContext>(parent: TCtx, contextDefs?: ContextDefsLike<TCtx>): Promise<TCtx>;
13
+ export {};
@@ -0,0 +1,140 @@
1
+ /**
2
+ * This file is part of the NocoBase (R) project.
3
+ * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
+ * Authors: NocoBase Team.
5
+ *
6
+ * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
+ * For more information, please refer to: https://www.nocobase.com/agreement.
8
+ */
9
+
10
+ var __defProp = Object.defineProperty;
11
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
12
+ var __getOwnPropNames = Object.getOwnPropertyNames;
13
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
14
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
15
+ var __export = (target, all) => {
16
+ for (var name in all)
17
+ __defProp(target, name, { get: all[name], enumerable: true });
18
+ };
19
+ var __copyProps = (to, from, except, desc) => {
20
+ if (from && typeof from === "object" || typeof from === "function") {
21
+ for (let key of __getOwnPropNames(from))
22
+ if (!__hasOwnProp.call(to, key) && key !== except)
23
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
24
+ }
25
+ return to;
26
+ };
27
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
+ var createEphemeralContext_exports = {};
29
+ __export(createEphemeralContext_exports, {
30
+ createEphemeralContext: () => createEphemeralContext
31
+ });
32
+ module.exports = __toCommonJS(createEphemeralContext_exports);
33
+ var import_flowContext = require("../flowContext");
34
+ async function createEphemeralContext(parent, contextDefs) {
35
+ if (contextDefs == null || !contextDefs.defineProperties && !contextDefs.defineMethods) {
36
+ return parent;
37
+ }
38
+ const scoped = new import_flowContext.FlowContext();
39
+ scoped.addDelegate(parent);
40
+ const scopedProxy = scoped.createProxy();
41
+ const scopedObj = scopedProxy;
42
+ const parentObj = parent;
43
+ const getFromParent = /* @__PURE__ */ __name((key) => {
44
+ const val = Reflect.get(parentObj, key, parentObj);
45
+ return typeof val === "function" ? val.bind(parent) : val;
46
+ }, "getFromParent");
47
+ const hasInScopedOrParent = /* @__PURE__ */ __name((key) => key === "defineProperty" || key === "defineMethod" || Reflect.has(scopedObj, key) || Reflect.has(parentObj, key), "hasInScopedOrParent");
48
+ const injectionProxy = new Proxy(scopedProxy, {
49
+ get(_t, key, receiver) {
50
+ if (typeof key === "string") {
51
+ if (key === "defineProperty") {
52
+ return (propKey, options) => scoped.defineProperty(propKey, options);
53
+ }
54
+ if (key === "defineMethod") {
55
+ return (name, fn, des) => scoped.defineMethod(name, fn, des);
56
+ }
57
+ if (Reflect.has(scopedObj, key)) {
58
+ return Reflect.get(scopedObj, key, receiver);
59
+ }
60
+ return getFromParent(key);
61
+ }
62
+ return Reflect.get(scopedObj, key, receiver);
63
+ },
64
+ set(_t, key, value) {
65
+ return Reflect.set(parentObj, key, value);
66
+ },
67
+ has(_t, key) {
68
+ return hasInScopedOrParent(key);
69
+ },
70
+ getOwnPropertyDescriptor(_t, key) {
71
+ return Object.getOwnPropertyDescriptor(scopedObj, key) || Object.getOwnPropertyDescriptor(parentObj, key);
72
+ }
73
+ });
74
+ if (contextDefs) {
75
+ const defs = Array.isArray(contextDefs) ? contextDefs : [contextDefs];
76
+ for (const defLike of defs) {
77
+ if (!defLike) continue;
78
+ const dp = defLike.defineProperties;
79
+ if (dp) {
80
+ const raw = typeof dp === "function" ? await dp(injectionProxy) : dp;
81
+ if (!raw || typeof raw !== "object") {
82
+ throw new TypeError("defineProperties must return an object of PropertyOptions");
83
+ }
84
+ const propsDef = raw;
85
+ for (const [key, options] of Object.entries(propsDef)) {
86
+ if (!options || typeof options !== "object") {
87
+ throw new TypeError(`defineProperties['${key}'] must be a PropertyOptions object`);
88
+ }
89
+ scoped.defineProperty(key, options);
90
+ }
91
+ }
92
+ const dm = defLike.defineMethods;
93
+ if (dm) {
94
+ const raw = typeof dm === "function" ? await dm(injectionProxy) : dm;
95
+ if (!raw || typeof raw !== "object") {
96
+ throw new TypeError("defineMethods must return an object of functions");
97
+ }
98
+ const methodsDef = raw;
99
+ for (const [key, fn] of Object.entries(methodsDef)) {
100
+ if (typeof fn !== "function") {
101
+ throw new TypeError(`defineMethods['${key}'] must be a function`);
102
+ }
103
+ scoped.defineMethod(key, fn);
104
+ }
105
+ }
106
+ }
107
+ }
108
+ const outerProxy = new Proxy(scopedProxy, {
109
+ get(_t, key, receiver) {
110
+ if (typeof key === "string") {
111
+ if (key === "defineProperty") {
112
+ return (propKey, options) => parent.defineProperty(propKey, options);
113
+ }
114
+ if (key === "defineMethod") {
115
+ return (name, fn, des) => parent.defineMethod(name, fn, des);
116
+ }
117
+ if (Reflect.has(scopedObj, key)) {
118
+ return Reflect.get(scopedObj, key, receiver);
119
+ }
120
+ return getFromParent(key);
121
+ }
122
+ return Reflect.get(scopedObj, key, receiver);
123
+ },
124
+ set(_t, key, value) {
125
+ return Reflect.set(parentObj, key, value);
126
+ },
127
+ has(_t, key) {
128
+ return hasInScopedOrParent(key);
129
+ },
130
+ getOwnPropertyDescriptor(_t, key) {
131
+ return Object.getOwnPropertyDescriptor(scopedObj, key) || Object.getOwnPropertyDescriptor(parentObj, key);
132
+ }
133
+ });
134
+ return outerProxy;
135
+ }
136
+ __name(createEphemeralContext, "createEphemeralContext");
137
+ // Annotate the CommonJS export names for ESM import in node:
138
+ 0 && (module.exports = {
139
+ createEphemeralContext
140
+ });
@@ -0,0 +1,10 @@
1
+ /**
2
+ * This file is part of the NocoBase (R) project.
3
+ * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
+ * Authors: NocoBase Team.
5
+ *
6
+ * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
+ * For more information, please refer to: https://www.nocobase.com/agreement.
8
+ */
9
+ import { FlowDefinition } from '../FlowDefinition';
10
+ export declare const isBeforeRenderFlow: (flow: FlowDefinition) => boolean;
@@ -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 __name = (target, value) => __defProp(target, "name", { value, configurable: true });
14
15
  var __export = (target, all) => {
15
16
  for (var name in all)
16
17
  __defProp(target, name, { get: all[name], enumerable: true });
@@ -24,19 +25,24 @@ var __copyProps = (to, from, except, desc) => {
24
25
  return to;
25
26
  };
26
27
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
27
- var api_request_post_snippet_exports = {};
28
- __export(api_request_post_snippet_exports, {
29
- default: () => api_request_post_snippet_default
28
+ var flows_exports = {};
29
+ __export(flows_exports, {
30
+ isBeforeRenderFlow: () => isBeforeRenderFlow
31
+ });
32
+ module.exports = __toCommonJS(flows_exports);
33
+ const isBeforeRenderFlow = /* @__PURE__ */ __name((flow) => {
34
+ if (typeof flow.on === "string") {
35
+ return flow.on === "beforeRender";
36
+ }
37
+ if (typeof flow.on === "object") {
38
+ return flow.on.eventName === "beforeRender";
39
+ }
40
+ if (!flow.on && flow.manual !== true) {
41
+ return true;
42
+ }
43
+ return false;
44
+ }, "isBeforeRenderFlow");
45
+ // Annotate the CommonJS export names for ESM import in node:
46
+ 0 && (module.exports = {
47
+ isBeforeRenderFlow
30
48
  });
31
- module.exports = __toCommonJS(api_request_post_snippet_exports);
32
- var api_request_post_snippet_default = {
33
- contexts: ["*"],
34
- prefix: "sn-api-post",
35
- label: "POST request template",
36
- description: "Basic template to send a POST request via ctx.api",
37
- content: `
38
- const res = await ctx.api.request({ url: '/your/api', method: 'post', data: { name: 'NocoBase' } });
39
- ctx.message.success(ctx.t('POST request completed'));
40
- console.log(ctx.t('POST result:'), res);
41
- `
42
- };
@@ -15,8 +15,13 @@ export { resolveCreateModelOptions, resolveDefaultParams, resolveExpressions } f
15
15
  export { compileUiSchema, resolveStepUiSchema, resolveUiMode } from './schema-utils';
16
16
  export { setupRuntimeContextSteps } from './setupRuntimeContextSteps';
17
17
  export { createCollectionContextMeta } from './createCollectionContextMeta';
18
- export { buildRecordMeta, collectContextParamsForTemplate, createCurrentRecordMetaFactory, createRecordMetaFactory, extractUsedVariableNames, extractUsedVariablePaths, inferParentRecordRef, inferRecordRef, type RecordParamsBuilder, } from './variablesParams';
18
+ export { createAssociationAwareObjectMetaFactory, createAssociationSubpathResolver } from './associationObjectVariable';
19
+ export { buildRecordMeta, collectContextParamsForTemplate, createCurrentRecordMetaFactory, createRecordResolveOnServerWithLocal, createRecordMetaFactory, extractUsedVariableNames, extractUsedVariablePaths, inferRecordRef, type RecordParamsBuilder, } from './variablesParams';
19
20
  export { extractPropertyPath, formatPathToVariable, isVariableExpression } from './context';
20
21
  export { clearAutoFlowError, getAutoFlowError, setAutoFlowError, type AutoFlowError } from './autoFlowError';
21
22
  export { parsePathnameToViewParams, type ViewParam } from './parsePathnameToViewParams';
22
- export { createSafeDocument, createSafeWindow } from './safeGlobals';
23
+ export { buildSettingsViewInputArgs } from './buildSettingsViewInputArgs';
24
+ export { createSafeDocument, createSafeWindow, createSafeNavigator } from './safeGlobals';
25
+ export { createEphemeralContext } from './createEphemeralContext';
26
+ export { pruneFilter } from './pruneFilter';
27
+ export { isBeforeRenderFlow } from './flows';
@@ -32,13 +32,19 @@ __export(utils_exports, {
32
32
  FlowExitException: () => import_exceptions.FlowExitException,
33
33
  MENU_KEYS: () => import_constants.MENU_KEYS,
34
34
  buildRecordMeta: () => import_variablesParams.buildRecordMeta,
35
+ buildSettingsViewInputArgs: () => import_buildSettingsViewInputArgs.buildSettingsViewInputArgs,
35
36
  clearAutoFlowError: () => import_autoFlowError.clearAutoFlowError,
36
37
  collectContextParamsForTemplate: () => import_variablesParams.collectContextParamsForTemplate,
37
38
  compileUiSchema: () => import_schema_utils.compileUiSchema,
39
+ createAssociationAwareObjectMetaFactory: () => import_associationObjectVariable.createAssociationAwareObjectMetaFactory,
40
+ createAssociationSubpathResolver: () => import_associationObjectVariable.createAssociationSubpathResolver,
38
41
  createCollectionContextMeta: () => import_createCollectionContextMeta.createCollectionContextMeta,
39
42
  createCurrentRecordMetaFactory: () => import_variablesParams.createCurrentRecordMetaFactory,
43
+ createEphemeralContext: () => import_createEphemeralContext.createEphemeralContext,
40
44
  createRecordMetaFactory: () => import_variablesParams.createRecordMetaFactory,
45
+ createRecordResolveOnServerWithLocal: () => import_variablesParams.createRecordResolveOnServerWithLocal,
41
46
  createSafeDocument: () => import_safeGlobals.createSafeDocument,
47
+ createSafeNavigator: () => import_safeGlobals.createSafeNavigator,
42
48
  createSafeWindow: () => import_safeGlobals.createSafeWindow,
43
49
  defineAction: () => import_flow_definitions.defineAction,
44
50
  escapeT: () => import_translation.escapeT,
@@ -48,11 +54,12 @@ __export(utils_exports, {
48
54
  formatPathToVariable: () => import_context.formatPathToVariable,
49
55
  getAutoFlowError: () => import_autoFlowError.getAutoFlowError,
50
56
  getT: () => import_translation.getT,
51
- inferParentRecordRef: () => import_variablesParams.inferParentRecordRef,
52
57
  inferRecordRef: () => import_variablesParams.inferRecordRef,
58
+ isBeforeRenderFlow: () => import_flows.isBeforeRenderFlow,
53
59
  isInheritedFrom: () => import_inheritance.isInheritedFrom,
54
60
  isVariableExpression: () => import_context.isVariableExpression,
55
61
  parsePathnameToViewParams: () => import_parsePathnameToViewParams.parsePathnameToViewParams,
62
+ pruneFilter: () => import_pruneFilter.pruneFilter,
56
63
  resolveCreateModelOptions: () => import_params_resolvers.resolveCreateModelOptions,
57
64
  resolveDefaultParams: () => import_params_resolvers.resolveDefaultParams,
58
65
  resolveExpressions: () => import_params_resolvers.resolveExpressions,
@@ -72,11 +79,16 @@ var import_params_resolvers = require("./params-resolvers");
72
79
  var import_schema_utils = require("./schema-utils");
73
80
  var import_setupRuntimeContextSteps = require("./setupRuntimeContextSteps");
74
81
  var import_createCollectionContextMeta = require("./createCollectionContextMeta");
82
+ var import_associationObjectVariable = require("./associationObjectVariable");
75
83
  var import_variablesParams = require("./variablesParams");
76
84
  var import_context = require("./context");
77
85
  var import_autoFlowError = require("./autoFlowError");
78
86
  var import_parsePathnameToViewParams = require("./parsePathnameToViewParams");
87
+ var import_buildSettingsViewInputArgs = require("./buildSettingsViewInputArgs");
79
88
  var import_safeGlobals = require("./safeGlobals");
89
+ var import_createEphemeralContext = require("./createEphemeralContext");
90
+ var import_pruneFilter = require("./pruneFilter");
91
+ var import_flows = require("./flows");
80
92
  // Annotate the CommonJS export names for ESM import in node:
81
93
  0 && (module.exports = {
82
94
  BLOCK_GROUP_CONFIGS,
@@ -85,13 +97,19 @@ var import_safeGlobals = require("./safeGlobals");
85
97
  FlowExitException,
86
98
  MENU_KEYS,
87
99
  buildRecordMeta,
100
+ buildSettingsViewInputArgs,
88
101
  clearAutoFlowError,
89
102
  collectContextParamsForTemplate,
90
103
  compileUiSchema,
104
+ createAssociationAwareObjectMetaFactory,
105
+ createAssociationSubpathResolver,
91
106
  createCollectionContextMeta,
92
107
  createCurrentRecordMetaFactory,
108
+ createEphemeralContext,
93
109
  createRecordMetaFactory,
110
+ createRecordResolveOnServerWithLocal,
94
111
  createSafeDocument,
112
+ createSafeNavigator,
95
113
  createSafeWindow,
96
114
  defineAction,
97
115
  escapeT,
@@ -101,11 +119,12 @@ var import_safeGlobals = require("./safeGlobals");
101
119
  formatPathToVariable,
102
120
  getAutoFlowError,
103
121
  getT,
104
- inferParentRecordRef,
105
122
  inferRecordRef,
123
+ isBeforeRenderFlow,
106
124
  isInheritedFrom,
107
125
  isVariableExpression,
108
126
  parsePathnameToViewParams,
127
+ pruneFilter,
109
128
  resolveCreateModelOptions,
110
129
  resolveDefaultParams,
111
130
  resolveExpressions,
@@ -0,0 +1,15 @@
1
+ /**
2
+ * This file is part of the NocoBase (R) project.
3
+ * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
+ * Authors: NocoBase Team.
5
+ *
6
+ * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
+ * For more information, please refer to: https://www.nocobase.com/agreement.
8
+ */
9
+ /**
10
+ * Lightweight JSX -> JS compiler for RunJS user code.
11
+ * - Uses sucrase via dynamic import (lazy; avoids static cycles and cost when not needed)
12
+ * - Maps JSX to ctx.React.createElement / ctx.React.Fragment so no global React is required
13
+ * - If sucrase is unavailable or transform throws, returns original code as graceful fallback
14
+ */
15
+ export declare function compileRunJs(code: string): Promise<string>;
@@ -0,0 +1,68 @@
1
+ /**
2
+ * This file is part of the NocoBase (R) project.
3
+ * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
+ * Authors: NocoBase Team.
5
+ *
6
+ * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
+ * For more information, please refer to: https://www.nocobase.com/agreement.
8
+ */
9
+
10
+ var __create = Object.create;
11
+ var __defProp = Object.defineProperty;
12
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
13
+ var __getOwnPropNames = Object.getOwnPropertyNames;
14
+ var __getProtoOf = Object.getPrototypeOf;
15
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
16
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
17
+ var __export = (target, all) => {
18
+ for (var name in all)
19
+ __defProp(target, name, { get: all[name], enumerable: true });
20
+ };
21
+ var __copyProps = (to, from, except, desc) => {
22
+ if (from && typeof from === "object" || typeof from === "function") {
23
+ for (let key of __getOwnPropNames(from))
24
+ if (!__hasOwnProp.call(to, key) && key !== except)
25
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
26
+ }
27
+ return to;
28
+ };
29
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
30
+ // If the importer is in node compatibility mode or this is not an ESM
31
+ // file that has been converted to a CommonJS file using a Babel-
32
+ // compatible transform (i.e. "__esModule" has not been set), then set
33
+ // "default" to the CommonJS "module.exports" for node compatibility.
34
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
35
+ mod
36
+ ));
37
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
38
+ var jsxTransform_exports = {};
39
+ __export(jsxTransform_exports, {
40
+ compileRunJs: () => compileRunJs
41
+ });
42
+ module.exports = __toCommonJS(jsxTransform_exports);
43
+ async function compileRunJs(code) {
44
+ var _a;
45
+ const maybeJSX = /<[A-Za-z]|<\//.test(code);
46
+ if (!maybeJSX) return code;
47
+ try {
48
+ const mod = await import("sucrase");
49
+ const transform = (mod == null ? void 0 : mod.transform) || ((_a = mod == null ? void 0 : mod.default) == null ? void 0 : _a.transform);
50
+ if (typeof transform !== "function") return code;
51
+ const res = transform(code, {
52
+ transforms: ["jsx"],
53
+ jsxPragma: "ctx.React.createElement",
54
+ jsxFragmentPragma: "ctx.React.Fragment",
55
+ // Keep ES syntax as-is; JSRunner runs in modern engines
56
+ disableESTransforms: true,
57
+ production: true
58
+ });
59
+ return (res && (res.code || (res == null ? void 0 : res.output))) ?? code;
60
+ } catch (_e) {
61
+ return code;
62
+ }
63
+ }
64
+ __name(compileRunJs, "compileRunJs");
65
+ // Annotate the CommonJS export names for ESM import in node:
66
+ 0 && (module.exports = {
67
+ compileRunJs
68
+ });
@@ -44,8 +44,8 @@ __export(params_resolvers_exports, {
44
44
  resolveExpressions: () => resolveExpressions
45
45
  });
46
46
  module.exports = __toCommonJS(params_resolvers_exports);
47
+ var import_shared = require("@nocobase/shared");
47
48
  var import_lodash = __toESM(require("lodash"));
48
- var import_client = require("@nocobase/utils/client");
49
49
  async function resolveDefaultParams(defaultParams, ctx) {
50
50
  if (!defaultParams) {
51
51
  return {};
@@ -275,9 +275,9 @@ async function compileExpression(expression, ctx) {
275
275
  if (!first) return void 0;
276
276
  const base = await ctx[first];
277
277
  if (segs.length === 0) return base;
278
- return (0, import_client.getValuesByPath)(base, segs.join("."));
278
+ return (0, import_shared.getValuesByPath)(base, segs.join("."));
279
279
  }, "resolveDotOnlyPath");
280
- const singleMatch = expression.match(/^\{\{\s*(.+)\s*\}\}$/);
280
+ const singleMatch = expression.match(/^\s*\{\{\s*([^{}]+?)\s*\}\}\s*$/);
281
281
  if (singleMatch) {
282
282
  const inner = singleMatch[1];
283
283
  const dotPath = matchDotOnly(inner);
@@ -12,7 +12,7 @@ export interface ViewParam {
12
12
  /** 标签页唯一标识符 */
13
13
  tabUid?: string;
14
14
  /** 弹窗记录的 id */
15
- filterByTk?: string;
15
+ filterByTk?: string | Record<string, string | number>;
16
16
  /** source Id */
17
17
  sourceId?: string;
18
18
  }
@@ -54,16 +54,52 @@ const parsePathnameToViewParams = /* @__PURE__ */ __name((pathname) => {
54
54
  break;
55
55
  }
56
56
  } else if (currentView && i + 1 < segments.length) {
57
- const value = segments[i + 1];
57
+ const rawValue = segments[i + 1];
58
+ let decoded = rawValue;
59
+ try {
60
+ decoded = decodeURIComponent(rawValue);
61
+ } catch (_) {
62
+ }
58
63
  switch (segment) {
59
64
  case "tab":
60
- currentView.tabUid = value;
65
+ currentView.tabUid = decoded;
61
66
  break;
62
- case "filterbytk":
63
- currentView.filterByTk = value;
67
+ case "filterbytk": {
68
+ const parseKeyValuePairs = /* @__PURE__ */ __name((s) => {
69
+ const obj = {};
70
+ s.split("&").forEach((pair) => {
71
+ const [k, v = ""] = pair.split("=");
72
+ if (!k) return;
73
+ try {
74
+ const key = decodeURIComponent(k);
75
+ const val = decodeURIComponent(v);
76
+ obj[key] = val;
77
+ } catch (_) {
78
+ obj[k] = v;
79
+ }
80
+ });
81
+ return obj;
82
+ }, "parseKeyValuePairs");
83
+ let parsed = decoded;
84
+ if (decoded && (decoded.startsWith("{") || decoded.startsWith("["))) {
85
+ try {
86
+ const maybe = JSON.parse(decoded);
87
+ if (maybe && typeof maybe === "object" && !Array.isArray(maybe)) {
88
+ parsed = maybe;
89
+ } else {
90
+ parsed = decoded;
91
+ }
92
+ } catch (_) {
93
+ parsed = decoded;
94
+ }
95
+ } else if (decoded && decoded.includes("=") && decoded.includes("&")) {
96
+ parsed = parseKeyValuePairs(decoded);
97
+ }
98
+ currentView.filterByTk = parsed;
64
99
  break;
100
+ }
65
101
  case "sourceid":
66
- currentView.sourceId = value;
102
+ currentView.sourceId = decoded;
67
103
  break;
68
104
  default:
69
105
  break;
@@ -0,0 +1,21 @@
1
+ /**
2
+ * This file is part of the NocoBase (R) project.
3
+ * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
+ * Authors: NocoBase Team.
5
+ *
6
+ * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
+ * For more information, please refer to: https://www.nocobase.com/agreement.
8
+ */
9
+ /**
10
+ * 递归清理筛选对象中的“空值”。
11
+ *
12
+ * 规则:
13
+ * - 移除:`null`、`undefined`、空字符串 `''`、空数组 `[]`、空对象 `{}`;
14
+ * - 保留:`false`、`0` 等有意义的“假值”。
15
+ *
16
+ * 注意:当清理后整体变为空结构时,返回 `undefined`,用于表示无需下发该条件。
17
+ *
18
+ * @param input 任意筛选对象/数组/原始值
19
+ * @returns 清理后的对象;若为空则返回 `undefined`
20
+ */
21
+ export declare function pruneFilter<T = any>(input: T): T | 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 __name = (target, value) => __defProp(target, "name", { value, configurable: true });
14
15
  var __export = (target, all) => {
15
16
  for (var name in all)
16
17
  __defProp(target, name, { get: all[name], enumerable: true });
@@ -24,21 +25,28 @@ var __copyProps = (to, from, except, desc) => {
24
25
  return to;
25
26
  };
26
27
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
27
- var try_catch_async_snippet_exports = {};
28
- __export(try_catch_async_snippet_exports, {
29
- default: () => try_catch_async_snippet_default
28
+ var pruneFilter_exports = {};
29
+ __export(pruneFilter_exports, {
30
+ pruneFilter: () => pruneFilter
30
31
  });
31
- module.exports = __toCommonJS(try_catch_async_snippet_exports);
32
- var try_catch_async_snippet_default = {
33
- contexts: ["*"],
34
- prefix: "sn-try",
35
- label: "Try/catch template",
36
- description: "Async try/catch template with toast message",
37
- content: `
38
- try {
39
- // await some async work
40
- } catch (e) {
41
- ctx.message.error(ctx.t('Operation failed: {{msg}}', { msg: String(e?.message || e) }));
32
+ module.exports = __toCommonJS(pruneFilter_exports);
33
+ function pruneFilter(input) {
34
+ if (Array.isArray(input)) {
35
+ const arr = input.map((v) => pruneFilter(v)).filter((v) => v !== void 0);
36
+ return arr.length ? arr : void 0;
37
+ }
38
+ if (input && typeof input === "object") {
39
+ const out = {};
40
+ Object.keys(input).forEach((k) => {
41
+ const v = pruneFilter(input[k]);
42
+ if (v !== void 0) out[k] = v;
43
+ });
44
+ return Object.keys(out).length ? out : void 0;
45
+ }
46
+ return input === null || input === void 0 || typeof input === "string" && input === "" ? void 0 : input;
42
47
  }
43
- `
44
- };
48
+ __name(pruneFilter, "pruneFilter");
49
+ // Annotate the CommonJS export names for ESM import in node:
50
+ 0 && (module.exports = {
51
+ pruneFilter
52
+ });
@@ -7,10 +7,12 @@
7
7
  * For more information, please refer to: https://www.nocobase.com/agreement.
8
8
  */
9
9
  /**
10
- * 统一的安全全局对象代理:window/document
11
- * - 默认仅允许常用的定时器、console、Math、Date、addEventListener(绑定原 window)
12
- * - document 仅允许 createElement/querySelector/querySelectorAll
10
+ * 统一的安全全局对象代理:window/document/navigator
11
+ * - window:仅允许常用的定时器、console、Math、Date、addEventListener、open(安全包装)、location(安全代理)
12
+ * - document:仅允许 createElement/querySelector/querySelectorAll
13
+ * - navigator:仅提供极少量低风险能力(clipboard.writeText、onLine、language、languages)
13
14
  * - 不允许随意访问未声明的属性,最小权限原则
14
15
  */
15
16
  export declare function createSafeWindow(extra?: Record<string, any>): {};
16
17
  export declare function createSafeDocument(extra?: Record<string, any>): {};
18
+ export declare function createSafeNavigator(extra?: Record<string, any>): {};
@@ -28,6 +28,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
28
28
  var safeGlobals_exports = {};
29
29
  __export(safeGlobals_exports, {
30
30
  createSafeDocument: () => createSafeDocument,
31
+ createSafeNavigator: () => createSafeNavigator,
31
32
  createSafeWindow: () => createSafeWindow
32
33
  });
33
34
  module.exports = __toCommonJS(safeGlobals_exports);
@@ -172,8 +173,47 @@ function createSafeDocument(extra) {
172
173
  );
173
174
  }
174
175
  __name(createSafeDocument, "createSafeDocument");
176
+ function createSafeNavigator(extra) {
177
+ var _a;
178
+ const nav = typeof window !== "undefined" && window.navigator || void 0;
179
+ const clipboard = {};
180
+ const writeText = (_a = nav == null ? void 0 : nav.clipboard) == null ? void 0 : _a.writeText;
181
+ if (typeof writeText === "function") {
182
+ clipboard.writeText = writeText.bind(nav.clipboard);
183
+ }
184
+ const allowed = {
185
+ clipboard
186
+ };
187
+ Object.defineProperty(allowed, "onLine", {
188
+ get: /* @__PURE__ */ __name(() => !!(nav == null ? void 0 : nav.onLine), "get"),
189
+ enumerable: true,
190
+ configurable: false
191
+ });
192
+ Object.defineProperty(allowed, "language", {
193
+ get: /* @__PURE__ */ __name(() => nav == null ? void 0 : nav.language, "get"),
194
+ enumerable: true,
195
+ configurable: false
196
+ });
197
+ Object.defineProperty(allowed, "languages", {
198
+ get: /* @__PURE__ */ __name(() => (nav == null ? void 0 : nav.languages) ? [...nav.languages] : void 0, "get"),
199
+ enumerable: true,
200
+ configurable: false
201
+ });
202
+ Object.assign(allowed, extra || {});
203
+ return new Proxy(
204
+ {},
205
+ {
206
+ get(_t, prop) {
207
+ if (prop in allowed) return allowed[prop];
208
+ throw new Error(`Access to navigator property "${String(prop)}" is not allowed.`);
209
+ }
210
+ }
211
+ );
212
+ }
213
+ __name(createSafeNavigator, "createSafeNavigator");
175
214
  // Annotate the CommonJS export names for ESM import in node:
176
215
  0 && (module.exports = {
177
216
  createSafeDocument,
217
+ createSafeNavigator,
178
218
  createSafeWindow
179
219
  });
@@ -131,14 +131,14 @@ function compileUiSchema(scope, uiSchema, options = {}) {
131
131
  }
132
132
  __name(compileUiSchema, "compileUiSchema");
133
133
  async function resolveStepUiSchema(model, flow, step) {
134
- var _a, _b;
134
+ var _a;
135
135
  const flowRuntimeContext = new import_flowContext.FlowRuntimeContext(model, flow.key, "settings");
136
136
  (0, import_setupRuntimeContextSteps.setupRuntimeContextSteps)(flowRuntimeContext, flow.steps, model, flow.key);
137
137
  flowRuntimeContext.defineProperty("currentStep", { value: step });
138
138
  let stepUiSchema = step.uiSchema;
139
139
  if (step.use) {
140
140
  try {
141
- const action = (_b = (_a = model.flowEngine) == null ? void 0 : _a.getAction) == null ? void 0 : _b.call(_a, step.use);
141
+ const action = (_a = model.getAction) == null ? void 0 : _a.call(model, step.use);
142
142
  if (action && action.uiSchema) {
143
143
  stepUiSchema = stepUiSchema || action.uiSchema;
144
144
  }