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
@@ -5,15 +5,16 @@ import { Alert, Button, Drawer, Skeleton } from './common';
5
5
  import Path from './Path.svelte';
6
6
  import Required from './Required.svelte';
7
7
  import { userStore, workspaceStore } from '../stores';
8
- import autosize from 'svelte-autosize';
9
8
  import DrawerContent from './common/drawer/DrawerContent.svelte';
10
9
  import SchemaForm from './SchemaForm.svelte';
11
10
  import SimpleEditor from './SimpleEditor.svelte';
12
11
  import Toggle from './Toggle.svelte';
13
12
  import { sendUserToast } from '../toast';
14
13
  import TestConnection from './TestConnection.svelte';
15
- import { Save } from 'lucide-svelte';
14
+ import { Pen, Save } from 'lucide-svelte';
16
15
  import Markdown from 'svelte-exmarkdown';
16
+ import autosize from '../autosize';
17
+ import GfmMarkdown from './GfmMarkdown.svelte';
17
18
  let path = '';
18
19
  let initialPath = '';
19
20
  let resourceToEdit;
@@ -27,6 +28,7 @@ let loadingSchema = false;
27
28
  let linkedVars = [];
28
29
  let drawer;
29
30
  let resourceTypeInfo = undefined;
31
+ let renderDescription = true;
30
32
  let rawCode = undefined;
31
33
  const dispatch = createEventDispatcher();
32
34
  export async function initEdit(p) {
@@ -48,6 +50,7 @@ export async function initEdit(p) {
48
50
  linkedVars = Object.entries(args)
49
51
  .filter(([_, v]) => typeof v == 'string' && v == `$var:${initialPath}`)
50
52
  .map(([k, _]) => k);
53
+ renderDescription = false;
51
54
  }
52
55
  async function editResource() {
53
56
  if (resourceToEdit) {
@@ -141,11 +144,38 @@ function switchTab(asJson) {
141
144
  />
142
145
  </div>
143
146
  {#if !emptyString(resourceTypeInfo?.description)}
144
- <h3 class="mt-4 mb-2">{resourceTypeInfo?.name} description</h3>
147
+ <h4 class="mt-4 mb-2">{resourceTypeInfo?.name} description</h4>
145
148
  <div class="text-sm">
146
149
  <Markdown md={urlize(resourceTypeInfo?.description ?? '', 'md')} />
147
150
  </div>
148
151
  {/if}
152
+ <h4 class="mt-4 inline-flex items-center gap-4"
153
+ >Resource description <Required required={false} />
154
+ {#if can_write}
155
+ <div class="flex gap-1 items-center">
156
+ <Toggle size="xs" bind:checked={renderDescription} />
157
+ <Pen size={14} />
158
+ </div>
159
+ {/if}</h4
160
+ >
161
+
162
+ {#if can_write && renderDescription}
163
+ <div>
164
+ <div class="flex flex-row-reverse text-2xs text-tertiary -mt-1">GH Markdown</div>
165
+ <textarea
166
+ disabled={!can_write}
167
+ use:autosize
168
+ bind:value={description}
169
+ placeholder={DESCRIPTION_PLACEHOLDER}
170
+ />
171
+ </div>
172
+ {:else if description == undefined || description == ''}
173
+ <div class="text-sm text-tertiary">No description provided</div>
174
+ {:else}
175
+ <div class="mt-2" />
176
+
177
+ <GfmMarkdown md={description} />
178
+ {/if}
149
179
  <div class="flex w-full justify-between max-w-lg items-center mt-4">
150
180
  <Toggle
151
181
  on:change={(e) => switchTab(e.detail)}
@@ -191,14 +221,6 @@ function switchTab(asJson) {
191
221
  </div>
192
222
  {/if}
193
223
  </div>
194
- <h3 class="mt-4">Description <Required required={false} /> </h3>
195
- <textarea
196
- type="text"
197
- disabled={!can_write}
198
- use:autosize
199
- bind:value={description}
200
- placeholder={DESCRIPTION_PLACEHOLDER}
201
- />
202
224
  </div>
203
225
  </div>
204
226
  <svelte:fragment slot="actions">
@@ -88,7 +88,6 @@ function maxJobTime(jobs) {
88
88
  return max;
89
89
  }
90
90
  function computeMinMaxTime(jobs, minTimeSet, maxTimeSet) {
91
- console.log(minTimeSet, maxTimeSet);
92
91
  let minTimeSetDate = minTimeSet ? new Date(minTimeSet) : undefined;
93
92
  let maxTimeSetDate = maxTimeSet ? new Date(maxTimeSet) : undefined;
94
93
  if (minTimeSetDate && maxTimeSetDate) {
@@ -27,7 +27,7 @@ declare const __propDef: {
27
27
  isFlow: boolean;
28
28
  viewKeybinding?: boolean | undefined;
29
29
  scheduledForStr: string | undefined;
30
- invisible_to_owner: false | undefined;
30
+ invisible_to_owner: boolean | undefined;
31
31
  overrideTag: string | undefined;
32
32
  args?: Record<string, any> | undefined;
33
33
  setArgs?: ((nargs: Record<string, any>) => Promise<void>) | undefined;
@@ -14,7 +14,7 @@ declare const __propDef: {
14
14
  extra_perms?: Record<string, boolean>;
15
15
  } | undefined;
16
16
  scheduledForStr: string | undefined;
17
- invisible_to_owner: false | undefined;
17
+ invisible_to_owner: boolean | undefined;
18
18
  overrideTag: string | undefined;
19
19
  };
20
20
  events: {
@@ -281,7 +281,7 @@ function selectArgs(selected_args) {
281
281
  <div
282
282
  class="whitespace-nowrap col-span-3 !text-tertiary !text-2xs overflow-hidden text-ellipsis flex-shrink text-center"
283
283
  >
284
- <TimeAgo date={i.created_at ?? ''} />
284
+ <TimeAgo date={i.started_at ?? ''} />
285
285
  </div>
286
286
  <div class="col-span-2">
287
287
  <a
@@ -182,7 +182,8 @@ async function editScript(stay) {
182
182
  restart_unless_cancelled: script.restart_unless_cancelled,
183
183
  delete_after_use: script.delete_after_use,
184
184
  timeout: script.timeout,
185
- concurrency_key: emptyString(script.concurrency_key) ? undefined : script.concurrency_key
185
+ concurrency_key: emptyString(script.concurrency_key) ? undefined : script.concurrency_key,
186
+ visible_to_runner_only: script.visible_to_runner_only
186
187
  }
187
188
  });
188
189
  const { enabled, timezone, args, cron, summary } = $scheduleStore;
@@ -301,7 +302,8 @@ async function saveDraft(forceSave = false) {
301
302
  timeout: script.timeout,
302
303
  concurrency_key: emptyString(script.concurrency_key)
303
304
  ? undefined
304
- : script.concurrency_key
305
+ : script.concurrency_key,
306
+ visible_to_runner_only: script.visible_to_runner_only
305
307
  }
306
308
  });
307
309
  }
@@ -586,18 +588,21 @@ let selectedTab = 'metadata';
586
588
  bind:seconds={script.concurrency_time_window_s}
587
589
  />
588
590
  </Label>
589
- <Label label="Custom concurrency key">
591
+ <Label label="Custom concurrency key (optional)">
592
+ <svelte:fragment slot="header">
593
+ <Tooltip>
594
+ Concurrency keys are global, you can have them be workspace specific using
595
+ the variable `$workspace`. You can also use an argument's value using
596
+ `$args[name_of_arg]`</Tooltip
597
+ >
598
+ </svelte:fragment>
590
599
  <input
600
+ disabled={!$enterpriseLicense}
591
601
  type="text"
592
602
  autofocus
593
603
  bind:value={script.concurrency_key}
594
604
  placeholder={`$workspace/script/${script.path}-$args[foo]`}
595
605
  />
596
- <Tooltip
597
- >Concurrency keys are global, you can have them be workspace specific using
598
- the variable `$workspace`. You can also use an argument's value using
599
- `$args[name_of_arg]`</Tooltip
600
- >
601
606
  </Label>
602
607
  </div>
603
608
  </Section>
@@ -801,6 +806,31 @@ let selectedTab = 'metadata';
801
806
  </svelte:fragment>
802
807
  </Section>
803
808
  {/if}
809
+ <Section label="Runs visibility">
810
+ <svelte:fragment slot="header">
811
+ <Tooltip>
812
+ When this option is enabled, manual executions of this script are invisible to
813
+ users other than the user running it, including the owner(s). This setting can
814
+ be overridden when this script is run manually from the advanced menu.
815
+ </Tooltip>
816
+ </svelte:fragment>
817
+ <div class="flex gap-2 shrink flex-col">
818
+ <Toggle
819
+ size="sm"
820
+ checked={Boolean(script.visible_to_runner_only)}
821
+ on:change={() => {
822
+ if (script.visible_to_runner_only) {
823
+ script.visible_to_runner_only = undefined
824
+ } else {
825
+ script.visible_to_runner_only = true
826
+ }
827
+ }}
828
+ options={{
829
+ right: 'Make runs invisible to others'
830
+ }}
831
+ />
832
+ </div>
833
+ </Section>
804
834
  {#if !isCloudHosted()}
805
835
  <Section label="Custom env variables">
806
836
  <svelte:fragment slot="header">
@@ -8,11 +8,8 @@ import { createHash, editorConfig, langToExt, updateOptions } from '../editorUti
8
8
  import { editor as meditor, KeyCode, KeyMod, Uri as mUri, languages } from 'monaco-editor';
9
9
  import 'monaco-editor/esm/vs/basic-languages/sql/sql.contribution';
10
10
  import 'monaco-editor/esm/vs/basic-languages/yaml/yaml.contribution';
11
- import 'monaco-editor/esm/vs/basic-languages/typescript/typescript.contribution';
12
11
  import 'monaco-editor/esm/vs/basic-languages/javascript/javascript.contribution';
13
- import 'monaco-editor/esm/vs/basic-languages/graphql/graphql.contribution';
14
12
  import 'monaco-editor/esm/vs/language/json/monaco.contribution';
15
- import 'monaco-editor/esm/vs/language/typescript/monaco.contribution';
16
13
  import 'monaco-editor/esm/vs/basic-languages/css/css.contribution';
17
14
  import 'monaco-editor/esm/vs/language/css/monaco.contribution';
18
15
  import { allClasses } from './apps/editor/componentsPanel/cssUtils';
@@ -276,6 +273,7 @@ function loadExtraLib() {
276
273
  filePath: 'windmill.d.ts'
277
274
  });
278
275
  }
276
+ console.log(libs);
279
277
  languages.typescript.javascriptDefaults.setExtraLibs(libs);
280
278
  }
281
279
  }
@@ -2,11 +2,8 @@ import { SvelteComponent } from "svelte";
2
2
  import { editor as meditor } from 'monaco-editor';
3
3
  import 'monaco-editor/esm/vs/basic-languages/sql/sql.contribution';
4
4
  import 'monaco-editor/esm/vs/basic-languages/yaml/yaml.contribution';
5
- import 'monaco-editor/esm/vs/basic-languages/typescript/typescript.contribution';
6
5
  import 'monaco-editor/esm/vs/basic-languages/javascript/javascript.contribution';
7
- import 'monaco-editor/esm/vs/basic-languages/graphql/graphql.contribution';
8
6
  import 'monaco-editor/esm/vs/language/json/monaco.contribution';
9
- import 'monaco-editor/esm/vs/language/typescript/monaco.contribution';
10
7
  import 'monaco-editor/esm/vs/basic-languages/css/css.contribution';
11
8
  import 'monaco-editor/esm/vs/language/css/monaco.contribution';
12
9
  declare const __propDef: {
@@ -5,7 +5,7 @@ import Path from './Path.svelte';
5
5
  import { sendUserToast } from '../toast';
6
6
  import { Highlight } from 'svelte-highlight';
7
7
  import { json } from 'svelte-highlight/languages';
8
- import autosize from 'svelte-autosize';
8
+ import autosize from '../autosize';
9
9
  import { ResourceService, VariableService } from '../gen';
10
10
  import { oauthStore, workspaceStore } from '../stores';
11
11
  import Password from './Password.svelte';
@@ -146,7 +146,7 @@ async function save() {
146
146
  <Password required bind:password />
147
147
 
148
148
  <h3 class="mt-6 mb-2">Description</h3>
149
- <textarea type="text" autocomplete="off" use:autosize bind:value={description} />
149
+ <textarea autocomplete="off" use:autosize bind:value={description} />
150
150
 
151
151
  <div class="mt-12" />
152
152
  <p class="my-1 text-sm text-secondary"
@@ -1,10 +1,12 @@
1
- <script>import Cell from './table/Cell.svelte';
1
+ <script>import DropdownV2 from './DropdownV2.svelte';
2
+ import Cell from './table/Cell.svelte';
2
3
  import DataTable from './table/DataTable.svelte';
3
4
  import Head from './table/Head.svelte';
4
5
  export let headers;
5
6
  export let data; // Object containing the data
6
7
  export let keys;
7
8
  export let size = 'md';
9
+ export let getRowActions = undefined;
8
10
  </script>
9
11
 
10
12
  <div class="mt-2 w-full">
@@ -16,12 +18,16 @@ export let size = 'md';
16
18
  <Cell first={i == 0} last={i == headers.length - 1} head class="max-w-96">{header}</Cell
17
19
  >
18
20
  {/each}
21
+ {#if getRowActions !== undefined}
22
+ <Cell head last />
23
+ {/if}
19
24
  {/if}
20
25
  </tr>
21
26
  </Head>
22
27
  <tbody class="divide-y">
23
28
  {#if data && keys && data.length > 0}
24
29
  {#each data as row}
30
+ {@const rowActions = getRowActions?.(row)}
25
31
  <tr>
26
32
  {#each keys as key, i}
27
33
  <Cell
@@ -32,6 +38,11 @@ export let size = 'md';
32
38
  {row[key] ?? ''}
33
39
  </Cell>
34
40
  {/each}
41
+ {#if rowActions && rowActions.length > 0}
42
+ <Cell last shouldStopPropagation>
43
+ <DropdownV2 items={rowActions} />
44
+ </Cell>
45
+ {/if}
35
46
  </tr>
36
47
  {/each}
37
48
  {:else}
@@ -5,6 +5,7 @@ declare const __propDef: {
5
5
  data: any[] | undefined;
6
6
  keys: string[];
7
7
  size?: "sm" | "md" | "lg" | undefined;
8
+ getRowActions?: ((row: any) => any[]) | undefined;
8
9
  };
9
10
  events: {
10
11
  [evt: string]: CustomEvent<any>;
@@ -4,8 +4,10 @@ import Button from './common/button/Button.svelte';
4
4
  import { sendUserToast } from '../toast';
5
5
  import { workspaceStore } from '../stores';
6
6
  import { tryEvery } from '../utils';
7
+ export let workspaceOverride = undefined;
7
8
  export let resourceType;
8
9
  export let args = {};
10
+ export let buttonTextOverride = undefined;
9
11
  const scripts = {
10
12
  postgresql: {
11
13
  code: `SELECT 1`,
@@ -69,6 +71,29 @@ export async function main(s3: S3) {
69
71
  return testResult;
70
72
  }
71
73
  }
74
+ },
75
+ s3_bucket: {
76
+ code: `
77
+
78
+ const process = require('process');
79
+
80
+ export async function main(bucket: any) {
81
+ const req = await fetch(process.env.BASE_URL + '/api/settings/test_object_storage_config', {
82
+ method: 'POST',
83
+ headers: {
84
+ 'Content-Type': 'application/json',
85
+ Authorization: 'Bearer ' + process.env.WM_TOKEN,
86
+ },
87
+ body: JSON.stringify(bucket),
88
+ });
89
+ if (!req.ok) {
90
+ throw new Error(await req.text());
91
+ }
92
+ return await req.text();
93
+ }
94
+ `,
95
+ lang: 'bun',
96
+ argName: 'bucket'
72
97
  }
73
98
  };
74
99
  let loading = false;
@@ -78,7 +103,7 @@ async function testConnection() {
78
103
  loading = true;
79
104
  const resourceScript = scripts[resourceType];
80
105
  const job = await JobService.runScriptPreview({
81
- workspace: $workspaceStore,
106
+ workspace: workspaceOverride ?? $workspaceStore,
82
107
  requestBody: {
83
108
  path: `testConnection: ${resourceType}`,
84
109
  language: resourceScript.lang,
@@ -91,7 +116,7 @@ async function testConnection() {
91
116
  tryEvery({
92
117
  tryCode: async () => {
93
118
  let testResult = await JobService.getCompletedJob({
94
- workspace: $workspaceStore,
119
+ workspace: workspaceOverride ?? $workspaceStore,
95
120
  id: job
96
121
  });
97
122
  if (resourceScript.additionalCheck) {
@@ -107,7 +132,7 @@ async function testConnection() {
107
132
  sendUserToast('Connection did not resolve after 5s or job did not start. Do you have native workers or a worker group listening to the proper tag available?', true);
108
133
  try {
109
134
  await JobService.cancelQueuedJob({
110
- workspace: $workspaceStore,
135
+ workspace: workspaceOverride ?? $workspaceStore,
111
136
  id: job,
112
137
  requestBody: {
113
138
  reason: 'Connection did not resolve after 5s. Do you have native workers or a worker group listening to the proper tag available?'
@@ -138,6 +163,6 @@ async function testConnection() {
138
163
  {:else}
139
164
  <Database class="mr-2 !h-4 !w-4" />
140
165
  {/if}
141
- Test connection
166
+ {buttonTextOverride ?? 'Test connection'}
142
167
  </Button>
143
168
  {/if}
@@ -1,8 +1,10 @@
1
1
  import { SvelteComponent } from "svelte";
2
2
  declare const __propDef: {
3
3
  props: {
4
+ workspaceOverride?: string | undefined;
4
5
  resourceType: string | undefined;
5
6
  args?: Record<string, any> | any;
7
+ buttonTextOverride?: string | undefined;
6
8
  };
7
9
  events: {
8
10
  [evt: string]: CustomEvent<any>;
@@ -9,10 +9,12 @@ export let workspaceOverride = undefined;
9
9
  export let notfound = false;
10
10
  export let jobUpdateLastFetch = undefined;
11
11
  export let toastError = false;
12
+ export let lazyLogs = false;
12
13
  const dispatch = createEventDispatcher();
13
14
  $: workspace = workspaceOverride ?? $workspaceStore;
14
15
  let syncIteration = 0;
15
16
  let errorIteration = 0;
17
+ let logOffset = 0;
16
18
  let ITERATIONS_BEFORE_SLOW_REFRESH = 10;
17
19
  let ITERATIONS_BEFORE_SUPER_SLOW_REFRESH = 100;
18
20
  let lastStartedAt = Date.now();
@@ -64,6 +66,17 @@ export async function runFlowByPath(path, args) {
64
66
  requestBody: args
65
67
  }));
66
68
  }
69
+ export async function getLogs() {
70
+ if (job) {
71
+ const getUpdate = await JobService.getJobUpdates({
72
+ workspace: workspace,
73
+ id: job.id,
74
+ running: `running` in job && job.running,
75
+ logOffset: job.logs?.length ?? 0
76
+ });
77
+ job.logs = (job.logs ?? '').concat(getUpdate.new_logs ?? '');
78
+ }
79
+ }
67
80
  export async function runPreview(path, code, lang, args, tag, lock) {
68
81
  return abstractRun(() => JobService.runScriptPreview({
69
82
  workspace: $workspaceStore,
@@ -101,6 +114,7 @@ export async function clearCurrentJob() {
101
114
  }
102
115
  }
103
116
  export async function watchJob(testId) {
117
+ logOffset = 0;
104
118
  syncIteration = 0;
105
119
  errorIteration = 0;
106
120
  currentId = testId;
@@ -121,8 +135,11 @@ async function loadTestJob(id) {
121
135
  workspace: workspace,
122
136
  id,
123
137
  running: job.running,
124
- logOffset: job.logs?.length ? job.logs?.length + 1 : 0
138
+ logOffset: logOffset == 0 ? (job.logs?.length ? job.logs?.length + 1 : 0) : logOffset
125
139
  });
140
+ if (previewJobUpdates.log_offset) {
141
+ logOffset = previewJobUpdates.log_offset ?? 0;
142
+ }
126
143
  if (previewJobUpdates.new_logs) {
127
144
  job.logs = (job?.logs ?? '').concat(previewJobUpdates.new_logs);
128
145
  }
@@ -137,7 +154,7 @@ async function loadTestJob(id) {
137
154
  }
138
155
  }
139
156
  else {
140
- job = await JobService.getJob({ workspace: workspace, id });
157
+ job = await JobService.getJob({ workspace: workspace, id, noLogs: lazyLogs });
141
158
  }
142
159
  jobUpdateLastFetch = new Date();
143
160
  if (job?.type === 'CompletedJob') {
@@ -9,9 +9,11 @@ declare const __propDef: {
9
9
  notfound?: boolean | undefined;
10
10
  jobUpdateLastFetch?: Date | undefined;
11
11
  toastError?: boolean | undefined;
12
+ lazyLogs?: boolean | undefined;
12
13
  abstractRun?: ((fn: () => Promise<string>) => Promise<string>) | undefined;
13
14
  runScriptByPath?: ((path: string | undefined, args: Record<string, any>) => Promise<string>) | undefined;
14
15
  runFlowByPath?: ((path: string | undefined, args: Record<string, any>) => Promise<string>) | undefined;
16
+ getLogs?: (() => Promise<void>) | undefined;
15
17
  runPreview?: ((path: string | undefined, code: string, lang: SupportedLanguage, args: Record<string, any>, tag: string | undefined, lock?: string) => Promise<string>) | undefined;
16
18
  cancelJob?: (() => Promise<void>) | undefined;
17
19
  clearCurrentJob?: (() => Promise<void>) | undefined;
@@ -48,6 +50,7 @@ export default class TestJobLoader extends SvelteComponent<TestJobLoaderProps, T
48
50
  get abstractRun(): (fn: () => Promise<string>) => Promise<string>;
49
51
  get runScriptByPath(): (path: string | undefined, args: Record<string, any>) => Promise<string>;
50
52
  get runFlowByPath(): (path: string | undefined, args: Record<string, any>) => Promise<string>;
53
+ get getLogs(): () => Promise<void>;
51
54
  get runPreview(): (path: string | undefined, code: string, lang: import("../gen").Script.language, args: Record<string, any>, tag: string | undefined, lock?: string | undefined) => Promise<string>;
52
55
  get cancelJob(): () => Promise<void>;
53
56
  get clearCurrentJob(): () => Promise<void>;
@@ -13,16 +13,18 @@ import Version from './Version.svelte';
13
13
  import { Clipboard, Plus } from 'lucide-svelte';
14
14
  import DarkModeToggle from './sidebar/DarkModeToggle.svelte';
15
15
  import Toggle from './Toggle.svelte';
16
+ import { createEventDispatcher } from 'svelte';
16
17
  export let scopes = undefined;
18
+ export let newTokenLabel = undefined;
19
+ export let newToken = undefined;
17
20
  let newPassword;
18
21
  let passwordError;
19
22
  let tokens;
20
- let newToken;
21
- let newTokenLabel;
22
23
  let newTokenExpiration;
23
24
  let displayCreateToken = scopes != undefined;
24
25
  let login_type = 'none';
25
26
  let drawer;
27
+ const dispatch = createEventDispatcher();
26
28
  export function openDrawer() {
27
29
  loadLoginType();
28
30
  listTokens();
@@ -65,6 +67,7 @@ async function createToken() {
65
67
  newToken = await UserService.createToken({
66
68
  requestBody: { label: newTokenLabel, expiration: date?.toISOString(), scopes }
67
69
  });
70
+ dispatch('tokenCreated', newToken);
68
71
  listTokens();
69
72
  displayCreateToken = false;
70
73
  }
@@ -2,10 +2,14 @@ import { SvelteComponent } from "svelte";
2
2
  declare const __propDef: {
3
3
  props: {
4
4
  scopes?: string[] | undefined;
5
+ newTokenLabel?: string | undefined;
6
+ newToken?: string | undefined;
5
7
  openDrawer?: (() => void) | undefined;
6
8
  closeDrawer?: (() => void) | undefined;
7
9
  };
8
10
  events: {
11
+ tokenCreated: CustomEvent<any>;
12
+ } & {
9
13
  [evt: string]: CustomEvent<any>;
10
14
  };
11
15
  slots: {};
@@ -7,7 +7,6 @@ import { Button } from './common';
7
7
  import Drawer from './common/drawer/Drawer.svelte';
8
8
  import DrawerContent from './common/drawer/DrawerContent.svelte';
9
9
  import Alert from './common/alert/Alert.svelte';
10
- import autosize from 'svelte-autosize';
11
10
  import Toggle from './Toggle.svelte';
12
11
  import SimpleEditor from './SimpleEditor.svelte';
13
12
  import { sendUserToast } from '../toast';
@@ -16,6 +15,7 @@ import ToggleButtonGroup from './common/toggleButton-v2/ToggleButtonGroup.svelte
16
15
  import ToggleButton from './common/toggleButton-v2/ToggleButton.svelte';
17
16
  import Section from './Section.svelte';
18
17
  import { Save } from 'lucide-svelte';
18
+ import autosize from '../autosize';
19
19
  const dispatch = createEventDispatcher();
20
20
  let path = '';
21
21
  let variable = {
@@ -138,6 +138,7 @@ let editor = undefined;
138
138
  <Toggle
139
139
  on:change={() => edit && loadVariable(initialPath)}
140
140
  bind:checked={variable.is_secret}
141
+ disabled={edit && $userStore?.operator}
141
142
  options={{ right: 'Secret' }}
142
143
  />
143
144
  {#if variable.is_secret}
@@ -174,7 +175,6 @@ let editor = undefined;
174
175
  <textarea
175
176
  disabled={!can_write}
176
177
  rows="4"
177
- type="text"
178
178
  use:autosize
179
179
  bind:value={variable.value}
180
180
  placeholder="Update variable value"
@@ -206,7 +206,6 @@ let editor = undefined;
206
206
  <Section label="Description">
207
207
  <textarea
208
208
  rows="4"
209
- type="text"
210
209
  use:autosize
211
210
  bind:value={variable.description}
212
211
  placeholder="Used for X"
@@ -750,7 +750,16 @@ let createdTags = [];
750
750
  </Button>
751
751
  {/if}
752
752
 
753
- <Button color="light" size="xs" on:click={() => (openClean = true)} btnClasses="text-red-400">
753
+ <Button
754
+ color="light"
755
+ size="xs"
756
+ on:click={() => {
757
+ loadNConfig()
758
+
759
+ openClean = true
760
+ }}
761
+ btnClasses="text-red-400"
762
+ >
754
763
  clean cache
755
764
  </Button>
756
765
  {:else if config}
@@ -39,15 +39,18 @@ onMount(async () => {
39
39
  //@ts-ignore
40
40
  await import(
41
41
  /* @vite-ignore */
42
+ /* webpackIgnore: true */
42
43
  `https://unpkg.com/react@${reactVersion}/umd/react.production.min.js`);
43
44
  //@ts-ignore
44
45
  await import(
45
46
  /* @vite-ignore */
47
+ /* webpackIgnore: true */
46
48
  `https://unpkg.com/react-dom@${reactVersion}/umd/react-dom.production.min.js`);
47
49
  }
48
50
  //@ts-ignore
49
51
  await import(
50
52
  /* @vite-ignore */
53
+ /* webpackIgnore: true */
51
54
  `/api/w/${workspace ?? 'NO_W'}/resources_u/custom_component/${customComponent.name}`);
52
55
  loaded = true;
53
56
  try {