windmill-components 1.504.6 → 1.511.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 (233) hide show
  1. package/package/ata/index.js +1 -1
  2. package/package/components/AppConnectInner.svelte +184 -29
  3. package/package/components/ArgInput.svelte +33 -103
  4. package/package/components/AuthSettings.svelte +45 -1
  5. package/package/components/Dev.svelte +31 -24
  6. package/package/components/DisplayResult.svelte +53 -26
  7. package/package/components/DisplayResult.svelte.d.ts +1 -1
  8. package/package/components/DynSelect.svelte +3 -3
  9. package/package/components/Editor.svelte +115 -88
  10. package/package/components/Editor.svelte.d.ts +30 -55
  11. package/package/components/EditorBar.svelte +2 -2
  12. package/package/components/ErrorOrRecoveryHandler.svelte +73 -67
  13. package/package/components/ErrorOrRecoveryHandler.svelte.d.ts +8 -24
  14. package/package/components/FlowBuilder.svelte +11 -2
  15. package/package/components/FlowJobResult.svelte +12 -17
  16. package/package/components/FlowJobResult.svelte.d.ts +5 -18
  17. package/package/components/FlowPreviewContent.svelte +13 -10
  18. package/package/components/FlowPreviewContent.svelte.d.ts +1 -1
  19. package/package/components/FlowPreviewResult.svelte +14 -6
  20. package/package/components/FlowStatusViewer.svelte +11 -24
  21. package/package/components/FlowStatusViewer.svelte.d.ts +19 -18
  22. package/package/components/FlowStatusViewerInner.svelte +110 -131
  23. package/package/components/FlowStatusViewerInner.svelte.d.ts +20 -18
  24. package/package/components/GitDiffPreview.svelte +55 -0
  25. package/package/components/GitDiffPreview.svelte.d.ts +13 -0
  26. package/package/components/HistoricInputs.svelte +2 -2
  27. package/package/components/HttpAgentWorkerDrawer.svelte +1 -1
  28. package/package/components/InitGitRepoPopover.svelte +410 -0
  29. package/package/components/InitGitRepoPopover.svelte.d.ts +13 -0
  30. package/package/components/InstanceSetting.svelte +21 -9
  31. package/package/components/InstanceSettings.svelte +16 -3
  32. package/package/components/JobLoader.svelte +567 -0
  33. package/package/components/JobLoader.svelte.d.ts +53 -0
  34. package/package/components/JobLogs.svelte +6 -4
  35. package/package/components/JobLogs.svelte.d.ts +5 -18
  36. package/package/components/JsonEditor.svelte +11 -11
  37. package/package/components/JsonEditor.svelte.d.ts +14 -56
  38. package/package/components/Label.svelte +6 -11
  39. package/package/components/Label.svelte.d.ts +14 -39
  40. package/package/components/LightweightResourcePicker.svelte +18 -39
  41. package/package/components/LightweightResourcePicker.svelte.d.ts +6 -22
  42. package/package/components/LogViewer.svelte +35 -41
  43. package/package/components/LogViewer.svelte.d.ts +6 -20
  44. package/package/components/ModulePreviewResultViewer.svelte +3 -1
  45. package/package/components/ModulePreviewResultViewer.svelte.d.ts +1 -0
  46. package/package/components/ModuleTest.svelte +16 -11
  47. package/package/components/NumberTypeNarrowing.svelte +13 -16
  48. package/package/components/NumberTypeNarrowing.svelte.d.ts +4 -18
  49. package/package/components/PullGitRepoPopover.svelte +355 -0
  50. package/package/components/PullGitRepoPopover.svelte.d.ts +18 -0
  51. package/package/components/ResourceTypePicker.svelte +20 -17
  52. package/package/components/ResourceTypePicker.svelte.d.ts +7 -6
  53. package/package/components/S3FilePicker.svelte +5 -3
  54. package/package/components/SavedInputs.svelte +2 -2
  55. package/package/components/ScriptBuilder.svelte +4 -3
  56. package/package/components/ScriptEditor.svelte +34 -31
  57. package/package/components/ScriptEditor.svelte.d.ts +3 -3
  58. package/package/components/Section.svelte +7 -20
  59. package/package/components/Section.svelte.d.ts +20 -47
  60. package/package/components/ServiceLogsInner.svelte +2 -1
  61. package/package/components/ServiceLogsInner.svelte.d.ts +1 -0
  62. package/package/components/SimpleEditor.svelte +4 -4
  63. package/package/components/SimpleEditor.svelte.d.ts +1 -0
  64. package/package/components/SqlRepl.svelte +0 -1
  65. package/package/components/Subsection.svelte +10 -12
  66. package/package/components/Subsection.svelte.d.ts +15 -39
  67. package/package/components/UserSettings.svelte +1 -1
  68. package/package/components/WorkerGroup.svelte +260 -165
  69. package/package/components/WorkerGroup.svelte.d.ts +2 -0
  70. package/package/components/WorkerTagPicker.svelte +3 -3
  71. package/package/components/WorkerTagSelect.svelte +33 -4
  72. package/package/components/apps/components/buttons/AppButton.svelte +7 -1
  73. package/package/components/apps/components/buttons/AppButton.svelte.d.ts +1 -0
  74. package/package/components/apps/components/display/AppCustomComponent.svelte +1 -1
  75. package/package/components/apps/components/display/AppDisplayComponentByJobId.svelte +16 -11
  76. package/package/components/apps/components/display/AppJobIdLogComponent.svelte +13 -10
  77. package/package/components/apps/components/display/AppMenu.svelte +5 -0
  78. package/package/components/apps/components/display/dbtable/AppDbExplorer.svelte +3 -3
  79. package/package/components/apps/components/display/dbtable/DeleteRow.svelte +3 -3
  80. package/package/components/apps/components/display/dbtable/InsertRowRunnable.svelte +3 -3
  81. package/package/components/apps/components/display/dbtable/UpdateCell.svelte +3 -3
  82. package/package/components/apps/components/display/table/AppAggridInfiniteTable.svelte +3 -3
  83. package/package/components/apps/components/helpers/RunnableComponent.svelte +65 -54
  84. package/package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +5 -5
  85. package/package/components/apps/components/inputs/AppUserResource.svelte +26 -8
  86. package/package/components/apps/editor/AppEditorHeader.svelte +11 -5
  87. package/package/components/apps/editor/AppJobsDrawer.svelte +5 -5
  88. package/package/components/apps/editor/RunnableJobPanel.svelte +4 -4
  89. package/package/components/apps/editor/component/components.d.ts +12 -0
  90. package/package/components/apps/editor/component/components.js +19 -7
  91. package/package/components/assets/AssetButtons.svelte +38 -0
  92. package/package/components/assets/AssetButtons.svelte.d.ts +15 -0
  93. package/package/components/assets/AssetsDropdownButton.svelte +60 -72
  94. package/package/components/assets/AssetsDropdownButton.svelte.d.ts +3 -4
  95. package/package/components/assets/AssetsUsageDrawer.svelte +10 -10
  96. package/package/components/assets/JobAssetsViewer.svelte +79 -0
  97. package/package/components/assets/JobAssetsViewer.svelte.d.ts +7 -0
  98. package/package/components/assets/README_DEV.md +0 -0
  99. package/package/components/assets/lib.d.ts +9 -1
  100. package/package/components/assets/lib.js +48 -7
  101. package/package/components/common/fileUpload/FileUpload.svelte +126 -84
  102. package/package/components/common/fileUpload/FileUpload.svelte.d.ts +13 -3
  103. package/package/components/common/fileUpload/S3ArgInput.svelte +111 -0
  104. package/package/components/common/fileUpload/S3ArgInput.svelte.d.ts +21 -0
  105. package/package/components/common/table/ScriptRow.svelte +3 -1
  106. package/package/components/copilot/AIFormSettings.svelte +3 -4
  107. package/package/components/copilot/AIFormSettings.svelte.d.ts +5 -19
  108. package/package/components/copilot/autocomplete/Autocompletor.d.ts +3 -1
  109. package/package/components/copilot/autocomplete/Autocompletor.js +269 -35
  110. package/package/components/copilot/autocomplete/request.d.ts +3 -0
  111. package/package/components/copilot/autocomplete/request.js +15 -7
  112. package/package/components/copilot/chat/AIChatDisplay.svelte +8 -0
  113. package/package/components/copilot/chat/AIChatManager.svelte.js +13 -8
  114. package/package/components/copilot/chat/flow/ModuleAcceptReject.svelte +5 -5
  115. package/package/components/copilot/chat/flow/core.d.ts +1 -1
  116. package/package/components/copilot/chat/flow/core.js +2 -38
  117. package/package/components/copilot/chat/navigator/apiTools.d.ts +8 -0
  118. package/package/components/copilot/chat/navigator/apiTools.js +95 -15
  119. package/package/components/copilot/chat/navigator/core.d.ts +1 -1
  120. package/package/components/copilot/chat/navigator/core.js +2 -1
  121. package/package/components/copilot/chat/script/core.d.ts +11 -2
  122. package/package/components/copilot/chat/script/core.js +165 -23
  123. package/package/components/copilot/chat/shared.d.ts +10 -0
  124. package/package/components/copilot/chat/shared.js +56 -0
  125. package/package/components/copilot/lib.d.ts +1 -0
  126. package/package/components/copilot/lib.js +30 -9
  127. package/package/components/custom_ui.d.ts +1 -0
  128. package/package/components/flows/FlowAssetsHandler.svelte +133 -0
  129. package/package/components/flows/FlowAssetsHandler.svelte.d.ts +14 -0
  130. package/package/components/flows/content/FlowModuleCache.svelte +4 -4
  131. package/package/components/flows/content/FlowModuleCache.svelte.d.ts +4 -18
  132. package/package/components/flows/content/FlowModuleComponent.svelte +16 -19
  133. package/package/components/flows/content/FlowModuleDeleteAfterUse.svelte +3 -4
  134. package/package/components/flows/content/FlowModuleDeleteAfterUse.svelte.d.ts +4 -18
  135. package/package/components/flows/content/FlowModuleSleep.svelte +6 -7
  136. package/package/components/flows/content/FlowModuleSleep.svelte.d.ts +4 -18
  137. package/package/components/flows/content/FlowModuleSuspend.svelte +19 -17
  138. package/package/components/flows/content/FlowModuleSuspend.svelte.d.ts +4 -18
  139. package/package/components/flows/content/FlowModuleTimeout.svelte +4 -4
  140. package/package/components/flows/content/FlowModuleTimeout.svelte.d.ts +4 -18
  141. package/package/components/flows/flowStore.d.ts +1 -1
  142. package/package/components/flows/map/FlowModuleSchemaItem.svelte +1 -0
  143. package/package/components/flows/propPicker/OutputPicker.svelte +9 -4
  144. package/package/components/flows/scheduleUtils.js +1 -1
  145. package/package/components/flows/types.d.ts +2 -1
  146. package/package/components/graph/FlowGraphV2.svelte +8 -104
  147. package/package/components/graph/FlowGraphV2.svelte.d.ts +0 -2
  148. package/package/components/graph/graphBuilder.svelte.d.ts +6 -3
  149. package/package/components/graph/graphBuilder.svelte.js +35 -9
  150. package/package/components/graph/renderers/edges/BaseEdge.svelte +2 -5
  151. package/package/components/graph/renderers/edges/BaseEdge.svelte.d.ts +1 -0
  152. package/package/components/graph/renderers/nodes/AssetNode.svelte +23 -20
  153. package/package/components/graph/renderers/nodes/AssetNode.svelte.d.ts +5 -10
  154. package/package/components/graph/renderers/nodes/AssetsOverflowedNode.svelte +1 -1
  155. package/package/components/graph/util.js +1 -1
  156. package/package/components/home/ItemsList.svelte +2 -0
  157. package/package/components/icons/AssetGenericIcon.svelte +0 -3
  158. package/package/components/jobs/JobPreview.svelte +10 -6
  159. package/package/components/raw_apps/RawAppInlineScriptRunnable.svelte +13 -12
  160. package/package/components/runs/BatchReRunOptionsPane.svelte +5 -1
  161. package/package/components/runs/JobPreview.svelte +26 -16
  162. package/package/components/runs/{JobLoader.svelte.d.ts → JobsLoader.svelte.d.ts} +3 -3
  163. package/package/components/runs/NoWorkerWithTagWarning.svelte +2 -2
  164. package/package/components/runs/NoWorkerWithTagWarning.svelte.d.ts +1 -0
  165. package/package/components/runs/RunsFilter.svelte.d.ts +1 -1
  166. package/package/components/scriptEditor/LogPanel.svelte +3 -2
  167. package/package/components/script_builder.d.ts +2 -2
  168. package/package/components/settings/CreateToken.svelte +76 -41
  169. package/package/components/settings/CreateToken.svelte.d.ts +1 -1
  170. package/package/components/settings/ScopeSelector.svelte +613 -0
  171. package/package/components/settings/ScopeSelector.svelte.d.ts +8 -0
  172. package/package/components/settings/TokenDisplay.svelte +103 -0
  173. package/package/components/settings/TokenDisplay.svelte.d.ts +10 -0
  174. package/package/components/settings/TokensTable.svelte +70 -349
  175. package/package/components/sidebar/CriticalAlertModal.svelte +3 -0
  176. package/package/components/triggers/DeleteTriggerButton.svelte +1 -1
  177. package/package/components/triggers/TriggerEditorToolbar.svelte +3 -3
  178. package/package/components/triggers/TriggerRetriesAndErrorHandler.svelte +55 -0
  179. package/package/components/triggers/TriggerRetriesAndErrorHandler.svelte.d.ts +13 -0
  180. package/package/components/triggers/TriggersEditor.svelte +45 -3
  181. package/package/components/triggers/TriggersWrapper.svelte +2 -2
  182. package/package/components/triggers/gcp/GcpTriggerEditorInner.svelte +47 -6
  183. package/package/components/triggers/gcp/utils.js +9 -1
  184. package/package/components/triggers/http/OpenAPISpecGenerator.svelte +3 -2
  185. package/package/components/triggers/http/RouteEditorConfigSection.svelte +26 -23
  186. package/package/components/triggers/http/RouteEditorConfigSection.svelte.d.ts +5 -19
  187. package/package/components/triggers/http/RouteEditorInner.svelte +219 -175
  188. package/package/components/triggers/http/RouteEditorInner.svelte.d.ts +6 -2
  189. package/package/components/triggers/http/utils.js +9 -3
  190. package/package/components/triggers/kafka/KafkaTriggerEditorInner.svelte +47 -6
  191. package/package/components/triggers/kafka/utils.js +9 -1
  192. package/package/components/triggers/mqtt/MqttEditorConfigSection.svelte +4 -132
  193. package/package/components/triggers/mqtt/MqttEditorConfigSection.svelte.d.ts +2 -5
  194. package/package/components/triggers/mqtt/MqttTriggerEditorInner.svelte +182 -13
  195. package/package/components/triggers/mqtt/utils.js +9 -1
  196. package/package/components/triggers/nats/NatsTriggerEditorInner.svelte +47 -6
  197. package/package/components/triggers/nats/utils.js +9 -1
  198. package/package/components/triggers/postgres/PostgresTriggerEditorInner.svelte +41 -2
  199. package/package/components/triggers/postgres/utils.js +9 -1
  200. package/package/components/triggers/schedules/ScheduleEditorInner.svelte +38 -92
  201. package/package/components/triggers/sqs/SqsTriggerEditorInner.svelte +47 -6
  202. package/package/components/triggers/sqs/utils.js +9 -1
  203. package/package/components/triggers/utils.js +12 -0
  204. package/package/components/triggers/websocket/WebsocketTriggerEditorInner.svelte +47 -6
  205. package/package/components/triggers/websocket/utils.js +11 -1
  206. package/package/components/workspaceSettings/AISettings.svelte +0 -2
  207. package/package/components/workspaceSettings/FilterList.svelte +56 -0
  208. package/package/components/workspaceSettings/FilterList.svelte.d.ts +8 -0
  209. package/package/components/workspaceSettings/GitSyncFilterSettings.svelte +785 -0
  210. package/package/components/workspaceSettings/GitSyncFilterSettings.svelte.d.ts +18 -0
  211. package/package/gen/core/OpenAPI.js +1 -1
  212. package/package/gen/schemas.gen.d.ts +305 -23
  213. package/package/gen/schemas.gen.js +305 -23
  214. package/package/gen/services.gen.d.ts +33 -1
  215. package/package/gen/services.gen.js +66 -2
  216. package/package/gen/types.gen.d.ts +216 -11
  217. package/package/history.svelte.js +0 -2
  218. package/package/hub.d.ts +1 -0
  219. package/package/hubPaths.json +5 -2
  220. package/package/infer.js +16 -10
  221. package/package/svelte5Utils.svelte.d.ts +1 -0
  222. package/package/svelte5Utils.svelte.js +25 -18
  223. package/package/toast.js +10 -0
  224. package/package/utils.d.ts +3 -2
  225. package/package/utils.js +20 -5
  226. package/package.json +11 -11
  227. package/package/components/ResultJobLoader.svelte +0 -219
  228. package/package/components/ResultJobLoader.svelte.d.ts +0 -52
  229. package/package/components/TestJobLoader.svelte +0 -274
  230. package/package/components/TestJobLoader.svelte.d.ts +0 -43
  231. package/package/components/icons/AssetVarIcon.svelte +0 -31
  232. package/package/components/icons/AssetVarIcon.svelte.d.ts +0 -9
  233. /package/package/components/runs/{JobLoader.svelte → JobsLoader.svelte} +0 -0
package/package/toast.js CHANGED
@@ -1,6 +1,16 @@
1
1
  import Toast from './components/Toast.svelte';
2
2
  import { toast } from '@zerodevx/svelte-toast';
3
3
  export function sendUserToast(message, error = false, actions = [], errorMessage = undefined, duration = 5000) {
4
+ if (globalThis.windmillToast) {
5
+ globalThis.windmillToast({
6
+ message,
7
+ error,
8
+ actions,
9
+ errorMessage,
10
+ duration
11
+ });
12
+ return;
13
+ }
4
14
  toast.push({
5
15
  component: {
6
16
  // https://github.com/zerodevx/svelte-toast/issues/115
@@ -32,12 +32,11 @@ export declare namespace OpenApi {
32
32
  export declare function isJobCancelable(j: Job): boolean;
33
33
  export declare function isJobReRunnable(j: Job): boolean;
34
34
  export declare const WORKER_NAME_PREFIX = "wk";
35
- export declare const AGENT_WORKER_NAME_PREFIX = "ag";
36
- export declare function isAgentWorkerShell(workerName: string): boolean;
37
35
  export declare function isJobSelectable(selectionType: RunsSelectionMode): (j: Job) => boolean;
38
36
  export declare function validateUsername(username: string): string;
39
37
  export declare function parseQueryParams(url: string | undefined): Record<string, string>;
40
38
  export declare function displayDateOnly(dateString: string | Date | undefined): string;
39
+ export declare function retrieveCommonWorkerPrefix(workerName: string): string;
41
40
  export declare function subtractDaysFromDateString(dateString: string | undefined, days: number): string | undefined;
42
41
  export declare function displayDate(dateString: string | Date | undefined, displaySecond?: boolean, displayDate?: boolean): string;
43
42
  export declare function displayTime(dateString: string | Date | undefined): string;
@@ -209,3 +208,5 @@ export declare function parseS3Object(s3Object: S3Object): {
209
208
  };
210
209
  export declare function formatS3Object(s3Object: S3Object): S3Uri;
211
210
  export declare function isS3Uri(uri: string): uri is S3Uri;
211
+ export declare function uniqueBy<T>(array: T[], key: (t: T) => any): T[];
212
+ export declare function pruneNullishArrayWithSet<T>(array: (T | null | undefined)[]): T[];
package/package/utils.js CHANGED
@@ -75,11 +75,6 @@ export function isJobReRunnable(j) {
75
75
  return (j.job_kind === 'script' || j.job_kind === 'flow') && j.parent_job === undefined;
76
76
  }
77
77
  export const WORKER_NAME_PREFIX = 'wk';
78
- export const AGENT_WORKER_NAME_PREFIX = 'ag';
79
- const SSH_AGENT_WORKER_SUFFIX = '/ssh';
80
- export function isAgentWorkerShell(workerName) {
81
- return (workerName.startsWith(AGENT_WORKER_NAME_PREFIX) && workerName.endsWith(SSH_AGENT_WORKER_SUFFIX));
82
- }
83
78
  export function isJobSelectable(selectionType) {
84
79
  const f = {
85
80
  cancel: isJobCancelable,
@@ -122,6 +117,10 @@ export function displayDateOnly(dateString) {
122
117
  });
123
118
  }
124
119
  }
120
+ export function retrieveCommonWorkerPrefix(workerName) {
121
+ const lastDashIndex = workerName.lastIndexOf('-');
122
+ return workerName.substring(0, lastDashIndex);
123
+ }
125
124
  export function subtractDaysFromDateString(dateString, days) {
126
125
  if (dateString == undefined) {
127
126
  return undefined;
@@ -1224,3 +1223,19 @@ export function isS3Uri(uri) {
1224
1223
  const match = uri.match(/^s3:\/\/([^/]*)\/(.*)$/);
1225
1224
  return !!match && match.length === 3;
1226
1225
  }
1226
+ export function uniqueBy(array, key) {
1227
+ const seen = new Set();
1228
+ return array.filter((item) => {
1229
+ const value = key(item);
1230
+ if (seen.has(value)) {
1231
+ return false;
1232
+ }
1233
+ else {
1234
+ seen.add(value);
1235
+ return true;
1236
+ }
1237
+ });
1238
+ }
1239
+ export function pruneNullishArrayWithSet(array) {
1240
+ return array.filter((item) => item !== null && item !== undefined);
1241
+ }
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "windmill-components",
3
- "version": "1.504.6",
3
+ "version": "1.511.0",
4
4
  "scripts": {
5
5
  "dev": "vite dev",
6
6
  "build": "vite build",
7
7
  "preview": "vite preview",
8
- "postinstall": "if [ -f ./scripts/untar_ui_builder.js ]; then node ./scripts/untar_ui_builder.js && node ./scripts/patch_files.js; fi",
8
+ "postinstall": "node -e \"if (require('fs').existsSync('./scripts/untar_ui_builder.js')) { require('child_process').execSync('node ./scripts/untar_ui_builder.js && node ./scripts/patch_files.js', {stdio: 'inherit'}) }\"",
9
9
  "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --threshold warning",
10
10
  "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
11
11
  "lint": "prettier --ignore-path .gitignore --check --plugin-search-dir=. . && eslint --ignore-path .gitignore .",
@@ -146,10 +146,10 @@
146
146
  "windmill-parser-wasm-java": "^1.478.1",
147
147
  "windmill-parser-wasm-nu": "^1.474.1",
148
148
  "windmill-parser-wasm-php": "^1.429.0",
149
- "windmill-parser-wasm-py": "^1.504.0",
150
- "windmill-parser-wasm-regex": "^1.504.0",
149
+ "windmill-parser-wasm-py": "^1.510.0",
150
+ "windmill-parser-wasm-regex": "^1.510.0",
151
151
  "windmill-parser-wasm-rust": "^1.429.0",
152
- "windmill-parser-wasm-ts": "^1.504.0",
152
+ "windmill-parser-wasm-ts": "^1.510.0",
153
153
  "windmill-parser-wasm-yaml": "^1.429.0",
154
154
  "windmill-sql-datatype-parser-wasm": "^1.318.0",
155
155
  "xterm": "^5.3.0",
@@ -180,10 +180,10 @@
180
180
  "types": "./package/components/scriptBuilder.d.ts",
181
181
  "default": "./package/components/scriptBuilder.js"
182
182
  },
183
- "./components/TestJobLoader.svelte": {
184
- "types": "./package/components/TestJobLoader.svelte.d.ts",
185
- "svelte": "./package/components/TestJobLoader.svelte",
186
- "default": "./package/components/TestJobLoader.svelte"
183
+ "./components/JobLoader.svelte": {
184
+ "types": "./package/components/JobLoader.svelte.d.ts",
185
+ "svelte": "./package/components/JobLoader.svelte",
186
+ "default": "./package/components/JobLoader.svelte"
187
187
  },
188
188
  "./components/common/kbd/Kbd.svelte": {
189
189
  "types": "./package/components/common/kbd/Kbd.svelte.d.ts",
@@ -404,8 +404,8 @@
404
404
  "components/IconedResourceType.svelte": [
405
405
  "./package/components/IconedResourceType.svelte.d.ts"
406
406
  ],
407
- "components/TestJobLoader.svelte": [
408
- "./package/components/TestJobLoader.svelte.d.ts"
407
+ "components/JobLoader.svelte": [
408
+ "./package/components/JobLoader.svelte.d.ts"
409
409
  ],
410
410
  "components/SchemaForm.svelte": [
411
411
  "./package/components/SchemaForm.svelte.d.ts"
@@ -1,219 +0,0 @@
1
- <script lang="ts">import { JobService } from '../gen';
2
- import { workspaceStore } from '../stores';
3
- import { onDestroy, tick, untrack } from 'svelte';
4
- import { createEventDispatcher } from 'svelte';
5
- let { isLoading = $bindable(false), job = $bindable(undefined), workspaceOverride = undefined, notfound = $bindable(false), isEditor = false, allowConcurentRequests = false } = $props();
6
- const dispatch = createEventDispatcher();
7
- let workspace = $derived(workspaceOverride ?? $workspaceStore);
8
- let syncIteration = 0;
9
- let errorIteration = 0;
10
- let ITERATIONS_BEFORE_SLOW_REFRESH = 10;
11
- let ITERATIONS_BEFORE_SUPER_SLOW_REFRESH = 100;
12
- let lastStartedAt = Date.now();
13
- let currentId = $state(undefined);
14
- $effect(() => {
15
- let newIsLoading = currentId !== undefined;
16
- untrack(() => {
17
- if (isLoading !== newIsLoading) {
18
- isLoading = newIsLoading;
19
- }
20
- });
21
- });
22
- let running = false;
23
- let lastCallbacks = undefined;
24
- let finished = [];
25
- export async function abstractRun(fn, callbacks) {
26
- try {
27
- running = false;
28
- isLoading = true;
29
- clearCurrentJob();
30
- const startedAt = Date.now();
31
- const testId = await fn();
32
- lastCallbacks = callbacks;
33
- if (lastStartedAt < startedAt || allowConcurentRequests) {
34
- lastStartedAt = startedAt;
35
- if (testId) {
36
- dispatch('started', testId);
37
- try {
38
- await watchJob(testId, callbacks);
39
- }
40
- catch (e) {
41
- callbacks?.cancel();
42
- dispatch('cancel', testId);
43
- if (currentId === testId) {
44
- currentId = undefined;
45
- }
46
- }
47
- }
48
- }
49
- return testId;
50
- }
51
- catch (err) {
52
- callbacks?.error(err);
53
- // if error happens on submitting the job, reset UI state so the user can try again
54
- isLoading = false;
55
- currentId = undefined;
56
- job = undefined;
57
- throw err;
58
- }
59
- }
60
- export async function runScriptByPath(path, args, callbacks) {
61
- return abstractRun(() => JobService.runScriptByPath({
62
- workspace: workspace,
63
- path: path,
64
- requestBody: args,
65
- skipPreprocessor: true
66
- }), callbacks);
67
- }
68
- export async function runScriptByHash(hash, args, callbacks) {
69
- return abstractRun(() => JobService.runScriptByHash({
70
- workspace: workspace,
71
- hash: hash,
72
- requestBody: args,
73
- skipPreprocessor: true
74
- }), callbacks);
75
- }
76
- export async function runFlowByPath(path, args, callbacks) {
77
- return abstractRun(() => JobService.runFlowByPath({
78
- workspace: workspace,
79
- path: path ?? '',
80
- requestBody: args,
81
- skipPreprocessor: true
82
- }), callbacks);
83
- }
84
- export async function runPreview(path, code, lang, args, tag, callbacks) {
85
- return abstractRun(() => JobService.runScriptPreview({
86
- workspace: workspace,
87
- requestBody: {
88
- path,
89
- content: code,
90
- args,
91
- language: lang,
92
- tag
93
- }
94
- }), callbacks);
95
- }
96
- export async function cancelJob() {
97
- const id = currentId;
98
- if (id) {
99
- lastCallbacks?.cancel();
100
- lastCallbacks = undefined;
101
- dispatch('cancel', id);
102
- currentId = undefined;
103
- try {
104
- await JobService.cancelQueuedJob({
105
- workspace: workspace ?? '',
106
- id,
107
- requestBody: {}
108
- });
109
- }
110
- catch (err) {
111
- console.error(err);
112
- }
113
- }
114
- }
115
- export async function clearCurrentJob() {
116
- if (currentId && !allowConcurentRequests) {
117
- lastCallbacks?.cancel();
118
- dispatch('cancel', currentId);
119
- lastCallbacks = undefined;
120
- job = undefined;
121
- await cancelJob();
122
- }
123
- }
124
- export async function watchJob(testId, callbacks) {
125
- syncIteration = 0;
126
- errorIteration = 0;
127
- currentId = testId;
128
- job = undefined;
129
- const isCompleted = await loadTestJob(testId, callbacks);
130
- if (!isCompleted) {
131
- setTimeout(() => {
132
- syncer(testId, callbacks);
133
- }, 50);
134
- }
135
- }
136
- async function loadTestJob(id, callbacks) {
137
- let isCompleted = false;
138
- if (currentId === id || allowConcurentRequests) {
139
- try {
140
- let maybe_job = await JobService.getCompletedJobResultMaybe({
141
- workspace: workspace ?? '',
142
- id,
143
- getStarted: isEditor
144
- });
145
- if (maybe_job.started && !running) {
146
- running = true;
147
- dispatch('running', id);
148
- }
149
- if (maybe_job.completed) {
150
- isCompleted = true;
151
- if (currentId === id || allowConcurentRequests) {
152
- job = { ...maybe_job, id };
153
- await tick();
154
- if (!job?.success && typeof job?.result == 'object' && 'error' in (job?.result ?? {})) {
155
- callbacks?.error(job.result.error);
156
- dispatch('doneError', {
157
- id,
158
- error: job.result.error
159
- });
160
- }
161
- else {
162
- callbacks?.done(job.result);
163
- dispatch('done', job);
164
- }
165
- finished.push(id);
166
- if (!allowConcurentRequests) {
167
- currentId = undefined;
168
- }
169
- }
170
- else {
171
- callbacks?.cancel();
172
- dispatch('cancel', id);
173
- }
174
- }
175
- notfound = false;
176
- }
177
- catch (err) {
178
- errorIteration += 1;
179
- if (errorIteration == 5) {
180
- notfound = true;
181
- await clearCurrentJob();
182
- dispatch('doneError', err);
183
- }
184
- console.warn(err);
185
- }
186
- return isCompleted;
187
- }
188
- else {
189
- callbacks?.cancel();
190
- dispatch('cancel', id);
191
- return true;
192
- }
193
- }
194
- async function syncer(id, callbacks) {
195
- if ((currentId != id && !allowConcurentRequests) || finished.includes(id)) {
196
- callbacks?.cancel();
197
- dispatch('cancel', id);
198
- return;
199
- }
200
- syncIteration++;
201
- let r = await loadTestJob(id, callbacks);
202
- if (r) {
203
- return;
204
- }
205
- let nextIteration = 50;
206
- if (syncIteration > ITERATIONS_BEFORE_SLOW_REFRESH) {
207
- nextIteration = 500;
208
- }
209
- else if (syncIteration > ITERATIONS_BEFORE_SUPER_SLOW_REFRESH) {
210
- nextIteration = 2000;
211
- }
212
- setTimeout(() => {
213
- syncer(id, callbacks);
214
- }, nextIteration);
215
- }
216
- onDestroy(async () => {
217
- currentId = undefined;
218
- });
219
- </script>
@@ -1,52 +0,0 @@
1
- import type { SupportedLanguage } from '../common';
2
- interface Props {
3
- isLoading?: boolean;
4
- job?: {
5
- completed: boolean;
6
- result: any;
7
- id: string;
8
- success?: boolean;
9
- } | undefined;
10
- workspaceOverride?: string | undefined;
11
- notfound?: boolean;
12
- isEditor?: boolean;
13
- allowConcurentRequests?: boolean;
14
- }
15
- type Callbacks = {
16
- done: (x: any) => void;
17
- cancel: () => void;
18
- error: (err: Error) => void;
19
- };
20
- interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
21
- new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
22
- $$bindings?: Bindings;
23
- } & Exports;
24
- (internal: unknown, props: Props & {
25
- $$events?: Events;
26
- $$slots?: Slots;
27
- }): Exports & {
28
- $set?: any;
29
- $on?: any;
30
- };
31
- z_$$bindings?: Bindings;
32
- }
33
- declare const ResultJobLoader: $$__sveltets_2_IsomorphicComponent<Props, {
34
- started: CustomEvent<any>;
35
- cancel: CustomEvent<any>;
36
- running: CustomEvent<any>;
37
- doneError: CustomEvent<any>;
38
- done: CustomEvent<any>;
39
- } & {
40
- [evt: string]: CustomEvent<any>;
41
- }, {}, {
42
- abstractRun: (fn: () => Promise<string>, callbacks?: Callbacks) => Promise<string>;
43
- runScriptByPath: (path: string, args: Record<string, any>, callbacks?: Callbacks) => Promise<string>;
44
- runScriptByHash: (hash: string, args: Record<string, any>, callbacks?: Callbacks) => Promise<string>;
45
- runFlowByPath: (path: string | undefined, args: Record<string, any>, callbacks?: Callbacks) => Promise<string>;
46
- runPreview: (path: string | undefined, code: string, lang: SupportedLanguage, args: Record<string, any>, tag: string | undefined, callbacks?: Callbacks) => Promise<string>;
47
- cancelJob: () => Promise<void>;
48
- clearCurrentJob: () => Promise<void>;
49
- watchJob: (testId: string, callbacks?: Callbacks) => Promise<void>;
50
- }, "job" | "isLoading" | "notfound">;
51
- type ResultJobLoader = InstanceType<typeof ResultJobLoader>;
52
- export default ResultJobLoader;
@@ -1,274 +0,0 @@
1
- <script lang="ts">import { JobService } from '../gen';
2
- import { workspaceStore } from '../stores';
3
- import { onDestroy, tick, untrack } from 'svelte';
4
- import { createEventDispatcher } from 'svelte';
5
- import { sendUserToast } from '../toast';
6
- import { isScriptPreview } from '../utils';
7
- let { isLoading = $bindable(false), job = $bindable(undefined), workspaceOverride = undefined, notfound = $bindable(false), jobUpdateLastFetch = $bindable(undefined), toastError = false, lazyLogs = false, scriptProgress = $bindable(undefined), children } = $props();
8
- /// Last time asked for job progress
9
- let lastTimeCheckedProgress = undefined;
10
- /// Will try to poll progress every 5s and if once progress returned was not undefined, will be ignored
11
- /// and getProgressRate will be used instead
12
- const getProgressRetryRate = 5000;
13
- /// How often loader poll progress
14
- const getProgressRate = 1000;
15
- const dispatch = createEventDispatcher();
16
- let workspace = $derived(workspaceOverride ?? $workspaceStore);
17
- let syncIteration = 0;
18
- let errorIteration = 0;
19
- let logOffset = 0;
20
- let ITERATIONS_BEFORE_SLOW_REFRESH = 10;
21
- let ITERATIONS_BEFORE_SUPER_SLOW_REFRESH = 100;
22
- let lastStartedAt = Date.now();
23
- let currentId = $state(undefined);
24
- $effect(() => {
25
- let newIsLoading = currentId !== undefined;
26
- untrack(() => {
27
- if (isLoading !== newIsLoading) {
28
- isLoading = newIsLoading;
29
- }
30
- });
31
- });
32
- export async function abstractRun(fn) {
33
- try {
34
- isLoading = true;
35
- clearCurrentJob();
36
- const startedAt = Date.now();
37
- const testId = await fn();
38
- if (lastStartedAt < startedAt) {
39
- lastStartedAt = startedAt;
40
- if (testId) {
41
- try {
42
- await watchJob(testId);
43
- }
44
- catch {
45
- if (currentId === testId) {
46
- currentId = undefined;
47
- }
48
- }
49
- }
50
- }
51
- return testId;
52
- }
53
- catch (err) {
54
- if (toastError) {
55
- sendUserToast(err.body, true);
56
- }
57
- // if error happens on submitting the job, reset UI state so the user can try again
58
- isLoading = false;
59
- currentId = undefined;
60
- job = undefined;
61
- throw err;
62
- }
63
- }
64
- export async function runScriptByPath(path, args) {
65
- return abstractRun(() => JobService.runScriptByPath({
66
- workspace: $workspaceStore,
67
- path: path ?? '',
68
- requestBody: args,
69
- skipPreprocessor: true
70
- }));
71
- }
72
- export async function runFlowByPath(path, args) {
73
- return abstractRun(() => JobService.runFlowByPath({
74
- workspace: $workspaceStore,
75
- path: path ?? '',
76
- requestBody: args,
77
- skipPreprocessor: true
78
- }));
79
- }
80
- export async function getLogs() {
81
- if (job) {
82
- const getUpdate = await JobService.getJobUpdates({
83
- workspace: workspace,
84
- id: job.id,
85
- running: `running` in job && job.running,
86
- logOffset: job.logs?.length ?? 0
87
- });
88
- if ((job?.logs ?? '').length == 0) {
89
- job.logs = getUpdate.new_logs ?? '';
90
- logOffset = getUpdate.log_offset ?? 0;
91
- }
92
- }
93
- }
94
- export async function runPreview(path, code, lang, args, tag, lock, hash) {
95
- // Reset in case we rerun job without reloading
96
- scriptProgress = undefined;
97
- lastTimeCheckedProgress = undefined;
98
- return abstractRun(() => JobService.runScriptPreview({
99
- workspace: $workspaceStore,
100
- requestBody: {
101
- path,
102
- content: code,
103
- args,
104
- language: lang,
105
- tag,
106
- lock,
107
- script_hash: hash
108
- }
109
- }));
110
- }
111
- export async function cancelJob() {
112
- const id = currentId;
113
- if (id) {
114
- dispatch('cancel', id);
115
- currentId = undefined;
116
- try {
117
- await JobService.cancelQueuedJob({
118
- workspace: $workspaceStore ?? '',
119
- id,
120
- requestBody: {}
121
- });
122
- }
123
- catch (err) {
124
- console.error(err);
125
- }
126
- }
127
- }
128
- export async function clearCurrentJob() {
129
- if (currentId) {
130
- job = undefined;
131
- await cancelJob();
132
- }
133
- }
134
- export async function watchJob(testId) {
135
- logOffset = 0;
136
- syncIteration = 0;
137
- errorIteration = 0;
138
- currentId = testId;
139
- job = undefined;
140
- const isCompleted = await loadTestJob(testId);
141
- if (!isCompleted) {
142
- setTimeout(() => {
143
- syncer(testId);
144
- }, 50);
145
- }
146
- }
147
- async function loadTestJob(id) {
148
- let isCompleted = false;
149
- if (currentId === id) {
150
- try {
151
- if (job && `running` in job) {
152
- let getProgress = undefined;
153
- // We only pull individual job progress this way
154
- // Flow's progress we are getting from FlowStatusModule of flow job
155
- if (job.job_kind == 'script' || isScriptPreview(job.job_kind)) {
156
- // First time, before running job, lastTimeCheckedProgress is always undefined
157
- if (lastTimeCheckedProgress) {
158
- const lastTimeCheckedMs = Date.now() - lastTimeCheckedProgress;
159
- // Ask for progress if the last time we asked is >5s OR the progress was once not undefined
160
- if (lastTimeCheckedMs > getProgressRetryRate ||
161
- (scriptProgress != undefined && lastTimeCheckedMs > getProgressRate)) {
162
- lastTimeCheckedProgress = Date.now();
163
- getProgress = true;
164
- }
165
- }
166
- else {
167
- // Make it think we asked for progress, but in reality we didnt. First 5s we want to wait without putting extra work on db
168
- // 99.99% of the jobs won't have progress be set so we have to do a balance between having low-latency for jobs that use it and job that don't
169
- // we would usually not care to have progress the first 5s and jobs that are less than 5s
170
- lastTimeCheckedProgress = Date.now();
171
- }
172
- }
173
- const offset = logOffset == 0 ? (job.logs?.length ? job.logs?.length + 1 : 0) : logOffset;
174
- let previewJobUpdates = await JobService.getJobUpdates({
175
- workspace: workspace,
176
- id,
177
- running: job.running,
178
- logOffset: offset,
179
- getProgress: getProgress
180
- });
181
- // Clamp number between two values with the following line:
182
- const clamp = (num, min, max) => Math.min(Math.max(num, min), max);
183
- if (previewJobUpdates.progress) {
184
- // Progress cannot go back and cannot be set to 100
185
- scriptProgress = clamp(previewJobUpdates.progress, scriptProgress ?? 0, 99);
186
- }
187
- if (previewJobUpdates.new_logs) {
188
- if (offset == 0) {
189
- job.logs = previewJobUpdates.new_logs ?? '';
190
- }
191
- else {
192
- job.logs = (job?.logs ?? '').concat(previewJobUpdates.new_logs);
193
- }
194
- }
195
- if (previewJobUpdates.log_offset) {
196
- logOffset = previewJobUpdates.log_offset ?? 0;
197
- }
198
- if (previewJobUpdates.flow_status) {
199
- job.flow_status = previewJobUpdates.flow_status;
200
- }
201
- if (previewJobUpdates.mem_peak && job) {
202
- job.mem_peak = previewJobUpdates.mem_peak;
203
- }
204
- if ((previewJobUpdates.running ?? false) || (previewJobUpdates.completed ?? false)) {
205
- job = await JobService.getJob({ workspace: workspace, id });
206
- }
207
- }
208
- else {
209
- job = await JobService.getJob({ workspace: workspace, id, noLogs: lazyLogs });
210
- }
211
- jobUpdateLastFetch = new Date();
212
- if (job?.type === 'CompletedJob') {
213
- //only CompletedJob has success property
214
- isCompleted = true;
215
- if (currentId === id) {
216
- await tick();
217
- dispatch('done', job);
218
- currentId = undefined;
219
- }
220
- }
221
- notfound = false;
222
- }
223
- catch (err) {
224
- errorIteration += 1;
225
- if (errorIteration == 5) {
226
- notfound = true;
227
- job = undefined;
228
- }
229
- console.warn(err);
230
- }
231
- return isCompleted;
232
- }
233
- else {
234
- return true;
235
- }
236
- }
237
- async function syncer(id) {
238
- if (currentId != id) {
239
- dispatch('cancel', id);
240
- return;
241
- }
242
- syncIteration++;
243
- if (await loadTestJob(id)) {
244
- return;
245
- }
246
- let nextIteration = 50;
247
- if (syncIteration > ITERATIONS_BEFORE_SLOW_REFRESH) {
248
- nextIteration = 500;
249
- }
250
- else if (syncIteration > ITERATIONS_BEFORE_SUPER_SLOW_REFRESH) {
251
- nextIteration = 2000;
252
- }
253
- setTimeout(() => syncer(id), nextIteration);
254
- }
255
- onDestroy(async () => {
256
- currentId = undefined;
257
- });
258
- </script>
259
-
260
- {@render children?.({
261
- job,
262
- isLoading,
263
- workspaceOverride,
264
- notfound,
265
- abstractRun,
266
- runScriptByPath,
267
- runFlowByPath,
268
- runPreview,
269
- cancelJob,
270
- clearCurrentJob,
271
- watchJob,
272
- loadTestJob,
273
- syncer
274
- })}