@nocobase/flow-engine 2.0.0-alpha.10
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.
- package/LICENSE +661 -0
- package/README.md +30 -0
- package/lib/ContextPathProxy.d.ts +17 -0
- package/lib/ContextPathProxy.js +65 -0
- package/lib/ElementProxy.d.ts +17 -0
- package/lib/ElementProxy.js +93 -0
- package/lib/FlowContextProvider.d.ts +24 -0
- package/lib/FlowContextProvider.js +82 -0
- package/lib/FlowDefinition.d.ts +423 -0
- package/lib/FlowDefinition.js +257 -0
- package/lib/JSRunner.d.ts +32 -0
- package/lib/JSRunner.js +95 -0
- package/lib/ReactView.d.ts +20 -0
- package/lib/ReactView.js +120 -0
- package/lib/ViewScopedFlowEngine.d.ts +23 -0
- package/lib/ViewScopedFlowEngine.js +81 -0
- package/lib/acl/Acl.d.ts +31 -0
- package/lib/acl/Acl.js +115 -0
- package/lib/action-registry/BaseActionRegistry.d.ts +23 -0
- package/lib/action-registry/BaseActionRegistry.js +57 -0
- package/lib/action-registry/EngineActionRegistry.d.ts +20 -0
- package/lib/action-registry/EngineActionRegistry.js +47 -0
- package/lib/action-registry/ModelActionRegistry.d.ts +34 -0
- package/lib/action-registry/ModelActionRegistry.js +79 -0
- package/lib/components/DynamicFlowsEditor.d.ts +17 -0
- package/lib/components/DynamicFlowsEditor.js +49 -0
- package/lib/components/FieldModelRenderer.d.ts +10 -0
- package/lib/components/FieldModelRenderer.js +100 -0
- package/lib/components/FlowContextSelector.d.ts +11 -0
- package/lib/components/FlowContextSelector.js +221 -0
- package/lib/components/FlowErrorFallback.d.ts +25 -0
- package/lib/components/FlowErrorFallback.js +264 -0
- package/lib/components/FlowModelRenderer.d.ts +61 -0
- package/lib/components/FlowModelRenderer.js +214 -0
- package/lib/components/FormItem.d.ts +18 -0
- package/lib/components/FormItem.js +151 -0
- package/lib/components/common/FlowSettingsButton.d.ts +11 -0
- package/lib/components/common/FlowSettingsButton.js +66 -0
- package/lib/components/common/index.d.ts +9 -0
- package/lib/components/common/index.js +30 -0
- package/lib/components/common/withFlowDesignMode.d.ts +26 -0
- package/lib/components/common/withFlowDesignMode.js +61 -0
- package/lib/components/dnd/findModelUidPosition.d.ts +13 -0
- package/lib/components/dnd/findModelUidPosition.js +50 -0
- package/lib/components/dnd/gridDragPlanner.d.ts +130 -0
- package/lib/components/dnd/gridDragPlanner.js +497 -0
- package/lib/components/dnd/index.d.ts +24 -0
- package/lib/components/dnd/index.js +164 -0
- package/lib/components/index.d.ts +18 -0
- package/lib/components/index.js +48 -0
- package/lib/components/settings/independents/dropdown/FlowsDropdownButton.d.ts +46 -0
- package/lib/components/settings/independents/dropdown/FlowsDropdownButton.js +225 -0
- package/lib/components/settings/independents/dropdown/index.d.ts +9 -0
- package/lib/components/settings/independents/dropdown/index.js +30 -0
- package/lib/components/settings/independents/index.d.ts +1 -0
- package/lib/components/settings/independents/index.js +30 -0
- package/lib/components/settings/index.d.ts +10 -0
- package/lib/components/settings/index.js +32 -0
- package/lib/components/settings/wrappers/contextual/DefaultSettingsIcon.d.ts +24 -0
- package/lib/components/settings/wrappers/contextual/DefaultSettingsIcon.js +501 -0
- package/lib/components/settings/wrappers/contextual/FlowsContextMenu.d.ts +45 -0
- package/lib/components/settings/wrappers/contextual/FlowsContextMenu.js +231 -0
- package/lib/components/settings/wrappers/contextual/FlowsFloatContextMenu.d.ts +111 -0
- package/lib/components/settings/wrappers/contextual/FlowsFloatContextMenu.js +484 -0
- package/lib/components/settings/wrappers/contextual/StepRequiredSettingsDialog.d.ts +26 -0
- package/lib/components/settings/wrappers/contextual/StepRequiredSettingsDialog.js +342 -0
- package/lib/components/settings/wrappers/contextual/StepSettings.d.ts +23 -0
- package/lib/components/settings/wrappers/contextual/StepSettings.js +110 -0
- package/lib/components/settings/wrappers/contextual/StepSettingsDialog.d.ts +20 -0
- package/lib/components/settings/wrappers/contextual/StepSettingsDialog.js +212 -0
- package/lib/components/settings/wrappers/contextual/StepSettingsDrawer.d.ts +20 -0
- package/lib/components/settings/wrappers/contextual/StepSettingsDrawer.js +47 -0
- package/lib/components/settings/wrappers/contextual/index.d.ts +14 -0
- package/lib/components/settings/wrappers/contextual/index.js +40 -0
- package/lib/components/settings/wrappers/embedded/FlowSettings.d.ts +33 -0
- package/lib/components/settings/wrappers/embedded/FlowSettings.js +207 -0
- package/lib/components/settings/wrappers/embedded/FlowsSettings.d.ts +41 -0
- package/lib/components/settings/wrappers/embedded/FlowsSettings.js +84 -0
- package/lib/components/settings/wrappers/embedded/FlowsSettingsContent.d.ts +16 -0
- package/lib/components/settings/wrappers/embedded/FlowsSettingsContent.js +88 -0
- package/lib/components/settings/wrappers/embedded/index.d.ts +10 -0
- package/lib/components/settings/wrappers/embedded/index.js +32 -0
- package/lib/components/settings/wrappers/index.d.ts +2 -0
- package/lib/components/settings/wrappers/index.js +32 -0
- package/lib/components/subModel/AddSubModelButton.d.ts +62 -0
- package/lib/components/subModel/AddSubModelButton.js +415 -0
- package/lib/components/subModel/LazyDropdown.d.ts +55 -0
- package/lib/components/subModel/LazyDropdown.js +524 -0
- package/lib/components/subModel/index.d.ts +10 -0
- package/lib/components/subModel/index.js +32 -0
- package/lib/components/subModel/utils.d.ts +34 -0
- package/lib/components/subModel/utils.js +287 -0
- package/lib/components/variables/InlineVariableTag.d.ts +21 -0
- package/lib/components/variables/InlineVariableTag.js +123 -0
- package/lib/components/variables/SlateVariableEditor.d.ts +46 -0
- package/lib/components/variables/SlateVariableEditor.js +302 -0
- package/lib/components/variables/VariableInput.d.ts +11 -0
- package/lib/components/variables/VariableInput.js +334 -0
- package/lib/components/variables/VariableTag.d.ts +11 -0
- package/lib/components/variables/VariableTag.js +189 -0
- package/lib/components/variables/VariableTrigger.d.ts +20 -0
- package/lib/components/variables/VariableTrigger.js +136 -0
- package/lib/components/variables/index.d.ts +15 -0
- package/lib/components/variables/index.js +53 -0
- package/lib/components/variables/types.d.ts +93 -0
- package/lib/components/variables/types.js +24 -0
- package/lib/components/variables/useResolvedMetaTree.d.ts +19 -0
- package/lib/components/variables/useResolvedMetaTree.js +91 -0
- package/lib/components/variables/utils.d.ts +22 -0
- package/lib/components/variables/utils.js +177 -0
- package/lib/data-source/index.d.ts +180 -0
- package/lib/data-source/index.js +737 -0
- package/lib/data-source/jioToJoiSchema.d.ts +19 -0
- package/lib/data-source/jioToJoiSchema.js +114 -0
- package/lib/data-source/sortCollectionsByInherits.d.ts +10 -0
- package/lib/data-source/sortCollectionsByInherits.js +71 -0
- package/lib/decorators/index.d.ts +9 -0
- package/lib/decorators/index.js +36 -0
- package/lib/decorators/largeField.d.ts +9 -0
- package/lib/decorators/largeField.js +42 -0
- package/lib/emitter.d.ts +16 -0
- package/lib/emitter.js +58 -0
- package/lib/event-registry/BaseEventRegistry.d.ts +22 -0
- package/lib/event-registry/BaseEventRegistry.js +57 -0
- package/lib/event-registry/EngineEventRegistry.d.ts +19 -0
- package/lib/event-registry/EngineEventRegistry.js +47 -0
- package/lib/event-registry/ModelEventRegistry.d.ts +33 -0
- package/lib/event-registry/ModelEventRegistry.js +79 -0
- package/lib/executor/FlowExecutor.d.ts +25 -0
- package/lib/executor/FlowExecutor.js +290 -0
- package/lib/flow-registry/BaseFlowRegistry.d.ts +46 -0
- package/lib/flow-registry/BaseFlowRegistry.js +86 -0
- package/lib/flow-registry/GlobalFlowRegistry.d.ts +22 -0
- package/lib/flow-registry/GlobalFlowRegistry.js +95 -0
- package/lib/flow-registry/InstanceFlowRegistry.d.ts +21 -0
- package/lib/flow-registry/InstanceFlowRegistry.js +59 -0
- package/lib/flow-registry/index.d.ts +11 -0
- package/lib/flow-registry/index.js +34 -0
- package/lib/flowContext.d.ts +243 -0
- package/lib/flowContext.js +1337 -0
- package/lib/flowEngine.d.ts +340 -0
- package/lib/flowEngine.js +781 -0
- package/lib/flowI18n.d.ts +46 -0
- package/lib/flowI18n.js +117 -0
- package/lib/flowSettings.d.ts +266 -0
- package/lib/flowSettings.js +850 -0
- package/lib/hooks/index.d.ts +14 -0
- package/lib/hooks/index.js +40 -0
- package/lib/hooks/useApplyAutoFlows.d.ts +21 -0
- package/lib/hooks/useApplyAutoFlows.js +63 -0
- package/lib/hooks/useFlowModel.d.ts +29 -0
- package/lib/hooks/useFlowModel.js +72 -0
- package/lib/hooks/useFlowModelById.d.ts +11 -0
- package/lib/hooks/useFlowModelById.js +61 -0
- package/lib/hooks/useFlowSettingsContext.d.ts +20 -0
- package/lib/hooks/useFlowSettingsContext.js +61 -0
- package/lib/hooks/useFlowStep.d.ts +17 -0
- package/lib/hooks/useFlowStep.js +56 -0
- package/lib/hooks/useNiceDropdownMaxHeight.d.ts +13 -0
- package/lib/hooks/useNiceDropdownMaxHeight.js +52 -0
- package/lib/index.d.ts +30 -0
- package/lib/index.js +93 -0
- package/lib/locale/en-US.json +61 -0
- package/lib/locale/index.d.ts +141 -0
- package/lib/locale/index.js +70 -0
- package/lib/locale/zh-CN.json +61 -0
- package/lib/models/CollectionFieldModel.d.ts +52 -0
- package/lib/models/CollectionFieldModel.js +280 -0
- package/lib/models/DisplayItemModel.d.ts +12 -0
- package/lib/models/DisplayItemModel.js +41 -0
- package/lib/models/EditableItemModel.d.ts +12 -0
- package/lib/models/EditableItemModel.js +41 -0
- package/lib/models/FilterableItemModel.d.ts +12 -0
- package/lib/models/FilterableItemModel.js +41 -0
- package/lib/models/flowModel.d.ts +342 -0
- package/lib/models/flowModel.js +1154 -0
- package/lib/models/forkFlowModel.d.ts +83 -0
- package/lib/models/forkFlowModel.js +280 -0
- package/lib/models/index.d.ts +14 -0
- package/lib/models/index.js +40 -0
- package/lib/provider.d.ts +22 -0
- package/lib/provider.js +115 -0
- package/lib/resources/apiResource.d.ts +34 -0
- package/lib/resources/apiResource.js +153 -0
- package/lib/resources/baseRecordResource.d.ts +61 -0
- package/lib/resources/baseRecordResource.js +264 -0
- package/lib/resources/filterItem.d.ts +33 -0
- package/lib/resources/filterItem.js +93 -0
- package/lib/resources/flowResource.d.ts +45 -0
- package/lib/resources/flowResource.js +146 -0
- package/lib/resources/index.d.ts +15 -0
- package/lib/resources/index.js +42 -0
- package/lib/resources/multiRecordResource.d.ts +53 -0
- package/lib/resources/multiRecordResource.js +230 -0
- package/lib/resources/singleRecordResource.d.ts +23 -0
- package/lib/resources/singleRecordResource.js +111 -0
- package/lib/resources/sqlResource.d.ts +73 -0
- package/lib/resources/sqlResource.js +294 -0
- package/lib/runjs-context/contexts/FormJSFieldItemRunJSContext.d.ts +11 -0
- package/lib/runjs-context/contexts/FormJSFieldItemRunJSContext.js +73 -0
- package/lib/runjs-context/contexts/JSBlockRunJSContext.d.ts +11 -0
- package/lib/runjs-context/contexts/JSBlockRunJSContext.js +91 -0
- package/lib/runjs-context/contexts/JSCollectionActionRunJSContext.d.ts +11 -0
- package/lib/runjs-context/contexts/JSCollectionActionRunJSContext.js +58 -0
- package/lib/runjs-context/contexts/JSColumnRunJSContext.d.ts +15 -0
- package/lib/runjs-context/contexts/JSColumnRunJSContext.js +78 -0
- package/lib/runjs-context/contexts/JSFieldRunJSContext.d.ts +11 -0
- package/lib/runjs-context/contexts/JSFieldRunJSContext.js +74 -0
- package/lib/runjs-context/contexts/JSItemRunJSContext.d.ts +11 -0
- package/lib/runjs-context/contexts/JSItemRunJSContext.js +70 -0
- package/lib/runjs-context/contexts/JSRecordActionRunJSContext.d.ts +11 -0
- package/lib/runjs-context/contexts/JSRecordActionRunJSContext.js +60 -0
- package/lib/runjs-context/contexts/base.d.ts +9 -0
- package/lib/runjs-context/contexts/base.js +169 -0
- package/lib/runjs-context/helpers.d.ts +20 -0
- package/lib/runjs-context/helpers.js +88 -0
- package/lib/runjs-context/registry.d.ts +20 -0
- package/lib/runjs-context/registry.js +61 -0
- package/lib/runjs-context/setup.d.ts +9 -0
- package/lib/runjs-context/setup.js +82 -0
- package/lib/runjs-context/snippets/global/api-request.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/global/api-request.snippet.js +57 -0
- package/lib/runjs-context/snippets/global/import-esm.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/global/import-esm.snippet.js +58 -0
- package/lib/runjs-context/snippets/global/message-error.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/global/message-error.snippet.js +47 -0
- package/lib/runjs-context/snippets/global/message-success.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/global/message-success.snippet.js +47 -0
- package/lib/runjs-context/snippets/global/notification-open.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/global/notification-open.snippet.js +50 -0
- package/lib/runjs-context/snippets/global/open-view-dialog.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/global/open-view-dialog.snippet.js +54 -0
- package/lib/runjs-context/snippets/global/open-view-drawer.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/global/open-view-drawer.snippet.js +54 -0
- package/lib/runjs-context/snippets/global/query-selector.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/global/query-selector.snippet.js +53 -0
- package/lib/runjs-context/snippets/global/require-amd.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/global/require-amd.snippet.js +49 -0
- package/lib/runjs-context/snippets/global/window-open.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/global/window-open.snippet.js +48 -0
- package/lib/runjs-context/snippets/index.d.ts +22 -0
- package/lib/runjs-context/snippets/index.js +213 -0
- package/lib/runjs-context/snippets/scene/block/add-event-listener.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/block/add-event-listener.snippet.js +55 -0
- package/lib/runjs-context/snippets/scene/block/api-fetch-render-list.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/block/api-fetch-render-list.snippet.js +64 -0
- package/lib/runjs-context/snippets/scene/block/chartjs-bar.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/block/chartjs-bar.snippet.js +99 -0
- package/lib/runjs-context/snippets/scene/block/echarts-init.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/block/echarts-init.snippet.js +63 -0
- package/lib/runjs-context/snippets/scene/block/render-button-handler.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/block/render-button-handler.snippet.js +52 -0
- package/lib/runjs-context/snippets/scene/block/render-iframe.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/block/render-iframe.snippet.js +57 -0
- package/lib/runjs-context/snippets/scene/block/render-info-card.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/block/render-info-card.snippet.js +72 -0
- package/lib/runjs-context/snippets/scene/block/render-react.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/block/render-react.snippet.js +57 -0
- package/lib/runjs-context/snippets/scene/block/render-statistics.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/block/render-statistics.snippet.js +100 -0
- package/lib/runjs-context/snippets/scene/block/render-timeline.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/block/render-timeline.snippet.js +85 -0
- package/lib/runjs-context/snippets/scene/block/resource-example.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/block/resource-example.snippet.js +60 -0
- package/lib/runjs-context/snippets/scene/block/three-users-orbit.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/block/three-users-orbit.snippet.js +283 -0
- package/lib/runjs-context/snippets/scene/block/vue-component.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/block/vue-component.snippet.js +124 -0
- package/lib/runjs-context/snippets/scene/detail/color-by-value.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/detail/color-by-value.snippet.js +52 -0
- package/lib/runjs-context/snippets/scene/detail/copy-to-clipboard.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/detail/copy-to-clipboard.snippet.js +64 -0
- package/lib/runjs-context/snippets/scene/detail/format-number.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/detail/format-number.snippet.js +51 -0
- package/lib/runjs-context/snippets/scene/detail/innerHTML-value.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/detail/innerHTML-value.snippet.js +50 -0
- package/lib/runjs-context/snippets/scene/detail/percentage-bar.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/detail/percentage-bar.snippet.js +82 -0
- package/lib/runjs-context/snippets/scene/detail/relative-time.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/detail/relative-time.snippet.js +80 -0
- package/lib/runjs-context/snippets/scene/detail/status-tag.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/detail/status-tag.snippet.js +74 -0
- package/lib/runjs-context/snippets/scene/form/calculate-total.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/form/calculate-total.snippet.js +63 -0
- package/lib/runjs-context/snippets/scene/form/cascade-select.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/form/cascade-select.snippet.js +81 -0
- package/lib/runjs-context/snippets/scene/form/conditional-required.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/form/conditional-required.snippet.js +64 -0
- package/lib/runjs-context/snippets/scene/form/copy-field-values.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/form/copy-field-values.snippet.js +74 -0
- package/lib/runjs-context/snippets/scene/form/render-basic.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/form/render-basic.snippet.js +53 -0
- package/lib/runjs-context/snippets/scene/form/set-disabled.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/form/set-disabled.snippet.js +69 -0
- package/lib/runjs-context/snippets/scene/form/set-field-value.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/form/set-field-value.snippet.js +68 -0
- package/lib/runjs-context/snippets/scene/form/set-required.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/form/set-required.snippet.js +69 -0
- package/lib/runjs-context/snippets/scene/form/toggle-multiple-fields.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/form/toggle-multiple-fields.snippet.js +67 -0
- package/lib/runjs-context/snippets/scene/form/toggle-visible.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/form/toggle-visible.snippet.js +69 -0
- package/lib/runjs-context/snippets/scene/table/cell-open-dialog.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/table/cell-open-dialog.snippet.js +64 -0
- package/lib/runjs-context/snippets/scene/table/collection-selected-count.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/table/collection-selected-count.snippet.js +53 -0
- package/lib/runjs-context/snippets/scene/table/concat-fields.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/table/concat-fields.snippet.js +79 -0
- package/lib/runjs-context/snippets/scene/table/destroy-selected.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/table/destroy-selected.snippet.js +55 -0
- package/lib/runjs-context/snippets/scene/table/export-selected-json.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/table/export-selected-json.snippet.js +64 -0
- package/lib/runjs-context/snippets/scene/table/iterate-selected-rows.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/table/iterate-selected-rows.snippet.js +52 -0
- package/lib/runjs-context/snippets/types.d.ts +24 -0
- package/lib/runjs-context/snippets/types.js +24 -0
- package/lib/types.d.ts +407 -0
- package/lib/types.js +43 -0
- package/lib/utils/autoFlowError.d.ts +16 -0
- package/lib/utils/autoFlowError.js +53 -0
- package/lib/utils/constants.d.ts +29 -0
- package/lib/utils/constants.js +77 -0
- package/lib/utils/context.d.ts +40 -0
- package/lib/utils/context.js +63 -0
- package/lib/utils/createCollectionContextMeta.d.ts +11 -0
- package/lib/utils/createCollectionContextMeta.js +117 -0
- package/lib/utils/exceptions.d.ts +22 -0
- package/lib/utils/exceptions.js +62 -0
- package/lib/utils/flow-definitions.d.ts +11 -0
- package/lib/utils/flow-definitions.js +40 -0
- package/lib/utils/index.d.ts +22 -0
- package/lib/utils/index.js +115 -0
- package/lib/utils/inheritance.d.ts +16 -0
- package/lib/utils/inheritance.js +53 -0
- package/lib/utils/params-resolvers.d.ts +51 -0
- package/lib/utils/params-resolvers.js +309 -0
- package/lib/utils/parsePathnameToViewParams.d.ts +34 -0
- package/lib/utils/parsePathnameToViewParams.js +84 -0
- package/lib/utils/safeGlobals.d.ts +16 -0
- package/lib/utils/safeGlobals.js +179 -0
- package/lib/utils/schema-utils.d.ts +40 -0
- package/lib/utils/schema-utils.js +161 -0
- package/lib/utils/serverContextParams.d.ts +29 -0
- package/lib/utils/serverContextParams.js +106 -0
- package/lib/utils/setupRuntimeContextSteps.d.ts +19 -0
- package/lib/utils/setupRuntimeContextSteps.js +88 -0
- package/lib/utils/translation.d.ts +18 -0
- package/lib/utils/translation.js +58 -0
- package/lib/utils/variablesParams.d.ts +52 -0
- package/lib/utils/variablesParams.js +161 -0
- package/lib/views/DialogComponent.d.ts +22 -0
- package/lib/views/DialogComponent.js +98 -0
- package/lib/views/DrawerComponent.d.ts +11 -0
- package/lib/views/DrawerComponent.js +101 -0
- package/lib/views/FlowView.d.ts +76 -0
- package/lib/views/FlowView.js +81 -0
- package/lib/views/PageComponent.d.ts +10 -0
- package/lib/views/PageComponent.js +168 -0
- package/lib/views/ViewNavigation.d.ts +45 -0
- package/lib/views/ViewNavigation.js +97 -0
- package/lib/views/createViewMeta.d.ts +44 -0
- package/lib/views/createViewMeta.js +377 -0
- package/lib/views/index.d.ts +14 -0
- package/lib/views/index.js +51 -0
- package/lib/views/useDialog.d.ts +32 -0
- package/lib/views/useDialog.js +200 -0
- package/lib/views/useDrawer.d.ts +33 -0
- package/lib/views/useDrawer.js +220 -0
- package/lib/views/usePage.d.ts +32 -0
- package/lib/views/usePage.js +194 -0
- package/lib/views/usePatchElement.d.ts +10 -0
- package/lib/views/usePatchElement.js +54 -0
- package/lib/views/usePopover.d.ts +17 -0
- package/lib/views/usePopover.js +159 -0
- package/package.json +37 -0
- package/src/ContextPathProxy.ts +45 -0
- package/src/ElementProxy.ts +69 -0
- package/src/FlowContextProvider.tsx +42 -0
- package/src/FlowDefinition.ts +275 -0
- package/src/JSRunner.ts +84 -0
- package/src/ReactView.tsx +104 -0
- package/src/ViewScopedFlowEngine.ts +75 -0
- package/src/__tests__/ElementProxy.test.ts +51 -0
- package/src/__tests__/JSRunner.test.ts +92 -0
- package/src/__tests__/ReactView.test.tsx +63 -0
- package/src/__tests__/context-path-proxy.test.ts +35 -0
- package/src/__tests__/flow-engine.test.ts +189 -0
- package/src/__tests__/flowContext.test.ts +2012 -0
- package/src/__tests__/flowContextCreateJSRunner.test.ts +163 -0
- package/src/__tests__/flowEngine.saveModel.test.ts +171 -0
- package/src/__tests__/flowI18n.test.ts +28 -0
- package/src/__tests__/flowModel.getFlows.test.ts +61 -0
- package/src/__tests__/flowModel.openView.navigation.test.ts +78 -0
- package/src/__tests__/flowRunJSContextDefine.test.ts +508 -0
- package/src/__tests__/flowRuntimeContext.test.ts +187 -0
- package/src/__tests__/flowSettings.open.test.tsx +1920 -0
- package/src/__tests__/flowSettings.test.ts +566 -0
- package/src/__tests__/globalFlowRegistry.test.ts +77 -0
- package/src/__tests__/isFieldInterfaceMatch.test.ts +51 -0
- package/src/__tests__/metaTreeNodeCache.test.ts +234 -0
- package/src/__tests__/path-aggregation.test.ts +85 -0
- package/src/__tests__/provider.test.tsx +28 -0
- package/src/__tests__/renderHiddenInConfig.test.tsx +91 -0
- package/src/__tests__/runjsContext.test.ts +241 -0
- package/src/__tests__/runjsContextImplementations.test.ts +217 -0
- package/src/__tests__/runjsContextRuntime.test.ts +269 -0
- package/src/__tests__/runjsEdgeCases.test.ts +281 -0
- package/src/__tests__/runjsLocales.test.ts +36 -0
- package/src/__tests__/runjsRuntimeFeatures.test.ts +449 -0
- package/src/__tests__/runjsSnippets.test.ts +140 -0
- package/src/__tests__/viewScopedFlowEngine.test.ts +212 -0
- package/src/acl/Acl.tsx +109 -0
- package/src/acl/__tests__/Acl.test.tsx +72 -0
- package/src/action-registry/BaseActionRegistry.ts +46 -0
- package/src/action-registry/EngineActionRegistry.ts +32 -0
- package/src/action-registry/ModelActionRegistry.ts +75 -0
- package/src/action-registry/__tests__/engineActionRegistry.test.ts +43 -0
- package/src/action-registry/__tests__/modelActionRegistry.test.ts +107 -0
- package/src/components/DynamicFlowsEditor.tsx +318 -0
- package/src/components/FieldModelRenderer.tsx +68 -0
- package/src/components/FlowContextSelector.tsx +255 -0
- package/src/components/FlowErrorFallback.tsx +316 -0
- package/src/components/FlowModelRenderer.tsx +362 -0
- package/src/components/FormItem.tsx +136 -0
- package/src/components/__tests__/flow-model-render-error-fallback.test.tsx +226 -0
- package/src/components/__tests__/gridDragPlanner.test.ts +494 -0
- package/src/components/common/FlowSettingsButton.tsx +30 -0
- package/src/components/common/index.ts +10 -0
- package/src/components/common/withFlowDesignMode.tsx +49 -0
- package/src/components/dnd/README.md +149 -0
- package/src/components/dnd/findModelUidPosition.ts +26 -0
- package/src/components/dnd/gridDragPlanner.ts +659 -0
- package/src/components/dnd/index.tsx +128 -0
- package/src/components/index.ts +20 -0
- package/src/components/settings/independents/dropdown/FlowsDropdownButton.tsx +279 -0
- package/src/components/settings/independents/dropdown/index.ts +10 -0
- package/src/components/settings/independents/index.ts +2 -0
- package/src/components/settings/index.ts +11 -0
- package/src/components/settings/wrappers/contextual/DefaultSettingsIcon.tsx +617 -0
- package/src/components/settings/wrappers/contextual/FlowsContextMenu.tsx +292 -0
- package/src/components/settings/wrappers/contextual/FlowsFloatContextMenu.tsx +655 -0
- package/src/components/settings/wrappers/contextual/StepRequiredSettingsDialog.tsx +446 -0
- package/src/components/settings/wrappers/contextual/StepSettings.tsx +109 -0
- package/src/components/settings/wrappers/contextual/StepSettingsDialog.tsx +223 -0
- package/src/components/settings/wrappers/contextual/StepSettingsDrawer.tsx +32 -0
- package/src/components/settings/wrappers/contextual/index.ts +15 -0
- package/src/components/settings/wrappers/embedded/FlowSettings.tsx +258 -0
- package/src/components/settings/wrappers/embedded/FlowsSettings.tsx +111 -0
- package/src/components/settings/wrappers/embedded/FlowsSettingsContent.tsx +96 -0
- package/src/components/settings/wrappers/embedded/index.ts +11 -0
- package/src/components/settings/wrappers/index.ts +5 -0
- package/src/components/subModel/AddSubModelButton.tsx +575 -0
- package/src/components/subModel/LazyDropdown.tsx +714 -0
- package/src/components/subModel/__tests__/AddSubModelButton.test.tsx +1185 -0
- package/src/components/subModel/__tests__/buildWrapperFieldChildren.test.ts +192 -0
- package/src/components/subModel/__tests__/utils.test.ts +425 -0
- package/src/components/subModel/index.ts +12 -0
- package/src/components/subModel/utils.ts +278 -0
- package/src/components/variables/InlineVariableTag.tsx +97 -0
- package/src/components/variables/SlateVariableEditor.tsx +384 -0
- package/src/components/variables/VariableInput.tsx +360 -0
- package/src/components/variables/VariableTag.tsx +175 -0
- package/src/components/variables/VariableTrigger.tsx +116 -0
- package/src/components/variables/__tests__/FlowContextSelector.test.tsx +553 -0
- package/src/components/variables/__tests__/VariableInput.test.tsx +550 -0
- package/src/components/variables/__tests__/VariableTag.test.tsx +347 -0
- package/src/components/variables/__tests__/test-utils.tsx +62 -0
- package/src/components/variables/__tests__/utils.test.ts +310 -0
- package/src/components/variables/index.ts +16 -0
- package/src/components/variables/types.ts +100 -0
- package/src/components/variables/useResolvedMetaTree.ts +76 -0
- package/src/components/variables/utils.ts +192 -0
- package/src/data-source/__tests__/collection.test.ts +58 -0
- package/src/data-source/__tests__/index.test.ts +82 -0
- package/src/data-source/__tests__/jioToJoiSchema.test.ts +56 -0
- package/src/data-source/__tests__/sortCollectionsByInherits.test.ts +125 -0
- package/src/data-source/index.ts +816 -0
- package/src/data-source/jioToJoiSchema.ts +103 -0
- package/src/data-source/sortCollectionsByInherits.ts +61 -0
- package/src/decorators/index.ts +10 -0
- package/src/decorators/largeField.ts +14 -0
- package/src/emitter.ts +33 -0
- package/src/event-registry/BaseEventRegistry.ts +40 -0
- package/src/event-registry/EngineEventRegistry.ts +26 -0
- package/src/event-registry/ModelEventRegistry.ts +69 -0
- package/src/event-registry/__tests__/engineEventRegistry.test.ts +48 -0
- package/src/executor/FlowExecutor.ts +302 -0
- package/src/executor/__tests__/eventStep.test.ts +157 -0
- package/src/executor/__tests__/flowExecutor.test.ts +309 -0
- package/src/flow-registry/BaseFlowRegistry.ts +91 -0
- package/src/flow-registry/GlobalFlowRegistry.ts +82 -0
- package/src/flow-registry/InstanceFlowRegistry.ts +39 -0
- package/src/flow-registry/__tests__/globalFlowRegistry.test.ts +141 -0
- package/src/flow-registry/__tests__/instance-and-global-registry.test.ts +67 -0
- package/src/flow-registry/__tests__/instanceFlowRegistry.test.ts +83 -0
- package/src/flow-registry/index.ts +12 -0
- package/src/flowContext.ts +1742 -0
- package/src/flowEngine.ts +905 -0
- package/src/flowI18n.ts +96 -0
- package/src/flowSettings.ts +1045 -0
- package/src/hooks/index.ts +15 -0
- package/src/hooks/useApplyAutoFlows.ts +53 -0
- package/src/hooks/useFlowModel.tsx +59 -0
- package/src/hooks/useFlowModelById.ts +37 -0
- package/src/hooks/useFlowSettingsContext.tsx +37 -0
- package/src/hooks/useFlowStep.tsx +19 -0
- package/src/hooks/useNiceDropdownMaxHeight.ts +34 -0
- package/src/index.ts +46 -0
- package/src/locale/en-US.json +61 -0
- package/src/locale/index.ts +38 -0
- package/src/locale/zh-CN.json +61 -0
- package/src/models/CollectionFieldModel.tsx +306 -0
- package/src/models/DisplayItemModel.tsx +13 -0
- package/src/models/EditableItemModel.tsx +13 -0
- package/src/models/FilterableItemModel.tsx +13 -0
- package/src/models/__tests__/CollectionFieldModel.test.ts +122 -0
- package/src/models/__tests__/defaultParams-on-create.test.ts +83 -0
- package/src/models/__tests__/flow-model-oninit.test.ts +44 -0
- package/src/models/__tests__/flowModel.actions.integration.test.ts +100 -0
- package/src/models/__tests__/flowModel.getFlows.sort.test.ts +100 -0
- package/src/models/__tests__/flowModel.test.ts +2869 -0
- package/src/models/__tests__/flowRegistry.test.ts +512 -0
- package/src/models/__tests__/forkFlowModel.test.ts +1047 -0
- package/src/models/__tests__/model-actions.test.ts +70 -0
- package/src/models/__tests__/model-events.test.ts +69 -0
- package/src/models/flowModel.tsx +1421 -0
- package/src/models/forkFlowModel.ts +319 -0
- package/src/models/index.ts +17 -0
- package/src/provider.tsx +103 -0
- package/src/resources/__tests__/apiResource.test.ts +201 -0
- package/src/resources/__tests__/baseRecordResource.test.ts +262 -0
- package/src/resources/__tests__/filterItem.test.ts +260 -0
- package/src/resources/__tests__/flowResource.test.ts +127 -0
- package/src/resources/apiResource.ts +148 -0
- package/src/resources/baseRecordResource.ts +279 -0
- package/src/resources/filterItem.ts +74 -0
- package/src/resources/flowResource.ts +143 -0
- package/src/resources/index.ts +17 -0
- package/src/resources/multiRecordResource.ts +219 -0
- package/src/resources/singleRecordResource.ts +83 -0
- package/src/resources/sqlResource.ts +299 -0
- package/src/runjs-context/contexts/FormJSFieldItemRunJSContext.ts +46 -0
- package/src/runjs-context/contexts/JSBlockRunJSContext.ts +64 -0
- package/src/runjs-context/contexts/JSCollectionActionRunJSContext.ts +31 -0
- package/src/runjs-context/contexts/JSColumnRunJSContext.ts +58 -0
- package/src/runjs-context/contexts/JSFieldRunJSContext.ts +48 -0
- package/src/runjs-context/contexts/JSItemRunJSContext.ts +43 -0
- package/src/runjs-context/contexts/JSRecordActionRunJSContext.ts +33 -0
- package/src/runjs-context/contexts/base.ts +155 -0
- package/src/runjs-context/helpers.ts +58 -0
- package/src/runjs-context/registry.ts +34 -0
- package/src/runjs-context/setup.ts +51 -0
- package/src/runjs-context/snippets/global/api-request.snippet.ts +38 -0
- package/src/runjs-context/snippets/global/import-esm.snippet.ts +39 -0
- package/src/runjs-context/snippets/global/message-error.snippet.ts +26 -0
- package/src/runjs-context/snippets/global/message-success.snippet.ts +26 -0
- package/src/runjs-context/snippets/global/notification-open.snippet.ts +31 -0
- package/src/runjs-context/snippets/global/open-view-dialog.snippet.ts +33 -0
- package/src/runjs-context/snippets/global/open-view-drawer.snippet.ts +33 -0
- package/src/runjs-context/snippets/global/query-selector.snippet.ts +34 -0
- package/src/runjs-context/snippets/global/require-amd.snippet.ts +30 -0
- package/src/runjs-context/snippets/global/window-open.snippet.ts +29 -0
- package/src/runjs-context/snippets/index.ts +195 -0
- package/src/runjs-context/snippets/scene/block/add-event-listener.snippet.ts +41 -0
- package/src/runjs-context/snippets/scene/block/api-fetch-render-list.snippet.ts +45 -0
- package/src/runjs-context/snippets/scene/block/chartjs-bar.snippet.ts +80 -0
- package/src/runjs-context/snippets/scene/block/echarts-init.snippet.ts +44 -0
- package/src/runjs-context/snippets/scene/block/render-button-handler.snippet.ts +33 -0
- package/src/runjs-context/snippets/scene/block/render-iframe.snippet.ts +38 -0
- package/src/runjs-context/snippets/scene/block/render-info-card.snippet.ts +53 -0
- package/src/runjs-context/snippets/scene/block/render-react.snippet.ts +38 -0
- package/src/runjs-context/snippets/scene/block/render-statistics.snippet.ts +81 -0
- package/src/runjs-context/snippets/scene/block/render-timeline.snippet.ts +66 -0
- package/src/runjs-context/snippets/scene/block/resource-example.snippet.ts +46 -0
- package/src/runjs-context/snippets/scene/block/three-users-orbit.snippet.ts +264 -0
- package/src/runjs-context/snippets/scene/block/vue-component.snippet.ts +105 -0
- package/src/runjs-context/snippets/scene/detail/color-by-value.snippet.ts +33 -0
- package/src/runjs-context/snippets/scene/detail/copy-to-clipboard.snippet.ts +45 -0
- package/src/runjs-context/snippets/scene/detail/format-number.snippet.ts +32 -0
- package/src/runjs-context/snippets/scene/detail/innerHTML-value.snippet.ts +31 -0
- package/src/runjs-context/snippets/scene/detail/percentage-bar.snippet.ts +63 -0
- package/src/runjs-context/snippets/scene/detail/relative-time.snippet.ts +61 -0
- package/src/runjs-context/snippets/scene/detail/status-tag.snippet.ts +55 -0
- package/src/runjs-context/snippets/scene/form/calculate-total.snippet.ts +44 -0
- package/src/runjs-context/snippets/scene/form/cascade-select.snippet.ts +62 -0
- package/src/runjs-context/snippets/scene/form/conditional-required.snippet.ts +45 -0
- package/src/runjs-context/snippets/scene/form/copy-field-values.snippet.ts +55 -0
- package/src/runjs-context/snippets/scene/form/render-basic.snippet.ts +39 -0
- package/src/runjs-context/snippets/scene/form/set-disabled.snippet.ts +50 -0
- package/src/runjs-context/snippets/scene/form/set-field-value.snippet.ts +49 -0
- package/src/runjs-context/snippets/scene/form/set-required.snippet.ts +50 -0
- package/src/runjs-context/snippets/scene/form/toggle-multiple-fields.snippet.ts +48 -0
- package/src/runjs-context/snippets/scene/form/toggle-visible.snippet.ts +50 -0
- package/src/runjs-context/snippets/scene/table/cell-open-dialog.snippet.ts +45 -0
- package/src/runjs-context/snippets/scene/table/collection-selected-count.snippet.ts +34 -0
- package/src/runjs-context/snippets/scene/table/concat-fields.snippet.ts +60 -0
- package/src/runjs-context/snippets/scene/table/destroy-selected.snippet.ts +36 -0
- package/src/runjs-context/snippets/scene/table/export-selected-json.snippet.ts +45 -0
- package/src/runjs-context/snippets/scene/table/iterate-selected-rows.snippet.ts +33 -0
- package/src/runjs-context/snippets/types.ts +21 -0
- package/src/types.ts +484 -0
- package/src/utils/__tests__/context.test.ts +93 -0
- package/src/utils/__tests__/params-resolvers.test.ts +652 -0
- package/src/utils/__tests__/parsePathnameToViewParams.test.ts +104 -0
- package/src/utils/__tests__/safeGlobals.test.ts +29 -0
- package/src/utils/__tests__/utils.test.ts +1021 -0
- package/src/utils/__tests__/variablesParams.test.ts +52 -0
- package/src/utils/autoFlowError.ts +29 -0
- package/src/utils/constants.ts +60 -0
- package/src/utils/context.ts +70 -0
- package/src/utils/createCollectionContextMeta.ts +122 -0
- package/src/utils/exceptions.ts +36 -0
- package/src/utils/flow-definitions.ts +16 -0
- package/src/utils/index.ts +62 -0
- package/src/utils/inheritance.ts +39 -0
- package/src/utils/params-resolvers.ts +482 -0
- package/src/utils/parsePathnameToViewParams.ts +103 -0
- package/src/utils/safeGlobals.ts +188 -0
- package/src/utils/schema-utils.ts +201 -0
- package/src/utils/serverContextParams.ts +112 -0
- package/src/utils/setupRuntimeContextSteps.ts +89 -0
- package/src/utils/translation.ts +37 -0
- package/src/utils/variablesParams.ts +184 -0
- package/src/views/DialogComponent.tsx +79 -0
- package/src/views/DrawerComponent.tsx +72 -0
- package/src/views/FlowView.tsx +103 -0
- package/src/views/PageComponent.tsx +150 -0
- package/src/views/ViewNavigation.ts +122 -0
- package/src/views/__tests__/FlowView.test.ts +31 -0
- package/src/views/__tests__/ViewNavigation.test.ts +191 -0
- package/src/views/__tests__/usePatchElement.test.tsx +28 -0
- package/src/views/createViewMeta.ts +402 -0
- package/src/views/index.tsx +15 -0
- package/src/views/useDialog.tsx +194 -0
- package/src/views/useDrawer.tsx +229 -0
- package/src/views/usePage.tsx +185 -0
- package/src/views/usePatchElement.tsx +27 -0
- package/src/views/usePopover.tsx +131 -0
|
@@ -0,0 +1,163 @@
|
|
|
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, beforeAll } from 'vitest';
|
|
11
|
+
import { FlowEngineContext } from '../flowContext';
|
|
12
|
+
import { FlowEngine } from '../flowEngine';
|
|
13
|
+
import { JSRunner } from '../JSRunner';
|
|
14
|
+
|
|
15
|
+
describe('FlowContext async createJSRunner', () => {
|
|
16
|
+
let engine: FlowEngine;
|
|
17
|
+
let engineCtx: FlowEngineContext;
|
|
18
|
+
|
|
19
|
+
beforeAll(() => {
|
|
20
|
+
// Create minimal engine and context for testing
|
|
21
|
+
engine = new FlowEngine();
|
|
22
|
+
engineCtx = new FlowEngineContext(engine);
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
describe('createJSRunner method', () => {
|
|
26
|
+
it('should be async and return JSRunner instance', async () => {
|
|
27
|
+
const runner = await engineCtx.createJSRunner();
|
|
28
|
+
expect(runner).toBeInstanceOf(JSRunner);
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
it('should pass globals to JSRunner', async () => {
|
|
32
|
+
const customGlobals = { customVar: 'test' };
|
|
33
|
+
const runner = await engineCtx.createJSRunner({ globals: customGlobals });
|
|
34
|
+
const result = await runner.run('return customVar');
|
|
35
|
+
expect(result?.success).toBe(true);
|
|
36
|
+
expect(result?.value).toBe('test');
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
it('should always provide ctx in globals', async () => {
|
|
40
|
+
const runner = await engineCtx.createJSRunner();
|
|
41
|
+
const result = await runner.run('return typeof ctx !== "undefined"');
|
|
42
|
+
expect(result?.success).toBe(true);
|
|
43
|
+
expect(result?.value).toBe(true);
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
it('should support timeout option', async () => {
|
|
47
|
+
const runner = await engineCtx.createJSRunner({ timeoutMs: 100 });
|
|
48
|
+
expect(runner).toBeInstanceOf(JSRunner);
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
it('should select appropriate context based on model class', async () => {
|
|
52
|
+
// Test with JSBlockModel
|
|
53
|
+
const ctx = new FlowEngineContext(engine);
|
|
54
|
+
(ctx as any).defineProperty('model', {
|
|
55
|
+
value: { constructor: { name: 'JSBlockModel' } },
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
const runner = await ctx.createJSRunner();
|
|
59
|
+
expect(runner).toBeInstanceOf(JSRunner);
|
|
60
|
+
|
|
61
|
+
// Check if ctx.element is accessible (specific to JSBlockModel)
|
|
62
|
+
const result = await runner.run('return typeof ctx !== "undefined"');
|
|
63
|
+
expect(result?.success).toBe(true);
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
it('should select JSFieldModel context correctly', async () => {
|
|
67
|
+
const ctx = new FlowEngineContext(engine);
|
|
68
|
+
(ctx as any).defineProperty('model', {
|
|
69
|
+
value: { constructor: { name: 'JSFieldModel' } },
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
const runner = await ctx.createJSRunner();
|
|
73
|
+
expect(runner).toBeInstanceOf(JSRunner);
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
it('should select JSColumnModel context correctly', async () => {
|
|
77
|
+
const ctx = new FlowEngineContext(engine);
|
|
78
|
+
(ctx as any).defineProperty('model', {
|
|
79
|
+
value: { constructor: { name: 'JSColumnModel' } },
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
const runner = await ctx.createJSRunner();
|
|
83
|
+
expect(runner).toBeInstanceOf(JSRunner);
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
it('should fallback to base context for unknown model', async () => {
|
|
87
|
+
const ctx = new FlowEngineContext(engine);
|
|
88
|
+
(ctx as any).defineProperty('model', {
|
|
89
|
+
value: { constructor: { name: 'UnknownModel' } },
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
const runner = await ctx.createJSRunner();
|
|
93
|
+
expect(runner).toBeInstanceOf(JSRunner);
|
|
94
|
+
|
|
95
|
+
// Should still have ctx
|
|
96
|
+
const result = await runner.run('return typeof ctx !== "undefined"');
|
|
97
|
+
expect(result?.success).toBe(true);
|
|
98
|
+
expect(result?.value).toBe(true);
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
it('should support version option', async () => {
|
|
102
|
+
const runner = await engineCtx.createJSRunner({ version: 'v1' } as any);
|
|
103
|
+
expect(runner).toBeInstanceOf(JSRunner);
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
it('should merge custom globals with ctx', async () => {
|
|
107
|
+
const runner = await engineCtx.createJSRunner({
|
|
108
|
+
globals: { foo: 'bar', baz: 123 },
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
const result = await runner.run('return { hasCtx: typeof ctx !== "undefined", foo, baz }');
|
|
112
|
+
expect(result?.success).toBe(true);
|
|
113
|
+
expect(result?.value).toEqual({ hasCtx: true, foo: 'bar', baz: 123 });
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
it('should execute async code successfully', async () => {
|
|
117
|
+
const runner = await engineCtx.createJSRunner();
|
|
118
|
+
const result = await runner.run(`
|
|
119
|
+
return new Promise(resolve => {
|
|
120
|
+
setTimeout(() => resolve('async result'), 10);
|
|
121
|
+
});
|
|
122
|
+
`);
|
|
123
|
+
expect(result?.success).toBe(true);
|
|
124
|
+
expect(result?.value).toBe('async result');
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
it('should handle errors gracefully', async () => {
|
|
128
|
+
const runner = await engineCtx.createJSRunner();
|
|
129
|
+
const result = await runner.run('throw new Error("test error")');
|
|
130
|
+
expect(result?.success).toBe(false);
|
|
131
|
+
expect(result?.error).toBeTruthy();
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
it('should respect timeout setting', async () => {
|
|
135
|
+
const runner = await engineCtx.createJSRunner({ timeoutMs: 50 });
|
|
136
|
+
const result = await runner.run(`
|
|
137
|
+
return new Promise(resolve => {
|
|
138
|
+
setTimeout(() => resolve('done'), 1000);
|
|
139
|
+
});
|
|
140
|
+
`);
|
|
141
|
+
// Should timeout before completing
|
|
142
|
+
expect(result?.success).toBe(false);
|
|
143
|
+
});
|
|
144
|
+
});
|
|
145
|
+
|
|
146
|
+
describe('setupRunJSContexts integration', () => {
|
|
147
|
+
it('should auto-setup contexts when createJSRunner is called', async () => {
|
|
148
|
+
// Even if setup wasn't called manually, createJSRunner should trigger it
|
|
149
|
+
const ctx = new FlowEngineContext(engine);
|
|
150
|
+
(ctx as any).defineProperty('model', {
|
|
151
|
+
value: { constructor: { name: 'JSBlockModel' } },
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
const runner = await ctx.createJSRunner();
|
|
155
|
+
expect(runner).toBeInstanceOf(JSRunner);
|
|
156
|
+
|
|
157
|
+
// Verify context is properly initialized
|
|
158
|
+
const result = await runner.run('return typeof ctx !== "undefined"');
|
|
159
|
+
expect(result?.success).toBe(true);
|
|
160
|
+
expect(result?.value).toBe(true);
|
|
161
|
+
});
|
|
162
|
+
});
|
|
163
|
+
});
|
|
@@ -0,0 +1,171 @@
|
|
|
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, beforeEach, afterEach } from 'vitest';
|
|
11
|
+
import { FlowEngine } from '../flowEngine';
|
|
12
|
+
import { FlowModel } from '../models/flowModel';
|
|
13
|
+
import type { IFlowModelRepository } from '../types';
|
|
14
|
+
|
|
15
|
+
// Mock repository implementation for testing
|
|
16
|
+
class MockFlowModelRepository implements IFlowModelRepository {
|
|
17
|
+
private saveDelay = 100;
|
|
18
|
+
private saveCount = 0;
|
|
19
|
+
|
|
20
|
+
setSaveDelay(delay: number) {
|
|
21
|
+
this.saveDelay = delay;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
getSaveCount() {
|
|
25
|
+
return this.saveCount;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
resetSaveCount() {
|
|
29
|
+
this.saveCount = 0;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
async save(model: FlowModel, options?: { onlyStepParams?: boolean }): Promise<any> {
|
|
33
|
+
this.saveCount++;
|
|
34
|
+
// Simulate async save operation
|
|
35
|
+
await new Promise((resolve) => setTimeout(resolve, this.saveDelay));
|
|
36
|
+
return { success: true, uid: model.uid, saveCount: this.saveCount };
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
async findOne(options: any): Promise<any> {
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
async destroy(uid: string): Promise<boolean> {
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
async move(sourceId: string, targetId: string, position: 'before' | 'after'): Promise<void> {
|
|
48
|
+
// Mock implementation
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
describe('FlowEngine.saveModel concurrent save prevention', () => {
|
|
53
|
+
let engine: FlowEngine;
|
|
54
|
+
let mockRepository: MockFlowModelRepository;
|
|
55
|
+
let model: FlowModel;
|
|
56
|
+
|
|
57
|
+
beforeEach(() => {
|
|
58
|
+
engine = new FlowEngine();
|
|
59
|
+
mockRepository = new MockFlowModelRepository();
|
|
60
|
+
engine.setModelRepository(mockRepository);
|
|
61
|
+
|
|
62
|
+
// Create a test model
|
|
63
|
+
model = engine.createModel({
|
|
64
|
+
uid: 'test-model-uid',
|
|
65
|
+
use: 'FlowModel',
|
|
66
|
+
props: { title: 'Test Model' },
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
afterEach(() => {
|
|
71
|
+
mockRepository.resetSaveCount();
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
it('should prevent concurrent saves of the same model', async () => {
|
|
75
|
+
// Set a longer delay to ensure concurrency
|
|
76
|
+
mockRepository.setSaveDelay(200);
|
|
77
|
+
|
|
78
|
+
// Start multiple save operations concurrently
|
|
79
|
+
const savePromise1 = engine.saveModel(model);
|
|
80
|
+
const savePromise2 = engine.saveModel(model);
|
|
81
|
+
const savePromise3 = engine.saveModel(model);
|
|
82
|
+
|
|
83
|
+
// Wait for all promises to complete
|
|
84
|
+
const [result1, result2, result3] = await Promise.all([savePromise1, savePromise2, savePromise3]);
|
|
85
|
+
|
|
86
|
+
// All should return the same result (from the first save operation)
|
|
87
|
+
expect(result1).toEqual(result2);
|
|
88
|
+
expect(result2).toEqual(result3);
|
|
89
|
+
expect(result1.uid).toBe('test-model-uid');
|
|
90
|
+
|
|
91
|
+
// Repository save should only be called once
|
|
92
|
+
expect(mockRepository.getSaveCount()).toBe(1);
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
it('should allow saves after previous save completes', async () => {
|
|
96
|
+
mockRepository.setSaveDelay(50);
|
|
97
|
+
|
|
98
|
+
// First save
|
|
99
|
+
const result1 = await engine.saveModel(model);
|
|
100
|
+
expect(result1.saveCount).toBe(1);
|
|
101
|
+
|
|
102
|
+
// Second save (after first completes)
|
|
103
|
+
const result2 = await engine.saveModel(model);
|
|
104
|
+
expect(result2.saveCount).toBe(2);
|
|
105
|
+
|
|
106
|
+
// Repository save should be called twice
|
|
107
|
+
expect(mockRepository.getSaveCount()).toBe(2);
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
it('should handle save errors correctly and reset state', async () => {
|
|
111
|
+
// Mock repository to throw error
|
|
112
|
+
const originalSave = mockRepository.save.bind(mockRepository);
|
|
113
|
+
mockRepository.save = vi.fn().mockRejectedValueOnce(new Error('Save failed'));
|
|
114
|
+
|
|
115
|
+
// First save should fail
|
|
116
|
+
await expect(engine.saveModel(model)).rejects.toThrow('Save failed');
|
|
117
|
+
|
|
118
|
+
// Restore original save method
|
|
119
|
+
mockRepository.save = originalSave;
|
|
120
|
+
|
|
121
|
+
// Second save should work normally
|
|
122
|
+
const result = await engine.saveModel(model);
|
|
123
|
+
expect(result.success).toBe(true);
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
it('should handle different models independently', async () => {
|
|
127
|
+
mockRepository.setSaveDelay(100);
|
|
128
|
+
|
|
129
|
+
// Create another model
|
|
130
|
+
const model2 = engine.createModel({
|
|
131
|
+
uid: 'test-model-uid-2',
|
|
132
|
+
use: 'FlowModel',
|
|
133
|
+
props: { title: 'Test Model 2' },
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
// Start saves for different models concurrently
|
|
137
|
+
const savePromise1 = engine.saveModel(model);
|
|
138
|
+
const savePromise2 = engine.saveModel(model2);
|
|
139
|
+
|
|
140
|
+
const [result1, result2] = await Promise.all([savePromise1, savePromise2]);
|
|
141
|
+
|
|
142
|
+
// Both should succeed
|
|
143
|
+
expect(result1.uid).toBe('test-model-uid');
|
|
144
|
+
expect(result2.uid).toBe('test-model-uid-2');
|
|
145
|
+
|
|
146
|
+
// Repository save should be called twice (once for each model)
|
|
147
|
+
expect(mockRepository.getSaveCount()).toBe(2);
|
|
148
|
+
});
|
|
149
|
+
|
|
150
|
+
it('should work when model repository is not set', async () => {
|
|
151
|
+
// Create engine without repository
|
|
152
|
+
const engineWithoutRepo = new FlowEngine();
|
|
153
|
+
const testModel = engineWithoutRepo.createModel({
|
|
154
|
+
uid: 'test-model-without-repo',
|
|
155
|
+
use: 'FlowModel',
|
|
156
|
+
props: { title: 'Test Model' },
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
// Should return undefined without throwing
|
|
160
|
+
const result = await engineWithoutRepo.saveModel(testModel);
|
|
161
|
+
expect(result).toBeUndefined();
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
it('should pass options correctly to repository', async () => {
|
|
165
|
+
const saveSpy = vi.spyOn(mockRepository, 'save');
|
|
166
|
+
|
|
167
|
+
await engine.saveModel(model, { onlyStepParams: true });
|
|
168
|
+
|
|
169
|
+
expect(saveSpy).toHaveBeenCalledWith(model, { onlyStepParams: true });
|
|
170
|
+
});
|
|
171
|
+
});
|
|
@@ -0,0 +1,28 @@
|
|
|
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 { FlowI18n } from '../flowI18n';
|
|
12
|
+
|
|
13
|
+
describe('FlowI18n', () => {
|
|
14
|
+
it('translates plain keys and templates', () => {
|
|
15
|
+
const i18n = new FlowI18n({ i18n: { t: (k: string, _o?: any) => (k === 'Hello' ? '你好' : k) } });
|
|
16
|
+
expect(i18n.translate('Hello')).toBe('你好');
|
|
17
|
+
expect(i18n.translate("{{ t('Hello') }}")).toBe('你好');
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
it('template compile ignores malformed options', () => {
|
|
21
|
+
const spy = vi.spyOn(console, 'warn').mockImplementation(() => undefined);
|
|
22
|
+
const i18n = new FlowI18n({ i18n: { t: (k: string) => k } });
|
|
23
|
+
// malformed options will be treated as no options, key is translated directly
|
|
24
|
+
const s = (i18n as any).translate("{{ t('X', oops) }}");
|
|
25
|
+
expect(s).toBe('X');
|
|
26
|
+
spy.mockRestore();
|
|
27
|
+
});
|
|
28
|
+
});
|
|
@@ -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
|
+
import { describe, it, expect } from 'vitest';
|
|
11
|
+
import { FlowEngine } from '../flowEngine';
|
|
12
|
+
import { FlowModel } from '../models/flowModel';
|
|
13
|
+
|
|
14
|
+
describe('FlowModel.getFlow(s) with instance + global registries', () => {
|
|
15
|
+
class BaseModel extends FlowModel {}
|
|
16
|
+
class ChildModel extends BaseModel {}
|
|
17
|
+
|
|
18
|
+
it('merges static(global) and instance flows; instance overrides static', async () => {
|
|
19
|
+
const engine = new FlowEngine();
|
|
20
|
+
engine.registerModels({ BaseModel, ChildModel });
|
|
21
|
+
|
|
22
|
+
const childGR = (ChildModel as typeof FlowModel).globalFlowRegistry;
|
|
23
|
+
childGR.addFlow('shared', {
|
|
24
|
+
title: 'FromChildStatic',
|
|
25
|
+
steps: { s: { title: 'S', handler: (ctx: any, params: any) => {} } },
|
|
26
|
+
} as any);
|
|
27
|
+
const parentGR = (BaseModel as typeof FlowModel).globalFlowRegistry;
|
|
28
|
+
parentGR.addFlow('baseOnly', {
|
|
29
|
+
title: 'FromBaseStatic',
|
|
30
|
+
steps: { p: { title: 'P', handler: (ctx: any, params: any) => {} } },
|
|
31
|
+
} as any);
|
|
32
|
+
|
|
33
|
+
const model = engine.createModel<ChildModel>({ use: 'ChildModel', uid: 'm1' });
|
|
34
|
+
|
|
35
|
+
// 实例添加 flow
|
|
36
|
+
model.flowRegistry.addFlow('instanceOnly', {
|
|
37
|
+
title: 'FromInstance',
|
|
38
|
+
steps: { i: { title: 'I', handler: (ctx: any, params: any) => {} } },
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
// 读取单个 flow
|
|
42
|
+
expect(model.getFlow('instanceOnly')!.title).toBe('FromInstance');
|
|
43
|
+
expect(model.getFlow('shared')!.title).toBe('FromChildStatic');
|
|
44
|
+
expect(model.getFlow('baseOnly')!.title).toBe('FromBaseStatic');
|
|
45
|
+
|
|
46
|
+
// 实例覆盖同名静态 flow
|
|
47
|
+
model.flowRegistry.addFlow('shared', {
|
|
48
|
+
title: 'FromInstanceOverride',
|
|
49
|
+
steps: { ii: { title: 'II', handler: (ctx: any, params: any) => {} } },
|
|
50
|
+
});
|
|
51
|
+
expect(model.getFlow('shared')!.title).toBe('FromInstanceOverride');
|
|
52
|
+
|
|
53
|
+
// getFlows 合并结果
|
|
54
|
+
const allFlows = model.getFlows();
|
|
55
|
+
expect(allFlows).toBeInstanceOf(Map);
|
|
56
|
+
expect(allFlows.has('instanceOnly')).toBe(true);
|
|
57
|
+
expect(allFlows.has('shared')).toBe(true);
|
|
58
|
+
expect(allFlows.has('baseOnly')).toBe(true);
|
|
59
|
+
expect(allFlows.get('shared')!.title).toBe('FromInstanceOverride');
|
|
60
|
+
});
|
|
61
|
+
});
|
|
@@ -0,0 +1,78 @@
|
|
|
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 { FlowEngine } from '../flowEngine';
|
|
12
|
+
import { FlowModel } from '../models/flowModel';
|
|
13
|
+
|
|
14
|
+
describe('FlowModelContext.openView - navigation enforcement', () => {
|
|
15
|
+
function setup() {
|
|
16
|
+
const engine = new FlowEngine();
|
|
17
|
+
const parent = engine.createModel({ use: 'FlowModel', uid: 'parent-uid' });
|
|
18
|
+
|
|
19
|
+
// minimal child model stub used by ctx.openView
|
|
20
|
+
const child: any = {
|
|
21
|
+
uid: 'child-uid',
|
|
22
|
+
stepParams: {},
|
|
23
|
+
context: {
|
|
24
|
+
defineProperty: vi.fn(),
|
|
25
|
+
},
|
|
26
|
+
getStepParams: vi.fn(() => undefined),
|
|
27
|
+
setStepParams: vi.fn(),
|
|
28
|
+
save: vi.fn(async () => undefined),
|
|
29
|
+
dispatchEvent: vi.fn(async (_event: string, _params?: any) => undefined),
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
// inject loadModel so ctx.openView finds existing model and skips createModel('PopupActionModel')
|
|
33
|
+
(engine as any).loadModel = vi.fn(async ({ uid }: { uid: string }) => (uid ? child : null));
|
|
34
|
+
|
|
35
|
+
return { engine, parent, child };
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
it('forces options.navigation=false when options.defineProperties exists', async () => {
|
|
39
|
+
const { parent, child } = setup();
|
|
40
|
+
|
|
41
|
+
// call and then assert via recorded defineProperty calls
|
|
42
|
+
|
|
43
|
+
await (parent.context as any).openView('child-uid', {
|
|
44
|
+
mode: 'drawer',
|
|
45
|
+
navigation: true,
|
|
46
|
+
defineProperties: {
|
|
47
|
+
foo: { get: () => 'bar' },
|
|
48
|
+
},
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
// verify view.inputArgs.navigation is forced false (check the first set before it gets cleared)
|
|
52
|
+
const viewCalls = child.context.defineProperty.mock.calls.filter((args: any[]) => args?.[0] === 'view');
|
|
53
|
+
const firstView = viewCalls?.[0]?.[1]?.value;
|
|
54
|
+
expect(firstView?.inputArgs?.navigation).toBe(false);
|
|
55
|
+
// verify the params passed to dispatchEvent carry navigation=false
|
|
56
|
+
expect(child.dispatchEvent).toHaveBeenCalledTimes(1);
|
|
57
|
+
const dispatchedParams = child.dispatchEvent.mock.calls[0][1];
|
|
58
|
+
expect(dispatchedParams.navigation).toBe(false);
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
it('forces options.navigation=false when options.defineMethod exists', async () => {
|
|
62
|
+
const { parent, child } = setup();
|
|
63
|
+
|
|
64
|
+
await (parent.context as any).openView('child-uid', {
|
|
65
|
+
navigation: true,
|
|
66
|
+
defineMethod: {
|
|
67
|
+
test: vi.fn(),
|
|
68
|
+
},
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
const viewCalls = child.context.defineProperty.mock.calls.filter((args: any[]) => args?.[0] === 'view');
|
|
72
|
+
const firstView = viewCalls?.[0]?.[1]?.value;
|
|
73
|
+
expect(firstView?.inputArgs?.navigation).toBe(false);
|
|
74
|
+
expect(child.dispatchEvent).toHaveBeenCalledTimes(1);
|
|
75
|
+
const dispatchedParams = child.dispatchEvent.mock.calls[0][1];
|
|
76
|
+
expect(dispatchedParams.navigation).toBe(false);
|
|
77
|
+
});
|
|
78
|
+
});
|