@nocobase/flow-engine 2.0.0-alpha.7 → 2.0.0-alpha.71

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 (589) hide show
  1. package/lib/BlockScopedFlowEngine.d.ts +23 -0
  2. package/lib/BlockScopedFlowEngine.js +91 -0
  3. package/lib/FlowContextProvider.d.ts +2 -2
  4. package/lib/FlowContextProvider.js +3 -3
  5. package/lib/FlowDefinition.d.ts +6 -4
  6. package/lib/JSRunner.d.ts +6 -0
  7. package/lib/JSRunner.js +27 -1
  8. package/lib/ViewScopedFlowEngine.d.ts +1 -1
  9. package/lib/ViewScopedFlowEngine.js +18 -1
  10. package/lib/acl/Acl.d.ts +12 -12
  11. package/lib/acl/Acl.js +88 -30
  12. package/lib/components/DynamicFlowsEditor.js +2 -4
  13. package/lib/components/FieldModelRenderer.js +17 -9
  14. package/lib/components/FieldSkeleton.d.ts +10 -0
  15. package/lib/components/FieldSkeleton.js +64 -0
  16. package/lib/components/FlowContextSelector.js +19 -3
  17. package/lib/components/FlowModelRenderer.d.ts +4 -6
  18. package/lib/components/FlowModelRenderer.js +35 -53
  19. package/lib/components/FormItem.js +5 -1
  20. package/lib/components/MobilePopup.d.ts +20 -0
  21. package/lib/components/MobilePopup.js +102 -0
  22. package/lib/components/MobilePopup.style.d.ts +17 -0
  23. package/lib/components/MobilePopup.style.js +186 -0
  24. package/lib/components/common/withFlowDesignMode.d.ts +1 -1
  25. package/lib/components/common/withFlowDesignMode.js +5 -5
  26. package/lib/components/dnd/gridDragPlanner.d.ts +1 -0
  27. package/lib/components/dnd/gridDragPlanner.js +53 -1
  28. package/lib/components/index.d.ts +1 -0
  29. package/lib/components/index.js +3 -1
  30. package/lib/components/settings/independents/dropdown/FlowsDropdownButton.js +71 -53
  31. package/lib/components/settings/wrappers/component/SelectWithTitle.d.ts +19 -0
  32. package/lib/components/settings/wrappers/component/SelectWithTitle.js +136 -0
  33. package/lib/components/settings/wrappers/component/SwitchWithTitle.d.ts +10 -0
  34. package/lib/components/settings/wrappers/component/SwitchWithTitle.js +111 -0
  35. package/lib/components/settings/wrappers/contextual/DefaultSettingsIcon.js +233 -97
  36. package/lib/components/settings/wrappers/contextual/FlowsContextMenu.js +71 -54
  37. package/lib/components/settings/wrappers/contextual/FlowsFloatContextMenu.d.ts +2 -2
  38. package/lib/components/settings/wrappers/contextual/FlowsFloatContextMenu.js +63 -23
  39. package/lib/components/settings/wrappers/contextual/StepSettingsDialog.js +13 -2
  40. package/lib/components/settings/wrappers/embedded/FlowSettings.js +42 -28
  41. package/lib/components/settings/wrappers/embedded/FlowsSettings.js +3 -3
  42. package/lib/components/settings/wrappers/embedded/FlowsSettingsContent.js +52 -32
  43. package/lib/components/subModel/AddSubModelButton.d.ts +7 -0
  44. package/lib/components/subModel/AddSubModelButton.js +78 -8
  45. package/lib/components/subModel/LazyDropdown.js +14 -15
  46. package/lib/components/subModel/utils.d.ts +1 -1
  47. package/lib/components/subModel/utils.js +21 -11
  48. package/lib/components/variables/VariableInput.js +26 -6
  49. package/lib/components/variables/VariableTag.js +43 -2
  50. package/lib/components/variables/types.d.ts +2 -0
  51. package/lib/components/variables/utils.js +4 -2
  52. package/lib/data-source/index.d.ts +23 -4
  53. package/lib/data-source/index.js +135 -14
  54. package/lib/data-source/jioToJoiSchema.js +1 -0
  55. package/lib/emitter.d.ts +6 -0
  56. package/lib/emitter.js +12 -0
  57. package/lib/executor/FlowExecutor.d.ts +6 -6
  58. package/lib/executor/FlowExecutor.js +302 -99
  59. package/lib/flow-registry/GlobalFlowRegistry.d.ts +1 -0
  60. package/lib/flow-registry/GlobalFlowRegistry.js +3 -0
  61. package/lib/flow-registry/InstanceFlowRegistry.d.ts +1 -0
  62. package/lib/flow-registry/InstanceFlowRegistry.js +3 -0
  63. package/lib/flowContext.d.ts +105 -6
  64. package/lib/flowContext.js +447 -139
  65. package/lib/flowEngine.d.ts +71 -1
  66. package/lib/flowEngine.js +319 -16
  67. package/lib/flowSettings.d.ts +4 -3
  68. package/lib/flowSettings.js +45 -21
  69. package/lib/hooks/useApplyAutoFlows.d.ts +1 -0
  70. package/lib/hooks/useApplyAutoFlows.js +3 -2
  71. package/lib/index.d.ts +14 -3
  72. package/lib/index.js +54 -7
  73. package/lib/locale/de-DE.json +62 -0
  74. package/lib/locale/en-US.json +57 -45
  75. package/lib/locale/es-ES.json +62 -0
  76. package/lib/locale/fr-FR.json +62 -0
  77. package/lib/locale/hu-HU.json +62 -0
  78. package/lib/locale/id-ID.json +62 -0
  79. package/lib/locale/index.d.ts +114 -90
  80. package/lib/locale/it-IT.json +62 -0
  81. package/lib/locale/ja-JP.json +62 -0
  82. package/lib/locale/ko-KR.json +62 -0
  83. package/lib/locale/nl-NL.json +62 -0
  84. package/lib/locale/pt-BR.json +62 -0
  85. package/lib/locale/ru-RU.json +62 -0
  86. package/lib/locale/tr-TR.json +62 -0
  87. package/lib/locale/uk-UA.json +62 -0
  88. package/lib/locale/vi-VN.json +62 -0
  89. package/lib/locale/zh-CN.json +58 -46
  90. package/lib/locale/zh-TW.json +62 -0
  91. package/lib/models/CollectionFieldModel.d.ts +7 -2
  92. package/lib/models/CollectionFieldModel.js +63 -16
  93. package/lib/models/flowModel.d.ts +76 -32
  94. package/lib/models/flowModel.js +300 -112
  95. package/lib/models/forkFlowModel.d.ts +8 -4
  96. package/lib/models/forkFlowModel.js +38 -8
  97. package/lib/provider.d.ts +3 -1
  98. package/lib/provider.js +14 -11
  99. package/lib/reactive/index.d.ts +10 -0
  100. package/lib/{runjs-context/snippets/global/api-request-post.snippet.js → reactive/index.js} +14 -15
  101. package/lib/reactive/observer.d.ts +19 -0
  102. package/lib/reactive/observer.js +109 -0
  103. package/lib/resources/baseRecordResource.d.ts +6 -0
  104. package/lib/resources/baseRecordResource.js +38 -3
  105. package/lib/resources/multiRecordResource.d.ts +5 -2
  106. package/lib/resources/multiRecordResource.js +26 -10
  107. package/lib/resources/singleRecordResource.js +8 -3
  108. package/lib/resources/sqlResource.d.ts +5 -3
  109. package/lib/resources/sqlResource.js +30 -28
  110. package/lib/runjs-context/contexts/FormJSFieldItemRunJSContext.d.ts +1 -6
  111. package/lib/runjs-context/contexts/FormJSFieldItemRunJSContext.js +37 -20
  112. package/lib/runjs-context/contexts/JSBlockRunJSContext.d.ts +1 -6
  113. package/lib/runjs-context/contexts/JSBlockRunJSContext.js +46 -33
  114. package/lib/runjs-context/contexts/JSCollectionActionRunJSContext.d.ts +1 -2
  115. package/lib/runjs-context/contexts/JSCollectionActionRunJSContext.js +14 -15
  116. package/lib/runjs-context/contexts/{LinkageRunJSContext.d.ts → JSColumnRunJSContext.d.ts} +6 -3
  117. package/lib/runjs-context/contexts/JSColumnRunJSContext.js +78 -0
  118. package/lib/runjs-context/contexts/JSEditableFieldRunJSContext.d.ts +16 -0
  119. package/lib/runjs-context/contexts/JSEditableFieldRunJSContext.js +125 -0
  120. package/lib/runjs-context/contexts/JSFieldRunJSContext.d.ts +1 -6
  121. package/lib/runjs-context/contexts/JSFieldRunJSContext.js +28 -24
  122. package/lib/runjs-context/contexts/JSItemRunJSContext.d.ts +1 -6
  123. package/lib/runjs-context/contexts/JSItemRunJSContext.js +34 -20
  124. package/lib/runjs-context/contexts/JSRecordActionRunJSContext.d.ts +1 -2
  125. package/lib/runjs-context/contexts/JSRecordActionRunJSContext.js +16 -17
  126. package/lib/runjs-context/contexts/base.d.ts +9 -0
  127. package/lib/runjs-context/contexts/base.js +879 -0
  128. package/lib/runjs-context/contributions.d.ts +33 -0
  129. package/lib/runjs-context/contributions.js +88 -0
  130. package/lib/runjs-context/helpers.d.ts +5 -2
  131. package/lib/runjs-context/helpers.js +36 -27
  132. package/lib/runjs-context/registry.d.ts +7 -4
  133. package/lib/runjs-context/registry.js +10 -42
  134. package/lib/runjs-context/setup.d.ts +9 -0
  135. package/lib/runjs-context/setup.js +88 -0
  136. package/lib/runjs-context/snippets/global/{copy-record-json.snippet.js → api-request.snippet.js} +25 -10
  137. package/lib/runjs-context/snippets/global/clipboard-copy-text.snippet.js +61 -0
  138. package/lib/runjs-context/snippets/global/{view-navigation-push.snippet.js → import-esm.snippet.js} +26 -12
  139. package/lib/runjs-context/snippets/global/message-error.snippet.js +6 -0
  140. package/lib/runjs-context/snippets/global/message-success.snippet.js +6 -0
  141. package/lib/runjs-context/snippets/global/notification-open.snippet.d.ts +3 -8
  142. package/lib/runjs-context/snippets/global/notification-open.snippet.js +8 -1
  143. package/lib/runjs-context/snippets/global/open-view-dialog.snippet.js +10 -3
  144. package/lib/runjs-context/snippets/global/open-view-drawer.snippet.js +10 -3
  145. package/lib/runjs-context/snippets/global/query-selector.snippet.js +53 -0
  146. package/lib/runjs-context/snippets/global/require-amd.snippet.d.ts +11 -0
  147. package/lib/runjs-context/snippets/global/{requireAsync.snippet.js → require-amd.snippet.js} +16 -13
  148. package/lib/runjs-context/snippets/global/window-open.snippet.d.ts +3 -8
  149. package/lib/runjs-context/snippets/global/window-open.snippet.js +8 -1
  150. package/lib/runjs-context/snippets/index.d.ts +24 -3
  151. package/lib/runjs-context/snippets/index.js +183 -40
  152. package/lib/runjs-context/snippets/scene/block/add-event-listener.snippet.d.ts +11 -0
  153. package/lib/runjs-context/snippets/scene/{jsblock → block}/add-event-listener.snippet.js +11 -2
  154. package/lib/runjs-context/snippets/scene/block/api-fetch-render-list.snippet.d.ts +11 -0
  155. package/lib/runjs-context/snippets/scene/block/api-fetch-render-list.snippet.js +64 -0
  156. package/lib/runjs-context/snippets/scene/block/chartjs-bar.snippet.d.ts +11 -0
  157. package/lib/runjs-context/snippets/scene/block/chartjs-bar.snippet.js +99 -0
  158. package/lib/runjs-context/snippets/{libs → scene/block}/echarts-init.snippet.js +24 -7
  159. package/lib/runjs-context/snippets/scene/block/render-antd-icons.snippet.d.ts +11 -0
  160. package/lib/runjs-context/snippets/scene/block/render-antd-icons.snippet.js +65 -0
  161. package/lib/runjs-context/snippets/scene/block/render-button-handler.snippet.d.ts +11 -0
  162. package/lib/runjs-context/snippets/scene/{jsblock → block}/render-button-handler.snippet.js +17 -9
  163. package/lib/runjs-context/snippets/scene/block/render-iframe.snippet.d.ts +11 -0
  164. package/lib/runjs-context/snippets/scene/block/render-iframe.snippet.js +57 -0
  165. package/lib/runjs-context/snippets/scene/block/render-info-card.snippet.d.ts +11 -0
  166. package/lib/runjs-context/snippets/scene/block/render-info-card.snippet.js +71 -0
  167. package/lib/runjs-context/snippets/scene/block/render-react-jsx.snippet.d.ts +11 -0
  168. package/lib/runjs-context/snippets/scene/{jsblock/render-card.snippet.js → block/render-react-jsx.snippet.js} +26 -13
  169. package/lib/runjs-context/snippets/scene/block/render-react.snippet.d.ts +11 -0
  170. package/lib/runjs-context/snippets/scene/{jsblock → block}/render-react.snippet.js +18 -17
  171. package/lib/runjs-context/snippets/scene/block/render-statistics.snippet.d.ts +11 -0
  172. package/lib/runjs-context/snippets/scene/block/render-statistics.snippet.js +95 -0
  173. package/lib/runjs-context/snippets/scene/block/render-timeline.snippet.d.ts +11 -0
  174. package/lib/runjs-context/snippets/scene/block/render-timeline.snippet.js +84 -0
  175. package/lib/runjs-context/snippets/scene/block/resource-example.snippet.d.ts +11 -0
  176. package/lib/runjs-context/snippets/scene/block/resource-example.snippet.js +60 -0
  177. package/lib/runjs-context/snippets/scene/block/three-users-orbit.snippet.d.ts +11 -0
  178. package/lib/runjs-context/snippets/scene/block/three-users-orbit.snippet.js +283 -0
  179. package/lib/runjs-context/snippets/scene/block/vue-component.snippet.d.ts +11 -0
  180. package/lib/runjs-context/snippets/scene/block/vue-component.snippet.js +124 -0
  181. package/lib/runjs-context/snippets/scene/detail/color-by-value.snippet.d.ts +11 -0
  182. package/lib/runjs-context/snippets/scene/{jsfield → detail}/color-by-value.snippet.js +13 -3
  183. package/lib/runjs-context/snippets/scene/detail/copy-to-clipboard.snippet.d.ts +11 -0
  184. package/lib/runjs-context/snippets/{global → scene/detail}/copy-to-clipboard.snippet.js +28 -6
  185. package/lib/runjs-context/snippets/scene/detail/format-number.snippet.d.ts +11 -0
  186. package/lib/runjs-context/snippets/scene/{jsfield → detail}/format-number.snippet.js +13 -3
  187. package/lib/runjs-context/snippets/scene/detail/innerHTML-value.snippet.d.ts +11 -0
  188. package/lib/runjs-context/snippets/scene/{jsfield → detail}/innerHTML-value.snippet.js +13 -3
  189. package/lib/runjs-context/snippets/scene/detail/percentage-bar.snippet.d.ts +11 -0
  190. package/lib/runjs-context/snippets/scene/detail/percentage-bar.snippet.js +82 -0
  191. package/lib/runjs-context/snippets/scene/detail/relative-time.snippet.d.ts +11 -0
  192. package/lib/runjs-context/snippets/scene/detail/relative-time.snippet.js +80 -0
  193. package/lib/runjs-context/snippets/scene/detail/status-tag.snippet.d.ts +11 -0
  194. package/lib/runjs-context/snippets/scene/detail/status-tag.snippet.js +74 -0
  195. package/lib/runjs-context/snippets/scene/form/calculate-total.snippet.d.ts +11 -0
  196. package/lib/runjs-context/snippets/scene/form/calculate-total.snippet.js +63 -0
  197. package/lib/runjs-context/snippets/scene/form/cascade-select.snippet.d.ts +11 -0
  198. package/lib/runjs-context/snippets/scene/form/cascade-select.snippet.js +81 -0
  199. package/lib/runjs-context/snippets/scene/form/conditional-required.snippet.d.ts +11 -0
  200. package/lib/runjs-context/snippets/scene/form/conditional-required.snippet.js +64 -0
  201. package/lib/runjs-context/snippets/scene/form/copy-field-values.snippet.d.ts +11 -0
  202. package/lib/runjs-context/snippets/scene/form/copy-field-values.snippet.js +74 -0
  203. package/lib/runjs-context/snippets/scene/form/render-basic.snippet.d.ts +11 -0
  204. package/lib/runjs-context/snippets/scene/{jsitem → form}/render-basic.snippet.js +11 -2
  205. package/lib/runjs-context/snippets/scene/form/set-disabled.snippet.d.ts +11 -0
  206. package/lib/runjs-context/snippets/scene/{linkage → form}/set-disabled.snippet.js +12 -3
  207. package/lib/runjs-context/snippets/scene/form/set-field-value.snippet.d.ts +11 -0
  208. package/lib/runjs-context/snippets/scene/{linkage → form}/set-field-value.snippet.js +12 -3
  209. package/lib/runjs-context/snippets/scene/form/set-required.snippet.d.ts +11 -0
  210. package/lib/runjs-context/snippets/scene/{linkage → form}/set-required.snippet.js +12 -3
  211. package/lib/runjs-context/snippets/scene/form/toggle-multiple-fields.snippet.d.ts +11 -0
  212. package/lib/runjs-context/snippets/scene/form/toggle-multiple-fields.snippet.js +67 -0
  213. package/lib/runjs-context/snippets/scene/form/toggle-visible.snippet.d.ts +11 -0
  214. package/lib/runjs-context/snippets/scene/{linkage → form}/toggle-visible.snippet.js +12 -3
  215. package/lib/runjs-context/snippets/scene/table/cell-open-dialog.snippet.d.ts +11 -0
  216. package/lib/runjs-context/snippets/scene/table/cell-open-dialog.snippet.js +64 -0
  217. package/lib/runjs-context/snippets/scene/table/collection-selected-count.snippet.d.ts +11 -0
  218. package/lib/runjs-context/snippets/scene/{actions → table}/collection-selected-count.snippet.js +11 -2
  219. package/lib/runjs-context/snippets/scene/table/concat-fields.snippet.d.ts +11 -0
  220. package/lib/runjs-context/snippets/scene/table/concat-fields.snippet.js +79 -0
  221. package/lib/runjs-context/snippets/scene/table/destroy-selected.snippet.d.ts +11 -0
  222. package/lib/runjs-context/snippets/{global/log-json-record.snippet.js → scene/table/destroy-selected.snippet.js} +24 -11
  223. package/lib/runjs-context/snippets/scene/table/export-selected-json.snippet.d.ts +11 -0
  224. package/lib/runjs-context/snippets/scene/table/export-selected-json.snippet.js +64 -0
  225. package/lib/runjs-context/snippets/scene/table/iterate-selected-rows.snippet.d.ts +11 -0
  226. package/lib/runjs-context/snippets/scene/{actions → table}/iterate-selected-rows.snippet.js +11 -2
  227. package/lib/runjs-context/snippets/types.d.ts +9 -1
  228. package/lib/runjsLibs.d.ts +28 -0
  229. package/lib/runjsLibs.js +532 -0
  230. package/lib/scheduler/ModelOperationScheduler.d.ts +53 -0
  231. package/lib/scheduler/ModelOperationScheduler.js +262 -0
  232. package/lib/types.d.ts +66 -7
  233. package/lib/types.js +4 -3
  234. package/lib/utils/associationObjectVariable.d.ts +32 -0
  235. package/lib/utils/associationObjectVariable.js +157 -0
  236. package/lib/utils/createCollectionContextMeta.d.ts +1 -1
  237. package/lib/utils/createCollectionContextMeta.js +9 -4
  238. package/lib/utils/createEphemeralContext.d.ts +13 -0
  239. package/lib/utils/createEphemeralContext.js +140 -0
  240. package/lib/utils/flows.d.ts +10 -0
  241. package/lib/{runjs-context/snippets/global/console-log-ctx.snippet.js → utils/flows.js} +21 -14
  242. package/lib/utils/index.d.ts +9 -3
  243. package/lib/utils/index.js +30 -2
  244. package/lib/utils/jsxTransform.d.ts +15 -0
  245. package/lib/utils/jsxTransform.js +68 -0
  246. package/lib/utils/params-resolvers.js +19 -12
  247. package/lib/utils/parsePathnameToViewParams.d.ts +1 -1
  248. package/lib/utils/parsePathnameToViewParams.js +41 -5
  249. package/lib/utils/pruneFilter.d.ts +21 -0
  250. package/lib/{runjs-context/snippets/global/try-catch-async.snippet.js → utils/pruneFilter.js} +24 -16
  251. package/lib/utils/resolveModuleUrl.d.ts +58 -0
  252. package/lib/utils/resolveModuleUrl.js +65 -0
  253. package/lib/utils/runjsModuleLoader.d.ts +58 -0
  254. package/lib/utils/runjsModuleLoader.js +422 -0
  255. package/lib/utils/runjsTemplateCompat.d.ts +35 -0
  256. package/lib/utils/runjsTemplateCompat.js +743 -0
  257. package/lib/utils/safeGlobals.d.ts +6 -8
  258. package/lib/utils/safeGlobals.js +169 -14
  259. package/lib/utils/schema-utils.d.ts +6 -0
  260. package/lib/utils/schema-utils.js +71 -6
  261. package/lib/utils/serverContextParams.d.ts +4 -0
  262. package/lib/utils/serverContextParams.js +2 -0
  263. package/lib/utils/translation.d.ts +4 -1
  264. package/lib/utils/translation.js +6 -2
  265. package/lib/utils/variablesParams.d.ts +22 -5
  266. package/lib/utils/variablesParams.js +141 -61
  267. package/lib/views/DialogComponent.js +1 -5
  268. package/lib/views/DrawerComponent.js +18 -9
  269. package/lib/views/PageComponent.js +5 -5
  270. package/lib/views/ViewNavigation.d.ts +11 -15
  271. package/lib/views/ViewNavigation.js +37 -19
  272. package/lib/views/createViewMeta.d.ts +27 -5
  273. package/lib/views/createViewMeta.js +338 -72
  274. package/lib/views/index.d.ts +1 -1
  275. package/lib/views/index.js +4 -0
  276. package/lib/views/useDialog.d.ts +10 -9
  277. package/lib/views/useDialog.js +46 -34
  278. package/lib/views/useDrawer.d.ts +10 -9
  279. package/lib/views/useDrawer.js +74 -48
  280. package/lib/views/usePage.d.ts +14 -9
  281. package/lib/views/usePage.js +82 -33
  282. package/lib/views/usePopover.js +4 -1
  283. package/lib/views/viewEvents.d.ts +17 -0
  284. package/lib/views/viewEvents.js +90 -0
  285. package/package.json +6 -3
  286. package/src/BlockScopedFlowEngine.ts +85 -0
  287. package/src/FlowContextProvider.tsx +4 -2
  288. package/src/JSRunner.ts +39 -1
  289. package/src/ViewScopedFlowEngine.ts +21 -1
  290. package/src/__tests__/JSRunner.test.ts +125 -52
  291. package/src/__tests__/blockScopedFlowEngine.test.ts +154 -0
  292. package/src/__tests__/createViewMeta.popup.test.ts +203 -0
  293. package/src/__tests__/flow-engine.test.ts +3 -0
  294. package/src/__tests__/flowContext.test.ts +160 -0
  295. package/src/__tests__/flowContextCreateJSRunner.test.ts +163 -0
  296. package/src/__tests__/flowEngine.dataSourceDirty.test.ts +63 -0
  297. package/src/__tests__/flowEngine.destroyModel.test.ts +74 -0
  298. package/src/__tests__/flowEngine.moveModel.test.ts +43 -0
  299. package/src/__tests__/flowEngine.removeModel.test.ts +72 -0
  300. package/src/__tests__/flowEngine.saveModel.test.ts +4 -0
  301. package/src/__tests__/flowModel.openView.navigation.test.ts +31 -2
  302. package/src/__tests__/flowRunJSContextDefine.test.ts +508 -0
  303. package/src/__tests__/flowSettings.open.test.tsx +71 -15
  304. package/src/__tests__/flowSettings.test.ts +2 -0
  305. package/src/__tests__/globalFlowRegistry.test.ts +1 -1
  306. package/src/__tests__/modelOperationScheduler.test.ts +346 -0
  307. package/src/__tests__/objectVariable.test.ts +464 -0
  308. package/src/__tests__/provider.test.tsx +0 -5
  309. package/src/__tests__/runjsContext.test.ts +219 -35
  310. package/src/__tests__/runjsContextImplementations.test.ts +217 -0
  311. package/src/__tests__/runjsContextRuntime.test.ts +269 -0
  312. package/src/__tests__/runjsEdgeCases.test.ts +281 -0
  313. package/src/__tests__/runjsExternalLibs.test.ts +242 -0
  314. package/src/__tests__/runjsLibsLazyLoading.test.ts +44 -0
  315. package/src/__tests__/runjsLocales.test.ts +39 -0
  316. package/src/__tests__/runjsPreprocessDefault.test.ts +49 -0
  317. package/src/__tests__/runjsRuntimeFeatures.test.ts +461 -0
  318. package/src/__tests__/runjsSnippets.test.ts +140 -0
  319. package/src/__tests__/viewScopedFlowEngine.test.ts +101 -3
  320. package/src/acl/Acl.tsx +85 -31
  321. package/src/acl/__tests__/Acl.test.tsx +43 -1
  322. package/src/components/DynamicFlowsEditor.tsx +0 -10
  323. package/src/components/FieldModelRenderer.tsx +22 -9
  324. package/src/components/FieldSkeleton.tsx +27 -0
  325. package/src/components/FlowContextSelector.tsx +20 -2
  326. package/src/components/FlowModelRenderer.tsx +52 -84
  327. package/src/components/FormItem.tsx +8 -1
  328. package/src/components/MobilePopup.style.ts +220 -0
  329. package/src/components/MobilePopup.tsx +86 -0
  330. package/src/components/__tests__/FlowModelRenderer.test.tsx +89 -0
  331. package/src/components/__tests__/flow-model-render-error-fallback.test.tsx +6 -6
  332. package/src/components/__tests__/gridDragPlanner.test.ts +141 -1
  333. package/src/components/common/withFlowDesignMode.tsx +5 -5
  334. package/src/components/dnd/gridDragPlanner.ts +60 -0
  335. package/src/components/index.ts +1 -0
  336. package/src/components/settings/independents/dropdown/FlowsDropdownButton.tsx +34 -17
  337. package/src/components/settings/wrappers/component/SelectWithTitle.tsx +110 -0
  338. package/src/components/settings/wrappers/component/SwitchWithTitle.tsx +83 -0
  339. package/src/components/settings/wrappers/component/__tests__/InlineControls.test.tsx +74 -0
  340. package/src/components/settings/wrappers/contextual/DefaultSettingsIcon.tsx +272 -125
  341. package/src/components/settings/wrappers/contextual/FlowsContextMenu.tsx +34 -18
  342. package/src/components/settings/wrappers/contextual/FlowsFloatContextMenu.tsx +56 -18
  343. package/src/components/settings/wrappers/contextual/StepSettings.tsx +1 -2
  344. package/src/components/settings/wrappers/contextual/StepSettingsDialog.tsx +13 -1
  345. package/src/components/settings/wrappers/contextual/__tests__/DefaultSettingsIcon.test.tsx +624 -0
  346. package/src/components/settings/wrappers/embedded/FlowSettings.tsx +47 -35
  347. package/src/components/settings/wrappers/embedded/FlowsSettings.tsx +1 -1
  348. package/src/components/settings/wrappers/embedded/FlowsSettingsContent.tsx +64 -42
  349. package/src/components/subModel/AddSubModelButton.tsx +104 -9
  350. package/src/components/subModel/LazyDropdown.tsx +14 -14
  351. package/src/components/subModel/__tests__/AddSubModelButton.test.tsx +168 -7
  352. package/src/components/subModel/__tests__/utils.test.ts +12 -12
  353. package/src/components/subModel/utils.ts +25 -6
  354. package/src/components/variables/VariableInput.tsx +32 -6
  355. package/src/components/variables/VariableTag.tsx +54 -2
  356. package/src/components/variables/types.ts +2 -0
  357. package/src/components/variables/utils.ts +7 -3
  358. package/src/data-source/index.ts +143 -12
  359. package/src/data-source/jioToJoiSchema.ts +1 -0
  360. package/src/emitter.ts +14 -0
  361. package/src/executor/FlowExecutor.ts +383 -119
  362. package/src/executor/__tests__/ctx-defs-injection.test.ts +197 -0
  363. package/src/executor/__tests__/flowExecutor.test.ts +217 -5
  364. package/src/flow-registry/GlobalFlowRegistry.ts +1 -0
  365. package/src/flow-registry/InstanceFlowRegistry.ts +1 -0
  366. package/src/flow-registry/__tests__/globalFlowRegistry.test.ts +54 -0
  367. package/src/flowContext.ts +646 -158
  368. package/src/flowEngine.ts +385 -14
  369. package/src/flowSettings.ts +59 -30
  370. package/src/hooks/useApplyAutoFlows.ts +5 -3
  371. package/src/index.ts +26 -3
  372. package/src/locale/de-DE.json +62 -0
  373. package/src/locale/en-US.json +57 -45
  374. package/src/locale/es-ES.json +62 -0
  375. package/src/locale/fr-FR.json +62 -0
  376. package/src/locale/hu-HU.json +62 -0
  377. package/src/locale/id-ID.json +62 -0
  378. package/src/locale/it-IT.json +62 -0
  379. package/src/locale/ja-JP.json +62 -0
  380. package/src/locale/ko-KR.json +62 -0
  381. package/src/locale/nl-NL.json +62 -0
  382. package/src/locale/pt-BR.json +62 -0
  383. package/src/locale/ru-RU.json +62 -0
  384. package/src/locale/tr-TR.json +62 -0
  385. package/src/locale/uk-UA.json +62 -0
  386. package/src/locale/vi-VN.json +62 -0
  387. package/src/locale/zh-CN.json +58 -46
  388. package/src/locale/zh-TW.json +62 -0
  389. package/src/models/CollectionFieldModel.tsx +82 -18
  390. package/src/models/__tests__/dispatchEvent.behavior.test.ts +169 -0
  391. package/src/models/__tests__/dispatchEvent.when.test.ts +356 -0
  392. package/src/models/__tests__/flowEngine.resolveUse.test.ts +170 -0
  393. package/src/models/__tests__/flowModel.clone.test.ts +416 -0
  394. package/src/models/__tests__/flowModel.getFlows.sort.test.ts +33 -9
  395. package/src/models/__tests__/flowModel.scheduleModelOperation.test.tsx +129 -0
  396. package/src/models/__tests__/flowModel.test.ts +296 -119
  397. package/src/models/__tests__/forkFlowModel.test.ts +40 -7
  398. package/src/models/flowModel.tsx +426 -148
  399. package/src/models/forkFlowModel.ts +48 -8
  400. package/src/provider.tsx +18 -14
  401. package/src/reactive/__tests__/observer.test.tsx +211 -0
  402. package/src/reactive/index.ts +11 -0
  403. package/src/reactive/observer.tsx +101 -0
  404. package/src/resources/__tests__/multiRecordResource.test.ts +44 -0
  405. package/src/resources/__tests__/sqlResource.test.ts +60 -0
  406. package/src/resources/baseRecordResource.ts +46 -3
  407. package/src/resources/multiRecordResource.ts +28 -12
  408. package/src/resources/singleRecordResource.ts +9 -3
  409. package/src/resources/sqlResource.ts +33 -32
  410. package/src/runjs-context/contexts/FormJSFieldItemRunJSContext.ts +38 -21
  411. package/src/runjs-context/contexts/JSBlockRunJSContext.ts +50 -34
  412. package/src/runjs-context/contexts/JSCollectionActionRunJSContext.ts +15 -16
  413. package/src/runjs-context/contexts/JSColumnRunJSContext.ts +58 -0
  414. package/src/runjs-context/contexts/JSEditableFieldRunJSContext.ts +106 -0
  415. package/src/runjs-context/contexts/JSFieldRunJSContext.ts +30 -25
  416. package/src/runjs-context/contexts/JSItemRunJSContext.ts +35 -21
  417. package/src/runjs-context/contexts/JSRecordActionRunJSContext.ts +17 -18
  418. package/src/runjs-context/contexts/base.ts +871 -0
  419. package/src/runjs-context/contributions.ts +88 -0
  420. package/src/runjs-context/helpers.ts +32 -30
  421. package/src/runjs-context/registry.ts +16 -47
  422. package/src/runjs-context/setup.ts +57 -0
  423. package/src/runjs-context/snippets/global/api-request.snippet.ts +38 -0
  424. package/src/runjs-context/snippets/global/clipboard-copy-text.snippet.ts +42 -0
  425. package/src/runjs-context/snippets/global/import-esm.snippet.ts +39 -0
  426. package/src/runjs-context/snippets/global/message-error.snippet.ts +6 -0
  427. package/src/runjs-context/snippets/global/message-success.snippet.ts +6 -0
  428. package/src/runjs-context/snippets/global/notification-open.snippet.ts +11 -1
  429. package/src/runjs-context/snippets/global/open-view-dialog.snippet.ts +10 -3
  430. package/src/runjs-context/snippets/global/open-view-drawer.snippet.ts +10 -3
  431. package/src/runjs-context/snippets/global/query-selector.snippet.ts +34 -0
  432. package/src/runjs-context/snippets/global/require-amd.snippet.ts +30 -0
  433. package/src/runjs-context/snippets/global/window-open.snippet.ts +11 -1
  434. package/src/runjs-context/snippets/index.ts +212 -39
  435. package/src/runjs-context/snippets/scene/{jsblock → block}/add-event-listener.snippet.ts +14 -2
  436. package/src/runjs-context/snippets/scene/block/api-fetch-render-list.snippet.ts +45 -0
  437. package/src/runjs-context/snippets/scene/block/chartjs-bar.snippet.ts +80 -0
  438. package/src/runjs-context/snippets/scene/block/echarts-init.snippet.ts +44 -0
  439. package/src/runjs-context/snippets/scene/block/render-antd-icons.snippet.ts +46 -0
  440. package/src/runjs-context/snippets/scene/block/render-button-handler.snippet.ts +35 -0
  441. package/src/runjs-context/snippets/scene/block/render-iframe.snippet.ts +38 -0
  442. package/src/runjs-context/snippets/scene/block/render-info-card.snippet.ts +52 -0
  443. package/src/runjs-context/snippets/scene/block/render-react-jsx.snippet.ts +39 -0
  444. package/src/runjs-context/snippets/scene/block/render-react.snippet.ts +38 -0
  445. package/src/runjs-context/snippets/scene/block/render-statistics.snippet.ts +76 -0
  446. package/src/runjs-context/snippets/scene/block/render-timeline.snippet.ts +65 -0
  447. package/src/runjs-context/snippets/scene/block/resource-example.snippet.ts +46 -0
  448. package/src/runjs-context/snippets/scene/block/three-users-orbit.snippet.ts +264 -0
  449. package/src/runjs-context/snippets/scene/block/vue-component.snippet.ts +105 -0
  450. package/src/runjs-context/snippets/scene/detail/color-by-value.snippet.ts +33 -0
  451. package/src/runjs-context/snippets/scene/detail/copy-to-clipboard.snippet.ts +45 -0
  452. package/src/runjs-context/snippets/scene/detail/format-number.snippet.ts +32 -0
  453. package/src/runjs-context/snippets/scene/detail/innerHTML-value.snippet.ts +31 -0
  454. package/src/runjs-context/snippets/scene/detail/percentage-bar.snippet.ts +63 -0
  455. package/src/runjs-context/snippets/scene/detail/relative-time.snippet.ts +61 -0
  456. package/src/runjs-context/snippets/scene/detail/status-tag.snippet.ts +55 -0
  457. package/src/runjs-context/snippets/scene/form/calculate-total.snippet.ts +44 -0
  458. package/src/runjs-context/snippets/scene/form/cascade-select.snippet.ts +62 -0
  459. package/src/runjs-context/snippets/scene/form/conditional-required.snippet.ts +45 -0
  460. package/src/runjs-context/snippets/scene/form/copy-field-values.snippet.ts +55 -0
  461. package/src/runjs-context/snippets/scene/{jsitem → form}/render-basic.snippet.ts +14 -2
  462. package/src/runjs-context/snippets/scene/{linkage → form}/set-disabled.snippet.ts +15 -3
  463. package/src/runjs-context/snippets/scene/{linkage → form}/set-field-value.snippet.ts +15 -3
  464. package/src/runjs-context/snippets/scene/{linkage → form}/set-required.snippet.ts +15 -3
  465. package/src/runjs-context/snippets/scene/form/toggle-multiple-fields.snippet.ts +48 -0
  466. package/src/runjs-context/snippets/scene/{linkage → form}/toggle-visible.snippet.ts +15 -3
  467. package/src/runjs-context/snippets/scene/table/cell-open-dialog.snippet.ts +45 -0
  468. package/src/runjs-context/snippets/scene/{actions → table}/collection-selected-count.snippet.ts +14 -2
  469. package/src/runjs-context/snippets/scene/table/concat-fields.snippet.ts +60 -0
  470. package/src/runjs-context/snippets/scene/table/destroy-selected.snippet.ts +36 -0
  471. package/src/runjs-context/snippets/scene/table/export-selected-json.snippet.ts +45 -0
  472. package/src/runjs-context/snippets/scene/{actions → table}/iterate-selected-rows.snippet.ts +14 -2
  473. package/src/runjs-context/snippets/types.ts +5 -1
  474. package/src/runjsLibs.ts +622 -0
  475. package/src/scheduler/ModelOperationScheduler.ts +306 -0
  476. package/src/types.ts +86 -5
  477. package/src/utils/__tests__/createCollectionContextMeta.test.ts +51 -0
  478. package/src/utils/__tests__/flows.test.ts +65 -0
  479. package/src/utils/__tests__/jsxTransform.test.ts +38 -0
  480. package/src/utils/__tests__/params-resolvers.test.ts +40 -0
  481. package/src/utils/__tests__/parsePathnameToViewParams.test.ts +25 -0
  482. package/src/utils/__tests__/pruneFilter.test.ts +38 -0
  483. package/src/utils/__tests__/runjsRequireAsyncAutoWhitelist.test.ts +38 -0
  484. package/src/utils/__tests__/runjsTemplateCompat.test.ts +159 -0
  485. package/src/utils/__tests__/safeGlobals.test.ts +79 -2
  486. package/src/utils/__tests__/utils.test.ts +114 -15
  487. package/src/utils/__tests__/variablesParams.test.ts +120 -0
  488. package/src/utils/associationObjectVariable.ts +180 -0
  489. package/src/utils/createCollectionContextMeta.ts +9 -3
  490. package/src/utils/createEphemeralContext.ts +142 -0
  491. package/src/utils/flows.ts +23 -0
  492. package/src/utils/index.ts +17 -3
  493. package/src/utils/jsxTransform.ts +39 -0
  494. package/src/utils/params-resolvers.ts +25 -11
  495. package/src/utils/parsePathnameToViewParams.ts +50 -6
  496. package/src/utils/pruneFilter.ts +41 -0
  497. package/src/utils/resolveModuleUrl.ts +91 -0
  498. package/src/utils/runjsModuleLoader.ts +553 -0
  499. package/src/utils/runjsTemplateCompat.ts +828 -0
  500. package/src/utils/safeGlobals.ts +181 -15
  501. package/src/utils/schema-utils.ts +81 -3
  502. package/src/utils/serverContextParams.ts +6 -0
  503. package/src/utils/translation.ts +7 -2
  504. package/src/utils/variablesParams.ts +164 -72
  505. package/src/views/DialogComponent.tsx +1 -4
  506. package/src/views/DrawerComponent.tsx +19 -7
  507. package/src/views/PageComponent.tsx +3 -5
  508. package/src/views/ViewNavigation.ts +49 -43
  509. package/src/views/__tests__/FlowView.usePage.test.tsx +186 -0
  510. package/src/views/__tests__/ViewNavigation.test.ts +54 -34
  511. package/src/views/__tests__/useDialog.closeDestroy.test.tsx +159 -0
  512. package/src/views/__tests__/viewEvents.resolveOpenerEngine.test.ts +28 -0
  513. package/src/views/createViewMeta.ts +402 -73
  514. package/src/views/index.tsx +1 -1
  515. package/src/views/useDialog.tsx +52 -31
  516. package/src/views/useDrawer.tsx +99 -55
  517. package/src/views/usePage.tsx +101 -33
  518. package/src/views/usePopover.tsx +4 -1
  519. package/src/views/viewEvents.ts +55 -0
  520. package/lib/runjs-context/contexts/FlowRunJSContext.d.ts +0 -38
  521. package/lib/runjs-context/contexts/FlowRunJSContext.js +0 -217
  522. package/lib/runjs-context/contexts/LinkageRunJSContext.js +0 -62
  523. package/lib/runjs-context/index.d.ts +0 -19
  524. package/lib/runjs-context/index.js +0 -57
  525. package/lib/runjs-context/snippets/global/api-request-get.snippet.d.ts +0 -16
  526. package/lib/runjs-context/snippets/global/api-request-get.snippet.js +0 -42
  527. package/lib/runjs-context/snippets/global/api-request-post.snippet.d.ts +0 -16
  528. package/lib/runjs-context/snippets/global/console-log-ctx.snippet.d.ts +0 -16
  529. package/lib/runjs-context/snippets/global/requireAsync.snippet.d.ts +0 -16
  530. package/lib/runjs-context/snippets/global/sleep.snippet.d.ts +0 -16
  531. package/lib/runjs-context/snippets/global/sleep.snippet.js +0 -43
  532. package/lib/runjs-context/snippets/global/try-catch-async.snippet.d.ts +0 -16
  533. package/lib/runjs-context/snippets/libs/echarts-init.snippet.d.ts +0 -15
  534. package/lib/runjs-context/snippets/scene/actions/collection-selected-count.snippet.d.ts +0 -15
  535. package/lib/runjs-context/snippets/scene/actions/iterate-selected-rows.snippet.d.ts +0 -15
  536. package/lib/runjs-context/snippets/scene/actions/record-id-message.snippet.d.ts +0 -15
  537. package/lib/runjs-context/snippets/scene/actions/record-id-message.snippet.js +0 -43
  538. package/lib/runjs-context/snippets/scene/actions/run-action-basic.snippet.d.ts +0 -15
  539. package/lib/runjs-context/snippets/scene/actions/run-action-basic.snippet.js +0 -40
  540. package/lib/runjs-context/snippets/scene/jsblock/add-event-listener.snippet.d.ts +0 -15
  541. package/lib/runjs-context/snippets/scene/jsblock/append-style.snippet.d.ts +0 -15
  542. package/lib/runjs-context/snippets/scene/jsblock/append-style.snippet.js +0 -42
  543. package/lib/runjs-context/snippets/scene/jsblock/jsx-mount.snippet.d.ts +0 -15
  544. package/lib/runjs-context/snippets/scene/jsblock/jsx-mount.snippet.js +0 -46
  545. package/lib/runjs-context/snippets/scene/jsblock/jsx-unmount.snippet.d.ts +0 -15
  546. package/lib/runjs-context/snippets/scene/jsblock/jsx-unmount.snippet.js +0 -41
  547. package/lib/runjs-context/snippets/scene/jsblock/render-basic.snippet.d.ts +0 -15
  548. package/lib/runjs-context/snippets/scene/jsblock/render-basic.snippet.js +0 -41
  549. package/lib/runjs-context/snippets/scene/jsblock/render-button-handler.snippet.d.ts +0 -15
  550. package/lib/runjs-context/snippets/scene/jsblock/render-react.snippet.d.ts +0 -15
  551. package/lib/runjs-context/snippets/scene/jsfield/color-by-value.snippet.d.ts +0 -15
  552. package/lib/runjs-context/snippets/scene/jsfield/format-number.snippet.d.ts +0 -15
  553. package/lib/runjs-context/snippets/scene/jsfield/innerHTML-value.snippet.d.ts +0 -15
  554. package/lib/runjs-context/snippets/scene/jsitem/render-basic.snippet.d.ts +0 -15
  555. package/lib/runjs-context/snippets/scene/linkage/set-disabled.snippet.d.ts +0 -15
  556. package/lib/runjs-context/snippets/scene/linkage/set-field-value.snippet.d.ts +0 -15
  557. package/lib/runjs-context/snippets/scene/linkage/set-required.snippet.d.ts +0 -15
  558. package/lib/runjs-context/snippets/scene/linkage/toggle-visible.snippet.d.ts +0 -15
  559. package/src/runjs-context/contexts/FlowRunJSContext.ts +0 -190
  560. package/src/runjs-context/contexts/LinkageRunJSContext.ts +0 -35
  561. package/src/runjs-context/index.ts +0 -20
  562. package/src/runjs-context/snippets/global/api-request-get.snippet.ts +0 -20
  563. package/src/runjs-context/snippets/global/api-request-post.snippet.ts +0 -20
  564. package/src/runjs-context/snippets/global/console-log-ctx.snippet.ts +0 -19
  565. package/src/runjs-context/snippets/global/copy-record-json.snippet.ts +0 -21
  566. package/src/runjs-context/snippets/global/copy-to-clipboard.snippet.ts +0 -21
  567. package/src/runjs-context/snippets/global/log-json-record.snippet.ts +0 -21
  568. package/src/runjs-context/snippets/global/requireAsync.snippet.ts +0 -24
  569. package/src/runjs-context/snippets/global/sleep.snippet.ts +0 -21
  570. package/src/runjs-context/snippets/global/try-catch-async.snippet.ts +0 -22
  571. package/src/runjs-context/snippets/global/view-navigation-push.snippet.ts +0 -23
  572. package/src/runjs-context/snippets/libs/echarts-init.snippet.ts +0 -24
  573. package/src/runjs-context/snippets/scene/actions/record-id-message.snippet.ts +0 -21
  574. package/src/runjs-context/snippets/scene/actions/run-action-basic.snippet.ts +0 -18
  575. package/src/runjs-context/snippets/scene/jsblock/append-style.snippet.ts +0 -20
  576. package/src/runjs-context/snippets/scene/jsblock/jsx-mount.snippet.ts +0 -24
  577. package/src/runjs-context/snippets/scene/jsblock/jsx-unmount.snippet.ts +0 -19
  578. package/src/runjs-context/snippets/scene/jsblock/render-basic.snippet.ts +0 -24
  579. package/src/runjs-context/snippets/scene/jsblock/render-button-handler.snippet.ts +0 -24
  580. package/src/runjs-context/snippets/scene/jsblock/render-card.snippet.ts +0 -30
  581. package/src/runjs-context/snippets/scene/jsblock/render-react.snippet.ts +0 -34
  582. package/src/runjs-context/snippets/scene/jsfield/color-by-value.snippet.ts +0 -20
  583. package/src/runjs-context/snippets/scene/jsfield/format-number.snippet.ts +0 -19
  584. package/src/runjs-context/snippets/scene/jsfield/innerHTML-value.snippet.ts +0 -18
  585. /package/lib/runjs-context/snippets/global/{copy-record-json.snippet.d.ts → api-request.snippet.d.ts} +0 -0
  586. /package/lib/runjs-context/snippets/global/{copy-to-clipboard.snippet.d.ts → clipboard-copy-text.snippet.d.ts} +0 -0
  587. /package/lib/runjs-context/snippets/global/{log-json-record.snippet.d.ts → import-esm.snippet.d.ts} +0 -0
  588. /package/lib/runjs-context/snippets/global/{view-navigation-push.snippet.d.ts → query-selector.snippet.d.ts} +0 -0
  589. /package/lib/runjs-context/snippets/scene/{jsblock/render-card.snippet.d.ts → block/echarts-init.snippet.d.ts} +0 -0
@@ -0,0 +1,154 @@
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
+ import { describe, expect, it, vi } from 'vitest';
11
+ import { APIClient as SDKApiClient } from '@nocobase/sdk';
12
+ import { FlowEngine } from '../flowEngine';
13
+ import { createBlockScopedEngine } from '../BlockScopedFlowEngine';
14
+ import { FlowModel } from '../models';
15
+
16
+ describe('BlockScopedFlowEngine', () => {
17
+ it('shares global actions/events and model classes with parent', async () => {
18
+ const parent = new FlowEngine();
19
+ // 在运行时 host app 会注入 api,这里补一个最小 mock,避免偶发访问 ctx.auth 抛错
20
+ const api = new SDKApiClient({ storageType: 'memory' });
21
+ api.auth.role = 'guest';
22
+ api.auth.locale = 'en-US';
23
+ api.auth.token = 't';
24
+ parent.context.defineProperty('api', { value: api });
25
+ parent.registerActions({
26
+ ping: {
27
+ name: 'ping',
28
+ handler: () => 'pong',
29
+ },
30
+ });
31
+ const child = createBlockScopedEngine(parent);
32
+
33
+ // child can read parent's action
34
+ expect(child.getAction('ping')).toBeDefined();
35
+
36
+ // registering via child should affect parent
37
+ child.registerActions({ pong: { name: 'pong', handler: () => 'ok' } });
38
+ expect(parent.getAction('pong')).toBeDefined();
39
+
40
+ // model class resolution is proxied
41
+ class TestModel extends FlowModel {}
42
+ parent.registerModels({ TestModel });
43
+ expect(child.getModelClass('TestModel')).toBeDefined();
44
+ });
45
+
46
+ it('isolates model instances map and beforeRender cache across engines with identical model uid', async () => {
47
+ const parent = new FlowEngine();
48
+ // 提供最小 api mock,满足 ctx.auth 相关 getter
49
+ const api = new SDKApiClient({ storageType: 'memory' });
50
+ api.auth.role = 'guest';
51
+ api.auth.locale = 'en-US';
52
+ api.auth.token = 't';
53
+ parent.context.defineProperty('api', { value: api });
54
+ const child = createBlockScopedEngine(parent);
55
+
56
+ let count = 0;
57
+ class CounterModel extends FlowModel {}
58
+ CounterModel.registerFlow({
59
+ key: 'autoCounter',
60
+ steps: {
61
+ s1: {
62
+ handler: async () => {
63
+ count += 1;
64
+ return count;
65
+ },
66
+ },
67
+ },
68
+ });
69
+
70
+ const uid = 'model-uid-cache';
71
+ const pm = parent.createModel<CounterModel>({ use: CounterModel, uid });
72
+ const cm = child.createModel<CounterModel>({ use: CounterModel, uid });
73
+
74
+ await pm.dispatchEvent('beforeRender');
75
+ expect(count).toBe(1);
76
+
77
+ // If cache was shared, the next call would hit cache and not increment.
78
+ await cm.dispatchEvent('beforeRender');
79
+ expect(count).toBe(2);
80
+ });
81
+
82
+ it('stacks engines and repairs chain when unlinking a middle block-scoped engine', () => {
83
+ const root = new FlowEngine();
84
+ // 提供最小 api mock,满足 ctx.auth 相关 getter
85
+ const api = new SDKApiClient({ storageType: 'memory' });
86
+ api.auth.role = 'guest';
87
+ api.auth.locale = 'en-US';
88
+ api.auth.token = 't';
89
+ root.context.defineProperty('api', { value: api });
90
+ const c1 = createBlockScopedEngine(root);
91
+ const c2 = createBlockScopedEngine(root);
92
+ const c3 = createBlockScopedEngine(root);
93
+
94
+ // chain root -> c1 -> c2 -> c3
95
+ expect(root.nextEngine).toBeTruthy();
96
+ expect(root.nextEngine?.nextEngine).toBeTruthy();
97
+ expect(root.nextEngine?.nextEngine?.nextEngine).toBeTruthy();
98
+
99
+ // unlink middle (c2) should link c1 <-> c3 and keep the tail intact
100
+ c2.unlinkFromStack();
101
+
102
+ // root.nextEngine 指向的是被代理的本地 FlowEngine 实例,不与 c1 的 Proxy 引用相等
103
+ // 这里通过前后指针关系来校验链修复是否正确
104
+ const first = root.nextEngine;
105
+ const second = first?.nextEngine;
106
+ expect(first?.previousEngine).toBe(root);
107
+ expect(second?.previousEngine).toBe(first);
108
+ expect(second?.nextEngine).toBeUndefined();
109
+ });
110
+
111
+ it('global model lookup traverses from top to root across stack', () => {
112
+ const root = new FlowEngine();
113
+ // 提供最小 api mock,满足 ctx.auth 相关 getter
114
+ const api = new SDKApiClient({ storageType: 'memory' });
115
+ api.auth.role = 'guest';
116
+ api.auth.locale = 'en-US';
117
+ api.auth.token = 't';
118
+ root.context.defineProperty('api', { value: api });
119
+ const c1 = createBlockScopedEngine(root);
120
+ const c2 = createBlockScopedEngine(root);
121
+
122
+ class TM extends FlowModel {}
123
+ const uid = 'same-uid-global-lookup';
124
+ const mRoot = root.createModel<TM>({ use: TM, uid });
125
+ const m1 = c1.createModel<TM>({ use: TM, uid });
126
+ const m2 = c2.createModel<TM>({ use: TM, uid });
127
+
128
+ // sanity: each scope returns its own when not global
129
+ expect(root.getModel(uid)).toBe(mRoot);
130
+ expect(c1.getModel(uid)).toBe(m1);
131
+ expect(c2.getModel(uid)).toBe(m2);
132
+
133
+ // global search from any engine hits the top-most engine's instance first
134
+ expect(root.getModel(uid, true)).toBe(m2);
135
+ expect(c1.getModel(uid, true)).toBe(m2);
136
+ expect(c2.getModel(uid, true)).toBe(m2);
137
+ });
138
+
139
+ it('delegates saveModel to parent (concurrency gate sharing)', async () => {
140
+ const parent = new FlowEngine();
141
+ // 提供最小 api mock,满足 ctx.auth 相关 getter
142
+ const api = new SDKApiClient({ storageType: 'memory' });
143
+ api.auth.role = 'guest';
144
+ api.auth.locale = 'en-US';
145
+ api.auth.token = 't';
146
+ parent.context.defineProperty('api', { value: api });
147
+ const child = createBlockScopedEngine(parent);
148
+ const spy = vi.spyOn(parent, 'saveModel').mockResolvedValueOnce(true);
149
+ class T extends FlowModel {}
150
+ const m = child.createModel<T>({ use: T });
151
+ await child.saveModel(m);
152
+ expect(spy).toHaveBeenCalledOnce();
153
+ });
154
+ });
@@ -0,0 +1,203 @@
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
+ import { describe, it, expect, vi } from 'vitest';
11
+ import { FlowContext } from '../flowContext';
12
+ import { FlowEngine } from '../flowEngine';
13
+ import type { FlowView } from '../views/FlowView';
14
+ import { createPopupMeta } from '../views/createViewMeta';
15
+
16
+ describe('createPopupMeta - popup variables', () => {
17
+ function makeCtx() {
18
+ const engine = new FlowEngine();
19
+ const ctx = new FlowContext();
20
+ ctx.defineProperty('engine', { value: engine });
21
+ // 简化 i18n:直接返回 key
22
+ ctx.defineProperty('t', { value: (s: string) => s });
23
+ return { engine, ctx };
24
+ }
25
+
26
+ it('buildVariablesParams(record) uses anchor view instead of ctx.view', async () => {
27
+ const { engine, ctx } = makeCtx();
28
+
29
+ // 模拟锚定弹窗视图(被测试目标)
30
+ const anchorView: FlowView = {
31
+ type: 'embed',
32
+ inputArgs: {},
33
+ Header: null,
34
+ Footer: null,
35
+ close: () => void 0,
36
+ update: () => void 0,
37
+ navigation: {
38
+ viewStack: [
39
+ {
40
+ viewUid: 'base-page-uid',
41
+ },
42
+ {
43
+ viewUid: 'popup-uid',
44
+ filterByTk: 111,
45
+ sourceId: 42,
46
+ },
47
+ ],
48
+ } as any,
49
+ } as any;
50
+
51
+ // ctx.view 指向另一个(例如设置弹窗)
52
+ ctx.defineProperty('view', {
53
+ value: {
54
+ type: 'dialog',
55
+ inputArgs: {},
56
+ navigation: {
57
+ viewStack: [
58
+ {
59
+ viewUid: 'settings-uid',
60
+ filterByTk: 9999,
61
+ },
62
+ ],
63
+ },
64
+ },
65
+ });
66
+
67
+ // 为两个视图 uid 注入不同的 openView 配置,确保只取锚定视图
68
+ const popupModel = {
69
+ getStepParams: vi.fn((_fk: string, sk: string) =>
70
+ sk === 'openView'
71
+ ? {
72
+ collectionName: 'posts',
73
+ dataSourceKey: 'main',
74
+ associationName: 'users.posts',
75
+ }
76
+ : undefined,
77
+ ),
78
+ } as any;
79
+ const settingsModel = {
80
+ getStepParams: vi.fn((_fk: string, sk: string) =>
81
+ sk === 'openView'
82
+ ? {
83
+ collectionName: 'comments',
84
+ dataSourceKey: 'main',
85
+ }
86
+ : undefined,
87
+ ),
88
+ } as any;
89
+
90
+ const getModelSpy = vi.spyOn(engine as any, 'getModel');
91
+ getModelSpy.mockImplementation((uid: string) => (uid === 'popup-uid' ? popupModel : settingsModel));
92
+
93
+ const metaFactory = createPopupMeta(ctx, anchorView);
94
+ const meta = (await metaFactory())!;
95
+
96
+ // record 应来自锚定视图的 openView 配置
97
+ const vars = (await meta.buildVariablesParams!(ctx)) as any;
98
+ expect(vars).toBeTruthy();
99
+ expect(vars.record).toEqual({
100
+ collection: 'posts',
101
+ dataSourceKey: 'main',
102
+ filterByTk: 111,
103
+ associationName: 'users.posts',
104
+ sourceId: 42,
105
+ });
106
+
107
+ // 确认没有误用 ctx.view(settings-uid)的集合
108
+ expect(vars.record.collection).not.toBe('comments');
109
+ });
110
+
111
+ it('properties() provides a record factory node (lazy) with title', async () => {
112
+ const { engine, ctx } = makeCtx();
113
+ // 只要能通过 anchorView 推断到集合名和主键即可;集合详情在懒加载时再取
114
+ const anchorView: FlowView = {
115
+ type: 'embed',
116
+ inputArgs: {},
117
+ Header: null,
118
+ Footer: null,
119
+ close: () => void 0,
120
+ update: () => void 0,
121
+ navigation: { viewStack: [{ viewUid: 'base-page-uid' }, { viewUid: 'popup-uid', filterByTk: 1 }] } as any,
122
+ } as any;
123
+ const popupModel = {
124
+ getStepParams: vi.fn((_fk: string, sk: string) =>
125
+ sk === 'openView'
126
+ ? {
127
+ collectionName: 'tasks',
128
+ dataSourceKey: 'main',
129
+ }
130
+ : undefined,
131
+ ),
132
+ } as any;
133
+ vi.spyOn(engine as any, 'getModel').mockImplementation(() => popupModel);
134
+
135
+ const meta = (await createPopupMeta(ctx, anchorView)())!;
136
+ const props = typeof meta.properties === 'function' ? await (meta.properties as any)() : meta.properties || {};
137
+ // 断言存在 record 节点工厂,且有标题(懒加载,不触发集合访问)
138
+ expect(typeof props.record).toBe('function');
139
+ expect((props.record as any).title).toBe('Current popup record');
140
+ expect((props.record as any).hasChildren).toBe(true);
141
+ });
142
+
143
+ it('treats views with openerUids as popup (meta visible)', async () => {
144
+ const { ctx } = makeCtx();
145
+
146
+ // openerUids 作为路由栈缺失时的兜底标记:即使没有 navigation.viewStack,也应展示 ctx.popup 元信息
147
+ const anchorView: FlowView = {
148
+ type: 'dialog',
149
+ inputArgs: {
150
+ openerUids: ['opener-uid-1'],
151
+ viewUid: 'popup-uid',
152
+ dataSourceKey: 'main',
153
+ collectionName: 'posts',
154
+ filterByTk: 1,
155
+ },
156
+ Header: null,
157
+ Footer: null,
158
+ close: () => void 0,
159
+ update: () => void 0,
160
+ } as any;
161
+
162
+ const meta = (await createPopupMeta(ctx, anchorView)())!;
163
+ expect(typeof meta.hidden).toBe('function');
164
+ expect((meta.hidden as any)()).toBe(false);
165
+ expect(typeof meta.disabled).toBe('function');
166
+ expect((meta.disabled as any)()).toBe(false);
167
+
168
+ const vars = (await meta.buildVariablesParams!(ctx)) as any;
169
+ expect(vars).toBeTruthy();
170
+ expect(vars.record).toEqual({
171
+ collection: 'posts',
172
+ dataSourceKey: 'main',
173
+ filterByTk: 1,
174
+ associationName: undefined,
175
+ sourceId: undefined,
176
+ });
177
+ });
178
+
179
+ it('does not expose popup.record without filterByTk', async () => {
180
+ const { ctx } = makeCtx();
181
+
182
+ const anchorView: FlowView = {
183
+ type: 'dialog',
184
+ inputArgs: {
185
+ openerUids: ['opener-uid-1'],
186
+ viewUid: 'popup-uid',
187
+ dataSourceKey: 'main',
188
+ collectionName: 'posts',
189
+ // filterByTk 缺失:不应展示“当前弹窗记录”变量
190
+ },
191
+ Header: null,
192
+ Footer: null,
193
+ close: () => void 0,
194
+ update: () => void 0,
195
+ } as any;
196
+
197
+ ctx.defineProperty('view', { value: anchorView });
198
+
199
+ const meta = (await createPopupMeta(ctx, anchorView)())!;
200
+ const props = typeof meta.properties === 'function' ? await (meta.properties as any)() : meta.properties || {};
201
+ expect(props.record).toBeUndefined();
202
+ });
203
+ });
@@ -98,6 +98,9 @@ describe('FlowEngine', () => {
98
98
  return true;
99
99
  }
100
100
  async move() {}
101
+ async duplicate() {
102
+ return null;
103
+ }
101
104
  }
102
105
 
103
106
  let repo: MockFlowModelRepository;
@@ -241,6 +241,7 @@ describe('FlowContext properties and methods', () => {
241
241
  parentTitles: undefined,
242
242
  disabled: false,
243
243
  disabledReason: undefined,
244
+ hidden: false,
244
245
  children: undefined,
245
246
  },
246
247
  {
@@ -253,6 +254,7 @@ describe('FlowContext properties and methods', () => {
253
254
  parentTitles: undefined,
254
255
  disabled: false,
255
256
  disabledReason: undefined,
257
+ hidden: false,
256
258
  children: [
257
259
  {
258
260
  name: 'baz',
@@ -264,6 +266,7 @@ describe('FlowContext properties and methods', () => {
264
266
  parentTitles: ['Bar'],
265
267
  disabled: false,
266
268
  disabledReason: undefined,
269
+ hidden: false,
267
270
  children: undefined,
268
271
  },
269
272
  {
@@ -276,6 +279,7 @@ describe('FlowContext properties and methods', () => {
276
279
  parentTitles: ['Bar'],
277
280
  disabled: false,
278
281
  disabledReason: undefined,
282
+ hidden: false,
279
283
  children: undefined,
280
284
  },
281
285
  ],
@@ -316,6 +320,7 @@ describe('FlowContext properties and methods', () => {
316
320
  parentTitles: undefined,
317
321
  disabled: false,
318
322
  disabledReason: undefined,
323
+ hidden: false,
319
324
  children: undefined,
320
325
  },
321
326
  {
@@ -328,6 +333,7 @@ describe('FlowContext properties and methods', () => {
328
333
  parentTitles: undefined,
329
334
  disabled: false,
330
335
  disabledReason: undefined,
336
+ hidden: false,
331
337
  children: [
332
338
  {
333
339
  name: 'x',
@@ -339,6 +345,7 @@ describe('FlowContext properties and methods', () => {
339
345
  parentTitles: ['Local Bar'],
340
346
  disabled: false,
341
347
  disabledReason: undefined,
348
+ hidden: false,
342
349
  children: undefined,
343
350
  },
344
351
  ],
@@ -390,6 +397,7 @@ describe('FlowContext properties and methods', () => {
390
397
  parentTitles: undefined,
391
398
  disabled: false,
392
399
  disabledReason: undefined,
400
+ hidden: false,
393
401
  children: [
394
402
  {
395
403
  name: 'field1',
@@ -401,6 +409,7 @@ describe('FlowContext properties and methods', () => {
401
409
  parentTitles: ['Sync Property'],
402
410
  disabled: false,
403
411
  disabledReason: undefined,
412
+ hidden: false,
404
413
  children: undefined,
405
414
  },
406
415
  {
@@ -413,6 +422,7 @@ describe('FlowContext properties and methods', () => {
413
422
  parentTitles: ['Sync Property'],
414
423
  disabled: false,
415
424
  disabledReason: undefined,
425
+ hidden: false,
416
426
  children: undefined,
417
427
  },
418
428
  ],
@@ -436,6 +446,7 @@ describe('FlowContext properties and methods', () => {
436
446
  parentTitles: ['Async Property'],
437
447
  disabled: false,
438
448
  disabledReason: undefined,
449
+ hidden: false,
439
450
  children: undefined,
440
451
  },
441
452
  {
@@ -448,6 +459,7 @@ describe('FlowContext properties and methods', () => {
448
459
  parentTitles: ['Async Property'],
449
460
  disabled: false,
450
461
  disabledReason: undefined,
462
+ hidden: false,
451
463
  children: undefined,
452
464
  },
453
465
  ]);
@@ -747,6 +759,96 @@ describe('FlowEngine context', () => {
747
759
  expect(engine.context.appName).toBe('NocoBase');
748
760
  });
749
761
 
762
+ it('ctx.sql should resolve template variables from caller context in delegate chain', async () => {
763
+ const engine = new FlowEngine();
764
+ const request = vi.fn(async () => ({ data: { data: [] } }));
765
+ engine.context.defineProperty('api', {
766
+ value: { request },
767
+ });
768
+ engine.context.defineProperty('minId', {
769
+ get: () => 999,
770
+ cache: false,
771
+ });
772
+
773
+ const callerCtx = new FlowContext();
774
+ callerCtx.addDelegate(engine.context);
775
+ callerCtx.defineProperty('minId', {
776
+ get: () => 1,
777
+ cache: false,
778
+ });
779
+
780
+ await callerCtx.sql.run('SELECT * FROM users WHERE id > {{ctx.minId}}', { type: 'selectRows' });
781
+
782
+ expect(request).toHaveBeenCalledTimes(1);
783
+ const config = request.mock.calls[0]?.[0];
784
+ expect(config?.url).toBe('flowSql:run');
785
+ expect(config?.data.bind.__var1).toBe(1);
786
+ });
787
+
788
+ it('ctx.sql should not share repository instance between different caller contexts', async () => {
789
+ const engine = new FlowEngine();
790
+ const request = vi.fn(async () => ({ data: { data: [] } }));
791
+ engine.context.defineProperty('api', {
792
+ value: { request },
793
+ });
794
+
795
+ const caller1 = new FlowContext();
796
+ caller1.addDelegate(engine.context);
797
+ caller1.defineProperty('minId', {
798
+ get: () => 1,
799
+ cache: false,
800
+ });
801
+
802
+ const caller2 = new FlowContext();
803
+ caller2.addDelegate(engine.context);
804
+ caller2.defineProperty('minId', {
805
+ get: () => 2,
806
+ cache: false,
807
+ });
808
+
809
+ expect(caller1.sql).not.toBe(caller2.sql);
810
+
811
+ await caller1.sql.run('SELECT * FROM users WHERE id > {{ctx.minId}}', { type: 'selectRows' });
812
+ await caller2.sql.run('SELECT * FROM users WHERE id > {{ctx.minId}}', { type: 'selectRows' });
813
+
814
+ expect(request).toHaveBeenCalledTimes(2);
815
+ const config1 = request.mock.calls[0]?.[0];
816
+ const config2 = request.mock.calls[1]?.[0];
817
+ expect(config1?.data.bind.__var1).toBe(1);
818
+ expect(config2?.data.bind.__var1).toBe(2);
819
+ });
820
+
821
+ it('engine.context.sql should keep working when accessed directly', async () => {
822
+ const engine = new FlowEngine();
823
+ const request = vi.fn(async () => ({ data: { data: [] } }));
824
+ engine.context.defineProperty('api', {
825
+ value: { request },
826
+ });
827
+ engine.context.defineProperty('minId', {
828
+ get: () => 3,
829
+ cache: false,
830
+ });
831
+
832
+ await engine.context.sql.run('SELECT * FROM users WHERE id > {{ctx.minId}}', { type: 'selectRows' });
833
+
834
+ expect(request).toHaveBeenCalledTimes(1);
835
+ const config = request.mock.calls[0]?.[0];
836
+ expect(config?.url).toBe('flowSql:run');
837
+ expect(config?.data.bind.__var1).toBe(3);
838
+ });
839
+
840
+ it('engine.context.getVar should resolve variable by path', async () => {
841
+ const engine = new FlowEngine();
842
+ engine.context.defineProperty('foo', { value: { bar: 1 } });
843
+
844
+ const v1 = await (engine.context as any).getVar('ctx.foo.bar');
845
+ expect(v1).toBe(1);
846
+
847
+ await expect((engine.context as any).getVar('{{ ctx.foo.bar }}')).rejects.toThrow();
848
+
849
+ await expect((engine.context as any).getVar('foo.bar')).rejects.toThrow();
850
+ });
851
+
750
852
  it('engine.context.runAction should resolve action from engine.getAction', async () => {
751
853
  const engine = new FlowEngine();
752
854
 
@@ -997,6 +1099,7 @@ describe('FlowContext delayed meta loading', () => {
997
1099
  parentTitles: ['Delayed User'],
998
1100
  disabled: false,
999
1101
  disabledReason: undefined,
1102
+ hidden: false,
1000
1103
  children: undefined,
1001
1104
  });
1002
1105
  expect(children[1]).toEqual({
@@ -1009,6 +1112,7 @@ describe('FlowContext delayed meta loading', () => {
1009
1112
  parentTitles: ['Delayed User'],
1010
1113
  disabled: false,
1011
1114
  disabledReason: undefined,
1115
+ hidden: false,
1012
1116
  children: undefined,
1013
1117
  });
1014
1118
  });
@@ -1282,6 +1386,58 @@ describe('FlowContext resolveOnServer selective server resolution', () => {
1282
1386
  // server was called
1283
1387
  expect(api.request).toHaveBeenCalledTimes(1);
1284
1388
  });
1389
+
1390
+ it('skips server call when all vars require contextParams but none provided', async () => {
1391
+ const engine = new FlowEngine();
1392
+ const api = { request: vi.fn() } as any;
1393
+ engine.context.defineProperty('api', { value: api });
1394
+
1395
+ engine.context.defineProperty('foo', {
1396
+ value: { a: 1 },
1397
+ resolveOnServer: true,
1398
+ serverOnlyWhenContextParams: true,
1399
+ meta: async () => ({
1400
+ type: 'object',
1401
+ title: 'Foo',
1402
+ // no buildVariablesParams -> empty contextParams
1403
+ }),
1404
+ });
1405
+
1406
+ const tpl = { a: '{{ ctx.foo.a }}' } as any;
1407
+ const out = await (engine.context as any).resolveJsonTemplate(tpl);
1408
+ expect(out).toEqual({ a: 1 });
1409
+ // skipped server, because all server vars (only foo) require contextParams but none present
1410
+ expect(api.request).not.toHaveBeenCalled();
1411
+ });
1412
+
1413
+ it('still calls server when at least one var has contextParams (even if others require contextParams but none)', async () => {
1414
+ const engine = new FlowEngine();
1415
+ const api = { request: vi.fn(async () => ({ data: { ok: true } })) } as any;
1416
+ engine.context.defineProperty('api', { value: api });
1417
+
1418
+ // foo: requires contextParams but none will be provided
1419
+ engine.context.defineProperty('foo', {
1420
+ value: { a: 1 },
1421
+ resolveOnServer: true,
1422
+ serverOnlyWhenContextParams: true,
1423
+ meta: async () => ({ type: 'object', title: 'Foo' }),
1424
+ });
1425
+
1426
+ // user: provides contextParams via builder
1427
+ engine.context.defineProperty('user', {
1428
+ value: { id: 9 },
1429
+ resolveOnServer: true,
1430
+ meta: async () => ({
1431
+ type: 'object',
1432
+ title: 'User',
1433
+ buildVariablesParams: () => ({ collection: 'users', filterByTk: 9, dataSourceKey: 'main' }),
1434
+ }),
1435
+ });
1436
+
1437
+ const tpl = { a: '{{ ctx.foo.a }}', u: '{{ ctx.user.id }}' } as any;
1438
+ await (engine.context as any).resolveJsonTemplate(tpl);
1439
+ expect(api.request).toHaveBeenCalledTimes(1);
1440
+ });
1285
1441
  });
1286
1442
 
1287
1443
  describe('FlowContext.getPropertyOptions()', () => {
@@ -1369,6 +1525,7 @@ describe('FlowContext getPropertyMetaTree with value parameter', () => {
1369
1525
  parentTitles: undefined,
1370
1526
  disabled: false,
1371
1527
  disabledReason: undefined,
1528
+ hidden: false,
1372
1529
  children: undefined,
1373
1530
  });
1374
1531
  expect(subTree[1]).toEqual({
@@ -1381,6 +1538,7 @@ describe('FlowContext getPropertyMetaTree with value parameter', () => {
1381
1538
  parentTitles: undefined,
1382
1539
  disabled: false,
1383
1540
  disabledReason: undefined,
1541
+ hidden: false,
1384
1542
  children: undefined,
1385
1543
  });
1386
1544
  });
@@ -1566,6 +1724,7 @@ describe('FlowContext getPropertyMetaTree with value parameter', () => {
1566
1724
  parentTitles: ['User', 'User Profile'],
1567
1725
  disabled: false,
1568
1726
  disabledReason: undefined,
1727
+ hidden: false,
1569
1728
  children: undefined,
1570
1729
  });
1571
1730
  expect(profileSubTree[1]).toEqual({
@@ -1578,6 +1737,7 @@ describe('FlowContext getPropertyMetaTree with value parameter', () => {
1578
1737
  parentTitles: ['User', 'User Profile'],
1579
1738
  disabled: false,
1580
1739
  disabledReason: undefined,
1740
+ hidden: false,
1581
1741
  children: undefined,
1582
1742
  });
1583
1743
  });