windmill-components 1.558.3 → 1.596.0
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/README.md +1 -1
- package/package/aiStore.d.ts +2 -0
- package/package/aiStore.js +24 -0
- package/package/ansibleUtils.d.ts +60 -0
- package/package/ansibleUtils.js +338 -0
- package/package/assets/app.css +22 -2
- package/package/assets/tokens/README.md +1 -0
- package/package/assets/tokens/colorTokensConfig.d.ts +2 -0
- package/package/assets/tokens/colorTokensConfig.js +2 -0
- package/package/assets/tokens/tokens.json +481 -0
- package/package/cancelable-promise-utils.d.ts +11 -0
- package/package/cancelable-promise-utils.js +70 -0
- package/package/common.d.ts +5 -1
- package/package/components/AIAgentLogViewer.svelte +59 -1
- package/package/components/AIAgentLogViewer.svelte.d.ts +3 -2
- package/package/components/AIProviderPicker.svelte +140 -57
- package/package/components/AddUser.svelte +2 -3
- package/package/components/ApiConnectForm.svelte +3 -10
- package/package/components/ApiConnectForm.svelte.d.ts +1 -1
- package/package/components/AppConnectDrawer.svelte +3 -3
- package/package/components/AppConnectInner.svelte +212 -164
- package/package/components/AppConnectLightweightResourcePicker.svelte +2 -2
- package/package/components/AppTutorials.svelte +19 -42
- package/package/components/AppTutorials.svelte.d.ts +3 -25
- package/package/components/ArgEnum.svelte +9 -2
- package/package/components/ArgEnum.svelte.d.ts +1 -0
- package/package/components/ArgInfo.svelte +8 -8
- package/package/components/ArgInput.svelte +127 -88
- package/package/components/ArgInput.svelte.d.ts +2 -1
- package/package/components/ArrayTypeNarrowing.svelte +9 -5
- package/package/components/ArrayTypeNarrowing.svelte.d.ts +2 -1
- package/package/components/AssignableTags.svelte +3 -3
- package/package/components/AssignableTags.svelte.d.ts +1 -2
- package/package/components/AssignableTagsInner.svelte +116 -74
- package/package/components/AssignableTagsInner.svelte.d.ts +1 -1
- package/package/components/Auth0Setting.svelte +74 -29
- package/package/components/AuthSettings.svelte +295 -108
- package/package/components/AutheliaSetting.svelte +26 -15
- package/package/components/AuthentikSetting.svelte +16 -14
- package/package/components/AutoscalingConfigEditor.svelte +417 -337
- package/package/components/AutoscalingConfigEditor.svelte.d.ts +3 -19
- package/package/components/AutoscalingEvents.svelte +64 -42
- package/package/components/Awareness.svelte +14 -11
- package/package/components/Awareness.svelte.d.ts +2 -17
- package/package/components/AzureOauthSettings.svelte +10 -6
- package/package/components/CenteredModal.svelte +4 -4
- package/package/components/CenteredPage.svelte +6 -5
- package/package/components/CenteredPage.svelte.d.ts +8 -38
- package/package/components/ChangeInstanceUsernameInner.svelte +4 -5
- package/package/components/ChannelSelector.svelte +103 -72
- package/package/components/ChannelSelector.svelte.d.ts +2 -0
- package/package/components/CliHelpBox.svelte +17 -13
- package/package/components/CollapseLink.svelte +16 -16
- package/package/components/CollapseLink.svelte.d.ts +7 -30
- package/package/components/CompareWorkspaces.svelte +945 -0
- package/package/components/CompareWorkspaces.svelte.d.ts +9 -0
- package/package/components/ConnectionSection.svelte +122 -106
- package/package/components/ConnectionSection.svelte.d.ts +10 -20
- package/package/components/ContentSearchInner.svelte +15 -60
- package/package/components/ContentSearchInnerItem.svelte +1 -1
- package/package/components/ContextualVariableEditor.svelte +14 -9
- package/package/components/CronBuilder.svelte +11 -10
- package/package/components/CronInput.svelte +161 -162
- package/package/components/CronInput.svelte.d.ts +1 -1
- package/package/components/CustomOauth.svelte +56 -53
- package/package/components/CustomSso.svelte +7 -7
- package/package/components/DBManager.svelte +108 -90
- package/package/components/DBManager.svelte.d.ts +6 -6
- package/package/components/DBManagerDrawer.svelte +13 -26
- package/package/components/DBManagerDrawer.svelte.d.ts +1 -1
- package/package/components/DBTableEditor.svelte +25 -22
- package/package/components/DBTableEditor.svelte.d.ts +5 -5
- package/package/components/DateInput.svelte +3 -0
- package/package/components/DateInput.svelte.d.ts +1 -1
- package/package/components/DateTimeInput.svelte +18 -20
- package/package/components/DateTimeInput.svelte.d.ts +1 -1
- package/package/components/DefaultScripts.svelte +1 -8
- package/package/components/DefaultScriptsInner.svelte +2 -1
- package/package/components/DefaultTagsInner.svelte +108 -69
- package/package/components/DefaultTagsInner.svelte.d.ts +4 -18
- package/package/components/DependenciesDeploymentWarning.svelte +265 -0
- package/package/components/DependenciesDeploymentWarning.svelte.d.ts +13 -0
- package/package/components/DeployButton.svelte +5 -3
- package/package/components/DeployToSetting.svelte +7 -8
- package/package/components/DeployWorkspace.svelte +58 -28
- package/package/components/DeployWorkspace.svelte.d.ts +9 -9
- package/package/components/Description.svelte +1 -1
- package/package/components/Dev.svelte +32 -13
- package/package/components/Dev.svelte.d.ts +1 -0
- package/package/components/DiffDrawer.svelte +76 -37
- package/package/components/DiffDrawer.svelte.d.ts +1 -0
- package/package/components/DiffEditor.svelte +6 -0
- package/package/components/DiffEditor.svelte.d.ts +2 -1
- package/package/components/DisplayResult.svelte +59 -75
- package/package/components/DisplayResultControlBar.svelte +1 -1
- package/package/components/DraftBadge.svelte +2 -2
- package/package/components/DropdownV2.svelte +13 -9
- package/package/components/DropdownV2.svelte.d.ts +4 -0
- package/package/components/DropdownV2Inner.svelte +12 -4
- package/package/components/DynamicInput.svelte +1 -1
- package/package/components/EEOnly.svelte +25 -0
- package/package/components/EEOnly.svelte.d.ts +7 -0
- package/package/components/EditableSchemaForm.svelte +10 -12
- package/package/components/Editor.svelte +175 -18
- package/package/components/Editor.svelte.d.ts +5 -0
- package/package/components/EditorBar.svelte +210 -112
- package/package/components/EditorBar.svelte.d.ts +2 -4
- package/package/components/EditorSettings.svelte +2 -4
- package/package/components/EditorSettings.svelte.d.ts +3 -0
- package/package/components/ErrorOrRecoveryHandler.svelte +320 -334
- package/package/components/ErrorOrRecoveryHandler.svelte.d.ts +2 -0
- package/package/components/ExploreAssetButton.svelte +36 -11
- package/package/components/FakeMonacoPlaceHolder.svelte +11 -7
- package/package/components/FieldHeader.svelte +4 -4
- package/package/components/FlowBuilder.svelte +88 -69
- package/package/components/FlowGraphDiffViewer.svelte +210 -0
- package/package/components/FlowGraphDiffViewer.svelte.d.ts +7 -0
- package/package/components/FlowGraphViewer.svelte +2 -1
- package/package/components/FlowGraphViewerStep.svelte +6 -3
- package/package/components/FlowGraphViewerStep.svelte.d.ts +1 -0
- package/package/components/FlowHistoryJobPicker.svelte +9 -11
- package/package/components/FlowHistoryJobPicker.svelte.d.ts +8 -7
- package/package/components/FlowJobResult.svelte +8 -6
- package/package/components/FlowJobResult.svelte.d.ts +3 -2
- package/package/components/FlowLogRow.svelte +1 -1
- package/package/components/FlowLogViewer.svelte +18 -14
- package/package/components/FlowLoopIterationPreview.svelte +9 -9
- package/package/components/FlowLoopIterationPreview.svelte.d.ts +1 -1
- package/package/components/FlowMetadata.svelte +19 -19
- package/package/components/FlowPlugConnect.svelte +3 -5
- package/package/components/FlowPreviewContent.svelte +50 -129
- package/package/components/FlowPreviewContent.svelte.d.ts +3 -3
- package/package/components/FlowPreviewResult.svelte +4 -0
- package/package/components/FlowRestartButton.svelte +192 -0
- package/package/components/FlowRestartButton.svelte.d.ts +15 -0
- package/package/components/FlowStatusViewerInner.svelte +171 -111
- package/package/components/FlowStatusWaitingForEvents.svelte +13 -7
- package/package/components/FlowTimelineBar.svelte +1 -1
- package/package/components/FlowTutorials.svelte +19 -60
- package/package/components/FlowTutorials.svelte.d.ts +3 -21
- package/package/components/FlowViewer.svelte +3 -3
- package/package/components/FlowViewerInner.svelte +5 -5
- package/package/components/FolderEditor.svelte +229 -207
- package/package/components/FolderInfo.svelte +3 -3
- package/package/components/FolderPicker.svelte +6 -9
- package/package/components/ForkWorkspaceBanner.svelte +183 -0
- package/package/components/ForkWorkspaceBanner.svelte.d.ts +3 -0
- package/package/components/GfmMarkdown.svelte +2 -2
- package/package/components/GfmMarkdown.svelte.d.ts +5 -18
- package/package/components/GitDiffPreview.svelte +5 -5
- package/package/components/GitHubAppIntegration.svelte +67 -41
- package/package/components/GitRepoPopoverPicker.svelte +83 -0
- package/package/components/GitRepoPopoverPicker.svelte.d.ts +26 -0
- package/package/components/GitRepoResourcePicker.svelte +230 -0
- package/package/components/GitRepoResourcePicker.svelte.d.ts +37 -0
- package/package/components/GitRepoViewer.svelte +167 -0
- package/package/components/GitRepoViewer.svelte.d.ts +8 -0
- package/package/components/GroupEditor.svelte +192 -163
- package/package/components/GroupInfo.svelte +25 -6
- package/package/components/HighlightCode.svelte +3 -0
- package/package/components/HighlightCode.svelte.d.ts +2 -2
- package/package/components/HighlightTheme.svelte +2 -5
- package/package/components/HistoricInputs.svelte +5 -5
- package/package/components/HistoricInputs.svelte.d.ts +1 -1
- package/package/components/HistoricList.svelte +1 -1
- package/package/components/HttpAgentWorkerDrawer.svelte +217 -148
- package/package/components/IconedPath.svelte +2 -3
- package/package/components/IconedPath.svelte.d.ts +6 -20
- package/package/components/IconedResourceType.svelte +1 -1
- package/package/components/InfiniteList.svelte.d.ts +1 -1
- package/package/components/InputTransformForm.svelte +233 -167
- package/package/components/InputTransformForm.svelte.d.ts +3 -1
- package/package/components/InputTransformSchemaForm.svelte +23 -7
- package/package/components/InputTransformSchemaForm.svelte.d.ts +2 -1
- package/package/components/InputTransformsViewer.svelte +1 -1
- package/package/components/InstanceGroupEditor.svelte +1 -2
- package/package/components/InstanceNameEditor.svelte +28 -23
- package/package/components/InstanceSetting.svelte +358 -538
- package/package/components/InstanceSetting.svelte.d.ts +2 -0
- package/package/components/InstanceSettings.svelte +149 -124
- package/package/components/InviteGlobalUser.svelte +6 -7
- package/package/components/InviteUser.svelte +2 -8
- package/package/components/ItemPicker.svelte +2 -4
- package/package/components/JobArgs.svelte +1 -1
- package/package/components/JobLoader.svelte +4 -1
- package/package/components/JsonEditor.svelte +6 -7
- package/package/components/KanidmSetting.svelte +25 -15
- package/package/components/KeycloakSetting.svelte +26 -15
- package/package/components/Label.svelte +17 -5
- package/package/components/Label.svelte.d.ts +3 -1
- package/package/components/LightweightResourcePicker.svelte +1 -1
- package/package/components/LogViewer.svelte +15 -16
- package/package/components/LogViewerHeader.svelte +3 -4
- package/package/components/Login.svelte +27 -43
- package/package/components/Login.svelte.d.ts +3 -19
- package/package/components/ManageTagsDrawer.svelte +55 -0
- package/package/components/ManageTagsDrawer.svelte.d.ts +12 -0
- package/package/components/MapResult.svelte +9 -11
- package/package/components/McpToolCallDetails.svelte +33 -0
- package/package/components/McpToolCallDetails.svelte.d.ts +11 -0
- package/package/components/ModulePreview.svelte +3 -3
- package/package/components/ModulePreview.svelte.d.ts +1 -0
- package/package/components/ModulePreviewForm.svelte +3 -3
- package/package/components/ModulePreviewResultViewer.svelte +1 -1
- package/package/components/ModuleStatus.svelte +2 -2
- package/package/components/ModuleTest.svelte +4 -3
- package/package/components/NextcloudSetting.svelte +36 -24
- package/package/components/NumberTypeNarrowing.svelte +1 -1
- package/package/components/NumberTypeNarrowing.svelte.d.ts +1 -1
- package/package/components/OAuthSetting.svelte +132 -55
- package/package/components/OAuthSetting.svelte.d.ts +4 -18
- package/package/components/OauthExtraParams.svelte +12 -12
- package/package/components/OauthScopes.svelte +5 -7
- package/package/components/ObjectStoreConfigSettings.svelte +50 -59
- package/package/components/OccupancyBars.svelte +35 -0
- package/package/components/OccupancyBars.svelte.d.ts +9 -0
- package/package/components/OktaSetting.svelte +69 -33
- package/package/components/PageHeader.svelte +6 -3
- package/package/components/PageHeader.svelte.d.ts +1 -0
- package/package/components/Password.svelte +31 -33
- package/package/components/Password.svelte.d.ts +2 -0
- package/package/components/PasswordArgInput.svelte +2 -3
- package/package/components/Path.svelte +29 -28
- package/package/components/PermissionHistory.svelte +99 -0
- package/package/components/PermissionHistory.svelte.d.ts +15 -0
- package/package/components/PersistentScriptDrawer.svelte +1 -7
- package/package/components/Popover.svelte +7 -3
- package/package/components/QueueAlerts.svelte +544 -0
- package/package/components/QueueAlerts.svelte.d.ts +3 -0
- package/package/components/QueueMetricsDrawer.svelte +8 -375
- package/package/components/QueueMetricsDrawer.svelte.d.ts +0 -2
- package/package/components/QueueMetricsDrawerInner.svelte +79 -73
- package/package/components/QueuePosition.svelte +2 -2
- package/package/components/RepositorySelector.svelte +90 -0
- package/package/components/RepositorySelector.svelte.d.ts +18 -0
- package/package/components/Required.svelte +1 -1
- package/package/components/ResourceEditor.svelte +106 -97
- package/package/components/ResourceEditorDrawer.svelte +3 -1
- package/package/components/ResourcePicker.svelte +26 -10
- package/package/components/ResourceTypePicker.svelte +6 -8
- package/package/components/RunButton.svelte +3 -3
- package/package/components/RunChart.svelte +15 -14
- package/package/components/RunChart.svelte.d.ts +1 -0
- package/package/components/RunForm.svelte +3 -3
- package/package/components/RunFormAdvancedPopup.svelte +1 -2
- package/package/components/RunPageTutorials.svelte +21 -0
- package/package/components/RunPageTutorials.svelte.d.ts +23 -0
- package/package/components/RunsPage.svelte +1261 -0
- package/package/components/RunsPage.svelte.d.ts +7 -0
- package/package/components/S3ArrayHelperButton.svelte +1 -3
- package/package/components/S3FilePicker.svelte +42 -751
- package/package/components/S3FilePicker.svelte.d.ts +6 -25
- package/package/components/S3FilePickerInner.svelte +749 -0
- package/package/components/S3FilePickerInner.svelte.d.ts +74 -0
- package/package/components/S3ObjectPicker.svelte +3 -5
- package/package/components/SaveInputsButton.svelte +2 -3
- package/package/components/SaveToWorkspace.svelte +14 -0
- package/package/components/SaveToWorkspace.svelte.d.ts +6 -0
- package/package/components/SavedInputs.svelte +33 -46
- package/package/components/SavedInputs.svelte.d.ts +10 -9
- package/package/components/SavedInputsPicker.svelte +14 -18
- package/package/components/SavedInputsPickerViewer.svelte +7 -8
- package/package/components/SavedInputsV2.svelte +2 -3
- package/package/components/SchemaForm.svelte +6 -10
- package/package/components/SchemaForm.svelte.d.ts +1 -1
- package/package/components/SchemaFormWithArgPicker.svelte +1 -1
- package/package/components/SchemaViewer.svelte +2 -2
- package/package/components/ScriptBuilder.svelte +261 -206
- package/package/components/ScriptEditor.svelte +308 -198
- package/package/components/ScriptEditor.svelte.d.ts +10 -4
- package/package/components/ScriptEditorSkeleton.svelte +55 -0
- package/package/components/ScriptEditorSkeleton.svelte.d.ts +26 -0
- package/package/components/ScriptPicker.svelte +15 -20
- package/package/components/ScriptSchema.svelte +0 -3
- package/package/components/ScriptSchema.svelte.d.ts +1 -3
- package/package/components/ScriptVersionHistory.svelte +5 -5
- package/package/components/Section.svelte +22 -19
- package/package/components/Section.svelte.d.ts +3 -0
- package/package/components/ServiceLogsInner.svelte +7 -7
- package/package/components/ShareModal.svelte +66 -60
- package/package/components/SharedBadge.svelte +6 -8
- package/package/components/SimpleEditor.svelte +18 -32
- package/package/components/SimpleEditor.svelte.d.ts +1 -3
- package/package/components/SqlRepl.svelte +8 -6
- package/package/components/SqlRepl.svelte.d.ts +1 -1
- package/package/components/Star.svelte +3 -3
- package/package/components/StringTypeNarrowing.svelte +6 -2
- package/package/components/StringTypeNarrowing.svelte.d.ts +1 -1
- package/package/components/Subsection.svelte +3 -5
- package/package/components/Summary.svelte +11 -60
- package/package/components/SupabaseConnect.svelte +4 -7
- package/package/components/SuperadminSettings.svelte +1 -1
- package/package/components/SuperadminSettingsInner.svelte +28 -24
- package/package/components/TableCustom.svelte +1 -1
- package/package/components/TagList.svelte +46 -0
- package/package/components/TagList.svelte.d.ts +8 -0
- package/package/components/TagsToListenTo.svelte +46 -13
- package/package/components/TagsToListenTo.svelte.d.ts +3 -19
- package/package/components/TeamSelector.svelte +217 -72
- package/package/components/TeamSelector.svelte.d.ts +1 -0
- package/package/components/TemplateEditor.svelte +23 -24
- package/package/components/TestConnection.svelte +2 -9
- package/package/components/TimeAgo.svelte +6 -7
- package/package/components/TimeAgo.svelte.d.ts +4 -18
- package/package/components/Toast.svelte +72 -16
- package/package/components/Toast.svelte.d.ts +1 -1
- package/package/components/Toggle.svelte +22 -40
- package/package/components/Toggle.svelte.d.ts +26 -28
- package/package/components/ToggleHubWorkspaceQuick.svelte +3 -3
- package/package/components/Tooltip.svelte +11 -14
- package/package/components/TooltipInner.svelte +2 -2
- package/package/components/Uptodate.svelte +1 -1
- package/package/components/UserSettings.svelte +23 -17
- package/package/components/VariableEditor.svelte +52 -42
- package/package/components/WhitelistIp.svelte +1 -1
- package/package/components/WorkerGroup.svelte +690 -552
- package/package/components/WorkerGroup.svelte.d.ts +7 -1
- package/package/components/WorkerRepl.svelte +10 -18
- package/package/components/WorkerTagPicker.svelte +2 -3
- package/package/components/WorkerTagSelect.svelte +17 -16
- package/package/components/WorkspaceDependenciesEditor.svelte +444 -0
- package/package/components/WorkspaceDependenciesEditor.svelte.d.ts +28 -0
- package/package/components/WorkspaceDependenciesViewer.svelte +90 -0
- package/package/components/WorkspaceDependenciesViewer.svelte.d.ts +7 -0
- package/package/components/WorkspaceTutorials.svelte +17 -0
- package/package/components/WorkspaceTutorials.svelte.d.ts +5 -0
- package/package/components/ZitadelSetting.svelte +25 -16
- package/package/components/apps/components/buttons/AppButton.svelte +3 -2
- package/package/components/apps/components/buttons/AppForm.svelte +6 -1
- package/package/components/apps/components/buttons/AppFormButton.svelte +8 -3
- package/package/components/apps/components/componentManagedFields.d.ts +33 -0
- package/package/components/apps/components/componentManagedFields.js +80 -0
- package/package/components/apps/components/display/AppAccordionList.svelte +1 -1
- package/package/components/apps/components/display/AppCarouselList.svelte +1 -1
- package/package/components/apps/components/display/AppChat.svelte +282 -0
- package/package/components/apps/components/display/AppChat.svelte.d.ts +14 -0
- package/package/components/apps/components/display/AppDownload.svelte +46 -4
- package/package/components/apps/components/display/AppImage.svelte +22 -26
- package/package/components/apps/components/display/AppJobProgressBar.svelte +102 -0
- package/package/components/apps/components/display/AppJobProgressBar.svelte.d.ts +11 -0
- package/package/components/apps/components/display/AppMap.svelte +8 -7
- package/package/components/apps/components/display/AppMenu.svelte +3 -1
- package/package/components/apps/components/display/AppNavbarItem.svelte +1 -0
- package/package/components/apps/components/display/AppPdf.svelte +41 -2
- package/package/components/apps/components/display/AppText.svelte +4 -5
- package/package/components/apps/components/display/InsertRowDrawerButton.svelte +3 -3
- package/package/components/apps/components/display/InsertRowDrawerButton.svelte.d.ts +2 -1
- package/package/components/apps/components/display/dbtable/AppDbExplorer.svelte +5 -3
- package/package/components/apps/components/display/dbtable/DbExplorerCount.svelte.d.ts +1 -1
- package/package/components/apps/components/display/dbtable/DeleteRow.svelte.d.ts +1 -1
- package/package/components/apps/components/display/dbtable/InsertRow.svelte +1 -2
- package/package/components/apps/components/display/dbtable/InsertRow.svelte.d.ts +2 -1
- package/package/components/apps/components/display/dbtable/InsertRowRunnable.svelte.d.ts +1 -1
- package/package/components/apps/components/display/dbtable/UpdateCell.svelte.d.ts +1 -1
- package/package/components/apps/components/display/dbtable/metadata.d.ts +10 -0
- package/package/components/apps/components/display/dbtable/metadata.js +433 -0
- package/package/components/apps/components/display/dbtable/queries/count.d.ts +1 -2
- package/package/components/apps/components/display/dbtable/queries/count.js +2 -2
- package/package/components/apps/components/display/dbtable/queries/createTable.d.ts +1 -1
- package/package/components/apps/components/display/dbtable/queries/delete.d.ts +2 -2
- package/package/components/apps/components/display/dbtable/queries/delete.js +2 -2
- package/package/components/apps/components/display/dbtable/queries/deleteTable.d.ts +2 -2
- package/package/components/apps/components/display/dbtable/queries/deleteTable.js +3 -1
- package/package/components/apps/components/display/dbtable/queries/insert.d.ts +1 -2
- package/package/components/apps/components/display/dbtable/queries/insert.js +6 -3
- package/package/components/apps/components/display/dbtable/queries/select.d.ts +1 -2
- package/package/components/apps/components/display/dbtable/queries/select.js +2 -2
- package/package/components/apps/components/display/dbtable/queries/update.d.ts +2 -2
- package/package/components/apps/components/display/dbtable/queries/update.js +2 -2
- package/package/components/apps/components/display/dbtable/utils.d.ts +15 -20
- package/package/components/apps/components/display/dbtable/utils.js +50 -438
- package/package/components/apps/components/display/table/AppAggridTableActions.svelte +38 -1
- package/package/components/apps/components/display/table/AppTable.svelte.d.ts +2 -2
- package/package/components/apps/components/display/table/AppTableFooter.svelte +2 -4
- package/package/components/apps/components/display/table/SyncColumnDefs.svelte +10 -22
- package/package/components/apps/components/helpers/HiddenComponent.svelte +2 -1
- package/package/components/apps/components/helpers/InputValue.svelte +10 -10
- package/package/components/apps/components/helpers/Loader.svelte +1 -1
- package/package/components/apps/components/helpers/MissingConnectionWarning.svelte +1 -1
- package/package/components/apps/components/helpers/RunnableComponent.svelte +28 -25
- package/package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +6 -2
- package/package/components/apps/components/helpers/RunnableWrapper.svelte +27 -2
- package/package/components/apps/components/helpers/RunnableWrapper.svelte.d.ts +6 -1
- package/package/components/apps/components/helpers/eval.d.ts +1 -0
- package/package/components/apps/components/helpers/eval.js +3 -1
- package/package/components/apps/components/helpers/executeRunnable.d.ts +3 -3
- package/package/components/apps/components/helpers/executeRunnable.js +7 -3
- package/package/components/apps/components/inputs/AppDateTimeInput.svelte +10 -7
- package/package/components/apps/components/inputs/AppMultiSelectV2.svelte +5 -1
- package/package/components/apps/components/inputs/AppQuillEditor.svelte +1 -1
- package/package/components/apps/components/inputs/AppSelectTab.svelte +2 -4
- package/package/components/apps/components/inputs/currency/CurrencyInput.svelte +2 -2
- package/package/components/apps/components/layout/AppDecisionTree.svelte +1 -1
- package/package/components/apps/components/layout/AppDrawer.svelte +2 -1
- package/package/components/apps/components/layout/AppList.svelte +3 -5
- package/package/components/apps/components/layout/AppModal.svelte +5 -3
- package/package/components/apps/components/layout/AppModal.svelte.d.ts +1 -0
- package/package/components/apps/components/layout/AppStepper.svelte +3 -5
- package/package/components/apps/components/layout/AppTabs.svelte +3 -9
- package/package/components/apps/editor/AppEditor.svelte +21 -30
- package/package/components/apps/editor/AppEditorHeader.svelte +39 -212
- package/package/components/apps/editor/AppEditorHeader.svelte.d.ts +3 -1
- package/package/components/apps/editor/AppEditorHeaderDeploy.svelte +4 -5
- package/package/components/apps/editor/AppEditorTutorial.svelte +16 -43
- package/package/components/apps/editor/AppEditorTutorial.svelte.d.ts +4 -2
- package/package/components/apps/editor/AppExportButton.svelte +5 -6
- package/package/components/apps/editor/AppInputs.svelte +1 -1
- package/package/components/apps/editor/AppJobsDrawer.svelte +15 -17
- package/package/components/apps/editor/AppJsonEditor.svelte +2 -2
- package/package/components/apps/editor/AppPreview.svelte +2 -1
- package/package/components/apps/editor/AppReportsDrawerInner.svelte +30 -89
- package/package/components/apps/editor/ComponentHeader.svelte +1 -2
- package/package/components/apps/editor/DeploymentHistory.svelte +3 -3
- package/package/components/apps/editor/GridEditor.svelte +4 -4
- package/package/components/apps/editor/PreviewToggle.svelte +0 -1
- package/package/components/apps/editor/PublicApp.svelte +125 -0
- package/package/components/apps/editor/PublicApp.svelte.d.ts +14 -0
- package/package/components/apps/editor/RecomputeAllButton.svelte +2 -3
- package/package/components/apps/editor/RecomputeAllComponents.svelte +1 -1
- package/package/components/apps/editor/RecomputeAllWrapper.svelte +1 -1
- package/package/components/apps/editor/RunnableJobPanelInner.svelte +3 -3
- package/package/components/apps/editor/SettingsPanel.svelte +1 -1
- package/package/components/apps/editor/SubGridEditor.svelte +2 -1
- package/package/components/apps/editor/appPolicy.d.ts +6 -0
- package/package/components/apps/editor/appPolicy.js +186 -0
- package/package/components/apps/editor/appUtils.d.ts +1 -3
- package/package/components/apps/editor/appUtils.js +2 -60
- package/package/components/apps/editor/appUtilsCore.d.ts +7 -0
- package/package/components/apps/editor/appUtilsCore.js +66 -0
- package/package/components/apps/editor/appUtilsS3.d.ts +16 -16
- package/package/components/apps/editor/appUtilsS3.js +31 -9
- package/package/components/apps/editor/component/ComponentInner.svelte +23 -1
- package/package/components/apps/editor/component/componentCallbacks.svelte.js +2 -1
- package/package/components/apps/editor/component/components.d.ts +649 -17
- package/package/components/apps/editor/component/components.js +186 -9
- package/package/components/apps/editor/component/default-codes.js +13 -0
- package/package/components/apps/editor/component/sets.js +2 -0
- package/package/components/apps/editor/componentsPanel/ComponentList.svelte +3 -3
- package/package/components/apps/editor/componentsPanel/CssHelperPanel.svelte +5 -8
- package/package/components/apps/editor/componentsPanel/CssProperty.svelte +37 -39
- package/package/components/apps/editor/componentsPanel/CssSettings.svelte +6 -8
- package/package/components/apps/editor/componentsPanel/CustomComponentsList.svelte +1 -1
- package/package/components/apps/editor/componentsPanel/GroupList.svelte +1 -1
- package/package/components/apps/editor/componentsPanel/ListItem.svelte +9 -7
- package/package/components/apps/editor/componentsPanel/NameEditor.svelte +1 -1
- package/package/components/apps/editor/componentsPanel/QuickStyleMenu.svelte +1 -1
- package/package/components/apps/editor/componentsPanel/QuickStyleProperty.svelte +2 -3
- package/package/components/apps/editor/componentsPanel/ThemeList.svelte +2 -3
- package/package/components/apps/editor/componentsPanel/ThemeNameEditor.svelte +1 -1
- package/package/components/apps/editor/componentsPanel/ThemeRow.svelte +1 -1
- package/package/components/apps/editor/componentsPanel/componentControlUtils.js +7 -0
- package/package/components/apps/editor/componentsPanel/cssUtils.js +25 -1
- package/package/components/apps/editor/componentsPanel/quickStyleProperties.js +12 -0
- package/package/components/apps/editor/contextPanel/ComponentOutput.svelte +1 -1
- package/package/components/apps/editor/contextPanel/ComponentOutputViewer.svelte +2 -2
- package/package/components/apps/editor/contextPanel/DebugPanel.svelte +2 -2
- package/package/components/apps/editor/contextPanel/LazyModePanel.svelte +3 -3
- package/package/components/apps/editor/contextPanel/SubGridOutput.svelte +1 -1
- package/package/components/apps/editor/contextPanel/components/BackgroundScriptsOutput.svelte +1 -1
- package/package/components/apps/editor/contextPanel/components/IdEditor.svelte +2 -2
- package/package/components/apps/editor/contextPanel/components/OutputHeader.svelte +6 -4
- package/package/components/apps/editor/inlineScriptsPanel/AppRunButton.svelte.d.ts +1 -1
- package/package/components/apps/editor/inlineScriptsPanel/CacheTtlPopup.svelte +2 -1
- package/package/components/apps/editor/inlineScriptsPanel/CacheTtlPopup.svelte.d.ts +3 -0
- package/package/components/apps/editor/inlineScriptsPanel/EmptyInlineScript.svelte +2 -12
- package/package/components/apps/editor/inlineScriptsPanel/EmptyInlineScript.svelte.d.ts +1 -1
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte +34 -60
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte.d.ts +1 -2
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorDrawer.svelte.d.ts +2 -2
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorPanel.svelte +7 -9
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorPanel.svelte.d.ts +1 -1
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptHiddenRunnable.svelte +5 -4
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte +8 -14
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanel.svelte +3 -3
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanelList.svelte +6 -6
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanelList.svelte.d.ts +1 -1
- package/package/components/apps/editor/inlineScriptsPanel/RunButton.svelte +3 -3
- package/package/components/apps/editor/inlineScriptsPanel/RunButton.svelte.d.ts +1 -1
- package/package/components/apps/editor/inlineScriptsPanel/utils.d.ts +1 -1
- package/package/components/apps/editor/inlineScriptsPanel/utils.js +5 -4
- package/package/components/apps/editor/settingsPanel/AlignmentEditor.svelte +1 -1
- package/package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte +8 -6
- package/package/components/apps/editor/settingsPanel/CSSMigrationModal.svelte +3 -3
- package/package/components/apps/editor/settingsPanel/ComponentPanel.svelte +33 -24
- package/package/components/apps/editor/settingsPanel/ContextVariables.svelte +2 -1
- package/package/components/apps/editor/settingsPanel/DecisionTreeGraphEditor.svelte +2 -3
- package/package/components/apps/editor/settingsPanel/DecisionTreeGraphNode.svelte +3 -8
- package/package/components/apps/editor/settingsPanel/GridCondition.svelte +2 -3
- package/package/components/apps/editor/settingsPanel/GridGroup.svelte +2 -3
- package/package/components/apps/editor/settingsPanel/GridNavbar.svelte +3 -10
- package/package/components/apps/editor/settingsPanel/GridPane.svelte +2 -9
- package/package/components/apps/editor/settingsPanel/GridTab.svelte +2 -9
- package/package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte +11 -38
- package/package/components/apps/editor/settingsPanel/InputsSpecsEditor.svelte +4 -3
- package/package/components/apps/editor/settingsPanel/MenuItems.svelte +5 -6
- package/package/components/apps/editor/settingsPanel/OneOfInputSpecsEditor.svelte +36 -17
- package/package/components/apps/editor/settingsPanel/SelectedRunnable.svelte +5 -5
- package/package/components/apps/editor/settingsPanel/SelectedRunnable.svelte.d.ts +1 -1
- package/package/components/apps/editor/settingsPanel/StylePanel.svelte +26 -24
- package/package/components/apps/editor/settingsPanel/TableActions.svelte +44 -25
- package/package/components/apps/editor/settingsPanel/TableActions.svelte.d.ts +2 -2
- package/package/components/apps/editor/settingsPanel/common/PanelSection.svelte +31 -3
- package/package/components/apps/editor/settingsPanel/common/PanelSection.svelte.d.ts +3 -0
- package/package/components/apps/editor/settingsPanel/inputEditor/ConnectedInputEditor.svelte +2 -2
- package/package/components/apps/editor/settingsPanel/inputEditor/EvalV2InputEditor.svelte +5 -5
- package/package/components/apps/editor/settingsPanel/inputEditor/RunnableInputEditor.svelte +5 -1
- package/package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte +9 -9
- package/package/components/apps/editor/settingsPanel/inputEditor/TabSelectInput.svelte +3 -3
- package/package/components/apps/editor/settingsPanel/mainInput/RunnableSelector.svelte +12 -34
- package/package/components/apps/editor/settingsPanel/mainInput/RunnableSelector.svelte.d.ts +1 -2
- package/package/components/apps/editor/settingsPanel/mainInput/WorkspaceFlowList.svelte +3 -2
- package/package/components/apps/editor/settingsPanel/mainInput/WorkspaceScriptList.svelte +3 -2
- package/package/components/apps/editor/settingsPanel/script/BackgroundScriptSettings.svelte +3 -2
- package/package/components/apps/editor/settingsPanel/script/ComponentScriptSettings.svelte +4 -3
- package/package/components/apps/editor/settingsPanel/script/ComponentScriptSettings.svelte.d.ts +1 -1
- package/package/components/apps/editor/settingsPanel/script/shared/BackgroundScriptTriggerBy.svelte +5 -4
- package/package/components/apps/editor/settingsPanel/script/shared/ComponentScriptTriggerBy.svelte +4 -4
- package/package/components/apps/editor/settingsPanel/script/shared/ComponentScriptTriggerBy.svelte.d.ts +1 -1
- package/package/components/apps/editor/settingsPanel/script/shared/ScriptSettingsActions.svelte +1 -1
- package/package/components/apps/editor/settingsPanel/script/shared/ScriptTransformer.svelte +1 -1
- package/package/components/apps/editor/settingsPanel/script/shared/ScriptTransformer.svelte.d.ts +1 -1
- package/package/components/apps/editor/settingsPanel/script/shared/ScriptTriggers.svelte +1 -1
- package/package/components/apps/editor/settingsPanel/script/shared/ScriptTriggers.svelte.d.ts +1 -1
- package/package/components/apps/editor/settingsPanel/script/utils.d.ts +1 -1
- package/package/components/apps/editor/settingsPanel/script/utils.js +10 -3
- package/package/components/apps/inputType.d.ts +7 -5
- package/package/components/apps/inputType.js +6 -1
- package/package/components/apps/sharedTypes.d.ts +21 -0
- package/package/components/apps/sharedTypes.js +1 -0
- package/package/components/apps/types.d.ts +3 -20
- package/package/components/apps/utils.d.ts +2 -4
- package/package/components/apps/utils.js +15 -14
- package/package/components/assets/AssetButtons.svelte +37 -14
- package/package/components/assets/AssetButtons.svelte.d.ts +2 -0
- package/package/components/assets/AssetsDropdownButton.svelte +35 -16
- package/package/components/assets/AssetsUsageDrawer.svelte +4 -4
- package/package/components/assets/JobAssetsViewer.svelte +14 -11
- package/package/components/assets/lib.d.ts +2 -1
- package/package/components/assets/lib.js +10 -2
- package/package/components/auditLogs/AuditLogDetails.svelte +59 -53
- package/package/components/auditLogs/AuditLogMobileFilters.svelte +2 -2
- package/package/components/auditLogs/AuditLogsFilters.svelte +94 -98
- package/package/components/auditLogs/AuditLogsFilters.svelte.d.ts +2 -1
- package/package/components/auditLogs/AuditLogsTable.svelte +52 -31
- package/package/components/auditLogs/AuditLogsTable.svelte.d.ts +1 -0
- package/package/components/auditLogs/AuditLogsTimeline.svelte +1 -1
- package/package/components/chat/ChatInput.svelte +53 -0
- package/package/components/chat/ChatInput.svelte.d.ts +29 -0
- package/package/components/chat/ChatMessage.svelte +101 -0
- package/package/components/chat/ChatMessage.svelte.d.ts +22 -0
- package/package/components/chat/utils.d.ts +5 -0
- package/package/components/chat/utils.js +26 -0
- package/package/components/common/CloseButton.svelte +3 -2
- package/package/components/common/OnChange.svelte +1 -2
- package/package/components/common/ResizeTransitionWrapper.svelte +17 -5
- package/package/components/common/Url.svelte +1 -1
- package/package/components/common/alert/Alert.svelte +6 -19
- package/package/components/common/alert/model.js +4 -4
- package/package/components/common/badge/Badge.svelte +71 -54
- package/package/components/common/badge/Badge.svelte.d.ts +21 -41
- package/package/components/common/badge/model.d.ts +1 -1
- package/package/components/common/breadcrumb/Breadcrumb.svelte +1 -1
- package/package/components/common/button/Button.svelte +110 -36
- package/package/components/common/button/Button.svelte.d.ts +33 -0
- package/package/components/common/button/ConnectionButton.svelte +5 -3
- package/package/components/common/button/RefreshButton.svelte +6 -11
- package/package/components/common/button/RefreshButton.svelte.d.ts +4 -20
- package/package/components/common/button/RoundIconButton.svelte +2 -2
- package/package/components/common/button/UndoRedo.svelte +8 -12
- package/package/components/common/button/model.d.ts +29 -5
- package/package/components/common/button/model.js +126 -8
- package/package/components/common/confirmationModal/ConfirmationModal.svelte +5 -3
- package/package/components/common/confirmationModal/DeployOverrideConfirmationModal.svelte +2 -3
- package/package/components/common/confirmationModal/DraftTriggersConfirmationModal.svelte +7 -18
- package/package/components/common/confirmationModal/UnsavedConfirmationModal.svelte +16 -14
- package/package/components/common/confirmationModal/UnsavedConfirmationModal.svelte.d.ts +7 -18
- package/package/components/common/confirmationModal/asyncConfirmationModal.svelte.d.ts +5 -4
- package/package/components/common/contextmenu/ContextMenu.svelte +83 -0
- package/package/components/common/contextmenu/ContextMenu.svelte.d.ts +22 -0
- package/package/components/common/contextmenu/contextMenuStyles.d.ts +33 -0
- package/package/components/common/contextmenu/contextMenuStyles.js +35 -0
- package/package/components/common/drawer/Drawer.svelte +1 -1
- package/package/components/common/drawer/DrawerContent.svelte +10 -4
- package/package/components/common/drawer/DrawerContent.svelte.d.ts +1 -0
- package/package/components/common/fileDownload/FileDownload.svelte +16 -14
- package/package/components/common/fileInput/FileInput.svelte +3 -3
- package/package/components/common/fileUpload/FileUpload.svelte +7 -10
- package/package/components/common/fileUpload/FileUploadModal.svelte +2 -2
- package/package/components/common/fileUpload/S3ArgInput.svelte +7 -8
- package/package/components/common/languageIcons/LanguageIcon.svelte +4 -4
- package/package/components/common/languageIcons/LanguageIcon.svelte.d.ts +1 -0
- package/package/components/common/modal/AlwaysMountedModal.svelte +1 -1
- package/package/components/common/modal/Modal.svelte +2 -2
- package/package/components/common/modal/Modal2.svelte +27 -15
- package/package/components/common/modal/Modal2.svelte.d.ts +3 -1
- package/package/components/common/popup/PopupV2.svelte +2 -2
- package/package/components/common/popup/PopupV2.svelte.d.ts +1 -0
- package/package/components/common/seconds/SecondsInput.svelte +2 -2
- package/package/components/common/slack/SlackConnectionStatus.svelte +63 -0
- package/package/components/common/slack/SlackConnectionStatus.svelte.d.ts +10 -0
- package/package/components/common/smtp/SmtpConfigurationStatus.svelte +22 -0
- package/package/components/common/smtp/SmtpConfigurationStatus.svelte.d.ts +7 -0
- package/package/components/common/stepper/Stepper.svelte +3 -3
- package/package/components/common/table/AppRow.svelte +9 -20
- package/package/components/common/table/FlowRow.svelte +8 -8
- package/package/components/common/table/RawAppRow.svelte +2 -3
- package/package/components/common/table/Row.svelte +55 -32
- package/package/components/common/table/Row.svelte.d.ts +10 -2
- package/package/components/common/table/RowIcon.svelte +13 -21
- package/package/components/common/table/RowIcon.svelte.d.ts +1 -2
- package/package/components/common/table/ScriptRow.svelte +20 -16
- package/package/components/common/tabs/Tab.svelte +20 -15
- package/package/components/common/tabs/Tab.svelte.d.ts +7 -2
- package/package/components/common/tabs/Tabs.svelte +14 -20
- package/package/components/common/tabs/Tabs.svelte.d.ts +7 -0
- package/package/components/common/teams/TeamsConnectionStatus.svelte +62 -0
- package/package/components/common/teams/TeamsConnectionStatus.svelte.d.ts +10 -0
- package/package/components/common/toggleButton-v2/ToggleButton.svelte +19 -11
- package/package/components/common/toggleButton-v2/ToggleButton.svelte.d.ts +1 -1
- package/package/components/common/toggleButton-v2/ToggleButtonGroup.svelte +1 -1
- package/package/components/common/toggleButton-v2/ToggleButtonMore.svelte +2 -3
- package/package/components/common/toggleButton-v2/ToggleButtonMore.svelte.d.ts +1 -1
- package/package/components/copilot/AIFormAssistant.svelte +1 -1
- package/package/components/copilot/AIFormSettings.svelte +21 -17
- package/package/components/copilot/AskAiButton.svelte +3 -2
- package/package/components/copilot/CronGen.svelte +22 -15
- package/package/components/copilot/CronGen.svelte.d.ts +4 -18
- package/package/components/copilot/CustomAIPrompts.svelte +57 -0
- package/package/components/copilot/CustomAIPrompts.svelte.d.ts +8 -0
- package/package/components/copilot/FlowInlineScriptAIButton.svelte +3 -2
- package/package/components/copilot/FlowInlineScriptAIButton.svelte.d.ts +3 -0
- package/package/components/copilot/IteratorGen.svelte +5 -5
- package/package/components/copilot/MetadataGen.svelte +66 -65
- package/package/components/copilot/MetadataGen.svelte.d.ts +11 -25
- package/package/components/copilot/PredicateGen.svelte +5 -5
- package/package/components/copilot/RegexGen.svelte +2 -2
- package/package/components/copilot/ScriptFix.svelte +1 -1
- package/package/components/copilot/ScriptGen.svelte +23 -38
- package/package/components/copilot/ScriptGen.svelte.d.ts +3 -1
- package/package/components/copilot/StepGenQuick.svelte +13 -10
- package/package/components/copilot/StepInputGen.svelte +53 -71
- package/package/components/copilot/StepInputGen.svelte.d.ts +0 -2
- package/package/components/copilot/StepInputsGen.svelte +13 -9
- package/package/components/copilot/TestAIKey.svelte +4 -14
- package/package/components/copilot/TestAIKey.svelte.d.ts +4 -18
- package/package/components/copilot/chat/AIButton.svelte +56 -0
- package/package/components/copilot/chat/AIButton.svelte.d.ts +7 -0
- package/package/components/copilot/chat/AIButtonStyle.d.ts +1 -0
- package/package/components/copilot/chat/AIButtonStyle.js +8 -0
- package/package/components/copilot/chat/AIChat.svelte +2 -10
- package/package/components/copilot/chat/AIChatDisplay.svelte +9 -13
- package/package/components/copilot/chat/AIChatInlineWidget.svelte +6 -6
- package/package/components/copilot/chat/AIChatInput.svelte +4 -2
- package/package/components/copilot/chat/AIChatManager.svelte.js +149 -45
- package/package/components/copilot/chat/AIChatMessage.svelte +11 -9
- package/package/components/copilot/chat/AiChatLayout.svelte +20 -10
- package/package/components/copilot/chat/AvailableContextList.svelte +4 -4
- package/package/components/copilot/chat/ChatMode.svelte +1 -1
- package/package/components/copilot/chat/ContextElementBadge.svelte +3 -3
- package/package/components/copilot/chat/ContextTextarea.svelte +1 -1
- package/package/components/copilot/chat/ProviderModelSelector.svelte +1 -1
- package/package/components/copilot/chat/ToolContentDisplay.svelte +33 -13
- package/package/components/copilot/chat/ToolContentDisplay.svelte.d.ts +3 -0
- package/package/components/copilot/chat/ToolExecutionDisplay.svelte +24 -15
- package/package/components/copilot/chat/__tests__/app/appChat.eval.test.d.ts +1 -0
- package/package/components/copilot/chat/__tests__/app/appChat.eval.test.js +137 -0
- package/package/components/copilot/chat/__tests__/app/appEvalComparison.d.ts +26 -0
- package/package/components/copilot/chat/__tests__/app/appEvalComparison.js +131 -0
- package/package/components/copilot/chat/__tests__/app/appEvalHelpers.d.ts +15 -0
- package/package/components/copilot/chat/__tests__/app/appEvalHelpers.js +91 -0
- package/package/components/copilot/chat/__tests__/app/appEvalRunner.d.ts +41 -0
- package/package/components/copilot/chat/__tests__/app/appEvalRunner.js +92 -0
- package/package/components/copilot/chat/__tests__/app/appFixtureLoader.d.ts +29 -0
- package/package/components/copilot/chat/__tests__/app/appFixtureLoader.js +134 -0
- package/package/components/copilot/chat/__tests__/app/appResultsWriter.d.ts +30 -0
- package/package/components/copilot/chat/__tests__/app/appResultsWriter.js +197 -0
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/createFolder/main.d.ts +10 -0
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/createFolder/main.js +9 -0
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/createFolder/meta.json +4 -0
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/deleteItem/main.d.ts +6 -0
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/deleteItem/main.js +5 -0
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/deleteItem/meta.json +4 -0
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/listFiles/main.d.ts +12 -0
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/listFiles/main.js +14 -0
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/listFiles/meta.json +4 -0
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/listFolders/main.d.ts +8 -0
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/listFolders/main.js +25 -0
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/listFolders/meta.json +4 -0
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/moveItem/main.d.ts +7 -0
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/moveItem/main.js +5 -0
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/moveItem/meta.json +4 -0
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/renameItem/main.d.ts +8 -0
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/renameItem/main.js +5 -0
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/renameItem/meta.json +4 -0
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/Breadcrumb.d.ts +10 -0
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/Breadcrumb.tsx +26 -0
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/FileItem.d.ts +10 -0
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/FileItem.tsx +79 -0
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/FileList.d.ts +10 -0
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/FileList.tsx +46 -0
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/FolderTree.d.ts +10 -0
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/FolderTree.tsx +56 -0
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/Toolbar.d.ts +6 -0
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/Toolbar.tsx +59 -0
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/index.d.ts +16 -0
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/index.tsx +119 -0
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/addToCart/main.d.ts +15 -0
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/addToCart/main.js +14 -0
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/addToCart/meta.json +4 -0
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/calculateTotal/main.d.ts +14 -0
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/calculateTotal/main.js +5 -0
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/calculateTotal/meta.json +4 -0
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/getProducts/main.d.ts +6 -0
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/getProducts/main.js +41 -0
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/getProducts/meta.json +4 -0
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/removeFromCart/main.d.ts +15 -0
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/removeFromCart/main.js +3 -0
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/removeFromCart/meta.json +4 -0
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/components/Cart.d.ts +9 -0
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/components/Cart.tsx +51 -0
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/components/ProductCard.d.ts +8 -0
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/components/ProductCard.tsx +27 -0
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/components/ProductList.d.ts +8 -0
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/components/ProductList.tsx +18 -0
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/index.d.ts +12 -0
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/index.tsx +81 -0
- package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/backend/decrementCounter/main.d.ts +3 -0
- package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/backend/decrementCounter/main.js +3 -0
- package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/backend/decrementCounter/meta.json +4 -0
- package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/backend/incrementCounter/main.d.ts +3 -0
- package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/backend/incrementCounter/main.js +3 -0
- package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/backend/incrementCounter/meta.json +4 -0
- package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/frontend/index.d.ts +2 -0
- package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/frontend/index.tsx +38 -0
- package/package/components/copilot/chat/__tests__/app/variants/baseline.d.ts +6 -0
- package/package/components/copilot/chat/__tests__/app/variants/baseline.js +10 -0
- package/package/components/copilot/chat/__tests__/app/variants/index.d.ts +3 -0
- package/package/components/copilot/chat/__tests__/app/variants/index.js +3 -0
- package/package/components/copilot/chat/__tests__/app/variants/streamlined.d.ts +6 -0
- package/package/components/copilot/chat/__tests__/app/variants/streamlined.js +137 -0
- package/package/components/copilot/chat/__tests__/flow/expected/test1.json +134 -0
- package/package/components/copilot/chat/__tests__/flow/expected/test2.json +183 -0
- package/package/components/copilot/chat/__tests__/flow/expected/test3.json +204 -0
- package/package/components/copilot/chat/__tests__/flow/expected/test4.json +175 -0
- package/package/components/copilot/chat/__tests__/flow/expected/test5_modify_simple.json +68 -0
- package/package/components/copilot/chat/__tests__/flow/expected/test6_modify_medium.json +142 -0
- package/package/components/copilot/chat/__tests__/flow/expected/test7_modify_complex.json +136 -0
- package/package/components/copilot/chat/__tests__/flow/flowChat.eval.test.d.ts +1 -0
- package/package/components/copilot/chat/__tests__/flow/flowChat.eval.test.js +277 -0
- package/package/components/copilot/chat/__tests__/flow/flowEvalComparison.d.ts +17 -0
- package/package/components/copilot/chat/__tests__/flow/flowEvalComparison.js +52 -0
- package/package/components/copilot/chat/__tests__/flow/flowEvalHelpers.d.ts +12 -0
- package/package/components/copilot/chat/__tests__/flow/flowEvalHelpers.js +75 -0
- package/package/components/copilot/chat/__tests__/flow/flowEvalRunner.d.ts +41 -0
- package/package/components/copilot/chat/__tests__/flow/flowEvalRunner.js +101 -0
- package/package/components/copilot/chat/__tests__/flow/initial/test5_initial.json +53 -0
- package/package/components/copilot/chat/__tests__/flow/initial/test6_initial.json +68 -0
- package/package/components/copilot/chat/__tests__/flow/initial/test7_initial.json +120 -0
- package/package/components/copilot/chat/__tests__/flow/variants/baseline.d.ts +6 -0
- package/package/components/copilot/chat/__tests__/flow/variants/baseline.js +10 -0
- package/package/components/copilot/chat/__tests__/flow/variants/index.d.ts +3 -0
- package/package/components/copilot/chat/__tests__/flow/variants/index.js +3 -0
- package/package/components/copilot/chat/__tests__/flow/variants/minimal-single-tool.d.ts +15 -0
- package/package/components/copilot/chat/__tests__/flow/variants/minimal-single-tool.js +386 -0
- package/package/components/copilot/chat/__tests__/shared/baseEvalRunner.d.ts +48 -0
- package/package/components/copilot/chat/__tests__/shared/baseEvalRunner.js +147 -0
- package/package/components/copilot/chat/__tests__/shared/baseLLMEvaluator.d.ts +31 -0
- package/package/components/copilot/chat/__tests__/shared/baseLLMEvaluator.js +88 -0
- package/package/components/copilot/chat/__tests__/shared/baseResultsWriter.d.ts +32 -0
- package/package/components/copilot/chat/__tests__/shared/baseResultsWriter.js +130 -0
- package/package/components/copilot/chat/__tests__/shared/baseVariants.d.ts +45 -0
- package/package/components/copilot/chat/__tests__/shared/baseVariants.js +57 -0
- package/package/components/copilot/chat/__tests__/shared/index.d.ts +10 -0
- package/package/components/copilot/chat/__tests__/shared/index.js +5 -0
- package/package/components/copilot/chat/__tests__/shared/types.d.ts +102 -0
- package/package/components/copilot/chat/__tests__/shared/types.js +9 -0
- package/package/components/copilot/chat/anthropic.d.ts +1 -1
- package/package/components/copilot/chat/anthropic.js +75 -2
- package/package/components/copilot/chat/app/core.d.ts +69 -0
- package/package/components/copilot/chat/app/core.js +552 -0
- package/package/components/copilot/chat/flow/FlowAIChat.svelte +119 -477
- package/package/components/copilot/chat/flow/FlowAIChat.svelte.d.ts +1 -0
- package/package/components/copilot/chat/flow/core.d.ts +24 -127
- package/package/components/copilot/chat/flow/core.js +461 -535
- package/package/components/copilot/chat/flow/inlineScriptsUtils.d.ts +31 -0
- package/package/components/copilot/chat/flow/inlineScriptsUtils.js +271 -0
- package/package/components/copilot/chat/flow/openFlow.json +1 -0
- package/package/components/copilot/chat/flow/openFlowZod.d.ts +3 -0
- package/package/components/copilot/chat/flow/openFlowZod.js +14 -0
- package/package/components/copilot/chat/flow/utils.d.ts +12 -6
- package/package/components/copilot/chat/flow/utils.js +66 -33
- package/package/components/copilot/chat/navigator/core.js +17 -10
- package/package/components/copilot/chat/openai-responses.d.ts +16 -0
- package/package/components/copilot/chat/openai-responses.js +318 -0
- package/package/components/copilot/chat/script/core.d.ts +7 -5
- package/package/components/copilot/chat/script/core.js +41 -208
- package/package/components/copilot/chat/shared.d.ts +28 -2
- package/package/components/copilot/chat/shared.js +174 -16
- package/package/components/copilot/lib.d.ts +4 -3
- package/package/components/copilot/lib.js +169 -52
- package/package/components/copilot/prompts/edit.yaml +38 -2
- package/package/components/copilot/prompts/editPrompt.d.ts +6 -3
- package/package/components/copilot/prompts/editPrompt.js +9 -6
- package/package/components/copilot/prompts/fix.yaml +40 -1
- package/package/components/copilot/prompts/fixPrompt.d.ts +3 -0
- package/package/components/copilot/prompts/fixPrompt.js +5 -2
- package/package/components/copilot/prompts/gen.yaml +25 -1
- package/package/components/copilot/prompts/genPrompt.d.ts +7 -4
- package/package/components/copilot/prompts/genPrompt.js +9 -6
- package/package/components/custom_ui.d.ts +2 -0
- package/package/components/dbOps.d.ts +26 -23
- package/package/components/dbOps.js +49 -27
- package/package/components/dbTypes.d.ts +14 -0
- package/package/components/dbTypes.js +9 -0
- package/package/components/details/ClipboardPanel.svelte +7 -7
- package/package/components/details/CopyableCodeBlock.svelte +13 -11
- package/package/components/details/CopyableCodeBlock.svelte.d.ts +5 -18
- package/package/components/details/DetailPageDetailPanel.svelte +5 -5
- package/package/components/details/DetailPageHeader.svelte +5 -4
- package/package/components/details/DetailPageLayout.svelte +5 -5
- package/package/components/details/ErrorHandlerToggleButton.svelte +2 -2
- package/package/components/details/ErrorHandlerToggleButtonV2.svelte +4 -4
- package/package/components/details/ErrorHandlerToggleButtonV2.svelte.d.ts +1 -1
- package/package/components/details/createAppFromScript.js +2 -2
- package/package/components/ducklake.d.ts +1 -0
- package/package/components/ducklake.js +4 -0
- package/package/components/flows/CreateActionsApp.svelte +5 -6
- package/package/components/flows/CreateActionsFlow.svelte +3 -3
- package/package/components/flows/DebounceLimit.svelte +58 -0
- package/package/components/flows/DebounceLimit.svelte.d.ts +11 -0
- package/package/components/flows/FlowAssetsHandler.svelte +47 -31
- package/package/components/flows/FlowEditor.svelte +6 -1
- package/package/components/flows/FlowEditor.svelte.d.ts +2 -1
- package/package/components/flows/FlowEditorTutorial.svelte +59 -0
- package/package/components/flows/{content/FlowInputsFlowQuick.svelte.d.ts → FlowEditorTutorial.svelte.d.ts} +8 -9
- package/package/components/flows/FlowHistoryInner.svelte +6 -8
- package/package/components/flows/FlowModuleIcon.svelte +1 -1
- package/package/components/flows/FlowProgressBar.svelte +1 -1
- package/package/components/flows/agentToolUtils.d.ts +45 -0
- package/package/components/flows/agentToolUtils.js +59 -0
- package/package/components/flows/common/FlowCardHeader.svelte +31 -7
- package/package/components/flows/content/AgentToolWrapper.svelte +30 -0
- package/package/components/flows/content/AgentToolWrapper.svelte.d.ts +14 -0
- package/package/components/flows/content/BranchPredicateEditor.svelte +1 -2
- package/package/components/flows/content/DynamicInputHelpBox.svelte +6 -9
- package/package/components/flows/content/FlowBranchesAllWrapper.svelte +6 -6
- package/package/components/flows/content/FlowBranchesOneWrapper.svelte +7 -7
- package/package/components/flows/content/FlowEditorPanel.svelte +23 -17
- package/package/components/flows/content/FlowEditorPanel.svelte.d.ts +2 -1
- package/package/components/flows/content/FlowEnvironmentVariables.svelte +251 -0
- package/package/components/flows/content/FlowEnvironmentVariables.svelte.d.ts +6 -0
- package/package/components/flows/content/FlowInput.svelte +78 -45
- package/package/components/flows/content/FlowInput.svelte.d.ts +2 -1
- package/package/components/flows/content/FlowInputEditor.svelte +2 -2
- package/package/components/flows/content/FlowInputs.svelte +34 -6
- package/package/components/flows/content/FlowInputsFlow.svelte +16 -12
- package/package/components/flows/content/FlowInputsFlow.svelte.d.ts +6 -5
- package/package/components/flows/content/FlowInputsQuick.svelte +68 -70
- package/package/components/flows/content/FlowInputsQuick.svelte.d.ts +0 -1
- package/package/components/flows/content/FlowLoop.svelte +67 -31
- package/package/components/flows/content/FlowModuleCache.svelte +23 -11
- package/package/components/flows/content/FlowModuleComponent.svelte +123 -107
- package/package/components/flows/content/FlowModuleEarlyStop.svelte +8 -6
- package/package/components/flows/content/FlowModuleHeader.svelte +23 -42
- package/package/components/flows/content/FlowModuleMock.svelte +2 -1
- package/package/components/flows/content/FlowModuleScript.svelte +2 -2
- package/package/components/flows/content/FlowModuleSkip.svelte +4 -3
- package/package/components/flows/content/FlowModuleSleep.svelte +5 -4
- package/package/components/flows/content/FlowModuleSuspend.svelte +5 -12
- package/package/components/flows/content/FlowModuleTimeout.svelte +3 -3
- package/package/components/flows/content/FlowModuleWorkerTagSelect.svelte +5 -5
- package/package/components/flows/content/FlowModuleWorkerTagSelect.svelte.d.ts +1 -0
- package/package/components/flows/content/FlowModuleWrapper.svelte +27 -20
- package/package/components/flows/content/FlowResult.svelte +4 -4
- package/package/components/flows/content/FlowRetries.svelte +32 -16
- package/package/components/flows/content/FlowSelectionPanel.svelte +35 -0
- package/package/components/flows/content/FlowSelectionPanel.svelte.d.ts +8 -0
- package/package/components/flows/content/FlowSettings.svelte +121 -122
- package/package/components/flows/content/FlowWhileLoop.svelte +35 -8
- package/package/components/flows/content/GenAiQuick.svelte +1 -1
- package/package/components/flows/content/McpToolEditor.svelte +169 -0
- package/package/components/flows/content/McpToolEditor.svelte.d.ts +8 -0
- package/package/components/flows/content/ScriptEditorDrawer.svelte +3 -5
- package/package/components/flows/content/SuspendDrawer.svelte +4 -5
- package/package/components/flows/content/WebsearchToolDisplay.svelte +9 -0
- package/package/components/{FlowBuilderTutorials.svelte.d.ts → flows/content/WebsearchToolDisplay.svelte.d.ts} +4 -6
- package/package/components/flows/conversations/FlowChat.svelte +32 -0
- package/package/components/flows/conversations/FlowChat.svelte.d.ts +10 -0
- package/package/components/flows/conversations/FlowChatInterface.svelte +58 -103
- package/package/components/flows/conversations/FlowChatInterface.svelte.d.ts +3 -14
- package/package/components/flows/conversations/FlowChatManager.svelte.js +172 -69
- package/package/components/flows/conversations/FlowConversationsSidebar.svelte +31 -110
- package/package/components/flows/conversations/FlowConversationsSidebar.svelte.d.ts +3 -11
- package/package/components/flows/flowDiff.d.ts +142 -0
- package/package/components/flows/flowDiff.js +769 -0
- package/package/components/flows/flowDiff.test.d.ts +1 -0
- package/package/components/flows/flowDiff.test.js +1173 -0
- package/package/components/flows/flowDiff.testUtils.d.ts +61 -0
- package/package/components/flows/flowDiff.testUtils.js +128 -0
- package/package/components/flows/flowDiffManager.svelte.d.ts +47 -0
- package/package/components/flows/flowDiffManager.svelte.js +461 -0
- package/package/components/flows/flowDiffManager.svelte.test.d.ts +1 -0
- package/package/components/flows/flowDiffManager.svelte.test.js +1255 -0
- package/package/components/flows/flowExplorer.js +15 -0
- package/package/components/flows/flowInfers.d.ts +1 -60
- package/package/components/flows/flowInfers.js +115 -8
- package/package/components/flows/flowState.js +1 -1
- package/package/components/flows/flowStateUtils.svelte.js +10 -2
- package/package/components/flows/flowStore.svelte.d.ts +4 -0
- package/package/components/flows/header/FlowImportExportMenu.svelte +3 -4
- package/package/components/flows/header/FlowPreviewButtons.svelte +11 -12
- package/package/components/flows/header/FlowYamlEditor.svelte +5 -4
- package/package/components/flows/map/DiffActionBar.svelte +50 -0
- package/package/components/flows/map/DiffActionBar.svelte.d.ts +14 -0
- package/package/components/flows/map/FlowErrorHandlerItem.svelte +60 -54
- package/package/components/flows/map/FlowErrorHandlerItem.svelte.d.ts +2 -1
- package/package/components/flows/map/FlowGraphPreviewButton.svelte +6 -3
- package/package/components/flows/map/FlowModuleSchemaItem.svelte +91 -42
- package/package/components/flows/map/FlowModuleSchemaItem.svelte.d.ts +7 -6
- package/package/components/flows/map/FlowModuleSchemaItemViewer.svelte +32 -25
- package/package/components/flows/map/FlowModuleSchemaItemViewer.svelte.d.ts +2 -0
- package/package/components/flows/map/FlowModuleSchemaMap.svelte +91 -35
- package/package/components/flows/map/FlowModuleSchemaMap.svelte.d.ts +27 -2
- package/package/components/flows/map/FlowStickyNode.svelte +51 -38
- package/package/components/flows/map/FlowStickyNode.svelte.d.ts +4 -0
- package/package/components/flows/map/InsertModuleButton.svelte +11 -73
- package/package/components/flows/map/InsertModuleButton.svelte.d.ts +8 -34
- package/package/components/flows/map/InsertModuleInner.svelte +89 -68
- package/package/components/flows/map/InsertModuleInner.svelte.d.ts +3 -1
- package/package/components/flows/map/InsertModulePopover.svelte +41 -0
- package/package/components/{ConfirmButton.svelte.d.ts → flows/map/InsertModulePopover.svelte.d.ts} +18 -16
- package/package/components/flows/map/MapItem.svelte +33 -33
- package/package/components/flows/map/MapItem.svelte.d.ts +6 -6
- package/package/components/flows/map/VirtualItem.svelte +9 -17
- package/package/components/flows/map/VirtualItem.svelte.d.ts +1 -5
- package/package/components/flows/map/VirtualItemWrapper.svelte +11 -15
- package/package/components/flows/map/VirtualItemWrapper.svelte.d.ts +2 -3
- package/package/components/flows/pickers/FlowScriptPicker.svelte +1 -2
- package/package/components/flows/pickers/FlowScriptPickerQuick.svelte +11 -15
- package/package/components/flows/pickers/FlowToplevelNode.svelte +1 -1
- package/package/components/flows/pickers/PickHubApp.svelte +23 -19
- package/package/components/flows/pickers/PickHubApp.svelte.d.ts +9 -14
- package/package/components/flows/pickers/PickHubFlow.svelte +23 -18
- package/package/components/flows/pickers/PickHubFlow.svelte.d.ts +9 -14
- package/package/components/flows/pickers/PickHubScript.svelte +37 -28
- package/package/components/flows/pickers/PickHubScript.svelte.d.ts +2 -0
- package/package/components/flows/pickers/PickHubScriptQuick.svelte +59 -27
- package/package/components/flows/pickers/PickHubScriptQuick.svelte.d.ts +1 -1
- package/package/components/flows/pickers/TopLevelNode.svelte +34 -51
- package/package/components/flows/pickers/TopLevelNode.svelte.d.ts +7 -23
- package/package/components/flows/pickers/WorkspaceScriptPicker.svelte +31 -25
- package/package/components/flows/pickers/WorkspaceScriptPicker.svelte.d.ts +9 -17
- package/package/components/flows/pickers/WorkspaceScriptPickerQuick.svelte +22 -18
- package/package/components/flows/previousResults.d.ts +5 -1
- package/package/components/flows/previousResults.js +24 -4
- package/package/components/flows/propPicker/InputPickerInner.svelte +1 -1
- package/package/components/flows/propPicker/OutputPicker.svelte +30 -32
- package/package/components/flows/propPicker/OutputPicker.svelte.d.ts +0 -4
- package/package/components/flows/propPicker/OutputPickerInner.svelte.d.ts +2 -2
- package/package/components/flows/propPicker/PropPickerWrapper.svelte +61 -66
- package/package/components/flows/propPicker/PropPickerWrapper.svelte.d.ts +15 -23
- package/package/components/flows/propPicker/StepHistory.svelte +1 -1
- package/package/components/flows/stepsInputArgs.svelte.js +1 -1
- package/package/components/flows/types.d.ts +4 -1
- package/package/components/flows/{utils.d.ts → utils.svelte.d.ts} +2 -2
- package/package/components/flows/{utils.js → utils.svelte.js} +10 -5
- package/package/components/git_sync/DetectionFlow.svelte +7 -5
- package/package/components/git_sync/GitSyncContext.svelte.d.ts +3 -2
- package/package/components/git_sync/GitSyncContext.svelte.js +25 -8
- package/package/components/git_sync/GitSyncModeDisplay.svelte +9 -4
- package/package/components/git_sync/GitSyncModeDisplay.svelte.d.ts +1 -1
- package/package/components/git_sync/GitSyncRepositoryCard.svelte +180 -74
- package/package/components/git_sync/GitSyncSection.svelte +70 -42
- package/package/components/git_sync/PullWorkspaceModal.svelte +79 -44
- package/package/components/git_sync/PushWorkspaceModal.svelte +42 -34
- package/package/components/graph/FlowGraphV2.svelte +433 -94
- package/package/components/graph/FlowGraphV2.svelte.d.ts +48 -3
- package/package/components/graph/NodeContextMenu.svelte +36 -0
- package/package/components/graph/NodeContextMenu.svelte.d.ts +8 -0
- package/package/components/graph/NoteColorPicker.svelte +42 -0
- package/package/components/graph/NoteColorPicker.svelte.d.ts +9 -0
- package/package/components/graph/NoteTool.svelte +182 -0
- package/package/components/graph/NoteTool.svelte.d.ts +7 -0
- package/package/components/graph/PaneContextMenu.svelte +95 -0
- package/package/components/graph/PaneContextMenu.svelte.d.ts +8 -0
- package/package/components/graph/SelectionBoundingBox.svelte +68 -0
- package/package/components/graph/SelectionBoundingBox.svelte.d.ts +10 -0
- package/package/components/graph/SelectionTool.svelte +32 -0
- package/package/components/graph/SelectionTool.svelte.d.ts +8 -0
- package/package/components/graph/ViewportSynchronizer.svelte +49 -0
- package/package/components/graph/ViewportSynchronizer.svelte.d.ts +12 -0
- package/package/components/graph/graphBuilder.svelte.d.ts +7 -1
- package/package/components/graph/graphBuilder.svelte.js +8 -4
- package/package/components/graph/graphContext.d.ts +15 -0
- package/package/components/graph/graphContext.js +5 -0
- package/package/components/graph/groupDetectionUtils.d.ts +9 -0
- package/package/components/graph/groupDetectionUtils.js +73 -0
- package/package/components/graph/model.d.ts +1 -0
- package/package/components/graph/noteColors.d.ts +30 -0
- package/package/components/graph/noteColors.js +121 -0
- package/package/components/graph/noteEditor.svelte.d.ts +97 -0
- package/package/components/graph/noteEditor.svelte.js +259 -0
- package/package/components/graph/noteManager.svelte.d.ts +32 -0
- package/package/components/graph/noteManager.svelte.js +126 -0
- package/package/components/graph/noteUtils.svelte.d.ts +87 -0
- package/package/components/graph/noteUtils.svelte.js +294 -0
- package/package/components/graph/renderers/edges/BaseEdge.svelte +50 -44
- package/package/components/graph/renderers/edges/EmptyEdge.svelte +4 -3
- package/package/components/graph/renderers/nodes/AIToolNode.svelte +63 -25
- package/package/components/graph/renderers/nodes/AIToolNode.svelte.d.ts +3 -1
- package/package/components/graph/renderers/nodes/AssetNode.svelte +37 -27
- package/package/components/graph/renderers/nodes/AssetsOverflowedNode.svelte +7 -3
- package/package/components/graph/renderers/nodes/BranchAllEndNode.svelte +4 -6
- package/package/components/graph/renderers/nodes/BranchAllEndNode.svelte.d.ts +1 -0
- package/package/components/graph/renderers/nodes/BranchAllStart.svelte +4 -10
- package/package/components/graph/renderers/nodes/BranchAllStart.svelte.d.ts +1 -0
- package/package/components/graph/renderers/nodes/BranchOneStart.svelte +4 -8
- package/package/components/graph/renderers/nodes/BranchOneStart.svelte.d.ts +1 -0
- package/package/components/graph/renderers/nodes/ForLoopEndNode.svelte +4 -7
- package/package/components/graph/renderers/nodes/ForLoopEndNode.svelte.d.ts +1 -0
- package/package/components/graph/renderers/nodes/ForLoopStartNode.svelte +4 -14
- package/package/components/graph/renderers/nodes/ForLoopStartNode.svelte.d.ts +1 -0
- package/package/components/graph/renderers/nodes/InputNode.svelte +28 -13
- package/package/components/graph/renderers/nodes/ModuleNode.svelte +16 -30
- package/package/components/graph/renderers/nodes/NewAIToolNode.svelte +52 -30
- package/package/components/graph/renderers/nodes/NoBranchNode.svelte +0 -4
- package/package/components/graph/renderers/nodes/NodeWrapper.svelte +34 -22
- package/package/components/graph/renderers/nodes/NodeWrapper.svelte.d.ts +2 -0
- package/package/components/graph/renderers/nodes/NoteNode.svelte +329 -0
- package/package/components/graph/renderers/nodes/NoteNode.svelte.d.ts +16 -0
- package/package/components/graph/renderers/nodes/ResultNode.svelte +4 -10
- package/package/components/graph/renderers/nodes/ResultNode.svelte.d.ts +1 -0
- package/package/components/graph/renderers/nodes/SubflowBound.svelte +17 -17
- package/package/components/graph/renderers/nodes/SubflowBound.svelte.d.ts +1 -0
- package/package/components/graph/renderers/nodes/TriggersNode.svelte +22 -18
- package/package/components/graph/renderers/nodes/TriggersNode.svelte.d.ts +4 -18
- package/package/components/graph/renderers/nodes/branchOneEndNode.svelte +4 -6
- package/package/components/graph/renderers/nodes/branchOneEndNode.svelte.d.ts +1 -0
- package/package/components/graph/renderers/triggers/TriggersBadge.svelte +4 -4
- package/package/components/graph/renderers/triggers/TriggersWrapper.svelte +5 -11
- package/package/components/graph/renderers/triggers/TriggersWrapper.svelte.d.ts +2 -2
- package/package/components/graph/selectionUtils.svelte.d.ts +15 -0
- package/package/components/graph/selectionUtils.svelte.js +94 -0
- package/package/components/graph/util.d.ts +42 -2
- package/package/components/graph/util.js +230 -38
- package/package/components/home/ItemsList.svelte +35 -38
- package/package/components/home/ListFilters.svelte +6 -9
- package/package/components/home/ListFiltersQuick.svelte +28 -29
- package/package/components/home/NoItemFound.svelte +19 -5
- package/package/components/home/NoItemFound.svelte.d.ts +5 -25
- package/package/components/home/TreeView.svelte +17 -19
- package/package/components/home/TreeViewRoot.svelte +4 -4
- package/package/components/home/TutorialBanner.svelte +119 -0
- package/package/components/home/TutorialBanner.svelte.d.ts +3 -0
- package/package/components/home/TutorialButton.svelte +97 -0
- package/package/components/home/TutorialButton.svelte.d.ts +15 -0
- package/package/components/icons/ApifyIcon.svelte +17 -0
- package/package/components/icons/ApifyIcon.svelte.d.ts +7 -0
- package/package/components/icons/AsanaIcon.svelte +13 -1
- package/package/components/icons/AssetDatabaseIcon.svelte +23 -0
- package/package/components/icons/AssetDatabaseIcon.svelte.d.ts +9 -0
- package/package/components/icons/AssetGenericIcon.svelte +10 -10
- package/package/components/icons/AssetGenericIcon.svelte.d.ts +0 -1
- package/package/components/icons/Auth0Icon.svelte +10 -11
- package/package/components/icons/Auth0Icon.svelte.d.ts +5 -25
- package/package/components/icons/DucklakeIcon.svelte +2 -1
- package/package/components/icons/DucklakeIcon.svelte.d.ts +2 -1
- package/package/components/icons/FunnelCog.svelte +31 -0
- package/package/components/icons/FunnelCog.svelte.d.ts +11 -0
- package/package/components/icons/MSTeamsIcon.svelte +76 -2
- package/package/components/icons/MSTeamsIcon.svelte.d.ts +1 -2
- package/package/components/icons/McpIcon.svelte +18 -0
- package/package/components/icons/McpIcon.svelte.d.ts +7 -0
- package/package/components/icons/NextcloudIcon.svelte +13 -5
- package/package/components/icons/NextcloudIcon.svelte.d.ts +3 -2
- package/package/components/icons/SageIcon.svelte +10 -0
- package/package/components/icons/SageIcon.svelte.d.ts +7 -0
- package/package/components/icons/WindmillIcon.svelte +3 -1
- package/package/components/icons/WindmillIcon.svelte.d.ts +1 -0
- package/package/components/icons/ZohoIcon.svelte +30 -0
- package/package/components/icons/ZohoIcon.svelte.d.ts +7 -0
- package/package/components/icons/index.js +9 -1
- package/package/components/instanceSettings/CriticalAlertChannels.svelte +146 -0
- package/package/components/instanceSettings/CriticalAlertChannels.svelte.d.ts +9 -0
- package/package/components/instanceSettings/EmailChannelCard.svelte +91 -0
- package/package/components/instanceSettings/EmailChannelCard.svelte.d.ts +18 -0
- package/package/components/instanceSettings/IntegrationCard.svelte +48 -0
- package/package/components/instanceSettings/IntegrationCard.svelte.d.ts +13 -0
- package/package/components/instanceSettings/SlackChannelCard.svelte +96 -0
- package/package/components/instanceSettings/SlackChannelCard.svelte.d.ts +18 -0
- package/package/components/instanceSettings/SmtpSettings.svelte +167 -0
- package/package/components/instanceSettings/SmtpSettings.svelte.d.ts +9 -0
- package/package/components/instanceSettings/TeamsChannelCard.svelte +131 -0
- package/package/components/instanceSettings/TeamsChannelCard.svelte.d.ts +29 -0
- package/package/components/instanceSettings.d.ts +6 -0
- package/package/components/instanceSettings.js +29 -11
- package/package/components/jobs/JobPreview.svelte +2 -2
- package/package/components/meltComponents/MenuItem.svelte +3 -1
- package/package/components/meltComponents/MenuItem.svelte.d.ts +1 -0
- package/package/components/meltComponents/Popover.svelte +43 -12
- package/package/components/meltComponents/Popover.svelte.d.ts +3 -0
- package/package/components/meltComponents/Tooltip.svelte +2 -2
- package/package/components/preview/FlowPreviewStatus.svelte +3 -3
- package/package/components/propertyPicker/ObjectViewer.svelte +18 -19
- package/package/components/propertyPicker/PropPicker.svelte +96 -44
- package/package/components/propertyPicker/PropPicker.svelte.d.ts +1 -1
- package/package/components/propertyPicker/PropPickerResult.svelte +7 -0
- package/package/components/propertyPicker/PropPickerResult.svelte.d.ts +1 -0
- package/package/components/propertyPicker/WarningMessage.svelte +1 -1
- package/package/components/raw_apps/FileTreeNode.svelte +237 -0
- package/package/components/raw_apps/RawAppBackgroundRunner.svelte +15 -9
- package/package/components/raw_apps/RawAppBackgroundRunner.svelte.d.ts +3 -2
- package/package/components/raw_apps/RawAppEditor.svelte +385 -48
- package/package/components/raw_apps/RawAppEditor.svelte.d.ts +2 -2
- package/package/components/raw_apps/RawAppEditorHeader.svelte +29 -48
- package/package/components/raw_apps/RawAppEditorHeader.svelte.d.ts +6 -2
- package/package/components/raw_apps/RawAppHistoryList.svelte +106 -0
- package/package/components/raw_apps/RawAppHistoryList.svelte.d.ts +10 -0
- package/package/components/raw_apps/RawAppHistoryManager.svelte.d.ts +142 -0
- package/package/components/raw_apps/RawAppHistoryManager.svelte.js +314 -0
- package/package/components/raw_apps/RawAppInlineScriptEditor.svelte +114 -115
- package/package/components/raw_apps/RawAppInlineScriptEditor.svelte.d.ts +6 -4
- package/package/components/raw_apps/RawAppInlineScriptPanelList.svelte +84 -19
- package/package/components/raw_apps/RawAppInlineScriptPanelList.svelte.d.ts +2 -19
- package/package/components/raw_apps/RawAppInlineScriptRunnable.svelte +36 -40
- package/package/components/raw_apps/RawAppInlineScriptRunnable.svelte.d.ts +10 -2
- package/package/components/raw_apps/RawAppInlineScriptsPanel.svelte +33 -46
- package/package/components/raw_apps/RawAppInlineScriptsPanel.svelte.d.ts +4 -21
- package/package/components/raw_apps/RawAppInputsSpecEditor.svelte +3 -3
- package/package/components/raw_apps/RawAppModules.svelte +55 -0
- package/package/components/raw_apps/RawAppModules.svelte.d.ts +14 -0
- package/package/components/raw_apps/RawAppPreview.svelte.d.ts +2 -2
- package/package/components/raw_apps/RawAppSidebar.svelte +277 -0
- package/package/components/raw_apps/RawAppSidebar.svelte.d.ts +18 -0
- package/package/components/raw_apps/fileTreeUtils.d.ts +7 -0
- package/package/components/raw_apps/fileTreeUtils.js +54 -0
- package/package/components/raw_apps/lintStore.d.ts +33 -0
- package/package/components/raw_apps/lintStore.js +62 -0
- package/package/components/raw_apps/rawAppPolicy.d.ts +10 -0
- package/package/components/raw_apps/rawAppPolicy.js +42 -0
- package/package/components/raw_apps/utils.d.ts +11 -2
- package/package/components/raw_apps/utils.js +32 -45
- package/package/components/runs/BatchReRunOptionsPane.svelte +57 -52
- package/package/components/runs/JobRunsPreview.svelte +24 -14
- package/package/components/runs/JobsLoader.svelte +171 -135
- package/package/components/runs/JobsLoader.svelte.d.ts +5 -4
- package/package/components/runs/ManuelDatePicker.svelte +6 -12
- package/package/components/runs/ManuelDatePicker.svelte.d.ts +11 -14
- package/package/components/runs/MobileFilters.svelte +1 -1
- package/package/components/runs/PreprocessedArgsDisplay.svelte +1 -1
- package/package/components/runs/QueuePopover.svelte +1 -1
- package/package/components/runs/RunBadges.svelte +1 -1
- package/package/components/runs/RunOption.svelte +3 -1
- package/package/components/runs/RunRow.svelte +38 -61
- package/package/components/runs/RunRow.svelte.d.ts +1 -1
- package/package/components/runs/RunsBatchActionsDropdown.svelte +16 -18
- package/package/components/runs/RunsBatchActionsDropdown.svelte.d.ts +1 -1
- package/package/components/runs/RunsFilter.svelte +116 -90
- package/package/components/runs/RunsFilter.svelte.d.ts +4 -2
- package/package/components/runs/RunsQueue.svelte +17 -9
- package/package/components/runs/RunsTable.svelte +10 -8
- package/package/components/runs/RunsTable.svelte.d.ts +2 -1
- package/package/components/schema/AddPropertyForm.svelte +9 -9
- package/package/components/schema/AddPropertyFormV2.svelte +1 -2
- package/package/components/schema/EditableSchemaDrawer.svelte +3 -4
- package/package/components/schema/EditableSchemaSdkWrapper.svelte +2 -2
- package/package/components/schema/FlowPropertyEditor.svelte +6 -8
- package/package/components/schema/FlowPropertyEditor.svelte.d.ts +1 -1
- package/package/components/schema/PropertyEditor.svelte +2 -1
- package/package/components/schema/PropertyEditor.svelte.d.ts +2 -1
- package/package/components/schema/SchemaFormDND.svelte +4 -3
- package/package/components/schema/SchemaPickerRow.svelte +3 -3
- package/package/components/schema/jsonSchemaResource.svelte.js +6 -1
- package/package/components/scriptEditor/LogPanel.svelte +4 -4
- package/package/components/scripts/CreateActionsScript.svelte +5 -4
- package/package/components/search/GlobalSearchModal.svelte +11 -21
- package/package/components/search/RunsSearch.svelte +6 -6
- package/package/components/search/RunsSearch.svelte.d.ts +1 -1
- package/package/components/select/DraggableTags.svelte +4 -4
- package/package/components/select/MultiSelect.svelte +13 -9
- package/package/components/select/MultiSelect.svelte.d.ts +10 -2
- package/package/components/select/Select.svelte +28 -9
- package/package/components/select/Select.svelte.d.ts +8 -0
- package/package/components/select/SelectDropdown.svelte +20 -12
- package/package/components/select/utils.svelte.d.ts +1 -0
- package/package/components/select/utils.svelte.js +1 -2
- package/package/components/settings/AIUserSettings.svelte +7 -3
- package/package/components/settings/ChangeWorkspaceColor.svelte +6 -4
- package/package/components/settings/ChangeWorkspaceId.svelte +4 -4
- package/package/components/settings/ChangeWorkspaceName.svelte +4 -4
- package/package/components/settings/CreateToken.svelte +278 -57
- package/package/components/settings/PremiumInfo.svelte +4 -4
- package/package/components/settings/ScopeSelector.svelte +32 -33
- package/package/components/settings/TokenDisplay.svelte +50 -61
- package/package/components/settings/TokenDisplay.svelte.d.ts +1 -1
- package/package/components/settings/TokensTable.svelte +33 -34
- package/package/components/settings/UserAIPromptsSettings.svelte +31 -0
- package/package/components/settings/UserAIPromptsSettings.svelte.d.ts +3 -0
- package/package/components/settings/UserInfoSettings.svelte +37 -39
- package/package/components/settings/WorkspaceOperatorSettings.svelte +2 -2
- package/package/components/settings/WorkspaceUserSettings.svelte +12 -11
- package/package/components/sidebar/CriticalAlertModal.svelte +10 -7
- package/package/components/sidebar/CriticalAlertModalInner.svelte +4 -4
- package/package/components/sidebar/CriticalAlertTable.svelte +4 -4
- package/package/components/sidebar/MenuButton.svelte +11 -12
- package/package/components/sidebar/MenuButton.svelte.d.ts +5 -0
- package/package/components/sidebar/MenuLink.svelte +8 -33
- package/package/components/sidebar/MultiplayerMenu.svelte +1 -1
- package/package/components/sidebar/OperatorMenu.svelte +29 -20
- package/package/components/sidebar/SidebarContent.svelte +38 -11
- package/package/components/sidebar/UserMenu.svelte +2 -6
- package/package/components/sidebar/WorkspaceMenu.svelte +9 -13
- package/package/components/sidebar/changelogs.js +5 -0
- package/package/components/splitPanes/AnimatedPane.svelte +38 -0
- package/package/components/splitPanes/AnimatedPane.svelte.d.ts +12 -0
- package/package/components/sqlTypeService.d.ts +19 -0
- package/package/components/sqlTypeService.js +146 -0
- package/package/components/stepHistoryLoader.svelte.js +1 -1
- package/package/components/table/Cell.svelte +4 -3
- package/package/components/table/DataTable.svelte +1 -1
- package/package/components/table/DownloadCsv.svelte +2 -2
- package/package/components/text_input/TextInput.svelte +38 -19
- package/package/components/text_input/TextInput.svelte.d.ts +42 -9
- package/package/components/triggers/AddTriggersButton.svelte +2 -3
- package/package/components/triggers/CaptureButton.svelte +2 -3
- package/package/components/triggers/CaptureSection.svelte +88 -34
- package/package/components/triggers/CaptureSection.svelte.d.ts +3 -1
- package/package/components/triggers/CaptureTable.svelte +3 -3
- package/package/components/triggers/CaptureTable.svelte.d.ts +3 -1
- package/package/components/triggers/DeleteTriggerButton.svelte +4 -7
- package/package/components/triggers/TestTriggerConnection.svelte +1 -2
- package/package/components/triggers/TriggerEditorToolbar.svelte +23 -23
- package/package/components/triggers/TriggerEditorToolbar.svelte.d.ts +7 -3
- package/package/components/triggers/TriggerLabel.svelte +8 -30
- package/package/components/triggers/TriggerModeToggle.svelte +73 -0
- package/package/components/triggers/TriggerModeToggle.svelte.d.ts +18 -0
- package/package/components/triggers/TriggerSuspendedJobsAlert.svelte +21 -0
- package/package/components/triggers/TriggerSuspendedJobsAlert.svelte.d.ts +7 -0
- package/package/components/triggers/TriggerSuspendedJobsModal.svelte +471 -0
- package/package/components/triggers/TriggerSuspendedJobsModal.svelte.d.ts +22 -0
- package/package/components/triggers/TriggersEditor.svelte +113 -69
- package/package/components/triggers/TriggersEditor.svelte.d.ts +1 -1
- package/package/components/triggers/TriggersTable.svelte +14 -15
- package/package/components/triggers/TriggersWrapper.svelte +5 -9
- package/package/components/triggers/TriggersWrapper.svelte.d.ts +1 -1
- package/package/components/triggers/email/DefaultEmailCapture.svelte.d.ts +3 -1
- package/package/components/triggers/email/DefaultEmailConfigSection.svelte +19 -27
- package/package/components/triggers/email/DefaultEmailConfigSection.svelte.d.ts +1 -1
- package/package/components/triggers/email/DefaultEmailPanel.svelte +3 -3
- package/package/components/triggers/email/DefaultEmailPanel.svelte.d.ts +1 -1
- package/package/components/triggers/email/EmailCapture.svelte.d.ts +3 -1
- package/package/components/triggers/email/EmailTriggerEditorInner.svelte +75 -16
- package/package/components/triggers/email/utils.d.ts +1 -1
- package/package/components/triggers/email/utils.js +14 -13
- package/package/components/triggers/gcp/GcpCapture.svelte.d.ts +3 -1
- package/package/components/triggers/gcp/GcpTriggerEditorConfigSection.svelte +4 -8
- package/package/components/triggers/gcp/GcpTriggerEditorInner.svelte +60 -25
- package/package/components/triggers/gcp/utils.js +2 -2
- package/package/components/triggers/http/OpenAPISpecGenerator.svelte +8 -14
- package/package/components/triggers/http/RouteBodyTransformerOption.svelte +4 -2
- package/package/components/triggers/http/RouteCapture.svelte.d.ts +3 -1
- package/package/components/triggers/http/RouteEditorConfigSection.svelte +38 -35
- package/package/components/triggers/http/RouteEditorInner.svelte +402 -303
- package/package/components/triggers/http/RoutesGenerator.svelte +2 -3
- package/package/components/triggers/http/utils.js +5 -4
- package/package/components/triggers/kafka/KafkaCapture.svelte.d.ts +3 -1
- package/package/components/triggers/kafka/KafkaTriggerEditorInner.svelte +63 -20
- package/package/components/triggers/kafka/utils.js +2 -2
- package/package/components/triggers/mqtt/MqttCapture.svelte.d.ts +3 -1
- package/package/components/triggers/mqtt/MqttEditorConfigSection.svelte +2 -3
- package/package/components/triggers/mqtt/MqttTriggerEditorInner.svelte +58 -20
- package/package/components/triggers/mqtt/utils.js +3 -3
- package/package/components/triggers/nats/NatsCapture.svelte.d.ts +3 -1
- package/package/components/triggers/nats/NatsTriggerEditorInner.svelte +57 -19
- package/package/components/triggers/nats/utils.js +2 -2
- package/package/components/triggers/postgres/CheckPostgresRequirement.svelte +1 -2
- package/package/components/triggers/postgres/PostgresCapture.svelte.d.ts +3 -1
- package/package/components/triggers/postgres/PostgresTriggerEditorInner.svelte +79 -35
- package/package/components/triggers/postgres/PublicationPicker.svelte +3 -6
- package/package/components/triggers/postgres/RelationPicker.svelte +3 -6
- package/package/components/triggers/postgres/SlotPicker.svelte +2 -4
- package/package/components/triggers/postgres/utils.js +3 -3
- package/package/components/triggers/scheduled/ScheduledPollPanel.svelte +1 -1
- package/package/components/triggers/schedules/ScheduleEditorInner.svelte +152 -135
- package/package/components/triggers/sqs/SqsCapture.svelte.d.ts +3 -1
- package/package/components/triggers/sqs/SqsTriggerEditorConfigSection.svelte +3 -4
- package/package/components/triggers/sqs/SqsTriggerEditorInner.svelte +60 -19
- package/package/components/triggers/sqs/utils.js +3 -3
- package/package/components/triggers/testingBadge.svelte +1 -1
- package/package/components/triggers/utils.js +30 -0
- package/package/components/triggers/webhook/WebhooksCapture.svelte.d.ts +3 -1
- package/package/components/triggers/webhook/WebhooksConfigSection.svelte +124 -155
- package/package/components/triggers/webhook/WebhooksConfigSection.svelte.d.ts +1 -1
- package/package/components/triggers/webhook/WebhooksPanel.svelte +2 -2
- package/package/components/triggers/webhook/WebhooksPanel.svelte.d.ts +1 -1
- package/package/components/triggers/websocket/WebsocketCapture.svelte.d.ts +3 -1
- package/package/components/triggers/websocket/WebsocketTriggerEditorInner.svelte +67 -27
- package/package/components/triggers/websocket/utils.js +2 -2
- package/package/components/tutorials/FlowBuilderLiveTutorial.svelte +703 -0
- package/package/components/tutorials/{app/AppTutorial.svelte.d.ts → FlowBuilderLiveTutorial.svelte.d.ts} +7 -8
- package/package/components/tutorials/SkipTutorials.svelte +2 -4
- package/package/components/tutorials/TroubleshootFlowTutorial.svelte +410 -0
- package/package/components/tutorials/{FlowBuilderTutorialErrorHandler.svelte.d.ts → TroubleshootFlowTutorial.svelte.d.ts} +8 -7
- package/package/components/tutorials/TutorialControls.svelte +1 -1
- package/package/components/tutorials/TutorialProgressBar.svelte +20 -0
- package/package/components/tutorials/TutorialProgressBar.svelte.d.ts +8 -0
- package/package/components/tutorials/TutorialRouter.svelte +45 -0
- package/package/components/tutorials/TutorialRouter.svelte.d.ts +16 -0
- package/package/components/tutorials/TutorialWrapper.svelte +23 -0
- package/package/components/tutorials/TutorialWrapper.svelte.d.ts +28 -0
- package/package/components/tutorials/utils.js +6 -6
- package/package/components/tutorials/workspace/WorkspaceOnboardingTutorial.svelte +106 -0
- package/package/components/tutorials/{FlowBuilderTutorialSimpleFlow.svelte.d.ts → workspace/WorkspaceOnboardingTutorial.svelte.d.ts} +7 -8
- package/package/components/vscode.d.ts +1 -0
- package/package/components/vscode.js +12 -6
- package/package/components/wizards/AgChartWizard.svelte +1 -1
- package/package/components/wizards/AgGridWizard.svelte +55 -55
- package/package/components/wizards/DBExplorerWizard.svelte +1 -2
- package/package/components/wizards/LoggedWizardResult.svelte +3 -3
- package/package/components/wizards/TableActionsWizard.svelte +4 -10
- package/package/components/wizards/TableActionsWizard.svelte.d.ts +2 -2
- package/package/components/worker_group.js +3 -2
- package/package/components/workspaceSettings/AISettings.svelte +21 -70
- package/package/components/workspaceSettings/AISettings.svelte.d.ts +2 -1
- package/package/components/workspaceSettings/CreateWorkspace.svelte +325 -159
- package/package/components/workspaceSettings/CustomInstanceDbSelect.svelte +69 -0
- package/package/components/workspaceSettings/CustomInstanceDbSelect.svelte.d.ts +17 -0
- package/package/components/workspaceSettings/CustomInstanceDbWizardModal.svelte +188 -0
- package/package/components/workspaceSettings/CustomInstanceDbWizardModal.svelte.d.ts +19 -0
- package/package/components/workspaceSettings/DataTableSettings.svelte +256 -0
- package/package/components/workspaceSettings/DataTableSettings.svelte.d.ts +23 -0
- package/package/components/workspaceSettings/DucklakeSettings.svelte +41 -205
- package/package/components/workspaceSettings/DucklakeSettings.svelte.d.ts +1 -0
- package/package/components/workspaceSettings/GitSyncFilterSettings.svelte +42 -21
- package/package/components/workspaceSettings/ModelTokenLimits.svelte +1 -1
- package/package/components/workspaceSettings/StorageSettings.svelte +18 -17
- package/package/components/workspaceSettings/StorageSettings.svelte.d.ts +1 -0
- package/package/components/workspaceSettings/WorkspaceDependenciesSettings.svelte +365 -0
- package/package/components/workspaceSettings/WorkspaceDependenciesSettings.svelte.d.ts +3 -0
- package/package/components/workspaceSettings/utils.svelte.d.ts +1 -0
- package/package/components/workspaceSettings/utils.svelte.js +4 -0
- package/package/consts.d.ts +1 -1
- package/package/cookies.d.ts +7 -0
- package/package/cookies.js +25 -0
- package/package/gen/core/OpenAPI.js +1 -1
- package/package/gen/schemas.gen.d.ts +1053 -97
- package/package/gen/schemas.gen.js +1139 -174
- package/package/gen/services.gen.d.ts +539 -35
- package/package/gen/services.gen.js +1125 -87
- package/package/gen/types.gen.d.ts +2833 -299
- package/package/hub.d.ts +4 -0
- package/package/hub.js +2 -0
- package/package/hubPaths.json +10 -9
- package/package/infer.d.ts +27 -1
- package/package/infer.js +27 -9
- package/package/infer.svelte.d.ts +4 -0
- package/package/infer.svelte.js +70 -0
- package/package/mcpEndpointTools.d.ts +11 -0
- package/package/mcpEndpointTools.js +1414 -0
- package/package/monaco_workers/sqlTypePlugin.worker.d.ts +151 -0
- package/package/monaco_workers/sqlTypePlugin.worker.js +789 -0
- package/package/monaco_workers/sqlTypePlugin.worker.test.d.ts +1 -0
- package/package/monaco_workers/sqlTypePlugin.worker.test.js +99 -0
- package/package/rawAppWmillTs.d.ts +4 -0
- package/package/rawAppWmillTs.js +46 -0
- package/package/script_helpers.d.ts +14 -1
- package/package/script_helpers.js +205 -33
- package/package/scripts.d.ts +2 -1
- package/package/scripts.js +9 -0
- package/package/sharedUtils.d.ts +5 -0
- package/package/sharedUtils.js +7 -0
- package/package/storeUtils.js +2 -2
- package/package/stores.d.ts +3 -0
- package/package/stores.js +26 -14
- package/package/svelte5Utils.svelte.d.ts +27 -1
- package/package/svelte5Utils.svelte.js +68 -2
- package/package/test-setup.d.ts +4 -0
- package/package/test-setup.js +76 -0
- package/package/toast.d.ts +3 -0
- package/package/toast.js +3 -2
- package/package/tutorialUtils.d.ts +36 -0
- package/package/tutorialUtils.js +152 -6
- package/package/tutorials/config.d.ts +28 -0
- package/package/tutorials/config.js +103 -0
- package/package/tutorials/roleUtils.d.ts +20 -0
- package/package/tutorials/roleUtils.js +52 -0
- package/package/utils.js +164 -9
- package/package/utils.test.d.ts +1 -0
- package/package/utils.test.js +208 -0
- package/package/utils_deployable.d.ts +18 -18
- package/package/utils_deployable.js +16 -16
- package/package.json +33 -25
- package/package/components/ConfirmButton.svelte +0 -31
- package/package/components/DefaultTags.svelte +0 -24
- package/package/components/DefaultTags.svelte.d.ts +0 -7
- package/package/components/FlowBuilderTutorials.svelte +0 -79
- package/package/components/copilot/chat/flow/FlowAIButton.svelte +0 -64
- package/package/components/copilot/chat/flow/FlowAIButton.svelte.d.ts +0 -8
- package/package/components/copilot/chat/flow/ModuleAcceptReject.svelte +0 -52
- package/package/components/copilot/chat/flow/ModuleAcceptReject.svelte.d.ts +0 -10
- package/package/components/flows/content/FlowConstants.svelte +0 -120
- package/package/components/flows/content/FlowConstants.svelte.d.ts +0 -6
- package/package/components/flows/content/FlowInputsFlowQuick.svelte +0 -65
- package/package/components/flows/conversations/FlowChatManager.svelte.d.ts +0 -52
- package/package/components/flows/conversations/FlowChatMessage.svelte +0 -68
- package/package/components/flows/conversations/FlowChatMessage.svelte.d.ts +0 -7
- package/package/components/tutorials/FlowBuilderTutorialBranchAll.svelte +0 -96
- package/package/components/tutorials/FlowBuilderTutorialBranchAll.svelte.d.ts +0 -25
- package/package/components/tutorials/FlowBuilderTutorialBranchOne.svelte +0 -116
- package/package/components/tutorials/FlowBuilderTutorialBranchOne.svelte.d.ts +0 -26
- package/package/components/tutorials/FlowBuilderTutorialErrorHandler.svelte +0 -131
- package/package/components/tutorials/FlowBuilderTutorialForLoop.svelte +0 -273
- package/package/components/tutorials/FlowBuilderTutorialForLoop.svelte.d.ts +0 -26
- package/package/components/tutorials/FlowBuilderTutorialSimpleFlow.svelte +0 -280
- package/package/components/tutorials/app/AppTutorial.svelte +0 -247
- package/package/defaults.d.ts +0 -5
- package/package/defaults.js +0 -5
- package/package/utils.d.ts +0 -240
|
@@ -0,0 +1,1173 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { buildFlowTimeline, hasInputSchemaChanged } from './flowDiff';
|
|
3
|
+
import { createRawScriptModule, createIdentityModule, createForloopModule, createWhileloopModule, createBranchOneModule, createBranchAllModule, createFlow, createFlowWithSpecialModules, expectModuleOrder } from './flowDiff.testUtils';
|
|
4
|
+
describe('buildFlowTimeline', () => {
|
|
5
|
+
describe('basic detection', () => {
|
|
6
|
+
it('returns empty actions for identical flows', () => {
|
|
7
|
+
const moduleA = createRawScriptModule('a', 'console.log("hello")');
|
|
8
|
+
const beforeFlow = createFlow([moduleA]);
|
|
9
|
+
const afterFlow = createFlow([moduleA]);
|
|
10
|
+
const result = buildFlowTimeline(beforeFlow, afterFlow);
|
|
11
|
+
expect(Object.keys(result.beforeActions)).toHaveLength(0);
|
|
12
|
+
expect(Object.keys(result.afterActions)).toHaveLength(0);
|
|
13
|
+
});
|
|
14
|
+
it('detects added module', () => {
|
|
15
|
+
const moduleA = createRawScriptModule('a', 'console.log("a")');
|
|
16
|
+
const moduleB = createRawScriptModule('b', 'console.log("b")');
|
|
17
|
+
const beforeFlow = createFlow([moduleA]);
|
|
18
|
+
const afterFlow = createFlow([moduleA, moduleB]);
|
|
19
|
+
const result = buildFlowTimeline(beforeFlow, afterFlow);
|
|
20
|
+
expect(result.beforeActions).toEqual({});
|
|
21
|
+
expect(result.afterActions).toEqual({
|
|
22
|
+
b: { action: 'added', pending: false }
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
it('detects removed module', () => {
|
|
26
|
+
const moduleA = createRawScriptModule('a', 'console.log("a")');
|
|
27
|
+
const moduleB = createRawScriptModule('b', 'console.log("b")');
|
|
28
|
+
const beforeFlow = createFlow([moduleA, moduleB]);
|
|
29
|
+
const afterFlow = createFlow([moduleA]);
|
|
30
|
+
const result = buildFlowTimeline(beforeFlow, afterFlow);
|
|
31
|
+
expect(result.beforeActions).toEqual({
|
|
32
|
+
b: { action: 'removed', pending: false }
|
|
33
|
+
});
|
|
34
|
+
// By default markRemovedAsShadowed is false, so removed modules show as 'removed' in afterActions
|
|
35
|
+
expect(result.afterActions).toEqual({
|
|
36
|
+
b: { action: 'removed', pending: false }
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
it('detects modified module (same type, different content)', () => {
|
|
40
|
+
const moduleBeforeA = createRawScriptModule('a', 'console.log("before")');
|
|
41
|
+
const moduleAfterA = createRawScriptModule('a', 'console.log("after")');
|
|
42
|
+
const beforeFlow = createFlow([moduleBeforeA]);
|
|
43
|
+
const afterFlow = createFlow([moduleAfterA]);
|
|
44
|
+
const result = buildFlowTimeline(beforeFlow, afterFlow);
|
|
45
|
+
expect(result.beforeActions).toEqual({
|
|
46
|
+
a: { action: 'modified', pending: false }
|
|
47
|
+
});
|
|
48
|
+
expect(result.afterActions).toEqual({
|
|
49
|
+
a: { action: 'modified', pending: false }
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
it('treats type change as removed + added (not modified)', () => {
|
|
53
|
+
const moduleBeforeA = createRawScriptModule('a', 'console.log("script")');
|
|
54
|
+
const moduleAfterA = createIdentityModule('a');
|
|
55
|
+
const beforeFlow = createFlow([moduleBeforeA]);
|
|
56
|
+
const afterFlow = createFlow([moduleAfterA]);
|
|
57
|
+
const result = buildFlowTimeline(beforeFlow, afterFlow);
|
|
58
|
+
expect(result.beforeActions).toEqual({
|
|
59
|
+
a: { action: 'removed', pending: false }
|
|
60
|
+
});
|
|
61
|
+
// The new module is 'added', and the old module is kept in mergedFlow
|
|
62
|
+
// with a prefixed ID 'old__a' and marked as 'removed'
|
|
63
|
+
expect(result.afterActions['a']).toEqual({ action: 'added', pending: false });
|
|
64
|
+
expect(result.afterActions['old__a']).toEqual({ action: 'removed', pending: false });
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
describe('options', () => {
|
|
68
|
+
it('markAsPending sets pending: true on all actions', () => {
|
|
69
|
+
const moduleA = createRawScriptModule('a', 'console.log("a")');
|
|
70
|
+
const moduleB = createRawScriptModule('b', 'console.log("b")');
|
|
71
|
+
const beforeFlow = createFlow([moduleA]);
|
|
72
|
+
const afterFlow = createFlow([moduleB]);
|
|
73
|
+
const result = buildFlowTimeline(beforeFlow, afterFlow, {
|
|
74
|
+
markAsPending: true,
|
|
75
|
+
markRemovedAsShadowed: false
|
|
76
|
+
});
|
|
77
|
+
expect(result.beforeActions).toEqual({
|
|
78
|
+
a: { action: 'removed', pending: true }
|
|
79
|
+
});
|
|
80
|
+
expect(result.afterActions).toEqual({
|
|
81
|
+
a: { action: 'removed', pending: true },
|
|
82
|
+
b: { action: 'added', pending: true }
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
it('markRemovedAsShadowed: true shows removed as shadowed in afterActions', () => {
|
|
86
|
+
const moduleA = createRawScriptModule('a', 'console.log("a")');
|
|
87
|
+
const moduleB = createRawScriptModule('b', 'console.log("b")');
|
|
88
|
+
const beforeFlow = createFlow([moduleA, moduleB]);
|
|
89
|
+
const afterFlow = createFlow([moduleA]);
|
|
90
|
+
const result = buildFlowTimeline(beforeFlow, afterFlow, {
|
|
91
|
+
markAsPending: false,
|
|
92
|
+
markRemovedAsShadowed: true
|
|
93
|
+
});
|
|
94
|
+
expect(result.beforeActions).toEqual({
|
|
95
|
+
b: { action: 'removed', pending: false }
|
|
96
|
+
});
|
|
97
|
+
expect(result.afterActions).toEqual({
|
|
98
|
+
b: { action: 'shadowed', pending: false }
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
it('markRemovedAsShadowed: false shows removed as removed in afterActions', () => {
|
|
102
|
+
const moduleA = createRawScriptModule('a', 'console.log("a")');
|
|
103
|
+
const moduleB = createRawScriptModule('b', 'console.log("b")');
|
|
104
|
+
const beforeFlow = createFlow([moduleA, moduleB]);
|
|
105
|
+
const afterFlow = createFlow([moduleA]);
|
|
106
|
+
const result = buildFlowTimeline(beforeFlow, afterFlow, {
|
|
107
|
+
markAsPending: false,
|
|
108
|
+
markRemovedAsShadowed: false
|
|
109
|
+
});
|
|
110
|
+
expect(result.beforeActions).toEqual({
|
|
111
|
+
b: { action: 'removed', pending: false }
|
|
112
|
+
});
|
|
113
|
+
expect(result.afterActions).toEqual({
|
|
114
|
+
b: { action: 'removed', pending: false }
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
describe('mergedFlow', () => {
|
|
119
|
+
it('mergedFlow contains all modules from afterFlow', () => {
|
|
120
|
+
const moduleA = createRawScriptModule('a', 'console.log("a")');
|
|
121
|
+
const moduleB = createRawScriptModule('b', 'console.log("b")');
|
|
122
|
+
const beforeFlow = createFlow([moduleA]);
|
|
123
|
+
const afterFlow = createFlow([moduleA, moduleB]);
|
|
124
|
+
const result = buildFlowTimeline(beforeFlow, afterFlow);
|
|
125
|
+
expectModuleOrder(result.mergedFlow.modules ?? [], ['a', 'b']);
|
|
126
|
+
});
|
|
127
|
+
it('mergedFlow includes removed modules from beforeFlow', () => {
|
|
128
|
+
const moduleA = createRawScriptModule('a', 'console.log("a")');
|
|
129
|
+
const moduleB = createRawScriptModule('b', 'console.log("b")');
|
|
130
|
+
const beforeFlow = createFlow([moduleA, moduleB]);
|
|
131
|
+
const afterFlow = createFlow([moduleA]);
|
|
132
|
+
const result = buildFlowTimeline(beforeFlow, afterFlow);
|
|
133
|
+
expectModuleOrder(result.mergedFlow.modules ?? [], ['a', 'b']);
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
describe('edge cases', () => {
|
|
137
|
+
it('handles empty flows', () => {
|
|
138
|
+
const beforeFlow = createFlow([]);
|
|
139
|
+
const afterFlow = createFlow([]);
|
|
140
|
+
const result = buildFlowTimeline(beforeFlow, afterFlow);
|
|
141
|
+
expect(Object.keys(result.beforeActions)).toHaveLength(0);
|
|
142
|
+
expect(Object.keys(result.afterActions)).toHaveLength(0);
|
|
143
|
+
expect(result.mergedFlow.modules).toHaveLength(0);
|
|
144
|
+
});
|
|
145
|
+
it('handles flow with undefined modules', () => {
|
|
146
|
+
const beforeFlow = {};
|
|
147
|
+
const afterFlow = {};
|
|
148
|
+
const result = buildFlowTimeline(beforeFlow, afterFlow);
|
|
149
|
+
expect(Object.keys(result.beforeActions)).toHaveLength(0);
|
|
150
|
+
expect(Object.keys(result.afterActions)).toHaveLength(0);
|
|
151
|
+
});
|
|
152
|
+
it('handles multiple changes at once', () => {
|
|
153
|
+
const moduleA = createRawScriptModule('a', 'original');
|
|
154
|
+
const moduleB = createRawScriptModule('b', 'to be removed');
|
|
155
|
+
const moduleAModified = createRawScriptModule('a', 'modified');
|
|
156
|
+
const moduleC = createRawScriptModule('c', 'newly added');
|
|
157
|
+
const beforeFlow = createFlow([moduleA, moduleB]);
|
|
158
|
+
const afterFlow = createFlow([moduleAModified, moduleC]);
|
|
159
|
+
const result = buildFlowTimeline(beforeFlow, afterFlow);
|
|
160
|
+
// Module 'a' was modified
|
|
161
|
+
expect(result.beforeActions['a']).toEqual({ action: 'modified', pending: false });
|
|
162
|
+
expect(result.afterActions['a']).toEqual({ action: 'modified', pending: false });
|
|
163
|
+
// Module 'b' was removed
|
|
164
|
+
expect(result.beforeActions['b']).toEqual({ action: 'removed', pending: false });
|
|
165
|
+
expect(result.afterActions['b']).toEqual({ action: 'removed', pending: false });
|
|
166
|
+
// Module 'c' was added
|
|
167
|
+
expect(result.afterActions['c']).toEqual({ action: 'added', pending: false });
|
|
168
|
+
});
|
|
169
|
+
});
|
|
170
|
+
describe('forloop operations', () => {
|
|
171
|
+
it('detects added module inside forloop', () => {
|
|
172
|
+
const innerA = createRawScriptModule('inner_a', 'step a');
|
|
173
|
+
const innerB = createRawScriptModule('inner_b', 'step b');
|
|
174
|
+
const beforeLoop = createForloopModule('loop1', [innerA]);
|
|
175
|
+
const afterLoop = createForloopModule('loop1', [innerA, innerB]);
|
|
176
|
+
const beforeFlow = createFlow([beforeLoop]);
|
|
177
|
+
const afterFlow = createFlow([afterLoop]);
|
|
178
|
+
const result = buildFlowTimeline(beforeFlow, afterFlow);
|
|
179
|
+
expect(result.afterActions['inner_b']).toEqual({ action: 'added', pending: false });
|
|
180
|
+
expect(result.beforeActions['inner_b']).toBeUndefined();
|
|
181
|
+
// Verify mergedFlow contains the loop with both modules in correct order
|
|
182
|
+
expectModuleOrder(result.mergedFlow.modules ?? [], ['loop1']);
|
|
183
|
+
const mergedLoop = result.mergedFlow.modules?.find((m) => m.id === 'loop1');
|
|
184
|
+
expect(mergedLoop?.value.type).toBe('forloopflow');
|
|
185
|
+
const loopModules = (mergedLoop?.value).modules;
|
|
186
|
+
expectModuleOrder(loopModules, ['inner_a', 'inner_b']);
|
|
187
|
+
});
|
|
188
|
+
it('detects removed module from inside forloop', () => {
|
|
189
|
+
const innerA = createRawScriptModule('inner_a', 'step a');
|
|
190
|
+
const innerB = createRawScriptModule('inner_b', 'step b');
|
|
191
|
+
const beforeLoop = createForloopModule('loop1', [innerA, innerB]);
|
|
192
|
+
const afterLoop = createForloopModule('loop1', [innerA]);
|
|
193
|
+
const beforeFlow = createFlow([beforeLoop]);
|
|
194
|
+
const afterFlow = createFlow([afterLoop]);
|
|
195
|
+
const result = buildFlowTimeline(beforeFlow, afterFlow);
|
|
196
|
+
expect(result.beforeActions['inner_b']).toEqual({ action: 'removed', pending: false });
|
|
197
|
+
expect(result.afterActions['inner_b']).toEqual({ action: 'removed', pending: false });
|
|
198
|
+
// Verify removed module is in mergedFlow inside the loop at correct position
|
|
199
|
+
const mergedLoop = result.mergedFlow.modules?.find((m) => m.id === 'loop1');
|
|
200
|
+
expect(mergedLoop?.value.type).toBe('forloopflow');
|
|
201
|
+
const loopModules = (mergedLoop?.value).modules;
|
|
202
|
+
expectModuleOrder(loopModules, ['inner_a', 'inner_b']);
|
|
203
|
+
});
|
|
204
|
+
it('detects modified module inside forloop', () => {
|
|
205
|
+
const innerBefore = createRawScriptModule('inner_a', 'original code');
|
|
206
|
+
const innerAfter = createRawScriptModule('inner_a', 'modified code');
|
|
207
|
+
const beforeLoop = createForloopModule('loop1', [innerBefore]);
|
|
208
|
+
const afterLoop = createForloopModule('loop1', [innerAfter]);
|
|
209
|
+
const beforeFlow = createFlow([beforeLoop]);
|
|
210
|
+
const afterFlow = createFlow([afterLoop]);
|
|
211
|
+
const result = buildFlowTimeline(beforeFlow, afterFlow);
|
|
212
|
+
expect(result.beforeActions['inner_a']).toEqual({ action: 'modified', pending: false });
|
|
213
|
+
expect(result.afterActions['inner_a']).toEqual({ action: 'modified', pending: false });
|
|
214
|
+
// Verify mergedFlow contains the loop with the modified module
|
|
215
|
+
expectModuleOrder(result.mergedFlow.modules ?? [], ['loop1']);
|
|
216
|
+
const mergedLoop = result.mergedFlow.modules?.find((m) => m.id === 'loop1');
|
|
217
|
+
const loopModules = (mergedLoop?.value).modules;
|
|
218
|
+
expectModuleOrder(loopModules, ['inner_a']);
|
|
219
|
+
// Verify the modified content is present (from afterFlow)
|
|
220
|
+
const innerModule = loopModules.find((m) => m.id === 'inner_a');
|
|
221
|
+
expect((innerModule?.value).content).toBe('modified code');
|
|
222
|
+
});
|
|
223
|
+
it('detects removal of entire forloop with nested children', () => {
|
|
224
|
+
const innerA = createRawScriptModule('inner_a', 'step a');
|
|
225
|
+
const innerB = createRawScriptModule('inner_b', 'step b');
|
|
226
|
+
const loop = createForloopModule('loop1', [innerA, innerB]);
|
|
227
|
+
const moduleC = createRawScriptModule('c', 'step c');
|
|
228
|
+
const beforeFlow = createFlow([loop, moduleC]);
|
|
229
|
+
const afterFlow = createFlow([moduleC]);
|
|
230
|
+
const result = buildFlowTimeline(beforeFlow, afterFlow);
|
|
231
|
+
// The loop itself and all nested modules should be marked as removed
|
|
232
|
+
expect(result.beforeActions['loop1']).toEqual({ action: 'removed', pending: false });
|
|
233
|
+
expect(result.beforeActions['inner_a']).toEqual({ action: 'removed', pending: false });
|
|
234
|
+
expect(result.beforeActions['inner_b']).toEqual({ action: 'removed', pending: false });
|
|
235
|
+
// Verify mergedFlow contains the removed loop with all nested children at correct positions
|
|
236
|
+
expectModuleOrder(result.mergedFlow.modules ?? [], ['loop1', 'c']);
|
|
237
|
+
const mergedLoop = result.mergedFlow.modules?.find((m) => m.id === 'loop1');
|
|
238
|
+
expect(mergedLoop?.value.type).toBe('forloopflow');
|
|
239
|
+
const loopModules = (mergedLoop?.value).modules;
|
|
240
|
+
expectModuleOrder(loopModules, ['inner_a', 'inner_b']);
|
|
241
|
+
});
|
|
242
|
+
it('handles nested forloop inside forloop with changes at inner level', () => {
|
|
243
|
+
const deepInnerA = createRawScriptModule('deep_a', 'deep step');
|
|
244
|
+
const deepInnerB = createRawScriptModule('deep_b', 'new deep step');
|
|
245
|
+
const innerLoopBefore = createForloopModule('inner_loop', [deepInnerA]);
|
|
246
|
+
const innerLoopAfter = createForloopModule('inner_loop', [deepInnerA, deepInnerB]);
|
|
247
|
+
const outerLoopBefore = createForloopModule('outer_loop', [innerLoopBefore]);
|
|
248
|
+
const outerLoopAfter = createForloopModule('outer_loop', [innerLoopAfter]);
|
|
249
|
+
const beforeFlow = createFlow([outerLoopBefore]);
|
|
250
|
+
const afterFlow = createFlow([outerLoopAfter]);
|
|
251
|
+
const result = buildFlowTimeline(beforeFlow, afterFlow);
|
|
252
|
+
// The new nested module is detected as added
|
|
253
|
+
expect(result.afterActions['deep_b']).toEqual({ action: 'added', pending: false });
|
|
254
|
+
// Note: Container modules are marked as 'modified' because their nested content changed
|
|
255
|
+
// (deepEqual comparison includes nested modules array)
|
|
256
|
+
expect(result.beforeActions['outer_loop']).toEqual({ action: 'modified', pending: false });
|
|
257
|
+
expect(result.beforeActions['inner_loop']).toEqual({ action: 'modified', pending: false });
|
|
258
|
+
// Verify mergedFlow preserves the outer_loop → inner_loop → [deep_a, deep_b] structure
|
|
259
|
+
expectModuleOrder(result.mergedFlow.modules ?? [], ['outer_loop']);
|
|
260
|
+
const mergedOuterLoop = result.mergedFlow.modules?.find((m) => m.id === 'outer_loop');
|
|
261
|
+
expect(mergedOuterLoop?.value.type).toBe('forloopflow');
|
|
262
|
+
const outerLoopModules = (mergedOuterLoop?.value).modules;
|
|
263
|
+
expectModuleOrder(outerLoopModules, ['inner_loop']);
|
|
264
|
+
const mergedInnerLoop = outerLoopModules.find((m) => m.id === 'inner_loop');
|
|
265
|
+
expect(mergedInnerLoop?.value.type).toBe('forloopflow');
|
|
266
|
+
const innerLoopModules = (mergedInnerLoop?.value).modules;
|
|
267
|
+
expectModuleOrder(innerLoopModules, ['deep_a', 'deep_b']);
|
|
268
|
+
});
|
|
269
|
+
});
|
|
270
|
+
describe('whileloop operations', () => {
|
|
271
|
+
it('detects changes inside whileloop', () => {
|
|
272
|
+
const innerA = createRawScriptModule('while_inner_a', 'step a');
|
|
273
|
+
const innerB = createRawScriptModule('while_inner_b', 'step b');
|
|
274
|
+
const beforeLoop = createWhileloopModule('while1', [innerA]);
|
|
275
|
+
const afterLoop = createWhileloopModule('while1', [innerA, innerB]);
|
|
276
|
+
const beforeFlow = createFlow([beforeLoop]);
|
|
277
|
+
const afterFlow = createFlow([afterLoop]);
|
|
278
|
+
const result = buildFlowTimeline(beforeFlow, afterFlow);
|
|
279
|
+
expect(result.afterActions['while_inner_b']).toEqual({ action: 'added', pending: false });
|
|
280
|
+
// Verify mergedFlow contains the whileloop with both modules in correct order
|
|
281
|
+
expectModuleOrder(result.mergedFlow.modules ?? [], ['while1']);
|
|
282
|
+
const mergedLoop = result.mergedFlow.modules?.find((m) => m.id === 'while1');
|
|
283
|
+
expect(mergedLoop?.value.type).toBe('whileloopflow');
|
|
284
|
+
const loopModules = (mergedLoop?.value).modules;
|
|
285
|
+
expectModuleOrder(loopModules, ['while_inner_a', 'while_inner_b']);
|
|
286
|
+
});
|
|
287
|
+
it('handles removal of module from whileloop and restores in mergedFlow', () => {
|
|
288
|
+
const innerA = createRawScriptModule('while_a', 'step a');
|
|
289
|
+
const innerB = createRawScriptModule('while_b', 'step b');
|
|
290
|
+
const beforeLoop = createWhileloopModule('while1', [innerA, innerB]);
|
|
291
|
+
const afterLoop = createWhileloopModule('while1', [innerA]);
|
|
292
|
+
const beforeFlow = createFlow([beforeLoop]);
|
|
293
|
+
const afterFlow = createFlow([afterLoop]);
|
|
294
|
+
const result = buildFlowTimeline(beforeFlow, afterFlow);
|
|
295
|
+
expect(result.beforeActions['while_b']).toEqual({ action: 'removed', pending: false });
|
|
296
|
+
// Verify mergedFlow contains the removed module at correct position
|
|
297
|
+
const mergedLoop = result.mergedFlow.modules?.find((m) => m.id === 'while1');
|
|
298
|
+
const loopModules = (mergedLoop?.value).modules;
|
|
299
|
+
expectModuleOrder(loopModules, ['while_a', 'while_b']);
|
|
300
|
+
});
|
|
301
|
+
});
|
|
302
|
+
describe('branchone operations', () => {
|
|
303
|
+
it('detects added module in default branch', () => {
|
|
304
|
+
const defaultA = createRawScriptModule('default_a', 'default step a');
|
|
305
|
+
const defaultB = createRawScriptModule('default_b', 'default step b');
|
|
306
|
+
const beforeBranch = createBranchOneModule('branch1', [defaultA], []);
|
|
307
|
+
const afterBranch = createBranchOneModule('branch1', [defaultA, defaultB], []);
|
|
308
|
+
const beforeFlow = createFlow([beforeBranch]);
|
|
309
|
+
const afterFlow = createFlow([afterBranch]);
|
|
310
|
+
const result = buildFlowTimeline(beforeFlow, afterFlow);
|
|
311
|
+
expect(result.afterActions['default_b']).toEqual({ action: 'added', pending: false });
|
|
312
|
+
// Verify mergedFlow.branch1.default contains both modules in correct order
|
|
313
|
+
expectModuleOrder(result.mergedFlow.modules ?? [], ['branch1']);
|
|
314
|
+
const mergedBranch = result.mergedFlow.modules?.find((m) => m.id === 'branch1');
|
|
315
|
+
expect(mergedBranch?.value.type).toBe('branchone');
|
|
316
|
+
const defaultModules = (mergedBranch?.value).default;
|
|
317
|
+
expectModuleOrder(defaultModules, ['default_a', 'default_b']);
|
|
318
|
+
});
|
|
319
|
+
it('detects removed module from conditional branch', () => {
|
|
320
|
+
const branchModuleA = createRawScriptModule('branch_a', 'branch step a');
|
|
321
|
+
const branchModuleB = createRawScriptModule('branch_b', 'branch step b');
|
|
322
|
+
const beforeBranch = createBranchOneModule('branch1', [], [
|
|
323
|
+
{ expr: 'true', modules: [branchModuleA, branchModuleB] }
|
|
324
|
+
]);
|
|
325
|
+
const afterBranch = createBranchOneModule('branch1', [], [
|
|
326
|
+
{ expr: 'true', modules: [branchModuleA] }
|
|
327
|
+
]);
|
|
328
|
+
const beforeFlow = createFlow([beforeBranch]);
|
|
329
|
+
const afterFlow = createFlow([afterBranch]);
|
|
330
|
+
const result = buildFlowTimeline(beforeFlow, afterFlow);
|
|
331
|
+
expect(result.beforeActions['branch_b']).toEqual({ action: 'removed', pending: false });
|
|
332
|
+
expect(result.afterActions['branch_b']).toEqual({ action: 'removed', pending: false });
|
|
333
|
+
// Verify mergedFlow.branch1.branches[0].modules contains the removed branch_b at correct position
|
|
334
|
+
const mergedBranch = result.mergedFlow.modules?.find((m) => m.id === 'branch1');
|
|
335
|
+
const branches = (mergedBranch?.value).branches;
|
|
336
|
+
expect(branches).toHaveLength(1);
|
|
337
|
+
expectModuleOrder(branches[0].modules, ['branch_a', 'branch_b']);
|
|
338
|
+
});
|
|
339
|
+
it('detects removal of entire conditional branch', () => {
|
|
340
|
+
const defaultModule = createRawScriptModule('default_mod', 'default');
|
|
341
|
+
const branch1ModuleA = createRawScriptModule('b1_a', 'branch 1 a');
|
|
342
|
+
const branch2ModuleA = createRawScriptModule('b2_a', 'branch 2 a');
|
|
343
|
+
const branch2ModuleB = createRawScriptModule('b2_b', 'branch 2 b');
|
|
344
|
+
const beforeBranch = createBranchOneModule('branch1', [defaultModule], [
|
|
345
|
+
{ expr: 'x > 0', modules: [branch1ModuleA] },
|
|
346
|
+
{ expr: 'x < 0', modules: [branch2ModuleA, branch2ModuleB] } // entire branch removed
|
|
347
|
+
]);
|
|
348
|
+
const afterBranch = createBranchOneModule('branch1', [defaultModule], [
|
|
349
|
+
{ expr: 'x > 0', modules: [branch1ModuleA] }
|
|
350
|
+
]);
|
|
351
|
+
const beforeFlow = createFlow([beforeBranch]);
|
|
352
|
+
const afterFlow = createFlow([afterBranch]);
|
|
353
|
+
const result = buildFlowTimeline(beforeFlow, afterFlow);
|
|
354
|
+
// All modules from removed branch should be marked as removed
|
|
355
|
+
expect(result.beforeActions['b2_a']).toEqual({ action: 'removed', pending: false });
|
|
356
|
+
expect(result.beforeActions['b2_b']).toEqual({ action: 'removed', pending: false });
|
|
357
|
+
expect(result.afterActions['b2_a']).toEqual({ action: 'removed', pending: false });
|
|
358
|
+
expect(result.afterActions['b2_b']).toEqual({ action: 'removed', pending: false });
|
|
359
|
+
// Verify mergedFlow structure - should have 2 branches with removed modules restored
|
|
360
|
+
expectModuleOrder(result.mergedFlow.modules ?? [], ['branch1']);
|
|
361
|
+
const mergedBranch = result.mergedFlow.modules?.find((m) => m.id === 'branch1');
|
|
362
|
+
const branchValue = mergedBranch?.value;
|
|
363
|
+
// Default branch unchanged
|
|
364
|
+
expectModuleOrder(branchValue.default, ['default_mod']);
|
|
365
|
+
// First branch unchanged
|
|
366
|
+
expectModuleOrder(branchValue.branches[0].modules, ['b1_a']);
|
|
367
|
+
// Second branch should be restored with its modules
|
|
368
|
+
expect(branchValue.branches).toHaveLength(2);
|
|
369
|
+
expectModuleOrder(branchValue.branches[1].modules, ['b2_a', 'b2_b']);
|
|
370
|
+
});
|
|
371
|
+
it('detects changes across multiple branches simultaneously', () => {
|
|
372
|
+
const defaultModule = createRawScriptModule('default_mod', 'default');
|
|
373
|
+
const branch1ModuleA = createRawScriptModule('b1_a', 'branch 1 a');
|
|
374
|
+
const branch1ModuleB = createRawScriptModule('b1_b', 'branch 1 b - new');
|
|
375
|
+
const branch2ModuleA = createRawScriptModule('b2_a', 'branch 2 a - original');
|
|
376
|
+
const branch2ModuleAModified = createRawScriptModule('b2_a', 'branch 2 a - modified');
|
|
377
|
+
const beforeBranch = createBranchOneModule('branch1', [defaultModule], [
|
|
378
|
+
{ expr: 'x > 0', modules: [branch1ModuleA] },
|
|
379
|
+
{ expr: 'x < 0', modules: [branch2ModuleA] }
|
|
380
|
+
]);
|
|
381
|
+
const afterBranch = createBranchOneModule('branch1', [defaultModule], [
|
|
382
|
+
{ expr: 'x > 0', modules: [branch1ModuleA, branch1ModuleB] },
|
|
383
|
+
{ expr: 'x < 0', modules: [branch2ModuleAModified] }
|
|
384
|
+
]);
|
|
385
|
+
const beforeFlow = createFlow([beforeBranch]);
|
|
386
|
+
const afterFlow = createFlow([afterBranch]);
|
|
387
|
+
const result = buildFlowTimeline(beforeFlow, afterFlow);
|
|
388
|
+
// branch1ModuleB was added
|
|
389
|
+
expect(result.afterActions['b1_b']).toEqual({ action: 'added', pending: false });
|
|
390
|
+
// branch2ModuleA was modified
|
|
391
|
+
expect(result.beforeActions['b2_a']).toEqual({ action: 'modified', pending: false });
|
|
392
|
+
expect(result.afterActions['b2_a']).toEqual({ action: 'modified', pending: false });
|
|
393
|
+
// Verify mergedFlow preserves structure with correct ordering
|
|
394
|
+
expectModuleOrder(result.mergedFlow.modules ?? [], ['branch1']);
|
|
395
|
+
const mergedBranch = result.mergedFlow.modules?.find((m) => m.id === 'branch1');
|
|
396
|
+
const branchValue = mergedBranch?.value;
|
|
397
|
+
// Check default branch
|
|
398
|
+
expectModuleOrder(branchValue.default, ['default_mod']);
|
|
399
|
+
// Check first conditional branch (should have b1_a and b1_b in order)
|
|
400
|
+
expectModuleOrder(branchValue.branches[0].modules, ['b1_a', 'b1_b']);
|
|
401
|
+
// Check second conditional branch (should have modified b2_a)
|
|
402
|
+
expectModuleOrder(branchValue.branches[1].modules, ['b2_a']);
|
|
403
|
+
const b2aModule = branchValue.branches[1].modules.find((m) => m.id === 'b2_a');
|
|
404
|
+
expect((b2aModule?.value).content).toBe('branch 2 a - modified');
|
|
405
|
+
});
|
|
406
|
+
it('handles nested branch inside loop with changes', () => {
|
|
407
|
+
const branchInnerA = createRawScriptModule('nested_branch_a', 'nested a');
|
|
408
|
+
const branchInnerB = createRawScriptModule('nested_branch_b', 'nested b');
|
|
409
|
+
const beforeBranch = createBranchOneModule('inner_branch', [branchInnerA], []);
|
|
410
|
+
const afterBranch = createBranchOneModule('inner_branch', [branchInnerA, branchInnerB], []);
|
|
411
|
+
const beforeLoop = createForloopModule('outer_loop', [beforeBranch]);
|
|
412
|
+
const afterLoop = createForloopModule('outer_loop', [afterBranch]);
|
|
413
|
+
const beforeFlow = createFlow([beforeLoop]);
|
|
414
|
+
const afterFlow = createFlow([afterLoop]);
|
|
415
|
+
const result = buildFlowTimeline(beforeFlow, afterFlow);
|
|
416
|
+
expect(result.afterActions['nested_branch_b']).toEqual({ action: 'added', pending: false });
|
|
417
|
+
// Verify mergedFlow.outer_loop.inner_branch.default contains added nested_branch_b at correct position
|
|
418
|
+
expectModuleOrder(result.mergedFlow.modules ?? [], ['outer_loop']);
|
|
419
|
+
const mergedLoop = result.mergedFlow.modules?.find((m) => m.id === 'outer_loop');
|
|
420
|
+
const loopModules = (mergedLoop?.value).modules;
|
|
421
|
+
expectModuleOrder(loopModules, ['inner_branch']);
|
|
422
|
+
const mergedBranch = loopModules.find((m) => m.id === 'inner_branch');
|
|
423
|
+
const branchDefault = (mergedBranch?.value).default;
|
|
424
|
+
expectModuleOrder(branchDefault, ['nested_branch_a', 'nested_branch_b']);
|
|
425
|
+
});
|
|
426
|
+
});
|
|
427
|
+
describe('branchall operations', () => {
|
|
428
|
+
it('detects changes in parallel branches', () => {
|
|
429
|
+
const parallel1A = createRawScriptModule('p1_a', 'parallel 1 a');
|
|
430
|
+
const parallel2A = createRawScriptModule('p2_a', 'parallel 2 a');
|
|
431
|
+
const parallel2B = createRawScriptModule('p2_b', 'parallel 2 b - new');
|
|
432
|
+
const beforeBranchAll = createBranchAllModule('branchall1', [
|
|
433
|
+
{ modules: [parallel1A] },
|
|
434
|
+
{ modules: [parallel2A] }
|
|
435
|
+
]);
|
|
436
|
+
const afterBranchAll = createBranchAllModule('branchall1', [
|
|
437
|
+
{ modules: [parallel1A] },
|
|
438
|
+
{ modules: [parallel2A, parallel2B] }
|
|
439
|
+
]);
|
|
440
|
+
const beforeFlow = createFlow([beforeBranchAll]);
|
|
441
|
+
const afterFlow = createFlow([afterBranchAll]);
|
|
442
|
+
const result = buildFlowTimeline(beforeFlow, afterFlow);
|
|
443
|
+
expect(result.afterActions['p2_b']).toEqual({ action: 'added', pending: false });
|
|
444
|
+
// Verify mergedFlow.branchall1.branches have correct module order
|
|
445
|
+
expectModuleOrder(result.mergedFlow.modules ?? [], ['branchall1']);
|
|
446
|
+
const mergedBranchAll = result.mergedFlow.modules?.find((m) => m.id === 'branchall1');
|
|
447
|
+
expect(mergedBranchAll?.value.type).toBe('branchall');
|
|
448
|
+
const branches = (mergedBranchAll?.value).branches;
|
|
449
|
+
expect(branches).toHaveLength(2);
|
|
450
|
+
// First branch unchanged
|
|
451
|
+
expectModuleOrder(branches[0].modules, ['p1_a']);
|
|
452
|
+
// Second branch has added module in correct order
|
|
453
|
+
expectModuleOrder(branches[1].modules, ['p2_a', 'p2_b']);
|
|
454
|
+
});
|
|
455
|
+
it('detects removal of entire branchall with all nested modules', () => {
|
|
456
|
+
const parallel1A = createRawScriptModule('p1_a', 'parallel 1');
|
|
457
|
+
const parallel2A = createRawScriptModule('p2_a', 'parallel 2');
|
|
458
|
+
const branchAll = createBranchAllModule('branchall1', [
|
|
459
|
+
{ modules: [parallel1A] },
|
|
460
|
+
{ modules: [parallel2A] }
|
|
461
|
+
]);
|
|
462
|
+
const moduleC = createRawScriptModule('c', 'step c');
|
|
463
|
+
const beforeFlow = createFlow([branchAll, moduleC]);
|
|
464
|
+
const afterFlow = createFlow([moduleC]);
|
|
465
|
+
const result = buildFlowTimeline(beforeFlow, afterFlow);
|
|
466
|
+
expect(result.beforeActions['branchall1']).toEqual({ action: 'removed', pending: false });
|
|
467
|
+
expect(result.beforeActions['p1_a']).toEqual({ action: 'removed', pending: false });
|
|
468
|
+
expect(result.beforeActions['p2_a']).toEqual({ action: 'removed', pending: false });
|
|
469
|
+
// Verify mergedFlow contains the removed branchall with correct structure
|
|
470
|
+
expectModuleOrder(result.mergedFlow.modules ?? [], ['branchall1', 'c']);
|
|
471
|
+
const mergedBranchAll = result.mergedFlow.modules?.find((m) => m.id === 'branchall1');
|
|
472
|
+
expect(mergedBranchAll?.value.type).toBe('branchall');
|
|
473
|
+
const branches = (mergedBranchAll?.value).branches;
|
|
474
|
+
expect(branches).toHaveLength(2);
|
|
475
|
+
expectModuleOrder(branches[0].modules, ['p1_a']);
|
|
476
|
+
expectModuleOrder(branches[1].modules, ['p2_a']);
|
|
477
|
+
});
|
|
478
|
+
it('handles removal from one parallel branch while adding to another', () => {
|
|
479
|
+
const parallel1A = createRawScriptModule('p1_a', 'parallel 1 a');
|
|
480
|
+
const parallel1B = createRawScriptModule('p1_b', 'parallel 1 b - to remove');
|
|
481
|
+
const parallel2A = createRawScriptModule('p2_a', 'parallel 2 a');
|
|
482
|
+
const parallel2B = createRawScriptModule('p2_b', 'parallel 2 b - new');
|
|
483
|
+
const beforeBranchAll = createBranchAllModule('branchall1', [
|
|
484
|
+
{ modules: [parallel1A, parallel1B] },
|
|
485
|
+
{ modules: [parallel2A] }
|
|
486
|
+
]);
|
|
487
|
+
const afterBranchAll = createBranchAllModule('branchall1', [
|
|
488
|
+
{ modules: [parallel1A] },
|
|
489
|
+
{ modules: [parallel2A, parallel2B] }
|
|
490
|
+
]);
|
|
491
|
+
const beforeFlow = createFlow([beforeBranchAll]);
|
|
492
|
+
const afterFlow = createFlow([afterBranchAll]);
|
|
493
|
+
const result = buildFlowTimeline(beforeFlow, afterFlow);
|
|
494
|
+
expect(result.beforeActions['p1_b']).toEqual({ action: 'removed', pending: false });
|
|
495
|
+
expect(result.afterActions['p2_b']).toEqual({ action: 'added', pending: false });
|
|
496
|
+
// Verify mergedFlow.branchall1 has correct structure with all modules in order
|
|
497
|
+
expectModuleOrder(result.mergedFlow.modules ?? [], ['branchall1']);
|
|
498
|
+
const mergedBranchAll = result.mergedFlow.modules?.find((m) => m.id === 'branchall1');
|
|
499
|
+
const branches = (mergedBranchAll?.value).branches;
|
|
500
|
+
expect(branches).toHaveLength(2);
|
|
501
|
+
// First branch should have both p1_a and removed p1_b restored in order
|
|
502
|
+
expectModuleOrder(branches[0].modules, ['p1_a', 'p1_b']);
|
|
503
|
+
// Second branch should have p2_a and added p2_b in order
|
|
504
|
+
expectModuleOrder(branches[1].modules, ['p2_a', 'p2_b']);
|
|
505
|
+
});
|
|
506
|
+
});
|
|
507
|
+
describe('deep nesting', () => {
|
|
508
|
+
it('handles loop inside branch inside loop with modifications at each level', () => {
|
|
509
|
+
// Structure: outerLoop -> branch -> innerLoop -> scripts
|
|
510
|
+
const deepScript1 = createRawScriptModule('deep1', 'deep script 1');
|
|
511
|
+
const deepScript2 = createRawScriptModule('deep2', 'deep script 2');
|
|
512
|
+
const deepScript3 = createRawScriptModule('deep3', 'deep script 3 - new');
|
|
513
|
+
const innerLoopBefore = createForloopModule('inner_loop', [deepScript1, deepScript2]);
|
|
514
|
+
const innerLoopAfter = createForloopModule('inner_loop', [deepScript1, deepScript3]);
|
|
515
|
+
const branchBefore = createBranchOneModule('mid_branch', [innerLoopBefore], []);
|
|
516
|
+
const branchAfter = createBranchOneModule('mid_branch', [innerLoopAfter], []);
|
|
517
|
+
const outerLoopBefore = createForloopModule('outer_loop', [branchBefore]);
|
|
518
|
+
const outerLoopAfter = createForloopModule('outer_loop', [branchAfter]);
|
|
519
|
+
const beforeFlow = createFlow([outerLoopBefore]);
|
|
520
|
+
const afterFlow = createFlow([outerLoopAfter]);
|
|
521
|
+
const result = buildFlowTimeline(beforeFlow, afterFlow);
|
|
522
|
+
// deep2 was removed
|
|
523
|
+
expect(result.beforeActions['deep2']).toEqual({ action: 'removed', pending: false });
|
|
524
|
+
// deep3 was added
|
|
525
|
+
expect(result.afterActions['deep3']).toEqual({ action: 'added', pending: false });
|
|
526
|
+
// Note: Container modules are marked as 'modified' because their nested content changed
|
|
527
|
+
// (deepEqual comparison includes nested modules array)
|
|
528
|
+
expect(result.beforeActions['outer_loop']).toEqual({ action: 'modified', pending: false });
|
|
529
|
+
expect(result.beforeActions['mid_branch']).toEqual({ action: 'modified', pending: false });
|
|
530
|
+
expect(result.beforeActions['inner_loop']).toEqual({ action: 'modified', pending: false });
|
|
531
|
+
// Verify full structure with correct ordering at each level
|
|
532
|
+
expectModuleOrder(result.mergedFlow.modules ?? [], ['outer_loop']);
|
|
533
|
+
const mergedOuterLoop = result.mergedFlow.modules?.find((m) => m.id === 'outer_loop');
|
|
534
|
+
expect(mergedOuterLoop?.value.type).toBe('forloopflow');
|
|
535
|
+
const outerLoopModules = (mergedOuterLoop?.value).modules;
|
|
536
|
+
expectModuleOrder(outerLoopModules, ['mid_branch']);
|
|
537
|
+
const mergedMidBranch = outerLoopModules.find((m) => m.id === 'mid_branch');
|
|
538
|
+
expect(mergedMidBranch?.value.type).toBe('branchone');
|
|
539
|
+
const midBranchDefault = (mergedMidBranch?.value).default;
|
|
540
|
+
expectModuleOrder(midBranchDefault, ['inner_loop']);
|
|
541
|
+
const mergedInnerLoop = midBranchDefault.find((m) => m.id === 'inner_loop');
|
|
542
|
+
expect(mergedInnerLoop?.value.type).toBe('forloopflow');
|
|
543
|
+
const innerLoopModules = (mergedInnerLoop?.value).modules;
|
|
544
|
+
// deep1 is unchanged, deep2 was removed (but restored in mergedFlow), deep3 was added
|
|
545
|
+
expectModuleOrder(innerLoopModules, ['deep1', 'deep2', 'deep3']);
|
|
546
|
+
});
|
|
547
|
+
it('handles complex scenario with multiple nested structures and simultaneous changes', () => {
|
|
548
|
+
// Before: loop1 -> [scriptA, branch1 -> [scriptB, scriptC]]
|
|
549
|
+
// After: loop1 -> [scriptA_modified, branch1 -> [scriptB, scriptD]]
|
|
550
|
+
const scriptA = createRawScriptModule('a', 'script a original');
|
|
551
|
+
const scriptAModified = createRawScriptModule('a', 'script a modified');
|
|
552
|
+
const scriptB = createRawScriptModule('b', 'script b');
|
|
553
|
+
const scriptC = createRawScriptModule('c', 'script c - to remove');
|
|
554
|
+
const scriptD = createRawScriptModule('d', 'script d - new');
|
|
555
|
+
const branchBefore = createBranchOneModule('branch1', [scriptB, scriptC], []);
|
|
556
|
+
const branchAfter = createBranchOneModule('branch1', [scriptB, scriptD], []);
|
|
557
|
+
const loopBefore = createForloopModule('loop1', [scriptA, branchBefore]);
|
|
558
|
+
const loopAfter = createForloopModule('loop1', [scriptAModified, branchAfter]);
|
|
559
|
+
const beforeFlow = createFlow([loopBefore]);
|
|
560
|
+
const afterFlow = createFlow([loopAfter]);
|
|
561
|
+
const result = buildFlowTimeline(beforeFlow, afterFlow);
|
|
562
|
+
// scriptA was modified
|
|
563
|
+
expect(result.beforeActions['a']).toEqual({ action: 'modified', pending: false });
|
|
564
|
+
expect(result.afterActions['a']).toEqual({ action: 'modified', pending: false });
|
|
565
|
+
// scriptC was removed
|
|
566
|
+
expect(result.beforeActions['c']).toEqual({ action: 'removed', pending: false });
|
|
567
|
+
// scriptD was added
|
|
568
|
+
expect(result.afterActions['d']).toEqual({ action: 'added', pending: false });
|
|
569
|
+
// scriptB unchanged
|
|
570
|
+
expect(result.beforeActions['b']).toBeUndefined();
|
|
571
|
+
expect(result.afterActions['b']).toBeUndefined();
|
|
572
|
+
// Verify mergedFlow structure with correct ordering
|
|
573
|
+
expectModuleOrder(result.mergedFlow.modules ?? [], ['loop1']);
|
|
574
|
+
const mergedLoop = result.mergedFlow.modules?.find((m) => m.id === 'loop1');
|
|
575
|
+
const loopModules = (mergedLoop?.value).modules;
|
|
576
|
+
expectModuleOrder(loopModules, ['a', 'branch1']);
|
|
577
|
+
// Modified scriptA should be in mergedFlow with updated content
|
|
578
|
+
const mergedA = loopModules.find((m) => m.id === 'a');
|
|
579
|
+
expect((mergedA?.value).content).toBe('script a modified');
|
|
580
|
+
// Branch1 should contain scriptB, removed c, and added d in correct order
|
|
581
|
+
const mergedBranch = loopModules.find((m) => m.id === 'branch1');
|
|
582
|
+
const branchDefault = (mergedBranch?.value).default;
|
|
583
|
+
expectModuleOrder(branchDefault, ['b', 'c', 'd']);
|
|
584
|
+
});
|
|
585
|
+
it('preserves correct structure in mergedFlow for deeply nested removals', () => {
|
|
586
|
+
// Remove a script from inside a loop that is inside a branch
|
|
587
|
+
const deepScript = createRawScriptModule('deep', 'deep script to remove');
|
|
588
|
+
const keepScript = createRawScriptModule('keep', 'script to keep');
|
|
589
|
+
const innerLoopBefore = createForloopModule('inner_loop', [deepScript, keepScript]);
|
|
590
|
+
const innerLoopAfter = createForloopModule('inner_loop', [keepScript]);
|
|
591
|
+
const branchBefore = createBranchOneModule('branch', [innerLoopBefore], []);
|
|
592
|
+
const branchAfter = createBranchOneModule('branch', [innerLoopAfter], []);
|
|
593
|
+
const beforeFlow = createFlow([branchBefore]);
|
|
594
|
+
const afterFlow = createFlow([branchAfter]);
|
|
595
|
+
const result = buildFlowTimeline(beforeFlow, afterFlow);
|
|
596
|
+
// Navigate into the merged flow structure and verify correct ordering
|
|
597
|
+
expectModuleOrder(result.mergedFlow.modules ?? [], ['branch']);
|
|
598
|
+
const mergedBranch = result.mergedFlow.modules?.find((m) => m.id === 'branch');
|
|
599
|
+
const branchDefault = (mergedBranch?.value).default;
|
|
600
|
+
expectModuleOrder(branchDefault, ['inner_loop']);
|
|
601
|
+
const mergedInnerLoop = branchDefault.find((m) => m.id === 'inner_loop');
|
|
602
|
+
const innerLoopModules = (mergedInnerLoop?.value).modules;
|
|
603
|
+
// Both modules should be present in the merged flow in correct order
|
|
604
|
+
expectModuleOrder(innerLoopModules, ['deep', 'keep']);
|
|
605
|
+
});
|
|
606
|
+
it('handles branchall inside branchone with nested changes', () => {
|
|
607
|
+
const scriptInParallel1 = createRawScriptModule('par1', 'parallel 1');
|
|
608
|
+
const scriptInParallel2 = createRawScriptModule('par2', 'parallel 2');
|
|
609
|
+
const scriptInParallel3 = createRawScriptModule('par3', 'parallel 3 - new');
|
|
610
|
+
const branchAllBefore = createBranchAllModule('parallel_section', [
|
|
611
|
+
{ modules: [scriptInParallel1] },
|
|
612
|
+
{ modules: [scriptInParallel2] }
|
|
613
|
+
]);
|
|
614
|
+
const branchAllAfter = createBranchAllModule('parallel_section', [
|
|
615
|
+
{ modules: [scriptInParallel1] },
|
|
616
|
+
{ modules: [scriptInParallel2, scriptInParallel3] }
|
|
617
|
+
]);
|
|
618
|
+
const branchOneBefore = createBranchOneModule('outer_branch', [branchAllBefore], [
|
|
619
|
+
{ expr: 'x > 0', modules: [] }
|
|
620
|
+
]);
|
|
621
|
+
const branchOneAfter = createBranchOneModule('outer_branch', [branchAllAfter], [
|
|
622
|
+
{ expr: 'x > 0', modules: [] }
|
|
623
|
+
]);
|
|
624
|
+
const beforeFlow = createFlow([branchOneBefore]);
|
|
625
|
+
const afterFlow = createFlow([branchOneAfter]);
|
|
626
|
+
const result = buildFlowTimeline(beforeFlow, afterFlow);
|
|
627
|
+
expect(result.afterActions['par3']).toEqual({ action: 'added', pending: false });
|
|
628
|
+
// Other modules unchanged
|
|
629
|
+
expect(result.beforeActions['par1']).toBeUndefined();
|
|
630
|
+
expect(result.beforeActions['par2']).toBeUndefined();
|
|
631
|
+
// Verify full nested structure is preserved in mergedFlow with correct ordering
|
|
632
|
+
expectModuleOrder(result.mergedFlow.modules ?? [], ['outer_branch']);
|
|
633
|
+
const mergedBranchOne = result.mergedFlow.modules?.find((m) => m.id === 'outer_branch');
|
|
634
|
+
expect(mergedBranchOne?.value.type).toBe('branchone');
|
|
635
|
+
const branchOneDefault = (mergedBranchOne?.value).default;
|
|
636
|
+
expectModuleOrder(branchOneDefault, ['parallel_section']);
|
|
637
|
+
const mergedBranchAll = branchOneDefault.find((m) => m.id === 'parallel_section');
|
|
638
|
+
expect(mergedBranchAll?.value.type).toBe('branchall');
|
|
639
|
+
const parallelBranches = (mergedBranchAll?.value).branches;
|
|
640
|
+
expect(parallelBranches).toHaveLength(2);
|
|
641
|
+
// First parallel branch has par1
|
|
642
|
+
expectModuleOrder(parallelBranches[0].modules, ['par1']);
|
|
643
|
+
// Second parallel branch has par2 and added par3 in correct order
|
|
644
|
+
expectModuleOrder(parallelBranches[1].modules, ['par2', 'par3']);
|
|
645
|
+
});
|
|
646
|
+
});
|
|
647
|
+
describe('special modules', () => {
|
|
648
|
+
it('detects added failure_module', () => {
|
|
649
|
+
const moduleA = createRawScriptModule('a', 'main step');
|
|
650
|
+
const failureModule = createRawScriptModule('failure', 'handle failure');
|
|
651
|
+
const beforeFlow = createFlowWithSpecialModules({ modules: [moduleA] });
|
|
652
|
+
const afterFlow = createFlowWithSpecialModules({
|
|
653
|
+
modules: [moduleA],
|
|
654
|
+
failure_module: failureModule
|
|
655
|
+
});
|
|
656
|
+
const result = buildFlowTimeline(beforeFlow, afterFlow);
|
|
657
|
+
expect(result.afterActions['failure']).toEqual({ action: 'added', pending: false });
|
|
658
|
+
expect(result.beforeActions['failure']).toBeUndefined();
|
|
659
|
+
// Verify mergedFlow contains the failure_module
|
|
660
|
+
expect(result.mergedFlow.failure_module?.id).toBe('failure');
|
|
661
|
+
});
|
|
662
|
+
it('detects removed failure_module', () => {
|
|
663
|
+
const moduleA = createRawScriptModule('a', 'main step');
|
|
664
|
+
const failureModule = createRawScriptModule('failure', 'handle failure');
|
|
665
|
+
const beforeFlow = createFlowWithSpecialModules({
|
|
666
|
+
modules: [moduleA],
|
|
667
|
+
failure_module: failureModule
|
|
668
|
+
});
|
|
669
|
+
const afterFlow = createFlowWithSpecialModules({ modules: [moduleA] });
|
|
670
|
+
const result = buildFlowTimeline(beforeFlow, afterFlow);
|
|
671
|
+
expect(result.beforeActions['failure']).toEqual({ action: 'removed', pending: false });
|
|
672
|
+
expect(result.afterActions['failure']).toEqual({ action: 'removed', pending: false });
|
|
673
|
+
// Verify mergedFlow contains the removed failure_module
|
|
674
|
+
expect(result.mergedFlow.failure_module?.id).toBe('failure');
|
|
675
|
+
});
|
|
676
|
+
it('detects modified failure_module', () => {
|
|
677
|
+
const moduleA = createRawScriptModule('a', 'main step');
|
|
678
|
+
const failureModuleBefore = createRawScriptModule('failure', 'handle failure v1');
|
|
679
|
+
const failureModuleAfter = createRawScriptModule('failure', 'handle failure v2');
|
|
680
|
+
const beforeFlow = createFlowWithSpecialModules({
|
|
681
|
+
modules: [moduleA],
|
|
682
|
+
failure_module: failureModuleBefore
|
|
683
|
+
});
|
|
684
|
+
const afterFlow = createFlowWithSpecialModules({
|
|
685
|
+
modules: [moduleA],
|
|
686
|
+
failure_module: failureModuleAfter
|
|
687
|
+
});
|
|
688
|
+
const result = buildFlowTimeline(beforeFlow, afterFlow);
|
|
689
|
+
expect(result.beforeActions['failure']).toEqual({ action: 'modified', pending: false });
|
|
690
|
+
expect(result.afterActions['failure']).toEqual({ action: 'modified', pending: false });
|
|
691
|
+
// Verify mergedFlow contains the modified failure_module with new content
|
|
692
|
+
expect(result.mergedFlow.failure_module?.id).toBe('failure');
|
|
693
|
+
expect((result.mergedFlow.failure_module?.value).content).toBe('handle failure v2');
|
|
694
|
+
});
|
|
695
|
+
it('detects added preprocessor_module', () => {
|
|
696
|
+
const moduleA = createRawScriptModule('a', 'main step');
|
|
697
|
+
const preprocessorModule = createRawScriptModule('preprocessor', 'preprocess input');
|
|
698
|
+
const beforeFlow = createFlowWithSpecialModules({ modules: [moduleA] });
|
|
699
|
+
const afterFlow = createFlowWithSpecialModules({
|
|
700
|
+
modules: [moduleA],
|
|
701
|
+
preprocessor_module: preprocessorModule
|
|
702
|
+
});
|
|
703
|
+
const result = buildFlowTimeline(beforeFlow, afterFlow);
|
|
704
|
+
expect(result.afterActions['preprocessor']).toEqual({ action: 'added', pending: false });
|
|
705
|
+
expect(result.beforeActions['preprocessor']).toBeUndefined();
|
|
706
|
+
// Verify mergedFlow contains the preprocessor_module
|
|
707
|
+
expect(result.mergedFlow.preprocessor_module?.id).toBe('preprocessor');
|
|
708
|
+
});
|
|
709
|
+
it('detects removed preprocessor_module', () => {
|
|
710
|
+
const moduleA = createRawScriptModule('a', 'main step');
|
|
711
|
+
const preprocessorModule = createRawScriptModule('preprocessor', 'preprocess input');
|
|
712
|
+
const beforeFlow = createFlowWithSpecialModules({
|
|
713
|
+
modules: [moduleA],
|
|
714
|
+
preprocessor_module: preprocessorModule
|
|
715
|
+
});
|
|
716
|
+
const afterFlow = createFlowWithSpecialModules({ modules: [moduleA] });
|
|
717
|
+
const result = buildFlowTimeline(beforeFlow, afterFlow);
|
|
718
|
+
expect(result.beforeActions['preprocessor']).toEqual({ action: 'removed', pending: false });
|
|
719
|
+
expect(result.afterActions['preprocessor']).toEqual({ action: 'removed', pending: false });
|
|
720
|
+
// Verify mergedFlow contains the removed preprocessor_module
|
|
721
|
+
expect(result.mergedFlow.preprocessor_module?.id).toBe('preprocessor');
|
|
722
|
+
});
|
|
723
|
+
it('detects changes to both failure and preprocessor modules simultaneously', () => {
|
|
724
|
+
const moduleA = createRawScriptModule('a', 'main step');
|
|
725
|
+
const failureModuleBefore = createRawScriptModule('failure', 'handle failure v1');
|
|
726
|
+
const failureModuleAfter = createRawScriptModule('failure', 'handle failure v2');
|
|
727
|
+
const preprocessorModule = createRawScriptModule('preprocessor', 'preprocess input');
|
|
728
|
+
const beforeFlow = createFlowWithSpecialModules({
|
|
729
|
+
modules: [moduleA],
|
|
730
|
+
failure_module: failureModuleBefore,
|
|
731
|
+
preprocessor_module: preprocessorModule
|
|
732
|
+
});
|
|
733
|
+
const afterFlow = createFlowWithSpecialModules({
|
|
734
|
+
modules: [moduleA],
|
|
735
|
+
failure_module: failureModuleAfter
|
|
736
|
+
// preprocessor_module removed
|
|
737
|
+
});
|
|
738
|
+
const result = buildFlowTimeline(beforeFlow, afterFlow);
|
|
739
|
+
// failure_module was modified
|
|
740
|
+
expect(result.beforeActions['failure']).toEqual({ action: 'modified', pending: false });
|
|
741
|
+
expect(result.afterActions['failure']).toEqual({ action: 'modified', pending: false });
|
|
742
|
+
// preprocessor_module was removed
|
|
743
|
+
expect(result.beforeActions['preprocessor']).toEqual({ action: 'removed', pending: false });
|
|
744
|
+
expect(result.afterActions['preprocessor']).toEqual({ action: 'removed', pending: false });
|
|
745
|
+
// Verify mergedFlow structure
|
|
746
|
+
expect(result.mergedFlow.failure_module?.id).toBe('failure');
|
|
747
|
+
expect(result.mergedFlow.preprocessor_module?.id).toBe('preprocessor');
|
|
748
|
+
});
|
|
749
|
+
});
|
|
750
|
+
describe('branchall entire branch removal', () => {
|
|
751
|
+
it('detects removal of entire parallel branch from branchall', () => {
|
|
752
|
+
const parallel1A = createRawScriptModule('p1_a', 'parallel 1 a');
|
|
753
|
+
const parallel1B = createRawScriptModule('p1_b', 'parallel 1 b');
|
|
754
|
+
const parallel2A = createRawScriptModule('p2_a', 'parallel 2 a');
|
|
755
|
+
const beforeBranchAll = createBranchAllModule('branchall1', [
|
|
756
|
+
{ modules: [parallel1A, parallel1B] },
|
|
757
|
+
{ modules: [parallel2A] } // entire branch removed
|
|
758
|
+
]);
|
|
759
|
+
const afterBranchAll = createBranchAllModule('branchall1', [
|
|
760
|
+
{ modules: [parallel1A, parallel1B] }
|
|
761
|
+
]);
|
|
762
|
+
const beforeFlow = createFlow([beforeBranchAll]);
|
|
763
|
+
const afterFlow = createFlow([afterBranchAll]);
|
|
764
|
+
const result = buildFlowTimeline(beforeFlow, afterFlow);
|
|
765
|
+
// Module from removed branch should be marked as removed
|
|
766
|
+
expect(result.beforeActions['p2_a']).toEqual({ action: 'removed', pending: false });
|
|
767
|
+
expect(result.afterActions['p2_a']).toEqual({ action: 'removed', pending: false });
|
|
768
|
+
// Modules from preserved branch should be unchanged
|
|
769
|
+
expect(result.beforeActions['p1_a']).toBeUndefined();
|
|
770
|
+
expect(result.beforeActions['p1_b']).toBeUndefined();
|
|
771
|
+
// Verify mergedFlow structure - should have 2 branches with removed modules restored
|
|
772
|
+
expectModuleOrder(result.mergedFlow.modules ?? [], ['branchall1']);
|
|
773
|
+
const mergedBranchAll = result.mergedFlow.modules?.find((m) => m.id === 'branchall1');
|
|
774
|
+
const branches = (mergedBranchAll?.value).branches;
|
|
775
|
+
// First branch unchanged
|
|
776
|
+
expectModuleOrder(branches[0].modules, ['p1_a', 'p1_b']);
|
|
777
|
+
// Second branch should be restored with its module
|
|
778
|
+
expect(branches).toHaveLength(2);
|
|
779
|
+
expectModuleOrder(branches[1].modules, ['p2_a']);
|
|
780
|
+
});
|
|
781
|
+
it('detects removal of multiple parallel branches from branchall', () => {
|
|
782
|
+
const p1_a = createRawScriptModule('p1_a', 'parallel 1');
|
|
783
|
+
const p2_a = createRawScriptModule('p2_a', 'parallel 2');
|
|
784
|
+
const p3_a = createRawScriptModule('p3_a', 'parallel 3');
|
|
785
|
+
const beforeBranchAll = createBranchAllModule('branchall1', [
|
|
786
|
+
{ modules: [p1_a] },
|
|
787
|
+
{ modules: [p2_a] }, // removed
|
|
788
|
+
{ modules: [p3_a] } // removed
|
|
789
|
+
]);
|
|
790
|
+
const afterBranchAll = createBranchAllModule('branchall1', [{ modules: [p1_a] }]);
|
|
791
|
+
const beforeFlow = createFlow([beforeBranchAll]);
|
|
792
|
+
const afterFlow = createFlow([afterBranchAll]);
|
|
793
|
+
const result = buildFlowTimeline(beforeFlow, afterFlow);
|
|
794
|
+
// Modules from removed branches should be marked as removed
|
|
795
|
+
expect(result.beforeActions['p2_a']).toEqual({ action: 'removed', pending: false });
|
|
796
|
+
expect(result.beforeActions['p3_a']).toEqual({ action: 'removed', pending: false });
|
|
797
|
+
// Verify mergedFlow structure - should have 3 branches restored
|
|
798
|
+
const mergedBranchAll = result.mergedFlow.modules?.find((m) => m.id === 'branchall1');
|
|
799
|
+
const branches = (mergedBranchAll?.value).branches;
|
|
800
|
+
expect(branches).toHaveLength(3);
|
|
801
|
+
expectModuleOrder(branches[0].modules, ['p1_a']);
|
|
802
|
+
expectModuleOrder(branches[1].modules, ['p2_a']);
|
|
803
|
+
expectModuleOrder(branches[2].modules, ['p3_a']);
|
|
804
|
+
});
|
|
805
|
+
});
|
|
806
|
+
describe('hasInputSchemaChanged', () => {
|
|
807
|
+
it('returns false for identical schemas', () => {
|
|
808
|
+
const schema = {
|
|
809
|
+
type: 'object',
|
|
810
|
+
properties: {
|
|
811
|
+
name: { type: 'string' },
|
|
812
|
+
age: { type: 'number' }
|
|
813
|
+
}
|
|
814
|
+
};
|
|
815
|
+
const beforeFlow = { schema };
|
|
816
|
+
const afterFlow = { schema: JSON.parse(JSON.stringify(schema)) };
|
|
817
|
+
expect(hasInputSchemaChanged(beforeFlow, afterFlow)).toBe(false);
|
|
818
|
+
});
|
|
819
|
+
it('returns true for different schemas', () => {
|
|
820
|
+
const beforeFlow = {
|
|
821
|
+
schema: {
|
|
822
|
+
type: 'object',
|
|
823
|
+
properties: {
|
|
824
|
+
name: { type: 'string' }
|
|
825
|
+
}
|
|
826
|
+
}
|
|
827
|
+
};
|
|
828
|
+
const afterFlow = {
|
|
829
|
+
schema: {
|
|
830
|
+
type: 'object',
|
|
831
|
+
properties: {
|
|
832
|
+
name: { type: 'string' },
|
|
833
|
+
email: { type: 'string' }
|
|
834
|
+
}
|
|
835
|
+
}
|
|
836
|
+
};
|
|
837
|
+
expect(hasInputSchemaChanged(beforeFlow, afterFlow)).toBe(true);
|
|
838
|
+
});
|
|
839
|
+
it('returns false for undefined flows', () => {
|
|
840
|
+
expect(hasInputSchemaChanged(undefined, undefined)).toBe(false);
|
|
841
|
+
expect(hasInputSchemaChanged(undefined, { schema: {} })).toBe(false);
|
|
842
|
+
expect(hasInputSchemaChanged({ schema: {} }, undefined)).toBe(false);
|
|
843
|
+
});
|
|
844
|
+
it('returns true when schema is added', () => {
|
|
845
|
+
const beforeFlow = {};
|
|
846
|
+
const afterFlow = { schema: { type: 'object' } };
|
|
847
|
+
expect(hasInputSchemaChanged(beforeFlow, afterFlow)).toBe(true);
|
|
848
|
+
});
|
|
849
|
+
it('returns true when schema is removed', () => {
|
|
850
|
+
const beforeFlow = { schema: { type: 'object' } };
|
|
851
|
+
const afterFlow = {};
|
|
852
|
+
expect(hasInputSchemaChanged(beforeFlow, afterFlow)).toBe(true);
|
|
853
|
+
});
|
|
854
|
+
it('returns false for both empty schemas', () => {
|
|
855
|
+
const beforeFlow = { schema: {} };
|
|
856
|
+
const afterFlow = { schema: {} };
|
|
857
|
+
expect(hasInputSchemaChanged(beforeFlow, afterFlow)).toBe(false);
|
|
858
|
+
});
|
|
859
|
+
});
|
|
860
|
+
describe('multiple removed modules ordering', () => {
|
|
861
|
+
it('restores multiple removed modules in correct order', () => {
|
|
862
|
+
const moduleA = createRawScriptModule('a', 'first');
|
|
863
|
+
const moduleB = createRawScriptModule('b', 'second');
|
|
864
|
+
const moduleC = createRawScriptModule('c', 'third');
|
|
865
|
+
const moduleD = createRawScriptModule('d', 'fourth');
|
|
866
|
+
const moduleE = createRawScriptModule('e', 'fifth');
|
|
867
|
+
// Remove modules at beginning, middle, and end
|
|
868
|
+
const beforeFlow = createFlow([moduleA, moduleB, moduleC, moduleD, moduleE]);
|
|
869
|
+
const afterFlow = createFlow([moduleB, moduleD]); // Remove a, c, e
|
|
870
|
+
const result = buildFlowTimeline(beforeFlow, afterFlow);
|
|
871
|
+
// All removed modules should be marked as removed
|
|
872
|
+
expect(result.beforeActions['a']).toEqual({ action: 'removed', pending: false });
|
|
873
|
+
expect(result.beforeActions['c']).toEqual({ action: 'removed', pending: false });
|
|
874
|
+
expect(result.beforeActions['e']).toEqual({ action: 'removed', pending: false });
|
|
875
|
+
// Verify mergedFlow restores all modules in the original order
|
|
876
|
+
expectModuleOrder(result.mergedFlow.modules ?? [], ['a', 'b', 'c', 'd', 'e']);
|
|
877
|
+
});
|
|
878
|
+
it('restores multiple removed modules inside a loop in correct order', () => {
|
|
879
|
+
const innerA = createRawScriptModule('inner_a', 'first');
|
|
880
|
+
const innerB = createRawScriptModule('inner_b', 'second');
|
|
881
|
+
const innerC = createRawScriptModule('inner_c', 'third');
|
|
882
|
+
const innerD = createRawScriptModule('inner_d', 'fourth');
|
|
883
|
+
const beforeLoop = createForloopModule('loop1', [innerA, innerB, innerC, innerD]);
|
|
884
|
+
const afterLoop = createForloopModule('loop1', [innerB]); // Remove a, c, d
|
|
885
|
+
const beforeFlow = createFlow([beforeLoop]);
|
|
886
|
+
const afterFlow = createFlow([afterLoop]);
|
|
887
|
+
const result = buildFlowTimeline(beforeFlow, afterFlow);
|
|
888
|
+
// All removed modules should be marked as removed
|
|
889
|
+
expect(result.beforeActions['inner_a']).toEqual({ action: 'removed', pending: false });
|
|
890
|
+
expect(result.beforeActions['inner_c']).toEqual({ action: 'removed', pending: false });
|
|
891
|
+
expect(result.beforeActions['inner_d']).toEqual({ action: 'removed', pending: false });
|
|
892
|
+
// Verify mergedFlow restores all modules in the original order inside the loop
|
|
893
|
+
const mergedLoop = result.mergedFlow.modules?.find((m) => m.id === 'loop1');
|
|
894
|
+
const loopModules = (mergedLoop?.value).modules;
|
|
895
|
+
expectModuleOrder(loopModules, ['inner_a', 'inner_b', 'inner_c', 'inner_d']);
|
|
896
|
+
});
|
|
897
|
+
});
|
|
898
|
+
describe('insert position tests', () => {
|
|
899
|
+
it('handles module added at beginning of list', () => {
|
|
900
|
+
const moduleA = createRawScriptModule('a', 'existing first');
|
|
901
|
+
const moduleB = createRawScriptModule('b', 'existing second');
|
|
902
|
+
const moduleNew = createRawScriptModule('new', 'new at beginning');
|
|
903
|
+
const beforeFlow = createFlow([moduleA, moduleB]);
|
|
904
|
+
const afterFlow = createFlow([moduleNew, moduleA, moduleB]);
|
|
905
|
+
const result = buildFlowTimeline(beforeFlow, afterFlow);
|
|
906
|
+
expect(result.afterActions['new']).toEqual({ action: 'added', pending: false });
|
|
907
|
+
// Verify mergedFlow maintains correct order with new module at beginning
|
|
908
|
+
expectModuleOrder(result.mergedFlow.modules ?? [], ['new', 'a', 'b']);
|
|
909
|
+
});
|
|
910
|
+
it('handles module added in middle of list', () => {
|
|
911
|
+
const moduleA = createRawScriptModule('a', 'first');
|
|
912
|
+
const moduleB = createRawScriptModule('b', 'second');
|
|
913
|
+
const moduleC = createRawScriptModule('c', 'third');
|
|
914
|
+
const moduleNew = createRawScriptModule('new', 'new in middle');
|
|
915
|
+
const beforeFlow = createFlow([moduleA, moduleB, moduleC]);
|
|
916
|
+
const afterFlow = createFlow([moduleA, moduleNew, moduleB, moduleC]);
|
|
917
|
+
const result = buildFlowTimeline(beforeFlow, afterFlow);
|
|
918
|
+
expect(result.afterActions['new']).toEqual({ action: 'added', pending: false });
|
|
919
|
+
// Verify mergedFlow maintains correct order with new module in middle
|
|
920
|
+
expectModuleOrder(result.mergedFlow.modules ?? [], ['a', 'new', 'b', 'c']);
|
|
921
|
+
});
|
|
922
|
+
it('handles module added at beginning inside a loop', () => {
|
|
923
|
+
const innerA = createRawScriptModule('inner_a', 'existing first');
|
|
924
|
+
const innerB = createRawScriptModule('inner_b', 'existing second');
|
|
925
|
+
const innerNew = createRawScriptModule('inner_new', 'new at beginning');
|
|
926
|
+
const beforeLoop = createForloopModule('loop1', [innerA, innerB]);
|
|
927
|
+
const afterLoop = createForloopModule('loop1', [innerNew, innerA, innerB]);
|
|
928
|
+
const beforeFlow = createFlow([beforeLoop]);
|
|
929
|
+
const afterFlow = createFlow([afterLoop]);
|
|
930
|
+
const result = buildFlowTimeline(beforeFlow, afterFlow);
|
|
931
|
+
expect(result.afterActions['inner_new']).toEqual({ action: 'added', pending: false });
|
|
932
|
+
// Verify correct order inside the loop
|
|
933
|
+
const mergedLoop = result.mergedFlow.modules?.find((m) => m.id === 'loop1');
|
|
934
|
+
const loopModules = (mergedLoop?.value).modules;
|
|
935
|
+
expectModuleOrder(loopModules, ['inner_new', 'inner_a', 'inner_b']);
|
|
936
|
+
});
|
|
937
|
+
it('handles multiple modules added at different positions', () => {
|
|
938
|
+
const moduleA = createRawScriptModule('a', 'original a');
|
|
939
|
+
const moduleB = createRawScriptModule('b', 'original b');
|
|
940
|
+
const moduleNew1 = createRawScriptModule('new1', 'new at start');
|
|
941
|
+
const moduleNew2 = createRawScriptModule('new2', 'new in middle');
|
|
942
|
+
const moduleNew3 = createRawScriptModule('new3', 'new at end');
|
|
943
|
+
const beforeFlow = createFlow([moduleA, moduleB]);
|
|
944
|
+
const afterFlow = createFlow([moduleNew1, moduleA, moduleNew2, moduleB, moduleNew3]);
|
|
945
|
+
const result = buildFlowTimeline(beforeFlow, afterFlow);
|
|
946
|
+
expect(result.afterActions['new1']).toEqual({ action: 'added', pending: false });
|
|
947
|
+
expect(result.afterActions['new2']).toEqual({ action: 'added', pending: false });
|
|
948
|
+
expect(result.afterActions['new3']).toEqual({ action: 'added', pending: false });
|
|
949
|
+
// Verify mergedFlow maintains correct order
|
|
950
|
+
expectModuleOrder(result.mergedFlow.modules ?? [], ['new1', 'a', 'new2', 'b', 'new3']);
|
|
951
|
+
});
|
|
952
|
+
});
|
|
953
|
+
describe('empty containers', () => {
|
|
954
|
+
it('handles adding empty forloop', () => {
|
|
955
|
+
const moduleA = createRawScriptModule('a', 'step a');
|
|
956
|
+
const emptyLoop = createForloopModule('empty_loop', []);
|
|
957
|
+
const beforeFlow = createFlow([moduleA]);
|
|
958
|
+
const afterFlow = createFlow([moduleA, emptyLoop]);
|
|
959
|
+
const result = buildFlowTimeline(beforeFlow, afterFlow);
|
|
960
|
+
expect(result.afterActions['empty_loop']).toEqual({ action: 'added', pending: false });
|
|
961
|
+
expectModuleOrder(result.mergedFlow.modules ?? [], ['a', 'empty_loop']);
|
|
962
|
+
// Verify the empty loop has no modules
|
|
963
|
+
const mergedLoop = result.mergedFlow.modules?.find((m) => m.id === 'empty_loop');
|
|
964
|
+
expect((mergedLoop?.value).modules).toHaveLength(0);
|
|
965
|
+
});
|
|
966
|
+
it('handles removing empty forloop', () => {
|
|
967
|
+
const moduleA = createRawScriptModule('a', 'step a');
|
|
968
|
+
const emptyLoop = createForloopModule('empty_loop', []);
|
|
969
|
+
const beforeFlow = createFlow([moduleA, emptyLoop]);
|
|
970
|
+
const afterFlow = createFlow([moduleA]);
|
|
971
|
+
const result = buildFlowTimeline(beforeFlow, afterFlow);
|
|
972
|
+
expect(result.beforeActions['empty_loop']).toEqual({ action: 'removed', pending: false });
|
|
973
|
+
expect(result.afterActions['empty_loop']).toEqual({ action: 'removed', pending: false });
|
|
974
|
+
// Verify the removed empty loop is in mergedFlow
|
|
975
|
+
expectModuleOrder(result.mergedFlow.modules ?? [], ['a', 'empty_loop']);
|
|
976
|
+
});
|
|
977
|
+
it('handles adding empty branchone', () => {
|
|
978
|
+
const moduleA = createRawScriptModule('a', 'step a');
|
|
979
|
+
const emptyBranch = createBranchOneModule('empty_branch', [], []);
|
|
980
|
+
const beforeFlow = createFlow([moduleA]);
|
|
981
|
+
const afterFlow = createFlow([moduleA, emptyBranch]);
|
|
982
|
+
const result = buildFlowTimeline(beforeFlow, afterFlow);
|
|
983
|
+
expect(result.afterActions['empty_branch']).toEqual({ action: 'added', pending: false });
|
|
984
|
+
expectModuleOrder(result.mergedFlow.modules ?? [], ['a', 'empty_branch']);
|
|
985
|
+
// Verify the empty branch has no modules in default or branches
|
|
986
|
+
const mergedBranch = result.mergedFlow.modules?.find((m) => m.id === 'empty_branch');
|
|
987
|
+
expect((mergedBranch?.value).default).toHaveLength(0);
|
|
988
|
+
expect((mergedBranch?.value).branches).toHaveLength(0);
|
|
989
|
+
});
|
|
990
|
+
it('handles removing empty branchone with empty default and branches', () => {
|
|
991
|
+
const moduleA = createRawScriptModule('a', 'step a');
|
|
992
|
+
const emptyBranch = createBranchOneModule('empty_branch', [], [{ expr: 'true', modules: [] }]);
|
|
993
|
+
const beforeFlow = createFlow([moduleA, emptyBranch]);
|
|
994
|
+
const afterFlow = createFlow([moduleA]);
|
|
995
|
+
const result = buildFlowTimeline(beforeFlow, afterFlow);
|
|
996
|
+
expect(result.beforeActions['empty_branch']).toEqual({ action: 'removed', pending: false });
|
|
997
|
+
expect(result.afterActions['empty_branch']).toEqual({ action: 'removed', pending: false });
|
|
998
|
+
// Verify the removed empty branch is in mergedFlow with its structure
|
|
999
|
+
expectModuleOrder(result.mergedFlow.modules ?? [], ['a', 'empty_branch']);
|
|
1000
|
+
const mergedBranch = result.mergedFlow.modules?.find((m) => m.id === 'empty_branch');
|
|
1001
|
+
expect((mergedBranch?.value).default).toHaveLength(0);
|
|
1002
|
+
expect((mergedBranch?.value).branches).toHaveLength(1);
|
|
1003
|
+
});
|
|
1004
|
+
});
|
|
1005
|
+
describe('container type changes', () => {
|
|
1006
|
+
it('treats forloop to whileloop change as removed + added', () => {
|
|
1007
|
+
const innerModule = createRawScriptModule('inner', 'inner step');
|
|
1008
|
+
const forLoop = createForloopModule('loop1', [innerModule]);
|
|
1009
|
+
const whileLoop = createWhileloopModule('loop1', [innerModule]);
|
|
1010
|
+
const beforeFlow = createFlow([forLoop]);
|
|
1011
|
+
const afterFlow = createFlow([whileLoop]);
|
|
1012
|
+
const result = buildFlowTimeline(beforeFlow, afterFlow);
|
|
1013
|
+
// The container itself should be treated as removed + added (type changed)
|
|
1014
|
+
expect(result.beforeActions['loop1']).toEqual({ action: 'removed', pending: false });
|
|
1015
|
+
expect(result.afterActions['loop1']).toEqual({ action: 'added', pending: false });
|
|
1016
|
+
// Inner module's location type changes (forloop -> whileloop), so it's also treated as moved
|
|
1017
|
+
expect(result.beforeActions['inner']).toEqual({ action: 'removed', pending: false });
|
|
1018
|
+
expect(result.afterActions['inner']).toEqual({ action: 'added', pending: false });
|
|
1019
|
+
// The old inner module should appear with prefix in the merged flow
|
|
1020
|
+
const mergedLoop = result.mergedFlow.modules?.find((m) => m.id === 'loop1');
|
|
1021
|
+
expect(mergedLoop).toBeDefined();
|
|
1022
|
+
const loopModules = (mergedLoop?.value).modules;
|
|
1023
|
+
// The whileloop contains 'inner' (new) and the old one gets prefixed
|
|
1024
|
+
expect(loopModules.some((m) => m.id === 'inner')).toBe(true);
|
|
1025
|
+
});
|
|
1026
|
+
it('treats branchone to branchall change as removed + added', () => {
|
|
1027
|
+
const innerModule = createRawScriptModule('inner', 'inner step');
|
|
1028
|
+
const branchOne = createBranchOneModule('branch1', [innerModule], []);
|
|
1029
|
+
const branchAll = createBranchAllModule('branch1', [{ modules: [innerModule] }]);
|
|
1030
|
+
const beforeFlow = createFlow([branchOne]);
|
|
1031
|
+
const afterFlow = createFlow([branchAll]);
|
|
1032
|
+
const result = buildFlowTimeline(beforeFlow, afterFlow);
|
|
1033
|
+
// The container itself should be treated as removed + added (type changed)
|
|
1034
|
+
expect(result.beforeActions['branch1']).toEqual({ action: 'removed', pending: false });
|
|
1035
|
+
expect(result.afterActions['branch1']).toEqual({ action: 'added', pending: false });
|
|
1036
|
+
// Inner module's location type changes (branchone-default -> branchall-branch), so it's also treated as moved
|
|
1037
|
+
expect(result.beforeActions['inner']).toEqual({ action: 'removed', pending: false });
|
|
1038
|
+
expect(result.afterActions['inner']).toEqual({ action: 'added', pending: false });
|
|
1039
|
+
// The new inner module should appear in the branchall
|
|
1040
|
+
const mergedBranch = result.mergedFlow.modules?.find((m) => m.id === 'branch1');
|
|
1041
|
+
expect(mergedBranch).toBeDefined();
|
|
1042
|
+
const branchModules = (mergedBranch?.value).branches[0].modules;
|
|
1043
|
+
expect(branchModules.some((m) => m.id === 'inner')).toBe(true);
|
|
1044
|
+
});
|
|
1045
|
+
});
|
|
1046
|
+
describe('module movement', () => {
|
|
1047
|
+
it('detects module moved from root to inside a loop', () => {
|
|
1048
|
+
const moduleA = createRawScriptModule('a', 'step a');
|
|
1049
|
+
const moduleB = createRawScriptModule('b', 'step b');
|
|
1050
|
+
const emptyLoop = createForloopModule('loop1', []);
|
|
1051
|
+
const loopWithB = createForloopModule('loop1', [moduleB]);
|
|
1052
|
+
// Before: a, b, loop1(empty)
|
|
1053
|
+
// After: a, loop1(b)
|
|
1054
|
+
const beforeFlow = createFlow([moduleA, moduleB, emptyLoop]);
|
|
1055
|
+
const afterFlow = createFlow([moduleA, loopWithB]);
|
|
1056
|
+
const result = buildFlowTimeline(beforeFlow, afterFlow);
|
|
1057
|
+
// Module b is in both flows but at different locations
|
|
1058
|
+
// The implementation doesn't track "movement" - it sees b in both places
|
|
1059
|
+
// The loop itself is modified because its modules changed
|
|
1060
|
+
expect(result.beforeActions['loop1']).toEqual({ action: 'modified', pending: false });
|
|
1061
|
+
expect(result.afterActions['loop1']).toEqual({ action: 'modified', pending: false });
|
|
1062
|
+
// b is removed from root and added inside loop - implementation sees it as existing in both
|
|
1063
|
+
// but since it's the same module ID, no action is recorded
|
|
1064
|
+
// The mergedFlow should contain both the old position (at root) and the new position (in loop)
|
|
1065
|
+
// This is handled by the duplicate ID logic - old__b prefix
|
|
1066
|
+
const rootModuleIds = result.mergedFlow.modules?.map((m) => m.id) ?? [];
|
|
1067
|
+
expect(rootModuleIds).toContain('a');
|
|
1068
|
+
expect(rootModuleIds).toContain('loop1');
|
|
1069
|
+
// The old 'b' at root level gets prefixed with 'old__'
|
|
1070
|
+
expect(rootModuleIds).toContain('old__b');
|
|
1071
|
+
});
|
|
1072
|
+
it('detects module moved from one branch to another', () => {
|
|
1073
|
+
const moduleA = createRawScriptModule('a', 'step a');
|
|
1074
|
+
// Before: branch with 'a' in first conditional branch
|
|
1075
|
+
const beforeBranch = createBranchOneModule('branch1', [], [
|
|
1076
|
+
{ expr: 'x > 0', modules: [moduleA] },
|
|
1077
|
+
{ expr: 'x < 0', modules: [] }
|
|
1078
|
+
]);
|
|
1079
|
+
// After: branch with 'a' in second conditional branch
|
|
1080
|
+
const afterBranch = createBranchOneModule('branch1', [], [
|
|
1081
|
+
{ expr: 'x > 0', modules: [] },
|
|
1082
|
+
{ expr: 'x < 0', modules: [moduleA] }
|
|
1083
|
+
]);
|
|
1084
|
+
const beforeFlow = createFlow([beforeBranch]);
|
|
1085
|
+
const afterFlow = createFlow([afterBranch]);
|
|
1086
|
+
const result = buildFlowTimeline(beforeFlow, afterFlow);
|
|
1087
|
+
// The branch container is modified
|
|
1088
|
+
expect(result.beforeActions['branch1']).toEqual({ action: 'modified', pending: false });
|
|
1089
|
+
expect(result.afterActions['branch1']).toEqual({ action: 'modified', pending: false });
|
|
1090
|
+
// Module 'a' moved from branchIndex 0 to branchIndex 1, so it's treated as removed + added
|
|
1091
|
+
expect(result.beforeActions['a']).toEqual({ action: 'removed', pending: false });
|
|
1092
|
+
expect(result.afterActions['a']).toEqual({ action: 'added', pending: false });
|
|
1093
|
+
// The old 'a' should appear with prefix in the first branch of mergedFlow
|
|
1094
|
+
const mergedBranch = result.mergedFlow.modules?.find((m) => m.id === 'branch1');
|
|
1095
|
+
expect(mergedBranch).toBeDefined();
|
|
1096
|
+
const firstBranchModules = (mergedBranch?.value).branches[0].modules;
|
|
1097
|
+
expect(firstBranchModules.some((m) => m.id === 'old__a')).toBe(true);
|
|
1098
|
+
// The new 'a' should appear in the second branch
|
|
1099
|
+
const secondBranchModules = (mergedBranch?.value).branches[1].modules;
|
|
1100
|
+
expect(secondBranchModules.some((m) => m.id === 'a')).toBe(true);
|
|
1101
|
+
});
|
|
1102
|
+
it('detects module moved from loop to root', () => {
|
|
1103
|
+
const moduleA = createRawScriptModule('a', 'step a');
|
|
1104
|
+
const moduleB = createRawScriptModule('b', 'step b');
|
|
1105
|
+
const loopWithA = createForloopModule('loop1', [moduleA]);
|
|
1106
|
+
const emptyLoop = createForloopModule('loop1', []);
|
|
1107
|
+
// Before: b, loop1(a)
|
|
1108
|
+
// After: b, loop1(empty), a
|
|
1109
|
+
const beforeFlow = createFlow([moduleB, loopWithA]);
|
|
1110
|
+
const afterFlow = createFlow([moduleB, emptyLoop, moduleA]);
|
|
1111
|
+
const result = buildFlowTimeline(beforeFlow, afterFlow);
|
|
1112
|
+
// The loop is modified because its modules changed
|
|
1113
|
+
expect(result.beforeActions['loop1']).toEqual({ action: 'modified', pending: false });
|
|
1114
|
+
expect(result.afterActions['loop1']).toEqual({ action: 'modified', pending: false });
|
|
1115
|
+
// Module 'a' exists in both flows, so no action recorded for it
|
|
1116
|
+
// The mergedFlow should contain the old 'a' inside the loop (prefixed) and new 'a' at root
|
|
1117
|
+
const rootModuleIds = result.mergedFlow.modules?.map((m) => m.id) ?? [];
|
|
1118
|
+
expect(rootModuleIds).toContain('b');
|
|
1119
|
+
expect(rootModuleIds).toContain('loop1');
|
|
1120
|
+
expect(rootModuleIds).toContain('a');
|
|
1121
|
+
// The old 'a' inside the loop gets prefixed
|
|
1122
|
+
const mergedLoop = result.mergedFlow.modules?.find((m) => m.id === 'loop1');
|
|
1123
|
+
const loopModuleIds = (mergedLoop?.value).modules.map((m) => m.id);
|
|
1124
|
+
expect(loopModuleIds).toContain('old__a');
|
|
1125
|
+
});
|
|
1126
|
+
});
|
|
1127
|
+
describe('module reordering', () => {
|
|
1128
|
+
it('detects modules reordered at root level', () => {
|
|
1129
|
+
const moduleA = createRawScriptModule('a', 'step a');
|
|
1130
|
+
const moduleB = createRawScriptModule('b', 'step b');
|
|
1131
|
+
const moduleC = createRawScriptModule('c', 'step c');
|
|
1132
|
+
// Before: a, b, c
|
|
1133
|
+
// After: c, a, b
|
|
1134
|
+
const beforeFlow = createFlow([moduleA, moduleB, moduleC]);
|
|
1135
|
+
const afterFlow = createFlow([moduleC, moduleA, moduleB]);
|
|
1136
|
+
const result = buildFlowTimeline(beforeFlow, afterFlow);
|
|
1137
|
+
// No modules were added, removed, or modified - just reordered
|
|
1138
|
+
// The implementation doesn't detect reordering as a change
|
|
1139
|
+
expect(result.beforeActions['a']).toBeUndefined();
|
|
1140
|
+
expect(result.beforeActions['b']).toBeUndefined();
|
|
1141
|
+
expect(result.beforeActions['c']).toBeUndefined();
|
|
1142
|
+
expect(result.afterActions['a']).toBeUndefined();
|
|
1143
|
+
expect(result.afterActions['b']).toBeUndefined();
|
|
1144
|
+
expect(result.afterActions['c']).toBeUndefined();
|
|
1145
|
+
// mergedFlow should reflect the afterFlow order
|
|
1146
|
+
expectModuleOrder(result.mergedFlow.modules ?? [], ['c', 'a', 'b']);
|
|
1147
|
+
});
|
|
1148
|
+
it('detects modules reordered inside a loop', () => {
|
|
1149
|
+
const innerA = createRawScriptModule('inner_a', 'inner a');
|
|
1150
|
+
const innerB = createRawScriptModule('inner_b', 'inner b');
|
|
1151
|
+
const innerC = createRawScriptModule('inner_c', 'inner c');
|
|
1152
|
+
// Before: loop with [a, b, c]
|
|
1153
|
+
// After: loop with [c, b, a]
|
|
1154
|
+
const beforeLoop = createForloopModule('loop1', [innerA, innerB, innerC]);
|
|
1155
|
+
const afterLoop = createForloopModule('loop1', [innerC, innerB, innerA]);
|
|
1156
|
+
const beforeFlow = createFlow([beforeLoop]);
|
|
1157
|
+
const afterFlow = createFlow([afterLoop]);
|
|
1158
|
+
const result = buildFlowTimeline(beforeFlow, afterFlow);
|
|
1159
|
+
// The loop is modified because its internal structure changed
|
|
1160
|
+
// (deepEqual compares the modules array which includes order)
|
|
1161
|
+
expect(result.beforeActions['loop1']).toEqual({ action: 'modified', pending: false });
|
|
1162
|
+
expect(result.afterActions['loop1']).toEqual({ action: 'modified', pending: false });
|
|
1163
|
+
// Individual modules are not marked as changed
|
|
1164
|
+
expect(result.beforeActions['inner_a']).toBeUndefined();
|
|
1165
|
+
expect(result.beforeActions['inner_b']).toBeUndefined();
|
|
1166
|
+
expect(result.beforeActions['inner_c']).toBeUndefined();
|
|
1167
|
+
// mergedFlow should reflect the afterFlow order inside the loop
|
|
1168
|
+
const mergedLoop = result.mergedFlow.modules?.find((m) => m.id === 'loop1');
|
|
1169
|
+
const loopModules = (mergedLoop?.value).modules;
|
|
1170
|
+
expectModuleOrder(loopModules, ['inner_c', 'inner_b', 'inner_a']);
|
|
1171
|
+
});
|
|
1172
|
+
});
|
|
1173
|
+
});
|