windmill-components 1.504.5 → 1.510.1

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 (202) hide show
  1. package/package/ata/index.js +1 -1
  2. package/package/components/AppConnectInner.svelte +161 -29
  3. package/package/components/ArgInput.svelte +33 -103
  4. package/package/components/AuthSettings.svelte +45 -1
  5. package/package/components/Dev.svelte +31 -24
  6. package/package/components/DisplayResult.svelte +53 -26
  7. package/package/components/DisplayResult.svelte.d.ts +1 -1
  8. package/package/components/DynSelect.svelte +3 -3
  9. package/package/components/Editor.svelte +7 -4
  10. package/package/components/EditorBar.svelte +2 -2
  11. package/package/components/ErrorOrRecoveryHandler.svelte +73 -67
  12. package/package/components/ErrorOrRecoveryHandler.svelte.d.ts +8 -24
  13. package/package/components/FlowBuilder.svelte +11 -2
  14. package/package/components/FlowJobResult.svelte +12 -17
  15. package/package/components/FlowJobResult.svelte.d.ts +5 -18
  16. package/package/components/FlowPreviewContent.svelte +13 -10
  17. package/package/components/FlowPreviewContent.svelte.d.ts +1 -1
  18. package/package/components/FlowPreviewResult.svelte +14 -6
  19. package/package/components/FlowStatusViewer.svelte +11 -24
  20. package/package/components/FlowStatusViewer.svelte.d.ts +19 -18
  21. package/package/components/FlowStatusViewerInner.svelte +110 -131
  22. package/package/components/FlowStatusViewerInner.svelte.d.ts +20 -18
  23. package/package/components/GitDiffPreview.svelte +55 -0
  24. package/package/components/GitDiffPreview.svelte.d.ts +13 -0
  25. package/package/components/HistoricInputs.svelte +2 -2
  26. package/package/components/InitGitRepoPopover.svelte +410 -0
  27. package/package/components/InitGitRepoPopover.svelte.d.ts +13 -0
  28. package/package/components/InstanceSetting.svelte +21 -9
  29. package/package/components/InstanceSettings.svelte +16 -3
  30. package/package/components/JobLoader.svelte +567 -0
  31. package/package/components/JobLoader.svelte.d.ts +53 -0
  32. package/package/components/JobLogs.svelte +6 -4
  33. package/package/components/JobLogs.svelte.d.ts +5 -18
  34. package/package/components/LightweightResourcePicker.svelte +18 -39
  35. package/package/components/LightweightResourcePicker.svelte.d.ts +6 -22
  36. package/package/components/LogViewer.svelte +35 -41
  37. package/package/components/LogViewer.svelte.d.ts +6 -20
  38. package/package/components/ModulePreviewResultViewer.svelte +3 -1
  39. package/package/components/ModulePreviewResultViewer.svelte.d.ts +1 -0
  40. package/package/components/ModuleTest.svelte +16 -11
  41. package/package/components/PullGitRepoPopover.svelte +355 -0
  42. package/package/components/PullGitRepoPopover.svelte.d.ts +18 -0
  43. package/package/components/S3FilePicker.svelte +5 -3
  44. package/package/components/SavedInputs.svelte +2 -2
  45. package/package/components/ScriptBuilder.svelte +4 -3
  46. package/package/components/ScriptEditor.svelte +34 -31
  47. package/package/components/ScriptEditor.svelte.d.ts +3 -3
  48. package/package/components/ServiceLogsInner.svelte +2 -1
  49. package/package/components/ServiceLogsInner.svelte.d.ts +1 -0
  50. package/package/components/UserSettings.svelte +1 -1
  51. package/package/components/WorkerTagSelect.svelte +32 -3
  52. package/package/components/apps/components/buttons/AppButton.svelte +7 -1
  53. package/package/components/apps/components/buttons/AppButton.svelte.d.ts +1 -0
  54. package/package/components/apps/components/display/AppCustomComponent.svelte +1 -1
  55. package/package/components/apps/components/display/AppDisplayComponentByJobId.svelte +16 -11
  56. package/package/components/apps/components/display/AppJobIdLogComponent.svelte +13 -10
  57. package/package/components/apps/components/display/AppMenu.svelte +5 -0
  58. package/package/components/apps/components/display/dbtable/AppDbExplorer.svelte +3 -3
  59. package/package/components/apps/components/display/dbtable/DeleteRow.svelte +3 -3
  60. package/package/components/apps/components/display/dbtable/InsertRowRunnable.svelte +3 -3
  61. package/package/components/apps/components/display/dbtable/UpdateCell.svelte +3 -3
  62. package/package/components/apps/components/display/table/AppAggridInfiniteTable.svelte +3 -3
  63. package/package/components/apps/components/helpers/RunnableComponent.svelte +65 -54
  64. package/package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +5 -5
  65. package/package/components/apps/components/inputs/AppUserResource.svelte +26 -8
  66. package/package/components/apps/editor/AppEditorHeader.svelte +11 -5
  67. package/package/components/apps/editor/AppJobsDrawer.svelte +5 -5
  68. package/package/components/apps/editor/RunnableJobPanel.svelte +4 -4
  69. package/package/components/apps/editor/component/components.d.ts +12 -0
  70. package/package/components/apps/editor/component/components.js +19 -7
  71. package/package/components/assets/AssetButtons.svelte +38 -0
  72. package/package/components/assets/AssetButtons.svelte.d.ts +15 -0
  73. package/package/components/assets/AssetsDropdownButton.svelte +60 -72
  74. package/package/components/assets/AssetsDropdownButton.svelte.d.ts +3 -4
  75. package/package/components/assets/AssetsUsageDrawer.svelte +10 -10
  76. package/package/components/assets/JobAssetsViewer.svelte +79 -0
  77. package/package/components/assets/JobAssetsViewer.svelte.d.ts +7 -0
  78. package/package/components/assets/README_DEV.md +0 -0
  79. package/package/components/assets/lib.d.ts +9 -1
  80. package/package/components/assets/lib.js +48 -7
  81. package/package/components/common/fileUpload/FileUpload.svelte +126 -84
  82. package/package/components/common/fileUpload/FileUpload.svelte.d.ts +13 -3
  83. package/package/components/common/fileUpload/S3ArgInput.svelte +111 -0
  84. package/package/components/common/fileUpload/S3ArgInput.svelte.d.ts +21 -0
  85. package/package/components/common/table/ScriptRow.svelte +3 -1
  86. package/package/components/copilot/autocomplete/Autocompletor.js +23 -5
  87. package/package/components/copilot/chat/AIChatDisplay.svelte +8 -0
  88. package/package/components/copilot/chat/AIChatManager.svelte.js +13 -8
  89. package/package/components/copilot/chat/flow/ModuleAcceptReject.svelte +5 -5
  90. package/package/components/copilot/chat/flow/core.d.ts +1 -1
  91. package/package/components/copilot/chat/flow/core.js +2 -38
  92. package/package/components/copilot/chat/navigator/apiTools.d.ts +8 -0
  93. package/package/components/copilot/chat/navigator/apiTools.js +95 -15
  94. package/package/components/copilot/chat/navigator/core.d.ts +1 -1
  95. package/package/components/copilot/chat/navigator/core.js +2 -1
  96. package/package/components/copilot/chat/script/core.d.ts +11 -2
  97. package/package/components/copilot/chat/script/core.js +135 -1
  98. package/package/components/copilot/chat/shared.d.ts +10 -0
  99. package/package/components/copilot/chat/shared.js +56 -0
  100. package/package/components/copilot/lib.d.ts +1 -0
  101. package/package/components/copilot/lib.js +27 -9
  102. package/package/components/custom_ui.d.ts +1 -0
  103. package/package/components/flows/FlowAssetsHandler.svelte +133 -0
  104. package/package/components/flows/FlowAssetsHandler.svelte.d.ts +14 -0
  105. package/package/components/flows/content/FlowModuleComponent.svelte +16 -18
  106. package/package/components/flows/flowStore.d.ts +1 -1
  107. package/package/components/flows/map/FlowModuleSchemaItem.svelte +1 -0
  108. package/package/components/flows/propPicker/OutputPicker.svelte +9 -4
  109. package/package/components/flows/scheduleUtils.js +1 -1
  110. package/package/components/flows/types.d.ts +2 -1
  111. package/package/components/graph/FlowGraphV2.svelte +8 -104
  112. package/package/components/graph/FlowGraphV2.svelte.d.ts +0 -2
  113. package/package/components/graph/graphBuilder.svelte.d.ts +6 -3
  114. package/package/components/graph/graphBuilder.svelte.js +35 -9
  115. package/package/components/graph/renderers/edges/BaseEdge.svelte +2 -5
  116. package/package/components/graph/renderers/edges/BaseEdge.svelte.d.ts +1 -0
  117. package/package/components/graph/renderers/nodes/AssetNode.svelte +23 -20
  118. package/package/components/graph/renderers/nodes/AssetNode.svelte.d.ts +5 -10
  119. package/package/components/graph/renderers/nodes/AssetsOverflowedNode.svelte +1 -1
  120. package/package/components/graph/util.js +1 -1
  121. package/package/components/home/ItemsList.svelte +2 -0
  122. package/package/components/icons/AssetGenericIcon.svelte +0 -3
  123. package/package/components/jobs/JobPreview.svelte +10 -6
  124. package/package/components/raw_apps/RawAppInlineScriptRunnable.svelte +13 -12
  125. package/package/components/runs/BatchReRunOptionsPane.svelte +5 -1
  126. package/package/components/runs/JobPreview.svelte +26 -16
  127. package/package/components/runs/{JobLoader.svelte.d.ts → JobsLoader.svelte.d.ts} +3 -3
  128. package/package/components/runs/NoWorkerWithTagWarning.svelte +2 -2
  129. package/package/components/runs/NoWorkerWithTagWarning.svelte.d.ts +1 -0
  130. package/package/components/runs/RunsFilter.svelte.d.ts +1 -1
  131. package/package/components/schema/AddPropertyFormV2.svelte +42 -33
  132. package/package/components/schema/AddPropertyFormV2.svelte.d.ts +1 -0
  133. package/package/components/schema/AddPropertyV2.svelte +2 -1
  134. package/package/components/schema/AddPropertyV2.svelte.d.ts +1 -0
  135. package/package/components/schema/EditableSchemaWrapper.svelte +3 -1
  136. package/package/components/schema/editable_schema_wrapper.d.ts +3 -0
  137. package/package/components/scriptEditor/LogPanel.svelte +3 -2
  138. package/package/components/script_builder.d.ts +2 -2
  139. package/package/components/settings/CreateToken.svelte +76 -41
  140. package/package/components/settings/CreateToken.svelte.d.ts +1 -1
  141. package/package/components/settings/ScopeSelector.svelte +613 -0
  142. package/package/components/settings/ScopeSelector.svelte.d.ts +8 -0
  143. package/package/components/settings/TokenDisplay.svelte +103 -0
  144. package/package/components/settings/TokenDisplay.svelte.d.ts +10 -0
  145. package/package/components/settings/TokensTable.svelte +70 -349
  146. package/package/components/sidebar/CriticalAlertModal.svelte +3 -0
  147. package/package/components/triggers/DeleteTriggerButton.svelte +1 -1
  148. package/package/components/triggers/TriggerEditorToolbar.svelte +3 -3
  149. package/package/components/triggers/TriggerRetriesAndErrorHandler.svelte +55 -0
  150. package/package/components/triggers/TriggerRetriesAndErrorHandler.svelte.d.ts +13 -0
  151. package/package/components/triggers/TriggersEditor.svelte +45 -3
  152. package/package/components/triggers/TriggersWrapper.svelte +2 -2
  153. package/package/components/triggers/gcp/GcpTriggerEditorInner.svelte +43 -2
  154. package/package/components/triggers/gcp/utils.js +9 -1
  155. package/package/components/triggers/http/OpenAPISpecGenerator.svelte +1 -0
  156. package/package/components/triggers/http/RouteEditorInner.svelte +208 -164
  157. package/package/components/triggers/http/RouteEditorInner.svelte.d.ts +6 -2
  158. package/package/components/triggers/http/utils.js +9 -3
  159. package/package/components/triggers/kafka/KafkaTriggerEditorInner.svelte +43 -2
  160. package/package/components/triggers/kafka/utils.js +9 -1
  161. package/package/components/triggers/mqtt/MqttEditorConfigSection.svelte +4 -132
  162. package/package/components/triggers/mqtt/MqttEditorConfigSection.svelte.d.ts +2 -5
  163. package/package/components/triggers/mqtt/MqttTriggerEditorInner.svelte +178 -9
  164. package/package/components/triggers/mqtt/utils.js +9 -1
  165. package/package/components/triggers/nats/NatsTriggerEditorInner.svelte +43 -2
  166. package/package/components/triggers/nats/utils.js +9 -1
  167. package/package/components/triggers/postgres/PostgresTriggerEditorInner.svelte +41 -2
  168. package/package/components/triggers/postgres/utils.js +9 -1
  169. package/package/components/triggers/schedules/ScheduleEditorInner.svelte +34 -88
  170. package/package/components/triggers/sqs/SqsTriggerEditorInner.svelte +43 -2
  171. package/package/components/triggers/sqs/utils.js +9 -1
  172. package/package/components/triggers/utils.js +12 -0
  173. package/package/components/triggers/websocket/WebsocketTriggerEditorInner.svelte +43 -2
  174. package/package/components/triggers/websocket/utils.js +11 -1
  175. package/package/components/workspaceSettings/AISettings.svelte +0 -2
  176. package/package/components/workspaceSettings/FilterList.svelte +56 -0
  177. package/package/components/workspaceSettings/FilterList.svelte.d.ts +8 -0
  178. package/package/components/workspaceSettings/GitSyncFilterSettings.svelte +785 -0
  179. package/package/components/workspaceSettings/GitSyncFilterSettings.svelte.d.ts +18 -0
  180. package/package/gen/core/OpenAPI.js +1 -1
  181. package/package/gen/schemas.gen.d.ts +305 -23
  182. package/package/gen/schemas.gen.js +305 -23
  183. package/package/gen/services.gen.d.ts +33 -1
  184. package/package/gen/services.gen.js +66 -2
  185. package/package/gen/types.gen.d.ts +216 -11
  186. package/package/history.svelte.js +0 -2
  187. package/package/hub.d.ts +1 -0
  188. package/package/hubPaths.json +5 -2
  189. package/package/infer.js +16 -10
  190. package/package/svelte5Utils.svelte.d.ts +1 -0
  191. package/package/svelte5Utils.svelte.js +25 -18
  192. package/package/toast.js +10 -0
  193. package/package/utils.d.ts +3 -2
  194. package/package/utils.js +20 -5
  195. package/package.json +11 -11
  196. package/package/components/ResultJobLoader.svelte +0 -219
  197. package/package/components/ResultJobLoader.svelte.d.ts +0 -52
  198. package/package/components/TestJobLoader.svelte +0 -274
  199. package/package/components/TestJobLoader.svelte.d.ts +0 -43
  200. package/package/components/icons/AssetVarIcon.svelte +0 -31
  201. package/package/components/icons/AssetVarIcon.svelte.d.ts +0 -9
  202. /package/package/components/runs/{JobLoader.svelte → JobsLoader.svelte} +0 -0
@@ -1,7 +1,9 @@
1
1
  import {} from '@xyflow/svelte';
2
- import { getDependeeAndDependentComponents } from '../flows/flowExplorer';
2
+ import { getAllModules, getDependeeAndDependentComponents } from '../flows/flowExplorer';
3
3
  import { dfsByModule } from '../flows/previousResults';
4
4
  import { defaultIfEmptyString } from '../../utils';
5
+ import { getFlowModuleAssets } from '../assets/lib';
6
+ import { assetDisplaysAsOutputInFlowGraph } from './renderers/nodes/AssetNode.svelte';
5
7
  export function isTriggerStep(module) {
6
8
  return (module?.value != undefined &&
7
9
  (module.value.type === 'script' || module.value.type === 'rawscript') &&
@@ -59,12 +61,17 @@ export function graphBuilder(modules, extra, failureModule, preprocessorModule,
59
61
  insertable: extra.insertable,
60
62
  editMode: extra.editMode,
61
63
  isOwner: extra.isOwner,
62
- flowJob: extra.flowJob
64
+ flowJob: extra.flowJob,
65
+ assets: getFlowModuleAssets(module, extra.additionalAssetsMap)
63
66
  },
64
67
  type: 'module'
65
68
  });
66
69
  return module.id;
67
70
  }
71
+ // TODO : Do better than this
72
+ const nodeIdsWithOutputAssets = new Set(getAllModules(modules)
73
+ .filter((m) => getFlowModuleAssets(m, extra.additionalAssetsMap)?.some(assetDisplaysAsOutputInFlowGraph))
74
+ .map((m) => m.id));
68
75
  const parents = {};
69
76
  //
70
77
  function detectCycle(nodeId, visited, currentPath) {
@@ -119,10 +126,12 @@ export function graphBuilder(modules, extra, failureModule, preprocessorModule,
119
126
  // If the index is -1, it means that the target module is not in the modules array, so we set it to the length of the array
120
127
  index: index >= 0 ? index : (mods?.length ?? 0),
121
128
  ...extra,
122
- insertable: extra.insertable && !options?.disableInsert && prefix == undefined
129
+ insertable: extra.insertable && !options?.disableInsert && prefix == undefined,
130
+ shouldOffsetInsertBtnDueToAssetNode: nodeIdsWithOutputAssets.has(sourceId)
123
131
  }
124
132
  });
125
133
  }
134
+ const inputAssets = extra.additionalAssetsMap?.['Input'];
126
135
  const inputNode = {
127
136
  id: 'Input',
128
137
  type: 'input2',
@@ -139,7 +148,8 @@ export function graphBuilder(modules, extra, failureModule, preprocessorModule,
139
148
  individualStepTests: extra.individualStepTests,
140
149
  flowJob: extra.flowJob,
141
150
  showJobStatus: extra.showJobStatus,
142
- flowHasChanged: extra.flowHasChanged
151
+ flowHasChanged: extra.flowHasChanged,
152
+ ...(inputAssets ? { assets: inputAssets } : {})
143
153
  }
144
154
  };
145
155
  let triggerNode = undefined;
@@ -361,19 +371,35 @@ export function graphBuilder(modules, extra, failureModule, preprocessorModule,
361
371
  type: 'branchOneEnd'
362
372
  };
363
373
  nodes.push(endNode);
364
- // Add default branch
374
+ // // Add default branch
375
+ // const defaultBranch: NodeLayout = {
376
+ // id: `${module.id}-default`,
377
+ // data: {
378
+ // offset: currentOffset,
379
+ // label: 'Default',
380
+ // id: module.id,
381
+ // branchIndex: -1,
382
+ // eventHandlers: eventHandlers,
383
+ // branchOne: true,
384
+ // ...extra
385
+ // },
386
+ // type: 'noBranch'
387
+ // }
365
388
  const defaultBranch = {
366
- id: `${module.id}-default`,
389
+ id: `${module.id}-branch-default`,
367
390
  data: {
368
391
  offset: currentOffset,
369
392
  label: 'Default',
370
393
  id: module.id,
371
394
  branchIndex: -1,
372
395
  eventHandlers: eventHandlers,
373
- branchOne: true,
374
- ...extra
396
+ insertable: extra.insertable,
397
+ preLabel: undefined,
398
+ flowModuleStates: extra.flowModuleStates,
399
+ selected: false,
400
+ modules: module.value.default
375
401
  },
376
- type: 'noBranch'
402
+ type: 'branchOneStart'
377
403
  };
378
404
  nodes.push(defaultBranch);
379
405
  addEdge(module.id, defaultBranch.id, { rootId: module.id, branch: 0 }, prefix, {
@@ -4,18 +4,15 @@ import { ClipboardCopy, Hourglass } from 'lucide-svelte';
4
4
  import { getContext } from 'svelte';
5
5
  import { getStraightLinePath } from '../utils';
6
6
  import { twMerge } from 'tailwind-merge';
7
- import {} from '../../../flows/types';
8
- import { assetDisplaysAsOutputInFlowGraph, NODE_WITH_WRITE_ASSET_Y_OFFSET } from '../nodes/AssetNode.svelte';
7
+ import { NODE_WITH_WRITE_ASSET_Y_OFFSET } from '../nodes/AssetNode.svelte';
9
8
  import { workspaceStore } from '../../../../stores';
10
9
  import FlowStatusWaitingForEvents from '../../../FlowStatusWaitingForEvents.svelte';
11
10
  const { useDataflow } = getContext('FlowGraphContext');
12
- const flowGraphAssetCtx = getContext('FlowGraphAssetContext');
13
11
  let {
14
12
  // id,
15
13
  sourceX, sourceY, sourcePosition, targetX, targetY, targetPosition, markerEnd,
16
14
  // style,
17
15
  data } = $props();
18
- const shouldOffsetInsertButtonDueToAssetNode = flowGraphAssetCtx?.val.assetsMap?.[data.sourceId]?.some(assetDisplaysAsOutputInFlowGraph);
19
16
  let [edgePath] = $derived(getBezierPath({
20
17
  sourceX,
21
18
  sourceY: targetY - sourceY > 100 ? targetY - 100 : sourceY,
@@ -37,7 +34,7 @@ const suspendStatus = $derived(data?.suspendStatus);
37
34
 
38
35
  <EdgeLabel
39
36
  x={sourceX}
40
- y={sourceY + 28 + (shouldOffsetInsertButtonDueToAssetNode ? NODE_WITH_WRITE_ASSET_Y_OFFSET : 0)}
37
+ y={sourceY + 28 + (data.shouldOffsetInsertBtnDueToAssetNode ? NODE_WITH_WRITE_ASSET_Y_OFFSET : 0)}
41
38
  class="base-edge"
42
39
  style=""
43
40
  >
@@ -22,6 +22,7 @@ type $$ComponentProps = EdgeProps & {
22
22
  job: Job;
23
23
  nb: number;
24
24
  }>>;
25
+ shouldOffsetInsertBtnDueToAssetNode?: boolean;
25
26
  };
26
27
  };
27
28
  declare const BaseEdge: import("svelte").Component<$$ComponentProps, {}, "">;
@@ -2,19 +2,21 @@
2
2
  export const NODE_WITH_WRITE_ASSET_Y_OFFSET = 45;
3
3
  export const READ_ASSET_Y_OFFSET = -45;
4
4
  export const WRITE_ASSET_Y_OFFSET = 64;
5
- export const assetDisplaysAsInputInFlowGraph = (a) => !a.access_type || a.access_type === 'r' || a.access_type === 'rw';
6
- export const assetDisplaysAsOutputInFlowGraph = (a) => a.access_type === 'w' || a.access_type === 'rw';
5
+ export const assetDisplaysAsInputInFlowGraph = (a) => !getAccessType(a) || getAccessType(a) === 'r' || getAccessType(a) === 'rw';
6
+ export const assetDisplaysAsOutputInFlowGraph = (a) => getAccessType(a) === 'w' || getAccessType(a) === 'rw';
7
7
  let computeAssetNodesCache;
8
- export function computeAssetNodes(nodes, edges, assetsMap, extraData) {
9
- if (nodes === computeAssetNodesCache?.[0] && deepEqual(assetsMap, computeAssetNodesCache?.[1]))
10
- return computeAssetNodesCache[2];
8
+ export function computeAssetNodes(nodes, edges) {
9
+ if (nodes === computeAssetNodesCache?.[0])
10
+ return computeAssetNodesCache[1];
11
11
  const MAX_ASSET_ROW_WIDTH = 300;
12
12
  const ASSETS_OVERFLOWED_NODE_WIDTH = 25;
13
13
  const allAssetNodes = [];
14
14
  const allAssetEdges = [];
15
15
  const yPosMap = {};
16
16
  for (const node of nodes) {
17
- const assets = assetsMap?.[node.id] ?? [];
17
+ if (node.type !== 'module' && node.type !== 'input2')
18
+ continue;
19
+ const assets = node.data.assets ?? [];
18
20
  // Each asset can be displayed at the top and bottom
19
21
  // i.e once (R or W) or twice (RW)
20
22
  const inputAssets = assets.filter(assetDisplaysAsInputInFlowGraph);
@@ -167,30 +169,26 @@ export function computeAssetNodes(nodes, edges, assetsMap, extraData) {
167
169
  [...sortedNewNodes, ...allAssetNodes],
168
170
  [...edges, ...allAssetEdges]
169
171
  ];
170
- computeAssetNodesCache = [nodes, clone(assetsMap), ret];
172
+ computeAssetNodesCache = [nodes, ret];
171
173
  return ret;
172
174
  }
173
175
  </script>
174
176
 
175
177
  <script lang="ts">import NodeWrapper from './NodeWrapper.svelte';
176
178
  import { AlertTriangle } from 'lucide-svelte';
177
- import { assetEq, formatAssetKind } from '../../../assets/lib';
179
+ import { assetEq, formatAssetKind, getAccessType } from '../../../assets/lib';
178
180
  import { twMerge } from 'tailwind-merge';
179
181
  import { getContext } from 'svelte';
180
182
  import ExploreAssetButton, { assetCanBeExplored } from '../../../ExploreAssetButton.svelte';
181
183
  import { Tooltip } from '../../../meltComponents';
182
184
  import { clone, pluralize } from '../../../../utils';
183
185
  import AssetGenericIcon from '../../../icons/AssetGenericIcon.svelte';
184
- import { deepEqual } from 'fast-equals';
185
186
  import { NODE } from '../../util';
186
187
  import { userStore } from '../../../../stores';
187
188
  const flowGraphAssetsCtx = getContext('FlowGraphAssetContext');
188
- const usageCount = $derived(Object.values(flowGraphAssetsCtx.val.assetsMap ?? {})
189
- .flat()
190
- .filter((asset) => assetEq(asset, data.asset)).length);
191
189
  let { data } = $props();
192
- const isSelected = $derived(assetEq(flowGraphAssetsCtx.val.selectedAsset, data.asset));
193
- const cachedResourceMetadata = $derived(flowGraphAssetsCtx.val.resourceMetadataCache[data.asset.path]);
190
+ const isSelected = $derived(assetEq(flowGraphAssetsCtx?.val.selectedAsset, data.asset));
191
+ const cachedResourceMetadata = $derived(flowGraphAssetsCtx?.val.resourceMetadataCache[data.asset.path]);
194
192
  </script>
195
193
 
196
194
  <NodeWrapper>
@@ -202,8 +200,10 @@ const cachedResourceMetadata = $derived(flowGraphAssetsCtx.val.resourceMetadataC
202
200
  'bg-surface h-6 flex items-center gap-1.5 rounded-sm text-tertiary border overflow-clip',
203
201
  isSelected ? 'bg-surface-secondary !border-surface-inverse' : 'border-transparent'
204
202
  )}
205
- onmouseenter={() => (flowGraphAssetsCtx.val.selectedAsset = data.asset)}
206
- onmouseleave={() => (flowGraphAssetsCtx.val.selectedAsset = undefined)}
203
+ onmouseenter={() =>
204
+ flowGraphAssetsCtx && (flowGraphAssetsCtx.val.selectedAsset = data.asset)}
205
+ onmouseleave={() =>
206
+ flowGraphAssetsCtx && (flowGraphAssetsCtx.val.selectedAsset = undefined)}
207
207
  >
208
208
  <AssetGenericIcon
209
209
  assetKind={data.asset.kind}
@@ -225,14 +225,17 @@ const cachedResourceMetadata = $derived(flowGraphAssetsCtx.val.resourceMetadataC
225
225
  asset={data.asset}
226
226
  noText
227
227
  buttonVariant="contained"
228
- s3FilePicker={flowGraphAssetsCtx.val.s3FilePicker}
229
- dbManagerDrawer={flowGraphAssetsCtx.val.dbManagerDrawer}
228
+ s3FilePicker={flowGraphAssetsCtx?.val.s3FilePicker}
229
+ dbManagerDrawer={flowGraphAssetsCtx?.val.dbManagerDrawer}
230
230
  _resourceMetadata={cachedResourceMetadata}
231
231
  />
232
232
  {/if}
233
233
  </div>
234
234
  <svelte:fragment slot="text">
235
- Used in {pluralize(usageCount, 'step')}<br />
235
+ Used in {pluralize(
236
+ flowGraphAssetsCtx?.val.computeAssetsCount?.(data.asset) ?? -1,
237
+ 'step'
238
+ )}<br />
236
239
  <a
237
240
  href={undefined}
238
241
  class={twMerge(
@@ -243,7 +246,7 @@ const cachedResourceMetadata = $derived(flowGraphAssetsCtx.val.resourceMetadataC
243
246
  )}
244
247
  onclick={() => {
245
248
  if (data.asset.kind === 'resource')
246
- flowGraphAssetsCtx.val.resourceEditorDrawer?.initEdit(data.asset.path)
249
+ flowGraphAssetsCtx?.val.resourceEditorDrawer?.initEdit(data.asset.path)
247
250
  }}
248
251
  >
249
252
  {data.asset.path}
@@ -2,17 +2,12 @@ export declare const NODE_WITH_READ_ASSET_Y_OFFSET = 45;
2
2
  export declare const NODE_WITH_WRITE_ASSET_Y_OFFSET = 45;
3
3
  export declare const READ_ASSET_Y_OFFSET = -45;
4
4
  export declare const WRITE_ASSET_Y_OFFSET = 64;
5
- export declare const assetDisplaysAsInputInFlowGraph: (a: {
6
- access_type?: AssetUsageAccessType;
7
- }) => boolean;
8
- export declare const assetDisplaysAsOutputInFlowGraph: (a: {
9
- access_type?: AssetUsageAccessType;
10
- }) => boolean;
11
- export declare function computeAssetNodes(nodes: Node[], edges: Edge[], assetsMap: Record<string, AssetWithAccessType[]>, extraData: any): [Node[], Edge[]];
12
- import type { AssetN } from '../../graphBuilder.svelte';
13
- import { type AssetWithAccessType } from '../../../assets/lib';
5
+ export declare const assetDisplaysAsInputInFlowGraph: (a: AssetWithAltAccessType) => boolean;
6
+ export declare const assetDisplaysAsOutputInFlowGraph: (a: AssetWithAltAccessType) => boolean;
7
+ export declare function computeAssetNodes(nodes: (Node & NodeLayout)[], edges: Edge[]): [(Node & NodeLayout)[], Edge[]];
8
+ import type { AssetN, NodeLayout } from '../../graphBuilder.svelte';
9
+ import { type AssetWithAltAccessType } from '../../../assets/lib';
14
10
  import type { Edge, Node } from '@xyflow/svelte';
15
- import type { AssetUsageAccessType } from '../../../../gen';
16
11
  interface Props {
17
12
  data: AssetN['data'];
18
13
  }
@@ -10,7 +10,7 @@ import { assetEq } from '../../../assets/lib';
10
10
  let { data } = $props();
11
11
  const flowGraphAssetsCtx = getContext('FlowGraphAssetContext');
12
12
  let isOpen = $state(false);
13
- let includesSelected = $derived(data.overflowedAssets.some((asset) => assetEq(flowGraphAssetsCtx.val.selectedAsset, asset)));
13
+ let includesSelected = $derived(data.overflowedAssets.some((asset) => assetEq(flowGraphAssetsCtx?.val.selectedAsset, asset)));
14
14
  let wasOpenedBecauseOfExternalSelected = false;
15
15
  $effect(() => {
16
16
  if (includesSelected && !isOpen) {
@@ -2,7 +2,7 @@ export const NODE = {
2
2
  width: 275,
3
3
  height: 34,
4
4
  gap: {
5
- horizontal: 40,
5
+ horizontal: 50,
6
6
  vertical: 50
7
7
  }
8
8
  };
@@ -158,6 +158,8 @@ let collapseAll = $state(true);
158
158
  let owners = $derived(Array.from(new Set(filteredItems?.map((x) => x.path.split('/').slice(0, 2).join('/')) ?? [])).sort());
159
159
  $effect(() => {
160
160
  if ($userStore && $workspaceStore) {
161
+ ;
162
+ [archived, includeWithoutMain];
161
163
  untrack(() => {
162
164
  loadScripts(includeWithoutMain);
163
165
  loadFlows();
@@ -1,7 +1,6 @@
1
1
  <script lang="ts">import { Pyramid } from 'lucide-svelte';
2
2
  import AssetResIcon from './AssetResIcon.svelte';
3
3
  import AssetS3Icon from './AssetS3Icon.svelte';
4
- import AssetVarIcon from './AssetVarIcon.svelte';
5
4
  let { assetKind, fill, size, class: className = '' } = $props();
6
5
  </script>
7
6
 
@@ -9,8 +8,6 @@ let { assetKind, fill, size, class: className = '' } = $props();
9
8
  <AssetS3Icon {fill} width={size} height={size} class={className} />
10
9
  {:else if assetKind == 'resource'}
11
10
  <AssetResIcon {fill} width={size} height={size} class={className} />
12
- {:else if assetKind == 'variable'}
13
- <AssetVarIcon {fill} width={size} height={size} class={className} />
14
11
  {:else}
15
12
  <Pyramid {size} color={fill} class={'!fill-none ' + className} />
16
13
  {/if}
@@ -4,7 +4,7 @@
4
4
  <script lang="ts">import { onDestroy, tick } from 'svelte';
5
5
  import { fade } from 'svelte/transition';
6
6
  import {} from '../../gen';
7
- import TestJobLoader from '../TestJobLoader.svelte';
7
+ import JobLoader from '../JobLoader.svelte';
8
8
  import DisplayResult from '../DisplayResult.svelte';
9
9
  import JobArgs from '../JobArgs.svelte';
10
10
  import { writable } from 'svelte/store';
@@ -19,7 +19,7 @@ let job = $state(undefined);
19
19
  let hovered = $state(false);
20
20
  let timeout;
21
21
  let result = $state();
22
- let testJobLoader = $state();
22
+ let jobLoader = $state();
23
23
  let loaded = false;
24
24
  let wrapper = $state();
25
25
  let popupOnTop = $state(true);
@@ -31,7 +31,11 @@ async function instantOpen() {
31
31
  openStore.set(id);
32
32
  if (!loaded) {
33
33
  await tick();
34
- testJobLoader?.watchJob(id);
34
+ jobLoader?.watchJob(id, {
35
+ done(job) {
36
+ onDone(job);
37
+ }
38
+ });
35
39
  }
36
40
  }
37
41
  else {
@@ -58,8 +62,8 @@ function staggeredClose() {
58
62
  close();
59
63
  }, loaded ? 100 : 300);
60
64
  }
61
- function onDone(event) {
62
- job = event.detail;
65
+ function onDone(njob) {
66
+ job = njob;
63
67
  result = job['result'];
64
68
  loaded = true;
65
69
  }
@@ -70,7 +74,7 @@ onDestroy(() => {
70
74
 
71
75
  <svelte:window onkeydown={({ key }) => ['Escape', 'Esc'].includes(key) && close()} />
72
76
  {#if hovered}
73
- <TestJobLoader bind:job bind:this={testJobLoader} on:done={onDone} />
77
+ <JobLoader bind:job bind:this={jobLoader} />
74
78
  {/if}
75
79
 
76
80
  <!-- svelte-ignore a11y_no_static_element_interactions -->
@@ -9,7 +9,7 @@ import RawAppInputsSpecEditor from './RawAppInputsSpecEditor.svelte';
9
9
  import SplitPanesWrapper from '../splitPanes/SplitPanesWrapper.svelte';
10
10
  import SchemaForm from '../SchemaForm.svelte';
11
11
  import RunnableJobPanelInner from '../apps/editor/RunnableJobPanelInner.svelte';
12
- import TestJobLoader from '../TestJobLoader.svelte';
12
+ import JobLoader from '../JobLoader.svelte';
13
13
  let { runnable = $bindable(), id, appPath } = $props();
14
14
  const dispatch = createEventDispatcher();
15
15
  async function fork(nrunnable) {
@@ -37,7 +37,7 @@ function getSchema(runnable) {
37
37
  }
38
38
  return {};
39
39
  }
40
- let testJobLoader = $state();
40
+ let jobLoader = $state();
41
41
  let testJob = $state();
42
42
  let testIsLoading = $state(false);
43
43
  let scriptProgress = $state(0);
@@ -54,15 +54,15 @@ function onFieldsChange(fields) {
54
54
  async function testPreview() {
55
55
  selectedTab = 'test';
56
56
  if (runnable?.type == 'runnableByName' && runnable.inlineScript?.language != 'frontend') {
57
- await testJobLoader?.runPreview(appPath + '/' + id, runnable.inlineScript?.content ?? '', runnable.inlineScript?.language, args, undefined);
57
+ await jobLoader?.runPreview(appPath + '/' + id, runnable.inlineScript?.content ?? '', runnable.inlineScript?.language, args, undefined);
58
58
  }
59
59
  else if (runnable?.type == 'runnableByPath') {
60
- if (testJobLoader && runnable?.type == 'runnableByPath') {
60
+ if (jobLoader && runnable?.type == 'runnableByPath') {
61
61
  if (runnable.runType == 'flow') {
62
- await testJobLoader.runFlowByPath(runnable.path, args);
62
+ await jobLoader.runFlowByPath(runnable.path, args);
63
63
  }
64
64
  else if (runnable.runType == 'script' || runnable.runType == 'hubscript') {
65
- await testJobLoader.runScriptByPath(runnable.path, args);
65
+ await jobLoader.runScriptByPath(runnable.path, args);
66
66
  }
67
67
  }
68
68
  }
@@ -74,9 +74,10 @@ $effect(() => {
74
74
  });
75
75
  </script>
76
76
 
77
- <TestJobLoader
77
+ <JobLoader
78
+ noCode={true}
78
79
  bind:scriptProgress
79
- bind:this={testJobLoader}
80
+ bind:this={jobLoader}
80
81
  bind:isLoading={testIsLoading}
81
82
  bind:job={testJob}
82
83
  />
@@ -97,8 +98,8 @@ $effect(() => {
97
98
  isLoading={testIsLoading}
98
99
  onRun={testPreview}
99
100
  onCancel={async () => {
100
- if (testJobLoader) {
101
- await testJobLoader.cancelJob()
101
+ if (jobLoader) {
102
+ await jobLoader.cancelJob()
102
103
  }
103
104
  }}
104
105
  on:delete
@@ -116,8 +117,8 @@ $effect(() => {
116
117
  isLoading={testIsLoading}
117
118
  onRun={testPreview}
118
119
  onCancel={async () => {
119
- if (testJobLoader) {
120
- await testJobLoader.cancelJob()
120
+ if (jobLoader) {
121
+ await jobLoader.cancelJob()
121
122
  }
122
123
  }}
123
124
  />
@@ -12,6 +12,7 @@ import Alert from '../common/alert/Alert.svelte';
12
12
  import { batchReRunDefaultPropertyExpr, buildExtraLibForBatchReruns, mergeSchemasForBatchReruns } from '../jobs/batchReruns';
13
13
  import Toggle from '../Toggle.svelte';
14
14
  import { TriangleAlert } from 'lucide-svelte';
15
+ import { readFieldsRecursively } from '../../utils';
15
16
  let { selectedIds, options = $bindable() } = $props();
16
17
  let selected = $state();
17
18
  $effect(() => {
@@ -103,7 +104,10 @@ function propertyAlwaysHasSameType(propertyName, group) {
103
104
  const selectedUsesLatestSchema = $derived(!!selected &&
104
105
  (selected?.kind === 'flow' ||
105
106
  (options[selected.kind][selected.script_path]?.use_latest_version ?? false)));
106
- const jobGroupsPromise = $derived(selectedIds && untrack(() => fetchJobGroups()));
107
+ const jobGroupsPromise = $derived.by(() => {
108
+ readFieldsRecursively(selectedIds);
109
+ return untrack(() => fetchJobGroups());
110
+ });
107
111
  </script>
108
112
 
109
113
  <div class="flex-1 flex flex-col">
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">import { base } from '../../base';
2
2
  import { ConcurrencyGroupsService } from '../../gen';
3
- import TestJobLoader from '../TestJobLoader.svelte';
3
+ import JobLoader from '../JobLoader.svelte';
4
4
  import DisplayResult from '../DisplayResult.svelte';
5
5
  import JobArgs from '../JobArgs.svelte';
6
6
  import LogViewer from '../LogViewer.svelte';
@@ -14,13 +14,14 @@ import { workspaceStore } from '../../stores';
14
14
  import WorkflowTimeline from '../WorkflowTimeline.svelte';
15
15
  import Popover from '../Popover.svelte';
16
16
  import { isFlowPreview, isScriptPreview, truncateRev } from '../../utils';
17
- import { createEventDispatcher, untrack } from 'svelte';
17
+ import { createEventDispatcher, setContext, untrack } from 'svelte';
18
18
  import { ListFilter } from 'lucide-svelte';
19
+ import FlowAssetsHandler, { initFlowGraphAssetsCtx } from '../flows/FlowAssetsHandler.svelte';
20
+ import JobAssetsViewer from '../assets/JobAssetsViewer.svelte';
19
21
  let { id, blankLink = false, workspace } = $props();
20
22
  let job = $state(undefined);
21
23
  let result = $state();
22
- function onDone(event) {
23
- job = event.detail;
24
+ function onDone(job) {
24
25
  result = job['result'];
25
26
  }
26
27
  let currentJob = $state(undefined);
@@ -31,6 +32,7 @@ async function getConcurrencyKey(job) {
31
32
  concurrencyKey = await ConcurrencyGroupsService.getConcurrencyKey({ id: job.id });
32
33
  }
33
34
  let viewTab = $state('result');
35
+ setContext('FlowGraphAssetContext', initFlowGraphAssetsCtx({ getModules: () => job?.raw_flow?.modules ?? [] }));
34
36
  function asWorkflowStatus(x) {
35
37
  return x;
36
38
  }
@@ -41,24 +43,24 @@ $effect(() => {
41
43
  }
42
44
  });
43
45
  $effect(() => {
44
- id && testJobLoader && untrack(() => testJobLoader?.watchJob(id));
46
+ id &&
47
+ jobLoader &&
48
+ untrack(() => jobLoader?.watchJob(id, {
49
+ done(x) {
50
+ onDone(x);
51
+ }
52
+ }));
45
53
  });
46
54
  $effect(() => {
47
- job?.logs == undefined && job && viewTab == 'logs' && untrack(() => testJobLoader?.getLogs());
55
+ job?.logs == undefined && job && viewTab == 'logs' && untrack(() => jobLoader?.getLogs());
48
56
  });
49
57
  $effect(() => {
50
58
  job?.id && lastJobId !== job.id && untrack(() => job && getConcurrencyKey(job));
51
59
  });
52
- let testJobLoader = $state(undefined);
60
+ let jobLoader = $state(undefined);
53
61
  </script>
54
62
 
55
- <TestJobLoader
56
- lazyLogs
57
- workspaceOverride={workspace}
58
- bind:job={currentJob}
59
- bind:this={testJobLoader}
60
- on:done={onDone}
61
- />
63
+ <JobLoader lazyLogs workspaceOverride={workspace} bind:job={currentJob} bind:this={jobLoader} />
62
64
 
63
65
  <div class="p-4 flex flex-col gap-2 items-start h-full">
64
66
  {#if job}
@@ -165,9 +167,9 @@ let testJobLoader = $state(undefined);
165
167
  {/if}
166
168
 
167
169
  <div class=" w-full rounded-md min-h-full">
168
- {#if job?.is_flow_step == false && job?.flow_status && (isScriptPreview(job?.job_kind) || job?.job_kind == 'script') && !(typeof job.flow_status == 'object' && '_metadata' in job.flow_status)}
170
+ {#if job?.workflow_as_code_status}
169
171
  <WorkflowTimeline
170
- flow_status={asWorkflowStatus(job.flow_status)}
172
+ flow_status={asWorkflowStatus(job.workflow_as_code_status)}
171
173
  flowDone={job.type == 'CompletedJob'}
172
174
  />
173
175
  {/if}
@@ -176,6 +178,7 @@ let testJobLoader = $state(undefined);
176
178
  <Tabs bind:selected={viewTab}>
177
179
  <Tab size="xs" value="result">Result</Tab>
178
180
  <Tab size="xs" value="logs">Logs</Tab>
181
+ <Tab size="xs" value="assets">Assets</Tab>
179
182
  {#if isScriptPreview(job?.job_kind)}
180
183
  <Tab size="xs" value="code">Code</Tab>
181
184
  {/if}
@@ -189,6 +192,8 @@ let testJobLoader = $state(undefined);
189
192
  <FlowStatusViewer jobId={job.id} workspaceId={job.workspace_id} />
190
193
  </div>
191
194
  </div>
195
+ {:else if viewTab == 'assets'}
196
+ <JobAssetsViewer {job} />
192
197
  {:else}
193
198
  <div class="flex flex-col border rounded-md p-2 mt-2 h-full overflow-auto">
194
199
  {#if viewTab == 'logs'}
@@ -247,3 +252,8 @@ let testJobLoader = $state(undefined);
247
252
  </div>
248
253
  {/if}
249
254
  </div>
255
+ <FlowAssetsHandler
256
+ modules={job?.raw_flow?.modules ?? []}
257
+ enableDbExplore
258
+ enablePathScriptAndFlowAssets
259
+ />
@@ -40,9 +40,9 @@ interface Props {
40
40
  perPage?: number | undefined;
41
41
  allowWildcards?: boolean;
42
42
  }
43
- declare const JobLoader: import("svelte").Component<Props, {
43
+ declare const JobsLoader: import("svelte").Component<Props, {
44
44
  loadExtraJobs: () => Promise<boolean>;
45
45
  loadJobs: (nMinTs: string | undefined, nMaxTs: string | undefined, reset: boolean, shouldGetCount?: boolean) => Promise<void>;
46
46
  }, "jobs" | "loading" | "minTs" | "maxTs" | "jobKinds" | "queue_count" | "suspended_count" | "completedJobs" | "externalJobs" | "extendedJobs">;
47
- type JobLoader = ReturnType<typeof JobLoader>;
48
- export default JobLoader;
47
+ type JobsLoader = ReturnType<typeof JobsLoader>;
48
+ export default JobsLoader;
@@ -2,7 +2,7 @@
2
2
  import { AlertTriangle } from 'lucide-svelte';
3
3
  import Popover from '../Popover.svelte';
4
4
  import { onDestroy } from 'svelte';
5
- let { tag } = $props();
5
+ let { tag, tagLabel = undefined } = $props();
6
6
  let noWorkerWithTag = $state(false);
7
7
  let timeout = undefined;
8
8
  let visible = true;
@@ -35,7 +35,7 @@ onDestroy(() => {
35
35
  <Popover notClickable placement="top">
36
36
  <AlertTriangle size={16} class="text-yellow-500" />
37
37
  {#snippet text()}
38
- No worker with tag <b>{tag}</b> is currently running.
38
+ No worker with {tagLabel ?? 'tag'} <b>{tag}</b> is currently running.
39
39
  {/snippet}
40
40
  </Popover>
41
41
  {/if}
@@ -1,5 +1,6 @@
1
1
  interface Props {
2
2
  tag: string;
3
+ tagLabel?: string;
3
4
  }
4
5
  declare const NoWorkerWithTagWarning: import("svelte").Component<Props, {}, "">;
5
6
  type NoWorkerWithTagWarning = ReturnType<typeof NoWorkerWithTagWarning>;
@@ -40,6 +40,6 @@ declare const RunsFilter: $$__sveltets_2_IsomorphicComponent<Props, {
40
40
  successChange: CustomEvent<any>;
41
41
  } & {
42
42
  [evt: string]: CustomEvent<any>;
43
- }, {}, {}, "path" | "tag" | "success" | "worker" | "folder" | "user" | "label" | "isSkipped" | "argFilter" | "resultFilter" | "schedulePath" | "jobKindsCat" | "concurrencyKey" | "argError" | "resultError" | "allWorkspaces" | "allowWildcards" | "filterBy">;
43
+ }, {}, {}, "path" | "tag" | "success" | "worker" | "label" | "folder" | "user" | "isSkipped" | "argFilter" | "resultFilter" | "schedulePath" | "jobKindsCat" | "concurrencyKey" | "argError" | "resultError" | "allWorkspaces" | "allowWildcards" | "filterBy">;
44
44
  type RunsFilter = InstanceType<typeof RunsFilter>;
45
45
  export default RunsFilter;