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.
- package/package/ata/edgeCases.d.ts +0 -1
- package/package/ata/edgeCases.js +2 -8
- package/package/ata/index.js +4 -3
- package/package/common.d.ts +1 -1
- package/package/common.js +2 -2
- package/package/components/ApiConnectForm.svelte +33 -7
- package/package/components/ArgInput.svelte +4 -2
- package/package/components/CenteredModal.svelte +4 -1
- package/package/components/CenteredModal.svelte.d.ts +1 -0
- package/package/components/DateInput.svelte +2 -0
- package/package/components/DateInput.svelte.d.ts +1 -0
- package/package/components/DefaultScripts.svelte +8 -3
- package/package/components/DefaultScripts.svelte.d.ts +5 -1
- package/package/components/DefaultScriptsInner.svelte +16 -7
- package/package/components/DefaultScriptsInner.svelte.d.ts +3 -1
- package/package/components/Dev.svelte +68 -11
- package/package/components/DropdownV2.svelte.d.ts +3 -3
- package/package/components/DropdownV2Inner.svelte.d.ts +3 -3
- package/package/components/EditableSchemaForm.svelte +1 -0
- package/package/components/Editor.svelte +3 -2
- package/package/components/Editor.svelte.d.ts +1 -1
- package/package/components/ExecutionDuration.svelte +44 -0
- package/package/components/ExecutionDuration.svelte.d.ts +24 -0
- package/package/components/FlowBuilder.svelte +20 -12
- package/package/components/FlowGraphViewer.svelte +9 -2
- package/package/components/FlowGraphViewerStep.svelte +23 -10
- package/package/components/FlowJobResult.svelte +0 -1
- package/package/components/FlowStatusViewerInner.svelte +17 -4
- package/package/components/FlowTimeline.svelte +3 -3
- package/package/components/HighlightCode.svelte +3 -0
- package/package/components/IconedResourceType.svelte +17 -10
- package/package/components/IconedResourceType.svelte.d.ts +2 -0
- package/package/components/IdEditorInput.svelte +0 -1
- package/package/components/InstanceSettings.svelte +247 -129
- package/package/components/InstanceSettings.svelte.d.ts +2 -0
- package/package/components/JobArgs.svelte +3 -1
- package/package/components/LightweightArgInput.svelte +35 -10
- package/package/components/LightweightArgInput.svelte.d.ts +1 -0
- package/package/components/LightweightObjectResourceInput.svelte +2 -0
- package/package/components/LightweightObjectResourceInput.svelte.d.ts +1 -0
- package/package/components/LightweightSchemaForm.svelte +2 -0
- package/package/components/LightweightSchemaForm.svelte.d.ts +1 -0
- package/package/components/Login.svelte +10 -5
- package/package/components/Login.svelte.d.ts +1 -0
- package/package/components/ModulePreview.svelte +21 -2
- package/package/components/ModuleStatus.svelte +3 -0
- package/package/components/ModuleStatus.svelte.d.ts +1 -0
- package/package/components/OAuthSetting.svelte +40 -15
- package/package/components/ObjectStoreConfigSettings.svelte +78 -76
- package/package/components/ParqetCsvTableRenderer.svelte +25 -3
- package/package/components/Password.svelte.d.ts +1 -1
- package/package/components/Path.svelte +74 -54
- package/package/components/Path.svelte.d.ts +2 -1
- package/package/components/ResourceEditor.svelte +38 -9
- package/package/components/ResultJobLoader.svelte +6 -3
- package/package/components/ResultJobLoader.svelte.d.ts +1 -1
- package/package/components/ScheduleEditorInner.svelte +2 -2
- package/package/components/SchemaForm.svelte +6 -1
- package/package/components/ScriptBuilder.svelte +12 -5
- package/package/components/ScriptEditor.svelte +33 -3
- package/package/components/ScriptEditor.svelte.d.ts +1 -1
- package/package/components/Scrollable.svelte +47 -0
- package/package/components/Scrollable.svelte.d.ts +21 -0
- package/package/components/ShareModal.svelte.d.ts +2 -2
- package/package/components/SuperadminSettings.svelte +5 -7
- package/package/components/TestJobLoader.svelte +46 -5
- package/package/components/TestJobLoader.svelte.d.ts +2 -1
- package/package/components/ToggleHubWorkspaceQuick.svelte +14 -0
- package/package/components/ToggleHubWorkspaceQuick.svelte.d.ts +16 -0
- package/package/components/WorkspaceGroup.svelte +3 -2
- package/package/components/apps/components/helpers/DebouncedInput.svelte +9 -1
- package/package/components/apps/components/inputs/AppSelect.svelte +1 -1
- package/package/components/apps/editor/component/components.d.ts +79 -79
- package/package/components/apps/svelte-select/lib/Select.svelte +1 -1
- package/package/components/common/fileUpload/FileUpload.svelte +1 -1
- package/package/components/common/languageIcons/LanguageIcon.svelte +5 -2
- package/package/components/common/menu/Menu.svelte +2 -1
- package/package/components/common/menu/MenuV2.svelte +3 -1
- package/package/components/common/menu/MenuV2.svelte.d.ts +1 -0
- package/package/components/common/popup/Popup.svelte +22 -12
- package/package/components/common/popup/Popup.svelte.d.ts +2 -0
- package/package/components/common/popup/PopupV2.svelte +58 -0
- package/package/components/common/popup/PopupV2.svelte.d.ts +27 -0
- package/package/components/copilot/CronGen.svelte +1 -1
- package/package/components/copilot/RegexGen.svelte +4 -4
- package/package/components/copilot/StepGen.svelte +6 -6
- package/package/components/copilot/StepGenQuick.svelte +57 -0
- package/package/components/copilot/StepGenQuick.svelte.d.ts +23 -0
- package/package/components/copilot/flow.d.ts +2 -0
- package/package/components/copilot/flow.js +55 -0
- package/package/components/details/DetailPageDetailPanel.svelte +9 -1
- package/package/components/details/DetailPageDetailPanel.svelte.d.ts +2 -1
- package/package/components/details/DetailPageLayout.svelte +2 -0
- package/package/components/details/DetailPageLayout.svelte.d.ts +3 -0
- package/package/components/details/utils.d.ts +0 -1
- package/package/components/details/utils.js +1 -12
- package/package/components/flows/FlowEditor.svelte +2 -1
- package/package/components/flows/FlowProgressBar.svelte +16 -1
- package/package/components/flows/FlowProgressBar.svelte.d.ts +1 -0
- package/package/components/flows/content/FlowBranchesAllWrapper.svelte +8 -0
- package/package/components/flows/content/FlowBranchesAllWrapper.svelte.d.ts +1 -0
- package/package/components/flows/content/FlowBranchesOneWrapper.svelte +8 -0
- package/package/components/flows/content/FlowBranchesOneWrapper.svelte.d.ts +1 -0
- package/package/components/flows/content/FlowConstants.svelte +1 -1
- package/package/components/flows/content/FlowEditorPanel.svelte +3 -0
- package/package/components/flows/content/FlowInputs.svelte +7 -6
- package/package/components/flows/content/FlowInputs.svelte.d.ts +1 -0
- package/package/components/flows/content/FlowInputsFlowQuick.svelte +65 -0
- package/package/components/flows/content/FlowInputsFlowQuick.svelte.d.ts +19 -0
- package/package/components/flows/content/FlowInputsQuick.svelte +419 -0
- package/package/components/flows/content/FlowInputsQuick.svelte.d.ts +33 -0
- package/package/components/flows/content/FlowLoop.svelte +7 -1
- package/package/components/flows/content/FlowModuleComponent.svelte +12 -3
- package/package/components/flows/content/FlowModuleComponent.svelte.d.ts +1 -0
- package/package/components/flows/content/FlowModuleSkip.svelte +69 -0
- package/package/components/flows/content/FlowModuleSkip.svelte.d.ts +20 -0
- package/package/components/flows/content/FlowModuleWrapper.svelte +17 -4
- package/package/components/flows/content/FlowPreprocessorModule.svelte +16 -0
- package/package/components/flows/content/FlowPreprocessorModule.svelte.d.ts +16 -0
- package/package/components/flows/content/FlowWhileLoop.svelte +9 -0
- package/package/components/flows/content/FlowWhileLoop.svelte.d.ts +1 -0
- package/package/components/flows/content/GenAiQuick.svelte +30 -0
- package/package/components/flows/content/GenAiQuick.svelte.d.ts +20 -0
- package/package/components/flows/content/ScriptEditorDrawer.svelte +3 -2
- package/package/components/flows/flowInfers.js +1 -1
- package/package/components/flows/header/FlowPreviewButtons.svelte +1 -0
- package/package/components/flows/idUtils.js +3 -1
- package/package/components/flows/map/FlowCopilotButton.svelte +55 -0
- package/package/components/flows/map/FlowCopilotButton.svelte.d.ts +16 -0
- package/package/components/flows/map/FlowErrorHandlerItem.svelte +77 -47
- package/package/components/flows/map/FlowJobsMenu.svelte +1 -1
- package/package/components/flows/map/FlowModuleSchemaItem.svelte +25 -12
- package/package/components/flows/map/FlowModuleSchemaItem.svelte.d.ts +1 -0
- package/package/components/flows/map/FlowModuleSchemaMap.svelte +61 -18
- package/package/components/flows/map/InsertModuleButton.svelte +161 -138
- package/package/components/flows/map/InsertModuleButton.svelte.d.ts +7 -4
- package/package/components/flows/map/MapItem.svelte +11 -0
- package/package/components/flows/map/MapItem.svelte.d.ts +1 -0
- package/package/components/flows/pickers/FlowScriptPickerQuick.svelte +48 -0
- package/package/components/flows/pickers/FlowScriptPickerQuick.svelte.d.ts +23 -0
- package/package/components/flows/pickers/FlowToplevelNode.svelte +19 -0
- package/package/components/flows/pickers/FlowToplevelNode.svelte.d.ts +19 -0
- package/package/components/flows/pickers/PickHubScriptQuick.svelte +138 -0
- package/package/components/flows/pickers/PickHubScriptQuick.svelte.d.ts +33 -0
- package/package/components/flows/pickers/TopLevelNode.svelte +58 -0
- package/package/components/flows/pickers/TopLevelNode.svelte.d.ts +21 -0
- package/package/components/flows/pickers/WorkspaceScriptPickerQuick.svelte +120 -0
- package/package/components/flows/pickers/WorkspaceScriptPickerQuick.svelte.d.ts +35 -0
- package/package/components/flows/types.d.ts +1 -0
- package/package/components/graph/FlowGraphV2.svelte +93 -58
- package/package/components/graph/FlowGraphV2.svelte.d.ts +2 -1
- package/package/components/graph/graphBuilder.d.ts +2 -1
- package/package/components/graph/graphBuilder.js +345 -280
- package/package/components/graph/model.d.ts +1 -0
- package/package/components/graph/renderers/edges/BaseEdge.svelte +36 -14
- package/package/components/graph/renderers/nodes/BranchOneStart.svelte +1 -1
- package/package/components/graph/renderers/nodes/InputNode.svelte +31 -51
- package/package/components/graph/renderers/nodes/InputNode.svelte.d.ts +6 -1
- package/package/components/graph/renderers/nodes/ModuleNode.svelte +2 -1
- package/package/components/graph/util.d.ts +1 -1
- package/package/components/graph/util.js +7 -2
- package/package/components/home/ListFiltersQuick.svelte +51 -0
- package/package/components/home/ListFiltersQuick.svelte.d.ts +23 -0
- package/package/components/icons/AnsibleIcon.svelte +42 -0
- package/package/components/icons/AnsibleIcon.svelte.d.ts +25 -0
- package/package/components/icons/WindmillIcon2.svelte +141 -0
- package/package/components/icons/WindmillIcon2.svelte.d.ts +20 -0
- package/package/components/icons/index.d.ts +2 -1
- package/package/components/icons/index.js +2 -1
- package/package/components/instanceSettings.d.ts +2 -2
- package/package/components/instanceSettings.js +25 -58
- package/package/components/jobs/JobProgressBar.svelte +52 -0
- package/package/components/jobs/JobProgressBar.svelte.d.ts +23 -0
- package/package/components/progressBar/ProgressBar.svelte +18 -1
- package/package/components/progressBar/ProgressBar.svelte.d.ts +3 -0
- package/package/components/runs/JobPreview.svelte +1 -0
- package/package/components/runs/PreprocessedArgsDisplay.svelte +71 -0
- package/package/components/runs/PreprocessedArgsDisplay.svelte.d.ts +16 -0
- package/package/components/schema/AddProperty.svelte +1 -0
- package/package/components/schema/EditableSchemaWrapper.svelte +142 -19
- package/package/components/schema/EditableSchemaWrapper.svelte.d.ts +1 -0
- package/package/components/schema/FlowPropertyEditor.svelte +12 -0
- package/package/components/schema/FlowPropertyEditor.svelte.d.ts +1 -0
- package/package/components/scriptEditor/LogPanel.svelte +1 -0
- package/package/components/scriptEditor/LogPanel.svelte.d.ts +3 -1
- package/package/components/search/GlobalSearchModal.svelte +2 -1
- package/package/components/sidebar/SidebarContent.svelte +69 -8
- package/package/components/sidebar/changelogs.js +10 -0
- package/package/components/triggers/RouteEditor.svelte +19 -0
- package/package/components/triggers/RouteEditor.svelte.d.ts +21 -0
- package/package/components/triggers/RouteEditorInner.svelte +327 -0
- package/package/components/triggers/RouteEditorInner.svelte.d.ts +21 -0
- package/package/components/triggers/RoutesPanel.svelte +74 -0
- package/package/components/triggers/RoutesPanel.svelte.d.ts +17 -0
- package/package/editorUtils.js +2 -0
- package/package/gen/core/OpenAPI.js +1 -1
- package/package/gen/schemas.gen.d.ts +159 -8
- package/package/gen/schemas.gen.js +161 -8
- package/package/gen/services.gen.d.ts +139 -1
- package/package/gen/services.gen.js +282 -1
- package/package/gen/types.gen.d.ts +455 -12
- package/package/hubPaths.json +6 -8
- package/package/infer.d.ts +4 -2
- package/package/infer.js +25 -23
- package/package/inferArgSig.js +8 -2
- package/package/monaco_workers/build_workers.js +8 -13
- package/package/monaco_workers/graphql.worker.bundle.js +45440 -174
- package/package/relative_imports.d.ts +3 -0
- package/package/relative_imports.js +25 -0
- package/package/script_helpers.d.ts +7 -2
- package/package/script_helpers.js +151 -3
- package/package/scripts.d.ts +1 -1
- package/package/scripts.js +5 -1
- package/package/stores.d.ts +1 -0
- package/package/stores.js +1 -0
- package/package/utils.d.ts +1 -0
- package/package/utils.js +4 -0
- package/package.json +16 -7
- package/package/components/flows/map/InsertTriggerButton.svelte +0 -48
- package/package/components/flows/map/InsertTriggerButton.svelte.d.ts +0 -24
- package/package/monaco_workers/cssWorker-es.js +0 -43763
- package/package/monaco_workers/editorWorker-es.d.ts +0 -2
- package/package/monaco_workers/editorWorker-es.js +0 -8066
- package/package/monaco_workers/htmlWorker-es.js +0 -21551
- package/package/monaco_workers/jsonWorker-es.js +0 -13523
- package/package/monaco_workers/tsWorker-es.d.ts +0 -103
- package/package/monaco_workers/tsWorker-es.js +0 -212193
package/package/ata/edgeCases.js
CHANGED
|
@@ -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 (
|
|
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
|
-
}
|
package/package/ata/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import { isTypescriptRelativePath } from '../relative_imports';
|
|
1
2
|
import { getDTSFileForModuleWithVersion, getFiletreeForModuleWithVersion, getNPMVersionForModuleReference, getNPMVersionsForModule, isOverlimit, limit } from './apis';
|
|
2
|
-
import {
|
|
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) =>
|
|
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) => !
|
|
84
|
+
depsToGet = depsToGet.filter((f) => !isTypescriptRelativePath(f.raw));
|
|
84
85
|
if (depsToGet.length === 0) {
|
|
85
86
|
return [];
|
|
86
87
|
}
|
package/package/common.d.ts
CHANGED
|
@@ -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
|
-
<
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
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) &&
|
|
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
|
|
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">
|
|
@@ -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}
|
|
@@ -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
|
|
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
|
|
23
|
+
{size}
|
|
21
24
|
btnClasses="!text-tertiary"
|
|
22
|
-
variant="contained"
|
|
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:
|
|
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
|
|
42
|
-
|
|
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
|
|
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
|
↑</button
|
|
47
54
|
>
|
|
48
55
|
{/if}
|
|
49
56
|
{#if i < langs.length - 1}
|
|
50
|
-
<button
|
|
51
|
-
|
|
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">↓</button
|
|
52
61
|
>
|
|
53
62
|
{/if}</div
|
|
54
63
|
>
|
|
@@ -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 =
|
|
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
|
|
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 ==
|
|
143
|
+
if (event.data.id == lastCommandId) {
|
|
141
144
|
testBundle(event.data.file, event.data.isTar);
|
|
142
145
|
}
|
|
143
146
|
else {
|
|
144
|
-
sendUserToast(`Bundle received ${
|
|
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
|
-
|
|
271
|
-
window.parent?.postMessage({ type: 'testBundle', id:
|
|
282
|
+
lastCommandId = Math.random().toString(36).substring(7);
|
|
283
|
+
window.parent?.postMessage({ type: 'testBundle', id: lastCommandId }, '*');
|
|
272
284
|
}
|
|
273
285
|
else {
|
|
274
|
-
|
|
275
|
-
|
|
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?: "
|
|
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?: "
|
|
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?: "
|
|
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?: "
|
|
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?: "
|
|
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?: "
|
|
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
|
|
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
|
|
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 {};
|