windmill-components 1.511.0 → 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 +56 -18
- 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 -0
- package/package/components/FlowPreviewContent.svelte.d.ts +3 -0
- package/package/components/FlowPreviewResult.svelte +4 -1
- package/package/components/FlowPreviewResult.svelte.d.ts +1 -0
- package/package/components/FlowStatusViewer.svelte +2 -1
- package/package/components/FlowStatusViewer.svelte.d.ts +3 -0
- package/package/components/FlowStatusViewerInner.svelte +23 -3
- package/package/components/FlowStatusViewerInner.svelte.d.ts +10 -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 +3 -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/FlowModuleComponent.svelte +1 -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 +33 -24
- package/package/gen/schemas.gen.js +36 -27
- package/package/gen/services.gen.d.ts +19 -1
- package/package/gen/services.gen.js +38 -0
- package/package/gen/types.gen.d.ts +103 -9
- 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 +13 -12
- 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 -35
- package/package/inferArgSig.js +0 -191
|
@@ -41,6 +41,7 @@ export type FlowBuilderWhitelabelCustomUi = {
|
|
|
41
41
|
downloadLogs?: boolean;
|
|
42
42
|
tagSelectPlaceholder?: string;
|
|
43
43
|
tagSelectNoLabel?: boolean;
|
|
44
|
+
tagLabel?: string;
|
|
44
45
|
};
|
|
45
46
|
export type DisplayResultUi = {
|
|
46
47
|
disableAiFix?: boolean;
|
|
@@ -71,6 +72,8 @@ export type EditorBarUi = {
|
|
|
71
72
|
useVsCode?: boolean;
|
|
72
73
|
diffMode?: boolean;
|
|
73
74
|
s3object?: boolean;
|
|
75
|
+
database?: boolean;
|
|
76
|
+
ducklake?: boolean;
|
|
74
77
|
};
|
|
75
78
|
export type EditableSchemaFormUi = {
|
|
76
79
|
jsonOnly?: boolean;
|
|
@@ -1,7 +1,15 @@
|
|
|
1
1
|
import { type ColumnDef, type DbType } from './apps/components/display/dbtable/utils';
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
import type { DBSchema } from '../stores';
|
|
3
|
+
export type DbInput = {
|
|
4
|
+
type: 'database';
|
|
4
5
|
resourceType: DbType;
|
|
6
|
+
resourcePath: string;
|
|
7
|
+
} | {
|
|
8
|
+
type: 'ducklake';
|
|
9
|
+
ducklake: string;
|
|
10
|
+
};
|
|
11
|
+
export type IDbTableOps = {
|
|
12
|
+
dbType: DbType;
|
|
5
13
|
tableKey: string;
|
|
6
14
|
colDefs: ColumnDef[];
|
|
7
15
|
getRows: (params: {
|
|
@@ -27,9 +35,8 @@ export type IDbTableOps = {
|
|
|
27
35
|
values: object;
|
|
28
36
|
}) => Promise<void>;
|
|
29
37
|
};
|
|
30
|
-
export declare function dbTableOpsWithPreviewScripts({
|
|
31
|
-
|
|
32
|
-
resourceType: DbType;
|
|
38
|
+
export declare function dbTableOpsWithPreviewScripts({ input, tableKey, colDefs, workspace }: {
|
|
39
|
+
input: DbInput;
|
|
33
40
|
tableKey: string;
|
|
34
41
|
colDefs: ColumnDef[];
|
|
35
42
|
workspace: string;
|
|
@@ -46,8 +53,13 @@ export type DbTableActionFactory = (params: {
|
|
|
46
53
|
tableKey: string;
|
|
47
54
|
refresh: () => void;
|
|
48
55
|
}) => DbTableAction;
|
|
49
|
-
export declare function dbDeleteTableActionWithPreviewScript({ workspace,
|
|
56
|
+
export declare function dbDeleteTableActionWithPreviewScript({ workspace, input }: {
|
|
50
57
|
workspace: string;
|
|
51
|
-
|
|
52
|
-
resourceType: DbType;
|
|
58
|
+
input: DbInput;
|
|
53
59
|
}): DbTableActionFactory;
|
|
60
|
+
export declare function getDucklakeSchema({ workspace, ducklake }: {
|
|
61
|
+
workspace: string;
|
|
62
|
+
ducklake: string;
|
|
63
|
+
}): Promise<DBSchema>;
|
|
64
|
+
export declare function getDbType(input: DbInput): DbType;
|
|
65
|
+
export declare function wrapDucklakeQuery(query: string, ducklake: string): string;
|
|
@@ -7,36 +7,35 @@ import { makeDeleteQuery } from './apps/components/display/dbtable/queries/delet
|
|
|
7
7
|
import { makeInsertQuery } from './apps/components/display/dbtable/queries/insert';
|
|
8
8
|
import { Trash2 } from 'lucide-svelte';
|
|
9
9
|
import { makeDeleteTableQuery } from './apps/components/display/dbtable/queries/deleteTable';
|
|
10
|
-
|
|
10
|
+
import { stringifySchema } from './copilot/lib';
|
|
11
|
+
export function dbTableOpsWithPreviewScripts({ input, tableKey, colDefs, workspace }) {
|
|
12
|
+
const dbType = getDbType(input);
|
|
13
|
+
const language = getLanguageByResourceType(dbType);
|
|
14
|
+
const dbArg = input?.type === 'database' ? { database: '$res:' + input.resourcePath } : {};
|
|
11
15
|
return {
|
|
12
|
-
|
|
13
|
-
resourceType,
|
|
16
|
+
dbType,
|
|
14
17
|
tableKey,
|
|
15
18
|
colDefs,
|
|
16
19
|
getCount: async ({ quicksearch }) => {
|
|
17
|
-
|
|
20
|
+
let countQuery = makeCountQuery(dbType, tableKey, undefined, colDefs);
|
|
21
|
+
if (input.type === 'ducklake')
|
|
22
|
+
countQuery = wrapDucklakeQuery(countQuery, input.ducklake);
|
|
18
23
|
const result = await runScriptAndPollResult({
|
|
19
24
|
workspace,
|
|
20
|
-
requestBody: {
|
|
21
|
-
args: { database: '$res:' + resourcePath, quicksearch },
|
|
22
|
-
language: getLanguageByResourceType(resourceType),
|
|
23
|
-
content: countQuery
|
|
24
|
-
}
|
|
25
|
+
requestBody: { args: { ...dbArg, quicksearch }, language, content: countQuery }
|
|
25
26
|
});
|
|
26
27
|
const count = result?.[0].count;
|
|
27
28
|
return count;
|
|
28
29
|
},
|
|
29
30
|
getRows: async (params) => {
|
|
30
|
-
|
|
31
|
+
let query = makeSelectQuery(tableKey, colDefs, undefined, dbType);
|
|
32
|
+
if (input.type === 'ducklake')
|
|
33
|
+
query = wrapDucklakeQuery(query, input.ducklake);
|
|
31
34
|
let items = (await runScriptAndPollResult({
|
|
32
35
|
workspace,
|
|
33
|
-
requestBody: {
|
|
34
|
-
args: { database: '$res:' + resourcePath, ...params },
|
|
35
|
-
language: getLanguageByResourceType(resourceType),
|
|
36
|
-
content: query
|
|
37
|
-
}
|
|
36
|
+
requestBody: { args: { ...dbArg, ...params }, language, content: query }
|
|
38
37
|
}));
|
|
39
|
-
if (resourceType === 'ms_sql_server')
|
|
38
|
+
if (input.type === 'database' && input.resourceType === 'ms_sql_server')
|
|
40
39
|
items = items?.[0];
|
|
41
40
|
if (!items || !Array.isArray(items)) {
|
|
42
41
|
throw 'items is not an array';
|
|
@@ -44,45 +43,40 @@ export function dbTableOpsWithPreviewScripts({ resourcePath, resourceType, table
|
|
|
44
43
|
return items;
|
|
45
44
|
},
|
|
46
45
|
onUpdate: async ({ values }, colDef, newValue) => {
|
|
47
|
-
|
|
46
|
+
let updateQuery = makeUpdateQuery(tableKey, colDef, colDefs, dbType);
|
|
47
|
+
if (input.type === 'ducklake')
|
|
48
|
+
updateQuery = wrapDucklakeQuery(updateQuery, input.ducklake);
|
|
48
49
|
await runScriptAndPollResult({
|
|
49
50
|
workspace,
|
|
50
51
|
requestBody: {
|
|
51
|
-
args: {
|
|
52
|
-
|
|
53
|
-
value_to_update: newValue,
|
|
54
|
-
...values
|
|
55
|
-
},
|
|
56
|
-
language: getLanguageByResourceType(resourceType),
|
|
52
|
+
args: { ...dbArg, value_to_update: newValue, ...values },
|
|
53
|
+
language,
|
|
57
54
|
content: updateQuery
|
|
58
55
|
}
|
|
59
56
|
});
|
|
60
57
|
},
|
|
61
58
|
onDelete: async ({ values }) => {
|
|
62
|
-
|
|
59
|
+
let deleteQuery = makeDeleteQuery(tableKey, colDefs, dbType);
|
|
60
|
+
if (input.type === 'ducklake')
|
|
61
|
+
deleteQuery = wrapDucklakeQuery(deleteQuery, input.ducklake);
|
|
63
62
|
await runScriptAndPollResult({
|
|
64
63
|
workspace,
|
|
65
|
-
requestBody: {
|
|
66
|
-
args: { database: '$res:' + resourcePath, ...values },
|
|
67
|
-
language: getLanguageByResourceType(resourceType),
|
|
68
|
-
content: deleteQuery
|
|
69
|
-
}
|
|
64
|
+
requestBody: { args: { ...dbArg, ...values }, language, content: deleteQuery }
|
|
70
65
|
});
|
|
71
66
|
},
|
|
72
67
|
onInsert: async ({ values }) => {
|
|
73
|
-
|
|
74
|
-
|
|
68
|
+
let insertQuery = makeInsertQuery(tableKey, colDefs, dbType);
|
|
69
|
+
if (input.type === 'ducklake')
|
|
70
|
+
insertQuery = wrapDucklakeQuery(insertQuery, input.ducklake);
|
|
71
|
+
await runScriptAndPollResult({
|
|
75
72
|
workspace,
|
|
76
|
-
requestBody: {
|
|
77
|
-
args: { database: '$res:' + resourcePath, ...values },
|
|
78
|
-
language: getLanguageByResourceType(resourceType),
|
|
79
|
-
content: insertQuery
|
|
80
|
-
}
|
|
73
|
+
requestBody: { args: { ...dbArg, ...values }, language, content: insertQuery }
|
|
81
74
|
});
|
|
82
75
|
}
|
|
83
76
|
};
|
|
84
77
|
}
|
|
85
|
-
export function dbDeleteTableActionWithPreviewScript({ workspace,
|
|
78
|
+
export function dbDeleteTableActionWithPreviewScript({ workspace, input }) {
|
|
79
|
+
const dbArg = input?.type === 'database' ? { database: '$res:' + input.resourcePath } : {};
|
|
86
80
|
return ({ tableKey, refresh }) => ({
|
|
87
81
|
confirmTitle: `Are you sure you want to delete '${tableKey}' ? This action is irreversible`,
|
|
88
82
|
displayName: 'Delete',
|
|
@@ -90,12 +84,16 @@ export function dbDeleteTableActionWithPreviewScript({ workspace, resourcePath,
|
|
|
90
84
|
icon: Trash2,
|
|
91
85
|
successText: `Table '${tableKey}' deleted successfully`,
|
|
92
86
|
action: async () => {
|
|
93
|
-
const
|
|
87
|
+
const dbType = getDbType(input);
|
|
88
|
+
const language = getLanguageByResourceType(dbType);
|
|
89
|
+
let deleteQuery = makeDeleteTableQuery(tableKey, dbType);
|
|
90
|
+
if (input.type === 'ducklake')
|
|
91
|
+
deleteQuery = wrapDucklakeQuery(deleteQuery, input.ducklake);
|
|
94
92
|
await runScriptAndPollResult({
|
|
95
93
|
workspace,
|
|
96
94
|
requestBody: {
|
|
97
|
-
args: {
|
|
98
|
-
language
|
|
95
|
+
args: { ...dbArg },
|
|
96
|
+
language,
|
|
99
97
|
content: deleteQuery
|
|
100
98
|
}
|
|
101
99
|
});
|
|
@@ -103,3 +101,50 @@ export function dbDeleteTableActionWithPreviewScript({ workspace, resourcePath,
|
|
|
103
101
|
}
|
|
104
102
|
});
|
|
105
103
|
}
|
|
104
|
+
export async function getDucklakeSchema({ workspace, ducklake }) {
|
|
105
|
+
let result = await runScriptAndPollResult({
|
|
106
|
+
workspace,
|
|
107
|
+
requestBody: {
|
|
108
|
+
language: 'duckdb',
|
|
109
|
+
content: `ATTACH 'ducklake://${ducklake}' AS __ducklake__; ${DUCKLAKE_GET_SCHEMA_QUERY}`,
|
|
110
|
+
args: {}
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
const stringified = Array.isArray(result) && result.length && (result?.[0]?.['result'] ?? '[]');
|
|
114
|
+
if (!stringified)
|
|
115
|
+
throw new Error('Failed to get Ducklake schema: ' + JSON.stringify(result));
|
|
116
|
+
let schema = {
|
|
117
|
+
schema: { main: JSON.parse(stringified) },
|
|
118
|
+
publicOnly: true,
|
|
119
|
+
lang: 'ducklake'
|
|
120
|
+
};
|
|
121
|
+
return { ...schema, stringified: stringifySchema(schema) };
|
|
122
|
+
}
|
|
123
|
+
const DUCKLAKE_GET_SCHEMA_QUERY = `
|
|
124
|
+
SELECT json_group_object(table_name, table_data) AS result FROM (
|
|
125
|
+
SELECT
|
|
126
|
+
table_name,
|
|
127
|
+
json_group_object(
|
|
128
|
+
c.column_name,
|
|
129
|
+
json_object(
|
|
130
|
+
'type', c.data_type,
|
|
131
|
+
'default', c.column_default,
|
|
132
|
+
'required', c.is_nullable == 'NO'
|
|
133
|
+
)
|
|
134
|
+
) AS table_data
|
|
135
|
+
FROM information_schema.columns c
|
|
136
|
+
WHERE table_catalog = '__ducklake__' AND table_schema = current_schema()
|
|
137
|
+
GROUP BY c.table_name
|
|
138
|
+
)`;
|
|
139
|
+
export function getDbType(input) {
|
|
140
|
+
switch (input.type) {
|
|
141
|
+
case 'database':
|
|
142
|
+
return input.resourceType;
|
|
143
|
+
case 'ducklake':
|
|
144
|
+
return 'duckdb';
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
export function wrapDucklakeQuery(query, ducklake) {
|
|
148
|
+
let attach = `ATTACH 'ducklake://${ducklake}' AS dl;USE dl;\n`;
|
|
149
|
+
return query.replace(/^(--.*\n)*/, (match) => match + attach);
|
|
150
|
+
}
|
|
@@ -69,7 +69,6 @@ const dispatch = createEventDispatcher();
|
|
|
69
69
|
<Button
|
|
70
70
|
{...btn.buttonProps}
|
|
71
71
|
startIcon={{ icon: btn.buttonProps.startIcon }}
|
|
72
|
-
on:click={btn.buttonProps.onClick}
|
|
73
72
|
btnClasses="hidden md:flex items-center gap-1"
|
|
74
73
|
>
|
|
75
74
|
{btn.label}
|
|
@@ -77,7 +76,6 @@ const dispatch = createEventDispatcher();
|
|
|
77
76
|
<Button
|
|
78
77
|
{...btn.buttonProps}
|
|
79
78
|
startIcon={{ icon: btn.buttonProps.startIcon }}
|
|
80
|
-
on:click={btn.buttonProps.onClick}
|
|
81
79
|
iconOnly
|
|
82
80
|
btnClasses="flex md:hidden items-center gap-1"
|
|
83
81
|
>
|
|
@@ -35,6 +35,8 @@ let runDisabled = $state(false);
|
|
|
35
35
|
let editableSchemaForm = $state(undefined);
|
|
36
36
|
let savedPreviewArgs = $state(undefined);
|
|
37
37
|
let isValid = $state(true);
|
|
38
|
+
let dynSelectCode = $state(undefined);
|
|
39
|
+
let dynSelectLang = $state(undefined);
|
|
38
40
|
function updateEditPanelSize(size) {
|
|
39
41
|
if (!$flowInputEditorState)
|
|
40
42
|
return;
|
|
@@ -299,6 +301,7 @@ function resetSelected() {
|
|
|
299
301
|
on:delete={(e) => {
|
|
300
302
|
addPropertyV2?.handleDeleteArgument([e.detail])
|
|
301
303
|
}}
|
|
304
|
+
showDynSelectOpt
|
|
302
305
|
displayWebhookWarning
|
|
303
306
|
editTab={$flowInputEditorState?.selectedTab}
|
|
304
307
|
{previewSchema}
|
|
@@ -339,6 +342,8 @@ function resetSelected() {
|
|
|
339
342
|
resetArgs()
|
|
340
343
|
}}
|
|
341
344
|
bind:isValid
|
|
345
|
+
bind:dynSelectCode
|
|
346
|
+
bind:dynSelectLang
|
|
342
347
|
>
|
|
343
348
|
{#snippet openEditTab()}
|
|
344
349
|
<div class={twMerge('flex flex-row divide-x', ButtonType.ColorVariants.blue.divider)}>
|
|
@@ -796,6 +796,7 @@ let rawScriptLang = $derived(flowModule.value.type == 'rawscript' ? flowModule.v
|
|
|
796
796
|
disableMock={preprocessorModule || failureModule}
|
|
797
797
|
disableHistory={failureModule}
|
|
798
798
|
loadingJob={stepHistoryLoader?.stepStates[flowModule.id]?.loadingJobs}
|
|
799
|
+
tagLabel={customUi?.tagLabel}
|
|
799
800
|
/>
|
|
800
801
|
</Pane>
|
|
801
802
|
{/if}
|
|
@@ -27,7 +27,6 @@ function getCachedValues(path, hash) {
|
|
|
27
27
|
previousCode = cachedValues[key]?.previousCode;
|
|
28
28
|
tag = cachedValues[key]?.tag;
|
|
29
29
|
notFound = cachedValues[key]?.notFound ?? false;
|
|
30
|
-
console.log('cachedValues', cachedValues, code);
|
|
31
30
|
}
|
|
32
31
|
getCachedValues(path, hash);
|
|
33
32
|
async function loadPreviousCode(previousHash) {
|
|
@@ -101,11 +101,11 @@ let testRunDropdownOpen = $state(false);
|
|
|
101
101
|
acceptUnderScores
|
|
102
102
|
reservedIds={dfs(flowStore?.val?.value.modules ?? [], (x) => x.id)}
|
|
103
103
|
bind:value={newId}
|
|
104
|
-
|
|
105
|
-
dispatch('changeId', { id, newId
|
|
104
|
+
onSave={({ oldId, newId }) => {
|
|
105
|
+
dispatch('changeId', { id: oldId, newId, deps: getDeps?.dependents ?? {} })
|
|
106
106
|
editId = false
|
|
107
107
|
}}
|
|
108
|
-
|
|
108
|
+
onClose={() => {
|
|
109
109
|
editId = false
|
|
110
110
|
}}
|
|
111
111
|
/>
|
|
@@ -305,6 +305,7 @@ $effect(() => {
|
|
|
305
305
|
}
|
|
306
306
|
refreshStateStore(flowStore)
|
|
307
307
|
onDelete?.(id)
|
|
308
|
+
delete $flowStateStore[id]
|
|
308
309
|
}
|
|
309
310
|
|
|
310
311
|
if (Object.keys(dependents).length > 0) {
|
|
@@ -433,6 +434,7 @@ $effect(() => {
|
|
|
433
434
|
}}
|
|
434
435
|
onChangeId={(detail) => {
|
|
435
436
|
let { id, newId, deps } = detail
|
|
437
|
+
|
|
436
438
|
dfs(flowStore.val.value.modules, (mod) => {
|
|
437
439
|
if (deps[mod.id]) {
|
|
438
440
|
deps[mod.id].forEach((dep) => {
|
|
@@ -465,6 +467,9 @@ $effect(() => {
|
|
|
465
467
|
mod.id = newId
|
|
466
468
|
}
|
|
467
469
|
})
|
|
470
|
+
$flowStateStore[newId] = $flowStateStore[id]
|
|
471
|
+
delete $flowStateStore[id]
|
|
472
|
+
$flowStateStore = $flowStateStore
|
|
468
473
|
refreshStateStore(flowStore)
|
|
469
474
|
$selectedId = newId
|
|
470
475
|
}}
|
|
@@ -59,7 +59,10 @@ shouldUsePortal={true} -->
|
|
|
59
59
|
{#if kind === 'trigger'}
|
|
60
60
|
<SchedulePollIcon size={14} />
|
|
61
61
|
{:else if kind === 'failure'}
|
|
62
|
-
<
|
|
62
|
+
<div class="flex items-center gap-1">
|
|
63
|
+
<Bug size={14} />
|
|
64
|
+
<span class="text-xs w-20">Error Handler</span>
|
|
65
|
+
</div>
|
|
63
66
|
{:else}
|
|
64
67
|
<Cross size={iconSize} />
|
|
65
68
|
{/if}
|
|
@@ -14,7 +14,11 @@ export let job = undefined;
|
|
|
14
14
|
<div
|
|
15
15
|
class={twMerge(
|
|
16
16
|
'rounded-full w-2 h-2',
|
|
17
|
-
'success' in job && job.success
|
|
17
|
+
'success' in job && job.success
|
|
18
|
+
? 'bg-green-400'
|
|
19
|
+
: job.type === 'CompletedJob'
|
|
20
|
+
? 'bg-red-400'
|
|
21
|
+
: 'bg-yellow-400'
|
|
18
22
|
)}
|
|
19
23
|
title={'success' in job && job.success ? 'Success' : 'Failed'}
|
|
20
24
|
></div>
|
|
@@ -42,10 +42,10 @@ function checkOverflow() {
|
|
|
42
42
|
}
|
|
43
43
|
}
|
|
44
44
|
function selectJob(nJob) {
|
|
45
|
-
if (nJob &&
|
|
45
|
+
if (nJob && (nJob.result_stream || nJob.type == 'CompletedJob')) {
|
|
46
46
|
selectedJob = nJob;
|
|
47
47
|
}
|
|
48
|
-
else if (job &&
|
|
48
|
+
else if (job && (job.result_stream || job.type == 'CompletedJob')) {
|
|
49
49
|
selectedJob = job;
|
|
50
50
|
}
|
|
51
51
|
else {
|
|
@@ -53,7 +53,7 @@ function selectJob(nJob) {
|
|
|
53
53
|
}
|
|
54
54
|
}
|
|
55
55
|
$effect(() => {
|
|
56
|
-
if (!job || !(
|
|
56
|
+
if (!job || !(job.result_stream || job.type == 'CompletedJob')) {
|
|
57
57
|
return;
|
|
58
58
|
}
|
|
59
59
|
selectJob(job);
|
|
@@ -169,7 +169,7 @@ let job = $derived.by(() => {
|
|
|
169
169
|
return undefined;
|
|
170
170
|
});
|
|
171
171
|
let popoverHeight = $derived(customHeight ?? (clientHeight > 0 ? clientHeight : 0));
|
|
172
|
-
const isLoadingAndNotMock = $derived(isLoading && !mock?.enabled);
|
|
172
|
+
const isLoadingAndNotMock = $derived(isLoading && job?.result_stream === undefined && !mock?.enabled);
|
|
173
173
|
const copilot_fix_render = $derived(copilot_fix);
|
|
174
174
|
</script>
|
|
175
175
|
|
|
@@ -548,8 +548,10 @@ const copilot_fix_render = $derived(copilot_fix);
|
|
|
548
548
|
bind:forceJson
|
|
549
549
|
workspaceId={undefined}
|
|
550
550
|
jobId={undefined}
|
|
551
|
+
result_stream={undefined}
|
|
551
552
|
result={mock?.return_value}
|
|
552
553
|
externalToolbarAvailable
|
|
554
|
+
fixTableSizingToParent
|
|
553
555
|
on:toolbar-location-changed={({ detail }) => {
|
|
554
556
|
toolbarLocationMock = detail
|
|
555
557
|
}}
|
|
@@ -566,7 +568,7 @@ const copilot_fix_render = $derived(copilot_fix);
|
|
|
566
568
|
pureViewer={false}
|
|
567
569
|
/>
|
|
568
570
|
{/if}
|
|
569
|
-
{:else if selectedJob != undefined &&
|
|
571
|
+
{:else if selectedJob != undefined && (selectedJob.result_stream || selectedJob.type == 'CompletedJob')}
|
|
570
572
|
{#if fullResult}
|
|
571
573
|
<div class="break-words relative h-full">
|
|
572
574
|
{#key selectedJob}
|
|
@@ -576,7 +578,9 @@ const copilot_fix_render = $derived(copilot_fix);
|
|
|
576
578
|
workspaceId={selectedJob?.workspace_id}
|
|
577
579
|
jobId={selectedJob?.id}
|
|
578
580
|
result={selectedJob?.result}
|
|
581
|
+
result_stream={selectedJob?.result_stream}
|
|
579
582
|
externalToolbarAvailable
|
|
583
|
+
fixTableSizingToParent
|
|
580
584
|
on:toolbar-location-changed={({ detail }) => {
|
|
581
585
|
toolbarLocationJob = detail
|
|
582
586
|
}}
|
|
@@ -7,6 +7,8 @@ type SelectedJob = ((Job | {
|
|
|
7
7
|
success: boolean;
|
|
8
8
|
}) & {
|
|
9
9
|
preview?: boolean;
|
|
10
|
+
result_stream?: string;
|
|
11
|
+
result?: unknown;
|
|
10
12
|
}) | undefined;
|
|
11
13
|
interface Props {
|
|
12
14
|
prefix?: string;
|
|
@@ -36,7 +38,9 @@ interface Props {
|
|
|
36
38
|
disableMock?: boolean;
|
|
37
39
|
disableHistory?: boolean;
|
|
38
40
|
lastJob?: Job;
|
|
39
|
-
testJob?: Job
|
|
41
|
+
testJob?: Job & {
|
|
42
|
+
result_stream?: string;
|
|
43
|
+
};
|
|
40
44
|
derivedHistoryOpen?: boolean;
|
|
41
45
|
historyOffset?: any;
|
|
42
46
|
clazz?: string;
|
|
@@ -52,6 +56,6 @@ interface Props {
|
|
|
52
56
|
onResetInitial?: () => void;
|
|
53
57
|
customEmptyJobMessage?: string;
|
|
54
58
|
}
|
|
55
|
-
declare const OutputPickerInner: import("svelte").Component<Props, {}, "preview" | "
|
|
59
|
+
declare const OutputPickerInner: import("svelte").Component<Props, {}, "preview" | "forceJson" | "isLoading" | "mock" | "selectedJob" | "derivedHistoryOpen">;
|
|
56
60
|
type OutputPickerInner = ReturnType<typeof OutputPickerInner>;
|
|
57
61
|
export default OutputPickerInner;
|
|
@@ -35,7 +35,10 @@ function initLoadInputs() {
|
|
|
35
35
|
infiniteList?.setLoader(loadInputsPageFn);
|
|
36
36
|
}
|
|
37
37
|
$effect(() => {
|
|
38
|
-
staticInputs
|
|
38
|
+
staticInputs;
|
|
39
|
+
for (const s of staticInputs ?? [])
|
|
40
|
+
s; // listen to changes one level deep
|
|
41
|
+
infiniteList?.loadData('forceRefresh');
|
|
39
42
|
});
|
|
40
43
|
async function getJobResultAndLogs(jobId, noLogs) {
|
|
41
44
|
try {
|