windmill-components 1.394.7 → 1.405.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 (227) hide show
  1. package/package/ata/edgeCases.d.ts +0 -1
  2. package/package/ata/edgeCases.js +2 -8
  3. package/package/ata/index.js +4 -3
  4. package/package/common.d.ts +1 -1
  5. package/package/common.js +2 -2
  6. package/package/components/ApiConnectForm.svelte +33 -7
  7. package/package/components/ArgInput.svelte +4 -2
  8. package/package/components/CenteredModal.svelte +4 -1
  9. package/package/components/CenteredModal.svelte.d.ts +1 -0
  10. package/package/components/DateInput.svelte +2 -0
  11. package/package/components/DateInput.svelte.d.ts +1 -0
  12. package/package/components/DefaultScripts.svelte +8 -3
  13. package/package/components/DefaultScripts.svelte.d.ts +5 -1
  14. package/package/components/DefaultScriptsInner.svelte +16 -7
  15. package/package/components/DefaultScriptsInner.svelte.d.ts +3 -1
  16. package/package/components/Dev.svelte +68 -11
  17. package/package/components/DropdownV2.svelte.d.ts +3 -3
  18. package/package/components/DropdownV2Inner.svelte.d.ts +3 -3
  19. package/package/components/EditableSchemaForm.svelte +1 -0
  20. package/package/components/Editor.svelte +3 -2
  21. package/package/components/Editor.svelte.d.ts +1 -1
  22. package/package/components/ExecutionDuration.svelte +44 -0
  23. package/package/components/ExecutionDuration.svelte.d.ts +24 -0
  24. package/package/components/FlowBuilder.svelte +20 -12
  25. package/package/components/FlowGraphViewer.svelte +9 -2
  26. package/package/components/FlowGraphViewerStep.svelte +23 -10
  27. package/package/components/FlowJobResult.svelte +0 -1
  28. package/package/components/FlowStatusViewerInner.svelte +17 -4
  29. package/package/components/FlowTimeline.svelte +3 -3
  30. package/package/components/HighlightCode.svelte +3 -0
  31. package/package/components/IconedResourceType.svelte +17 -10
  32. package/package/components/IconedResourceType.svelte.d.ts +2 -0
  33. package/package/components/IdEditorInput.svelte +0 -1
  34. package/package/components/InstanceSettings.svelte +247 -129
  35. package/package/components/InstanceSettings.svelte.d.ts +2 -0
  36. package/package/components/JobArgs.svelte +3 -1
  37. package/package/components/LightweightArgInput.svelte +35 -10
  38. package/package/components/LightweightArgInput.svelte.d.ts +1 -0
  39. package/package/components/LightweightObjectResourceInput.svelte +2 -0
  40. package/package/components/LightweightObjectResourceInput.svelte.d.ts +1 -0
  41. package/package/components/LightweightSchemaForm.svelte +2 -0
  42. package/package/components/LightweightSchemaForm.svelte.d.ts +1 -0
  43. package/package/components/Login.svelte +10 -5
  44. package/package/components/Login.svelte.d.ts +1 -0
  45. package/package/components/ModulePreview.svelte +21 -2
  46. package/package/components/ModuleStatus.svelte +3 -0
  47. package/package/components/ModuleStatus.svelte.d.ts +1 -0
  48. package/package/components/OAuthSetting.svelte +40 -15
  49. package/package/components/ObjectStoreConfigSettings.svelte +78 -76
  50. package/package/components/ParqetCsvTableRenderer.svelte +25 -3
  51. package/package/components/Password.svelte.d.ts +1 -1
  52. package/package/components/Path.svelte +74 -54
  53. package/package/components/Path.svelte.d.ts +2 -1
  54. package/package/components/ResourceEditor.svelte +38 -9
  55. package/package/components/ResultJobLoader.svelte +6 -3
  56. package/package/components/ResultJobLoader.svelte.d.ts +1 -1
  57. package/package/components/ScheduleEditorInner.svelte +2 -2
  58. package/package/components/SchemaForm.svelte +6 -1
  59. package/package/components/ScriptBuilder.svelte +12 -5
  60. package/package/components/ScriptEditor.svelte +33 -3
  61. package/package/components/ScriptEditor.svelte.d.ts +1 -1
  62. package/package/components/Scrollable.svelte +47 -0
  63. package/package/components/Scrollable.svelte.d.ts +21 -0
  64. package/package/components/ShareModal.svelte.d.ts +2 -2
  65. package/package/components/SuperadminSettings.svelte +5 -7
  66. package/package/components/TestJobLoader.svelte +46 -5
  67. package/package/components/TestJobLoader.svelte.d.ts +2 -1
  68. package/package/components/ToggleHubWorkspaceQuick.svelte +14 -0
  69. package/package/components/ToggleHubWorkspaceQuick.svelte.d.ts +16 -0
  70. package/package/components/WorkspaceGroup.svelte +3 -2
  71. package/package/components/apps/components/helpers/DebouncedInput.svelte +9 -1
  72. package/package/components/apps/components/inputs/AppSelect.svelte +1 -1
  73. package/package/components/apps/editor/component/components.d.ts +79 -79
  74. package/package/components/apps/svelte-select/lib/Select.svelte +1 -1
  75. package/package/components/common/fileUpload/FileUpload.svelte +1 -1
  76. package/package/components/common/languageIcons/LanguageIcon.svelte +5 -2
  77. package/package/components/common/menu/Menu.svelte +2 -1
  78. package/package/components/common/menu/MenuV2.svelte +3 -1
  79. package/package/components/common/menu/MenuV2.svelte.d.ts +1 -0
  80. package/package/components/common/popup/Popup.svelte +22 -12
  81. package/package/components/common/popup/Popup.svelte.d.ts +2 -0
  82. package/package/components/common/popup/PopupV2.svelte +58 -0
  83. package/package/components/common/popup/PopupV2.svelte.d.ts +27 -0
  84. package/package/components/copilot/CronGen.svelte +1 -1
  85. package/package/components/copilot/RegexGen.svelte +4 -4
  86. package/package/components/copilot/StepGen.svelte +6 -6
  87. package/package/components/copilot/StepGenQuick.svelte +57 -0
  88. package/package/components/copilot/StepGenQuick.svelte.d.ts +23 -0
  89. package/package/components/copilot/flow.d.ts +2 -0
  90. package/package/components/copilot/flow.js +55 -0
  91. package/package/components/details/DetailPageDetailPanel.svelte +9 -1
  92. package/package/components/details/DetailPageDetailPanel.svelte.d.ts +2 -1
  93. package/package/components/details/DetailPageLayout.svelte +2 -0
  94. package/package/components/details/DetailPageLayout.svelte.d.ts +3 -0
  95. package/package/components/details/utils.d.ts +0 -1
  96. package/package/components/details/utils.js +1 -12
  97. package/package/components/flows/FlowEditor.svelte +2 -1
  98. package/package/components/flows/FlowProgressBar.svelte +16 -1
  99. package/package/components/flows/FlowProgressBar.svelte.d.ts +1 -0
  100. package/package/components/flows/content/FlowBranchesAllWrapper.svelte +8 -0
  101. package/package/components/flows/content/FlowBranchesAllWrapper.svelte.d.ts +1 -0
  102. package/package/components/flows/content/FlowBranchesOneWrapper.svelte +8 -0
  103. package/package/components/flows/content/FlowBranchesOneWrapper.svelte.d.ts +1 -0
  104. package/package/components/flows/content/FlowConstants.svelte +1 -1
  105. package/package/components/flows/content/FlowEditorPanel.svelte +3 -0
  106. package/package/components/flows/content/FlowInputs.svelte +7 -6
  107. package/package/components/flows/content/FlowInputs.svelte.d.ts +1 -0
  108. package/package/components/flows/content/FlowInputsFlowQuick.svelte +65 -0
  109. package/package/components/flows/content/FlowInputsFlowQuick.svelte.d.ts +19 -0
  110. package/package/components/flows/content/FlowInputsQuick.svelte +419 -0
  111. package/package/components/flows/content/FlowInputsQuick.svelte.d.ts +33 -0
  112. package/package/components/flows/content/FlowLoop.svelte +7 -1
  113. package/package/components/flows/content/FlowModuleComponent.svelte +12 -3
  114. package/package/components/flows/content/FlowModuleComponent.svelte.d.ts +1 -0
  115. package/package/components/flows/content/FlowModuleSkip.svelte +69 -0
  116. package/package/components/flows/content/FlowModuleSkip.svelte.d.ts +20 -0
  117. package/package/components/flows/content/FlowModuleWrapper.svelte +17 -4
  118. package/package/components/flows/content/FlowPreprocessorModule.svelte +16 -0
  119. package/package/components/flows/content/FlowPreprocessorModule.svelte.d.ts +16 -0
  120. package/package/components/flows/content/FlowWhileLoop.svelte +9 -0
  121. package/package/components/flows/content/FlowWhileLoop.svelte.d.ts +1 -0
  122. package/package/components/flows/content/GenAiQuick.svelte +30 -0
  123. package/package/components/flows/content/GenAiQuick.svelte.d.ts +20 -0
  124. package/package/components/flows/content/ScriptEditorDrawer.svelte +3 -2
  125. package/package/components/flows/flowInfers.js +1 -1
  126. package/package/components/flows/header/FlowPreviewButtons.svelte +1 -0
  127. package/package/components/flows/idUtils.js +3 -1
  128. package/package/components/flows/map/FlowCopilotButton.svelte +55 -0
  129. package/package/components/flows/map/FlowCopilotButton.svelte.d.ts +16 -0
  130. package/package/components/flows/map/FlowErrorHandlerItem.svelte +77 -47
  131. package/package/components/flows/map/FlowJobsMenu.svelte +1 -1
  132. package/package/components/flows/map/FlowModuleSchemaItem.svelte +25 -12
  133. package/package/components/flows/map/FlowModuleSchemaItem.svelte.d.ts +1 -0
  134. package/package/components/flows/map/FlowModuleSchemaMap.svelte +61 -18
  135. package/package/components/flows/map/InsertModuleButton.svelte +161 -138
  136. package/package/components/flows/map/InsertModuleButton.svelte.d.ts +7 -4
  137. package/package/components/flows/map/MapItem.svelte +11 -0
  138. package/package/components/flows/map/MapItem.svelte.d.ts +1 -0
  139. package/package/components/flows/pickers/FlowScriptPickerQuick.svelte +48 -0
  140. package/package/components/flows/pickers/FlowScriptPickerQuick.svelte.d.ts +23 -0
  141. package/package/components/flows/pickers/FlowToplevelNode.svelte +19 -0
  142. package/package/components/flows/pickers/FlowToplevelNode.svelte.d.ts +19 -0
  143. package/package/components/flows/pickers/PickHubScriptQuick.svelte +138 -0
  144. package/package/components/flows/pickers/PickHubScriptQuick.svelte.d.ts +33 -0
  145. package/package/components/flows/pickers/TopLevelNode.svelte +58 -0
  146. package/package/components/flows/pickers/TopLevelNode.svelte.d.ts +21 -0
  147. package/package/components/flows/pickers/WorkspaceScriptPickerQuick.svelte +120 -0
  148. package/package/components/flows/pickers/WorkspaceScriptPickerQuick.svelte.d.ts +35 -0
  149. package/package/components/flows/types.d.ts +1 -0
  150. package/package/components/graph/FlowGraphV2.svelte +93 -58
  151. package/package/components/graph/FlowGraphV2.svelte.d.ts +2 -1
  152. package/package/components/graph/graphBuilder.d.ts +2 -1
  153. package/package/components/graph/graphBuilder.js +345 -280
  154. package/package/components/graph/model.d.ts +1 -0
  155. package/package/components/graph/renderers/edges/BaseEdge.svelte +36 -14
  156. package/package/components/graph/renderers/nodes/BranchOneStart.svelte +1 -1
  157. package/package/components/graph/renderers/nodes/InputNode.svelte +31 -51
  158. package/package/components/graph/renderers/nodes/InputNode.svelte.d.ts +6 -1
  159. package/package/components/graph/renderers/nodes/ModuleNode.svelte +2 -1
  160. package/package/components/graph/util.d.ts +1 -1
  161. package/package/components/graph/util.js +7 -2
  162. package/package/components/home/ListFiltersQuick.svelte +51 -0
  163. package/package/components/home/ListFiltersQuick.svelte.d.ts +23 -0
  164. package/package/components/icons/AnsibleIcon.svelte +42 -0
  165. package/package/components/icons/AnsibleIcon.svelte.d.ts +25 -0
  166. package/package/components/icons/WindmillIcon2.svelte +141 -0
  167. package/package/components/icons/WindmillIcon2.svelte.d.ts +20 -0
  168. package/package/components/icons/index.d.ts +2 -1
  169. package/package/components/icons/index.js +2 -1
  170. package/package/components/instanceSettings.d.ts +2 -2
  171. package/package/components/instanceSettings.js +25 -58
  172. package/package/components/jobs/JobProgressBar.svelte +52 -0
  173. package/package/components/jobs/JobProgressBar.svelte.d.ts +23 -0
  174. package/package/components/progressBar/ProgressBar.svelte +18 -1
  175. package/package/components/progressBar/ProgressBar.svelte.d.ts +3 -0
  176. package/package/components/runs/JobPreview.svelte +1 -0
  177. package/package/components/runs/PreprocessedArgsDisplay.svelte +71 -0
  178. package/package/components/runs/PreprocessedArgsDisplay.svelte.d.ts +16 -0
  179. package/package/components/schema/AddProperty.svelte +1 -0
  180. package/package/components/schema/EditableSchemaWrapper.svelte +142 -19
  181. package/package/components/schema/EditableSchemaWrapper.svelte.d.ts +1 -0
  182. package/package/components/schema/FlowPropertyEditor.svelte +12 -0
  183. package/package/components/schema/FlowPropertyEditor.svelte.d.ts +1 -0
  184. package/package/components/scriptEditor/LogPanel.svelte +1 -0
  185. package/package/components/scriptEditor/LogPanel.svelte.d.ts +3 -1
  186. package/package/components/search/GlobalSearchModal.svelte +2 -1
  187. package/package/components/sidebar/SidebarContent.svelte +69 -8
  188. package/package/components/sidebar/changelogs.js +10 -0
  189. package/package/components/triggers/RouteEditor.svelte +19 -0
  190. package/package/components/triggers/RouteEditor.svelte.d.ts +21 -0
  191. package/package/components/triggers/RouteEditorInner.svelte +327 -0
  192. package/package/components/triggers/RouteEditorInner.svelte.d.ts +21 -0
  193. package/package/components/triggers/RoutesPanel.svelte +74 -0
  194. package/package/components/triggers/RoutesPanel.svelte.d.ts +17 -0
  195. package/package/editorUtils.js +2 -0
  196. package/package/gen/core/OpenAPI.js +1 -1
  197. package/package/gen/schemas.gen.d.ts +159 -8
  198. package/package/gen/schemas.gen.js +161 -8
  199. package/package/gen/services.gen.d.ts +139 -1
  200. package/package/gen/services.gen.js +282 -1
  201. package/package/gen/types.gen.d.ts +455 -12
  202. package/package/hubPaths.json +6 -8
  203. package/package/infer.d.ts +4 -2
  204. package/package/infer.js +25 -23
  205. package/package/inferArgSig.js +8 -2
  206. package/package/monaco_workers/build_workers.js +8 -13
  207. package/package/monaco_workers/graphql.worker.bundle.js +45440 -174
  208. package/package/relative_imports.d.ts +3 -0
  209. package/package/relative_imports.js +25 -0
  210. package/package/script_helpers.d.ts +7 -2
  211. package/package/script_helpers.js +151 -3
  212. package/package/scripts.d.ts +1 -1
  213. package/package/scripts.js +5 -1
  214. package/package/stores.d.ts +1 -0
  215. package/package/stores.js +1 -0
  216. package/package/utils.d.ts +1 -0
  217. package/package/utils.js +4 -0
  218. package/package.json +16 -7
  219. package/package/components/flows/map/InsertTriggerButton.svelte +0 -48
  220. package/package/components/flows/map/InsertTriggerButton.svelte.d.ts +0 -24
  221. package/package/monaco_workers/cssWorker-es.js +0 -43763
  222. package/package/monaco_workers/editorWorker-es.d.ts +0 -2
  223. package/package/monaco_workers/editorWorker-es.js +0 -8066
  224. package/package/monaco_workers/htmlWorker-es.js +0 -21551
  225. package/package/monaco_workers/jsonWorker-es.js +0 -13523
  226. package/package/monaco_workers/tsWorker-es.d.ts +0 -103
  227. package/package/monaco_workers/tsWorker-es.js +0 -212193
@@ -1,3 +1,2 @@
1
1
  /** Converts some of the known global imports to node so that we grab the right info */
2
2
  export declare const mapModuleNameToModule: (moduleSpecifier: string) => string;
3
- export declare function isRelativePath(d: string): boolean;
@@ -1,3 +1,4 @@
1
+ import { isTypescriptRelativePath } from '../relative_imports';
1
2
  /** Converts some of the known global imports to node so that we grab the right info */
2
3
  export const mapModuleNameToModule = (moduleSpecifier) => {
3
4
  // in node repl:
@@ -59,7 +60,7 @@ export const mapModuleNameToModule = (moduleSpecifier) => {
59
60
  if (builtInNodeMods.includes(moduleSpecifier.replace('node:', ''))) {
60
61
  return 'node';
61
62
  }
62
- if (isRelativePath(moduleSpecifier)) {
63
+ if (isTypescriptRelativePath(moduleSpecifier)) {
63
64
  return moduleSpecifier;
64
65
  }
65
66
  // strip module filepath e.g. lodash/identity => lodash
@@ -67,10 +68,3 @@ export const mapModuleNameToModule = (moduleSpecifier) => {
67
68
  const moduleName = a.startsWith('@') ? `${a}/${b}` : a;
68
69
  return moduleName;
69
70
  };
70
- export function isRelativePath(d) {
71
- return (d.startsWith('./') ||
72
- d.startsWith('../') ||
73
- d.startsWith('/') ||
74
- d.startsWith('.../') ||
75
- d.startsWith('/'));
76
- }
@@ -1,5 +1,6 @@
1
+ import { isTypescriptRelativePath } from '../relative_imports';
1
2
  import { getDTSFileForModuleWithVersion, getFiletreeForModuleWithVersion, getNPMVersionForModuleReference, getNPMVersionsForModule, isOverlimit, limit } from './apis';
2
- import { isRelativePath, mapModuleNameToModule } from './edgeCases';
3
+ import { mapModuleNameToModule } from './edgeCases';
3
4
  /**
4
5
  * The function which starts up type acquisition,
5
6
  * returns a function which you then pass the initial
@@ -65,7 +66,7 @@ export const setupTypeAcquisition = (config) => {
65
66
  })
66
67
  .filter((f) => !moduleMap.has(f.raw));
67
68
  if (depth == 0) {
68
- const relativeDeps = depsToGet.filter((f) => isRelativePath(f.raw));
69
+ const relativeDeps = depsToGet.filter((f) => isTypescriptRelativePath(f.raw));
69
70
  relativeDeps.forEach(async (f) => {
70
71
  let path = f.raw.startsWith('/')
71
72
  ? f.raw
@@ -80,7 +81,7 @@ export const setupTypeAcquisition = (config) => {
80
81
  });
81
82
  }
82
83
  depsToGet.forEach((dep) => moduleMap.set(dep.raw, { state: 'loading' }));
83
- depsToGet = depsToGet.filter((f) => !isRelativePath(f.raw));
84
+ depsToGet = depsToGet.filter((f) => !isTypescriptRelativePath(f.raw));
84
85
  if (depsToGet.length === 0) {
85
86
  return [];
86
87
  }
@@ -96,6 +96,6 @@ export type Meta = {
96
96
  type Enumerate<N extends number, Acc extends number[] = []> = Acc['length'] extends N ? Acc[number] : Enumerate<N, [...Acc, Acc['length']]>;
97
97
  /** An inclusive range of integer numbers */
98
98
  export type IntRange<F extends number, T extends number> = F | Exclude<Enumerate<T>, Enumerate<F>> | T;
99
- export declare function pathToMeta(path: string): Meta;
99
+ export declare function pathToMeta(path: string, hideUser: boolean): Meta;
100
100
  export declare function prettyLanguage(lang: string): string;
101
101
  export {};
package/package/common.js CHANGED
@@ -38,7 +38,7 @@ export function mergeSchema(schema, enum_payload = {}) {
38
38
  }
39
39
  return new_schema;
40
40
  }
41
- export function pathToMeta(path) {
41
+ export function pathToMeta(path, hideUser) {
42
42
  const splitted = path.split('/');
43
43
  let ownerKind;
44
44
  if (splitted[0] == 'g') {
@@ -53,7 +53,7 @@ export function pathToMeta(path) {
53
53
  else {
54
54
  console.error('Not recognized owner:' + splitted[0]);
55
55
  return {
56
- ownerKind: 'user',
56
+ ownerKind: hideUser ? 'folder' : 'user',
57
57
  owner: '',
58
58
  name: ''
59
59
  };
@@ -53,6 +53,7 @@ let error = '';
53
53
  let rawCode = '';
54
54
  let viewJsonSchema = false;
55
55
  $: rawCode && parseJson();
56
+ $: textFileContent && parseTextFileContent();
56
57
  function switchTab(asJson) {
57
58
  viewJsonSchema = asJson;
58
59
  if (asJson) {
@@ -60,6 +61,9 @@ function switchTab(asJson) {
60
61
  }
61
62
  else {
62
63
  parseJson();
64
+ if (resourceTypeInfo?.format_extension) {
65
+ textFileContent = args.content;
66
+ }
63
67
  }
64
68
  }
65
69
  $: resourceType == 'postgresql' && isSupabaseAvailable();
@@ -89,6 +93,12 @@ function parseConnectionString(close) {
89
93
  }
90
94
  }
91
95
  let rawCodeEditor = undefined;
96
+ let textFileContent;
97
+ function parseTextFileContent() {
98
+ args = {
99
+ content: textFileContent
100
+ };
101
+ }
92
102
  </script>
93
103
 
94
104
  {#if !notFound}
@@ -167,13 +177,29 @@ let rawCodeEditor = undefined;
167
177
  {#if !emptyString(error)}<span class="text-red-400 text-xs mb-1 flex flex-row-reverse"
168
178
  >{error}</span
169
179
  >{:else}<div class="py-2" />{/if}
170
- <SimpleEditor
171
- bind:this={rawCodeEditor}
172
- autoHeight
173
- lang="json"
174
- bind:code={rawCode}
175
- fixedOverflowWidgets={false}
176
- />
180
+ <div class="h-full w-full border p-1 rounded">
181
+ <SimpleEditor
182
+ bind:this={rawCodeEditor}
183
+ autoHeight
184
+ lang="json"
185
+ bind:code={rawCode}
186
+ fixedOverflowWidgets={false}
187
+ />
188
+ </div>
189
+ {:else if resourceTypeInfo?.format_extension}
190
+ <h5 class="mt-4 inline-flex items-center gap-4">
191
+ File content ({resourceTypeInfo.format_extension})
192
+ </h5>
193
+ <div class="py-2" />
194
+ <div class="h-full w-full border p-1 rounded">
195
+ <SimpleEditor
196
+ bind:this={rawCodeEditor}
197
+ autoHeight
198
+ lang={resourceTypeInfo.format_extension}
199
+ bind:code={textFileContent}
200
+ fixedOverflowWidgets={false}
201
+ />
202
+ </div>
177
203
  {:else}
178
204
  <SchemaForm
179
205
  onlyMaskPassword
@@ -218,7 +218,8 @@ function testRegex(pattern, value) {
218
218
  }
219
219
  }
220
220
  function onKeyDown(e) {
221
- if ((e.ctrlKey || e.metaKey) && e.key == 'Enter') {
221
+ if ((e.ctrlKey || e.metaKey) &&
222
+ (e.key == 'Enter' || e.key == 'c' || e.key == 'v' || e.key == 'x')) {
222
223
  return;
223
224
  }
224
225
  e.stopPropagation();
@@ -542,7 +543,8 @@ $: shouldDispatchChanges && debounced(value);
542
543
  randomFileKey={true}
543
544
  on:addition={(evt) => {
544
545
  value = {
545
- s3: evt.detail?.path ?? ''
546
+ s3: evt.detail?.path ?? '',
547
+ filename: evt.detail?.filename ?? ''
546
548
  }
547
549
  }}
548
550
  on:deletion={(evt) => {
@@ -5,6 +5,7 @@ import LoginPageHeader from './LoginPageHeader.svelte';
5
5
  export let subtitle = undefined;
6
6
  export let title = 'Windmill';
7
7
  export let disableLogo = false;
8
+ export let large = false;
8
9
  setLicense();
9
10
  </script>
10
11
 
@@ -20,7 +21,9 @@ setLicense();
20
21
  {/if}
21
22
 
22
23
  <div
23
- class="border rounded-md shadow-md bg-surface w-full max-w-[640px] p-4 sm:py-8 sm:px-10 mb-6 md:mb-20 z-10"
24
+ class="border rounded-md shadow-md bg-surface w-full {large
25
+ ? 'max-w-5xl'
26
+ : 'max-w-[640px]'} p-4 sm:py-8 sm:px-10 mb-6 md:mb-20 z-10"
24
27
  >
25
28
  <div class="mb-10">
26
29
  <h1 class="text-center text-primary">
@@ -4,6 +4,7 @@ declare const __propDef: {
4
4
  subtitle?: string | undefined;
5
5
  title?: string | undefined;
6
6
  disableLogo?: boolean | undefined;
7
+ large?: boolean | undefined;
7
8
  };
8
9
  events: {
9
10
  [evt: string]: CustomEvent<any>;
@@ -6,6 +6,7 @@ export let autofocus = false;
6
6
  export let minDate = undefined;
7
7
  export let maxDate = undefined;
8
8
  export let dateFormat = 'dd-MM-yyyy';
9
+ export let disabled = false;
9
10
  let date = computeDate(value);
10
11
  const dispatch = createEventDispatcher();
11
12
  const defaultDateFormat = 'dd-MM-yyyy';
@@ -60,6 +61,7 @@ let randomId = 'datetarget-' + Math.random().toString(36).substring(7);
60
61
  <div class="flex flex-row gap-1 items-center w-full" id={randomId} on:pointerdown on:focus>
61
62
  <!-- svelte-ignore a11y-autofocus -->
62
63
  <input
64
+ {disabled}
63
65
  type="date"
64
66
  bind:value={date}
65
67
  {autofocus}
@@ -6,6 +6,7 @@ declare const __propDef: {
6
6
  minDate?: string | undefined;
7
7
  maxDate?: string | undefined;
8
8
  dateFormat?: string | undefined;
9
+ disabled?: boolean | undefined;
9
10
  };
10
11
  events: {
11
12
  pointerdown: PointerEvent;
@@ -5,10 +5,13 @@ import Drawer from './common/drawer/Drawer.svelte';
5
5
  import DrawerContent from './common/drawer/DrawerContent.svelte';
6
6
  import DefaultScriptsInner from './DefaultScriptsInner.svelte';
7
7
  let drawer;
8
+ export let placement = 'left';
9
+ export let size = 'xs2';
10
+ export let noText = false;
8
11
  </script>
9
12
 
10
13
  {#if $userStore?.is_admin || $userStore?.is_super_admin}
11
- <Drawer bind:this={drawer} placement="left">
14
+ <Drawer bind:this={drawer} {placement}>
12
15
  <DrawerContent title="Edit Default Scripts" on:close={drawer.closeDrawer}>
13
16
  <DefaultScriptsInner />
14
17
  </DrawerContent>
@@ -17,8 +20,10 @@ let drawer;
17
20
  on:click={drawer?.openDrawer}
18
21
  startIcon={{ icon: SettingsIcon }}
19
22
  color="light"
20
- size="xs2"
23
+ {size}
21
24
  btnClasses="!text-tertiary"
22
- variant="contained">defaults</Button
25
+ variant="contained"
23
26
  >
27
+ {noText ? '' : 'defaults'}
28
+ </Button>
24
29
  {/if}
@@ -1,6 +1,10 @@
1
1
  import { SvelteComponent } from "svelte";
2
2
  declare const __propDef: {
3
- props: Record<string, never>;
3
+ props: {
4
+ placement?: "right" | "left" | undefined;
5
+ size?: "xs3" | "xs2" | undefined;
6
+ noText?: boolean | undefined;
7
+ };
4
8
  events: {
5
9
  [evt: string]: CustomEvent<any>;
6
10
  };
@@ -4,6 +4,7 @@ import { flip } from 'svelte/animate';
4
4
  import Toggle from './Toggle.svelte';
5
5
  import { defaultScriptLanguages } from '../scripts';
6
6
  import Alert from './common/alert/Alert.svelte';
7
+ export let small = false;
7
8
  $: langs = computeLangs($defaultScripts);
8
9
  function computeLangs(defaultScripts) {
9
10
  const allLangs = Object.keys(defaultScriptLanguages);
@@ -31,24 +32,32 @@ async function changePosition(i, up) {
31
32
  }
32
33
  </script>
33
34
 
34
- <Alert title="Global to workspace" type="info" class="mb-4">
35
+ <Alert title="Global to workspace" type="info" class="mb-4" size={small ? 'xs' : 'sm'}>
35
36
  This setting is only available to admins and will affect all users in the workspace.
36
37
  </Alert>
37
- <div class="h-full w-full flex-col gap-2 flex">
38
+ <div class="h-full w-full flex-col {small ? 'gap-0' : 'gap-2'} flex">
38
39
  {#each langs as lang, i (lang)}
39
40
  <div
40
41
  animate:flip={{ duration: 300 }}
41
- class="w-full p-2 rounded border border-seconadry grid grid-cols-3"
42
- ><h3>{lang}</h3>
42
+ class="w-full p-2 rounded {small
43
+ ? ''
44
+ : 'border border-secondary'} grid grid-cols-3 items-center"
45
+ ><h3 class={small ? 'text-xs font-medium justify-center' : ''}>{lang}</h3>
43
46
  <div>
44
47
  {#if i > 0}
45
- <button on:click={() => changePosition(i ?? 0, true)} class="text-lg mr-2">
48
+ <button
49
+ on:click={() => changePosition(i ?? 0, true)}
50
+ class={small ? 'mr-2 text-secondary text-sm' : 'text-lg mr-2'}
51
+ title="Move up"
52
+ >
46
53
  &uparrow;</button
47
54
  >
48
55
  {/if}
49
56
  {#if i < langs.length - 1}
50
- <button on:click={() => changePosition(i ?? 0, false)} class="text-lg mr-2"
51
- >&downarrow;</button
57
+ <button
58
+ on:click={() => changePosition(i ?? 0, false)}
59
+ class={small ? 'mr-2 text-secondary text-sm' : 'text-lg mr-2'}
60
+ title="Move down">&downarrow;</button
52
61
  >
53
62
  {/if}</div
54
63
  >
@@ -1,6 +1,8 @@
1
1
  import { SvelteComponent } from "svelte";
2
2
  declare const __propDef: {
3
- props: Record<string, never>;
3
+ props: {
4
+ small?: boolean | undefined;
5
+ };
4
6
  events: {
5
7
  [evt: string]: CustomEvent<any>;
6
8
  };
@@ -25,13 +25,16 @@ import Toggle from './Toggle.svelte';
25
25
  import { setLicense } from '../enterpriseUtils';
26
26
  import { workspacedOpenai } from './copilot/lib';
27
27
  import { pickScript } from './flows/flowStateUtils';
28
+ import { approximateFindPythonRelativePath, isTypescriptRelativePath, parseTypescriptDeps } from '../relative_imports';
29
+ import Tooltip from './Tooltip.svelte';
28
30
  $: token = $page.url.searchParams.get('wm_token') ?? undefined;
29
31
  $: workspace = $page.url.searchParams.get('workspace') ?? undefined;
30
32
  $: themeDarkRaw = $page.url.searchParams.get('activeColorTheme');
31
33
  $: themeDark = themeDarkRaw == '2' || themeDarkRaw == '4';
32
34
  $: if (token) {
33
35
  OpenAPI.WITH_CREDENTIALS = true;
34
- OpenAPI.TOKEN = $page.url.searchParams.get('wm_token');
36
+ OpenAPI.TOKEN = token;
37
+ loadUser();
35
38
  }
36
39
  let flowCopilotContext = {
37
40
  drawerStore: writable(undefined),
@@ -125,7 +128,7 @@ let useLock = false;
125
128
  let lockChanges = false;
126
129
  let timeout = undefined;
127
130
  let loadingCodebaseButton = false;
128
- let lastBundleCommandId = '';
131
+ let lastCommandId = '';
129
132
  const el = (event) => {
130
133
  // sendUserToast(`Received message from parent ${event.data.type}`, true)
131
134
  if (event.data.type == 'runTest') {
@@ -137,11 +140,19 @@ const el = (event) => {
137
140
  replaceScript(event.data);
138
141
  }
139
142
  else if (event.data.type == 'testBundle') {
140
- if (event.data.id == lastBundleCommandId) {
143
+ if (event.data.id == lastCommandId) {
141
144
  testBundle(event.data.file, event.data.isTar);
142
145
  }
143
146
  else {
144
- sendUserToast(`Bundle received ${lastBundleCommandId} was obsolete, ignoring`, true);
147
+ sendUserToast(`Bundle received ${lastCommandId} was obsolete, ignoring`, true);
148
+ }
149
+ }
150
+ else if (event.data.type == 'testPreviewBundle') {
151
+ if (event.data.id == lastCommandId && currentScript) {
152
+ testJobLoader.runPreview(currentScript.path, event.data.file, currentScript.language, args, currentScript.tag, useLock ? currentScript.lock : undefined);
153
+ }
154
+ else {
155
+ sendUserToast(`Bundle received ${lastCommandId} was obsolete, ignoring`, true);
145
156
  }
146
157
  }
147
158
  else if (event.data.type == 'testBundleError') {
@@ -176,7 +187,7 @@ onMount(() => {
176
187
  repeat: e.repeat,
177
188
  shiftKey: e.shiftKey
178
189
  };
179
- if (obj.ctrlKey && obj.key == 'a') {
190
+ if ((obj.ctrlKey || obj.metaKey) && obj.key == 'a') {
180
191
  e.stopPropagation();
181
192
  return;
182
193
  }
@@ -260,6 +271,7 @@ function connectWs() {
260
271
  console.error(e);
261
272
  }
262
273
  }
274
+ let typescriptBundlePreviewMode = false;
263
275
  function runTest() {
264
276
  if (mode == 'script') {
265
277
  if (!currentScript) {
@@ -267,12 +279,18 @@ function runTest() {
267
279
  }
268
280
  if (currentScript.isCodebase) {
269
281
  loadingCodebaseButton = true;
270
- lastBundleCommandId = Math.random().toString(36).substring(7);
271
- window.parent?.postMessage({ type: 'testBundle', id: lastBundleCommandId }, '*');
282
+ lastCommandId = Math.random().toString(36).substring(7);
283
+ window.parent?.postMessage({ type: 'testBundle', id: lastCommandId }, '*');
272
284
  }
273
285
  else {
274
- //@ts-ignore
275
- testJobLoader.runPreview(currentScript.path, currentScript.content, currentScript.language, args, currentScript.tag, useLock ? currentScript.lock : undefined);
286
+ if (relativePaths.length > 0 && typescriptBundlePreviewMode) {
287
+ lastCommandId = Math.random().toString(36).substring(7);
288
+ window.parent?.postMessage({ type: 'testPreviewBundle', external: ['!/*'], id: lastCommandId }, '*');
289
+ }
290
+ else {
291
+ //@ts-ignore
292
+ testJobLoader.runPreview(currentScript.path, currentScript.content, currentScript.language, args, currentScript.tag, useLock ? currentScript.lock : undefined);
293
+ }
276
294
  }
277
295
  }
278
296
  else {
@@ -298,15 +316,27 @@ async function onKeyDown(event) {
298
316
  else if ((event.ctrlKey || event.metaKey) && event.code === 'KeyX') {
299
317
  document.execCommand('cut');
300
318
  }
319
+ else if ((event.ctrlKey || event.metaKey) && event.code === 'KeyV') {
320
+ event.preventDefault();
321
+ document.execCommand('paste');
322
+ }
301
323
  }
324
+ let relativePaths = [];
302
325
  let lastPath = undefined;
303
326
  async function replaceScript(lastEdit) {
304
327
  currentScript = lastEdit;
305
328
  if (lastPath !== lastEdit.path) {
306
329
  schema = emptySchema();
330
+ relativePaths = [];
307
331
  }
308
332
  try {
309
333
  await inferArgs(lastEdit.language, lastEdit.content, schema);
334
+ if (lastEdit?.language == 'bun') {
335
+ relativePaths = await parseTypescriptDeps(lastEdit.content).filter(isTypescriptRelativePath);
336
+ }
337
+ else if (lastEdit?.language == 'python3') {
338
+ relativePaths = approximateFindPythonRelativePath(lastEdit.content);
339
+ }
310
340
  schema = schema;
311
341
  lastPath = lastEdit.path;
312
342
  validCode = true;
@@ -372,7 +402,8 @@ setContext('FlowEditorContext', {
372
402
  saveDraft: () => { },
373
403
  initialPath: '',
374
404
  flowInputsStore: writable({}),
375
- customUi: {}
405
+ customUi: {},
406
+ insertButtonOpen: writable(false)
376
407
  });
377
408
  $: updateFlow($flowStore);
378
409
  let lastSent = undefined;
@@ -429,7 +460,7 @@ async function inferModuleArgs(selectedIdStore) {
429
460
 
430
461
  <main class="h-screen w-full">
431
462
  {#if mode == 'script'}
432
- <div class="flex flex-col h-full">
463
+ <div class="flex flex-col min-h-full overflow-auto">
433
464
  <div class="absolute top-0 left-2">
434
465
  <DarkModeToggle bind:darkMode bind:this={darkModeToggle} forcedDarkMode={false} />
435
466
  </div>
@@ -458,6 +489,32 @@ async function inferModuleArgs(selectedIdStore) {
458
489
  options={{ left: 'Infer lockfile', right: 'Use current lockfile' }}
459
490
  />
460
491
  </div>
492
+ {#if (currentScript?.language == 'bun' || currentScript?.language == 'python3') && currentScript?.content != undefined}
493
+ {#if relativePaths.length > 0}
494
+ <div class="flex flex-row-reverse py-1">
495
+ {#if currentScript?.language == 'bun'}
496
+ <Toggle
497
+ size="xs"
498
+ bind:checked={typescriptBundlePreviewMode}
499
+ options={{
500
+ left: '',
501
+ right: 'bundle relative paths for preview',
502
+ rightTooltip:
503
+ '(Beta) Instead of only sending the current file for preview and rely on already deployed code for the common logic, bundle all code that is imported in relative paths'
504
+ }}
505
+ />
506
+ {:else if currentScript?.language == 'python3'}
507
+ <div class="text-xs text-yellow-500"
508
+ >relative imports detected<Tooltip
509
+ >Beware that when using relative imports, the code used in preview for those is
510
+ the one that is already deployed. If you make update to the common logic, you will
511
+ need to `wmill sync push` to see it reflected in the preview runs.</Tooltip
512
+ ></div
513
+ >
514
+ {/if}
515
+ </div>
516
+ {/if}
517
+ {/if}
461
518
  <div class="flex justify-center pt-1">
462
519
  {#if testIsLoading}
463
520
  <Button on:click={testJobLoader?.cancelJob} btnClasses="w-full" color="red" size="xs">
@@ -7,7 +7,7 @@ declare const __propDef: {
7
7
  icon?: any;
8
8
  href?: string | undefined;
9
9
  disabled?: boolean | undefined;
10
- type?: "action" | "delete" | undefined;
10
+ type?: "delete" | "action" | undefined;
11
11
  hide?: boolean | undefined;
12
12
  }[] | (() => {
13
13
  displayName: string;
@@ -15,7 +15,7 @@ declare const __propDef: {
15
15
  icon?: any;
16
16
  href?: string | undefined;
17
17
  disabled?: boolean | undefined;
18
- type?: "action" | "delete" | undefined;
18
+ type?: "delete" | "action" | undefined;
19
19
  hide?: boolean | undefined;
20
20
  }[]) | (() => Promise<{
21
21
  displayName: string;
@@ -23,7 +23,7 @@ declare const __propDef: {
23
23
  icon?: any;
24
24
  href?: string | undefined;
25
25
  disabled?: boolean | undefined;
26
- type?: "action" | "delete" | undefined;
26
+ type?: "delete" | "action" | undefined;
27
27
  hide?: boolean | undefined;
28
28
  }[]>) | undefined;
29
29
  justifyEnd?: boolean | undefined;
@@ -7,7 +7,7 @@ declare const __propDef: {
7
7
  icon?: any;
8
8
  href?: string | undefined;
9
9
  disabled?: boolean | undefined;
10
- type?: "action" | "delete" | undefined;
10
+ type?: "delete" | "action" | undefined;
11
11
  hide?: boolean | undefined;
12
12
  }[] | (() => {
13
13
  displayName: string;
@@ -15,7 +15,7 @@ declare const __propDef: {
15
15
  icon?: any;
16
16
  href?: string | undefined;
17
17
  disabled?: boolean | undefined;
18
- type?: "action" | "delete" | undefined;
18
+ type?: "delete" | "action" | undefined;
19
19
  hide?: boolean | undefined;
20
20
  }[]) | (() => Promise<{
21
21
  displayName: string;
@@ -23,7 +23,7 @@ declare const __propDef: {
23
23
  icon?: any;
24
24
  href?: string | undefined;
25
25
  disabled?: boolean | undefined;
26
- type?: "action" | "delete" | undefined;
26
+ type?: "delete" | "action" | undefined;
27
27
  hide?: boolean | undefined;
28
28
  }[]>) | undefined;
29
29
  };
@@ -419,6 +419,7 @@ let editor = undefined;
419
419
  {itemPicker}
420
420
  {lightweightMode}
421
421
  bind:nullable={schema.properties[argName].nullable}
422
+ bind:disabled={schema.properties[argName].disabled}
422
423
  type={schema.properties[argName].type}
423
424
  bind:oneOf={schema.properties[argName].oneOf}
424
425
  bind:format={schema.properties[argName].format}
@@ -125,9 +125,10 @@ import { editor as meditor, languages, KeyCode, KeyMod, Uri as mUri } from 'mona
125
125
  import EditorTheme from './EditorTheme.svelte';
126
126
  import { BIGQUERY_TYPES, MSSQL_TYPES, MYSQL_TYPES, POSTGRES_TYPES, SNOWFLAKE_TYPES } from '../consts';
127
127
  import { setupTypeAcquisition } from '../ata/index';
128
- import { initWasmTs, parseDeps } from '../infer';
128
+ import { initWasmTs } from '../infer';
129
129
  import { initVim } from './monaco_keybindings';
130
130
  import { buildWorkerDefinition } from '../monaco_workers/build_workers';
131
+ import { parseTypescriptDeps } from '../relative_imports';
131
132
  // import EditorTheme from './EditorTheme.svelte'
132
133
  let divEl = null;
133
134
  let editor = null;
@@ -1011,7 +1012,7 @@ async function setTypescriptExtraLibs() {
1011
1012
  ata = setupTypeAcquisition({
1012
1013
  projectName: 'Windmill',
1013
1014
  depsParser: (c) => {
1014
- return parseDeps(c);
1015
+ return parseTypescriptDeps(c);
1015
1016
  },
1016
1017
  root,
1017
1018
  scriptPath: path,
@@ -7,7 +7,7 @@ import { editor as meditor, type IDisposable } from 'monaco-editor';
7
7
  declare const __propDef: {
8
8
  props: {
9
9
  [x: string]: any;
10
- lang: 'typescript' | 'python' | 'go' | 'shell' | 'sql' | 'graphql' | 'powershell' | 'php' | 'css' | 'javascript' | 'rust';
10
+ lang: 'typescript' | 'python' | 'go' | 'shell' | 'sql' | 'graphql' | 'powershell' | 'php' | 'css' | 'javascript' | 'rust' | 'yaml';
11
11
  code?: string | undefined;
12
12
  cmdEnterAction?: (() => void) | undefined;
13
13
  formatAction?: (() => void) | undefined;
@@ -0,0 +1,44 @@
1
+ <script>import {} from '../gen';
2
+ import { onDestroy } from 'svelte';
3
+ export let job = undefined;
4
+ /** Execution duration of current active job (in ms) */
5
+ export let executionDuration = 0;
6
+ /** Is current job running more than specified value in `longDefinition` seconds */
7
+ export let longRunning = false;
8
+ /** What do we count as "long" (in ms)*/
9
+ export let longDefinition = 30_000;
10
+ /** How often component updates execution duration (in ms)
11
+ * Higher value -> more efficient component is, less accuracy it has
12
+ * Lower value -> less efficient component is, more accuracy it has
13
+ */
14
+ export let updateResolution = 5_000;
15
+ let startedAt = undefined;
16
+ let busy = false;
17
+ let interval;
18
+ // Detect when execution of job started
19
+ $: if (!busy &&
20
+ job &&
21
+ 'running' in job &&
22
+ (job.job_kind == 'script' || job?.job_kind == 'preview'))
23
+ start(job);
24
+ function start(job) {
25
+ busy = true;
26
+ startedAt = new Date(job?.started_at ?? '').getTime();
27
+ interval = setInterval(updateDuration, updateResolution);
28
+ }
29
+ function updateDuration() {
30
+ if (job?.type == 'CompletedJob') {
31
+ clearInterval(interval);
32
+ return;
33
+ }
34
+ if (startedAt)
35
+ executionDuration = Date.now() - startedAt;
36
+ // Detect long running
37
+ if (executionDuration >= longDefinition)
38
+ longRunning = true;
39
+ }
40
+ onDestroy(() => {
41
+ // Clear the interval when the component is destroyed
42
+ clearInterval(interval);
43
+ });
44
+ </script>
@@ -0,0 +1,24 @@
1
+ import { SvelteComponent } from "svelte";
2
+ import { type Job } from '../gen';
3
+ declare const __propDef: {
4
+ props: {
5
+ job?: Job | undefined;
6
+ /** Execution duration of current active job (in ms) */ executionDuration?: number | undefined;
7
+ /** Is current job running more than specified value in `longDefinition` seconds */ longRunning?: boolean | undefined;
8
+ /** What do we count as "long" (in ms)*/ longDefinition?: number | undefined;
9
+ /** How often component updates execution duration (in ms)
10
+ * Higher value -> more efficient component is, less accuracy it has
11
+ * Lower value -> less efficient component is, more accuracy it has
12
+ */ updateResolution?: number | undefined;
13
+ };
14
+ events: {
15
+ [evt: string]: CustomEvent<any>;
16
+ };
17
+ slots: {};
18
+ };
19
+ export type ExecutionDurationProps = typeof __propDef.props;
20
+ export type ExecutionDurationEvents = typeof __propDef.events;
21
+ export type ExecutionDurationSlots = typeof __propDef.slots;
22
+ export default class ExecutionDuration extends SvelteComponent<ExecutionDurationProps, ExecutionDurationEvents, ExecutionDurationSlots> {
23
+ }
24
+ export {};