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,31 +1,17 @@
1
1
  <script lang="ts">import { ResourceService } from '../gen';
2
2
  import { workspaceStore } from '../stores';
3
- import { createEventDispatcher, getContext } from 'svelte';
3
+ import { getContext, untrack } from 'svelte';
4
4
  import DarkModeObserver from './DarkModeObserver.svelte';
5
5
  import { Button, Drawer, DrawerContent } from './common';
6
6
  import { Plus, Loader2, Link2Off } from 'lucide-svelte';
7
7
  import { sendUserToast } from '../toast';
8
- import { createDispatcherIfMounted } from '../createDispatcherIfMounted';
9
8
  import Select from './select/Select.svelte';
10
- const dispatch = createEventDispatcher();
11
- const dispatchIfMounted = createDispatcherIfMounted(dispatch);
12
- export let initialValue = undefined;
13
- export let value = initialValue;
14
- export let resourceType = undefined;
15
- export let disablePortal = false;
16
- export let expressOAuthSetup = false;
17
- export let disabled = false;
18
- let open = false;
19
- let refreshCount = 0;
9
+ let { value = $bindable(), resourceType = undefined, disablePortal = false, expressOAuthSetup = false, disabled = false } = $props();
10
+ let open = $state(false);
11
+ let refreshCount = $state(0);
20
12
  const appViewerContext = getContext('AppViewerContext');
21
- let valueSelect = initialValue || value
22
- ? {
23
- value: value ?? initialValue,
24
- label: value ?? initialValue
25
- }
26
- : undefined;
27
- let collection = valueSelect ? [valueSelect] : [];
28
- let loading = true;
13
+ let collection = $state(value ? [{ value, label: value }] : []);
14
+ let loading = $state(true);
29
15
  async function loadResources(resourceType) {
30
16
  loading = true;
31
17
  try {
@@ -37,23 +23,23 @@ async function loadResources(resourceType) {
37
23
  label: x.path
38
24
  }));
39
25
  // TODO check if this is needed
40
- if (!nc.find((x) => x.value == value) && (initialValue || value)) {
41
- nc.push({ value: value ?? initialValue, label: value ?? initialValue });
26
+ if (!nc.find((x) => x.value == value) && value) {
27
+ nc.push({ value: value, label: value });
42
28
  }
43
29
  collection = nc;
44
30
  if (expressOAuthSetup && nc.length > 0) {
45
31
  value = nc[0].value;
46
- valueSelect = nc[0];
47
32
  }
48
33
  }
49
34
  finally {
50
35
  loading = false;
51
36
  }
52
37
  }
53
- $: $workspaceStore && loadResources(resourceType);
54
- $: dispatchIfMounted('change', value);
55
- let darkMode = false;
56
- let drawer = undefined;
38
+ $effect(() => {
39
+ $workspaceStore && resourceType && untrack(() => loadResources(resourceType));
40
+ });
41
+ let darkMode = $state(false);
42
+ let drawer = $state(undefined);
57
43
  export function askNewResource() {
58
44
  refreshCount += 1;
59
45
  open = true;
@@ -77,7 +63,6 @@ export function askNewResource() {
77
63
  on:refresh={async (e) => {
78
64
  await loadResources(resourceType)
79
65
  value = e.detail
80
- valueSelect = { value, label: value }
81
66
  open = false
82
67
  }}
83
68
  />
@@ -105,7 +90,6 @@ export function askNewResource() {
105
90
  on:refresh={async (e) => {
106
91
  await loadResources(resourceType)
107
92
  value = e.detail
108
- valueSelect = { value, label: value }
109
93
  drawer?.closeDrawer?.()
110
94
  open = false
111
95
  }}
@@ -141,7 +125,6 @@ export function askNewResource() {
141
125
  const item = collection[0]
142
126
  if (item) {
143
127
  value = item.value
144
- valueSelect = item
145
128
  }
146
129
  }}>Use existing</Button
147
130
  >
@@ -151,15 +134,13 @@ export function askNewResource() {
151
134
  {disabled}
152
135
  {disablePortal}
153
136
  bind:value={
154
- () => valueSelect?.value,
137
+ () => value,
155
138
  (v) => {
156
139
  value = v
157
- valueSelect = collection.find((x) => x.value === v)
158
140
  }
159
141
  }
160
142
  onClear={() => {
161
143
  value = undefined
162
- valueSelect = undefined
163
144
  }}
164
145
  clearable
165
146
  items={collection}
@@ -168,7 +149,7 @@ export function askNewResource() {
168
149
  />
169
150
  {/if}
170
151
  <div class="flex gap-1 items-center">
171
- {#if valueSelect && expressOAuthSetup}
152
+ {#if value && expressOAuthSetup}
172
153
  <Button
173
154
  {disabled}
174
155
  color="light"
@@ -177,15 +158,13 @@ export function askNewResource() {
177
158
  btnClasses="w-8 px-0.5 py-1.5"
178
159
  iconOnly
179
160
  on:click={async () => {
180
- if (valueSelect && valueSelect.label) {
181
- value = undefined
161
+ if (value) {
182
162
  await ResourceService.deleteResource({
183
163
  workspace: appViewerContext?.workspace ?? $workspaceStore,
184
- path: valueSelect.label
164
+ path: value
185
165
  })
186
- await loadResources(resourceType)
187
166
  value = undefined
188
- valueSelect = undefined
167
+ await loadResources(resourceType)
189
168
  }
190
169
  }}
191
170
  startIcon={{ icon: Link2Off }}
@@ -1,28 +1,12 @@
1
- interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
2
- new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
3
- $$bindings?: Bindings;
4
- } & Exports;
5
- (internal: unknown, props: Props & {
6
- $$events?: Events;
7
- $$slots?: Slots;
8
- }): Exports & {
9
- $set?: any;
10
- $on?: any;
11
- };
12
- z_$$bindings?: Bindings;
13
- }
14
- declare const LightweightResourcePicker: $$__sveltets_2_IsomorphicComponent<{
15
- initialValue?: string | undefined;
16
- value?: string | undefined;
1
+ interface Props {
2
+ value: string | undefined;
17
3
  resourceType?: string | undefined;
18
4
  disablePortal?: boolean;
19
5
  expressOAuthSetup?: boolean;
20
6
  disabled?: boolean;
21
- askNewResource?: () => void;
22
- }, {
23
- [evt: string]: CustomEvent<any>;
24
- }, {}, {
7
+ }
8
+ declare const LightweightResourcePicker: import("svelte").Component<Props, {
25
9
  askNewResource: () => void;
26
- }, string>;
27
- type LightweightResourcePicker = InstanceType<typeof LightweightResourcePicker>;
10
+ }, "value">;
11
+ type LightweightResourcePicker = ReturnType<typeof LightweightResourcePicker>;
28
12
  export default LightweightResourcePicker;
@@ -1,4 +1,4 @@
1
- <script lang="ts" context="module">"use strict";
1
+ <script lang="ts" module>"use strict";
2
2
  const s3LogPrefixes = [
3
3
  '\n[windmill] Previous logs have been saved to object storage at logs/',
4
4
  '\n[windmill] Previous logs have been saved to disk at logs/',
@@ -15,34 +15,17 @@ import AnsiUp from 'ansi_up';
15
15
  import NoWorkerWithTagWarning from './runs/NoWorkerWithTagWarning.svelte';
16
16
  import { JobService } from '../gen';
17
17
  import Tooltip from './Tooltip.svelte';
18
- export let content;
19
- export let isLoading;
20
- export let duration = undefined;
21
- export let mem = undefined;
22
- export let wrapperClass = '';
23
- export let jobId = undefined;
24
- export let tag;
25
- export let small = false;
26
- export let drawerOpen = false;
27
- export let noMaxH = false;
28
- export let noAutoScroll = false;
29
- export let download = true;
30
- export let customEmptyMessage = 'No logs are available yet';
18
+ let { content, isLoading, duration = undefined, mem = undefined, wrapperClass = '', jobId = undefined, tag, small = false, drawerOpen = $bindable(false), noMaxH = false, noAutoScroll = false, download = true, customEmptyMessage = 'No logs are available yet', tagLabel = undefined } = $props();
31
19
  // @ts-ignore
32
- const ansi_up = new AnsiUp();
20
+ const ansi_up = $state(new AnsiUp());
33
21
  ansi_up.use_classes = true;
34
- let scroll = true;
35
- let div = null;
22
+ let scroll = $state(true);
23
+ let div = $state(null);
36
24
  // let downloadStartUrl: string | undefined = undefined
37
25
  let LOG_INC = 10000;
38
- let LOG_LIMIT = LOG_INC;
39
- let lastJobId = jobId;
40
- let loadedFromObjectStore = '';
41
- $: if (jobId !== lastJobId) {
42
- lastJobId = jobId;
43
- loadedFromObjectStore = '';
44
- LOG_LIMIT = LOG_INC;
45
- }
26
+ let LOG_LIMIT = $state(LOG_INC);
27
+ let lastJobId = $state(jobId);
28
+ let loadedFromObjectStore = $state('');
46
29
  function findPrefixIndex(truncateContent) {
47
30
  let index = s3LogPrefixes.findIndex((x) => truncateContent.startsWith(x));
48
31
  if (index == -1) {
@@ -73,9 +56,6 @@ function tooltipText(prefixIndex) {
73
56
  return 'Attempt to download the logs from disk. Assume there is a shared disk between the workers and the server at /tmp/windmill/logs. Since you are on EE, you can alternatively use an object store such as S3 configured in the instance settings instead of a shared volume..';
74
57
  }
75
58
  }
76
- $: truncatedContent = truncateContent(content, loadedFromObjectStore, LOG_LIMIT);
77
- $: prefixIndex = findPrefixIndex(truncatedContent);
78
- $: downloadStartUrl = findStartUrl(truncatedContent, prefixIndex);
79
59
  function truncateContent(jobContent, loadedFromObjectStore, limit) {
80
60
  let content = loadedFromObjectStore + (jobContent ?? '');
81
61
  if (content.length > limit) {
@@ -83,14 +63,11 @@ function truncateContent(jobContent, loadedFromObjectStore, limit) {
83
63
  }
84
64
  return content;
85
65
  }
86
- $: truncatedContent && scrollToBottom();
87
- $: html = ansi_up.ansi_to_html(downloadStartUrl && prefixIndex != undefined
88
- ? truncatedContent.substring(truncatedContent.substring(1).indexOf('\n') + 2, truncatedContent.length)
89
- : truncatedContent);
90
66
  export function scrollToBottom() {
67
+ // console.log('scrollToBottom', scroll, div)
91
68
  scroll && setTimeout(() => div?.scroll({ top: div?.scrollHeight, behavior: 'smooth' }), 100);
92
69
  }
93
- let logViewer;
70
+ let logViewer = $state();
94
71
  async function getStoreLogs() {
95
72
  if (downloadStartUrl) {
96
73
  scroll = false;
@@ -111,13 +88,28 @@ async function getStoreLogs() {
111
88
  function showMoreTruncate(len) {
112
89
  scroll = false;
113
90
  LOG_LIMIT += LOG_INC;
114
- console.log(LOG_INC, len, LOG_LIMIT);
115
91
  let newC = truncateContent(content, loadedFromObjectStore, LOG_LIMIT);
116
92
  let newlineIndex = newC.indexOf('\n') + 1;
117
93
  if (newlineIndex < LOG_INC / 2) {
118
94
  LOG_LIMIT -= newlineIndex;
119
95
  }
120
96
  }
97
+ $effect.pre(() => {
98
+ if (jobId !== lastJobId) {
99
+ lastJobId = jobId;
100
+ loadedFromObjectStore = '';
101
+ LOG_LIMIT = LOG_INC;
102
+ }
103
+ });
104
+ let truncatedContent = $derived(truncateContent(content, loadedFromObjectStore, LOG_LIMIT));
105
+ let prefixIndex = $derived(findPrefixIndex(truncatedContent));
106
+ let downloadStartUrl = $derived(findStartUrl(truncatedContent, prefixIndex));
107
+ $effect.pre(() => {
108
+ truncatedContent && scrollToBottom();
109
+ });
110
+ let html = $derived(ansi_up.ansi_to_html(downloadStartUrl && prefixIndex != undefined
111
+ ? truncatedContent.substring(truncatedContent.substring(1).indexOf('\n') + 2, truncatedContent.length)
112
+ : truncatedContent));
121
113
  </script>
122
114
 
123
115
  <Drawer bind:this={logViewer} bind:open={drawerOpen} size="900px">
@@ -154,10 +146,10 @@ function showMoreTruncate(len) {
154
146
  >{#if content}{@const len =
155
147
  (content?.length ?? 0) +
156
148
  (loadedFromObjectStore?.length ?? 0)}{#if downloadStartUrl}<button
157
- on:click={getStoreLogs}
149
+ onclick={getStoreLogs}
158
150
  >Show more... <Tooltip>{tooltipText(prefixIndex)}</Tooltip></button
159
151
  ><br />{:else if len > LOG_LIMIT}(truncated to the last {LOG_LIMIT} characters)...<br
160
- /><button on:click={() => showMoreTruncate(len)}>Show more..</button><br
152
+ /><button onclick={() => showMoreTruncate(len)}>Show more..</button><br
161
153
  />{/if}{@html html}{:else if isLoading}Waiting for job to start...{:else}No logs are available yet{/if}</pre
162
154
  >
163
155
  </div>
@@ -182,7 +174,7 @@ function showMoreTruncate(len) {
182
174
  </a>
183
175
  </div>
184
176
  {/if}
185
- <button on:click={logViewer.openDrawer}><Expand size="12" /></button>
177
+ <button onclick={logViewer.openDrawer}><Expand size="12" /></button>
186
178
  {#if !noAutoScroll}
187
179
  <div
188
180
  class="{small ? '' : 'py-2'} pr-2 {small
@@ -200,8 +192,10 @@ function showMoreTruncate(len) {
200
192
  <Loader2 class="animate-spin" />
201
193
  {#if tag}
202
194
  <div class="flex flex-row items-center gap-1">
203
- <div class="text-secondary {small ? '!text-2xs' : '!text-xs'}">tag: {tag}</div>
204
- <NoWorkerWithTagWarning {tag} />
195
+ <div class="text-secondary {small ? '!text-2xs' : '!text-xs'}"
196
+ >{tagLabel ?? 'tag'}: {tag}</div
197
+ >
198
+ <NoWorkerWithTagWarning {tagLabel} {tag} />
205
199
  </div>
206
200
  {/if}
207
201
  </div>
@@ -222,10 +216,10 @@ function showMoreTruncate(len) {
222
216
  <pre class="whitespace-pre break-words {small ? '!text-2xs' : '!text-xs'} w-full p-2"
223
217
  >{#if content}{@const len =
224
218
  (content?.length ?? 0) +
225
- (loadedFromObjectStore?.length ?? 0)}{#if downloadStartUrl}<button on:click={getStoreLogs}
219
+ (loadedFromObjectStore?.length ?? 0)}{#if downloadStartUrl}<button onclick={getStoreLogs}
226
220
  >Show more... &nbsp;<Tooltip>{tooltipText(prefixIndex)}</Tooltip></button
227
221
  ><br />{:else if len > LOG_LIMIT}(truncated to the last {LOG_LIMIT} characters)<br
228
- /><button on:click={() => showMoreTruncate(len)}>Show more..</button><br />{/if}<span
222
+ /><button onclick={() => showMoreTruncate(len)}>Show more..</button><br />{/if}<span
229
223
  >{@html html}</span
230
224
  >{:else if !isLoading}<span>{customEmptyMessage}</span>{/if}</pre
231
225
  >
@@ -1,17 +1,4 @@
1
- interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
2
- new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
3
- $$bindings?: Bindings;
4
- } & Exports;
5
- (internal: unknown, props: Props & {
6
- $$events?: Events;
7
- $$slots?: Slots;
8
- }): Exports & {
9
- $set?: any;
10
- $on?: any;
11
- };
12
- z_$$bindings?: Bindings;
13
- }
14
- declare const LogViewer: $$__sveltets_2_IsomorphicComponent<{
1
+ interface Props {
15
2
  content: string | undefined;
16
3
  isLoading: boolean;
17
4
  duration?: number | undefined;
@@ -25,11 +12,10 @@ declare const LogViewer: $$__sveltets_2_IsomorphicComponent<{
25
12
  noAutoScroll?: boolean;
26
13
  download?: boolean;
27
14
  customEmptyMessage?: string;
28
- scrollToBottom?: () => void;
29
- }, {
30
- [evt: string]: CustomEvent<any>;
31
- }, {}, {
15
+ tagLabel?: string;
16
+ }
17
+ declare const LogViewer: import("svelte").Component<Props, {
32
18
  scrollToBottom: () => void;
33
- }, string>;
34
- type LogViewer = InstanceType<typeof LogViewer>;
19
+ }, "drawerOpen">;
20
+ type LogViewer = ReturnType<typeof LogViewer>;
35
21
  export default LogViewer;
@@ -5,7 +5,7 @@ import OutputPickerInner from './flows/propPicker/OutputPickerInner.svelte';
5
5
  import { Pane, Splitpanes } from 'svelte-splitpanes';
6
6
  import { getContext } from 'svelte';
7
7
  import { getStringError } from './copilot/chat/utils';
8
- let { lang, editor, diffEditor, loopStatus = undefined, lastJob = undefined, scriptProgress = $bindable(undefined), testJob = undefined, mod, testIsLoading = false, disableMock = false, disableHistory = false, onUpdateMock, loadingJob = false } = $props();
8
+ let { lang, editor, diffEditor, loopStatus = undefined, lastJob = undefined, scriptProgress = $bindable(undefined), testJob = undefined, mod, testIsLoading = false, disableMock = false, disableHistory = false, onUpdateMock, loadingJob = false, tagLabel = undefined } = $props();
9
9
  const { testSteps } = getContext('FlowEditorContext');
10
10
  let selectedJob = $state(undefined);
11
11
  let preview = $state(undefined);
@@ -58,6 +58,7 @@ const logJob = $derived(testJob ?? selectedJob);
58
58
  isLoading={false}
59
59
  tag={undefined}
60
60
  customEmptyMessage="Using pinned data"
61
+ {tagLabel}
61
62
  />
62
63
  {:else}
63
64
  <LogViewer
@@ -68,6 +69,7 @@ const logJob = $derived(testJob ?? selectedJob);
68
69
  content={logJob?.logs}
69
70
  isLoading={(testIsLoading && logJob?.['running'] == false) || loadingJob}
70
71
  tag={logJob?.tag}
72
+ {tagLabel}
71
73
  />
72
74
  {/if}
73
75
  </Pane>
@@ -21,6 +21,7 @@ interface Props {
21
21
  return_value?: unknown;
22
22
  }) => void;
23
23
  loadingJob?: boolean;
24
+ tagLabel?: string;
24
25
  }
25
26
  declare const ModulePreviewResultViewer: import("svelte").Component<Props, {}, "scriptProgress">;
26
27
  type ModulePreviewResultViewer = ReturnType<typeof ModulePreviewResultViewer>;
@@ -2,11 +2,11 @@
2
2
  import { workspaceStore } from '../stores';
3
3
  import { getScriptByPath } from '../scripts';
4
4
  import { getContext } from 'svelte';
5
- import TestJobLoader from './TestJobLoader.svelte';
5
+ import JobLoader, {} from './JobLoader.svelte';
6
6
  import { getStepHistoryLoaderContext } from './stepHistoryLoader.svelte';
7
7
  let { mod, testJob = $bindable(undefined), testIsLoading = $bindable(false), noEditor = false, scriptProgress = $bindable(undefined) } = $props();
8
8
  const { flowStore, flowStateStore, pathStore, testSteps, previewArgs, modulesTestStates } = getContext('FlowEditorContext');
9
- let testJobLoader = $state(undefined);
9
+ let jobLoader = $state(undefined);
10
10
  let jobProgressReset = () => { };
11
11
  let stepHistoryLoader = getStepHistoryLoaderContext();
12
12
  export function runTestWithStepArgs() {
@@ -22,31 +22,36 @@ export async function runTest(args) {
22
22
  jobProgressReset();
23
23
  if (modulesTestStates.states[mod.id]) {
24
24
  modulesTestStates.states[mod.id].cancel = async () => {
25
- await testJobLoader?.cancelJob();
25
+ await jobLoader?.cancelJob();
26
26
  modulesTestStates.states[mod.id].testJob = undefined;
27
27
  };
28
28
  modulesTestStates.runTestCb?.(mod.id);
29
29
  }
30
30
  const val = mod.value;
31
31
  // let jobId: string | undefined = undefined
32
+ let callbacks = {
33
+ done: (x) => {
34
+ jobDone(x);
35
+ }
36
+ };
32
37
  if (val.type == 'rawscript') {
33
- await testJobLoader?.runPreview(val.path ?? ($pathStore ?? '') + '/' + mod.id, val.content, val.language, mod.id === 'preprocessor' ? { _ENTRYPOINT_OVERRIDE: 'preprocessor', ...args } : args, flowStore?.val?.tag ?? val.tag);
38
+ await jobLoader?.runPreview(val.path ?? ($pathStore ?? '') + '/' + mod.id, val.content, val.language, mod.id === 'preprocessor' ? { _ENTRYPOINT_OVERRIDE: 'preprocessor', ...args } : args, flowStore?.val?.tag ?? val.tag, undefined, undefined, callbacks);
34
39
  }
35
40
  else if (val.type == 'script') {
36
41
  const script = val.hash
37
42
  ? await ScriptService.getScriptByHash({ workspace: $workspaceStore, hash: val.hash })
38
43
  : await getScriptByPath(val.path);
39
- await testJobLoader?.runPreview(val.path, script.content, script.language, mod.id === 'preprocessor' ? { _ENTRYPOINT_OVERRIDE: 'preprocessor', ...args } : args, flowStore?.val?.tag ?? (val.tag_override ? val.tag_override : script.tag), script.lock, val.hash ?? script.hash);
44
+ await jobLoader?.runPreview(val.path, script.content, script.language, mod.id === 'preprocessor' ? { _ENTRYPOINT_OVERRIDE: 'preprocessor', ...args } : args, flowStore?.val?.tag ?? (val.tag_override ? val.tag_override : script.tag), script.lock, val.hash ?? script.hash, callbacks);
40
45
  }
41
46
  else if (val.type == 'flow') {
42
- await testJobLoader?.runFlowByPath(val.path, args);
47
+ await jobLoader?.runFlowByPath(val.path, args, callbacks);
43
48
  }
44
49
  else {
45
50
  throw Error('Not supported module type');
46
51
  }
47
52
  }
48
- function jobDone() {
49
- if (testJob && !testJob.canceled && testJob.type == 'CompletedJob' && `result` in testJob) {
53
+ function jobDone(testJob) {
54
+ if (testJob && !testJob.canceled && testJob.type == 'CompletedJob') {
50
55
  if ($flowStateStore[mod.id]) {
51
56
  $flowStateStore[mod.id].previewResult = testJob.result;
52
57
  $flowStateStore[mod.id].previewSuccess = testJob.success;
@@ -76,11 +81,11 @@ modulesTestStates.states[mod.id] = {
76
81
  };
77
82
  </script>
78
83
 
79
- <TestJobLoader
84
+ <JobLoader
85
+ noCode={true}
80
86
  toastError={noEditor}
81
- on:done={() => jobDone()}
82
87
  bind:scriptProgress
83
- bind:this={testJobLoader}
88
+ bind:this={jobLoader}
84
89
  bind:isLoading={
85
90
  () => modulesTestStates.states[mod.id]?.loading ?? false,
86
91
  (v) => {