@nocobase/flow-engine 2.0.0-alpha.2 → 2.0.0-alpha.20

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 (387) 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 +2 -2
  6. package/lib/JSRunner.js +3 -0
  7. package/lib/ViewScopedFlowEngine.d.ts +1 -1
  8. package/lib/components/FieldModelRenderer.js +10 -4
  9. package/lib/components/FieldSkeleton.d.ts +10 -0
  10. package/lib/components/FieldSkeleton.js +64 -0
  11. package/lib/components/FlowContextSelector.js +7 -2
  12. package/lib/components/FlowModelRenderer.d.ts +2 -5
  13. package/lib/components/FlowModelRenderer.js +16 -47
  14. package/lib/components/FormItem.js +5 -1
  15. package/lib/{runjs-context/snippets/global/requireAsync.snippet.d.ts → components/dnd/findModelUidPosition.d.ts} +4 -7
  16. package/lib/{runjs-context/snippets/scene/jsblock/jsx-mount.snippet.js → components/dnd/findModelUidPosition.js} +23 -19
  17. package/lib/components/dnd/gridDragPlanner.d.ts +130 -0
  18. package/lib/components/dnd/gridDragPlanner.js +497 -0
  19. package/lib/components/dnd/index.d.ts +2 -2
  20. package/lib/components/dnd/index.js +5 -5
  21. package/lib/components/settings/wrappers/contextual/StepSettingsDialog.js +7 -1
  22. package/lib/components/variables/VariableInput.js +16 -2
  23. package/lib/components/variables/VariableTag.js +43 -2
  24. package/lib/components/variables/types.d.ts +2 -0
  25. package/lib/data-source/index.d.ts +12 -4
  26. package/lib/data-source/index.js +18 -12
  27. package/lib/data-source/sortCollectionsByInherits.d.ts +10 -0
  28. package/lib/data-source/sortCollectionsByInherits.js +71 -0
  29. package/lib/executor/FlowExecutor.d.ts +4 -5
  30. package/lib/executor/FlowExecutor.js +122 -94
  31. package/lib/flowContext.d.ts +33 -5
  32. package/lib/flowContext.js +145 -74
  33. package/lib/flowEngine.d.ts +8 -1
  34. package/lib/flowEngine.js +12 -2
  35. package/lib/flowSettings.d.ts +2 -1
  36. package/lib/flowSettings.js +7 -3
  37. package/lib/hooks/useApplyAutoFlows.js +2 -1
  38. package/lib/index.d.ts +6 -1
  39. package/lib/index.js +29 -3
  40. package/lib/models/CollectionFieldModel.d.ts +2 -0
  41. package/lib/models/CollectionFieldModel.js +43 -3
  42. package/lib/models/flowModel.d.ts +28 -29
  43. package/lib/models/flowModel.js +110 -88
  44. package/lib/models/forkFlowModel.d.ts +2 -2
  45. package/lib/models/forkFlowModel.js +29 -6
  46. package/lib/provider.d.ts +3 -1
  47. package/lib/provider.js +7 -5
  48. package/lib/resources/multiRecordResource.js +2 -0
  49. package/lib/resources/singleRecordResource.js +1 -0
  50. package/lib/runjs-context/contexts/FormJSFieldItemRunJSContext.d.ts +1 -6
  51. package/lib/runjs-context/contexts/FormJSFieldItemRunJSContext.js +27 -20
  52. package/lib/runjs-context/contexts/JSBlockRunJSContext.d.ts +1 -6
  53. package/lib/runjs-context/contexts/JSBlockRunJSContext.js +46 -33
  54. package/lib/runjs-context/contexts/JSCollectionActionRunJSContext.d.ts +1 -2
  55. package/lib/runjs-context/contexts/JSCollectionActionRunJSContext.js +14 -15
  56. package/lib/runjs-context/contexts/{LinkageRunJSContext.d.ts → JSColumnRunJSContext.d.ts} +6 -3
  57. package/lib/runjs-context/contexts/JSColumnRunJSContext.js +78 -0
  58. package/lib/runjs-context/contexts/JSFieldRunJSContext.d.ts +1 -6
  59. package/lib/runjs-context/contexts/JSFieldRunJSContext.js +28 -24
  60. package/lib/runjs-context/contexts/JSItemRunJSContext.d.ts +1 -6
  61. package/lib/runjs-context/contexts/JSItemRunJSContext.js +24 -20
  62. package/lib/runjs-context/contexts/JSRecordActionRunJSContext.d.ts +1 -2
  63. package/lib/runjs-context/contexts/JSRecordActionRunJSContext.js +16 -17
  64. package/lib/runjs-context/contexts/base.d.ts +9 -0
  65. package/lib/runjs-context/contexts/base.js +169 -0
  66. package/lib/runjs-context/helpers.d.ts +5 -2
  67. package/lib/runjs-context/helpers.js +36 -27
  68. package/lib/runjs-context/registry.d.ts +7 -4
  69. package/lib/runjs-context/registry.js +10 -42
  70. package/lib/runjs-context/setup.d.ts +9 -0
  71. package/lib/runjs-context/setup.js +82 -0
  72. package/lib/runjs-context/snippets/global/{copy-record-json.snippet.js → api-request.snippet.js} +25 -10
  73. package/lib/runjs-context/snippets/global/clipboard-copy-text.snippet.js +61 -0
  74. package/lib/runjs-context/snippets/global/{view-navigation-push.snippet.js → import-esm.snippet.js} +26 -12
  75. package/lib/runjs-context/snippets/global/message-error.snippet.js +6 -0
  76. package/lib/runjs-context/snippets/global/message-success.snippet.js +6 -0
  77. package/lib/runjs-context/snippets/global/notification-open.snippet.d.ts +3 -8
  78. package/lib/runjs-context/snippets/global/notification-open.snippet.js +8 -1
  79. package/lib/runjs-context/snippets/global/open-view-dialog.snippet.js +10 -3
  80. package/lib/runjs-context/snippets/global/open-view-drawer.snippet.js +10 -3
  81. package/lib/runjs-context/snippets/global/query-selector.snippet.js +53 -0
  82. package/lib/runjs-context/snippets/global/require-amd.snippet.d.ts +11 -0
  83. package/lib/runjs-context/snippets/global/{requireAsync.snippet.js → require-amd.snippet.js} +16 -13
  84. package/lib/runjs-context/snippets/global/window-open.snippet.d.ts +3 -8
  85. package/lib/runjs-context/snippets/global/window-open.snippet.js +8 -1
  86. package/lib/runjs-context/snippets/index.d.ts +14 -3
  87. package/lib/runjs-context/snippets/index.js +160 -40
  88. package/lib/runjs-context/snippets/scene/block/add-event-listener.snippet.d.ts +11 -0
  89. package/lib/runjs-context/snippets/scene/{jsblock → block}/add-event-listener.snippet.js +11 -2
  90. package/lib/runjs-context/snippets/scene/block/api-fetch-render-list.snippet.d.ts +11 -0
  91. package/lib/runjs-context/snippets/scene/block/api-fetch-render-list.snippet.js +64 -0
  92. package/lib/runjs-context/snippets/scene/block/chartjs-bar.snippet.d.ts +11 -0
  93. package/lib/runjs-context/snippets/scene/block/chartjs-bar.snippet.js +99 -0
  94. package/lib/runjs-context/snippets/{libs → scene/block}/echarts-init.snippet.js +24 -7
  95. package/lib/runjs-context/snippets/scene/block/render-button-handler.snippet.d.ts +11 -0
  96. package/lib/runjs-context/snippets/scene/{jsblock → block}/render-button-handler.snippet.js +12 -6
  97. package/lib/runjs-context/snippets/scene/block/render-iframe.snippet.d.ts +11 -0
  98. package/lib/runjs-context/snippets/scene/block/render-iframe.snippet.js +57 -0
  99. package/lib/runjs-context/snippets/scene/block/render-info-card.snippet.d.ts +11 -0
  100. package/lib/runjs-context/snippets/scene/block/render-info-card.snippet.js +72 -0
  101. package/lib/runjs-context/snippets/scene/block/render-react.snippet.d.ts +11 -0
  102. package/lib/runjs-context/snippets/scene/{jsblock → block}/render-react.snippet.js +12 -11
  103. package/lib/runjs-context/snippets/scene/block/render-statistics.snippet.d.ts +11 -0
  104. package/lib/runjs-context/snippets/scene/block/render-statistics.snippet.js +100 -0
  105. package/lib/runjs-context/snippets/scene/block/render-timeline.snippet.d.ts +11 -0
  106. package/lib/runjs-context/snippets/scene/block/render-timeline.snippet.js +85 -0
  107. package/lib/runjs-context/snippets/scene/block/resource-example.snippet.d.ts +11 -0
  108. package/lib/runjs-context/snippets/scene/block/resource-example.snippet.js +60 -0
  109. package/lib/runjs-context/snippets/scene/block/three-users-orbit.snippet.d.ts +11 -0
  110. package/lib/runjs-context/snippets/scene/block/three-users-orbit.snippet.js +283 -0
  111. package/lib/runjs-context/snippets/scene/block/vue-component.snippet.d.ts +11 -0
  112. package/lib/runjs-context/snippets/scene/block/vue-component.snippet.js +124 -0
  113. package/lib/runjs-context/snippets/scene/detail/color-by-value.snippet.d.ts +11 -0
  114. package/lib/runjs-context/snippets/scene/{jsfield → detail}/color-by-value.snippet.js +13 -3
  115. package/lib/runjs-context/snippets/scene/detail/copy-to-clipboard.snippet.d.ts +11 -0
  116. package/lib/runjs-context/snippets/{global → scene/detail}/copy-to-clipboard.snippet.js +28 -6
  117. package/lib/runjs-context/snippets/scene/detail/format-number.snippet.d.ts +11 -0
  118. package/lib/runjs-context/snippets/scene/{jsfield → detail}/format-number.snippet.js +13 -3
  119. package/lib/runjs-context/snippets/scene/detail/innerHTML-value.snippet.d.ts +11 -0
  120. package/lib/runjs-context/snippets/scene/{jsfield → detail}/innerHTML-value.snippet.js +13 -3
  121. package/lib/runjs-context/snippets/scene/detail/percentage-bar.snippet.d.ts +11 -0
  122. package/lib/runjs-context/snippets/scene/detail/percentage-bar.snippet.js +82 -0
  123. package/lib/runjs-context/snippets/scene/detail/relative-time.snippet.d.ts +11 -0
  124. package/lib/runjs-context/snippets/scene/detail/relative-time.snippet.js +80 -0
  125. package/lib/runjs-context/snippets/scene/detail/status-tag.snippet.d.ts +11 -0
  126. package/lib/runjs-context/snippets/scene/detail/status-tag.snippet.js +74 -0
  127. package/lib/runjs-context/snippets/scene/form/calculate-total.snippet.d.ts +11 -0
  128. package/lib/runjs-context/snippets/scene/form/calculate-total.snippet.js +63 -0
  129. package/lib/runjs-context/snippets/scene/form/cascade-select.snippet.d.ts +11 -0
  130. package/lib/runjs-context/snippets/scene/form/cascade-select.snippet.js +81 -0
  131. package/lib/runjs-context/snippets/scene/form/conditional-required.snippet.d.ts +11 -0
  132. package/lib/runjs-context/snippets/scene/form/conditional-required.snippet.js +64 -0
  133. package/lib/runjs-context/snippets/scene/form/copy-field-values.snippet.d.ts +11 -0
  134. package/lib/runjs-context/snippets/scene/form/copy-field-values.snippet.js +74 -0
  135. package/lib/runjs-context/snippets/scene/form/render-basic.snippet.d.ts +11 -0
  136. package/lib/runjs-context/snippets/scene/{jsitem → form}/render-basic.snippet.js +11 -2
  137. package/lib/runjs-context/snippets/scene/form/set-disabled.snippet.d.ts +11 -0
  138. package/lib/runjs-context/snippets/scene/{linkage → form}/set-disabled.snippet.js +12 -3
  139. package/lib/runjs-context/snippets/scene/form/set-field-value.snippet.d.ts +11 -0
  140. package/lib/runjs-context/snippets/scene/{linkage → form}/set-field-value.snippet.js +12 -3
  141. package/lib/runjs-context/snippets/scene/form/set-required.snippet.d.ts +11 -0
  142. package/lib/runjs-context/snippets/scene/{linkage → form}/set-required.snippet.js +12 -3
  143. package/lib/runjs-context/snippets/scene/form/toggle-multiple-fields.snippet.d.ts +11 -0
  144. package/lib/runjs-context/snippets/scene/form/toggle-multiple-fields.snippet.js +67 -0
  145. package/lib/runjs-context/snippets/scene/form/toggle-visible.snippet.d.ts +11 -0
  146. package/lib/runjs-context/snippets/scene/{linkage → form}/toggle-visible.snippet.js +12 -3
  147. package/lib/runjs-context/snippets/scene/table/cell-open-dialog.snippet.d.ts +11 -0
  148. package/lib/runjs-context/snippets/scene/table/cell-open-dialog.snippet.js +64 -0
  149. package/lib/runjs-context/snippets/scene/table/collection-selected-count.snippet.d.ts +11 -0
  150. package/lib/runjs-context/snippets/scene/{actions → table}/collection-selected-count.snippet.js +11 -2
  151. package/lib/runjs-context/snippets/scene/table/concat-fields.snippet.d.ts +11 -0
  152. package/lib/runjs-context/snippets/scene/table/concat-fields.snippet.js +79 -0
  153. package/lib/runjs-context/snippets/scene/table/destroy-selected.snippet.d.ts +11 -0
  154. package/lib/runjs-context/snippets/{global/log-json-record.snippet.js → scene/table/destroy-selected.snippet.js} +24 -11
  155. package/lib/runjs-context/snippets/scene/table/export-selected-json.snippet.d.ts +11 -0
  156. package/lib/runjs-context/snippets/scene/table/export-selected-json.snippet.js +64 -0
  157. package/lib/runjs-context/snippets/scene/table/iterate-selected-rows.snippet.d.ts +11 -0
  158. package/lib/runjs-context/snippets/scene/{actions → table}/iterate-selected-rows.snippet.js +11 -2
  159. package/lib/runjs-context/snippets/types.d.ts +9 -1
  160. package/lib/types.d.ts +15 -3
  161. package/lib/types.js +4 -3
  162. package/lib/utils/buildSettingsViewInputArgs.d.ts +19 -0
  163. package/lib/utils/buildSettingsViewInputArgs.js +75 -0
  164. package/lib/utils/index.d.ts +3 -2
  165. package/lib/utils/index.js +5 -2
  166. package/lib/utils/params-resolvers.js +2 -2
  167. package/lib/utils/safeGlobals.d.ts +5 -3
  168. package/lib/utils/safeGlobals.js +40 -0
  169. package/lib/utils/serverContextParams.d.ts +1 -0
  170. package/lib/utils/variablesParams.d.ts +9 -5
  171. package/lib/utils/variablesParams.js +47 -36
  172. package/lib/views/PageComponent.js +2 -1
  173. package/lib/views/createViewMeta.d.ts +29 -1
  174. package/lib/views/createViewMeta.js +321 -72
  175. package/lib/views/index.d.ts +1 -0
  176. package/lib/views/index.js +3 -0
  177. package/lib/views/useDialog.d.ts +8 -8
  178. package/lib/views/useDialog.js +8 -7
  179. package/lib/views/useDrawer.d.ts +8 -8
  180. package/lib/views/useDrawer.js +40 -26
  181. package/lib/views/usePage.d.ts +8 -8
  182. package/lib/views/usePage.js +8 -7
  183. package/package.json +4 -3
  184. package/src/BlockScopedFlowEngine.ts +86 -0
  185. package/src/FlowContextProvider.tsx +4 -2
  186. package/src/JSRunner.ts +3 -0
  187. package/src/ViewScopedFlowEngine.ts +1 -1
  188. package/src/__tests__/JSRunner.test.ts +62 -53
  189. package/src/__tests__/blockScopedFlowEngine.test.ts +154 -0
  190. package/src/__tests__/flow-engine.test.ts +3 -0
  191. package/src/__tests__/flowContextCreateJSRunner.test.ts +163 -0
  192. package/src/__tests__/flowEngine.saveModel.test.ts +4 -0
  193. package/src/__tests__/flowRunJSContextDefine.test.ts +508 -0
  194. package/src/__tests__/globalFlowRegistry.test.ts +1 -1
  195. package/src/__tests__/runjsContext.test.ts +216 -35
  196. package/src/__tests__/runjsContextImplementations.test.ts +217 -0
  197. package/src/__tests__/runjsContextRuntime.test.ts +269 -0
  198. package/src/__tests__/runjsEdgeCases.test.ts +281 -0
  199. package/src/__tests__/runjsLocales.test.ts +36 -0
  200. package/src/__tests__/runjsRuntimeFeatures.test.ts +449 -0
  201. package/src/__tests__/runjsSnippets.test.ts +140 -0
  202. package/src/__tests__/viewScopedFlowEngine.test.ts +3 -3
  203. package/src/components/DynamicFlowsEditor.tsx +3 -4
  204. package/src/components/FieldModelRenderer.tsx +16 -5
  205. package/src/components/FieldSkeleton.tsx +27 -0
  206. package/src/components/FlowContextSelector.tsx +6 -2
  207. package/src/components/FlowModelRenderer.tsx +30 -78
  208. package/src/components/FormItem.tsx +8 -1
  209. package/src/components/__tests__/flow-model-render-error-fallback.test.tsx +5 -5
  210. package/src/components/__tests__/gridDragPlanner.test.ts +494 -0
  211. package/src/components/dnd/README.md +149 -0
  212. package/src/components/dnd/findModelUidPosition.ts +26 -0
  213. package/src/components/dnd/gridDragPlanner.ts +659 -0
  214. package/src/components/dnd/index.tsx +3 -3
  215. package/src/components/settings/wrappers/contextual/StepSettingsDialog.tsx +14 -1
  216. package/src/components/subModel/__tests__/AddSubModelButton.test.tsx +1 -0
  217. package/src/components/variables/VariableInput.tsx +22 -2
  218. package/src/components/variables/VariableTag.tsx +54 -2
  219. package/src/components/variables/types.ts +2 -0
  220. package/src/data-source/__tests__/sortCollectionsByInherits.test.ts +125 -0
  221. package/src/data-source/index.ts +16 -10
  222. package/src/data-source/sortCollectionsByInherits.ts +61 -0
  223. package/src/executor/FlowExecutor.ts +160 -114
  224. package/src/executor/__tests__/flowExecutor.test.ts +151 -5
  225. package/src/flowContext.ts +196 -93
  226. package/src/flowEngine.ts +13 -2
  227. package/src/flowSettings.ts +8 -3
  228. package/src/hooks/useApplyAutoFlows.ts +3 -1
  229. package/src/index.ts +11 -1
  230. package/src/models/CollectionFieldModel.tsx +43 -4
  231. package/src/models/__tests__/flowModel.getFlows.sort.test.ts +4 -4
  232. package/src/models/__tests__/flowModel.test.ts +218 -95
  233. package/src/models/flowModel.tsx +146 -122
  234. package/src/models/forkFlowModel.ts +37 -5
  235. package/src/provider.tsx +10 -7
  236. package/src/resources/multiRecordResource.ts +2 -0
  237. package/src/resources/singleRecordResource.ts +1 -0
  238. package/src/runjs-context/contexts/FormJSFieldItemRunJSContext.ts +28 -21
  239. package/src/runjs-context/contexts/JSBlockRunJSContext.ts +46 -34
  240. package/src/runjs-context/contexts/JSCollectionActionRunJSContext.ts +15 -16
  241. package/src/runjs-context/contexts/JSColumnRunJSContext.ts +58 -0
  242. package/src/runjs-context/contexts/JSFieldRunJSContext.ts +30 -25
  243. package/src/runjs-context/contexts/JSItemRunJSContext.ts +25 -21
  244. package/src/runjs-context/contexts/JSRecordActionRunJSContext.ts +17 -18
  245. package/src/runjs-context/contexts/base.ts +155 -0
  246. package/src/runjs-context/helpers.ts +32 -30
  247. package/src/runjs-context/registry.ts +16 -47
  248. package/src/runjs-context/setup.ts +51 -0
  249. package/src/runjs-context/snippets/global/api-request.snippet.ts +38 -0
  250. package/src/runjs-context/snippets/global/clipboard-copy-text.snippet.ts +42 -0
  251. package/src/runjs-context/snippets/global/import-esm.snippet.ts +39 -0
  252. package/src/runjs-context/snippets/global/message-error.snippet.ts +6 -0
  253. package/src/runjs-context/snippets/global/message-success.snippet.ts +6 -0
  254. package/src/runjs-context/snippets/global/notification-open.snippet.ts +11 -1
  255. package/src/runjs-context/snippets/global/open-view-dialog.snippet.ts +10 -3
  256. package/src/runjs-context/snippets/global/open-view-drawer.snippet.ts +10 -3
  257. package/src/runjs-context/snippets/global/query-selector.snippet.ts +34 -0
  258. package/src/runjs-context/snippets/global/require-amd.snippet.ts +30 -0
  259. package/src/runjs-context/snippets/global/window-open.snippet.ts +11 -1
  260. package/src/runjs-context/snippets/index.ts +176 -39
  261. package/src/runjs-context/snippets/scene/{jsblock → block}/add-event-listener.snippet.ts +14 -2
  262. package/src/runjs-context/snippets/scene/block/api-fetch-render-list.snippet.ts +45 -0
  263. package/src/runjs-context/snippets/scene/block/chartjs-bar.snippet.ts +80 -0
  264. package/src/runjs-context/snippets/scene/block/echarts-init.snippet.ts +44 -0
  265. package/src/runjs-context/snippets/scene/{jsblock → block}/render-button-handler.snippet.ts +15 -6
  266. package/src/runjs-context/snippets/scene/block/render-iframe.snippet.ts +38 -0
  267. package/src/runjs-context/snippets/scene/block/render-info-card.snippet.ts +53 -0
  268. package/src/runjs-context/snippets/scene/{jsblock → block}/render-react.snippet.ts +15 -11
  269. package/src/runjs-context/snippets/scene/block/render-statistics.snippet.ts +81 -0
  270. package/src/runjs-context/snippets/scene/block/render-timeline.snippet.ts +66 -0
  271. package/src/runjs-context/snippets/scene/block/resource-example.snippet.ts +46 -0
  272. package/src/runjs-context/snippets/scene/block/three-users-orbit.snippet.ts +264 -0
  273. package/src/runjs-context/snippets/scene/block/vue-component.snippet.ts +105 -0
  274. package/src/runjs-context/snippets/scene/detail/color-by-value.snippet.ts +33 -0
  275. package/src/runjs-context/snippets/scene/detail/copy-to-clipboard.snippet.ts +45 -0
  276. package/src/runjs-context/snippets/scene/detail/format-number.snippet.ts +32 -0
  277. package/src/runjs-context/snippets/scene/detail/innerHTML-value.snippet.ts +31 -0
  278. package/src/runjs-context/snippets/scene/detail/percentage-bar.snippet.ts +63 -0
  279. package/src/runjs-context/snippets/scene/detail/relative-time.snippet.ts +61 -0
  280. package/src/runjs-context/snippets/scene/detail/status-tag.snippet.ts +55 -0
  281. package/src/runjs-context/snippets/scene/form/calculate-total.snippet.ts +44 -0
  282. package/src/runjs-context/snippets/scene/form/cascade-select.snippet.ts +62 -0
  283. package/src/runjs-context/snippets/scene/form/conditional-required.snippet.ts +45 -0
  284. package/src/runjs-context/snippets/scene/form/copy-field-values.snippet.ts +55 -0
  285. package/src/runjs-context/snippets/scene/{jsitem → form}/render-basic.snippet.ts +14 -2
  286. package/src/runjs-context/snippets/scene/{linkage → form}/set-disabled.snippet.ts +15 -3
  287. package/src/runjs-context/snippets/scene/{linkage → form}/set-field-value.snippet.ts +15 -3
  288. package/src/runjs-context/snippets/scene/{linkage → form}/set-required.snippet.ts +15 -3
  289. package/src/runjs-context/snippets/scene/form/toggle-multiple-fields.snippet.ts +48 -0
  290. package/src/runjs-context/snippets/scene/{linkage → form}/toggle-visible.snippet.ts +15 -3
  291. package/src/runjs-context/snippets/scene/table/cell-open-dialog.snippet.ts +45 -0
  292. package/src/runjs-context/snippets/scene/{actions → table}/collection-selected-count.snippet.ts +14 -2
  293. package/src/runjs-context/snippets/scene/table/concat-fields.snippet.ts +60 -0
  294. package/src/runjs-context/snippets/scene/table/destroy-selected.snippet.ts +36 -0
  295. package/src/runjs-context/snippets/scene/table/export-selected-json.snippet.ts +45 -0
  296. package/src/runjs-context/snippets/scene/{actions → table}/iterate-selected-rows.snippet.ts +14 -2
  297. package/src/runjs-context/snippets/types.ts +5 -1
  298. package/src/types.ts +13 -0
  299. package/src/utils/__tests__/safeGlobals.test.ts +22 -1
  300. package/src/utils/buildSettingsViewInputArgs.ts +72 -0
  301. package/src/utils/index.ts +2 -2
  302. package/src/utils/params-resolvers.ts +1 -1
  303. package/src/utils/safeGlobals.ts +49 -3
  304. package/src/utils/serverContextParams.ts +1 -0
  305. package/src/utils/variablesParams.ts +50 -38
  306. package/src/views/PageComponent.tsx +1 -1
  307. package/src/views/createViewMeta.ts +372 -70
  308. package/src/views/index.tsx +1 -0
  309. package/src/views/useDialog.tsx +12 -10
  310. package/src/views/useDrawer.tsx +60 -36
  311. package/src/views/usePage.tsx +13 -10
  312. package/lib/components/dnd/getMousePositionOnElement.d.ts +0 -50
  313. package/lib/components/dnd/getMousePositionOnElement.js +0 -95
  314. package/lib/components/dnd/moveBlock.d.ts +0 -33
  315. package/lib/components/dnd/moveBlock.js +0 -302
  316. package/lib/runjs-context/contexts/FlowRunJSContext.d.ts +0 -38
  317. package/lib/runjs-context/contexts/FlowRunJSContext.js +0 -217
  318. package/lib/runjs-context/contexts/LinkageRunJSContext.js +0 -62
  319. package/lib/runjs-context/index.d.ts +0 -19
  320. package/lib/runjs-context/index.js +0 -57
  321. package/lib/runjs-context/snippets/global/api-request-get.snippet.d.ts +0 -16
  322. package/lib/runjs-context/snippets/global/api-request-get.snippet.js +0 -42
  323. package/lib/runjs-context/snippets/global/api-request-post.snippet.d.ts +0 -16
  324. package/lib/runjs-context/snippets/global/api-request-post.snippet.js +0 -42
  325. package/lib/runjs-context/snippets/global/console-log-ctx.snippet.d.ts +0 -16
  326. package/lib/runjs-context/snippets/global/console-log-ctx.snippet.js +0 -41
  327. package/lib/runjs-context/snippets/global/sleep.snippet.d.ts +0 -16
  328. package/lib/runjs-context/snippets/global/sleep.snippet.js +0 -43
  329. package/lib/runjs-context/snippets/global/try-catch-async.snippet.d.ts +0 -16
  330. package/lib/runjs-context/snippets/global/try-catch-async.snippet.js +0 -44
  331. package/lib/runjs-context/snippets/libs/echarts-init.snippet.d.ts +0 -15
  332. package/lib/runjs-context/snippets/scene/actions/collection-selected-count.snippet.d.ts +0 -15
  333. package/lib/runjs-context/snippets/scene/actions/iterate-selected-rows.snippet.d.ts +0 -15
  334. package/lib/runjs-context/snippets/scene/actions/record-id-message.snippet.d.ts +0 -15
  335. package/lib/runjs-context/snippets/scene/actions/record-id-message.snippet.js +0 -43
  336. package/lib/runjs-context/snippets/scene/actions/run-action-basic.snippet.d.ts +0 -15
  337. package/lib/runjs-context/snippets/scene/actions/run-action-basic.snippet.js +0 -40
  338. package/lib/runjs-context/snippets/scene/jsblock/add-event-listener.snippet.d.ts +0 -15
  339. package/lib/runjs-context/snippets/scene/jsblock/append-style.snippet.d.ts +0 -15
  340. package/lib/runjs-context/snippets/scene/jsblock/append-style.snippet.js +0 -42
  341. package/lib/runjs-context/snippets/scene/jsblock/jsx-mount.snippet.d.ts +0 -15
  342. package/lib/runjs-context/snippets/scene/jsblock/jsx-unmount.snippet.d.ts +0 -15
  343. package/lib/runjs-context/snippets/scene/jsblock/jsx-unmount.snippet.js +0 -41
  344. package/lib/runjs-context/snippets/scene/jsblock/render-basic.snippet.d.ts +0 -15
  345. package/lib/runjs-context/snippets/scene/jsblock/render-basic.snippet.js +0 -41
  346. package/lib/runjs-context/snippets/scene/jsblock/render-button-handler.snippet.d.ts +0 -15
  347. package/lib/runjs-context/snippets/scene/jsblock/render-card.snippet.js +0 -45
  348. package/lib/runjs-context/snippets/scene/jsblock/render-react.snippet.d.ts +0 -15
  349. package/lib/runjs-context/snippets/scene/jsfield/color-by-value.snippet.d.ts +0 -15
  350. package/lib/runjs-context/snippets/scene/jsfield/format-number.snippet.d.ts +0 -15
  351. package/lib/runjs-context/snippets/scene/jsfield/innerHTML-value.snippet.d.ts +0 -15
  352. package/lib/runjs-context/snippets/scene/jsitem/render-basic.snippet.d.ts +0 -15
  353. package/lib/runjs-context/snippets/scene/linkage/set-disabled.snippet.d.ts +0 -15
  354. package/lib/runjs-context/snippets/scene/linkage/set-field-value.snippet.d.ts +0 -15
  355. package/lib/runjs-context/snippets/scene/linkage/set-required.snippet.d.ts +0 -15
  356. package/lib/runjs-context/snippets/scene/linkage/toggle-visible.snippet.d.ts +0 -15
  357. package/src/components/dnd/getMousePositionOnElement.ts +0 -115
  358. package/src/components/dnd/moveBlock.ts +0 -379
  359. package/src/runjs-context/contexts/FlowRunJSContext.ts +0 -190
  360. package/src/runjs-context/contexts/LinkageRunJSContext.ts +0 -35
  361. package/src/runjs-context/index.ts +0 -20
  362. package/src/runjs-context/snippets/global/api-request-get.snippet.ts +0 -20
  363. package/src/runjs-context/snippets/global/api-request-post.snippet.ts +0 -20
  364. package/src/runjs-context/snippets/global/console-log-ctx.snippet.ts +0 -19
  365. package/src/runjs-context/snippets/global/copy-record-json.snippet.ts +0 -21
  366. package/src/runjs-context/snippets/global/copy-to-clipboard.snippet.ts +0 -21
  367. package/src/runjs-context/snippets/global/log-json-record.snippet.ts +0 -21
  368. package/src/runjs-context/snippets/global/requireAsync.snippet.ts +0 -24
  369. package/src/runjs-context/snippets/global/sleep.snippet.ts +0 -21
  370. package/src/runjs-context/snippets/global/try-catch-async.snippet.ts +0 -22
  371. package/src/runjs-context/snippets/global/view-navigation-push.snippet.ts +0 -23
  372. package/src/runjs-context/snippets/libs/echarts-init.snippet.ts +0 -24
  373. package/src/runjs-context/snippets/scene/actions/record-id-message.snippet.ts +0 -21
  374. package/src/runjs-context/snippets/scene/actions/run-action-basic.snippet.ts +0 -18
  375. package/src/runjs-context/snippets/scene/jsblock/append-style.snippet.ts +0 -20
  376. package/src/runjs-context/snippets/scene/jsblock/jsx-mount.snippet.ts +0 -24
  377. package/src/runjs-context/snippets/scene/jsblock/jsx-unmount.snippet.ts +0 -19
  378. package/src/runjs-context/snippets/scene/jsblock/render-basic.snippet.ts +0 -24
  379. package/src/runjs-context/snippets/scene/jsblock/render-card.snippet.ts +0 -30
  380. package/src/runjs-context/snippets/scene/jsfield/color-by-value.snippet.ts +0 -20
  381. package/src/runjs-context/snippets/scene/jsfield/format-number.snippet.ts +0 -19
  382. package/src/runjs-context/snippets/scene/jsfield/innerHTML-value.snippet.ts +0 -18
  383. /package/lib/runjs-context/snippets/global/{copy-record-json.snippet.d.ts → api-request.snippet.d.ts} +0 -0
  384. /package/lib/runjs-context/snippets/global/{copy-to-clipboard.snippet.d.ts → clipboard-copy-text.snippet.d.ts} +0 -0
  385. /package/lib/runjs-context/snippets/global/{log-json-record.snippet.d.ts → import-esm.snippet.d.ts} +0 -0
  386. /package/lib/runjs-context/snippets/global/{view-navigation-push.snippet.d.ts → query-selector.snippet.d.ts} +0 -0
  387. /package/lib/runjs-context/snippets/scene/{jsblock/render-card.snippet.d.ts → block/echarts-init.snippet.d.ts} +0 -0
@@ -0,0 +1,169 @@
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 base_exports = {};
29
+ __export(base_exports, {
30
+ defineBaseContextMeta: () => defineBaseContextMeta
31
+ });
32
+ module.exports = __toCommonJS(base_exports);
33
+ var import_flowContext = require("../../flowContext");
34
+ function defineBaseContextMeta() {
35
+ import_flowContext.FlowRunJSContext.define({
36
+ label: "RunJS base",
37
+ properties: {
38
+ logger: 'Pino logger instance for structured logging. Example: `ctx.logger.info({ foo: 1 }, "message")`',
39
+ message: 'Ant Design global message API for displaying temporary messages. Example: `ctx.message.success("Operation completed")`',
40
+ notification: 'Ant Design notification API for displaying notification boxes. Example: `ctx.notification.open({ message: "Title", description: "Content" })`',
41
+ resource: "Data resource accessible based on current user permissions",
42
+ urlSearchParams: "URLSearchParams object containing query parameters from the current URL",
43
+ token: "API authentication token for the current session",
44
+ role: "Current user role information",
45
+ auth: "Authentication context containing locale, role, user, and token information",
46
+ api: {
47
+ description: "APIClient instance for making HTTP requests.",
48
+ detail: "APIClient",
49
+ properties: {
50
+ request: {
51
+ description: "Make an HTTP request using the APIClient instance. Parameters: (options: RequestOptions) => Promise<any>.",
52
+ detail: "Promise<any>",
53
+ completion: {
54
+ insertText: `await ctx.api.request({ url: '', method: 'get', params: {} })`
55
+ }
56
+ }
57
+ }
58
+ },
59
+ i18n: {
60
+ description: "An instance of i18next for managing internationalization.",
61
+ detail: "i18next",
62
+ properties: {
63
+ language: "Current active language code."
64
+ }
65
+ },
66
+ React: "React namespace providing React library functions and hooks (available in RunJS environment)",
67
+ ReactDOM: "ReactDOM client API including createRoot for rendering React components",
68
+ antd: "Ant Design component library"
69
+ },
70
+ methods: {
71
+ t: 'Internationalization function for translating text. Parameters: (key: string, variables?: object) => string. Example: `ctx.t("Hello {name}", { name: "World" })`',
72
+ requireAsync: 'Asynchronously load external libraries from URL. Parameters: (url: string) => Promise<any>. Example: `const lodash = await ctx.requireAsync("https://cdn.jsdelivr.net/npm/lodash")`',
73
+ importAsync: 'Dynamically import ESM module by URL. Parameters: (url: string) => Promise<Module>. Example: `const mod = await ctx.importAsync("https://cdn.jsdelivr.net/npm/lit-html@2/+esm")`',
74
+ resolveJsonTemplate: "Resolve JSON templates containing variable expressions with {{ }} syntax. Parameters: (template: any, context?: object) => any",
75
+ runAction: {
76
+ description: 'Execute a data action on the current resource. Parameters: (actionName: string, params: object) => Promise<any>. Example: `await ctx.runAction("create", { values: { name: "test" } })`',
77
+ detail: "Promise<any>",
78
+ completion: {
79
+ insertText: `await ctx.runAction('create', { values: {} })`
80
+ }
81
+ },
82
+ openView: {
83
+ description: `Open a view component (page, modal, or drawer) by its unique identifier.
84
+ Parameters: (viewId: string, options?: OpenViewOptions) => Promise<void>
85
+ Options:
86
+ - params: Record<string, any> - Parameters passed to the view component
87
+ - mode: "page" | "modal" | "drawer" - Display mode (default: "drawer")
88
+ - title: string - Modal/drawer title
89
+ - width: number | string - Modal/drawer width
90
+ - navigation: boolean - Whether to use route navigation
91
+ - preventClose: boolean - Prevent closing the view
92
+ - viewUid: string - Custom view UID for routing
93
+ - isMobileLayout: boolean - Use mobile layout (displays as embed)
94
+ Examples:
95
+ - Modal with params: await ctx.openView("user-detail", { params: { id: 123 }, mode: "modal", title: "User Details", width: 800 })
96
+ - Drawer (default): await ctx.openView("settings-page")
97
+ - Page navigation: await ctx.openView("dashboard", { mode: "page" })`,
98
+ detail: "Promise<void>",
99
+ completion: {
100
+ insertText: `await ctx.openView('view-id', { mode: 'drawer', params: {} })`
101
+ }
102
+ }
103
+ }
104
+ });
105
+ import_flowContext.FlowRunJSContext.define(
106
+ {
107
+ label: "RunJS \u57FA\u7840",
108
+ properties: {
109
+ logger: 'Pino \u65E5\u5FD7\u5B9E\u4F8B\uFF08\u7ED3\u6784\u5316\u65E5\u5FD7\uFF09\u3002\u793A\u4F8B\uFF1A`ctx.logger.info({ foo: 1 }, "message")`',
110
+ message: 'Ant Design \u5168\u5C40\u6D88\u606F API\uFF0C\u7528\u4E8E\u663E\u793A\u4E34\u65F6\u63D0\u793A\u3002\u793A\u4F8B\uFF1A`ctx.message.success("\u64CD\u4F5C\u6210\u529F")`',
111
+ notification: 'Ant Design \u901A\u77E5 API\uFF0C\u7528\u4E8E\u663E\u793A\u901A\u77E5\u6846\u3002\u793A\u4F8B\uFF1A`ctx.notification.open({ message: "\u6807\u9898", description: "\u5185\u5BB9" })`',
112
+ resource: "\u57FA\u4E8E\u5F53\u524D\u7528\u6237\u6743\u9650\u53EF\u8BBF\u95EE\u7684\u6570\u636E\u8D44\u6E90",
113
+ urlSearchParams: "\u5F53\u524D URL \u7684\u67E5\u8BE2\u53C2\u6570\uFF08URLSearchParams \u5BF9\u8C61\uFF09",
114
+ token: "\u5F53\u524D\u4F1A\u8BDD\u7684 API \u8BA4\u8BC1 token",
115
+ role: "\u5F53\u524D\u7528\u6237\u89D2\u8272\u4FE1\u606F",
116
+ auth: "\u8BA4\u8BC1\u4E0A\u4E0B\u6587\uFF0C\u5305\u542B locale\u3001role\u3001user\u3001token \u7B49\u4FE1\u606F",
117
+ api: {
118
+ description: "\u7528\u4E8E\u53D1\u8D77 HTTP \u8BF7\u6C42\u7684 APIClient \u5B9E\u4F8B",
119
+ detail: "APIClient",
120
+ properties: {
121
+ request: {
122
+ description: "\u901A\u8FC7 ctx.api.request \u53D1\u8D77 HTTP \u8BF7\u6C42\uFF0C\u5165\u53C2\u4E3A RequestOptions\uFF0C\u8FD4\u56DE Promise\u3002",
123
+ detail: "Promise<any>",
124
+ completion: {
125
+ insertText: `await ctx.api.request({ url: '', method: 'get', params: {} })`
126
+ }
127
+ }
128
+ }
129
+ },
130
+ i18n: {
131
+ description: "i18next \u5B9E\u4F8B\uFF0C\u53EF\u7528\u4E8E\u7BA1\u7406\u56FD\u9645\u5316",
132
+ detail: "i18next",
133
+ properties: {
134
+ language: "\u5F53\u524D\u6FC0\u6D3B\u7684\u8BED\u8A00\u4EE3\u7801"
135
+ }
136
+ },
137
+ React: "React \u547D\u540D\u7A7A\u95F4\uFF0C\u63D0\u4F9B React \u51FD\u6570\u4E0E hooks\uFF08RunJS \u73AF\u5883\u4E2D\u53EF\u7528\uFF09",
138
+ ReactDOM: "ReactDOM \u5BA2\u6237\u7AEF API\uFF0C\u542B createRoot \u7B49\u6E32\u67D3\u65B9\u6CD5",
139
+ antd: "Ant Design \u7EC4\u4EF6\u5E93\uFF08RunJS \u73AF\u5883\u4E2D\u53EF\u7528\uFF09"
140
+ },
141
+ methods: {
142
+ t: '\u56FD\u9645\u5316\u51FD\u6570\uFF0C\u7528\u4E8E\u7FFB\u8BD1\u6587\u6848\u3002\u53C2\u6570\uFF1A(key: string, variables?: object) => string\u3002\u793A\u4F8B\uFF1A`ctx.t("\u4F60\u597D {name}", { name: "\u4E16\u754C" })`',
143
+ requireAsync: '\u6309 URL \u5F02\u6B65\u52A0\u8F7D\u5916\u90E8\u5E93\u3002\u53C2\u6570\uFF1A(url: string) => Promise<any>\u3002\u793A\u4F8B\uFF1A`const lodash = await ctx.requireAsync("https://cdn.jsdelivr.net/npm/lodash")`',
144
+ importAsync: '\u6309 URL \u52A8\u6001\u5BFC\u5165 ESM \u6A21\u5757\uFF08\u5F00\u53D1/\u751F\u4EA7\u5747\u53EF\u7528\uFF09\u3002\u53C2\u6570\uFF1A(url: string) => Promise<Module>\u3002\u793A\u4F8B\uFF1A`const mod = await ctx.importAsync("https://cdn.jsdelivr.net/npm/lit-html@2/+esm")`',
145
+ resolveJsonTemplate: "\u89E3\u6790\u542B {{ }} \u53D8\u91CF\u8868\u8FBE\u5F0F\u7684 JSON \u6A21\u677F\u3002\u53C2\u6570\uFF1A(template: any, context?: object) => any",
146
+ runAction: {
147
+ description: '\u5BF9\u5F53\u524D\u8D44\u6E90\u6267\u884C\u6570\u636E\u52A8\u4F5C\u3002\u53C2\u6570\uFF1A(actionName: string, params: object) => Promise<any>\u3002\u793A\u4F8B\uFF1A`await ctx.runAction("create", { values: { name: "test" } })`',
148
+ detail: "Promise<any>",
149
+ completion: {
150
+ insertText: `await ctx.runAction('create', { values: {} })`
151
+ }
152
+ },
153
+ openView: {
154
+ description: "\u6839\u636E\u552F\u4E00\u6807\u8BC6\u6253\u5F00\u89C6\u56FE\uFF08\u9875\u9762/\u5F39\u7A97/\u62BD\u5C49\uFF09\u3002\u53C2\u6570\uFF1A(viewId: string, options?: OpenViewOptions) => Promise<void>`\uFF0C\u5E38\u7528\u9009\u9879\uFF1Aparams\u3001mode\u3001title\u3001width\u3001navigation\u3001preventClose\u3001viewUid\u3001isMobileLayout\u3002",
155
+ detail: "Promise<void>",
156
+ completion: {
157
+ insertText: `await ctx.openView('view-id', { mode: 'drawer', params: {} })`
158
+ }
159
+ }
160
+ }
161
+ },
162
+ { locale: "zh-CN" }
163
+ );
164
+ }
165
+ __name(defineBaseContextMeta, "defineBaseContextMeta");
166
+ // Annotate the CommonJS export names for ESM import in node:
167
+ 0 && (module.exports = {
168
+ defineBaseContextMeta
169
+ });
@@ -9,9 +9,12 @@
9
9
  import type { FlowContext } from '../flowContext';
10
10
  import { JSRunner } from '../JSRunner';
11
11
  import type { JSRunnerOptions } from '../JSRunner';
12
- import { RunJSVersion } from './contexts/FlowRunJSContext';
12
+ import { type RunJSVersion } from './registry';
13
13
  export declare function getRunJSDocFor(ctx: FlowContext, { version }?: {
14
14
  version?: RunJSVersion;
15
15
  }): any;
16
16
  export declare function createJSRunnerWithVersion(this: FlowContext, options?: JSRunnerOptions): JSRunner;
17
- export declare function registerDefaultMappings(): void;
17
+ export declare function getRunJSScenesForModel(modelClass: string, version?: RunJSVersion): string[];
18
+ export declare function getRunJSScenesForContext(ctx: FlowContext, { version }?: {
19
+ version?: RunJSVersion;
20
+ }): string[];
@@ -29,51 +29,60 @@ var helpers_exports = {};
29
29
  __export(helpers_exports, {
30
30
  createJSRunnerWithVersion: () => createJSRunnerWithVersion,
31
31
  getRunJSDocFor: () => getRunJSDocFor,
32
- registerDefaultMappings: () => registerDefaultMappings
32
+ getRunJSScenesForContext: () => getRunJSScenesForContext,
33
+ getRunJSScenesForModel: () => getRunJSScenesForModel
33
34
  });
34
35
  module.exports = __toCommonJS(helpers_exports);
35
36
  var import_JSRunner = require("../JSRunner");
36
- var import_FlowRunJSContext = require("./contexts/FlowRunJSContext");
37
37
  var import_registry = require("./registry");
38
- var import_JSBlockRunJSContext = require("./contexts/JSBlockRunJSContext");
39
- var import_JSFieldRunJSContext = require("./contexts/JSFieldRunJSContext");
40
- var import_JSItemRunJSContext = require("./contexts/JSItemRunJSContext");
41
- var import_FormJSFieldItemRunJSContext = require("./contexts/FormJSFieldItemRunJSContext");
42
- var import_JSRecordActionRunJSContext = require("./contexts/JSRecordActionRunJSContext");
43
- var import_JSCollectionActionRunJSContext = require("./contexts/JSCollectionActionRunJSContext");
38
+ function getLocale(ctx) {
39
+ var _a, _b, _c;
40
+ return ((_b = (_a = ctx == null ? void 0 : ctx.api) == null ? void 0 : _a.auth) == null ? void 0 : _b.locale) || ((_c = ctx == null ? void 0 : ctx.i18n) == null ? void 0 : _c.language) || (ctx == null ? void 0 : ctx.locale);
41
+ }
42
+ __name(getLocale, "getLocale");
44
43
  function getRunJSDocFor(ctx, { version = "v1" } = {}) {
45
- var _a;
44
+ var _a, _b;
46
45
  const modelClass = (0, import_registry.getModelClassName)(ctx);
47
- const ctor = import_registry.RunJSContextRegistry.resolve(version, modelClass) || import_registry.RunJSContextRegistry.resolve("latest", modelClass) || import_FlowRunJSContext.FlowRunJSContext;
48
- return ((_a = ctor.getDoc) == null ? void 0 : _a.call(ctor)) || {};
46
+ const ctor = import_registry.RunJSContextRegistry.resolve(version, modelClass) || import_registry.RunJSContextRegistry.resolve(version, "*");
47
+ const locale = getLocale(ctx);
48
+ if ((_a = ctor == null ? void 0 : ctor.getDoc) == null ? void 0 : _a.length) {
49
+ return ctor.getDoc(locale) || {};
50
+ }
51
+ return ((_b = ctor == null ? void 0 : ctor.getDoc) == null ? void 0 : _b.call(ctor)) || {};
49
52
  }
50
53
  __name(getRunJSDocFor, "getRunJSDocFor");
51
54
  function createJSRunnerWithVersion(options) {
52
- var _a;
53
55
  const version = (options == null ? void 0 : options.version) || "v1";
54
56
  const modelClass = (0, import_registry.getModelClassName)(this);
55
- const Ctor = import_registry.RunJSContextRegistry.resolve(version, modelClass) || import_registry.RunJSContextRegistry.resolve("latest", modelClass) || import_FlowRunJSContext.FlowRunJSContext;
56
- const runCtx = new Ctor(this.createProxy ? this.createProxy() : this);
57
- const def = ((_a = Ctor.injectDefaultGlobals) == null ? void 0 : _a.call(Ctor)) || {};
58
- const globals = { ctx: runCtx, ...def, ...(options == null ? void 0 : options.globals) || {} };
57
+ const ensureFlowContext = /* @__PURE__ */ __name((obj) => obj, "ensureFlowContext");
58
+ const Ctor = import_registry.RunJSContextRegistry.resolve(version, modelClass) || import_registry.RunJSContextRegistry.resolve(version, "*");
59
+ if (!Ctor) {
60
+ throw new Error("[RunJS] No RunJSContext registered for version/model.");
61
+ }
62
+ const runCtx = new Ctor(ensureFlowContext(this));
63
+ const globals = { ctx: runCtx, ...(options == null ? void 0 : options.globals) || {} };
64
+ if (modelClass === "JSFieldModel" || modelClass === "JSBlockModel") {
65
+ if (typeof window !== "undefined") globals.window = window;
66
+ if (typeof document !== "undefined") globals.document = document;
67
+ }
59
68
  const { timeoutMs } = options || {};
60
69
  return new import_JSRunner.JSRunner({ globals, timeoutMs });
61
70
  }
62
71
  __name(createJSRunnerWithVersion, "createJSRunnerWithVersion");
63
- function registerDefaultMappings() {
64
- const v = "v1";
65
- import_registry.RunJSContextRegistry.register(v, "JSBlockModel", import_JSBlockRunJSContext.JSBlockRunJSContext);
66
- import_registry.RunJSContextRegistry.register(v, "JSFieldModel", import_JSFieldRunJSContext.JSFieldRunJSContext);
67
- import_registry.RunJSContextRegistry.register(v, "JSItemModel", import_JSItemRunJSContext.JSItemRunJSContext);
68
- import_registry.RunJSContextRegistry.register(v, "FormJSFieldItemModel", import_FormJSFieldItemRunJSContext.FormJSFieldItemRunJSContext);
69
- import_registry.RunJSContextRegistry.register(v, "JSRecordActionModel", import_JSRecordActionRunJSContext.JSRecordActionRunJSContext);
70
- import_registry.RunJSContextRegistry.register(v, "JSCollectionActionModel", import_JSCollectionActionRunJSContext.JSCollectionActionRunJSContext);
71
- import_registry.RunJSContextRegistry.register(v, "*", import_FlowRunJSContext.FlowRunJSContext);
72
+ function getRunJSScenesForModel(modelClass, version = "v1") {
73
+ const meta = import_registry.RunJSContextRegistry.getMeta(version, modelClass);
74
+ return Array.isArray(meta == null ? void 0 : meta.scenes) ? [...meta.scenes] : [];
75
+ }
76
+ __name(getRunJSScenesForModel, "getRunJSScenesForModel");
77
+ function getRunJSScenesForContext(ctx, { version = "v1" } = {}) {
78
+ const modelClass = (0, import_registry.getModelClassName)(ctx);
79
+ return getRunJSScenesForModel(modelClass, version);
72
80
  }
73
- __name(registerDefaultMappings, "registerDefaultMappings");
81
+ __name(getRunJSScenesForContext, "getRunJSScenesForContext");
74
82
  // Annotate the CommonJS export names for ESM import in node:
75
83
  0 && (module.exports = {
76
84
  createJSRunnerWithVersion,
77
85
  getRunJSDocFor,
78
- registerDefaultMappings
86
+ getRunJSScenesForContext,
87
+ getRunJSScenesForModel
79
88
  });
@@ -6,12 +6,15 @@
6
6
  * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
7
  * For more information, please refer to: https://www.nocobase.com/agreement.
8
8
  */
9
- import type { RunJSVersion, RunJSContextCtor } from './contexts/FlowRunJSContext';
9
+ export type RunJSVersion = 'v1' | (string & {});
10
+ export type RunJSContextCtor = new (delegate: any) => any;
11
+ export type RunJSContextMeta = {
12
+ scenes?: string[];
13
+ };
10
14
  export declare class RunJSContextRegistry {
11
15
  private static map;
12
- private static defaultsRegistered;
13
- private static ensureDefaults;
14
- static register(version: RunJSVersion, modelClass: string, ctor: RunJSContextCtor): void;
16
+ static register(version: RunJSVersion, modelClass: string, ctor: RunJSContextCtor, meta?: RunJSContextMeta): void;
15
17
  static resolve(version: RunJSVersion, modelClass: string): RunJSContextCtor;
18
+ static getMeta(version: RunJSVersion, modelClass: string): RunJSContextMeta | undefined;
16
19
  }
17
20
  export declare function getModelClassName(ctx: any): string;
@@ -33,57 +33,25 @@ __export(registry_exports, {
33
33
  getModelClassName: () => getModelClassName
34
34
  });
35
35
  module.exports = __toCommonJS(registry_exports);
36
- var import_FlowRunJSContext = require("./contexts/FlowRunJSContext");
37
- var import_JSBlockRunJSContext = require("./contexts/JSBlockRunJSContext");
38
- var import_JSFieldRunJSContext = require("./contexts/JSFieldRunJSContext");
39
- var import_JSItemRunJSContext = require("./contexts/JSItemRunJSContext");
40
- var import_FormJSFieldItemRunJSContext = require("./contexts/FormJSFieldItemRunJSContext");
41
- var import_JSRecordActionRunJSContext = require("./contexts/JSRecordActionRunJSContext");
42
- var import_JSCollectionActionRunJSContext = require("./contexts/JSCollectionActionRunJSContext");
43
36
  const _RunJSContextRegistry = class _RunJSContextRegistry {
44
- static ensureDefaults() {
45
- if (this.defaultsRegistered) return;
46
- const v = "v1";
47
- try {
48
- const ensure = /* @__PURE__ */ __name((model, ctor) => {
49
- const key = `${v}:${model}`;
50
- if (!this.map.has(key)) this.map.set(key, ctor);
51
- }, "ensure");
52
- ensure("JSBlockModel", import_JSBlockRunJSContext.JSBlockRunJSContext);
53
- ensure("JSFieldModel", import_JSFieldRunJSContext.JSFieldRunJSContext);
54
- ensure("JSItemModel", import_JSItemRunJSContext.JSItemRunJSContext);
55
- ensure("FormJSFieldItemModel", import_FormJSFieldItemRunJSContext.FormJSFieldItemRunJSContext);
56
- ensure("JSRecordActionModel", import_JSRecordActionRunJSContext.JSRecordActionRunJSContext);
57
- ensure("JSCollectionActionModel", import_JSCollectionActionRunJSContext.JSCollectionActionRunJSContext);
58
- ensure("*", import_FlowRunJSContext.FlowRunJSContext);
59
- } finally {
60
- this.defaultsRegistered = true;
61
- }
62
- }
63
- static register(version, modelClass, ctor) {
64
- this.map.set(`${version}:${modelClass}`, ctor);
37
+ static register(version, modelClass, ctor, meta) {
38
+ this.map.set(`${version}:${modelClass}`, { ctor, meta });
65
39
  }
66
40
  static resolve(version, modelClass) {
67
- this.ensureDefaults();
68
- return this.map.get(`${version}:${modelClass}`) || this.map.get(`${version}:*`);
41
+ var _a, _b;
42
+ return ((_a = this.map.get(`${version}:${modelClass}`)) == null ? void 0 : _a.ctor) || ((_b = this.map.get(`${version}:*`)) == null ? void 0 : _b.ctor);
43
+ }
44
+ static getMeta(version, modelClass) {
45
+ var _a, _b;
46
+ return ((_a = this.map.get(`${version}:${modelClass}`)) == null ? void 0 : _a.meta) || ((_b = this.map.get(`${version}:*`)) == null ? void 0 : _b.meta);
69
47
  }
70
48
  };
71
49
  __name(_RunJSContextRegistry, "RunJSContextRegistry");
72
50
  __publicField(_RunJSContextRegistry, "map", /* @__PURE__ */ new Map());
73
- __publicField(_RunJSContextRegistry, "defaultsRegistered", false);
74
51
  let RunJSContextRegistry = _RunJSContextRegistry;
75
52
  function getModelClassName(ctx) {
76
- var _a, _b, _c;
77
- const model = ctx == null ? void 0 : ctx.model;
78
- if (!model) return "*";
79
- try {
80
- const Ctor = model.constructor;
81
- const use = (_b = (_a = Ctor == null ? void 0 : Ctor.meta) == null ? void 0 : _a.createModelOptions) == null ? void 0 : _b.use;
82
- if (typeof use === "string" && use) return use;
83
- } catch (_) {
84
- }
85
- const byName = (_c = model == null ? void 0 : model.constructor) == null ? void 0 : _c.name;
86
- return byName || "*";
53
+ var _a, _b;
54
+ return ((_b = (_a = ctx == null ? void 0 : ctx.model) == null ? void 0 : _a.constructor) == null ? void 0 : _b.name) || "*";
87
55
  }
88
56
  __name(getModelClassName, "getModelClassName");
89
57
  // Annotate the CommonJS export names for ESM import in node:
@@ -0,0 +1,9 @@
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
+ export declare function setupRunJSContexts(): Promise<void>;
@@ -0,0 +1,82 @@
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 setup_exports = {};
39
+ __export(setup_exports, {
40
+ setupRunJSContexts: () => setupRunJSContexts
41
+ });
42
+ module.exports = __toCommonJS(setup_exports);
43
+ var import_registry = require("./registry");
44
+ var import_flowContext = require("../flowContext");
45
+ var import_base = require("./contexts/base");
46
+ let done = false;
47
+ async function setupRunJSContexts() {
48
+ if (done) return;
49
+ (0, import_base.defineBaseContextMeta)();
50
+ const [
51
+ { JSBlockRunJSContext },
52
+ { JSFieldRunJSContext },
53
+ { JSItemRunJSContext },
54
+ { JSColumnRunJSContext },
55
+ { FormJSFieldItemRunJSContext },
56
+ { JSRecordActionRunJSContext },
57
+ { JSCollectionActionRunJSContext }
58
+ ] = await Promise.all([
59
+ import("./contexts/JSBlockRunJSContext"),
60
+ import("./contexts/JSFieldRunJSContext"),
61
+ import("./contexts/JSItemRunJSContext"),
62
+ import("./contexts/JSColumnRunJSContext"),
63
+ import("./contexts/FormJSFieldItemRunJSContext"),
64
+ import("./contexts/JSRecordActionRunJSContext"),
65
+ import("./contexts/JSCollectionActionRunJSContext")
66
+ ]);
67
+ const v1 = "v1";
68
+ import_registry.RunJSContextRegistry.register(v1, "*", import_flowContext.FlowRunJSContext);
69
+ import_registry.RunJSContextRegistry.register(v1, "JSBlockModel", JSBlockRunJSContext, { scenes: ["block"] });
70
+ import_registry.RunJSContextRegistry.register(v1, "JSFieldModel", JSFieldRunJSContext, { scenes: ["detail"] });
71
+ import_registry.RunJSContextRegistry.register(v1, "JSItemModel", JSItemRunJSContext, { scenes: ["form"] });
72
+ import_registry.RunJSContextRegistry.register(v1, "JSColumnModel", JSColumnRunJSContext, { scenes: ["table"] });
73
+ import_registry.RunJSContextRegistry.register(v1, "FormJSFieldItemModel", FormJSFieldItemRunJSContext, { scenes: ["form"] });
74
+ import_registry.RunJSContextRegistry.register(v1, "JSRecordActionModel", JSRecordActionRunJSContext, { scenes: ["table"] });
75
+ import_registry.RunJSContextRegistry.register(v1, "JSCollectionActionModel", JSCollectionActionRunJSContext, { scenes: ["table"] });
76
+ done = true;
77
+ }
78
+ __name(setupRunJSContexts, "setupRunJSContexts");
79
+ // Annotate the CommonJS export names for ESM import in node:
80
+ 0 && (module.exports = {
81
+ setupRunJSContexts
82
+ });
@@ -24,19 +24,34 @@ var __copyProps = (to, from, except, desc) => {
24
24
  return to;
25
25
  };
26
26
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
27
- var copy_record_json_snippet_exports = {};
28
- __export(copy_record_json_snippet_exports, {
29
- default: () => copy_record_json_snippet_default
27
+ var api_request_snippet_exports = {};
28
+ __export(api_request_snippet_exports, {
29
+ default: () => api_request_snippet_default
30
30
  });
31
- module.exports = __toCommonJS(copy_record_json_snippet_exports);
31
+ module.exports = __toCommonJS(api_request_snippet_exports);
32
32
  const snippet = {
33
33
  contexts: ["*"],
34
- prefix: "sn-copy-record",
35
- label: "Copy record JSON",
36
- description: "Copy current ctx.record JSON to clipboard",
34
+ prefix: "sn-api-request",
35
+ label: "API request template",
36
+ description: "Basic template to send HTTP requests via ctx.api.request",
37
+ locales: {
38
+ "zh-CN": {
39
+ label: "API \u8BF7\u6C42\u6A21\u677F",
40
+ description: "\u4F7F\u7528 ctx.api.request \u53D1\u9001 HTTP \u8BF7\u6C42\u7684\u57FA\u7840\u6A21\u677F"
41
+ }
42
+ },
37
43
  content: `
38
- await ctx.copyToClipboard(JSON.stringify(ctx.record ?? {}, null, 2));
39
- ctx.message.success(ctx.t('Record JSON copied to clipboard'));
44
+ // Replace url/method/params/data as needed
45
+ const response = await ctx.api.request({
46
+ url: 'users:list',
47
+ method: 'get',
48
+ params: {
49
+ pageSize: 10,
50
+ },
51
+ });
52
+
53
+ ctx.message.success(ctx.t('Request finished'));
54
+ console.log(ctx.t('Response data:'), response?.data);
40
55
  `
41
56
  };
42
- var copy_record_json_snippet_default = snippet;
57
+ var api_request_snippet_default = snippet;
@@ -0,0 +1,61 @@
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 __export = (target, all) => {
15
+ for (var name in all)
16
+ __defProp(target, name, { get: all[name], enumerable: true });
17
+ };
18
+ var __copyProps = (to, from, except, desc) => {
19
+ if (from && typeof from === "object" || typeof from === "function") {
20
+ for (let key of __getOwnPropNames(from))
21
+ if (!__hasOwnProp.call(to, key) && key !== except)
22
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
23
+ }
24
+ return to;
25
+ };
26
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
27
+ var clipboard_copy_text_snippet_exports = {};
28
+ __export(clipboard_copy_text_snippet_exports, {
29
+ default: () => clipboard_copy_text_snippet_default
30
+ });
31
+ module.exports = __toCommonJS(clipboard_copy_text_snippet_exports);
32
+ const snippet = {
33
+ contexts: ["*"],
34
+ prefix: "sn-clipboard-copy",
35
+ label: "Copy text to clipboard (function)",
36
+ description: "A reusable function that copies a given string to the clipboard.",
37
+ locales: {
38
+ "zh-CN": {
39
+ label: "\u590D\u5236\u6587\u672C\u5230\u526A\u8D34\u677F\uFF08\u51FD\u6570\uFF09",
40
+ description: "\u901A\u7528\u51FD\u6570\uFF1A\u63A5\u53D7\u4E00\u4E2A\u5B57\u7B26\u4E32\u53C2\u6570\u5E76\u590D\u5236\u5230\u526A\u8D34\u677F\u3002"
41
+ }
42
+ },
43
+ content: `
44
+ // A general utility function that copies text to clipboard.
45
+ // Usage:
46
+ // const ok = await copyTextToClipboard('Hello');
47
+ // if (ok) { /* success */ } else { /* handle failure */ }
48
+ async function copyTextToClipboard(text) {
49
+ const s = String(text ?? '');
50
+ try {
51
+ if (navigator?.clipboard?.writeText) {
52
+ await navigator.clipboard.writeText(s);
53
+ return true;
54
+ }
55
+ } catch (_) {
56
+ // Fallback below
57
+ }
58
+ }
59
+ `
60
+ };
61
+ var clipboard_copy_text_snippet_default = snippet;
@@ -24,21 +24,35 @@ var __copyProps = (to, from, except, desc) => {
24
24
  return to;
25
25
  };
26
26
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
27
- var view_navigation_push_snippet_exports = {};
28
- __export(view_navigation_push_snippet_exports, {
29
- default: () => view_navigation_push_snippet_default
27
+ var import_esm_snippet_exports = {};
28
+ __export(import_esm_snippet_exports, {
29
+ default: () => import_esm_snippet_default
30
30
  });
31
- module.exports = __toCommonJS(view_navigation_push_snippet_exports);
31
+ module.exports = __toCommonJS(import_esm_snippet_exports);
32
32
  const snippet = {
33
33
  contexts: ["*"],
34
- versions: ["*"],
35
- prefix: "sn-nav-push",
36
- label: "View navigation: push",
37
- description: "Navigate within current view (if supported)",
34
+ prefix: "sn-import",
35
+ label: "Import ESM module",
36
+ description: "Dynamically import an ESM module by URL",
37
+ locales: {
38
+ "zh-CN": {
39
+ label: "\u5BFC\u5165 ESM \u6A21\u5757",
40
+ description: "\u6309 URL \u52A8\u6001\u5BFC\u5165 ESM \u6A21\u5757"
41
+ }
42
+ },
38
43
  content: `
39
- // Push a new sub-view (if navigation is available)
40
- ctx.view?.navigation?.push({ viewUid: 'detail', filterByTk: 1 });
41
- // To go back: ctx.view?.navigation?.back();
44
+ // Import an ESM module by URL
45
+ // Works in yarn dev and yarn start
46
+ const mod = await ctx.importAsync('https://cdn.jsdelivr.net/npm/lit-html@2/+esm');
47
+ const { html, render } = mod;
48
+
49
+ ctx.element.innerHTML = '';
50
+ const container = document.createElement('div');
51
+ container.style.padding = '8px';
52
+ container.style.border = '1px dashed #999';
53
+ ctx.element.append(container);
54
+
55
+ render(html\`<span style="color:#52c41a;">lit-html loaded and rendered</span>\`, container);
42
56
  `
43
57
  };
44
- var view_navigation_push_snippet_default = snippet;
58
+ var import_esm_snippet_default = snippet;
@@ -34,6 +34,12 @@ const snippet = {
34
34
  prefix: "sn-msg-error",
35
35
  label: "Message error",
36
36
  description: "Show an error toast message",
37
+ locales: {
38
+ "zh-CN": {
39
+ label: "\u9519\u8BEF\u6D88\u606F\u63D0\u793A",
40
+ description: "\u663E\u793A\u4E00\u6761\u9519\u8BEF\u63D0\u793A\u6D88\u606F"
41
+ }
42
+ },
37
43
  content: `
38
44
  ctx.message.error(ctx.t('Operation failed'));
39
45
  `
@@ -34,6 +34,12 @@ const snippet = {
34
34
  prefix: "sn-msg",
35
35
  label: "Message success",
36
36
  description: "Show a success toast message",
37
+ locales: {
38
+ "zh-CN": {
39
+ label: "\u6210\u529F\u6D88\u606F\u63D0\u793A",
40
+ description: "\u663E\u793A\u4E00\u6761\u6210\u529F\u63D0\u793A\u6D88\u606F"
41
+ }
42
+ },
37
43
  content: `
38
44
  ctx.message.success(ctx.t('Operation succeeded'));
39
45
  `