windmill-components 1.665.1 → 1.677.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/dist/sharedUtils/assets/tokens/colorTokensConfig.d.ts +2 -0
- package/dist/sharedUtils/base.d.ts +1 -0
- package/dist/sharedUtils/cloud.d.ts +1 -0
- package/dist/sharedUtils/common.d.ts +111 -0
- package/dist/sharedUtils/components/apps/components/display/dbtable/queries/count.d.ts +5 -0
- package/dist/sharedUtils/components/apps/components/display/dbtable/queries/delete.d.ts +5 -0
- package/dist/sharedUtils/components/apps/components/display/dbtable/queries/insert.d.ts +5 -0
- package/dist/sharedUtils/components/apps/components/display/dbtable/queries/select.d.ts +13 -0
- package/dist/sharedUtils/components/apps/components/display/dbtable/queries/update.d.ts +11 -0
- package/dist/sharedUtils/components/apps/components/display/dbtable/utils.d.ts +95 -0
- package/dist/sharedUtils/components/apps/editor/appPolicy.d.ts +6 -0
- package/dist/sharedUtils/components/apps/editor/appUtilsCore.d.ts +7 -0
- package/dist/sharedUtils/components/apps/editor/appUtilsS3.d.ts +33 -0
- package/dist/sharedUtils/components/apps/editor/commonAppUtils.d.ts +10 -0
- package/dist/sharedUtils/components/apps/editor/component/components.d.ts +5371 -0
- package/dist/sharedUtils/components/apps/editor/component/default-codes.d.ts +3 -0
- package/dist/sharedUtils/components/apps/editor/component/index.d.ts +3 -0
- package/dist/sharedUtils/components/apps/editor/component/sets.d.ts +7 -0
- package/dist/sharedUtils/components/apps/editor/componentsPanel/componentDefaultProps.d.ts +3 -0
- package/dist/sharedUtils/components/apps/gridUtils.d.ts +14 -0
- package/dist/sharedUtils/components/apps/inputType.d.ts +178 -0
- package/dist/sharedUtils/components/apps/rx.d.ts +29 -0
- package/dist/sharedUtils/components/apps/sharedTypes.d.ts +21 -0
- package/dist/sharedUtils/components/apps/types.d.ts +274 -0
- package/dist/sharedUtils/components/assets/lib.d.ts +25 -0
- package/dist/sharedUtils/components/common/alert/model.d.ts +2 -0
- package/dist/sharedUtils/components/common/badge/model.d.ts +8 -0
- package/dist/sharedUtils/components/common/button/model.d.ts +45 -0
- package/dist/sharedUtils/components/common/fileInput/model.d.ts +1 -0
- package/dist/sharedUtils/components/common/index.d.ts +24 -0
- package/dist/sharedUtils/components/common/skeleton/model.d.ts +21 -0
- package/dist/sharedUtils/components/dbTypes.d.ts +14 -0
- package/dist/sharedUtils/components/diff_drawer.d.ts +26 -0
- package/dist/sharedUtils/components/ducklake.d.ts +1 -0
- package/dist/sharedUtils/components/flows/scheduleUtils.d.ts +7 -0
- package/dist/sharedUtils/components/icons/index.d.ts +101 -0
- package/dist/sharedUtils/components/random_positive_adjetive.d.ts +1 -0
- package/dist/sharedUtils/components/raw_apps/rawAppPolicy.d.ts +10 -0
- package/dist/sharedUtils/components/raw_apps/utils.d.ts +15 -0
- package/dist/sharedUtils/components/triggers/email/utils.d.ts +4 -0
- package/dist/sharedUtils/components/triggers/gcp/utils.d.ts +2 -0
- package/dist/sharedUtils/components/triggers/http/utils.d.ts +11 -0
- package/dist/sharedUtils/components/triggers/kafka/utils.d.ts +2 -0
- package/dist/sharedUtils/components/triggers/mqtt/utils.d.ts +2 -0
- package/dist/sharedUtils/components/triggers/nats/utils.d.ts +2 -0
- package/dist/sharedUtils/components/triggers/postgres/utils.d.ts +8 -0
- package/dist/sharedUtils/components/triggers/sqs/utils.d.ts +2 -0
- package/dist/sharedUtils/components/triggers/triggers.svelte.d.ts +32 -0
- package/dist/sharedUtils/components/triggers/utils.d.ts +80 -0
- package/dist/sharedUtils/components/triggers/websocket/utils.d.ts +2 -0
- package/dist/sharedUtils/components/triggers.d.ts +20 -0
- package/dist/sharedUtils/gen/core/ApiError.d.ts +10 -0
- package/dist/sharedUtils/gen/core/ApiRequestOptions.d.ts +13 -0
- package/dist/sharedUtils/gen/core/ApiResult.d.ts +7 -0
- package/dist/sharedUtils/gen/core/CancelablePromise.d.ts +26 -0
- package/dist/sharedUtils/gen/core/OpenAPI.d.ts +27 -0
- package/dist/sharedUtils/gen/core/request.d.ts +29 -0
- package/dist/sharedUtils/gen/index.d.ts +6 -0
- package/dist/sharedUtils/gen/schemas.gen.d.ts +7036 -0
- package/dist/sharedUtils/gen/services.gen.d.ts +6047 -0
- package/dist/sharedUtils/gen/types.gen.d.ts +21881 -0
- package/dist/sharedUtils/history.svelte.d.ts +9 -0
- package/dist/sharedUtils/hub.d.ts +49 -0
- package/dist/sharedUtils/jsr.json +6 -0
- package/dist/sharedUtils/lib.d.ts +5 -0
- package/dist/sharedUtils/lib.es.js +1588 -0
- package/dist/sharedUtils/package.json +12 -0
- package/dist/sharedUtils/schema.d.ts +3 -0
- package/dist/sharedUtils/stores.d.ts +97 -0
- package/dist/sharedUtils/svelte5Utils.svelte.d.ts +80 -0
- package/dist/sharedUtils/toast.d.ts +8 -0
- package/dist/sharedUtils/utils.d.ts +265 -0
- package/package/components/AddUser.svelte +67 -34
- package/package/components/AppConnectInner.svelte +9 -1
- package/package/components/ArgInfo.svelte +9 -1
- package/package/components/ArgInput.svelte +21 -1
- package/package/components/CompareWorkspaces.svelte +11 -2
- package/package/components/DedicatedWorkersSelector.svelte +262 -247
- package/package/components/DefaultTagsInner.svelte +40 -2
- package/package/components/DeployWorkspace.svelte +13 -0
- package/package/components/DiffEditor.svelte +44 -1
- package/package/components/EditableSchemaForm.svelte +5 -2
- package/package/components/EditableSchemaForm.svelte.d.ts +1 -0
- package/package/components/Editor.svelte +5 -1
- package/package/components/EditorBar.svelte +12 -3
- package/package/components/FilterSearchbar.svelte +26 -2
- package/package/components/FlowBuilder.svelte +6 -3
- package/package/components/FlowGraphDiffViewer.svelte +16 -17
- package/package/components/FlowGraphViewer.svelte +20 -6
- package/package/components/FlowGraphViewer.svelte.d.ts +2 -0
- package/package/components/FlowGraphViewerStep.svelte +14 -32
- package/package/components/FlowMetadata.svelte +4 -1
- package/package/components/FlowPreviewContent.svelte +2 -0
- package/package/components/FlowStatusWaitingForEvents.svelte +25 -4
- package/package/components/HighlightCode.svelte +3 -0
- package/package/components/InstanceSetting.svelte +9 -25
- package/package/components/InstanceSettings.svelte +16 -0
- package/package/components/LabelsInput.svelte +149 -0
- package/package/components/LabelsInput.svelte.d.ts +8 -0
- package/package/components/Login.svelte +6 -1
- package/package/components/ObjectStoreConfigSettings.svelte +273 -1
- package/package/components/OktaSetting.svelte +6 -5
- package/package/components/Password.svelte +74 -20
- package/package/components/Password.svelte.d.ts +1 -0
- package/package/components/PasswordArgInput.svelte +2 -2
- package/package/components/PasswordArgInput.svelte.d.ts +1 -0
- package/package/components/Path.svelte +8 -10
- package/package/components/PathNameAutocomplete.svelte +308 -0
- package/package/components/PathNameAutocomplete.svelte.d.ts +27 -0
- package/package/components/PowerShellCommonParams.svelte +84 -0
- package/package/components/PowerShellCommonParams.svelte.d.ts +6 -0
- package/package/components/Range.svelte +8 -3
- package/package/components/ResourceEditor.svelte +6 -2
- package/package/components/RunForm.svelte +71 -7
- package/package/components/RunForm.svelte.d.ts +2 -1
- package/package/components/ScriptBuilder.svelte +7 -3
- package/package/components/ScriptEditor.svelte +221 -187
- package/package/components/ScriptEditor.svelte.d.ts +1 -1
- package/package/components/ScriptSchema.svelte +1 -1
- package/package/components/StringTypeNarrowing.svelte +1 -1
- package/package/components/StringTypeNarrowing.svelte.d.ts +1 -1
- package/package/components/SummaryPathDisplay.svelte +32 -10
- package/package/components/SummaryPathDisplay.svelte.d.ts +2 -1
- package/package/components/VariableEditor.svelte +9 -2
- package/package/components/WorkerGroup.svelte +47 -2
- package/package/components/apps/editor/DeploymentHistory.svelte +112 -13
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte +135 -35
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte.d.ts +3 -1
- package/package/components/apps/editor/settingsPanel/mainInput/RunnableSelector.svelte +11 -35
- package/package/components/apps/editor/settingsPanel/mainInput/runnableSelectorUtils.d.ts +10 -0
- package/package/components/apps/editor/settingsPanel/mainInput/runnableSelectorUtils.js +14 -0
- package/package/components/apps/editor/settingsPanel/mainInput/runnableSelectorUtils.test.d.ts +1 -0
- package/package/components/apps/editor/settingsPanel/mainInput/runnableSelectorUtils.test.js +34 -0
- package/package/components/assets/AssetButtons.svelte +21 -25
- package/package/components/assets/AssetsUsageDrawer.svelte +7 -9
- package/package/components/common/fileUpload/FileUpload.svelte +6 -2
- package/package/components/common/languageIcons/LanguageIcon.svelte +3 -0
- package/package/components/common/table/AppRow.svelte +18 -0
- package/package/components/common/table/FlowRow.svelte +18 -0
- package/package/components/common/table/ScriptRow.svelte +18 -0
- package/package/components/copilot/chat/AIChatManager.svelte.js +3 -3
- package/package/components/copilot/chat/flow/openFlow.json +1 -1
- package/package/components/copilot/chat/flow/openFlowZod.js +3 -3
- package/package/components/custom_ui.d.ts +2 -0
- package/package/components/details/DetailPageHeader.svelte +2 -2
- package/package/components/details/DetailPageHeader.svelte.d.ts +2 -1
- package/package/components/flows/agentToolUtils.d.ts +5 -0
- package/package/components/flows/agentToolUtils.js +49 -0
- package/package/components/flows/agentToolUtils.test.d.ts +1 -0
- package/package/components/flows/agentToolUtils.test.js +55 -0
- package/package/components/flows/content/FlowInput.svelte +2 -0
- package/package/components/flows/content/FlowInputsQuick.svelte +1 -1
- package/package/components/flows/content/FlowLoop.svelte +5 -12
- package/package/components/flows/content/FlowModuleScript.svelte +5 -3
- package/package/components/flows/content/FlowPathViewer.svelte +2 -2
- package/package/components/flows/content/FlowPathViewer.svelte.d.ts +1 -0
- package/package/components/flows/content/FlowSettings.svelte +2 -0
- package/package/components/flows/content/FlowWhileLoop.svelte +5 -12
- package/package/components/flows/flowInfers.js +8 -3
- package/package/components/flows/map/FlowModuleSchemaMap.svelte +49 -9
- package/package/components/flows/pickers/PickHubScriptQuick.svelte +5 -3
- package/package/components/flows/pickers/PickHubScriptQuick.svelte.d.ts +1 -1
- package/package/components/flows/scheduleUtils.js +2 -1
- package/package/components/graph/FlowGraphV2.svelte +13 -1
- package/package/components/graph/WacDiagram.svelte +96 -0
- package/package/components/graph/WacDiagram.svelte.d.ts +7 -0
- package/package/components/graph/noteEditor.svelte.d.ts +1 -1
- package/package/components/graph/noteEditor.svelte.js +12 -1
- package/package/components/graph/noteUtils.svelte.d.ts +1 -1
- package/package/components/graph/noteUtils.svelte.js +9 -2
- package/package/components/graph/renderers/edges/WacEdge.svelte +41 -0
- package/package/components/graph/renderers/edges/WacEdge.svelte.d.ts +4 -0
- package/package/components/graph/renderers/nodes/WacControlNode.svelte +51 -0
- package/package/components/graph/renderers/nodes/WacControlNode.svelte.d.ts +9 -0
- package/package/components/graph/renderers/nodes/WacStepNode.svelte +35 -0
- package/package/components/graph/renderers/nodes/WacStepNode.svelte.d.ts +9 -0
- package/package/components/graph/wacDagLayout.d.ts +10 -0
- package/package/components/graph/wacDagLayout.js +120 -0
- package/package/components/graph/wacToFlow.js +1 -1
- package/package/components/home/ItemsList.svelte +28 -4
- package/package/components/icons/RIcon.svelte +32 -0
- package/package/components/icons/RIcon.svelte.d.ts +7 -0
- package/package/components/instanceSettings/DbHealth.svelte +723 -0
- package/package/components/instanceSettings/DbHealth.svelte.d.ts +3 -0
- package/package/components/instanceSettings/SecretBackendConfig.svelte +343 -304
- package/package/components/instanceSettings/SmtpSettings.svelte +8 -0
- package/package/components/instanceSettings.js +14 -5
- package/package/components/mcp/McpScopeSelector.svelte +82 -16
- package/package/components/moveRenameManager.d.ts +1 -0
- package/package/components/moveRenameManager.js +7 -4
- package/package/components/raw_apps/RawAppInlineScriptRunnable.svelte +14 -1
- package/package/components/raw_apps/rawAppPolicy.js +3 -2
- package/package/components/raw_apps/utils.test.d.ts +1 -0
- package/package/components/raw_apps/utils.test.js +38 -0
- package/package/components/resources/resourcesFilter.d.ts +15 -2
- package/package/components/resources/resourcesFilter.js +11 -2
- package/package/components/runs/JobDetailFieldConfig.js +5 -3
- package/package/components/runs/JobDetailHeader.svelte +5 -2
- package/package/components/runs/JobRunsPreview.svelte +1 -0
- package/package/components/runs/RunBadges.svelte +7 -4
- package/package/components/runs/RunRow.svelte +7 -7
- package/package/components/schedules/schedulesFilter.d.ts +15 -2
- package/package/components/schedules/schedulesFilter.js +11 -2
- package/package/components/schema/EditableSchemaWrapper.svelte +6 -8
- package/package/components/schema/PropertyEditor.svelte +22 -1
- package/package/components/schema/PropertyEditor.svelte.d.ts +1 -0
- package/package/components/schema/editable_schema_wrapper.d.ts +1 -0
- package/package/components/secretArgUtils.d.ts +7 -0
- package/package/components/secretArgUtils.js +45 -0
- package/package/components/settings/WorkspaceUserSettings.svelte +359 -286
- package/package/components/sidebar/OperatorMenu.svelte +215 -197
- package/package/components/triggers/CaptureWrapper.svelte +1 -1
- package/package/components/triggers/TriggerFilters.svelte +17 -5
- package/package/components/triggers/TriggerFilters.svelte.d.ts +2 -1
- package/package/components/triggers/kafka/KafkaCapture.svelte +6 -2
- package/package/components/triggers/kafka/KafkaCapture.svelte.d.ts +1 -1
- package/package/components/triggers/kafka/KafkaTriggerEditorInner.svelte +5 -1
- package/package/components/triggers/kafka/utils.js +1 -0
- package/package/components/triggers/schedules/ScheduleEditorInner.svelte +6 -0
- package/package/components/triggers/websocket/WebsocketTriggerEditorInner.svelte +87 -1
- package/package/components/triggers/websocket/utils.js +2 -0
- package/package/components/variables/variablesFilter.d.ts +15 -2
- package/package/components/variables/variablesFilter.js +11 -2
- package/package/components/worker_group.js +1 -0
- package/package/components/workspaceSettings/DucklakeSettings.svelte +33 -41
- package/package/consts.d.ts +1 -0
- package/package/consts.js +1 -0
- package/package/editorLangUtils.d.ts +1 -1
- package/package/editorLangUtils.js +2 -0
- package/package/gen/core/OpenAPI.js +1 -1
- package/package/gen/schemas.gen.d.ts +94 -294
- package/package/gen/schemas.gen.js +94 -294
- package/package/gen/services.gen.d.ts +5 -121
- package/package/gen/services.gen.js +5 -237
- package/package/gen/types.gen.d.ts +91 -715
- package/package/hubPaths.json +6 -3
- package/package/infer.d.ts +55 -0
- package/package/infer.js +131 -0
- package/package/infer.svelte.js +2 -0
- package/package/mcpEndpointTools.js +213 -22
- package/package/script_helpers.d.ts +3 -0
- package/package/script_helpers.js +26 -0
- package/package/scripts.d.ts +2 -1
- package/package/scripts.js +15 -3
- package/package/stores.d.ts +2 -0
- package/package/system_prompts/prompts.d.ts +6 -5
- package/package/system_prompts/prompts.js +188 -29
- package/package/user.js +5 -1
- package/package/utils.js +21 -0
- package/package/utils_deployable.d.ts +7 -0
- package/package/utils_workspace_deploy.js +36 -8
- package/package.json +6 -5
|
@@ -3,7 +3,7 @@ import { ExternalLink, Loader2, Save } from 'lucide-svelte';
|
|
|
3
3
|
import { SettingService, WorkerService, WorkspaceService } from '../gen';
|
|
4
4
|
import { sendUserToast } from '../toast';
|
|
5
5
|
import { enterpriseLicense, superadmin } from '../stores';
|
|
6
|
-
import { DEFAULT_TAGS_PER_WORKSPACE_SETTING, DEFAULT_TAGS_WORKSPACES_SETTING } from '../consts';
|
|
6
|
+
import { DEFAULT_TAGS_PER_WORKSPACE_SETTING, DEFAULT_TAGS_WORKSPACES_SETTING, PREVIEW_TAGS_OVERRIDE_SETTING } from '../consts';
|
|
7
7
|
import Toggle from './Toggle.svelte';
|
|
8
8
|
import MultiSelect from './select/MultiSelect.svelte';
|
|
9
9
|
import { safeSelectItems } from './select/utils.svelte';
|
|
@@ -12,13 +12,16 @@ import Section from './Section.svelte';
|
|
|
12
12
|
let { defaultTagPerWorkspace = $bindable(undefined), defaultTagWorkspaces = $bindable([]) } = $props();
|
|
13
13
|
let defaultTags = $state(undefined);
|
|
14
14
|
let limitToWorkspaces = $state(false);
|
|
15
|
+
let previewTagsOverride = $state(false);
|
|
15
16
|
// Change detection
|
|
16
17
|
let originalDefaultTagPerWorkspace = $state(defaultTagPerWorkspace);
|
|
17
18
|
let originalDefaultTagWorkspaces = $state(defaultTagWorkspaces);
|
|
19
|
+
let originalPreviewTagsOverride = $state(false);
|
|
18
20
|
// Detect changes
|
|
19
21
|
let hasChanges = $derived(originalDefaultTagPerWorkspace !== defaultTagPerWorkspace ||
|
|
20
22
|
JSON.stringify($state.snapshot(originalDefaultTagWorkspaces)?.sort() || []) !==
|
|
21
|
-
JSON.stringify($state.snapshot(defaultTagWorkspaces)?.sort() || [])
|
|
23
|
+
JSON.stringify($state.snapshot(defaultTagWorkspaces)?.sort() || []) ||
|
|
24
|
+
originalPreviewTagsOverride !== previewTagsOverride);
|
|
22
25
|
let workspaces = $state([]);
|
|
23
26
|
async function loadWorkspaces() {
|
|
24
27
|
workspaces = (await WorkspaceService.listWorkspacesAsSuperAdmin()).map((m) => m.id);
|
|
@@ -31,6 +34,11 @@ async function loadDefaultTags() {
|
|
|
31
34
|
key: DEFAULT_TAGS_WORKSPACES_SETTING
|
|
32
35
|
})) ?? [];
|
|
33
36
|
limitToWorkspaces = defaultTagWorkspaces ? defaultTagWorkspaces.length > 0 : false;
|
|
37
|
+
previewTagsOverride =
|
|
38
|
+
(await SettingService.getGlobal({
|
|
39
|
+
key: PREVIEW_TAGS_OVERRIDE_SETTING
|
|
40
|
+
})) ?? false;
|
|
41
|
+
originalPreviewTagsOverride = previewTagsOverride;
|
|
34
42
|
}
|
|
35
43
|
catch (err) {
|
|
36
44
|
sendUserToast(`Could not load default tags: ${err}`, true);
|
|
@@ -51,9 +59,16 @@ async function handleSave() {
|
|
|
51
59
|
: undefined
|
|
52
60
|
}
|
|
53
61
|
});
|
|
62
|
+
await SettingService.setGlobal({
|
|
63
|
+
key: PREVIEW_TAGS_OVERRIDE_SETTING,
|
|
64
|
+
requestBody: {
|
|
65
|
+
value: previewTagsOverride
|
|
66
|
+
}
|
|
67
|
+
});
|
|
54
68
|
// Update original state after save
|
|
55
69
|
originalDefaultTagPerWorkspace = defaultTagPerWorkspace;
|
|
56
70
|
originalDefaultTagWorkspaces = [...(defaultTagWorkspaces || [])];
|
|
71
|
+
originalPreviewTagsOverride = previewTagsOverride;
|
|
57
72
|
loadDefaultTags();
|
|
58
73
|
sendUserToast('Saved');
|
|
59
74
|
}
|
|
@@ -126,6 +141,18 @@ loadWorkspaces();
|
|
|
126
141
|
/>
|
|
127
142
|
{/if}
|
|
128
143
|
{/if}
|
|
144
|
+
<div class="flex flex-col gap-1">
|
|
145
|
+
<Toggle
|
|
146
|
+
bind:checked={previewTagsOverride}
|
|
147
|
+
options={{
|
|
148
|
+
right: 'route preview jobs to dedicated preview tag',
|
|
149
|
+
rightTooltip:
|
|
150
|
+
'When enabled, preview jobs (script previews and flow previews) will be routed to the "preview" tag instead of their language-specific tag, allowing you to dedicate specific workers for previews.'
|
|
151
|
+
}}
|
|
152
|
+
class="w-fit"
|
|
153
|
+
disabled={!$enterpriseLicense}
|
|
154
|
+
/>
|
|
155
|
+
</div>
|
|
129
156
|
</div>
|
|
130
157
|
|
|
131
158
|
<div class="flex gap-2 items-center mb-1">
|
|
@@ -148,6 +175,17 @@ loadWorkspaces();
|
|
|
148
175
|
</div>
|
|
149
176
|
</div>
|
|
150
177
|
{/each}
|
|
178
|
+
{#if previewTagsOverride}
|
|
179
|
+
<div class="flex gap-2 items-center">
|
|
180
|
+
<div class="w-36">
|
|
181
|
+
<Badge color="transparent">preview</Badge>
|
|
182
|
+
</div>
|
|
183
|
+
<div class="w-6 flex justify-center text-secondary">→</div>
|
|
184
|
+
<div class="flex-1">
|
|
185
|
+
<Badge color="blue">{defaultTagPerWorkspace ? 'preview-$workspace' : 'preview'}</Badge>
|
|
186
|
+
</div>
|
|
187
|
+
</div>
|
|
188
|
+
{/if}
|
|
151
189
|
</div>
|
|
152
190
|
{/if}
|
|
153
191
|
</Section>
|
|
@@ -207,12 +207,25 @@ async function getDependencies(kind, path) {
|
|
|
207
207
|
}
|
|
208
208
|
throw new Error('Missing trigger information');
|
|
209
209
|
}
|
|
210
|
+
else if (kind == 'script') {
|
|
211
|
+
const imports = await WorkspaceService.getImports({
|
|
212
|
+
workspace: $workspaceStore,
|
|
213
|
+
importerPath: path
|
|
214
|
+
});
|
|
215
|
+
return imports.map((importedPath) => ({ kind: 'script', path: importedPath }));
|
|
216
|
+
}
|
|
210
217
|
return [];
|
|
211
218
|
}
|
|
212
219
|
let toProcess = [{ kind, path }];
|
|
220
|
+
let processedSet = new Set();
|
|
213
221
|
let processed = [];
|
|
214
222
|
while (toProcess.length > 0) {
|
|
215
223
|
const { kind, path } = toProcess.pop();
|
|
224
|
+
const key = `${kind}:${path}`;
|
|
225
|
+
if (processedSet.has(key)) {
|
|
226
|
+
continue;
|
|
227
|
+
}
|
|
228
|
+
processedSet.add(key);
|
|
216
229
|
toProcess.push(...(await rec(kind, path)));
|
|
217
230
|
processed.push({ kind, path });
|
|
218
231
|
}
|
|
@@ -63,11 +63,18 @@ async function loadDiffEditor() {
|
|
|
63
63
|
}
|
|
64
64
|
});
|
|
65
65
|
}
|
|
66
|
-
if (defaultLang !== undefined ||
|
|
66
|
+
if (defaultLang !== undefined ||
|
|
67
|
+
defaultOriginal !== undefined ||
|
|
68
|
+
defaultModified !== undefined ||
|
|
69
|
+
modifiedModel !== undefined) {
|
|
67
70
|
setupModel(defaultLang ?? 'plaintext', defaultOriginal, defaultModified, defaultModifiedLang);
|
|
68
71
|
}
|
|
69
72
|
}
|
|
70
73
|
export function setupModel(lang, original, modified, modifiedLang) {
|
|
74
|
+
defaultLang = lang;
|
|
75
|
+
defaultOriginal = original;
|
|
76
|
+
defaultModified = modified;
|
|
77
|
+
defaultModifiedLang = modifiedLang;
|
|
71
78
|
const o = meditor.createModel(original ?? '', lang);
|
|
72
79
|
const m = modifiedModel ?? meditor.createModel(modified ?? '', modifiedLang ?? lang);
|
|
73
80
|
diffEditor?.setModel({
|
|
@@ -87,6 +94,7 @@ export function setModified(code) {
|
|
|
87
94
|
defaultModified = code;
|
|
88
95
|
}
|
|
89
96
|
export function setModifiedModel(model) {
|
|
97
|
+
modifiedModel = model;
|
|
90
98
|
const curr = diffEditor?.getModel();
|
|
91
99
|
if (!curr)
|
|
92
100
|
return;
|
|
@@ -121,6 +129,41 @@ $effect(() => {
|
|
|
121
129
|
});
|
|
122
130
|
}
|
|
123
131
|
});
|
|
132
|
+
$effect(() => {
|
|
133
|
+
if (!diffEditor) {
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
const lang = defaultLang ?? 'plaintext';
|
|
137
|
+
const modifiedLang = defaultModifiedLang ?? lang;
|
|
138
|
+
const currentModel = diffEditor.getModel();
|
|
139
|
+
if (!currentModel) {
|
|
140
|
+
setupModel(lang, defaultOriginal, defaultModified, defaultModifiedLang);
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
if (currentModel.original.getLanguageId() !== lang) {
|
|
144
|
+
meditor.setModelLanguage(currentModel.original, lang);
|
|
145
|
+
}
|
|
146
|
+
const originalValue = defaultOriginal ?? '';
|
|
147
|
+
if (currentModel.original.getValue() !== originalValue) {
|
|
148
|
+
currentModel.original.setValue(originalValue);
|
|
149
|
+
}
|
|
150
|
+
if (modifiedModel) {
|
|
151
|
+
if (currentModel.modified !== modifiedModel) {
|
|
152
|
+
diffEditor.setModel({
|
|
153
|
+
original: currentModel.original,
|
|
154
|
+
modified: modifiedModel
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
if (currentModel.modified.getLanguageId() !== modifiedLang) {
|
|
160
|
+
meditor.setModelLanguage(currentModel.modified, modifiedLang);
|
|
161
|
+
}
|
|
162
|
+
const modifiedValue = defaultModified ?? '';
|
|
163
|
+
if (currentModel.modified.getValue() !== modifiedValue) {
|
|
164
|
+
currentModel.modified.setValue(modifiedValue);
|
|
165
|
+
}
|
|
166
|
+
});
|
|
124
167
|
onMount(() => {
|
|
125
168
|
if (BROWSER) {
|
|
126
169
|
return () => {
|
|
@@ -27,7 +27,7 @@ import Editor from './Editor.svelte';
|
|
|
27
27
|
import AddPropertyV2 from './schema/AddPropertyV2.svelte';
|
|
28
28
|
// export let openEditTab: () => void = () => {}
|
|
29
29
|
const dispatch = createEventDispatcher();
|
|
30
|
-
let { schema = $bindable(), hiddenArgs = [], args = $bindable(undefined), shouldHideNoInputs = false, noVariablePicker = false, flexWrap = false, uiOnly = false, isFlowInput = false, noPreview = false, jsonEnabled = true, isAppInput = false, displayWebhookWarning = false, onlyMaskPassword = false, editTab, previewSchema = undefined, editPanelInitialSize = undefined, editPanelSize = $bindable(0), diff = {}, disableDnd = false, shouldDispatchChanges = false, isValid = $bindable(true), customUi = undefined, pannelExtraButtonWidth = 0, class: clazz = '', dynCode = $bindable(), dynLang = $bindable(), showDynOpt = false, addPropertyInEditorTab = false, openEditTab, addProperty, runButton, extraTab, schemaFormClassName = undefined, onChange = undefined } = $props();
|
|
30
|
+
let { schema = $bindable(), hiddenArgs = [], args = $bindable(undefined), shouldHideNoInputs = false, noVariablePicker = false, flexWrap = false, uiOnly = false, isFlowInput = false, noPreview = false, jsonEnabled = true, isAppInput = false, showSensitiveToggle = false, displayWebhookWarning = false, onlyMaskPassword = false, editTab, previewSchema = undefined, editPanelInitialSize = undefined, editPanelSize = $bindable(0), diff = {}, disableDnd = false, shouldDispatchChanges = false, isValid = $bindable(true), customUi = undefined, pannelExtraButtonWidth = 0, class: clazz = '', dynCode = $bindable(), dynLang = $bindable(), showDynOpt = false, addPropertyInEditorTab = false, openEditTab, addProperty, runButton, extraTab, schemaFormClassName = undefined, onChange = undefined } = $props();
|
|
31
31
|
$effect.pre(() => {
|
|
32
32
|
if (args == undefined) {
|
|
33
33
|
args = {};
|
|
@@ -184,7 +184,9 @@ export function updateJson() {
|
|
|
184
184
|
editor?.setCode(schemaString);
|
|
185
185
|
}
|
|
186
186
|
const editTabDefaultSize = untrack(() => noPreview) ? 100 : 50;
|
|
187
|
-
editPanelSize = untrack(() => editTab)
|
|
187
|
+
editPanelSize = untrack(() => editTab)
|
|
188
|
+
? (untrack(() => editPanelInitialSize) ?? editTabDefaultSize)
|
|
189
|
+
: 0;
|
|
188
190
|
let inputPanelSize = $state(100 - editPanelSize);
|
|
189
191
|
let editPanelSizeSmooth = tweened(editPanelSize, {
|
|
190
192
|
duration: 150
|
|
@@ -547,6 +549,7 @@ let dndType = $state(generateRandomString());
|
|
|
547
549
|
bind:order={schema.properties[argName].order}
|
|
548
550
|
{isFlowInput}
|
|
549
551
|
{isAppInput}
|
|
552
|
+
{showSensitiveToggle}
|
|
550
553
|
>
|
|
551
554
|
{#snippet typeeditor()}
|
|
552
555
|
{#if isFlowInput || isAppInput}
|
|
@@ -14,6 +14,7 @@ interface Props {
|
|
|
14
14
|
noPreview?: boolean;
|
|
15
15
|
jsonEnabled?: boolean;
|
|
16
16
|
isAppInput?: boolean;
|
|
17
|
+
showSensitiveToggle?: boolean;
|
|
17
18
|
displayWebhookWarning?: boolean;
|
|
18
19
|
onlyMaskPassword?: boolean;
|
|
19
20
|
editTab: 'inputEditor' | 'history' | 'savedInputs' | 'json' | 'captures' | 'firstStepInputs' | undefined;
|
|
@@ -1599,7 +1599,11 @@ let handleSqlTypingInTs = useDebounce(function handleSqlTypingInTs() {
|
|
|
1599
1599
|
// Send SQL query information to the custom TypeScript worker
|
|
1600
1600
|
// The worker will inject type parameters into the code that TypeScript analyzes
|
|
1601
1601
|
// Worker async function call freezes if we pass a Proxy, $state.snapshot() is very important here
|
|
1602
|
-
|
|
1602
|
+
// Filter out queries with raw interpolations — they can't be type-checked
|
|
1603
|
+
let queriesToSend = $state
|
|
1604
|
+
.snapshot(preparedAssetsSqlQueries)
|
|
1605
|
+
.filter((q) => !q.has_raw_interpolation);
|
|
1606
|
+
updateSqlQueriesInWorker(uri, queriesToSend);
|
|
1603
1607
|
}, 250);
|
|
1604
1608
|
watch([() => preparedAssetsSqlQueries, () => lang, () => isTsWorkerInitialized.current], () => {
|
|
1605
1609
|
handleSqlTypingInTs();
|
|
@@ -71,6 +71,7 @@ let showContextVarPicker = $derived([
|
|
|
71
71
|
'nu',
|
|
72
72
|
'java',
|
|
73
73
|
'ruby',
|
|
74
|
+
'rlang',
|
|
74
75
|
'postgresql',
|
|
75
76
|
'mysql',
|
|
76
77
|
'bigquery',
|
|
@@ -94,7 +95,8 @@ let showVarPicker = $derived([
|
|
|
94
95
|
'csharp',
|
|
95
96
|
'nu',
|
|
96
97
|
'java',
|
|
97
|
-
'ruby'
|
|
98
|
+
'ruby',
|
|
99
|
+
'rlang'
|
|
98
100
|
// for related places search: ADD_NEW_LANG
|
|
99
101
|
].includes(lang ?? ''));
|
|
100
102
|
let showResourcePicker = $derived([
|
|
@@ -111,7 +113,8 @@ let showResourcePicker = $derived([
|
|
|
111
113
|
'csharp',
|
|
112
114
|
'nu',
|
|
113
115
|
'java',
|
|
114
|
-
'ruby'
|
|
116
|
+
'ruby',
|
|
117
|
+
'rlang'
|
|
115
118
|
// for related places search: ADD_NEW_LANG
|
|
116
119
|
].includes(lang ?? ''));
|
|
117
120
|
let showS3Picker = $derived(['duckdb', 'python3'].includes(lang ?? '') ||
|
|
@@ -402,6 +405,8 @@ function windmillPathToCamelCaseName(path) {
|
|
|
402
405
|
// for related places search: ADD_NEW_LANG
|
|
403
406
|
} else if (lang == 'ruby') {
|
|
404
407
|
editor.insertAtCursor(`ENV['${name}']`)
|
|
408
|
+
} else if (lang == 'rlang') {
|
|
409
|
+
editor.insertAtCursor(`Sys.getenv("${name}")`)
|
|
405
410
|
} else if (
|
|
406
411
|
['postgresql', 'mysql', 'bigquery', 'mssql', 'oracledb', 'snowflake', 'duckdb'].includes(
|
|
407
412
|
lang ?? ''
|
|
@@ -470,6 +475,8 @@ string ${windmillPathToCamelCaseName(path)} = await client.GetStringAsync(uri);
|
|
|
470
475
|
editor.insertAtBeginning("require 'windmill/mini'\n")
|
|
471
476
|
}
|
|
472
477
|
editor.insertAtCursor(`get_variable("${path}")`)
|
|
478
|
+
} else if (lang == 'rlang') {
|
|
479
|
+
editor.insertAtCursor(`get_variable("${path}")`)
|
|
473
480
|
}
|
|
474
481
|
sendUserToast(`${name} inserted at cursor`)
|
|
475
482
|
}}
|
|
@@ -549,6 +556,8 @@ JsonNode ${windmillPathToCamelCaseName(path)} = JsonNode.Parse(await client.GetS
|
|
|
549
556
|
editor.insertAtBeginning("require 'windmill/mini'\n")
|
|
550
557
|
}
|
|
551
558
|
editor.insertAtCursor(`get_resource("${path}")`)
|
|
559
|
+
} else if (lang == 'rlang') {
|
|
560
|
+
editor.insertAtCursor(`get_resource("${path}")`)
|
|
552
561
|
} else if (lang == 'duckdb') {
|
|
553
562
|
let t = { postgresql: 'postgres', mysql: 'mysql', bigquery: 'bigquery' }[resType]
|
|
554
563
|
if (!t) {
|
|
@@ -635,7 +644,7 @@ JsonNode ${windmillPathToCamelCaseName(path)} = JsonNode.Parse(await client.GetS
|
|
|
635
644
|
startIcon={{ icon: Settings }}
|
|
636
645
|
target="_blank"
|
|
637
646
|
variant="accent"
|
|
638
|
-
href="{base}/workspace_settings?tab=
|
|
647
|
+
href="{base}/workspace_settings?tab=ducklake"
|
|
639
648
|
>
|
|
640
649
|
Go to settings
|
|
641
650
|
</Button>
|
|
@@ -419,10 +419,34 @@ function handleKeyDown(e) {
|
|
|
419
419
|
e.preventDefault();
|
|
420
420
|
}
|
|
421
421
|
let presets = $derived(_presets.filter((p) => {
|
|
422
|
-
// Only show presets that aren't already applied
|
|
423
|
-
|
|
422
|
+
// Only show presets that aren't already applied
|
|
423
|
+
if (asText.val.includes(p.value))
|
|
424
|
+
return false;
|
|
425
|
+
// For allowMultiple: check if the value is already in the comma-separated list
|
|
426
|
+
const match = p.value.match(/^(\w+):\\\s+(.+)$/);
|
|
427
|
+
if (match) {
|
|
428
|
+
const [, key, val] = match;
|
|
429
|
+
const existing = String(value[key] ?? '');
|
|
430
|
+
if (existing.split(',').some((v) => v.trim() === val))
|
|
431
|
+
return false;
|
|
432
|
+
}
|
|
433
|
+
return true;
|
|
424
434
|
}));
|
|
425
435
|
function appendFilterAsText(presetValue) {
|
|
436
|
+
// For allowMultiple fields, append value with comma to existing filter instead of adding duplicate key
|
|
437
|
+
const match = presetValue.match(/^(\w+):\\\s+(.+)$/);
|
|
438
|
+
if (match) {
|
|
439
|
+
const [, key, newVal] = match;
|
|
440
|
+
const filterDef = schema[key];
|
|
441
|
+
if (filterDef?.allowMultiple) {
|
|
442
|
+
const existing = value[key];
|
|
443
|
+
if (existing) {
|
|
444
|
+
value[key] = existing + ',' + newVal;
|
|
445
|
+
asText.reparse();
|
|
446
|
+
return;
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
}
|
|
426
450
|
if (!asText.val.endsWith('\u00A0') && !asText.val.endsWith(' '))
|
|
427
451
|
asText.val += ' ';
|
|
428
452
|
asText.val += presetValue + '\u00A0';
|
|
@@ -222,7 +222,8 @@ async function saveDraftInternal(forceSave = false) {
|
|
|
222
222
|
draft_only: true,
|
|
223
223
|
ws_error_handler_muted: flow.ws_error_handler_muted,
|
|
224
224
|
visible_to_runner_only: flow.visible_to_runner_only,
|
|
225
|
-
on_behalf_of_email: flow.on_behalf_of_email
|
|
225
|
+
on_behalf_of_email: flow.on_behalf_of_email,
|
|
226
|
+
labels: flow.labels
|
|
226
227
|
}
|
|
227
228
|
});
|
|
228
229
|
}
|
|
@@ -381,7 +382,8 @@ async function saveFlow(deploymentMsg, triggersToDeploy) {
|
|
|
381
382
|
visible_to_runner_only: flow.visible_to_runner_only,
|
|
382
383
|
on_behalf_of_email: flow.on_behalf_of_email,
|
|
383
384
|
preserve_on_behalf_of: $preserveOnBehalfOf || undefined,
|
|
384
|
-
deployment_message: deploymentMsg || undefined
|
|
385
|
+
deployment_message: deploymentMsg || undefined,
|
|
386
|
+
labels: flow.labels
|
|
385
387
|
}
|
|
386
388
|
});
|
|
387
389
|
await CaptureService.moveCapturesAndConfigs({
|
|
@@ -421,7 +423,8 @@ async function saveFlow(deploymentMsg, triggersToDeploy) {
|
|
|
421
423
|
visible_to_runner_only: flow.visible_to_runner_only,
|
|
422
424
|
on_behalf_of_email: flow.on_behalf_of_email,
|
|
423
425
|
preserve_on_behalf_of: $preserveOnBehalfOf || undefined,
|
|
424
|
-
deployment_message: deploymentMsg || undefined
|
|
426
|
+
deployment_message: deploymentMsg || undefined,
|
|
427
|
+
labels: flow.labels
|
|
425
428
|
}
|
|
426
429
|
});
|
|
427
430
|
}
|
|
@@ -8,7 +8,6 @@ import ToggleButton from './common/toggleButton-v2/ToggleButton.svelte';
|
|
|
8
8
|
import { DiffIcon, Minus, Plus, SquareSplitHorizontal } from 'lucide-svelte';
|
|
9
9
|
const SIDE_BY_SIDE_MIN_WIDTH = 700;
|
|
10
10
|
let { beforeYaml, afterYaml } = $props();
|
|
11
|
-
let parseError = $state(undefined);
|
|
12
11
|
let viewerWidth = $state(SIDE_BY_SIDE_MIN_WIDTH);
|
|
13
12
|
let beforePaneSize = $state(50);
|
|
14
13
|
let viewMode = $state('sidebyside');
|
|
@@ -16,26 +15,26 @@ let viewMode = $state('sidebyside');
|
|
|
16
15
|
let sharedViewport = $state({ x: 0, y: 0, zoom: 1 });
|
|
17
16
|
let beforeGraph = $state(undefined);
|
|
18
17
|
let afterGraph = $state(undefined);
|
|
19
|
-
|
|
18
|
+
function parseFlow(yaml, label) {
|
|
20
19
|
try {
|
|
21
|
-
|
|
22
|
-
return parsed;
|
|
20
|
+
return { flow: YAML.parse(yaml), error: undefined };
|
|
23
21
|
}
|
|
24
22
|
catch (error) {
|
|
25
|
-
|
|
26
|
-
|
|
23
|
+
return {
|
|
24
|
+
flow: undefined,
|
|
25
|
+
error: `Error parsing ${label} flow: ${error instanceof Error
|
|
26
|
+
? error.message
|
|
27
|
+
: typeof error === 'string'
|
|
28
|
+
? error
|
|
29
|
+
: 'Unknown error'}`
|
|
30
|
+
};
|
|
27
31
|
}
|
|
28
|
-
}
|
|
29
|
-
let
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
catch (error) {
|
|
35
|
-
parseError = `Error parsing after flow: ${error instanceof Error ? error.message : typeof error === 'string' ? error : 'Unknown error'}`;
|
|
36
|
-
return undefined;
|
|
37
|
-
}
|
|
38
|
-
});
|
|
32
|
+
}
|
|
33
|
+
let beforeParsed = $derived.by(() => parseFlow(beforeYaml, 'before'));
|
|
34
|
+
let afterParsed = $derived.by(() => parseFlow(afterYaml, 'after'));
|
|
35
|
+
let parseError = $derived(beforeParsed.error ?? afterParsed.error);
|
|
36
|
+
let beforeFlow = $derived(beforeParsed.flow);
|
|
37
|
+
let afterFlow = $derived(afterParsed.flow);
|
|
39
38
|
// Determine if we should render side-by-side or unified (user controlled via toggle)
|
|
40
39
|
let isSideBySide = $derived(viewMode === 'sidebyside');
|
|
41
40
|
// Build timeline using history-based approach
|
|
@@ -1,19 +1,31 @@
|
|
|
1
|
-
<script lang="ts">import {
|
|
1
|
+
<script lang="ts">import { Triggers } from './triggers/triggers.svelte';
|
|
2
|
+
import { createEventDispatcher, hasContext, setContext } from 'svelte';
|
|
3
|
+
import { writable } from 'svelte/store';
|
|
2
4
|
import { twMerge } from 'tailwind-merge';
|
|
3
5
|
import FlowGraphViewerStep from './FlowGraphViewerStep.svelte';
|
|
4
6
|
import FlowGraphV2 from './graph/FlowGraphV2.svelte';
|
|
5
7
|
import { dfs } from './flows/dfs';
|
|
6
8
|
import { workspaceStore } from '../stores';
|
|
7
|
-
let { flow, overflowAuto = false, noSide = false, download = false, noGraph = false, triggerNode = false, stepDetail = $bindable(undefined), workspace = $workspaceStore, minHeight = 400, noBorder = false, hideDefaultInputs = false } = $props();
|
|
9
|
+
let { flow, overflowAuto = false, noSide = false, download = false, noGraph = false, triggerNode = false, stepDetail = $bindable(undefined), workspace = $workspaceStore, minHeight = 400, noBorder = false, hideDefaultInputs = false, provideTriggerContext = false, fillAvailableHeight = false } = $props();
|
|
10
|
+
let availableHeight = $state(0);
|
|
11
|
+
if (provideTriggerContext && !hasContext('TriggerContext')) {
|
|
12
|
+
const triggersCount = writable(undefined);
|
|
13
|
+
setContext('TriggerContext', {
|
|
14
|
+
triggersCount,
|
|
15
|
+
simplifiedPoll: writable(false),
|
|
16
|
+
showCaptureHint: writable(undefined),
|
|
17
|
+
triggersState: new Triggers()
|
|
18
|
+
});
|
|
19
|
+
}
|
|
8
20
|
const dispatch = createEventDispatcher();
|
|
9
21
|
</script>
|
|
10
22
|
|
|
11
|
-
<div class="grid grid-cols-3 w-full h-full">
|
|
23
|
+
<div bind:clientHeight={availableHeight} class="grid grid-cols-3 w-full h-full min-h-0">
|
|
12
24
|
{#if !noGraph}
|
|
13
25
|
<div
|
|
14
26
|
class="{noSide || (hideDefaultInputs && stepDetail == undefined)
|
|
15
27
|
? 'col-span-3'
|
|
16
|
-
: 'sm:col-span-2 col-span-3'} w-full max-h-full"
|
|
28
|
+
: 'sm:col-span-2 col-span-3'} w-full h-full min-h-0 max-h-full"
|
|
17
29
|
class:overflow-auto={overflowAuto}
|
|
18
30
|
class:border={!noBorder}
|
|
19
31
|
>
|
|
@@ -23,7 +35,7 @@ const dispatch = createEventDispatcher();
|
|
|
23
35
|
cache={flow.value.cache_ttl !== undefined}
|
|
24
36
|
path={flow?.path}
|
|
25
37
|
{download}
|
|
26
|
-
{minHeight}
|
|
38
|
+
minHeight={fillAvailableHeight ? Math.max(minHeight, availableHeight) : minHeight}
|
|
27
39
|
{workspace}
|
|
28
40
|
modules={flow?.value?.modules}
|
|
29
41
|
failureModule={flow?.value?.failure_module}
|
|
@@ -50,7 +62,9 @@ const dispatch = createEventDispatcher();
|
|
|
50
62
|
{#if !noSide && !(hideDefaultInputs && stepDetail == undefined)}
|
|
51
63
|
<div
|
|
52
64
|
class={twMerge(
|
|
53
|
-
|
|
65
|
+
fillAvailableHeight
|
|
66
|
+
? 'relative w-full h-full min-h-0 border-r border-b border-t p-2 pt-0 overflow-auto hidden sm:flex flex-col gap-4'
|
|
67
|
+
: 'relative w-full h-full min-h-[150px] max-h-[90vh] border-r border-b border-t p-2 pt-0 overflow-auto hidden sm:flex flex-col gap-4',
|
|
54
68
|
noGraph ? 'border-0 w-max' : ''
|
|
55
69
|
)}
|
|
56
70
|
>
|
|
@@ -17,6 +17,8 @@ interface Props {
|
|
|
17
17
|
minHeight?: number;
|
|
18
18
|
noBorder?: boolean;
|
|
19
19
|
hideDefaultInputs?: boolean;
|
|
20
|
+
provideTriggerContext?: boolean;
|
|
21
|
+
fillAvailableHeight?: boolean;
|
|
20
22
|
}
|
|
21
23
|
interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
|
|
22
24
|
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
@@ -40,17 +40,10 @@ let codeViewer = $state();
|
|
|
40
40
|
|
|
41
41
|
<InputTransformsViewer inputTransforms={stepDetail?.value?.input_transforms ?? {}} />
|
|
42
42
|
</div>
|
|
43
|
-
|
|
44
|
-
<
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
class="w-full h-full text-sm"
|
|
48
|
-
title="embedded script from hub"
|
|
49
|
-
frameborder="0"
|
|
50
|
-
src="{$hubBaseUrlStore}/embed/script/{stepDetail.value?.path?.substring(4)}"
|
|
51
|
-
></iframe>
|
|
52
|
-
</div>
|
|
53
|
-
{/if}
|
|
43
|
+
<div class="mt-6">
|
|
44
|
+
<h3 class="mb-1 mt-6 text-xs font-semibold text-emphasis">Code</h3>
|
|
45
|
+
<FlowModuleScript path={stepDetail.value.path} hash={jobScriptHash} />
|
|
46
|
+
</div>
|
|
54
47
|
{:else if stepDetail.value.type == 'rawscript'}
|
|
55
48
|
<div class="text-2xs mb-4 mt-2">
|
|
56
49
|
<h3 class="mb-1 text-xs font-semibold text-emphasis">Step inputs</h3>
|
|
@@ -207,27 +200,16 @@ let codeViewer = $state();
|
|
|
207
200
|
<InputTransformsViewer inputTransforms={stepDetail?.value?.input_transforms ?? {}} />
|
|
208
201
|
</div>
|
|
209
202
|
{/if}
|
|
210
|
-
|
|
211
|
-
<
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
</div>
|
|
221
|
-
<iframe
|
|
222
|
-
class="w-full grow text-sm h-full"
|
|
223
|
-
title="embedded script from hub"
|
|
224
|
-
frameborder="0"
|
|
225
|
-
src="{$hubBaseUrlStore}/embed/script/{stepDetail.value?.path?.substring(4)}"
|
|
226
|
-
></iframe>
|
|
227
|
-
</div>
|
|
228
|
-
{:else}
|
|
229
|
-
<FlowModuleScript path={stepDetail.value.path} hash={jobScriptHash} />
|
|
230
|
-
{/if}
|
|
203
|
+
<div class="mb-1 mt-6 flex justify-between items-center">
|
|
204
|
+
<h3 class="font-semibold text-xs text-emphasis">Code</h3>
|
|
205
|
+
<Button
|
|
206
|
+
unifiedSize="sm"
|
|
207
|
+
variant="subtle"
|
|
208
|
+
onClick={codeViewer?.openDrawer}
|
|
209
|
+
startIcon={{ icon: Expand }}>Expand</Button
|
|
210
|
+
>
|
|
211
|
+
</div>
|
|
212
|
+
<FlowModuleScript path={stepDetail.value.path} hash={jobScriptHash} />
|
|
231
213
|
{:else if stepDetail.value.type == 'aiagent'}
|
|
232
214
|
<div class="text-xs">
|
|
233
215
|
<h3 class="mb-1 font-semibold mt-2 text-xs text-emphasis">Step inputs</h3>
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
<script lang="ts">import {} from '../gen';
|
|
2
2
|
import { base } from '../base';
|
|
3
3
|
import JobStatus from './JobStatus.svelte';
|
|
4
|
+
import { flowPathToHref } from '../scripts';
|
|
4
5
|
import { displayDate, truncateRev } from '../utils';
|
|
5
6
|
import ScheduleEditor from './triggers/schedules/ScheduleEditor.svelte';
|
|
6
7
|
import TimeAgo from './TimeAgo.svelte';
|
|
@@ -87,7 +88,9 @@ let { job, scheduleEditor } = $props();
|
|
|
87
88
|
{#if (job && job.job_kind == 'flow') || job?.job_kind == 'script'}
|
|
88
89
|
{@const stem = `${job?.job_kind}s`}
|
|
89
90
|
{@const isScript = job?.job_kind === 'script'}
|
|
90
|
-
{@const viewHref =
|
|
91
|
+
{@const viewHref = isScript
|
|
92
|
+
? `${base}/${stem}/get/${job?.script_hash}`
|
|
93
|
+
: flowPathToHref(job?.script_path ?? '')}
|
|
91
94
|
<div class="flex flex-row gap-2 items-center">
|
|
92
95
|
{#if isScript}
|
|
93
96
|
<Code2 size={SMALL_ICON_SIZE} class="min-w-3.5" />
|
|
@@ -3,6 +3,7 @@ import { workspaceStore } from '../stores';
|
|
|
3
3
|
import { Badge, Button } from './common';
|
|
4
4
|
import { createEventDispatcher, getContext, untrack } from 'svelte';
|
|
5
5
|
import { runFlowPreview } from './flows/utils.svelte';
|
|
6
|
+
import { processSecretArgs } from './secretArgUtils';
|
|
6
7
|
import SchemaForm from './SchemaForm.svelte';
|
|
7
8
|
import SchemaFormWithArgPicker from './SchemaFormWithArgPicker.svelte';
|
|
8
9
|
import FlowStatusViewer from '../components/FlowStatusViewer.svelte';
|
|
@@ -80,6 +81,7 @@ export async function runPreview(args, restartedFrom, conversationId) {
|
|
|
80
81
|
lastPreviewFlow = JSON.stringify(flowStore.val);
|
|
81
82
|
flowProgressBar?.reset();
|
|
82
83
|
const newFlow = extractFlow(previewMode);
|
|
84
|
+
args = await processSecretArgs(args, flowStore.val.schema);
|
|
83
85
|
newJobId = await runFlowPreview(args, newFlow, $pathStore, restartedFrom, conversationId);
|
|
84
86
|
jobId = newJobId;
|
|
85
87
|
isRunning = true;
|