windmill-components 1.291.4 → 1.305.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 (224) hide show
  1. package/package/autosize.d.ts +4 -0
  2. package/package/autosize.js +76 -0
  3. package/package/components/AppConnect.svelte +26 -7
  4. package/package/components/ArgInput.svelte +129 -103
  5. package/package/components/ContentSearch.svelte +8 -2
  6. package/package/components/ContextualVariableEditor.svelte +69 -0
  7. package/package/components/ContextualVariableEditor.svelte.d.ts +21 -0
  8. package/package/components/CronInput.svelte +3 -0
  9. package/package/components/DBSchemaExplorer.svelte +2 -2
  10. package/package/components/DarkModeObserver.svelte +2 -2
  11. package/package/components/DateTimeInput.svelte +9 -3
  12. package/package/components/DefaultScripts.svelte +1 -0
  13. package/package/components/DisplayResult.svelte +83 -41
  14. package/package/components/DisplayResult.svelte.d.ts +1 -0
  15. package/package/components/DurationMs.svelte +1 -10
  16. package/package/components/DurationMs.svelte.d.ts +0 -1
  17. package/package/components/Editor.svelte +40 -10
  18. package/package/components/ErrorOrRecoveryHandler.svelte +5 -2
  19. package/package/components/FlowBuilder.svelte +9 -5
  20. package/package/components/FlowBuilder.svelte.d.ts +1 -0
  21. package/package/components/FlowGraphViewerStep.svelte +5 -4
  22. package/package/components/FlowJobResult.svelte +36 -1
  23. package/package/components/FlowJobResult.svelte.d.ts +2 -1
  24. package/package/components/FlowLoopIterationPreview.svelte +18 -2
  25. package/package/components/FlowLoopIterationPreview.svelte.d.ts +6 -0
  26. package/package/components/FlowStatusViewer.svelte +1 -1
  27. package/package/components/FlowStatusViewerInner.svelte +117 -44
  28. package/package/components/FlowStatusViewerInner.svelte.d.ts +1 -0
  29. package/package/components/FlowStatusWaitingForEvents.svelte +97 -54
  30. package/package/components/GfmMarkdown.svelte +14 -0
  31. package/package/components/GfmMarkdown.svelte.d.ts +16 -0
  32. package/package/components/GroupEditor.svelte +1 -2
  33. package/package/components/HighlightCode.svelte +1 -1
  34. package/package/components/InputTransformForm.svelte +24 -2
  35. package/package/components/InstanceGroupEditor.svelte +1 -2
  36. package/package/components/InstanceSettings.svelte +4 -0
  37. package/package/components/JobArgs.svelte +5 -4
  38. package/package/components/JobArgs.svelte.d.ts +1 -0
  39. package/package/components/JobStatus.svelte +2 -8
  40. package/package/components/LightweightArgInput.svelte +3 -6
  41. package/package/components/LightweightArgInput.svelte.d.ts +0 -1
  42. package/package/components/LogId.svelte +3 -0
  43. package/package/components/LogId.svelte.d.ts +16 -0
  44. package/package/components/LogViewer.svelte +14 -5
  45. package/package/components/MapResult.svelte +151 -0
  46. package/package/components/MapResult.svelte.d.ts +27 -0
  47. package/package/components/MoveDrawer.svelte +2 -1
  48. package/package/components/ObjectStoreConfigSettings.svelte +169 -0
  49. package/package/components/ObjectStoreConfigSettings.svelte.d.ts +32 -0
  50. package/package/components/ParqetTableRenderer.svelte +3 -2
  51. package/package/components/ResourceEditor.svelte +33 -11
  52. package/package/components/RunChart.svelte +0 -1
  53. package/package/components/RunForm.svelte.d.ts +1 -1
  54. package/package/components/RunFormAdvancedPopup.svelte.d.ts +1 -1
  55. package/package/components/SavedInputs.svelte +1 -1
  56. package/package/components/ScriptBuilder.svelte +38 -8
  57. package/package/components/SimpleEditor.svelte +1 -3
  58. package/package/components/SimpleEditor.svelte.d.ts +0 -3
  59. package/package/components/SupabaseConnect.svelte +2 -2
  60. package/package/components/TableSimple.svelte +12 -1
  61. package/package/components/TableSimple.svelte.d.ts +1 -0
  62. package/package/components/TestConnection.svelte +29 -4
  63. package/package/components/TestConnection.svelte.d.ts +2 -0
  64. package/package/components/TestJobLoader.svelte +19 -2
  65. package/package/components/TestJobLoader.svelte.d.ts +3 -0
  66. package/package/components/UserSettings.svelte +5 -2
  67. package/package/components/UserSettings.svelte.d.ts +4 -0
  68. package/package/components/VariableEditor.svelte +2 -3
  69. package/package/components/WorkspaceGroup.svelte +10 -1
  70. package/package/components/apps/components/display/AppCustomComponent.svelte +3 -0
  71. package/package/components/apps/components/display/AppText.svelte +14 -19
  72. package/package/components/apps/components/display/PlotlyHtml.svelte +5 -1
  73. package/package/components/apps/components/display/PlotlyHtmlV2.svelte +4 -1
  74. package/package/components/apps/components/display/VegaLiteHtml.svelte +3 -3
  75. package/package/components/apps/components/display/dbtable/AppDbExplorer.svelte +18 -2
  76. package/package/components/apps/components/display/dbtable/DbExplorerCount.svelte +8 -5
  77. package/package/components/apps/components/display/dbtable/DbExplorerCount.svelte.d.ts +2 -0
  78. package/package/components/apps/components/display/dbtable/InsertRow.svelte +32 -18
  79. package/package/components/apps/components/display/dbtable/queries/count.js +2 -2
  80. package/package/components/apps/components/display/dbtable/queries/select.js +8 -6
  81. package/package/components/apps/components/display/dbtable/utils.d.ts +10 -5
  82. package/package/components/apps/components/display/dbtable/utils.js +83 -29
  83. package/package/components/apps/components/display/table/AppAggridTable.svelte +1 -1
  84. package/package/components/apps/components/display/table/AppTable.svelte +5 -1
  85. package/package/components/apps/components/helpers/RunnableComponent.svelte +3 -0
  86. package/package/components/apps/components/helpers/eval.d.ts +1 -0
  87. package/package/components/apps/components/inputs/AppFileInput.svelte +8 -1
  88. package/package/components/apps/editor/AppEditorHeader.svelte +1 -1
  89. package/package/components/apps/editor/GridEditorMenu.svelte +11 -1
  90. package/package/components/apps/editor/RunnableJobPanel.svelte +5 -30
  91. package/package/components/apps/editor/appUtils.js +2 -1
  92. package/package/components/apps/editor/component/components.d.ts +78 -78
  93. package/package/components/apps/editor/component/components.js +12 -12
  94. package/package/components/apps/editor/component/default-codes.js +5 -1
  95. package/package/components/apps/editor/componentsPanel/CssEval.svelte +0 -1
  96. package/package/components/apps/editor/componentsPanel/CssProperty.svelte +113 -109
  97. package/package/components/apps/editor/componentsPanel/QuickStyleMenu.svelte +14 -7
  98. package/package/components/apps/editor/componentsPanel/componentControlUtils.js +2 -0
  99. package/package/components/apps/editor/componentsPanel/quickStyleProperties.js +2 -1
  100. package/package/components/apps/editor/inlineScriptsPanel/EmptyInlineScript.svelte +3 -1
  101. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte +6 -0
  102. package/package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte +4 -0
  103. package/package/components/apps/editor/settingsPanel/ComponentInputTypeEditor.svelte +1 -1
  104. package/package/components/apps/editor/settingsPanel/GridPane.svelte +11 -15
  105. package/package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte +1 -1
  106. package/package/components/apps/editor/settingsPanel/StylePanel.svelte +40 -39
  107. package/package/components/apps/editor/settingsPanel/SubTypeEditor.svelte +2 -0
  108. package/package/components/apps/editor/settingsPanel/SubTypeEditor.svelte.d.ts +1 -0
  109. package/package/components/apps/editor/settingsPanel/inputEditor/EvalV2InputEditor.svelte +0 -1
  110. package/package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte +13 -6
  111. package/package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte.d.ts +1 -0
  112. package/package/components/apps/editor/settingsPanel/mainInput/RunnableSelector.svelte +6 -2
  113. package/package/components/apps/editor/settingsPanel/secondaryMenu/SecondaryMenu.svelte +1 -6
  114. package/package/components/apps/svelte-select/lib/Select.svelte.d.ts +2 -2
  115. package/package/components/apps/types.d.ts +1 -0
  116. package/package/components/apps/utils.js +3 -3
  117. package/package/components/build_workers.js +2 -1
  118. package/package/components/common/FileProgressBar.svelte +1 -1
  119. package/package/components/common/clearableInput/ClearableInput.svelte.d.ts +1 -1
  120. package/package/components/common/fileInput/FileInput.svelte +4 -0
  121. package/package/components/common/fileInput/FileInput.svelte.d.ts +2 -0
  122. package/package/components/common/modal/Modal.svelte +2 -0
  123. package/package/components/copilot/MetadataGen.svelte +17 -12
  124. package/package/components/copilot/MetadataGen.svelte.d.ts +1 -1
  125. package/package/components/copilot/ScriptGen.svelte +61 -27
  126. package/package/components/copilot/lib.d.ts +4 -1
  127. package/package/components/copilot/lib.js +46 -31
  128. package/package/components/copilot/prompts/edit.yaml +1 -0
  129. package/package/components/copilot/prompts/editPrompt.js +1 -1
  130. package/package/components/copilot/prompts/fix.yaml +1 -0
  131. package/package/components/copilot/prompts/fixPrompt.js +1 -1
  132. package/package/components/copilot/prompts/gen.yaml +1 -0
  133. package/package/components/copilot/prompts/genPrompt.js +1 -1
  134. package/package/components/details/WebhooksPanel.svelte +10 -3
  135. package/package/components/flows/content/FlowInputs.svelte +35 -36
  136. package/package/components/flows/content/FlowLoop.svelte +0 -1
  137. package/package/components/flows/content/FlowModuleComponent.svelte +18 -1
  138. package/package/components/flows/content/FlowModuleSuspend.svelte +7 -0
  139. package/package/components/flows/content/FlowModuleWrapper.svelte +4 -1
  140. package/package/components/flows/content/FlowSettings.svelte +32 -4
  141. package/package/components/flows/content/FlowWhileLoop.svelte +137 -0
  142. package/package/components/flows/content/FlowWhileLoop.svelte.d.ts +19 -0
  143. package/package/components/flows/content/SuspendDrawer.svelte +4 -4
  144. package/package/components/flows/dfs.js +1 -1
  145. package/package/components/flows/flowExplorer.js +1 -1
  146. package/package/components/flows/flowStateUtils.d.ts +1 -0
  147. package/package/components/flows/flowStateUtils.js +12 -0
  148. package/package/components/flows/map/FlowModuleSchemaMap.svelte +6 -2
  149. package/package/components/flows/map/InsertModuleButton.svelte +12 -0
  150. package/package/components/flows/map/MapItem.svelte +5 -5
  151. package/package/components/flows/map/MapItem.svelte.d.ts +1 -1
  152. package/package/components/flows/types.d.ts +1 -0
  153. package/package/components/flows/utils.d.ts +1 -0
  154. package/package/components/flows/utils.js +3 -0
  155. package/package/components/graph/FlowGraph.svelte +1 -1
  156. package/package/components/graph/model.d.ts +5 -2
  157. package/package/components/graph/svelvet/container/views/GraphView.svelte +2 -0
  158. package/package/components/home/Item.svelte +7 -2
  159. package/package/components/home/TreeView.svelte +4 -2
  160. package/package/components/home/TreeViewRoot.svelte +1 -1
  161. package/package/components/instanceSettings.d.ts +1 -1
  162. package/package/components/instanceSettings.js +12 -4
  163. package/package/components/jobs/JobPreview.svelte +1 -4
  164. package/package/components/propertyPicker/ObjectViewer.svelte +3 -0
  165. package/package/components/propertyPicker/ObjectViewer.svelte.d.ts +1 -0
  166. package/package/components/runs/JobLoader.svelte +3 -2
  167. package/package/components/runs/JobPreview.svelte +13 -7
  168. package/package/components/runs/RunsFilter.svelte.d.ts +1 -1
  169. package/package/components/scriptEditor/LogPanel.svelte +6 -8
  170. package/package/components/settings/ChangeWorkspaceId.svelte +98 -0
  171. package/package/components/settings/ChangeWorkspaceId.svelte.d.ts +16 -0
  172. package/package/components/settings/ChangeWorkspaceName.svelte +71 -0
  173. package/package/components/settings/ChangeWorkspaceName.svelte.d.ts +16 -0
  174. package/package/components/settings/PremiumInfo.svelte +2 -1
  175. package/package/components/sidebar/OperatorMenu.svelte +3 -2
  176. package/package/components/sidebar/UserMenu.svelte +13 -2
  177. package/package/components/sidebar/WorkspaceMenu.svelte +30 -1
  178. package/package/components/sidebar/changelogs.js +51 -1
  179. package/package/components/table/AutoDataTable.svelte +62 -41
  180. package/package/components/tutorials/FlowBuilderTutorialSimpleFlow.svelte +2 -2
  181. package/package/es6.d.ts.txt +1 -12395
  182. package/package/gen/core/OpenAPI.js +1 -1
  183. package/package/gen/index.d.ts +2 -0
  184. package/package/gen/models/CacheTtl.d.ts +4 -0
  185. package/package/gen/models/CacheTtl.js +5 -0
  186. package/package/gen/models/ContextualVariable.d.ts +1 -0
  187. package/package/gen/models/CreateWorkspace.d.ts +1 -1
  188. package/package/gen/models/FlowMetadata.d.ts +1 -0
  189. package/package/gen/models/FlowModule.d.ts +2 -0
  190. package/package/gen/models/FlowModuleValue.d.ts +2 -1
  191. package/package/gen/models/FlowStatus.d.ts +1 -0
  192. package/package/gen/models/FlowValue.d.ts +1 -0
  193. package/package/gen/models/GitRepositorySettings.d.ts +2 -1
  194. package/package/gen/models/GlobalUserInfo.d.ts +1 -0
  195. package/package/gen/models/NewScript.d.ts +1 -0
  196. package/package/gen/models/OpenFlowWPath.d.ts +1 -0
  197. package/package/gen/models/Script.d.ts +1 -0
  198. package/package/gen/models/WhileloopFlow.d.ts +8 -0
  199. package/package/gen/models/WhileloopFlow.js +5 -0
  200. package/package/gen/models/WorkspaceGitSyncSettings.d.ts +1 -1
  201. package/package/gen/services/JobService.d.ts +74 -8
  202. package/package/gen/services/JobService.js +55 -8
  203. package/package/gen/services/ScheduleService.d.ts +5 -1
  204. package/package/gen/services/ScheduleService.js +2 -1
  205. package/package/gen/services/SettingService.d.ts +11 -0
  206. package/package/gen/services/SettingService.js +13 -0
  207. package/package/gen/services/UserService.d.ts +29 -1
  208. package/package/gen/services/UserService.js +30 -0
  209. package/package/gen/services/WorkspaceService.d.ts +57 -2
  210. package/package/gen/services/WorkspaceService.js +76 -0
  211. package/package/hub.d.ts +3 -3
  212. package/package/hub.js +6 -6
  213. package/package/infer.d.ts +1 -20
  214. package/package/infer.js +1 -95
  215. package/package/inferArgSig.d.ts +20 -0
  216. package/package/inferArgSig.js +95 -0
  217. package/package/script_helpers.d.ts +3 -3
  218. package/package/script_helpers.js +47 -7
  219. package/package/scripts.d.ts +2 -2
  220. package/package/scripts.js +4 -4
  221. package/package/stores.d.ts +4 -0
  222. package/package/stores.js +2 -0
  223. package/package/utils.js +1 -0
  224. package/package.json +3 -2
@@ -15,6 +15,7 @@ import FileDownload from './common/fileDownload/FileDownload.svelte';
15
15
  import ParqetTableRenderer from './ParqetTableRenderer.svelte';
16
16
  import ToggleButtonGroup from './common/toggleButton-v2/ToggleButtonGroup.svelte';
17
17
  import ToggleButton from './common/toggleButton-v2/ToggleButton.svelte';
18
+ import MapResult from './MapResult.svelte';
18
19
  export let result;
19
20
  export let requireHtmlApproval = false;
20
21
  export let filename = undefined;
@@ -22,6 +23,7 @@ export let disableExpand = false;
22
23
  export let jobId = undefined;
23
24
  export let workspaceId = undefined;
24
25
  export let hideAsJson = false;
26
+ export let noControls = false;
25
27
  let resultKind;
26
28
  $: resultKind = inferResultKind(result);
27
29
  export let forceJson = false;
@@ -55,19 +57,25 @@ function inferResultKind(result) {
55
57
  return 'json';
56
58
  }
57
59
  if (result !== undefined) {
60
+ if (typeof result === 'string') {
61
+ length = 0;
62
+ largeObject = false;
63
+ is_render_all = false;
64
+ return 'plain';
65
+ }
58
66
  try {
59
67
  let keys = result && typeof result == 'object' ? Object.keys(result) : [];
60
68
  is_render_all =
61
69
  keys.length == 1 && keys.includes('render_all') && Array.isArray(result['render_all']);
62
70
  // Check if the result is an image
63
- if (['png', 'svg', 'jpeg'].includes(keys[0]) && keys.length == 1) {
71
+ if (['png', 'svg', 'jpeg', 'html'].includes(keys[0]) && keys.length == 1) {
64
72
  // Check if the image is too large (10mb)
65
73
  largeObject = roughSizeOfObject(result) > 10000000;
66
74
  return keys[0];
67
75
  }
68
76
  let length = roughSizeOfObject(result);
69
77
  // Otherwise, check if the result is too large (10kb) for json
70
- largeObject = length > 10000;
78
+ largeObject = length > 50000;
71
79
  if (largeObject) {
72
80
  return 'json';
73
81
  }
@@ -88,6 +96,9 @@ function inferResultKind(result) {
88
96
  else if (keys.length == 1 && keys[0] == 'html') {
89
97
  return 'html';
90
98
  }
99
+ else if (keys.length == 1 && keys[0] == 'map') {
100
+ return 'map';
101
+ }
91
102
  else if (keys.length == 1 && keys[0] == 'file') {
92
103
  return 'file';
93
104
  }
@@ -150,7 +161,7 @@ function contentOrRootString(obj) {
150
161
  function isArrayWithObjects(json) {
151
162
  return (Array.isArray(json) &&
152
163
  json.length > 0 &&
153
- json.every((item) => item && typeof item === 'object' && Object.keys(item).length > 0));
164
+ json.every((item) => item && typeof item === 'object' && Object.keys(item).length > 0 && !Array.isArray(item)));
154
165
  }
155
166
  $: isTableDisplay = isArrayWithObjects(result);
156
167
  let richRender = !forceJson;
@@ -175,12 +186,15 @@ let globalForceJson = false;
175
186
  </script>
176
187
 
177
188
  {#if is_render_all}
178
- <div class="flex flex-col w-full">
179
- <div class="mb-2 text-tertiary text-sm">
180
- as JSON&nbsp;<input class="windmillapp" type="checkbox" bind:checked={globalForceJson} />
181
- </div>
189
+ <div class="flex flex-col w-full gap-6">
190
+ {#if !noControls}
191
+ <div class="mb-2 text-tertiary text-sm">
192
+ as JSON&nbsp;<input class="windmillapp" type="checkbox" bind:checked={globalForceJson} />
193
+ </div>
194
+ {/if}
182
195
  {#each result['render_all'] as res}
183
196
  <svelte:self
197
+ {noControls}
184
198
  result={res}
185
199
  {requireHtmlApproval}
186
200
  {filename}
@@ -193,11 +207,15 @@ let globalForceJson = false;
193
207
  {/each}</div
194
208
  >
195
209
  {:else}
196
- <div class="inline-highlight relative grow min-h-[200px]">
210
+ <div
211
+ class="inline-highlight relative grow {['plain', 'markdown'].includes(resultKind ?? '')
212
+ ? ''
213
+ : 'min-h-[200px]'}"
214
+ >
197
215
  {#if result != undefined && length != undefined && largeObject != undefined}
198
216
  <div class="flex justify-between items-center w-full pb-1">
199
217
  <div class="text-tertiary text-sm flex items-center">
200
- {#if (resultKind && !['json', 's3object', 's3object-list', 'table-col', 'table-row'].includes(resultKind) && !hideAsJson) || isTableDisplay}
218
+ {#if (resultKind && typeof result == 'object' && !['json', 's3object', 's3object-list', 'table-col', 'table-row'].includes(resultKind) && !hideAsJson) || isTableDisplay}
201
219
  <ToggleButtonGroup
202
220
  class="h-6"
203
221
  selected={isTableDisplay
@@ -226,16 +244,14 @@ let globalForceJson = false;
226
244
  </div>
227
245
  <div class="text-tertiary text-xs flex gap-2 z-10 items-center">
228
246
  <slot name="copilot-fix" />
229
- {#if !disableExpand}
247
+ {#if !disableExpand && !noControls}
230
248
  <button on:click={() => copyToClipboard(toJsonStr(result))}
231
249
  ><ClipboardCopy size={16} /></button
232
250
  >
233
251
  <button on:click={jsonViewer.openDrawer}><Expand size={16} /></button>
234
252
  {/if}
235
253
  </div>
236
- </div>
237
-
238
- {#if !forceJson && resultKind == 'table-col'}
254
+ </div>{#if !forceJson && resultKind == 'table-col'}
239
255
  {@const data = 'table-col' in result ? result['table-col'] : result}
240
256
  <AutoDataTable objects={transform(data)} />
241
257
  {:else if !forceJson && resultKind == 'table-row'}
@@ -281,6 +297,15 @@ let globalForceJson = false;
281
297
  </div>
282
298
  {/if}
283
299
  </div>
300
+ {:else if !forceJson && resultKind == 'map'}
301
+ <div class="h-full">
302
+ <MapResult
303
+ lat={result.map.lat}
304
+ lon={result.map.lon}
305
+ zoom={result.map.zoom}
306
+ markers={result.map.markers}
307
+ />
308
+ </div>
284
309
  {:else if !forceJson && resultKind == 'png'}
285
310
  <div class="h-full">
286
311
  <img
@@ -310,9 +335,19 @@ let globalForceJson = false;
310
335
  src="data:image/gif;base64,{contentOrRootString(result.gif)}"
311
336
  />
312
337
  </div>
313
- {:else if !forceJson && resultKind == 'plain'}
314
- <div class="h-full text-2xs">
315
- <pre>{result?.['result']}</pre>
338
+ {:else if !forceJson && resultKind == 'plain'}<div class="h-full text-2xs"
339
+ ><pre>{typeof result == 'string' ? result : result?.['result']}</pre>{#if !noControls}
340
+ <div class="flex">
341
+ <Button
342
+ on:click={() =>
343
+ copyToClipboard(typeof result == 'string' ? result : result?.['result'])}
344
+ color="light"
345
+ size="xs"
346
+ >
347
+ <div class="flex gap-2 items-center">Copy <ClipboardCopy size={12} /> </div>
348
+ </Button>
349
+ </div>
350
+ {/if}
316
351
  </div>
317
352
  {:else if !forceJson && resultKind == 'file'}
318
353
  <div>
@@ -425,13 +460,13 @@ let globalForceJson = false;
425
460
  </div>
426
461
  </div>
427
462
  {:else if !forceJson && resultKind == 'markdown'}
428
- <div class="prose dark:prose-invert">
463
+ <div class="prose-xs dark:prose-invert">
429
464
  <Markdown md={result?.md ?? result?.markdown} />
430
465
  </div>
431
466
  {:else if !forceJson && isTableDisplay && richRender}
432
467
  <AutoDataTable objects={result} />
433
468
  {:else if largeObject}
434
- {#if result && typeof result == 'object' && 'filename' in result && 'file' in result}
469
+ {#if result && typeof result == 'object' && 'file' in result}
435
470
  <div
436
471
  ><a
437
472
  download={result.filename ?? result.file?.filename ?? 'windmill.file'}
@@ -451,31 +486,26 @@ let globalForceJson = false;
451
486
  </a>
452
487
  </div>
453
488
 
454
- <div class="my-4">
455
- <Alert size="xs" title="Large file detected" type="warning">
456
- We recommend using persistent storage for large data files.
457
- <a
458
- href="https://www.windmill.dev/docs/core_concepts/persistent_storage#large-data-files-s3-r2-minio-azure-blob"
459
- target="_blank"
460
- rel="noreferrer"
461
- class="hover:underline"
462
- >
463
- See docs for setting up an object storage service integration using s3 or any other
464
- s3 compatible services
465
- </a>
466
- </Alert>
489
+ <div class="mt-1 mb-2">
490
+ <Alert
491
+ size="xs"
492
+ title="Large result detected"
493
+ type="warning"
494
+ tooltip="We recommend using persistent object storage for large result. See docs for setting up an object storage service integration using s3 or any other s3 compatible services."
495
+ documentationLink="https://www.windmill.dev/docs/core_concepts/persistent_storage#large-data-files-s3-r2-minio-azure-blob"
496
+ />
467
497
  </div>
468
- {/if}
469
- {#if result && result != 'WINDMILL_TOO_BIG'}
470
- <ObjectViewer json={result} />
498
+ {#if result && result != 'WINDMILL_TOO_BIG'}
499
+ <ObjectViewer json={result} />
500
+ {/if}
471
501
  {/if}
472
502
  {:else if typeof result == 'string' && result.length > 0}
473
- <pre class="text-sm">{result}</pre>
474
- <div class="flex">
475
- <Button on:click={() => copyToClipboard(result)} color="light" size="xs">
476
- <div class="flex gap-2 items-center">Copy <ClipboardCopy size={12} /> </div>
477
- </Button>
478
- </div>
503
+ <pre class="text-sm">{result}</pre>{#if !noControls}<div class="flex">
504
+ <Button on:click={() => copyToClipboard(result)} color="light" size="xs">
505
+ <div class="flex gap-2 items-center">Copy <ClipboardCopy size={12} /> </div>
506
+ </Button>
507
+ </div>
508
+ {/if}
479
509
  {:else}
480
510
  <Highlight
481
511
  class={forceJson ? '' : 'h-full w-full'}
@@ -483,12 +513,23 @@ let globalForceJson = false;
483
513
  code={toJsonStr(result).replace(/\\n/g, '\n')}
484
514
  />
485
515
  {/if}
516
+ {:else if typeof result == 'string' && resultKind == 'plain'}
517
+ <div class="h-full text-xs">
518
+ <pre>{result}</pre>
519
+ {#if !noControls}
520
+ <div class="flex">
521
+ <Button on:click={() => copyToClipboard(result)} color="light" size="xs">
522
+ <div class="flex gap-2 items-center">Copy <ClipboardCopy size={12} /> </div>
523
+ </Button>
524
+ </div>
525
+ {/if}
526
+ </div>
486
527
  {:else}
487
528
  <div class="text-tertiary text-sm">No result: {toJsonStr(result)}</div>
488
529
  {/if}
489
530
  </div>
490
531
 
491
- {#if !disableExpand}
532
+ {#if !disableExpand && !noControls}
492
533
  <Portal>
493
534
  <Drawer bind:this={jsonViewer} size="900px">
494
535
  <DrawerContent title="Expanded Result" on:close={jsonViewer.closeDrawer}>
@@ -516,6 +557,7 @@ let globalForceJson = false;
516
557
  </Button>
517
558
  </svelte:fragment>
518
559
  <svelte:self
560
+ {noControls}
519
561
  {result}
520
562
  {requireHtmlApproval}
521
563
  {filename}
@@ -8,6 +8,7 @@ declare const __propDef: {
8
8
  jobId?: string | undefined;
9
9
  workspaceId?: string | undefined;
10
10
  hideAsJson?: boolean | undefined;
11
+ noControls?: boolean | undefined;
11
12
  forceJson?: boolean | undefined;
12
13
  };
13
14
  events: {
@@ -1,18 +1,9 @@
1
1
  <script>import { msToSec } from '../utils';
2
2
  import { Badge } from './common';
3
- import Tooltip from './Tooltip.svelte';
4
3
  import { Hourglass } from 'lucide-svelte';
5
4
  export let duration_ms;
6
- export let flow;
7
5
  </script>
8
6
 
9
7
  <Badge large icon={{ icon: Hourglass, position: 'left' }}>
10
- Ran in {msToSec(duration_ms)}s {#if flow}(sum){/if}
11
- {#if flow}
12
- <Tooltip>
13
- Cumulative time of the execution of each steps. Suspend/sleep/transition times are not
14
- accounted for, and each step's duration in a parallel branch would be added. Hence the time
15
- here can differ from the time it took for the flow to have a result from start.
16
- </Tooltip>
17
- {/if}
8
+ Ran in {msToSec(duration_ms)}s
18
9
  </Badge>
@@ -2,7 +2,6 @@ import { SvelteComponent } from "svelte";
2
2
  declare const __propDef: {
3
3
  props: {
4
4
  duration_ms: number;
5
- flow: boolean;
6
5
  };
7
6
  events: {
8
7
  [evt: string]: CustomEvent<any>;
@@ -612,21 +612,21 @@ export async function reloadWebsocket() {
612
612
  ];
613
613
  });
614
614
  }
615
- else if (lang === 'javascript') {
615
+ else if (lang === 'typescript') {
616
616
  const stdLib = { content: libStdContent, filePath: 'es6.d.ts' };
617
617
  if (scriptLang == 'bun') {
618
- languages.typescript.javascriptDefaults.setExtraLibs([stdLib]);
618
+ languages.typescript.typescriptDefaults.setExtraLibs([stdLib]);
619
619
  }
620
620
  else {
621
621
  const denoFetch = { content: denoFetchContent, filePath: 'deno_fetch.d.ts' };
622
- languages.typescript.javascriptDefaults.setExtraLibs([stdLib, denoFetch]);
622
+ languages.typescript.typescriptDefaults.setExtraLibs([stdLib, denoFetch]);
623
623
  }
624
624
  if (scriptLang == 'bun' && ata == undefined) {
625
625
  const addLibraryToRuntime = async (code, _path) => {
626
626
  const path = 'file://' + _path;
627
627
  let uri = mUri.parse(path);
628
628
  console.log('adding library to runtime', path);
629
- languages.typescript.javascriptDefaults.addExtraLib(code, path);
629
+ languages.typescript.typescriptDefaults.addExtraLib(code, path);
630
630
  try {
631
631
  await vscode.workspace.fs.writeFile(uri, new TextEncoder().encode(code));
632
632
  }
@@ -848,16 +848,24 @@ async function loadMonaco() {
848
848
  // console.log('bef ready')
849
849
  // console.log('af ready')
850
850
  initialized = true;
851
- languages.typescript.typescriptDefaults.setModeConfiguration({
852
- completionItems: false,
853
- definitions: false,
854
- hovers: false
855
- });
856
851
  languages.typescript.typescriptDefaults.setCompilerOptions({
857
852
  target: languages.typescript.ScriptTarget.Latest,
858
853
  allowNonTsExtensions: true,
859
854
  noSemanticValidation: false,
860
855
  noSyntaxValidation: false,
856
+ completionItems: true,
857
+ hovers: true,
858
+ documentSymbols: true,
859
+ definitions: true,
860
+ references: true,
861
+ documentHighlights: true,
862
+ rename: true,
863
+ diagnostics: true,
864
+ documentRangeFormattingEdits: true,
865
+ signatureHelp: true,
866
+ onTypeFormattingEdits: true,
867
+ codeActions: true,
868
+ inlayHints: true,
861
869
  checkJs: true,
862
870
  allowJs: true,
863
871
  noUnusedLocals: true,
@@ -880,13 +888,35 @@ async function loadMonaco() {
880
888
  codeActions: true,
881
889
  inlayHints: true
882
890
  });
891
+ languages.typescript.typescriptDefaults.setModeConfiguration({
892
+ completionItems: true,
893
+ hovers: true,
894
+ documentSymbols: true,
895
+ definitions: true,
896
+ references: true,
897
+ documentHighlights: true,
898
+ rename: true,
899
+ diagnostics: true,
900
+ documentRangeFormattingEdits: true,
901
+ signatureHelp: true,
902
+ onTypeFormattingEdits: true,
903
+ codeActions: true,
904
+ inlayHints: true
905
+ });
883
906
  languages.typescript.javascriptDefaults.setEagerModelSync(true);
907
+ languages.typescript.typescriptDefaults.setEagerModelSync(true);
884
908
  languages.typescript.javascriptDefaults.setDiagnosticsOptions({
885
909
  noSemanticValidation: false,
886
910
  noSyntaxValidation: false,
887
911
  noSuggestionDiagnostics: false,
888
912
  diagnosticCodesToIgnore: [1108]
889
913
  });
914
+ languages.typescript.typescriptDefaults.setDiagnosticsOptions({
915
+ noSemanticValidation: false,
916
+ noSyntaxValidation: false,
917
+ noSuggestionDiagnostics: false,
918
+ diagnosticCodesToIgnore: [1108]
919
+ });
890
920
  languages.typescript.javascriptDefaults.setCompilerOptions({
891
921
  target: languages.typescript.ScriptTarget.Latest,
892
922
  allowNonTsExtensions: true,
@@ -898,7 +928,7 @@ async function loadMonaco() {
898
928
  noUnusedParameters: true,
899
929
  noUnusedLocals: true,
900
930
  strict: true,
901
- noLib: false,
931
+ noLib: true,
902
932
  moduleResolution: languages.typescript.ModuleResolutionKind.NodeJs
903
933
  });
904
934
  try {
@@ -6,6 +6,7 @@ import { enterpriseLicense, workspaceStore } from '../stores';
6
6
  import { emptySchema, emptyString, sendUserToast, tryEvery } from '../utils';
7
7
  import { FlowService, JobService, Script, ScriptService, WorkspaceService } from '../gen';
8
8
  import { inferArgs } from '../infer';
9
+ import { hubBaseUrlStore } from '../stores';
9
10
  import { CheckCircle2, Loader2, RotateCw, XCircle } from 'lucide-svelte';
10
11
  const slackRecoveryHandler = 'hub/2430/slack/schedule-recovery-handler-slack';
11
12
  const slackHandlerScriptPath = 'hub/6512/workspace-or-schedule-error-handler-slack';
@@ -138,7 +139,8 @@ $: handlerPath &&
138
139
  'started_at',
139
140
  'success_times',
140
141
  'success_result',
141
- 'success_started_at'
142
+ 'success_started_at',
143
+ 'email'
142
144
  ]).then((schema) => (customHandlerSchema = schema));
143
145
  $: handlerPath &&
144
146
  isSlackHandler(handlerPath) &&
@@ -155,6 +157,7 @@ $: handlerPath &&
155
157
  'success_times',
156
158
  'success_result',
157
159
  'success_started_at',
160
+ 'email',
158
161
  'slack'
159
162
  ]).then((schema) => (slackHandlerSchema = schema));
160
163
  </script>
@@ -195,7 +198,7 @@ $: handlerPath &&
195
198
  <div class="text-xs">
196
199
  Example of error handler scripts can be found on <a
197
200
  target="_blank"
198
- href="https://hub.windmill.dev/failures"
201
+ href="{$hubBaseUrlStore}/failures"
199
202
  >
200
203
  Windmill Hub</a
201
204
  >
@@ -33,6 +33,7 @@ import UnsavedConfirmationModal from './common/confirmationModal/UnsavedConfirma
33
33
  import { cloneDeep } from 'lodash';
34
34
  import { goto } from '$app/navigation';
35
35
  export let initialPath = '';
36
+ export let pathStoreInit = undefined;
36
37
  export let newFlow;
37
38
  export let selectedId;
38
39
  export let initialArgs = {};
@@ -111,7 +112,8 @@ async function saveDraft(forceSave = false) {
111
112
  schema: flow.schema,
112
113
  tag: flow.tag,
113
114
  draft_only: true,
114
- ws_error_handler_muted: flow.ws_error_handler_muted
115
+ ws_error_handler_muted: flow.ws_error_handler_muted,
116
+ visible_to_runner_only: flow.visible_to_runner_only
115
117
  }
116
118
  });
117
119
  }
@@ -184,7 +186,8 @@ async function saveFlow() {
184
186
  schema: flow.schema,
185
187
  ws_error_handler_muted: flow.ws_error_handler_muted,
186
188
  tag: flow.tag,
187
- dedicated_worker: flow.dedicated_worker
189
+ dedicated_worker: flow.dedicated_worker,
190
+ visible_to_runner_only: flow.visible_to_runner_only
188
191
  }
189
192
  });
190
193
  if (enabled) {
@@ -244,7 +247,8 @@ async function saveFlow() {
244
247
  schema: flow.schema,
245
248
  tag: flow.tag,
246
249
  dedicated_worker: flow.dedicated_worker,
247
- ws_error_handler_muted: flow.ws_error_handler_muted
250
+ ws_error_handler_muted: flow.ws_error_handler_muted,
251
+ visible_to_runner_only: flow.visible_to_runner_only
248
252
  }
249
253
  });
250
254
  }
@@ -296,8 +300,8 @@ const previewArgsStore = writable(initialArgs);
296
300
  const scriptEditorDrawer = writable(undefined);
297
301
  const moving = writable(undefined);
298
302
  const history = initHistory($flowStore);
299
- const pathStore = writable(initialPath);
300
- $: $pathStore = initialPath;
303
+ const pathStore = writable(pathStoreInit ?? initialPath);
304
+ $: initialPath && ($pathStore = initialPath);
301
305
  const testStepStore = writable({});
302
306
  function select(selectedId) {
303
307
  selectedIdStore.set(selectedId);
@@ -6,6 +6,7 @@ import type DiffDrawer from './DiffDrawer.svelte';
6
6
  declare const __propDef: {
7
7
  props: {
8
8
  initialPath?: string | undefined;
9
+ pathStoreInit?: string | undefined;
9
10
  newFlow: boolean;
10
11
  selectedId: string | undefined;
11
12
  initialArgs?: Record<string, any> | undefined;
@@ -9,6 +9,7 @@ import FlowPathViewer from './flows/content/FlowPathViewer.svelte';
9
9
  import SchemaViewer from './SchemaViewer.svelte';
10
10
  import { scriptPathToHref } from '../scripts';
11
11
  import { cleanExpr } from '../utils';
12
+ import { hubBaseUrlStore } from '../stores';
12
13
  import { twMerge } from 'tailwind-merge';
13
14
  import FlowModuleScript from './flows/content/FlowModuleScript.svelte';
14
15
  export let flow;
@@ -24,7 +25,7 @@ let codeViewer;
24
25
  <a
25
26
  rel="noreferrer"
26
27
  target="_blank"
27
- href={scriptPathToHref(stepDetail?.value?.path ?? '')}
28
+ href={scriptPathToHref(stepDetail?.value?.path ?? '', $hubBaseUrlStore)}
28
29
  class=""
29
30
  >
30
31
  <IconedPath path={stepDetail?.value?.path ?? ''} />
@@ -42,7 +43,7 @@ let codeViewer;
42
43
  class="w-full h-full text-sm"
43
44
  title="embedded script from hub"
44
45
  frameborder="0"
45
- src="https://hub.windmill.dev/embed/script/{stepDetail.value?.path?.substring(4)}"
46
+ src="{$hubBaseUrlStore}/embed/script/{stepDetail.value?.path?.substring(4)}"
46
47
  />
47
48
  </div>
48
49
  {/if}
@@ -106,7 +107,7 @@ let codeViewer;
106
107
  <a
107
108
  rel="noreferrer"
108
109
  target="_blank"
109
- href={scriptPathToHref(stepDetail?.value?.path ?? '')}
110
+ href={scriptPathToHref(stepDetail?.value?.path ?? '', $hubBaseUrlStore)}
110
111
  class=""
111
112
  >
112
113
  <IconedPath path={stepDetail?.value?.path ?? ''} />
@@ -156,7 +157,7 @@ let codeViewer;
156
157
  class="w-full grow text-sm"
157
158
  title="embedded script from hub"
158
159
  frameborder="0"
159
- src="https://hub.windmill.dev/embed/script/{stepDetail.value?.path?.substring(4)}"
160
+ src="{$hubBaseUrlStore}/embed/script/{stepDetail.value?.path?.substring(4)}"
160
161
  />
161
162
  </div>
162
163
  {:else}
@@ -1,6 +1,8 @@
1
1
  <script>import { Loader2 } from 'lucide-svelte';
2
2
  import DisplayResult from './DisplayResult.svelte';
3
3
  import LogViewer from './LogViewer.svelte';
4
+ import { JobService } from '../gen';
5
+ import { workspaceStore } from '../stores';
4
6
  export let result;
5
7
  export let logs;
6
8
  export let col = false;
@@ -9,11 +11,44 @@ export let loading;
9
11
  export let filename = undefined;
10
12
  export let jobId = undefined;
11
13
  export let workspaceId = undefined;
14
+ export let refreshLog = false;
15
+ let lastJobId = undefined;
16
+ $: jobId != lastJobId && diffJobId();
17
+ async function diffJobId() {
18
+ if (jobId != lastJobId) {
19
+ lastJobId = jobId;
20
+ logs = undefined;
21
+ logOffset = 0;
22
+ getLogs();
23
+ }
24
+ }
25
+ let logOffset = 0;
26
+ async function getLogs() {
27
+ if (jobId) {
28
+ const getUpdate = await JobService.getJobUpdates({
29
+ workspace: workspaceId ?? $workspaceStore,
30
+ id: jobId,
31
+ running: loading ?? false,
32
+ logOffset: logOffset == 0 ? (logs?.length ? logs?.length + 1 : 0) : logOffset
33
+ });
34
+ logs = (logs ?? '').concat(getUpdate.new_logs ?? '');
35
+ logOffset = getUpdate.log_offset ?? 0;
36
+ }
37
+ if (refreshLog) {
38
+ setTimeout(() => {
39
+ if (refreshLog) {
40
+ getLogs();
41
+ }
42
+ }, 1000);
43
+ }
44
+ }
12
45
  </script>
13
46
 
14
47
  <div
15
48
  class:border={!noBorder}
16
- class="grid {!col ? 'grid-cols-2' : 'grid-rows-2'} shadow border-gray-400 h-full max-h-screen"
49
+ class="grid {!col
50
+ ? 'grid-cols-2'
51
+ : 'grid-rows-2'} shadow border border-tertiary-inverse h-full max-h-[70vh]"
17
52
  >
18
53
  <div class="bg-surface {col ? '' : 'max-h-80'} h-full p-1 overflow-auto relative">
19
54
  <span class="text-tertiary">Result</span>
@@ -2,13 +2,14 @@ import { SvelteComponent } from "svelte";
2
2
  declare const __propDef: {
3
3
  props: {
4
4
  result: any;
5
- logs: string;
5
+ logs: string | undefined;
6
6
  col?: boolean | undefined;
7
7
  noBorder?: boolean | undefined;
8
8
  loading: boolean;
9
9
  filename?: string | undefined;
10
10
  jobId?: string | undefined;
11
11
  workspaceId?: string | undefined;
12
+ refreshLog?: boolean | undefined;
12
13
  };
13
14
  events: {
14
15
  [evt: string]: CustomEvent<any>;
@@ -12,7 +12,8 @@ export let jobId = undefined;
12
12
  export let job = undefined;
13
13
  export let modules;
14
14
  export let previewArgs = {};
15
- const schema = {
15
+ export let whileLoop = false;
16
+ export const forloopSchema = {
16
17
  $schema: 'https://json-schema.org/draft/2020-12/schema',
17
18
  properties: {
18
19
  iter: {
@@ -30,6 +31,21 @@ const schema = {
30
31
  required: [],
31
32
  type: 'object'
32
33
  };
34
+ export const whileLoopSchema = {
35
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
36
+ properties: {
37
+ iter: {
38
+ type: 'object',
39
+ properties: {
40
+ index: {
41
+ type: 'number'
42
+ }
43
+ }
44
+ }
45
+ },
46
+ required: [],
47
+ type: 'object'
48
+ };
33
49
  let selectedJobStep = undefined;
34
50
  let isRunning = false;
35
51
  let jobProgressReset;
@@ -124,7 +140,7 @@ $: if (job?.type === 'CompletedJob') {
124
140
  noVariablePicker
125
141
  compact
126
142
  class="py-4 max-w-3xl"
127
- {schema}
143
+ schema={whileLoop ? whileLoopSchema : forloopSchema}
128
144
  bind:args={previewArgs}
129
145
  />
130
146
  </div>
@@ -1,5 +1,6 @@
1
1
  import { SvelteComponent } from "svelte";
2
2
  import { Job, type FlowModule, type RestartedFrom } from '../gen';
3
+ import type { Schema } from '../common';
3
4
  declare const __propDef: {
4
5
  props: {
5
6
  open: boolean;
@@ -7,6 +8,9 @@ declare const __propDef: {
7
8
  job?: Job | undefined;
8
9
  modules: FlowModule[];
9
10
  previewArgs?: Record<string, any> | undefined;
11
+ whileLoop?: boolean | undefined;
12
+ forloopSchema?: Schema | undefined;
13
+ whileLoopSchema?: Schema | undefined;
10
14
  test?: (() => void) | undefined;
11
15
  runPreview?: ((args: Record<string, any>, restartedFrom: RestartedFrom | undefined) => Promise<void>) | undefined;
12
16
  };
@@ -21,6 +25,8 @@ export type FlowLoopIterationPreviewProps = typeof __propDef.props;
21
25
  export type FlowLoopIterationPreviewEvents = typeof __propDef.events;
22
26
  export type FlowLoopIterationPreviewSlots = typeof __propDef.slots;
23
27
  export default class FlowLoopIterationPreview extends SvelteComponent<FlowLoopIterationPreviewProps, FlowLoopIterationPreviewEvents, FlowLoopIterationPreviewSlots> {
28
+ get forloopSchema(): Schema;
29
+ get whileLoopSchema(): Schema;
24
30
  get test(): () => void;
25
31
  get runPreview(): (args: Record<string, any>, restartedFrom: RestartedFrom | undefined) => Promise<void>;
26
32
  }