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.
Files changed (236) hide show
  1. package/package/components/AppConnectInner.svelte.d.ts +1 -1
  2. package/package/components/ArgInput.svelte +56 -18
  3. package/package/components/ArgInput.svelte.d.ts +2 -10
  4. package/package/components/AssignableTagsInner.svelte +5 -0
  5. package/package/components/AuthSettings.svelte +4 -2
  6. package/package/components/AuthSettings.svelte.d.ts +1 -0
  7. package/package/components/DBManagerDrawer.svelte +154 -151
  8. package/package/components/DBManagerDrawer.svelte.d.ts +2 -2
  9. package/package/components/DBTable.svelte +3 -3
  10. package/package/components/DBTable.svelte.d.ts +1 -0
  11. package/package/components/DBTableEditor.svelte +7 -7
  12. package/package/components/DBTableEditor.svelte.d.ts +1 -1
  13. package/package/components/DeployWorkspace.svelte +1 -1
  14. package/package/components/DisplayResult.svelte +34 -8
  15. package/package/components/DisplayResult.svelte.d.ts +4 -1
  16. package/package/components/DynSelect.svelte +58 -34
  17. package/package/components/DynSelect.svelte.d.ts +3 -11
  18. package/package/components/EditableSchemaForm.svelte +126 -6
  19. package/package/components/EditableSchemaForm.svelte.d.ts +5 -1
  20. package/package/components/Editor.svelte +1 -1
  21. package/package/components/EditorBar.svelte +82 -4
  22. package/package/components/ErrorOrRecoveryHandler.svelte +76 -8
  23. package/package/components/ErrorOrRecoveryHandler.svelte.d.ts +2 -1
  24. package/package/components/ExploreAssetButton.svelte +14 -4
  25. package/package/components/ExploreAssetButton.svelte.d.ts +1 -0
  26. package/package/components/FlowJobResult.svelte +3 -3
  27. package/package/components/FlowJobResult.svelte.d.ts +1 -0
  28. package/package/components/FlowPreviewContent.svelte +9 -0
  29. package/package/components/FlowPreviewContent.svelte.d.ts +3 -0
  30. package/package/components/FlowPreviewResult.svelte +4 -1
  31. package/package/components/FlowPreviewResult.svelte.d.ts +1 -0
  32. package/package/components/FlowStatusViewer.svelte +2 -1
  33. package/package/components/FlowStatusViewer.svelte.d.ts +3 -0
  34. package/package/components/FlowStatusViewerInner.svelte +23 -3
  35. package/package/components/FlowStatusViewerInner.svelte.d.ts +10 -1
  36. package/package/components/FolderEditor.svelte +1 -1
  37. package/package/components/GitDiffPreview.svelte +14 -18
  38. package/package/components/GitDiffPreview.svelte.d.ts +2 -8
  39. package/package/components/GitHubAppIntegration.svelte +3 -1
  40. package/package/components/IdEditorInput.svelte +25 -22
  41. package/package/components/IdEditorInput.svelte.d.ts +11 -23
  42. package/package/components/InstanceSetting.svelte +7 -2
  43. package/package/components/InstanceSettings.svelte +1 -0
  44. package/package/components/JobLoader.svelte +48 -5
  45. package/package/components/JobLoader.svelte.d.ts +7 -2
  46. package/package/components/Login.svelte +8 -2
  47. package/package/components/MemoryFootprintViewer.svelte +1 -1
  48. package/package/components/ModulePreviewResultViewer.svelte +2 -2
  49. package/package/components/MoveDrawer.svelte.d.ts +2 -2
  50. package/package/components/NextcloudSetting.svelte +84 -0
  51. package/package/components/NextcloudSetting.svelte.d.ts +7 -0
  52. package/package/components/ObjectResourceInput.svelte +3 -2
  53. package/package/components/ObjectResourceInput.svelte.d.ts +1 -0
  54. package/package/components/ParqetCsvTableRenderer.svelte +1 -1
  55. package/package/components/ResourceEditor.svelte +1 -1
  56. package/package/components/ResourcePicker.svelte +8 -1
  57. package/package/components/ResourcePicker.svelte.d.ts +1 -0
  58. package/package/components/ResultStreamDisplay.svelte +5 -0
  59. package/package/components/ResultStreamDisplay.svelte.d.ts +5 -0
  60. package/package/components/RunForm.svelte +9 -1
  61. package/package/components/SchemaForm.svelte +2 -2
  62. package/package/components/SchemaForm.svelte.d.ts +2 -10
  63. package/package/components/ScriptBuilder.svelte +13 -8
  64. package/package/components/ScriptBuilder.svelte.d.ts +1 -1
  65. package/package/components/ScriptEditor.svelte.d.ts +1 -1
  66. package/package/components/ScriptWrapper.svelte +1 -1
  67. package/package/components/ShareModal.svelte.d.ts +1 -1
  68. package/package/components/SimpleAgTable.svelte +2 -0
  69. package/package/components/SimpleAgTable.svelte.d.ts +2 -0
  70. package/package/components/SqlRepl.svelte +21 -7
  71. package/package/components/SqlRepl.svelte.d.ts +2 -2
  72. package/package/components/StringTypeNarrowing.svelte.d.ts +1 -1
  73. package/package/components/WorkerTagSelect.svelte +70 -1
  74. package/package/components/apps/components/display/AppDisplayComponent.svelte +13 -1
  75. package/package/components/apps/components/display/AppText.svelte +2 -2
  76. package/package/components/apps/components/display/dbtable/AppDbExplorer.svelte +8 -1
  77. package/package/components/apps/components/display/dbtable/InsertRow.svelte +5 -4
  78. package/package/components/apps/components/display/dbtable/queries/count.js +11 -1
  79. package/package/components/apps/components/display/dbtable/queries/createTable.d.ts +1 -1
  80. package/package/components/apps/components/display/dbtable/queries/createTable.js +3 -3
  81. package/package/components/apps/components/display/dbtable/queries/delete.js +7 -0
  82. package/package/components/apps/components/display/dbtable/queries/insert.js +2 -0
  83. package/package/components/apps/components/display/dbtable/queries/select.js +14 -0
  84. package/package/components/apps/components/display/dbtable/queries/update.js +7 -0
  85. package/package/components/apps/components/display/dbtable/utils.d.ts +6 -5
  86. package/package/components/apps/components/display/dbtable/utils.js +52 -28
  87. package/package/components/apps/components/display/table/AppAggridExplorerTable.svelte +1 -1
  88. package/package/components/apps/components/display/table/AppAggridInfiniteTable.svelte +1 -0
  89. package/package/components/apps/components/display/table/AppAggridInfiniteTable.svelte.d.ts +1 -0
  90. package/package/components/apps/components/display/table/AppAggridTable.svelte +5 -4
  91. package/package/components/apps/components/display/table/AppAggridTable.svelte.d.ts +1 -0
  92. package/package/components/apps/components/display/table/utils.js +7 -4
  93. package/package/components/apps/components/helpers/HiddenComponent.svelte +2 -2
  94. package/package/components/apps/components/helpers/RunnableComponent.svelte +4 -1
  95. package/package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +2 -1
  96. package/package/components/apps/components/inputs/AppS3FileInput.svelte +2 -2
  97. package/package/components/apps/components/layout/AppDecisionTree.svelte +1 -1
  98. package/package/components/apps/components/layout/AppStepper.svelte +1 -1
  99. package/package/components/apps/components/layout/AppTabs.svelte +1 -1
  100. package/package/components/apps/editor/AppEditorHeader.svelte +13 -2
  101. package/package/components/apps/editor/GridViewer.svelte +1 -0
  102. package/package/components/apps/editor/RunnableJobPanelInner.svelte +2 -1
  103. package/package/components/apps/editor/contextPanel/components/IdEditor.svelte +7 -7
  104. package/package/components/apps/editor/contextPanel/components/IdEditor.svelte.d.ts +7 -19
  105. package/package/components/apps/editor/contextPanel/components/OutputHeader.svelte +8 -12
  106. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte.d.ts +1 -1
  107. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorDrawer.svelte.d.ts +1 -1
  108. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte.d.ts +1 -1
  109. package/package/components/apps/editor/settingsPanel/DecisionTreeGraphEditor.svelte +3 -3
  110. package/package/components/apps/editor/settingsPanel/decisionTree/DecisionTreePreview.svelte +1 -3
  111. package/package/components/assets/AssetsDropdownButton.svelte +1 -1
  112. package/package/components/assets/JobAssetsViewer.svelte +2 -2
  113. package/package/components/assets/lib.js +4 -0
  114. package/package/components/auditLogs/AuditLogsFilters.svelte +7 -9
  115. package/package/components/common/button/Button.svelte +4 -3
  116. package/package/components/common/button/Button.svelte.d.ts +1 -0
  117. package/package/components/common/confirmationModal/ConfirmationModal.svelte +6 -5
  118. package/package/components/common/confirmationModal/ConfirmationModal.svelte.d.ts +6 -11
  119. package/package/components/common/confirmationModal/asyncConfirmationModal.svelte.d.ts +26 -0
  120. package/package/components/common/confirmationModal/asyncConfirmationModal.svelte.js +50 -0
  121. package/package/components/common/modal/Modal.svelte +2 -5
  122. package/package/components/common/tabs/TabsV2.svelte +2 -1
  123. package/package/components/common/tabs/TabsV2.svelte.d.ts +1 -0
  124. package/package/components/copilot/chat/AIChatManager.svelte.js +61 -7
  125. package/package/components/copilot/chat/ContextTextarea.svelte +1 -1
  126. package/package/components/copilot/chat/script/core.js +28 -29
  127. package/package/components/copilot/chat/shared.d.ts +1 -1
  128. package/package/components/copilot/chat/shared.js +8 -2
  129. package/package/components/custom_ui.d.ts +3 -0
  130. package/package/components/dbOps.d.ts +20 -8
  131. package/package/components/dbOps.js +85 -40
  132. package/package/components/details/DetailPageHeader.svelte +0 -2
  133. package/package/components/flows/content/FlowInput.svelte +5 -0
  134. package/package/components/flows/content/FlowModuleComponent.svelte +1 -0
  135. package/package/components/flows/content/FlowModuleScript.svelte +0 -1
  136. package/package/components/flows/idUtils.js +2 -1
  137. package/package/components/flows/map/FlowModuleSchemaItem.svelte +3 -3
  138. package/package/components/flows/map/FlowModuleSchemaMap.svelte +5 -0
  139. package/package/components/flows/map/InsertModuleButton.svelte +4 -1
  140. package/package/components/flows/propPicker/OutputBadge.svelte +5 -1
  141. package/package/components/flows/propPicker/OutputPickerInner.svelte +9 -5
  142. package/package/components/flows/propPicker/OutputPickerInner.svelte.d.ts +6 -2
  143. package/package/components/flows/propPicker/StepHistory.svelte +4 -1
  144. package/package/components/git_sync/DetectionFlow.svelte +202 -0
  145. package/package/components/git_sync/DetectionFlow.svelte.d.ts +6 -0
  146. package/package/components/git_sync/GitSyncContext.svelte.d.ts +82 -0
  147. package/package/components/git_sync/GitSyncContext.svelte.js +461 -0
  148. package/package/components/git_sync/GitSyncModalManager.svelte +99 -0
  149. package/package/components/git_sync/GitSyncModalManager.svelte.d.ts +18 -0
  150. package/package/components/git_sync/GitSyncRepositoryCard.svelte +339 -0
  151. package/package/components/git_sync/GitSyncRepositoryCard.svelte.d.ts +6 -0
  152. package/package/components/git_sync/GitSyncRepositoryList.svelte +17 -0
  153. package/package/components/git_sync/GitSyncRepositoryList.svelte.d.ts +18 -0
  154. package/package/components/git_sync/GitSyncSection.svelte +89 -0
  155. package/package/components/git_sync/GitSyncSection.svelte.d.ts +3 -0
  156. package/package/components/git_sync/GitSyncSuccessModal.svelte +58 -0
  157. package/package/components/git_sync/GitSyncSuccessModal.svelte.d.ts +7 -0
  158. package/package/components/git_sync/PullWorkspaceModal.svelte +575 -0
  159. package/package/components/git_sync/PullWorkspaceModal.svelte.d.ts +15 -0
  160. package/package/components/git_sync/PushWorkspaceModal.svelte +320 -0
  161. package/package/components/git_sync/PushWorkspaceModal.svelte.d.ts +12 -0
  162. package/package/components/graph/FlowGraphV2.svelte +5 -1
  163. package/package/components/graph/graphBuilder.svelte.js +1 -1
  164. package/package/components/graph/renderers/nodes/AssetNode.svelte +4 -4
  165. package/package/components/icons/AssetDucklakeIcon.svelte +28 -0
  166. package/package/components/icons/AssetDucklakeIcon.svelte.d.ts +9 -0
  167. package/package/components/icons/AssetGenericIcon.svelte +3 -0
  168. package/package/components/icons/DucklakeIcon.svelte +18 -0
  169. package/package/components/icons/DucklakeIcon.svelte.d.ts +6 -0
  170. package/package/components/instanceSettings.js +11 -3
  171. package/package/components/runs/JobPreview.svelte +2 -2
  172. package/package/components/runs/NoWorkerWithTagWarning.svelte +3 -3
  173. package/package/components/runs/RunsFilter.svelte.d.ts +1 -1
  174. package/package/components/schema/FlowPropertyEditor.svelte +3 -2
  175. package/package/components/schema/FlowPropertyEditor.svelte.d.ts +1 -1
  176. package/package/components/schema/PropertyEditor.svelte +0 -2
  177. package/package/components/schema/PropertyEditor.svelte.d.ts +1 -1
  178. package/package/components/schema/SchemaFormDND.svelte +2 -1
  179. package/package/components/schema/SchemaFormDND.svelte.d.ts +2 -0
  180. package/package/components/scriptEditor/LogPanel.svelte +5 -3
  181. package/package/components/scriptEditor/LogPanel.svelte.d.ts +5 -1
  182. package/package/components/select/Select.svelte +7 -4
  183. package/package/components/select/Select.svelte.d.ts +5 -0
  184. package/package/components/select/SelectDropdown.svelte +2 -1
  185. package/package/components/select/SelectDropdown.svelte.d.ts +3 -0
  186. package/package/components/sidebar/changelogs.js +5 -0
  187. package/package/components/table/AutoDataTable.svelte +6 -4
  188. package/package/components/table/AutoDataTable.svelte.d.ts +1 -0
  189. package/package/components/table/DataTable.svelte +12 -10
  190. package/package/components/table/DataTable.svelte.d.ts +1 -0
  191. package/package/components/triggers/TriggerRetriesAndErrorHandler.svelte.d.ts +2 -2
  192. package/package/components/triggers/gcp/GcpTriggerEditorConfigSection.svelte +1 -1
  193. package/package/components/triggers/gcp/GcpTriggerEditorConfigSection.svelte.d.ts +2 -1
  194. package/package/components/triggers/gcp/GcpTriggerEditorInner.svelte +50 -11
  195. package/package/components/triggers/gcp/utils.js +1 -0
  196. package/package/components/triggers/http/utils.js +1 -1
  197. package/package/components/triggers/kafka/utils.js +1 -1
  198. package/package/components/triggers/mqtt/utils.js +1 -1
  199. package/package/components/triggers/nats/utils.js +1 -1
  200. package/package/components/triggers/postgres/utils.js +1 -1
  201. package/package/components/triggers/sqs/utils.js +1 -1
  202. package/package/components/triggers/utils.js +2 -1
  203. package/package/components/triggers/webhook/WebhooksConfigSection.svelte +24 -26
  204. package/package/components/triggers/webhook/WebhooksPanel.svelte +1 -15
  205. package/package/components/triggers/websocket/utils.js +1 -1
  206. package/package/components/workspaceSettings/AISettings.svelte +52 -36
  207. package/package/components/workspaceSettings/DucklakeSettings.svelte +321 -0
  208. package/package/components/workspaceSettings/DucklakeSettings.svelte.d.ts +23 -0
  209. package/package/components/workspaceSettings/GitSyncFilterSettings.svelte +122 -499
  210. package/package/components/workspaceSettings/GitSyncFilterSettings.svelte.d.ts +8 -10
  211. package/package/consts.js +2 -1
  212. package/package/gen/core/OpenAPI.js +1 -1
  213. package/package/gen/schemas.gen.d.ts +33 -24
  214. package/package/gen/schemas.gen.js +36 -27
  215. package/package/gen/services.gen.d.ts +19 -1
  216. package/package/gen/services.gen.js +38 -0
  217. package/package/gen/types.gen.d.ts +103 -9
  218. package/package/git-sync.d.ts +36 -0
  219. package/package/git-sync.js +1 -0
  220. package/package/hub.d.ts +1 -0
  221. package/package/hubPaths.json +5 -2
  222. package/package/infer.js +3 -2
  223. package/package/script_helpers.d.ts +2 -2
  224. package/package/script_helpers.js +29 -11
  225. package/package/services/JobManager.d.ts +28 -0
  226. package/package/services/JobManager.js +114 -0
  227. package/package/stores.d.ts +1 -1
  228. package/package/utils.d.ts +18 -1
  229. package/package/utils.js +55 -2
  230. package/package.json +13 -12
  231. package/package/components/InitGitRepoPopover.svelte +0 -410
  232. package/package/components/InitGitRepoPopover.svelte.d.ts +0 -13
  233. package/package/components/PullGitRepoPopover.svelte +0 -355
  234. package/package/components/PullGitRepoPopover.svelte.d.ts +0 -18
  235. package/package/inferArgSig.d.ts +0 -35
  236. 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
- export type IDbTableOps = {
3
- resourcePath: string;
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({ resourcePath, resourceType, tableKey, colDefs, workspace }: {
31
- resourcePath: string;
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, resourcePath, resourceType }: {
56
+ export declare function dbDeleteTableActionWithPreviewScript({ workspace, input }: {
50
57
  workspace: string;
51
- resourcePath: string;
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
- export function dbTableOpsWithPreviewScripts({ resourcePath, resourceType, tableKey, colDefs, workspace }) {
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
- resourcePath,
13
- resourceType,
16
+ dbType,
14
17
  tableKey,
15
18
  colDefs,
16
19
  getCount: async ({ quicksearch }) => {
17
- const countQuery = makeCountQuery(resourceType, tableKey, undefined, colDefs);
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
- const query = makeSelectQuery(tableKey, colDefs, undefined, resourceType);
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
- const updateQuery = makeUpdateQuery(tableKey, colDef, colDefs, resourceType);
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
- database: '$res:' + resourcePath,
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
- const deleteQuery = makeDeleteQuery(tableKey, colDefs, resourceType);
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
- const insertQuery = makeInsertQuery(tableKey, colDefs, resourceType);
74
- runScriptAndPollResult({
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, resourcePath, resourceType }) {
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 deleteQuery = makeDeleteTableQuery(tableKey, resourceType);
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: { database: '$res:' + resourcePath },
98
- language: getLanguageByResourceType(resourceType),
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) {
@@ -12,7 +12,8 @@ export const forbiddenIds = [
12
12
  'new',
13
13
  'in',
14
14
  'failure',
15
- 'preprocessor'
15
+ 'preprocessor',
16
+ 'as'
16
17
  ];
17
18
  export function numberToChars(n) {
18
19
  if (n < 0) {
@@ -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
- on:save={(e) => {
105
- dispatch('changeId', { id, newId: e.detail, deps: getDeps?.dependents ?? {} })
104
+ onSave={({ oldId, newId }) => {
105
+ dispatch('changeId', { id: oldId, newId, deps: getDeps?.dependents ?? {} })
106
106
  editId = false
107
107
  }}
108
- on:close={() => {
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
- <Bug size={14} />
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 ? 'bg-green-400' : 'bg-red-400'
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 && 'result' in nJob) {
45
+ if (nJob && (nJob.result_stream || nJob.type == 'CompletedJob')) {
46
46
  selectedJob = nJob;
47
47
  }
48
- else if (job && 'result' in 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 || !('result' in 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 && 'result' in selectedJob}
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" | "isLoading" | "mock" | "forceJson" | "selectedJob" | "derivedHistoryOpen">;
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 && infiniteList?.loadData('forceRefresh');
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 {