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
|
@@ -161,8 +161,9 @@ async function editScript(stay, deploymentMsg) {
|
|
|
161
161
|
}
|
|
162
162
|
script.schema = script.schema ?? emptySchema();
|
|
163
163
|
try {
|
|
164
|
-
const
|
|
165
|
-
script.no_main_func =
|
|
164
|
+
const result = await inferArgs(script.language, script.content, script.schema);
|
|
165
|
+
script.no_main_func = result?.no_main_func || undefined;
|
|
166
|
+
script.has_preprocessor = result?.has_preprocessor || undefined;
|
|
166
167
|
}
|
|
167
168
|
catch (error) {
|
|
168
169
|
sendUserToast(`Could not parse code, are you sure it is valid?`, true);
|
|
@@ -193,6 +194,7 @@ async function editScript(stay, deploymentMsg) {
|
|
|
193
194
|
concurrency_key: emptyString(script.concurrency_key) ? undefined : script.concurrency_key,
|
|
194
195
|
visible_to_runner_only: script.visible_to_runner_only,
|
|
195
196
|
no_main_func: script.no_main_func,
|
|
197
|
+
has_preprocessor: script.has_preprocessor,
|
|
196
198
|
deployment_message: deploymentMsg || undefined
|
|
197
199
|
}
|
|
198
200
|
});
|
|
@@ -278,8 +280,9 @@ async function saveDraft(forceSave = false) {
|
|
|
278
280
|
}
|
|
279
281
|
script.schema = script.schema ?? emptySchema();
|
|
280
282
|
try {
|
|
281
|
-
const
|
|
282
|
-
script.no_main_func =
|
|
283
|
+
const result = await inferArgs(script.language, script.content, script.schema);
|
|
284
|
+
script.no_main_func = result?.no_main_func || undefined;
|
|
285
|
+
script.has_preprocessor = result?.has_preprocessor || undefined;
|
|
283
286
|
}
|
|
284
287
|
catch (error) {
|
|
285
288
|
sendUserToast(`Could not parse code, are you sure it is valid?`, true);
|
|
@@ -318,7 +321,8 @@ async function saveDraft(forceSave = false) {
|
|
|
318
321
|
? undefined
|
|
319
322
|
: script.concurrency_key,
|
|
320
323
|
visible_to_runner_only: script.visible_to_runner_only,
|
|
321
|
-
no_main_func: script.no_main_func
|
|
324
|
+
no_main_func: script.no_main_func,
|
|
325
|
+
has_preprocessor: script.has_preprocessor
|
|
322
326
|
}
|
|
323
327
|
});
|
|
324
328
|
}
|
|
@@ -560,6 +564,9 @@ function langToLanguage(lang) {
|
|
|
560
564
|
>
|
|
561
565
|
<LanguageIcon {lang} />
|
|
562
566
|
<span class="ml-2 py-2 truncate">{label}</span>
|
|
567
|
+
{#if lang === 'ansible'}
|
|
568
|
+
<span class="text-tertiary !text-xs"> BETA </span>
|
|
569
|
+
{/if}
|
|
563
570
|
</Button>
|
|
564
571
|
<svelte:fragment slot="text"
|
|
565
572
|
>{label} is only available with an enterprise license</svelte:fragment
|
|
@@ -9,6 +9,7 @@ import SchemaForm from './SchemaForm.svelte';
|
|
|
9
9
|
import LogPanel from './scriptEditor/LogPanel.svelte';
|
|
10
10
|
import EditorBar, { EDITOR_BAR_WIDTH_THRESHOLD } from './EditorBar.svelte';
|
|
11
11
|
import TestJobLoader from './TestJobLoader.svelte';
|
|
12
|
+
import JobProgressBar from './jobs/JobProgressBar.svelte';
|
|
12
13
|
import { createEventDispatcher, onDestroy, onMount } from 'svelte';
|
|
13
14
|
import { Button } from './common';
|
|
14
15
|
import SplitPanesWrapper from './splitPanes/SplitPanesWrapper.svelte';
|
|
@@ -20,6 +21,9 @@ import Modal from './common/modal/Modal.svelte';
|
|
|
20
21
|
import DiffEditor from './DiffEditor.svelte';
|
|
21
22
|
import { Clipboard, CornerDownLeft, Github, Play } from 'lucide-svelte';
|
|
22
23
|
import { setLicense } from '../enterpriseUtils';
|
|
24
|
+
import Tabs from './common/tabs/Tabs.svelte';
|
|
25
|
+
import Tab from './common/tabs/Tab.svelte';
|
|
26
|
+
import { slide } from 'svelte/transition';
|
|
23
27
|
// Exported
|
|
24
28
|
export let schema = emptySchema();
|
|
25
29
|
export let code;
|
|
@@ -39,6 +43,7 @@ export let noHistory = false;
|
|
|
39
43
|
export let saveToWorkspace = false;
|
|
40
44
|
export let watchChanges = false;
|
|
41
45
|
export let customUi = {};
|
|
46
|
+
let jobProgressReset;
|
|
42
47
|
let websocketAlive = {
|
|
43
48
|
pyright: false,
|
|
44
49
|
deno: false,
|
|
@@ -55,6 +60,7 @@ let testJobLoader;
|
|
|
55
60
|
// Test args input
|
|
56
61
|
let args = initialArgs;
|
|
57
62
|
let isValid = true;
|
|
63
|
+
let scriptProgress = undefined;
|
|
58
64
|
// Test
|
|
59
65
|
let testIsLoading = false;
|
|
60
66
|
let testJob;
|
|
@@ -79,8 +85,11 @@ function onKeyDown(event) {
|
|
|
79
85
|
}
|
|
80
86
|
}
|
|
81
87
|
function runTest() {
|
|
88
|
+
// Not defined if JobProgressBar not loaded
|
|
89
|
+
if (jobProgressReset)
|
|
90
|
+
jobProgressReset();
|
|
82
91
|
//@ts-ignore
|
|
83
|
-
testJobLoader.runPreview(path, code, lang, args, tag);
|
|
92
|
+
testJobLoader.runPreview(path, code, lang, selectedTab === 'preprocessor' ? { _ENTRYPOINT_OVERRIDE: 'preprocessor', ...args } : args, tag);
|
|
84
93
|
}
|
|
85
94
|
async function loadPastTests() {
|
|
86
95
|
pastPreviews = await JobService.listCompletedJobs({
|
|
@@ -90,10 +99,13 @@ async function loadPastTests() {
|
|
|
90
99
|
scriptPathExact: path
|
|
91
100
|
});
|
|
92
101
|
}
|
|
102
|
+
let hasPreprocessor = false;
|
|
93
103
|
export async function inferSchema(code, nlang) {
|
|
94
104
|
let nschema = schema ?? emptySchema();
|
|
95
105
|
try {
|
|
96
|
-
await inferArgs(nlang ?? lang, code, nschema);
|
|
106
|
+
const result = await inferArgs(nlang ?? lang, code, nschema, selectedTab === 'preprocessor' ? 'preprocessor' : undefined);
|
|
107
|
+
hasPreprocessor =
|
|
108
|
+
(selectedTab === 'preprocessor' ? !result?.no_main_func : result?.has_preprocessor) ?? false;
|
|
97
109
|
validCode = true;
|
|
98
110
|
schema = nschema;
|
|
99
111
|
}
|
|
@@ -170,10 +182,15 @@ function collabUrl() {
|
|
|
170
182
|
url.search = '';
|
|
171
183
|
return `${url}?collab=1` + (edit ? '' : `&path=${path}`);
|
|
172
184
|
}
|
|
185
|
+
let selectedTab = 'main';
|
|
186
|
+
$: showTabs = hasPreprocessor;
|
|
187
|
+
$: !hasPreprocessor && (selectedTab = 'main');
|
|
188
|
+
$: selectedTab && inferSchema(code);
|
|
173
189
|
</script>
|
|
174
190
|
|
|
175
191
|
<TestJobLoader
|
|
176
192
|
on:done={loadPastTests}
|
|
193
|
+
bind:scriptProgress
|
|
177
194
|
bind:this={testJobLoader}
|
|
178
195
|
bind:isLoading={testIsLoading}
|
|
179
196
|
bind:job={testJob}
|
|
@@ -290,6 +307,14 @@ function collabUrl() {
|
|
|
290
307
|
</Pane>
|
|
291
308
|
<Pane size={40} minSize={10}>
|
|
292
309
|
<div class="flex flex-col h-full">
|
|
310
|
+
{#if showTabs}
|
|
311
|
+
<div transition:slide={{ duration: 200 }}>
|
|
312
|
+
<Tabs bind:selected={selectedTab}>
|
|
313
|
+
<Tab value="main">Main</Tab>
|
|
314
|
+
<Tab value="preprocessor">Preprocessor</Tab>
|
|
315
|
+
</Tabs>
|
|
316
|
+
</div>
|
|
317
|
+
{/if}
|
|
293
318
|
<div class="flex justify-center pt-1">
|
|
294
319
|
{#if testIsLoading}
|
|
295
320
|
<Button on:click={testJobLoader?.cancelJob} btnClasses="w-full" color="red" size="xs">
|
|
@@ -353,7 +378,12 @@ function collabUrl() {
|
|
|
353
378
|
{editor}
|
|
354
379
|
{diffEditor}
|
|
355
380
|
{args}
|
|
356
|
-
|
|
381
|
+
>
|
|
382
|
+
{#if scriptProgress}
|
|
383
|
+
<!-- Put to the slot in logpanel -->
|
|
384
|
+
<JobProgressBar job={testJob} bind:scriptProgress bind:reset={jobProgressReset} compact={true} />
|
|
385
|
+
{/if}
|
|
386
|
+
</LogPanel>
|
|
357
387
|
</Pane>
|
|
358
388
|
</Splitpanes>
|
|
359
389
|
</div>
|
|
@@ -42,7 +42,7 @@ export type ScriptEditorProps = typeof __propDef.props;
|
|
|
42
42
|
export type ScriptEditorEvents = typeof __propDef.events;
|
|
43
43
|
export type ScriptEditorSlots = typeof __propDef.slots;
|
|
44
44
|
export default class ScriptEditor extends SvelteComponent<ScriptEditorProps, ScriptEditorEvents, ScriptEditorSlots> {
|
|
45
|
-
get inferSchema(): (code: string, nlang?: "python3" | "deno" | "go" | "bash" | "powershell" | "postgresql" | "mysql" | "bigquery" | "snowflake" | "mssql" | "graphql" | "nativets" | "bun" | "php" | "rust" | undefined) => Promise<void>;
|
|
45
|
+
get inferSchema(): (code: string, nlang?: "python3" | "deno" | "go" | "bash" | "powershell" | "postgresql" | "mysql" | "bigquery" | "snowflake" | "mssql" | "graphql" | "nativets" | "bun" | "php" | "rust" | "ansible" | undefined) => Promise<void>;
|
|
46
46
|
get setCollaborationMode(): () => Promise<void>;
|
|
47
47
|
get disableCollaboration(): () => void;
|
|
48
48
|
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
<script>import { onMount, onDestroy } from 'svelte';
|
|
2
|
+
import { twMerge } from 'tailwind-merge';
|
|
3
|
+
let isAtBottom = false;
|
|
4
|
+
let isScrollable = false;
|
|
5
|
+
export let scrollableClass = '';
|
|
6
|
+
export let shiftedShadow = false;
|
|
7
|
+
let mutationObserver;
|
|
8
|
+
let el;
|
|
9
|
+
function handleScroll(event) {
|
|
10
|
+
const scrollableElement = event.target;
|
|
11
|
+
isAtBottom =
|
|
12
|
+
scrollableElement.scrollTop + scrollableElement.offsetHeight >=
|
|
13
|
+
scrollableElement.scrollHeight - 2;
|
|
14
|
+
}
|
|
15
|
+
function checkIfScrollable(el) {
|
|
16
|
+
return el.scrollHeight > el.clientHeight;
|
|
17
|
+
}
|
|
18
|
+
function observeScrollability(el) {
|
|
19
|
+
isScrollable = checkIfScrollable(el);
|
|
20
|
+
mutationObserver = new MutationObserver(() => {
|
|
21
|
+
isScrollable = checkIfScrollable(el);
|
|
22
|
+
});
|
|
23
|
+
mutationObserver?.observe(el, { childList: true, subtree: true, characterData: true });
|
|
24
|
+
}
|
|
25
|
+
export function scrollIntoView(top) {
|
|
26
|
+
el.scrollTo({ top, behavior: 'smooth' });
|
|
27
|
+
}
|
|
28
|
+
onMount(() => {
|
|
29
|
+
observeScrollability(el);
|
|
30
|
+
});
|
|
31
|
+
onDestroy(() => {
|
|
32
|
+
mutationObserver?.disconnect();
|
|
33
|
+
});
|
|
34
|
+
</script>
|
|
35
|
+
|
|
36
|
+
<div class={twMerge('relative pb-1', scrollableClass)}>
|
|
37
|
+
<div bind:this={el} on:scroll={handleScroll} class="w-full h-full overflow-y-auto">
|
|
38
|
+
<slot />
|
|
39
|
+
</div>
|
|
40
|
+
{#if !isAtBottom && isScrollable}
|
|
41
|
+
<div
|
|
42
|
+
class="pointer-events-none absolute bottom-0 {shiftedShadow
|
|
43
|
+
? 'left-2'
|
|
44
|
+
: 'right-0'} h-14 w-full bg-gradient-to-t from-surface to-transparent"
|
|
45
|
+
/>
|
|
46
|
+
{/if}
|
|
47
|
+
</div>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { SvelteComponent } from "svelte";
|
|
2
|
+
declare const __propDef: {
|
|
3
|
+
props: {
|
|
4
|
+
scrollableClass?: string | undefined;
|
|
5
|
+
shiftedShadow?: boolean | undefined;
|
|
6
|
+
scrollIntoView?: ((top: number) => void) | undefined;
|
|
7
|
+
};
|
|
8
|
+
events: {
|
|
9
|
+
[evt: string]: CustomEvent<any>;
|
|
10
|
+
};
|
|
11
|
+
slots: {
|
|
12
|
+
default: {};
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
export type ScrollableProps = typeof __propDef.props;
|
|
16
|
+
export type ScrollableEvents = typeof __propDef.events;
|
|
17
|
+
export type ScrollableSlots = typeof __propDef.slots;
|
|
18
|
+
export default class Scrollable extends SvelteComponent<ScrollableProps, ScrollableEvents, ScrollableSlots> {
|
|
19
|
+
get scrollIntoView(): (top: number) => void;
|
|
20
|
+
}
|
|
21
|
+
export {};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { SvelteComponent } from "svelte";
|
|
2
2
|
declare const __propDef: {
|
|
3
3
|
props: {
|
|
4
|
-
openDrawer?: ((newPath: string, kind_l: "script" | "flow" | "resource" | "schedule" | "app" | "variable" | "group_" | "raw_app") => Promise<void>) | undefined;
|
|
4
|
+
openDrawer?: ((newPath: string, kind_l: "script" | "flow" | "resource" | "schedule" | "app" | "variable" | "group_" | "raw_app" | "http_trigger") => Promise<void>) | undefined;
|
|
5
5
|
};
|
|
6
6
|
events: {
|
|
7
7
|
change: CustomEvent<any>;
|
|
@@ -14,6 +14,6 @@ export type ShareModalProps = typeof __propDef.props;
|
|
|
14
14
|
export type ShareModalEvents = typeof __propDef.events;
|
|
15
15
|
export type ShareModalSlots = typeof __propDef.slots;
|
|
16
16
|
export default class ShareModal extends SvelteComponent<ShareModalProps, ShareModalEvents, ShareModalSlots> {
|
|
17
|
-
get openDrawer(): (newPath: string, kind_l: "script" | "flow" | "resource" | "schedule" | "app" | "variable" | "group_" | "raw_app") => Promise<void>;
|
|
17
|
+
get openDrawer(): (newPath: string, kind_l: "script" | "flow" | "resource" | "schedule" | "app" | "variable" | "group_" | "raw_app" | "http_trigger") => Promise<void>;
|
|
18
18
|
}
|
|
19
19
|
export {};
|
|
@@ -19,7 +19,6 @@ import { ExternalLink } from 'lucide-svelte';
|
|
|
19
19
|
import { settingsKeys } from './instanceSettings';
|
|
20
20
|
import ConfirmationModal from './common/confirmationModal/ConfirmationModal.svelte';
|
|
21
21
|
import ChangeInstanceUsername from './ChangeInstanceUsername.svelte';
|
|
22
|
-
import Tooltip from './Tooltip.svelte';
|
|
23
22
|
import { isCloudHosted } from '../cloud';
|
|
24
23
|
import InstanceNameEditor from './InstanceNameEditor.svelte';
|
|
25
24
|
let drawer;
|
|
@@ -89,7 +88,7 @@ async function updateName(name, email) {
|
|
|
89
88
|
/>
|
|
90
89
|
|
|
91
90
|
<Drawer bind:this={drawer} on:open={listUsers} size="1200px" on:close={removeHash}>
|
|
92
|
-
<DrawerContent overflow_y={true} title="Instance
|
|
91
|
+
<DrawerContent overflow_y={true} title="Instance settings" on:close={closeDrawer}>
|
|
93
92
|
<div class="flex flex-col h-full w-full">
|
|
94
93
|
<div>
|
|
95
94
|
<div class="flex justify-between">
|
|
@@ -112,7 +111,7 @@ async function updateName(name, email) {
|
|
|
112
111
|
</div>
|
|
113
112
|
<div class="pt-4 h-full">
|
|
114
113
|
<Tabs bind:selected={tab}>
|
|
115
|
-
<Tab value="users">Global
|
|
114
|
+
<Tab value="users">Global users</Tab>
|
|
116
115
|
{#each settingsKeys as category}
|
|
117
116
|
<Tab value={category}>{category}</Tab>
|
|
118
117
|
{/each}
|
|
@@ -124,11 +123,10 @@ async function updateName(name, email) {
|
|
|
124
123
|
<div class="mb-4">
|
|
125
124
|
<h3 class="mb-2">
|
|
126
125
|
Automatic username creation
|
|
127
|
-
<Tooltip>
|
|
128
|
-
Automatically create a username for new users based on their email, shared
|
|
129
|
-
across workspaces.
|
|
130
|
-
</Tooltip>
|
|
131
126
|
</h3>
|
|
127
|
+
<div class="mb-2">
|
|
128
|
+
<span class="text-primary text-sm">Automatically create a username for new users based on their email, shared across workspaces. <a target="_blank" href="https://www.windmill.dev/docs/advanced/instance_settings#automatic-username-creation">Learn more</a></span>
|
|
129
|
+
</div>
|
|
132
130
|
<Button
|
|
133
131
|
btnClasses="w-auto"
|
|
134
132
|
size="sm"
|
|
@@ -10,6 +10,16 @@ export let notfound = false;
|
|
|
10
10
|
export let jobUpdateLastFetch = undefined;
|
|
11
11
|
export let toastError = false;
|
|
12
12
|
export let lazyLogs = false;
|
|
13
|
+
// Will be set to number if job is not a flow
|
|
14
|
+
// If you want to find out progress of subjobs of a flow, check job.flow_status.progress
|
|
15
|
+
export let scriptProgress = undefined;
|
|
16
|
+
/// Last time asked for job progress
|
|
17
|
+
let lastTimeCheckedProgress = undefined;
|
|
18
|
+
/// Will try to poll progress every 5s and if once progress returned was not undefined, will be ignored
|
|
19
|
+
/// and getProgressRate will be used instead
|
|
20
|
+
const getProgressRetryRate = 5000;
|
|
21
|
+
/// How often loader poll progress
|
|
22
|
+
const getProgressRate = 1000;
|
|
13
23
|
const dispatch = createEventDispatcher();
|
|
14
24
|
$: workspace = workspaceOverride ?? $workspaceStore;
|
|
15
25
|
let syncIteration = 0;
|
|
@@ -56,19 +66,20 @@ export async function runScriptByPath(path, args) {
|
|
|
56
66
|
return abstractRun(() => JobService.runScriptByPath({
|
|
57
67
|
workspace: $workspaceStore,
|
|
58
68
|
path: path ?? '',
|
|
59
|
-
requestBody: args
|
|
69
|
+
requestBody: args,
|
|
70
|
+
skipPreprocessor: true
|
|
60
71
|
}));
|
|
61
72
|
}
|
|
62
73
|
export async function runFlowByPath(path, args) {
|
|
63
74
|
return abstractRun(() => JobService.runFlowByPath({
|
|
64
75
|
workspace: $workspaceStore,
|
|
65
76
|
path: path ?? '',
|
|
66
|
-
requestBody: args
|
|
77
|
+
requestBody: args,
|
|
78
|
+
skipPreprocessor: true
|
|
67
79
|
}));
|
|
68
80
|
}
|
|
69
81
|
export async function getLogs() {
|
|
70
82
|
if (job) {
|
|
71
|
-
console.log('getLogs');
|
|
72
83
|
const getUpdate = await JobService.getJobUpdates({
|
|
73
84
|
workspace: workspace,
|
|
74
85
|
id: job.id,
|
|
@@ -82,6 +93,9 @@ export async function getLogs() {
|
|
|
82
93
|
}
|
|
83
94
|
}
|
|
84
95
|
export async function runPreview(path, code, lang, args, tag, lock) {
|
|
96
|
+
// Reset in case we rerun job without reloading
|
|
97
|
+
scriptProgress = undefined;
|
|
98
|
+
lastTimeCheckedProgress = undefined;
|
|
85
99
|
return abstractRun(() => JobService.runScriptPreview({
|
|
86
100
|
workspace: $workspaceStore,
|
|
87
101
|
requestBody: {
|
|
@@ -135,14 +149,41 @@ async function loadTestJob(id) {
|
|
|
135
149
|
if (currentId === id) {
|
|
136
150
|
try {
|
|
137
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' || job.job_kind == 'preview') {
|
|
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
|
+
}
|
|
138
173
|
const offset = logOffset == 0 ? (job.logs?.length ? job.logs?.length + 1 : 0) : logOffset;
|
|
139
|
-
console.log('getLogs');
|
|
140
174
|
let previewJobUpdates = await JobService.getJobUpdates({
|
|
141
175
|
workspace: workspace,
|
|
142
176
|
id,
|
|
143
177
|
running: job.running,
|
|
144
|
-
logOffset: offset
|
|
178
|
+
logOffset: offset,
|
|
179
|
+
getProgress: getProgress
|
|
145
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
|
+
}
|
|
146
187
|
if (previewJobUpdates.new_logs) {
|
|
147
188
|
if (offset == 0) {
|
|
148
189
|
job.logs = previewJobUpdates.new_logs ?? '';
|
|
@@ -10,6 +10,7 @@ declare const __propDef: {
|
|
|
10
10
|
jobUpdateLastFetch?: Date | undefined;
|
|
11
11
|
toastError?: boolean | undefined;
|
|
12
12
|
lazyLogs?: boolean | undefined;
|
|
13
|
+
scriptProgress?: number | undefined;
|
|
13
14
|
abstractRun?: ((fn: () => Promise<string>) => Promise<string>) | undefined;
|
|
14
15
|
runScriptByPath?: ((path: string | undefined, args: Record<string, any>) => Promise<string>) | undefined;
|
|
15
16
|
runFlowByPath?: ((path: string | undefined, args: Record<string, any>) => Promise<string>) | undefined;
|
|
@@ -51,7 +52,7 @@ export default class TestJobLoader extends SvelteComponent<TestJobLoaderProps, T
|
|
|
51
52
|
get runScriptByPath(): (path: string | undefined, args: Record<string, any>) => Promise<string>;
|
|
52
53
|
get runFlowByPath(): (path: string | undefined, args: Record<string, any>) => Promise<string>;
|
|
53
54
|
get getLogs(): () => Promise<void>;
|
|
54
|
-
get runPreview(): (path: string | undefined, code: string, lang: "python3" | "deno" | "go" | "bash" | "powershell" | "postgresql" | "mysql" | "bigquery" | "snowflake" | "mssql" | "graphql" | "nativets" | "bun" | "php" | "rust" | undefined, args: Record<string, any>, tag: string | undefined, lock?: string | undefined) => Promise<string>;
|
|
55
|
+
get runPreview(): (path: string | undefined, code: string, lang: "python3" | "deno" | "go" | "bash" | "powershell" | "postgresql" | "mysql" | "bigquery" | "snowflake" | "mssql" | "graphql" | "nativets" | "bun" | "php" | "rust" | "ansible" | undefined, args: Record<string, any>, tag: string | undefined, lock?: string | undefined) => Promise<string>;
|
|
55
56
|
get cancelJob(): () => Promise<void>;
|
|
56
57
|
get clearCurrentJob(): () => Promise<void>;
|
|
57
58
|
get watchJob(): (testId: string) => Promise<void>;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<script>import { WindmillIcon2 } from './icons';
|
|
2
|
+
import ToggleButtonGroup from './common/toggleButton-v2/ToggleButtonGroup.svelte';
|
|
3
|
+
import ToggleButton from './common/toggleButton-v2/ToggleButton.svelte';
|
|
4
|
+
import { Building } from 'lucide-svelte';
|
|
5
|
+
export let selected = 'all';
|
|
6
|
+
</script>
|
|
7
|
+
|
|
8
|
+
<div class="max-w-min">
|
|
9
|
+
<ToggleButtonGroup bind:selected>
|
|
10
|
+
<ToggleButton value="all" label="All" light small />
|
|
11
|
+
<ToggleButton value="hub" icon={WindmillIcon2} label="Hub" light small />
|
|
12
|
+
<ToggleButton value="workspace" icon={Building} label="Workspace" light small />
|
|
13
|
+
</ToggleButtonGroup>
|
|
14
|
+
</div>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { SvelteComponent } from "svelte";
|
|
2
|
+
declare const __propDef: {
|
|
3
|
+
props: {
|
|
4
|
+
selected?: "workspace" | "all" | "hub" | undefined;
|
|
5
|
+
};
|
|
6
|
+
events: {
|
|
7
|
+
[evt: string]: CustomEvent<any>;
|
|
8
|
+
};
|
|
9
|
+
slots: {};
|
|
10
|
+
};
|
|
11
|
+
export type ToggleHubWorkspaceQuickProps = typeof __propDef.props;
|
|
12
|
+
export type ToggleHubWorkspaceQuickEvents = typeof __propDef.events;
|
|
13
|
+
export type ToggleHubWorkspaceQuickSlots = typeof __propDef.slots;
|
|
14
|
+
export default class ToggleHubWorkspaceQuick extends SvelteComponent<ToggleHubWorkspaceQuickProps, ToggleHubWorkspaceQuickEvents, ToggleHubWorkspaceQuickSlots> {
|
|
15
|
+
}
|
|
16
|
+
export {};
|
|
@@ -84,7 +84,8 @@ const defaultTags = [
|
|
|
84
84
|
'other',
|
|
85
85
|
'bun',
|
|
86
86
|
'php',
|
|
87
|
-
'rust'
|
|
87
|
+
'rust',
|
|
88
|
+
'ansible'
|
|
88
89
|
];
|
|
89
90
|
const nativeTags = [
|
|
90
91
|
'nativets',
|
|
@@ -436,7 +437,7 @@ let createdTags = [];
|
|
|
436
437
|
options={{
|
|
437
438
|
right: 'Send an alert when the number of alive workers falls below a given threshold'
|
|
438
439
|
}}
|
|
439
|
-
checked={nconfig?.min_alive_workers_alert_threshold !== undefined
|
|
440
|
+
checked={nconfig?.min_alive_workers_alert_threshold !== undefined}
|
|
440
441
|
on:change={(ev) => {
|
|
441
442
|
if (nconfig !== undefined) {
|
|
442
443
|
nconfig.min_alive_workers_alert_threshold = ev.detail ? 1 : undefined
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
<script>import {
|
|
1
|
+
<script>import { onMount } from 'svelte';
|
|
2
|
+
import { twMerge } from 'tailwind-merge';
|
|
2
3
|
export let placeholder = 'Search...';
|
|
3
4
|
// Using 'any' so 'type="number"' can be passed to the input
|
|
4
5
|
// which should return a number
|
|
@@ -7,6 +8,7 @@ export let debounceDelay = 100;
|
|
|
7
8
|
let parentClass = undefined;
|
|
8
9
|
export { parentClass as class };
|
|
9
10
|
let timer;
|
|
11
|
+
let inputElement = null;
|
|
10
12
|
function debounce(event) {
|
|
11
13
|
clearTimeout(timer);
|
|
12
14
|
timer = setTimeout(() => {
|
|
@@ -14,9 +16,15 @@ function debounce(event) {
|
|
|
14
16
|
value = target.value;
|
|
15
17
|
}, debounceDelay);
|
|
16
18
|
}
|
|
19
|
+
onMount(() => {
|
|
20
|
+
if (inputElement && value !== undefined) {
|
|
21
|
+
inputElement.value = value;
|
|
22
|
+
}
|
|
23
|
+
});
|
|
17
24
|
</script>
|
|
18
25
|
|
|
19
26
|
<input
|
|
27
|
+
bind:this={inputElement}
|
|
20
28
|
{placeholder}
|
|
21
29
|
on:pointerdown|stopPropagation
|
|
22
30
|
on:keyup={debounce}
|
|
@@ -147,7 +147,7 @@ function handleFilter(e) {
|
|
|
147
147
|
}
|
|
148
148
|
}
|
|
149
149
|
}
|
|
150
|
-
$: resolvedConfig.defaultValue && handleDefault();
|
|
150
|
+
$: resolvedConfig.defaultValue != undefined && handleDefault();
|
|
151
151
|
function handleDefault() {
|
|
152
152
|
if (resolvedConfig.defaultValue != undefined) {
|
|
153
153
|
const nvalue = resolvedConfig.defaultValue;
|