windmill-components 1.511.1 → 1.522.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/package/components/AppConnectInner.svelte.d.ts +1 -1
- package/package/components/ArgInput.svelte +42 -14
- package/package/components/ArgInput.svelte.d.ts +2 -10
- package/package/components/AssignableTagsInner.svelte +5 -0
- package/package/components/AuthSettings.svelte +4 -2
- package/package/components/AuthSettings.svelte.d.ts +1 -0
- package/package/components/DBManagerDrawer.svelte +154 -151
- package/package/components/DBManagerDrawer.svelte.d.ts +2 -2
- package/package/components/DBTable.svelte +3 -3
- package/package/components/DBTable.svelte.d.ts +1 -0
- package/package/components/DBTableEditor.svelte +7 -7
- package/package/components/DBTableEditor.svelte.d.ts +1 -1
- package/package/components/DeployWorkspace.svelte +1 -1
- package/package/components/DisplayResult.svelte +34 -8
- package/package/components/DisplayResult.svelte.d.ts +4 -1
- package/package/components/DynSelect.svelte +58 -34
- package/package/components/DynSelect.svelte.d.ts +3 -11
- package/package/components/EditableSchemaForm.svelte +126 -6
- package/package/components/EditableSchemaForm.svelte.d.ts +5 -1
- package/package/components/Editor.svelte +1 -1
- package/package/components/EditorBar.svelte +82 -4
- package/package/components/ErrorOrRecoveryHandler.svelte +76 -8
- package/package/components/ErrorOrRecoveryHandler.svelte.d.ts +2 -1
- package/package/components/ExploreAssetButton.svelte +14 -4
- package/package/components/ExploreAssetButton.svelte.d.ts +1 -0
- package/package/components/FlowJobResult.svelte +3 -3
- package/package/components/FlowJobResult.svelte.d.ts +1 -0
- package/package/components/FlowPreviewContent.svelte +9 -1
- package/package/components/FlowPreviewResult.svelte +4 -1
- package/package/components/FlowPreviewResult.svelte.d.ts +1 -0
- package/package/components/FlowStatusViewerInner.svelte +21 -3
- package/package/components/FlowStatusViewerInner.svelte.d.ts +7 -1
- package/package/components/FolderEditor.svelte +1 -1
- package/package/components/GitDiffPreview.svelte +14 -18
- package/package/components/GitDiffPreview.svelte.d.ts +2 -8
- package/package/components/GitHubAppIntegration.svelte +3 -1
- package/package/components/IdEditorInput.svelte +25 -22
- package/package/components/IdEditorInput.svelte.d.ts +11 -23
- package/package/components/InstanceSetting.svelte +7 -2
- package/package/components/InstanceSettings.svelte +1 -0
- package/package/components/JobLoader.svelte +48 -5
- package/package/components/JobLoader.svelte.d.ts +7 -2
- package/package/components/Login.svelte +8 -2
- package/package/components/MemoryFootprintViewer.svelte +1 -1
- package/package/components/ModulePreviewResultViewer.svelte +2 -2
- package/package/components/MoveDrawer.svelte.d.ts +2 -2
- package/package/components/NextcloudSetting.svelte +84 -0
- package/package/components/NextcloudSetting.svelte.d.ts +7 -0
- package/package/components/ObjectResourceInput.svelte +3 -2
- package/package/components/ObjectResourceInput.svelte.d.ts +1 -0
- package/package/components/ParqetCsvTableRenderer.svelte +1 -1
- package/package/components/ResourceEditor.svelte +1 -1
- package/package/components/ResourcePicker.svelte +8 -1
- package/package/components/ResourcePicker.svelte.d.ts +1 -0
- package/package/components/ResultStreamDisplay.svelte +5 -0
- package/package/components/ResultStreamDisplay.svelte.d.ts +5 -0
- package/package/components/RunForm.svelte +9 -1
- package/package/components/SchemaForm.svelte +2 -2
- package/package/components/SchemaForm.svelte.d.ts +2 -10
- package/package/components/ScriptBuilder.svelte +13 -8
- package/package/components/ScriptBuilder.svelte.d.ts +1 -1
- package/package/components/ScriptEditor.svelte.d.ts +1 -1
- package/package/components/ScriptWrapper.svelte +1 -1
- package/package/components/ShareModal.svelte.d.ts +1 -1
- package/package/components/SimpleAgTable.svelte +2 -0
- package/package/components/SimpleAgTable.svelte.d.ts +2 -0
- package/package/components/SqlRepl.svelte +21 -7
- package/package/components/SqlRepl.svelte.d.ts +2 -2
- package/package/components/StringTypeNarrowing.svelte.d.ts +1 -1
- package/package/components/WorkerTagSelect.svelte +70 -1
- package/package/components/apps/components/display/AppDisplayComponent.svelte +13 -1
- package/package/components/apps/components/display/AppText.svelte +2 -2
- package/package/components/apps/components/display/dbtable/AppDbExplorer.svelte +8 -1
- package/package/components/apps/components/display/dbtable/InsertRow.svelte +5 -4
- package/package/components/apps/components/display/dbtable/queries/count.js +11 -1
- package/package/components/apps/components/display/dbtable/queries/createTable.d.ts +1 -1
- package/package/components/apps/components/display/dbtable/queries/createTable.js +3 -3
- package/package/components/apps/components/display/dbtable/queries/delete.js +7 -0
- package/package/components/apps/components/display/dbtable/queries/insert.js +2 -0
- package/package/components/apps/components/display/dbtable/queries/select.js +14 -0
- package/package/components/apps/components/display/dbtable/queries/update.js +7 -0
- package/package/components/apps/components/display/dbtable/utils.d.ts +6 -5
- package/package/components/apps/components/display/dbtable/utils.js +52 -28
- package/package/components/apps/components/display/table/AppAggridExplorerTable.svelte +1 -1
- package/package/components/apps/components/display/table/AppAggridInfiniteTable.svelte +1 -0
- package/package/components/apps/components/display/table/AppAggridInfiniteTable.svelte.d.ts +1 -0
- package/package/components/apps/components/display/table/AppAggridTable.svelte +5 -4
- package/package/components/apps/components/display/table/AppAggridTable.svelte.d.ts +1 -0
- package/package/components/apps/components/display/table/utils.js +7 -4
- package/package/components/apps/components/helpers/HiddenComponent.svelte +2 -2
- package/package/components/apps/components/helpers/RunnableComponent.svelte +4 -1
- package/package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +2 -1
- package/package/components/apps/components/inputs/AppS3FileInput.svelte +2 -2
- package/package/components/apps/components/layout/AppDecisionTree.svelte +1 -1
- package/package/components/apps/components/layout/AppStepper.svelte +1 -1
- package/package/components/apps/components/layout/AppTabs.svelte +1 -1
- package/package/components/apps/editor/AppEditorHeader.svelte +13 -2
- package/package/components/apps/editor/GridViewer.svelte +1 -0
- package/package/components/apps/editor/RunnableJobPanelInner.svelte +2 -1
- package/package/components/apps/editor/contextPanel/components/IdEditor.svelte +7 -7
- package/package/components/apps/editor/contextPanel/components/IdEditor.svelte.d.ts +7 -19
- package/package/components/apps/editor/contextPanel/components/OutputHeader.svelte +8 -12
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte.d.ts +1 -1
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorDrawer.svelte.d.ts +1 -1
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte.d.ts +1 -1
- package/package/components/apps/editor/settingsPanel/DecisionTreeGraphEditor.svelte +3 -3
- package/package/components/apps/editor/settingsPanel/decisionTree/DecisionTreePreview.svelte +1 -3
- package/package/components/assets/AssetsDropdownButton.svelte +1 -1
- package/package/components/assets/JobAssetsViewer.svelte +2 -2
- package/package/components/assets/lib.js +4 -0
- package/package/components/auditLogs/AuditLogsFilters.svelte +7 -9
- package/package/components/common/button/Button.svelte +4 -3
- package/package/components/common/button/Button.svelte.d.ts +1 -0
- package/package/components/common/confirmationModal/ConfirmationModal.svelte +6 -5
- package/package/components/common/confirmationModal/ConfirmationModal.svelte.d.ts +6 -11
- package/package/components/common/confirmationModal/asyncConfirmationModal.svelte.d.ts +26 -0
- package/package/components/common/confirmationModal/asyncConfirmationModal.svelte.js +50 -0
- package/package/components/common/modal/Modal.svelte +2 -5
- package/package/components/common/tabs/TabsV2.svelte +2 -1
- package/package/components/common/tabs/TabsV2.svelte.d.ts +1 -0
- package/package/components/copilot/chat/AIChatManager.svelte.js +61 -7
- package/package/components/copilot/chat/ContextTextarea.svelte +1 -1
- package/package/components/copilot/chat/script/core.js +28 -29
- package/package/components/copilot/chat/shared.d.ts +1 -1
- package/package/components/copilot/chat/shared.js +8 -2
- package/package/components/custom_ui.d.ts +2 -0
- package/package/components/dbOps.d.ts +20 -8
- package/package/components/dbOps.js +85 -40
- package/package/components/details/DetailPageHeader.svelte +0 -2
- package/package/components/flows/content/FlowInput.svelte +5 -0
- package/package/components/flows/content/FlowModuleScript.svelte +0 -1
- package/package/components/flows/idUtils.js +2 -1
- package/package/components/flows/map/FlowModuleSchemaItem.svelte +3 -3
- package/package/components/flows/map/FlowModuleSchemaMap.svelte +5 -0
- package/package/components/flows/map/InsertModuleButton.svelte +4 -1
- package/package/components/flows/propPicker/OutputBadge.svelte +5 -1
- package/package/components/flows/propPicker/OutputPickerInner.svelte +9 -5
- package/package/components/flows/propPicker/OutputPickerInner.svelte.d.ts +6 -2
- package/package/components/flows/propPicker/StepHistory.svelte +4 -1
- package/package/components/git_sync/DetectionFlow.svelte +202 -0
- package/package/components/git_sync/DetectionFlow.svelte.d.ts +6 -0
- package/package/components/git_sync/GitSyncContext.svelte.d.ts +82 -0
- package/package/components/git_sync/GitSyncContext.svelte.js +461 -0
- package/package/components/git_sync/GitSyncModalManager.svelte +99 -0
- package/package/components/git_sync/GitSyncModalManager.svelte.d.ts +18 -0
- package/package/components/git_sync/GitSyncRepositoryCard.svelte +339 -0
- package/package/components/git_sync/GitSyncRepositoryCard.svelte.d.ts +6 -0
- package/package/components/git_sync/GitSyncRepositoryList.svelte +17 -0
- package/package/components/git_sync/GitSyncRepositoryList.svelte.d.ts +18 -0
- package/package/components/git_sync/GitSyncSection.svelte +89 -0
- package/package/components/git_sync/GitSyncSection.svelte.d.ts +3 -0
- package/package/components/git_sync/GitSyncSuccessModal.svelte +58 -0
- package/package/components/git_sync/GitSyncSuccessModal.svelte.d.ts +7 -0
- package/package/components/git_sync/PullWorkspaceModal.svelte +575 -0
- package/package/components/git_sync/PullWorkspaceModal.svelte.d.ts +15 -0
- package/package/components/git_sync/PushWorkspaceModal.svelte +320 -0
- package/package/components/git_sync/PushWorkspaceModal.svelte.d.ts +12 -0
- package/package/components/graph/FlowGraphV2.svelte +5 -1
- package/package/components/graph/graphBuilder.svelte.js +1 -1
- package/package/components/graph/renderers/nodes/AssetNode.svelte +4 -4
- package/package/components/icons/AssetDucklakeIcon.svelte +28 -0
- package/package/components/icons/AssetDucklakeIcon.svelte.d.ts +9 -0
- package/package/components/icons/AssetGenericIcon.svelte +3 -0
- package/package/components/icons/DucklakeIcon.svelte +18 -0
- package/package/components/icons/DucklakeIcon.svelte.d.ts +6 -0
- package/package/components/instanceSettings.js +11 -3
- package/package/components/runs/JobPreview.svelte +2 -2
- package/package/components/runs/NoWorkerWithTagWarning.svelte +3 -3
- package/package/components/runs/RunsFilter.svelte.d.ts +1 -1
- package/package/components/schema/FlowPropertyEditor.svelte +3 -2
- package/package/components/schema/FlowPropertyEditor.svelte.d.ts +1 -1
- package/package/components/schema/PropertyEditor.svelte +0 -2
- package/package/components/schema/PropertyEditor.svelte.d.ts +1 -1
- package/package/components/schema/SchemaFormDND.svelte +2 -1
- package/package/components/schema/SchemaFormDND.svelte.d.ts +2 -0
- package/package/components/scriptEditor/LogPanel.svelte +5 -3
- package/package/components/scriptEditor/LogPanel.svelte.d.ts +5 -1
- package/package/components/select/Select.svelte +7 -4
- package/package/components/select/Select.svelte.d.ts +5 -0
- package/package/components/select/SelectDropdown.svelte +2 -1
- package/package/components/select/SelectDropdown.svelte.d.ts +3 -0
- package/package/components/sidebar/changelogs.js +5 -0
- package/package/components/table/AutoDataTable.svelte +6 -4
- package/package/components/table/AutoDataTable.svelte.d.ts +1 -0
- package/package/components/table/DataTable.svelte +12 -10
- package/package/components/table/DataTable.svelte.d.ts +1 -0
- package/package/components/triggers/TriggerRetriesAndErrorHandler.svelte.d.ts +2 -2
- package/package/components/triggers/gcp/GcpTriggerEditorConfigSection.svelte +1 -1
- package/package/components/triggers/gcp/GcpTriggerEditorConfigSection.svelte.d.ts +2 -1
- package/package/components/triggers/gcp/GcpTriggerEditorInner.svelte +50 -11
- package/package/components/triggers/gcp/utils.js +1 -0
- package/package/components/triggers/http/utils.js +1 -1
- package/package/components/triggers/kafka/utils.js +1 -1
- package/package/components/triggers/mqtt/utils.js +1 -1
- package/package/components/triggers/nats/utils.js +1 -1
- package/package/components/triggers/postgres/utils.js +1 -1
- package/package/components/triggers/sqs/utils.js +1 -1
- package/package/components/triggers/utils.js +2 -1
- package/package/components/triggers/webhook/WebhooksConfigSection.svelte +24 -26
- package/package/components/triggers/webhook/WebhooksPanel.svelte +1 -15
- package/package/components/triggers/websocket/utils.js +1 -1
- package/package/components/workspaceSettings/AISettings.svelte +52 -36
- package/package/components/workspaceSettings/DucklakeSettings.svelte +321 -0
- package/package/components/workspaceSettings/DucklakeSettings.svelte.d.ts +23 -0
- package/package/components/workspaceSettings/GitSyncFilterSettings.svelte +122 -499
- package/package/components/workspaceSettings/GitSyncFilterSettings.svelte.d.ts +8 -10
- package/package/consts.js +2 -1
- package/package/gen/core/OpenAPI.js +1 -1
- package/package/gen/schemas.gen.d.ts +7 -6
- package/package/gen/schemas.gen.js +7 -6
- package/package/gen/services.gen.d.ts +19 -1
- package/package/gen/services.gen.js +38 -0
- package/package/gen/types.gen.d.ts +78 -3
- package/package/git-sync.d.ts +36 -0
- package/package/git-sync.js +1 -0
- package/package/hub.d.ts +1 -0
- package/package/hubPaths.json +5 -2
- package/package/infer.js +3 -2
- package/package/script_helpers.d.ts +2 -2
- package/package/script_helpers.js +29 -11
- package/package/services/JobManager.d.ts +28 -0
- package/package/services/JobManager.js +114 -0
- package/package/stores.d.ts +1 -1
- package/package/utils.d.ts +18 -1
- package/package/utils.js +55 -2
- package/package.json +5 -4
- package/package/components/InitGitRepoPopover.svelte +0 -410
- package/package/components/InitGitRepoPopover.svelte.d.ts +0 -13
- package/package/components/PullGitRepoPopover.svelte +0 -355
- package/package/components/PullGitRepoPopover.svelte.d.ts +0 -18
- package/package/inferArgSig.d.ts +0 -42
- package/package/inferArgSig.js +0 -198
|
@@ -74,6 +74,6 @@ declare const ScriptEditor: $$__sveltets_2_IsomorphicComponent<Props, {
|
|
|
74
74
|
setCollaborationMode: () => Promise<void>;
|
|
75
75
|
disableCollaboration: () => void;
|
|
76
76
|
updateArgs: (newArgs: Record<string, any>) => Promise<void>;
|
|
77
|
-
}, "args" | "code" | "assets" | "schema" | "
|
|
77
|
+
}, "args" | "code" | "assets" | "schema" | "selectedTab" | "editor" | "diffEditor" | "hasPreprocessor" | "captureTable">;
|
|
78
78
|
type ScriptEditor = InstanceType<typeof ScriptEditor>;
|
|
79
79
|
export default ScriptEditor;
|
|
@@ -16,7 +16,7 @@ declare const ShareModal: $$__sveltets_2_IsomorphicComponent<Record<string, neve
|
|
|
16
16
|
} & {
|
|
17
17
|
[evt: string]: CustomEvent<any>;
|
|
18
18
|
}, {}, {
|
|
19
|
-
openDrawer: (newPath: string, kind_l: "resource" | "script" | "flow" | "
|
|
19
|
+
openDrawer: (newPath: string, kind_l: "resource" | "script" | "flow" | "app" | "variable" | "schedule" | "group_" | "raw_app" | "http_trigger" | "websocket_trigger" | "kafka_trigger" | "nats_trigger" | "postgres_trigger" | "mqtt_trigger" | "gcp_trigger" | "sqs_trigger") => Promise<void>;
|
|
20
20
|
}, "">;
|
|
21
21
|
type ShareModal = InstanceType<typeof ShareModal>;
|
|
22
22
|
export default ShareModal;
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
<script lang="ts">import { sendUserToast } from '../toast';
|
|
2
|
+
import 'ag-grid-community/styles/ag-grid.css';
|
|
3
|
+
import 'ag-grid-community/styles/ag-theme-alpine.css';
|
|
2
4
|
import { createGrid } from 'ag-grid-community';
|
|
3
5
|
import DarkModeObserver from './DarkModeObserver.svelte';
|
|
4
6
|
import { untrack } from 'svelte';
|
|
@@ -33,6 +33,12 @@ function splitSqlStatements(code) {
|
|
|
33
33
|
}
|
|
34
34
|
return statements;
|
|
35
35
|
}
|
|
36
|
+
function pruneComments(code) {
|
|
37
|
+
return code
|
|
38
|
+
.replace(/--.*?(\r?\n|$)/g, '')
|
|
39
|
+
.replace(/\/\*[\s\S]*?\*\//g, '')
|
|
40
|
+
.trim();
|
|
41
|
+
}
|
|
36
42
|
</script>
|
|
37
43
|
|
|
38
44
|
<script lang="ts">import { CornerDownLeft, Loader2 } from 'lucide-svelte';
|
|
@@ -44,7 +50,9 @@ import { untrack } from 'svelte';
|
|
|
44
50
|
import { getLanguageByResourceType } from './apps/components/display/dbtable/utils';
|
|
45
51
|
import StepHistory, {} from './flows/propPicker/StepHistory.svelte';
|
|
46
52
|
import { Pane, Splitpanes } from 'svelte-splitpanes';
|
|
47
|
-
|
|
53
|
+
import { getDbType, wrapDucklakeQuery } from './dbOps';
|
|
54
|
+
let { input, onData, placeholderTableName } = $props();
|
|
55
|
+
let dbType = $derived(getDbType(input));
|
|
48
56
|
const DEFAULT_SQL = 'SELECT * FROM _';
|
|
49
57
|
let code = $state(DEFAULT_SQL);
|
|
50
58
|
$effect(() => {
|
|
@@ -60,7 +68,11 @@ async function run({ doPostgresRowToJsonFix } = {}) {
|
|
|
60
68
|
return;
|
|
61
69
|
isRunning = true;
|
|
62
70
|
try {
|
|
63
|
-
const statements = splitSqlStatements(code);
|
|
71
|
+
const statements = splitSqlStatements(pruneComments(code));
|
|
72
|
+
if (statements.length === 0) {
|
|
73
|
+
sendUserToast('Nothing to run', true);
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
64
76
|
// Transform all to JSON in case of select. This fixes the issue of
|
|
65
77
|
// custom postgres enum type failing to convert to a rust type in the backend.
|
|
66
78
|
// We don't always put the fix by default for row ordering concerns
|
|
@@ -75,14 +87,16 @@ async function run({ doPostgresRowToJsonFix } = {}) {
|
|
|
75
87
|
})
|
|
76
88
|
.join(';');
|
|
77
89
|
}
|
|
90
|
+
const dbArg = input?.type === 'database' ? { database: '$res:' + input.resourcePath } : {};
|
|
91
|
+
if (input?.type === 'ducklake') {
|
|
92
|
+
transformedCode = wrapDucklakeQuery(transformedCode, input.ducklake);
|
|
93
|
+
}
|
|
78
94
|
let { job, result } = (await runScriptAndPollResult({
|
|
79
95
|
workspace: $workspaceStore,
|
|
80
96
|
requestBody: {
|
|
81
|
-
language: getLanguageByResourceType(
|
|
97
|
+
language: getLanguageByResourceType(dbType),
|
|
82
98
|
content: transformedCode,
|
|
83
|
-
args:
|
|
84
|
-
database: '$res:' + resourcePath
|
|
85
|
-
}
|
|
99
|
+
args: dbArg
|
|
86
100
|
}
|
|
87
101
|
}, { withJobData: true }));
|
|
88
102
|
if (statements.length > 1) {
|
|
@@ -113,7 +127,7 @@ async function run({ doPostgresRowToJsonFix } = {}) {
|
|
|
113
127
|
}
|
|
114
128
|
catch (e) {
|
|
115
129
|
console.error(e);
|
|
116
|
-
if (
|
|
130
|
+
if (dbType === 'postgresql' && !doPostgresRowToJsonFix) {
|
|
117
131
|
console.error('Error running query, trying with row_to_json fix');
|
|
118
132
|
isRunning = false;
|
|
119
133
|
return await run({ doPostgresRowToJsonFix: true });
|
|
@@ -15,6 +15,6 @@ interface Props {
|
|
|
15
15
|
overrideAllowKindChange?: boolean;
|
|
16
16
|
originalType?: string | undefined;
|
|
17
17
|
}
|
|
18
|
-
declare const StringTypeNarrowing: import("svelte").Component<Props, {}, "password" | "disableCreate" | "pattern" | "format" | "
|
|
18
|
+
declare const StringTypeNarrowing: import("svelte").Component<Props, {}, "password" | "disableCreate" | "pattern" | "format" | "enum_" | "enumLabels" | "contentEncoding" | "customErrorMessage" | "dateFormat" | "minRows" | "disableVariablePicker">;
|
|
19
19
|
type StringTypeNarrowing = ReturnType<typeof StringTypeNarrowing>;
|
|
20
20
|
export default StringTypeNarrowing;
|
|
@@ -1,13 +1,26 @@
|
|
|
1
1
|
<script lang="ts">import { workerTags, workspaceStore } from '../stores';
|
|
2
2
|
import { WorkerService } from '../gen';
|
|
3
|
-
import { createEventDispatcher } from 'svelte';
|
|
3
|
+
import { createEventDispatcher, onDestroy, onMount } from 'svelte';
|
|
4
4
|
import Select from './select/Select.svelte';
|
|
5
5
|
import { safeSelectItems } from './select/utils.svelte';
|
|
6
6
|
import { Button } from './common';
|
|
7
7
|
import { RotateCw } from 'lucide-svelte';
|
|
8
8
|
import { sendUserToast } from '../toast';
|
|
9
|
+
import Popover from './Popover.svelte';
|
|
9
10
|
let { tag = $bindable(), noLabel = false, nullTag = undefined, disabled = false, placeholder, inputClass } = $props();
|
|
10
11
|
let loading = $state(false);
|
|
12
|
+
let visible = $state(false);
|
|
13
|
+
let timeout = undefined;
|
|
14
|
+
let tagsToWorkerExists = $state(undefined);
|
|
15
|
+
onMount(() => {
|
|
16
|
+
visible = true;
|
|
17
|
+
});
|
|
18
|
+
onDestroy(() => {
|
|
19
|
+
visible = false;
|
|
20
|
+
if (timeout) {
|
|
21
|
+
clearTimeout(timeout);
|
|
22
|
+
}
|
|
23
|
+
});
|
|
11
24
|
loadWorkerGroups();
|
|
12
25
|
const dispatch = createEventDispatcher();
|
|
13
26
|
async function loadWorkerGroups(force = false) {
|
|
@@ -28,9 +41,64 @@ let items = $derived([
|
|
|
28
41
|
...(tag && tag != '' && !($workerTags ?? []).includes(tag) ? [tag] : []),
|
|
29
42
|
...($workerTags ?? [])
|
|
30
43
|
]);
|
|
44
|
+
let lastCheck = undefined;
|
|
45
|
+
async function loadTagsToWorkerExists(tags) {
|
|
46
|
+
if (lastCheck && Date.now() - lastCheck < 5000) {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
if (timeout) {
|
|
50
|
+
clearTimeout(timeout);
|
|
51
|
+
}
|
|
52
|
+
if (open) {
|
|
53
|
+
tagsToWorkerExists = await WorkerService.existsWorkersWithTags({ tags: tags.join(',') });
|
|
54
|
+
lastCheck = Date.now();
|
|
55
|
+
if (visible) {
|
|
56
|
+
timeout = setTimeout(() => {
|
|
57
|
+
loadTagsToWorkerExists(tags);
|
|
58
|
+
}, 5000);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// let finalItems = $derived(
|
|
63
|
+
// items.map((item) => {
|
|
64
|
+
// if (tagsToWorkerExists) {
|
|
65
|
+
// return {
|
|
66
|
+
// value: item,
|
|
67
|
+
// __select_group: tagsToWorkerExists[item]
|
|
68
|
+
// ? `${placeholder ?? 'Worker'}s available`
|
|
69
|
+
// : `No ${placeholder ?? 'Worker'}s`
|
|
70
|
+
// }
|
|
71
|
+
// }
|
|
72
|
+
// return item
|
|
73
|
+
// })
|
|
74
|
+
// )
|
|
75
|
+
$effect(() => {
|
|
76
|
+
if ($workerTags && open) {
|
|
77
|
+
loadTagsToWorkerExists($workerTags);
|
|
78
|
+
}
|
|
79
|
+
});
|
|
31
80
|
let open = $state(false);
|
|
32
81
|
</script>
|
|
33
82
|
|
|
83
|
+
{#snippet startSnippet({ item })}
|
|
84
|
+
{#if tagsToWorkerExists}
|
|
85
|
+
{#if tagsToWorkerExists[item.value]}
|
|
86
|
+
<Popover>
|
|
87
|
+
{#snippet text()}
|
|
88
|
+
At least one worker with this tag exists and is running.
|
|
89
|
+
{/snippet}
|
|
90
|
+
<div class="rounded-full inline-block bg-green-500 text-white text-xs w-2 h-2 mr-1"></div>
|
|
91
|
+
</Popover>
|
|
92
|
+
{:else}
|
|
93
|
+
<Popover>
|
|
94
|
+
{#snippet text()}
|
|
95
|
+
No workers with this tag exist or is running.
|
|
96
|
+
{/snippet}
|
|
97
|
+
<div class="rounded-full inline-block bg-red-500 text-white text-xs w-2 h-2 mr-1"></div>
|
|
98
|
+
</Popover>
|
|
99
|
+
{/if}
|
|
100
|
+
{/if}
|
|
101
|
+
{/snippet}
|
|
34
102
|
<div class="flex gap-1 items-center relative">
|
|
35
103
|
{#if !noLabel}
|
|
36
104
|
<div class="text-tertiary text-2xs">{placeholder ?? 'tag'}</div>
|
|
@@ -44,6 +112,7 @@ let open = $state(false);
|
|
|
44
112
|
placeholder={nullTag ? nullTag : (placeholder ?? 'lang default')}
|
|
45
113
|
items={safeSelectItems(items)}
|
|
46
114
|
bind:value={() => tag, (value) => ((tag = value), dispatch('change', value))}
|
|
115
|
+
{startSnippet}
|
|
47
116
|
/>
|
|
48
117
|
{#if open}
|
|
49
118
|
<div class="absolute top-0 -right-12">
|
|
@@ -9,6 +9,7 @@ import ResolveStyle from '../helpers/ResolveStyle.svelte';
|
|
|
9
9
|
import { components } from '../../editor/component';
|
|
10
10
|
import ResolveConfig from '../helpers/ResolveConfig.svelte';
|
|
11
11
|
import { userStore } from '../../../../stores';
|
|
12
|
+
let result_stream = $state(undefined);
|
|
12
13
|
let { id, componentInput, initializing = $bindable(undefined), customCss = undefined, render, configuration } = $props();
|
|
13
14
|
const requireHtmlApproval = getContext(IS_APP_PUBLIC_CONTEXT_KEY);
|
|
14
15
|
const { app, worldStore, componentControl, workspace, appPath } = getContext('AppViewerContext');
|
|
@@ -24,6 +25,7 @@ const outputs = initOutput($worldStore, id, {
|
|
|
24
25
|
loading: false
|
|
25
26
|
});
|
|
26
27
|
let css = $state(initCss($app.css?.displaycomponent, customCss));
|
|
28
|
+
let loading = $state(false);
|
|
27
29
|
</script>
|
|
28
30
|
|
|
29
31
|
{#each Object.keys(components['displaycomponent'].initialData.configuration) as key (key)}
|
|
@@ -45,7 +47,15 @@ let css = $state(initCss($app.css?.displaycomponent, customCss));
|
|
|
45
47
|
/>
|
|
46
48
|
{/each}
|
|
47
49
|
|
|
48
|
-
<RunnableWrapper
|
|
50
|
+
<RunnableWrapper
|
|
51
|
+
{outputs}
|
|
52
|
+
{render}
|
|
53
|
+
{componentInput}
|
|
54
|
+
{id}
|
|
55
|
+
bind:initializing
|
|
56
|
+
bind:result
|
|
57
|
+
bind:loading
|
|
58
|
+
>
|
|
49
59
|
<div class="flex flex-col w-full h-full component-wrapper">
|
|
50
60
|
<div
|
|
51
61
|
class={twMerge(
|
|
@@ -70,8 +80,10 @@ let css = $state(initCss($app.css?.displaycomponent, customCss));
|
|
|
70
80
|
)}
|
|
71
81
|
>
|
|
72
82
|
<DisplayResult
|
|
83
|
+
{loading}
|
|
73
84
|
workspaceId={workspace}
|
|
74
85
|
{result}
|
|
86
|
+
{result_stream}
|
|
75
87
|
{requireHtmlApproval}
|
|
76
88
|
disableExpand={resolvedConfig?.hideDetails}
|
|
77
89
|
appPath={$userStore ? undefined : $appPath}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
const bubble = createBubbler();
|
|
3
3
|
import Tooltip from '../../../Tooltip.svelte';
|
|
4
4
|
import { Clipboard } from 'lucide-svelte';
|
|
5
|
-
import { getContext } from 'svelte';
|
|
5
|
+
import { getContext, untrack } from 'svelte';
|
|
6
6
|
import { twMerge } from 'tailwind-merge';
|
|
7
7
|
import { copyToClipboard, isCodeInjection } from '../../../../utils';
|
|
8
8
|
import Button from '../../../common/button/Button.svelte';
|
|
@@ -34,7 +34,7 @@ $componentControl[id] = {
|
|
|
34
34
|
}
|
|
35
35
|
};
|
|
36
36
|
const outputs = initOutput($worldStore, id, {
|
|
37
|
-
result,
|
|
37
|
+
result: untrack(() => result),
|
|
38
38
|
loading: initializing
|
|
39
39
|
});
|
|
40
40
|
function getComponent() {
|
|
@@ -18,6 +18,7 @@ import { CancelablePromise } from '../../../../../gen';
|
|
|
18
18
|
import RefreshButton from '../../helpers/RefreshButton.svelte';
|
|
19
19
|
import RunnableWrapper from '../../helpers/RunnableWrapper.svelte';
|
|
20
20
|
import InsertRowDrawerButton from '../InsertRowDrawerButton.svelte';
|
|
21
|
+
import { assert } from '../../../../../utils';
|
|
21
22
|
let { id, configuration, customCss = undefined, render, initializing = $bindable(undefined), actions = [] } = $props();
|
|
22
23
|
$effect.pre(() => {
|
|
23
24
|
if (initializing === undefined) {
|
|
@@ -224,7 +225,13 @@ async function listColumnsIfAvailable() {
|
|
|
224
225
|
gridItem.data.configuration.columnDefs.loading = true;
|
|
225
226
|
gridItem.data = gridItem.data;
|
|
226
227
|
$app = $app;
|
|
227
|
-
let
|
|
228
|
+
let resource = resolvedConfig.type.configuration[selected].resource;
|
|
229
|
+
assert('resource starts with $res:', resource?.startsWith('$res:'), resource);
|
|
230
|
+
let tableMetadata = await loadTableMetaData({
|
|
231
|
+
type: 'database',
|
|
232
|
+
resourcePath: resource.substring(5),
|
|
233
|
+
resourceType: selected
|
|
234
|
+
}, $workspaceStore, resolvedConfig.type.configuration[selected].table);
|
|
228
235
|
if (!tableMetadata)
|
|
229
236
|
return;
|
|
230
237
|
let old = columnDefs?.value ?? [];
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
<script lang="ts">import { ColumnIdentity } from './utils';
|
|
2
|
-
import init, { parse_sql, parse_mysql, parse_bigquery, parse_snowflake, parse_mssql } from 'windmill-sql-datatype-parser-wasm';
|
|
2
|
+
import init, { parse_sql, parse_mysql, parse_bigquery, parse_snowflake, parse_mssql, parse_duckdb } from 'windmill-sql-datatype-parser-wasm';
|
|
3
3
|
import wasmUrl from 'windmill-sql-datatype-parser-wasm/windmill_sql_datatype_parser_wasm_bg.wasm?url';
|
|
4
4
|
init(wasmUrl);
|
|
5
|
-
import { argSigToJsonSchemaType } from '
|
|
5
|
+
import { argSigToJsonSchemaType } from 'windmill-utils-internal';
|
|
6
6
|
import SchemaForm from '../../../../SchemaForm.svelte';
|
|
7
7
|
import { untrack } from 'svelte';
|
|
8
8
|
let schema = $state(undefined);
|
|
@@ -24,8 +24,9 @@ function parseSQLArgs(field, dbType) {
|
|
|
24
24
|
case 'ms_sql_server':
|
|
25
25
|
rawType = parse_mssql(field);
|
|
26
26
|
break;
|
|
27
|
-
|
|
28
|
-
|
|
27
|
+
case 'duckdb':
|
|
28
|
+
rawType = parse_duckdb(field);
|
|
29
|
+
break;
|
|
29
30
|
}
|
|
30
31
|
return rawType;
|
|
31
32
|
}
|
|
@@ -77,6 +77,15 @@ export function makeCountQuery(dbType, table, whereClause = undefined, columnDef
|
|
|
77
77
|
query += `SELECT COUNT(*) as count FROM \`${table}\``;
|
|
78
78
|
break;
|
|
79
79
|
}
|
|
80
|
+
case 'duckdb':
|
|
81
|
+
if (filteredColumns.length > 0) {
|
|
82
|
+
quicksearchCondition += ` ($quicksearch = '' OR CONCAT(' ', ${filteredColumns.join(', ')}) LIKE CONCAT('%', $quicksearch, '%'))`;
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
quicksearchCondition += ` ($quicksearch = '' OR 1 = 1)`;
|
|
86
|
+
}
|
|
87
|
+
query += `SELECT COUNT(*) as count FROM ${table}`;
|
|
88
|
+
break;
|
|
80
89
|
default:
|
|
81
90
|
throw new Error('Unsupported database type:' + dbType);
|
|
82
91
|
}
|
|
@@ -91,7 +100,8 @@ export function makeCountQuery(dbType, table, whereClause = undefined, columnDef
|
|
|
91
100
|
(dbType === 'mysql' ||
|
|
92
101
|
dbType === 'postgresql' ||
|
|
93
102
|
dbType === 'snowflake' ||
|
|
94
|
-
dbType === 'bigquery'
|
|
103
|
+
dbType === 'bigquery' ||
|
|
104
|
+
dbType === 'duckdb')) {
|
|
95
105
|
query = query.replace(`${andCondition}`, wherePrefix);
|
|
96
106
|
}
|
|
97
107
|
return query;
|
|
@@ -20,6 +20,6 @@ type CreateTableValuesColumn = {
|
|
|
20
20
|
not_null?: boolean;
|
|
21
21
|
datatype_length?: number;
|
|
22
22
|
};
|
|
23
|
-
export declare function makeCreateTableQuery(values: CreateTableValues,
|
|
23
|
+
export declare function makeCreateTableQuery(values: CreateTableValues, dbType: DbType, schema?: string): string;
|
|
24
24
|
export declare function datatypeDefaultLength(datatype: string): number;
|
|
25
25
|
export {};
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { dbSupportsSchemas } from '../utils';
|
|
2
|
-
export function makeCreateTableQuery(values,
|
|
2
|
+
export function makeCreateTableQuery(values, dbType, schema) {
|
|
3
3
|
const pkCount = values.columns.reduce((p, c) => p + (c.primaryKey ? 1 : 0), 0);
|
|
4
4
|
function transformColumn(c) {
|
|
5
5
|
const datatype = c.datatype_length ? `${c.datatype}(${c.datatype_length})` : c.datatype;
|
|
6
|
-
const defValue = c.defaultValue && formatDefaultValue(c.defaultValue, datatype,
|
|
6
|
+
const defValue = c.defaultValue && formatDefaultValue(c.defaultValue, datatype, dbType);
|
|
7
7
|
let str = ` ${c.name} ${datatype}`;
|
|
8
8
|
if (c.not_null)
|
|
9
9
|
str += ' NOT NULL';
|
|
@@ -26,7 +26,7 @@ export function makeCreateTableQuery(values, resourceType, schema) {
|
|
|
26
26
|
l += ` ON UPDATE ${fk.onUpdate}`;
|
|
27
27
|
return l;
|
|
28
28
|
}
|
|
29
|
-
const useSchema = dbSupportsSchemas(
|
|
29
|
+
const useSchema = dbSupportsSchemas(dbType);
|
|
30
30
|
const lines = values.columns.map(transformColumn);
|
|
31
31
|
lines.push(...values.foreignKeys.map(transformFk));
|
|
32
32
|
if (pkCount > 1) {
|
|
@@ -37,6 +37,13 @@ export function makeDeleteQuery(table, columns, dbType) {
|
|
|
37
37
|
query += `\nDELETE FROM ${table} \nWHERE ${conditions}`;
|
|
38
38
|
return query;
|
|
39
39
|
}
|
|
40
|
+
case 'duckdb': {
|
|
41
|
+
const conditions = columns
|
|
42
|
+
.map((c) => `($${c.field} IS NULL AND ${c.field} IS NULL OR ${c.field} = $${c.field})`)
|
|
43
|
+
.join('\n AND ');
|
|
44
|
+
query += `\nDELETE FROM ${table} \nWHERE ${conditions}`;
|
|
45
|
+
return query;
|
|
46
|
+
}
|
|
40
47
|
default:
|
|
41
48
|
throw new Error('Unsupported database type');
|
|
42
49
|
}
|
|
@@ -12,6 +12,8 @@ function formatInsertValues(columns, dbType, startIndex = 1) {
|
|
|
12
12
|
return columns.map(() => `?`).join(', ');
|
|
13
13
|
case 'bigquery':
|
|
14
14
|
return columns.map((c) => `@${c.field}`).join(', ');
|
|
15
|
+
case 'duckdb':
|
|
16
|
+
return columns.map((c) => `$${c.field}`).join(', ');
|
|
15
17
|
default:
|
|
16
18
|
throw new Error('Unsupported database type');
|
|
17
19
|
}
|
|
@@ -155,6 +155,20 @@ CASE WHEN :order_by = '${column.field}' AND :is_desc IS true THEN \`${column.fie
|
|
|
155
155
|
query += ` LIMIT @limit OFFSET @offset`;
|
|
156
156
|
break;
|
|
157
157
|
}
|
|
158
|
+
case 'duckdb': {
|
|
159
|
+
const orderBy = `
|
|
160
|
+
${columnDefs
|
|
161
|
+
.map((column) => `
|
|
162
|
+
(CASE WHEN $order_by = '${column.field}' AND $is_desc IS false THEN "${column.field}"::text END),
|
|
163
|
+
(CASE WHEN $order_by = '${column.field}' AND $is_desc IS true THEN "${column.field}"::text END) DESC`)
|
|
164
|
+
.join(',\n')}`;
|
|
165
|
+
quicksearchCondition = `($quicksearch = '' OR CONCAT(${filteredColumns.join(', ')}) ILIKE '%' || $quicksearch || '%')`;
|
|
166
|
+
query += `SELECT ${filteredColumns.join(', ')} FROM ${table}\n`;
|
|
167
|
+
query += ` WHERE ${whereClause ? `${whereClause} AND` : ''} ${quicksearchCondition}\n`;
|
|
168
|
+
query += ` ORDER BY ${orderBy}\n`;
|
|
169
|
+
query += ` LIMIT $limit::INT OFFSET $offset::INT`;
|
|
170
|
+
break;
|
|
171
|
+
}
|
|
158
172
|
default:
|
|
159
173
|
throw new Error('Unsupported database type');
|
|
160
174
|
}
|
|
@@ -41,6 +41,13 @@ export function makeUpdateQuery(table, column, columns, dbType) {
|
|
|
41
41
|
query += `\nUPDATE ${table} SET ${column.field} = @value_to_update \nWHERE ${conditions}`;
|
|
42
42
|
return query;
|
|
43
43
|
}
|
|
44
|
+
case 'duckdb': {
|
|
45
|
+
const conditions = columns
|
|
46
|
+
.map((c) => `($${c.field} IS NULL AND ${c.field} IS NULL OR ${c.field} = $${c.field})`)
|
|
47
|
+
.join('\n AND ');
|
|
48
|
+
query += `\nUPDATE ${table} SET ${column.field} = $value_to_update \nWHERE ${conditions}`;
|
|
49
|
+
return query;
|
|
50
|
+
}
|
|
44
51
|
default:
|
|
45
52
|
throw new Error('Unsupported database type');
|
|
46
53
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type ScriptLang } from '../../../../../gen';
|
|
2
2
|
import type { DBSchema, DBSchemas, SQLSchema } from '../../../../../stores';
|
|
3
3
|
import { type IntrospectionQuery } from 'graphql';
|
|
4
|
+
import type { DbInput } from '../../../../dbOps';
|
|
4
5
|
export declare enum ColumnIdentity {
|
|
5
6
|
ByDefault = "By Default",
|
|
6
7
|
Always = "Always",
|
|
@@ -40,8 +41,8 @@ export type ColumnDef = {
|
|
|
40
41
|
defaultUserValue?: any;
|
|
41
42
|
defaultValueNull?: boolean;
|
|
42
43
|
} & ColumnMetadata;
|
|
43
|
-
export declare function loadTableMetaData(
|
|
44
|
-
export declare function loadAllTablesMetaData(
|
|
44
|
+
export declare function loadTableMetaData(input: DbInput, workspace: string | undefined, table: string | undefined): Promise<TableMetadata | undefined>;
|
|
45
|
+
export declare function loadAllTablesMetaData(workspace: string | undefined, input: DbInput): Promise<Record<string, TableMetadata> | undefined>;
|
|
45
46
|
export declare function resourceTypeToLang(rt: string): string;
|
|
46
47
|
declare const scripts: Record<string, {
|
|
47
48
|
code: string;
|
|
@@ -76,10 +77,10 @@ export declare function formatSchema(dbSchema: {
|
|
|
76
77
|
};
|
|
77
78
|
export declare function formatGraphqlSchema(schema: IntrospectionQuery): string;
|
|
78
79
|
export type DbType = (typeof dbTypes)[number];
|
|
79
|
-
export declare const dbTypes: readonly ["mysql", "ms_sql_server", "postgresql", "snowflake", "bigquery"];
|
|
80
|
+
export declare const dbTypes: readonly ["mysql", "ms_sql_server", "postgresql", "snowflake", "bigquery", "duckdb"];
|
|
80
81
|
export declare const isDbType: (str?: string) => str is DbType;
|
|
81
82
|
export declare function buildVisibleFieldList(columnDefs: ColumnDef[], dbType: DbType): string[];
|
|
82
|
-
export declare function getLanguageByResourceType(name: string):
|
|
83
|
+
export declare function getLanguageByResourceType(name: string): ScriptLang;
|
|
83
84
|
export declare function buildParameters(columns: Array<{
|
|
84
85
|
field: string;
|
|
85
86
|
datatype: string;
|