windmill-components 1.444.2 → 1.447.5
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/autosize.js +1 -1
- package/package/components/AppConnectInner.svelte +2 -1
- package/package/components/ArgInput.svelte +37 -24
- package/package/components/CapturesInputs.svelte +16 -0
- package/package/components/CapturesInputs.svelte.d.ts +21 -0
- package/package/components/Dev.svelte +7 -1
- package/package/components/EditableSchemaForm.svelte +369 -290
- package/package/components/EditableSchemaForm.svelte.d.ts +12 -2
- package/package/components/Editor.svelte +5 -7
- package/package/components/FirstStepInputs.svelte +111 -0
- package/package/components/FirstStepInputs.svelte.d.ts +17 -0
- package/package/components/FlowBuilder.svelte +28 -7
- package/package/components/FlowPreviewContent.svelte +72 -1
- package/package/components/FlowPreviewContent.svelte.d.ts +1 -0
- package/package/components/GfmMarkdown.svelte +93 -2
- package/package/components/HighlightCode.svelte +2 -0
- package/package/components/HistoricInputs.svelte +193 -0
- package/package/components/HistoricInputs.svelte.d.ts +20 -0
- package/package/components/InfiniteList.svelte +161 -0
- package/package/components/InfiniteList.svelte.d.ts +40 -0
- package/package/components/LightweightArgInput.svelte +19 -15
- package/package/components/MoveDrawer.svelte +2 -1
- package/package/components/Path.svelte +7 -1
- package/package/components/Path.svelte.d.ts +1 -1
- package/package/components/ResourcePicker.svelte +2 -1
- package/package/components/ResourcePicker.svelte.d.ts +1 -0
- package/package/components/ResultJobLoader.svelte.d.ts +1 -1
- package/package/components/SaveInputsButton.svelte +53 -0
- package/package/components/SaveInputsButton.svelte.d.ts +24 -0
- package/package/components/SavedInputs.svelte +33 -61
- package/package/components/SavedInputsPicker.svelte +264 -0
- package/package/components/SavedInputsPicker.svelte.d.ts +20 -0
- package/package/components/ScheduleEditorInner.svelte +0 -1
- package/package/components/SchemaForm.svelte +22 -3
- package/package/components/ScriptBuilder.svelte +595 -562
- package/package/components/ScriptEditor.svelte +10 -3
- package/package/components/ScriptEditor.svelte.d.ts +5 -2
- package/package/components/ScriptSchema.svelte +1 -2
- package/package/components/Section.svelte +6 -4
- package/package/components/ShareModal.svelte.d.ts +2 -2
- package/package/components/SimpleEditor.svelte +39 -7
- package/package/components/SimpleEditor.svelte.d.ts +1 -4
- package/package/components/StringTypeNarrowing.svelte +3 -1
- package/package/components/TestConnection.svelte +5 -0
- package/package/components/TestJobLoader.svelte.d.ts +1 -1
- package/package/components/WorkerGroup.svelte +2 -1
- package/package/components/apps/components/inputs/AppS3FileInput.svelte +1 -0
- package/package/components/apps/editor/component/components.d.ts +79 -79
- package/package/components/apps/editor/component/default-codes.d.ts +1 -1
- package/package/components/apps/editor/component/default-codes.js +10 -10
- package/package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte +2 -1
- package/package/components/apps/inputType.d.ts +2 -2
- package/package/components/common/button/Button.svelte +10 -52
- package/package/components/common/button/PulseButton.svelte +81 -0
- package/package/components/common/button/PulseButton.svelte.d.ts +34 -0
- package/package/components/common/button/RoundIconButton.svelte +11 -0
- package/package/components/common/button/RoundIconButton.svelte.d.ts +19 -0
- package/package/components/common/button/model.d.ts +1 -0
- package/package/components/common/button/model.js +47 -0
- package/package/components/common/fileUpload/FileUpload.svelte +3 -1
- package/package/components/common/fileUpload/FileUpload.svelte.d.ts +1 -0
- package/package/components/common/languageIcons/LanguageIcon.svelte +3 -0
- package/package/components/common/layout/List.svelte +10 -4
- package/package/components/common/layout/List.svelte.d.ts +1 -0
- package/package/components/common/tabs/Tab.svelte +14 -1
- package/package/components/common/tabs/Tab.svelte.d.ts +1 -0
- package/package/components/copilot/ScriptGen.svelte +1 -1
- package/package/components/copilot/lib.js +1 -1
- package/package/components/copilot/prompts/edit.yaml +1 -1
- package/package/components/copilot/prompts/editPrompt.js +1 -1
- package/package/components/copilot/prompts/fix.yaml +1 -1
- package/package/components/copilot/prompts/fixPrompt.js +1 -1
- package/package/components/copilot/prompts/gen.yaml +1 -1
- package/package/components/copilot/prompts/genPrompt.js +1 -1
- package/package/components/custom_ui.d.ts +1 -0
- package/package/components/details/DetailPageDetailPanel.svelte +20 -19
- package/package/components/details/DetailPageDetailPanel.svelte.d.ts +4 -1
- package/package/components/details/DetailPageLayout.svelte +4 -1
- package/package/components/details/DetailPageLayout.svelte.d.ts +3 -0
- package/package/components/details/DetailPageTriggerPanel.svelte +84 -63
- package/package/components/details/DetailPageTriggerPanel.svelte.d.ts +3 -1
- package/package/components/details/EmailTriggerConfigSection.svelte +1 -1
- package/package/components/details/EmailTriggerConfigSection.svelte.d.ts +2 -1
- package/package/components/details/EmailTriggerPanel.svelte +2 -0
- package/package/components/details/EmailTriggerPanel.svelte.d.ts +2 -0
- package/package/components/flows/FlowEditor.svelte +8 -2
- package/package/components/flows/FlowEditor.svelte.d.ts +1 -0
- package/package/components/flows/common/FlowCard.svelte +12 -6
- package/package/components/flows/content/DynamicInputHelpBox.svelte +1 -0
- package/package/components/flows/content/FlowEditorPanel.svelte +15 -9
- package/package/components/flows/content/FlowEditorPanel.svelte.d.ts +1 -0
- package/package/components/flows/content/FlowInput.svelte +449 -98
- package/package/components/flows/content/FlowInput.svelte.d.ts +2 -0
- package/package/components/flows/content/FlowInputEditor.svelte +46 -0
- package/package/components/flows/content/FlowInputEditor.svelte.d.ts +25 -0
- package/package/components/flows/content/FlowInputsQuick.svelte +1 -1
- package/package/components/flows/content/FlowLoop.svelte +192 -194
- package/package/components/flows/content/FlowModuleComponent.svelte +372 -382
- package/package/components/flows/content/FlowModuleMock.svelte +6 -7
- package/package/components/flows/content/FlowPathViewer.svelte +2 -1
- package/package/components/flows/content/FlowSettings.svelte +25 -3
- package/package/components/flows/content/FlowWhileLoop.svelte +97 -99
- package/package/components/flows/flowStore.d.ts +13 -0
- package/package/components/flows/flowStore.js +41 -0
- package/package/components/flows/header/FlowPreviewButtons.svelte +10 -4
- package/package/components/flows/header/FlowPreviewButtons.svelte.d.ts +4 -2
- package/package/components/flows/header/FlowYamlEditor.svelte +3 -0
- package/package/components/flows/map/FlowModuleSchemaItem.svelte +8 -58
- package/package/components/flows/map/FlowModuleSchemaItemViewer.svelte +67 -0
- package/package/components/flows/map/FlowModuleSchemaItemViewer.svelte.d.ts +24 -0
- package/package/components/flows/map/FlowModuleSchemaMap.svelte +2 -2
- package/package/components/flows/pickers/FlowScriptPicker.svelte +1 -1
- package/package/components/flows/previousResults.d.ts +1 -1
- package/package/components/flows/previousResults.js +7 -2
- package/package/components/flows/types.d.ts +7 -0
- package/package/components/flows/utils.d.ts +1 -0
- package/package/components/flows/utils.js +3 -0
- package/package/components/graph/graphBuilder.js +1 -1
- package/package/components/graph/renderers/triggers/TriggersBadge.svelte +22 -8
- package/package/components/graph/renderers/triggers/TriggersBadge.svelte.d.ts +1 -1
- package/package/components/icons/NatsIcon.svelte +19 -0
- package/package/components/icons/NatsIcon.svelte.d.ts +18 -0
- package/package/components/icons/OracleDBIcon.svelte +15 -0
- package/package/components/icons/OracleDBIcon.svelte.d.ts +25 -0
- package/package/components/icons/index.d.ts +7 -1
- package/package/components/icons/index.js +8 -2
- package/package/components/meltComponents/ButtonDropDown.svelte +32 -0
- package/package/components/meltComponents/ButtonDropDown.svelte.d.ts +27 -0
- package/package/components/meltComponents/Popover.svelte +7 -4
- package/package/components/meltComponents/Popover.svelte.d.ts +1 -0
- package/package/components/runs/RunsFilter.svelte +2 -2
- package/package/components/schema/AddPropertyFormV2.svelte +46 -0
- package/package/components/schema/AddPropertyFormV2.svelte.d.ts +18 -0
- package/package/components/schema/AddPropertyV2.svelte +151 -0
- package/package/components/schema/AddPropertyV2.svelte.d.ts +25 -0
- package/package/components/schema/EditableSchemaDrawer.svelte +17 -8
- package/package/components/schema/EditableSchemaWrapper.svelte +58 -14
- package/package/components/schema/EditableSchemaWrapper.svelte.d.ts +0 -1
- package/package/components/schema/FlowPropertyEditor.svelte +8 -3
- package/package/components/schema/JobSchemaPicker.svelte +32 -0
- package/package/components/schema/JobSchemaPicker.svelte.d.ts +19 -0
- package/package/components/schema/PropertyEditor.svelte +9 -1
- package/package/components/schema/RunningJobSchemaPicker.svelte +67 -0
- package/package/components/schema/RunningJobSchemaPicker.svelte.d.ts +21 -0
- package/package/components/schema/SchemaFormDND.svelte +1 -1
- package/package/components/schema/SchemaPicker.svelte +92 -0
- package/package/components/schema/SchemaPicker.svelte.d.ts +23 -0
- package/package/components/schema/SchemaPickerRow.svelte +95 -0
- package/package/components/schema/SchemaPickerRow.svelte.d.ts +22 -0
- package/package/components/scriptEditor/LogPanel.svelte +1 -1
- package/package/components/settings/ChangeWorkspaceColor.svelte +103 -0
- package/package/components/settings/ChangeWorkspaceColor.svelte.d.ts +16 -0
- package/package/components/settings/ChangeWorkspaceId.svelte +1 -0
- package/package/components/settings/ChangeWorkspaceName.svelte +4 -0
- package/package/components/sidebar/MenuButton.svelte +5 -2
- package/package/components/sidebar/MenuButton.svelte.d.ts +1 -0
- package/package/components/sidebar/SidebarContent.svelte +8 -0
- package/package/components/sidebar/WorkspaceMenu.svelte +40 -21
- package/package/components/table/DataTable.svelte +43 -3
- package/package/components/table/DataTable.svelte.d.ts +2 -0
- package/package/components/table/Head.svelte +1 -1
- package/package/components/table/Row.svelte +11 -1
- package/package/components/table/Row.svelte.d.ts +3 -0
- package/package/components/table/index.d.ts +3 -0
- package/package/components/table/index.js +3 -0
- package/package/components/triggers/CaptureButton.svelte +38 -4
- package/package/components/triggers/CaptureButton.svelte.d.ts +3 -1
- package/package/components/triggers/CaptureIcon.svelte +7 -4
- package/package/components/triggers/CaptureIcon.svelte.d.ts +7 -13
- package/package/components/triggers/CaptureSection.svelte +50 -17
- package/package/components/triggers/CaptureSection.svelte.d.ts +5 -3
- package/package/components/triggers/CaptureTable.svelte +239 -186
- package/package/components/triggers/CaptureTable.svelte.d.ts +9 -11
- package/package/components/triggers/CaptureWrapper.svelte +126 -109
- package/package/components/triggers/CaptureWrapper.svelte.d.ts +3 -1
- package/package/components/triggers/KafkaTriggerEditorInner.svelte +1 -0
- package/package/components/triggers/KafkaTriggersConfigSection.svelte +16 -4
- package/package/components/triggers/KafkaTriggersConfigSection.svelte.d.ts +3 -1
- package/package/components/triggers/KafkaTriggersPanel.svelte +2 -0
- package/package/components/triggers/KafkaTriggersPanel.svelte.d.ts +2 -0
- package/package/components/triggers/NatsTriggerEditor.svelte +19 -0
- package/package/components/triggers/NatsTriggerEditor.svelte.d.ts +21 -0
- package/package/components/triggers/NatsTriggerEditorInner.svelte +239 -0
- package/package/components/triggers/NatsTriggerEditorInner.svelte.d.ts +21 -0
- package/package/components/triggers/NatsTriggersConfigSection.svelte +276 -0
- package/package/components/triggers/NatsTriggersConfigSection.svelte.d.ts +37 -0
- package/package/components/triggers/NatsTriggersPanel.svelte +126 -0
- package/package/components/triggers/NatsTriggersPanel.svelte.d.ts +26 -0
- package/package/components/triggers/RouteEditorConfigSection.svelte +12 -2
- package/package/components/triggers/RouteEditorConfigSection.svelte.d.ts +5 -1
- package/package/components/triggers/RouteEditorInner.svelte +5 -0
- package/package/components/triggers/RoutesPanel.svelte +4 -0
- package/package/components/triggers/RoutesPanel.svelte.d.ts +3 -0
- package/package/components/triggers/TriggersEditor.svelte +146 -97
- package/package/components/triggers/TriggersEditor.svelte.d.ts +2 -0
- package/package/components/triggers/TriggersEditorSection.svelte +19 -13
- package/package/components/triggers/TriggersEditorSection.svelte.d.ts +3 -0
- package/package/components/triggers/TriggersWrapper.svelte +7 -3
- package/package/components/triggers/TriggersWrapper.svelte.d.ts +2 -1
- package/package/components/triggers/WebhooksConfigSection.svelte +1 -0
- package/package/components/triggers/WebhooksConfigSection.svelte.d.ts +2 -1
- package/package/components/triggers/WebhooksPanel.svelte +2 -0
- package/package/components/triggers/WebhooksPanel.svelte.d.ts +2 -0
- package/package/components/triggers/WebsocketEditorConfigSection.svelte +3 -1
- package/package/components/triggers/WebsocketEditorConfigSection.svelte.d.ts +2 -1
- package/package/components/triggers/WebsocketTriggersPanel.svelte +2 -0
- package/package/components/triggers/WebsocketTriggersPanel.svelte.d.ts +2 -0
- package/package/components/triggers.d.ts +2 -1
- package/package/components/triggers.js +2 -0
- package/package/components/vscode.js +12 -8
- package/package/consts.d.ts +1 -0
- package/package/consts.js +18 -0
- package/package/gen/core/OpenAPI.js +1 -1
- package/package/gen/schemas.gen.d.ts +207 -13
- package/package/gen/schemas.gen.js +207 -13
- package/package/gen/services.gen.d.ts +118 -10
- package/package/gen/services.gen.js +237 -17
- package/package/gen/types.gen.d.ts +400 -40
- package/package/hubPaths.json +2 -1
- package/package/infer.js +11 -2
- package/package/monaco_workers/build_workers.js +39 -37
- package/package/monaco_workers/graphql.worker.bundle.js +18371 -36513
- package/package/script_helpers.d.ts +5 -2
- package/package/script_helpers.js +46 -8
- package/package/scripts.js +4 -0
- package/package/stores.d.ts +2 -1
- package/package/stores.js +2 -1
- package/package.json +14 -16
- package/package/monaco_workers/graphql.worker.bundle.d.ts +0 -0
|
@@ -93,15 +93,17 @@ async function loadTriggers() {
|
|
|
93
93
|
}
|
|
94
94
|
const triggerDefaultValuesStore = writable(undefined);
|
|
95
95
|
const captureOn = writable(undefined);
|
|
96
|
+
const showCaptureHint = writable(undefined);
|
|
96
97
|
setContext('TriggerContext', {
|
|
97
98
|
selectedTrigger: selectedTriggerStore,
|
|
98
99
|
primarySchedule: primaryScheduleStore,
|
|
99
100
|
triggersCount,
|
|
100
101
|
simplifiedPoll,
|
|
101
102
|
defaultValues: triggerDefaultValuesStore,
|
|
102
|
-
captureOn: captureOn
|
|
103
|
+
captureOn: captureOn,
|
|
104
|
+
showCaptureHint: showCaptureHint
|
|
103
105
|
});
|
|
104
|
-
const enterpriseLangs = ['bigquery', 'snowflake', 'mssql'];
|
|
106
|
+
const enterpriseLangs = ['bigquery', 'snowflake', 'mssql', 'oracledb'];
|
|
105
107
|
export function setCode(code) {
|
|
106
108
|
editor?.setCode(code);
|
|
107
109
|
}
|
|
@@ -294,7 +296,8 @@ async function editScript(stay, parentHash, deploymentMsg) {
|
|
|
294
296
|
visible_to_runner_only: script.visible_to_runner_only,
|
|
295
297
|
no_main_func: script.no_main_func,
|
|
296
298
|
has_preprocessor: script.has_preprocessor,
|
|
297
|
-
deployment_message: deploymentMsg || undefined
|
|
299
|
+
deployment_message: deploymentMsg || undefined,
|
|
300
|
+
on_behalf_of_email: script.on_behalf_of_email
|
|
298
301
|
}
|
|
299
302
|
});
|
|
300
303
|
const scheduleExists = initialPath != '' &&
|
|
@@ -430,7 +433,8 @@ async function saveDraft(forceSave = false) {
|
|
|
430
433
|
: script.concurrency_key,
|
|
431
434
|
visible_to_runner_only: script.visible_to_runner_only,
|
|
432
435
|
no_main_func: script.no_main_func,
|
|
433
|
-
has_preprocessor: script.has_preprocessor
|
|
436
|
+
has_preprocessor: script.has_preprocessor,
|
|
437
|
+
on_behalf_of_email: script.on_behalf_of_email
|
|
434
438
|
}
|
|
435
439
|
});
|
|
436
440
|
}
|
|
@@ -519,7 +523,9 @@ function langToLanguage(lang) {
|
|
|
519
523
|
async function applyArgs(e) {
|
|
520
524
|
selectedInputTab = e.detail.kind;
|
|
521
525
|
metadataOpen = false;
|
|
522
|
-
|
|
526
|
+
if (scriptEditor) {
|
|
527
|
+
scriptEditor.updateArgs(e.detail.args ?? {});
|
|
528
|
+
}
|
|
523
529
|
}
|
|
524
530
|
function openTriggers(ev) {
|
|
525
531
|
metadataOpen = true;
|
|
@@ -565,601 +571,628 @@ function addPreprocessor() {
|
|
|
565
571
|
>
|
|
566
572
|
<DrawerContent noPadding title="Settings" on:close={() => (metadataOpen = false)}>
|
|
567
573
|
<!-- svelte-ignore a11y-autofocus -->
|
|
568
|
-
<
|
|
569
|
-
<
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
<div
|
|
588
|
-
class={selectedTab === 'ui' ? 'p-0' : 'p-4'}
|
|
589
|
-
style={selectedTab === 'ui' ? `height: calc(100% - 32px);` : ''}
|
|
590
|
-
>
|
|
591
|
-
<TabContent value="metadata">
|
|
592
|
-
<div class="flex flex-col gap-8">
|
|
593
|
-
<Section label="Metadata">
|
|
594
|
-
<svelte:fragment slot="action">
|
|
595
|
-
<div class="flex flex-row items-center gap-2">
|
|
596
|
-
<ErrorHandlerToggleButton
|
|
597
|
-
kind="script"
|
|
598
|
-
scriptOrFlowPath={script.path}
|
|
599
|
-
bind:errorHandlerMuted={script.ws_error_handler_muted}
|
|
600
|
-
iconOnly={false}
|
|
601
|
-
/>
|
|
602
|
-
</div>
|
|
603
|
-
</svelte:fragment>
|
|
604
|
-
<div class="flex flex-col gap-4">
|
|
605
|
-
<Label label="Summary">
|
|
606
|
-
<MetadataGen
|
|
607
|
-
label="Summary"
|
|
608
|
-
bind:content={script.summary}
|
|
609
|
-
lang={script.language}
|
|
610
|
-
code={script.content}
|
|
611
|
-
promptConfigName="summary"
|
|
612
|
-
generateOnAppear
|
|
613
|
-
on:change={() => {
|
|
614
|
-
if (initialPath == '' && script.summary?.length > 0 && !dirtyPath) {
|
|
615
|
-
path?.setName(
|
|
616
|
-
script.summary
|
|
617
|
-
.toLowerCase()
|
|
618
|
-
.replace(/[^a-z0-9_]/g, '_')
|
|
619
|
-
.replace(/-+/g, '_')
|
|
620
|
-
.replace(/^-|-$/g, '')
|
|
621
|
-
)
|
|
622
|
-
}
|
|
623
|
-
}}
|
|
624
|
-
elementProps={{
|
|
625
|
-
type: 'text',
|
|
626
|
-
placeholder: 'Short summary to be displayed when listed'
|
|
627
|
-
}}
|
|
628
|
-
/>
|
|
629
|
-
</Label>
|
|
630
|
-
<Label label="Path">
|
|
631
|
-
<svelte:fragment slot="header">
|
|
632
|
-
<Tooltip
|
|
633
|
-
documentationLink="https://www.windmill.dev/docs/core_concepts/roles_and_permissions#path"
|
|
634
|
-
>
|
|
635
|
-
The unique identifier of the script in the workspace that defines
|
|
636
|
-
permissions
|
|
637
|
-
</Tooltip>
|
|
638
|
-
</svelte:fragment>
|
|
639
|
-
<Path
|
|
640
|
-
bind:this={path}
|
|
641
|
-
bind:error={pathError}
|
|
642
|
-
bind:path={script.path}
|
|
643
|
-
bind:dirty={dirtyPath}
|
|
644
|
-
{initialPath}
|
|
645
|
-
autofocus={false}
|
|
646
|
-
namePlaceholder="script"
|
|
647
|
-
kind="script"
|
|
648
|
-
/>
|
|
649
|
-
</Label>
|
|
650
|
-
<Label label="Description">
|
|
651
|
-
<MetadataGen
|
|
652
|
-
bind:content={script.description}
|
|
653
|
-
lang={script.language}
|
|
654
|
-
code={script.content}
|
|
655
|
-
promptConfigName="description"
|
|
656
|
-
elementType="textarea"
|
|
657
|
-
elementProps={{
|
|
658
|
-
placeholder: 'What this script does and how to use it'
|
|
659
|
-
}}
|
|
660
|
-
/>
|
|
661
|
-
</Label>
|
|
662
|
-
</div>
|
|
663
|
-
</Section>
|
|
574
|
+
<div class="flex flex-col h-full">
|
|
575
|
+
<Tabs bind:selected={selectedTab} wrapperClass="flex-none w-full">
|
|
576
|
+
<Tab value="metadata">Metadata</Tab>
|
|
577
|
+
<Tab value="runtime">Runtime</Tab>
|
|
578
|
+
<Tab value="ui">
|
|
579
|
+
Generated UI
|
|
580
|
+
<Tooltip
|
|
581
|
+
documentationLink="https://www.windmill.dev/docs/core_concepts/json_schema_and_parsing"
|
|
582
|
+
>
|
|
583
|
+
The arguments are synced with the main signature but you may refine the parts that
|
|
584
|
+
cannot be inferred from the type directly.
|
|
585
|
+
</Tooltip>
|
|
586
|
+
</Tab>
|
|
587
|
+
<Tab value="triggers">
|
|
588
|
+
Triggers
|
|
589
|
+
<Tooltip documentationLink="https://www.windmill.dev/docs/getting_started/triggers">
|
|
590
|
+
Configure how this script will be triggered.
|
|
591
|
+
</Tooltip>
|
|
592
|
+
</Tab>
|
|
664
593
|
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
[
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
window.open(
|
|
699
|
-
'https://www.windmill.dev/docs/advanced/docker',
|
|
700
|
-
'_blank'
|
|
701
|
-
)
|
|
702
|
-
}
|
|
703
|
-
}
|
|
704
|
-
]
|
|
705
|
-
)
|
|
706
|
-
return
|
|
707
|
-
}
|
|
708
|
-
template = 'docker'
|
|
709
|
-
} else if (lang == 'bunnative') {
|
|
710
|
-
template = 'bunnative'
|
|
711
|
-
} else {
|
|
712
|
-
template = 'script'
|
|
594
|
+
<svelte:fragment slot="content">
|
|
595
|
+
<div class="min-h-0 grow overflow-y-auto">
|
|
596
|
+
<TabContent value="metadata">
|
|
597
|
+
<div class="flex flex-col gap-8 px-4 py-2">
|
|
598
|
+
<Section label="Metadata">
|
|
599
|
+
<svelte:fragment slot="action">
|
|
600
|
+
<div class="flex flex-row items-center gap-2">
|
|
601
|
+
<ErrorHandlerToggleButton
|
|
602
|
+
kind="script"
|
|
603
|
+
scriptOrFlowPath={script.path}
|
|
604
|
+
bind:errorHandlerMuted={script.ws_error_handler_muted}
|
|
605
|
+
iconOnly={false}
|
|
606
|
+
/>
|
|
607
|
+
</div>
|
|
608
|
+
</svelte:fragment>
|
|
609
|
+
<div class="flex flex-col gap-4">
|
|
610
|
+
<Label label="Summary">
|
|
611
|
+
<MetadataGen
|
|
612
|
+
label="Summary"
|
|
613
|
+
bind:content={script.summary}
|
|
614
|
+
lang={script.language}
|
|
615
|
+
code={script.content}
|
|
616
|
+
promptConfigName="summary"
|
|
617
|
+
generateOnAppear
|
|
618
|
+
on:change={() => {
|
|
619
|
+
if (initialPath == '' && script.summary?.length > 0 && !dirtyPath) {
|
|
620
|
+
path?.setName(
|
|
621
|
+
script.summary
|
|
622
|
+
.toLowerCase()
|
|
623
|
+
.replace(/[^a-z0-9_]/g, '_')
|
|
624
|
+
.replace(/-+/g, '_')
|
|
625
|
+
.replace(/^-|-$/g, '')
|
|
626
|
+
)
|
|
713
627
|
}
|
|
714
|
-
let language = langToLanguage(lang)
|
|
715
|
-
//
|
|
716
|
-
initContent(language, script.kind, template)
|
|
717
|
-
script.language = language
|
|
718
628
|
}}
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
<span class="ml-2 py-2 truncate">{label}</span>
|
|
724
|
-
{#if lang === 'ansible'}
|
|
725
|
-
<span class="text-tertiary !text-xs"> BETA </span>
|
|
726
|
-
{/if}
|
|
727
|
-
</Button>
|
|
728
|
-
<svelte:fragment slot="text"
|
|
729
|
-
>{label} is only available with an enterprise license</svelte:fragment
|
|
730
|
-
>
|
|
731
|
-
</Popover>
|
|
732
|
-
{/each}
|
|
733
|
-
</div>
|
|
734
|
-
</Section>
|
|
735
|
-
|
|
736
|
-
<Section label="Script kind">
|
|
737
|
-
<svelte:fragment slot="header">
|
|
738
|
-
<Tooltip
|
|
739
|
-
documentationLink="https://www.windmill.dev/docs/script_editor/script_kinds"
|
|
740
|
-
>
|
|
741
|
-
Tag this script's purpose within flows such that it is available as the
|
|
742
|
-
corresponding action.
|
|
743
|
-
</Tooltip>
|
|
744
|
-
</svelte:fragment>
|
|
745
|
-
<ToggleButtonGroup
|
|
746
|
-
class="h-10"
|
|
747
|
-
selected={script.kind}
|
|
748
|
-
on:selected={({ detail }) => {
|
|
749
|
-
template = 'script'
|
|
750
|
-
script.kind = detail
|
|
751
|
-
initContent(script.language, detail, template)
|
|
752
|
-
}}
|
|
753
|
-
>
|
|
754
|
-
{#each scriptKindOptions as { value, title, desc, documentationLink, Icon }}
|
|
755
|
-
<ToggleButton
|
|
756
|
-
label={title}
|
|
757
|
-
{value}
|
|
758
|
-
tooltip={desc}
|
|
759
|
-
{documentationLink}
|
|
760
|
-
icon={Icon}
|
|
761
|
-
showTooltipIcon={Boolean(desc)}
|
|
762
|
-
/>
|
|
763
|
-
{/each}
|
|
764
|
-
</ToggleButtonGroup>
|
|
765
|
-
</Section>
|
|
766
|
-
</div>
|
|
767
|
-
</TabContent>
|
|
768
|
-
<TabContent value="runtime">
|
|
769
|
-
<div class="flex flex-col gap-8">
|
|
770
|
-
<Section label="Concurrency limits" eeOnly>
|
|
771
|
-
<svelte:fragment slot="header">
|
|
772
|
-
<Tooltip
|
|
773
|
-
documentationLink="https://www.windmill.dev/docs/core_concepts/concurrency_limits"
|
|
774
|
-
>
|
|
775
|
-
Allowed concurrency within a given timeframe
|
|
776
|
-
</Tooltip>
|
|
777
|
-
</svelte:fragment>
|
|
778
|
-
<div class="flex flex-col gap-4">
|
|
779
|
-
<Label label="Max number of executions within the time window">
|
|
780
|
-
<div class="flex flex-row gap-2 max-w-sm">
|
|
781
|
-
<input
|
|
782
|
-
disabled={!$enterpriseLicense}
|
|
783
|
-
bind:value={script.concurrent_limit}
|
|
784
|
-
type="number"
|
|
629
|
+
elementProps={{
|
|
630
|
+
type: 'text',
|
|
631
|
+
placeholder: 'Short summary to be displayed when listed'
|
|
632
|
+
}}
|
|
785
633
|
/>
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
script
|
|
634
|
+
</Label>
|
|
635
|
+
<Label label="Path">
|
|
636
|
+
<svelte:fragment slot="header">
|
|
637
|
+
<Tooltip
|
|
638
|
+
documentationLink="https://www.windmill.dev/docs/core_concepts/roles_and_permissions#path"
|
|
639
|
+
>
|
|
640
|
+
The unique identifier of the script in the workspace that defines
|
|
641
|
+
permissions
|
|
642
|
+
</Tooltip>
|
|
643
|
+
</svelte:fragment>
|
|
644
|
+
<Path
|
|
645
|
+
bind:this={path}
|
|
646
|
+
bind:error={pathError}
|
|
647
|
+
bind:path={script.path}
|
|
648
|
+
bind:dirty={dirtyPath}
|
|
649
|
+
{initialPath}
|
|
650
|
+
autofocus={false}
|
|
651
|
+
namePlaceholder="script"
|
|
652
|
+
kind="script"
|
|
653
|
+
/>
|
|
654
|
+
</Label>
|
|
655
|
+
<Label label="Description">
|
|
656
|
+
<MetadataGen
|
|
657
|
+
bind:content={script.description}
|
|
658
|
+
lang={script.language}
|
|
659
|
+
code={script.content}
|
|
660
|
+
promptConfigName="description"
|
|
661
|
+
elementType="textarea"
|
|
662
|
+
elementProps={{
|
|
663
|
+
placeholder: 'What this script does and how to use it'
|
|
793
664
|
}}
|
|
794
|
-
|
|
795
|
-
|
|
665
|
+
/>
|
|
666
|
+
</Label>
|
|
667
|
+
</div>
|
|
668
|
+
</Section>
|
|
669
|
+
|
|
670
|
+
<Section label="Language">
|
|
671
|
+
<svelte:fragment slot="action"><DefaultScripts /></svelte:fragment>
|
|
672
|
+
{#if lockedLanguage}
|
|
673
|
+
<div class="text-sm text-tertiary italic mb-2">
|
|
674
|
+
As a forked script, the language '{script.language}' cannot be modified.
|
|
796
675
|
</div>
|
|
797
|
-
</Label>
|
|
798
|
-
<Label label="Time window in seconds">
|
|
799
|
-
<SecondsInput
|
|
800
|
-
disabled={!$enterpriseLicense}
|
|
801
|
-
bind:seconds={script.concurrency_time_window_s}
|
|
802
|
-
/>
|
|
803
|
-
</Label>
|
|
804
|
-
<Label label="Custom concurrency key (optional)">
|
|
805
|
-
<svelte:fragment slot="header">
|
|
806
|
-
<Tooltip
|
|
807
|
-
documentationLink="https://www.windmill.dev/docs/core_concepts/concurrency_limits#custom-concurrency-key"
|
|
808
|
-
>
|
|
809
|
-
Concurrency keys are global, you can have them be workspace specific using
|
|
810
|
-
the variable `$workspace`. You can also use an argument's value using
|
|
811
|
-
`$args[name_of_arg]`</Tooltip
|
|
812
|
-
>
|
|
813
|
-
</svelte:fragment>
|
|
814
|
-
<input
|
|
815
|
-
disabled={!$enterpriseLicense}
|
|
816
|
-
type="text"
|
|
817
|
-
autofocus
|
|
818
|
-
bind:value={script.concurrency_key}
|
|
819
|
-
placeholder={`$workspace/script/${script.path}-$args[foo]`}
|
|
820
|
-
/>
|
|
821
|
-
</Label>
|
|
822
|
-
</div>
|
|
823
|
-
</Section>
|
|
824
|
-
<Section label="Worker group tag (queue)">
|
|
825
|
-
<svelte:fragment slot="header">
|
|
826
|
-
<Tooltip
|
|
827
|
-
documentationLink="https://www.windmill.dev/docs/core_concepts/worker_groups"
|
|
828
|
-
>
|
|
829
|
-
The script will be executed on a worker configured to listen to this worker
|
|
830
|
-
group tag (queue). For instance, you could setup an "highmem", or "gpu" tag.
|
|
831
|
-
</Tooltip>
|
|
832
|
-
</svelte:fragment>
|
|
833
|
-
<WorkerTagPicker bind:tag={script.tag} />
|
|
834
|
-
</Section>
|
|
835
|
-
<Section label="Cache">
|
|
836
|
-
<svelte:fragment slot="header">
|
|
837
|
-
<Tooltip
|
|
838
|
-
documentationLink="https://www.windmill.dev/docs/core_concepts/caching"
|
|
839
|
-
>
|
|
840
|
-
Cache the results for each possible inputs
|
|
841
|
-
</Tooltip>
|
|
842
|
-
</svelte:fragment>
|
|
843
|
-
<div class="flex gap-2 shrink flex-col">
|
|
844
|
-
<Toggle
|
|
845
|
-
size="sm"
|
|
846
|
-
checked={Boolean(script.cache_ttl)}
|
|
847
|
-
on:change={() => {
|
|
848
|
-
if (script.cache_ttl && script.cache_ttl != undefined) {
|
|
849
|
-
script.cache_ttl = undefined
|
|
850
|
-
} else {
|
|
851
|
-
script.cache_ttl = 300
|
|
852
|
-
}
|
|
853
|
-
}}
|
|
854
|
-
options={{
|
|
855
|
-
right: 'Cache the results for each possible inputs'
|
|
856
|
-
}}
|
|
857
|
-
/>
|
|
858
|
-
<span class="text-secondary text-sm leading-none">
|
|
859
|
-
How long to the keep cache valid
|
|
860
|
-
</span>
|
|
861
|
-
{#if script.cache_ttl}
|
|
862
|
-
<SecondsInput bind:seconds={script.cache_ttl} />
|
|
863
|
-
{:else}
|
|
864
|
-
<SecondsInput disabled />
|
|
865
|
-
{/if}
|
|
866
|
-
</div>
|
|
867
|
-
</Section>
|
|
868
|
-
<Section label="Timeout">
|
|
869
|
-
<svelte:fragment slot="header">
|
|
870
|
-
<Tooltip
|
|
871
|
-
documentationLink="https://www.windmill.dev/docs/script_editor/settings#timeout"
|
|
872
|
-
>
|
|
873
|
-
Add a custom timeout for this script
|
|
874
|
-
</Tooltip>
|
|
875
|
-
</svelte:fragment>
|
|
876
|
-
<div class="flex gap-2 shrink flex-col">
|
|
877
|
-
<Toggle
|
|
878
|
-
size="sm"
|
|
879
|
-
checked={Boolean(script.timeout)}
|
|
880
|
-
on:change={() => {
|
|
881
|
-
if (script.timeout && script.timeout != undefined) {
|
|
882
|
-
script.timeout = undefined
|
|
883
|
-
} else {
|
|
884
|
-
script.timeout = 300
|
|
885
|
-
}
|
|
886
|
-
}}
|
|
887
|
-
options={{
|
|
888
|
-
right: 'Add a custom timeout for this script'
|
|
889
|
-
}}
|
|
890
|
-
/>
|
|
891
|
-
<span class="text-secondary text-sm leading-none"> Timeout duration </span>
|
|
892
|
-
{#if script.timeout}
|
|
893
|
-
<SecondsInput bind:seconds={script.timeout} />
|
|
894
|
-
{:else}
|
|
895
|
-
<SecondsInput disabled />
|
|
896
676
|
{/if}
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
677
|
+
<div class=" grid grid-cols-3 gap-2">
|
|
678
|
+
{#each langs as [label, lang] (lang)}
|
|
679
|
+
{@const isPicked =
|
|
680
|
+
(lang == script.language && template == 'script') ||
|
|
681
|
+
(template == 'bunnative' && lang == 'bunnative') ||
|
|
682
|
+
(template == 'docker' && lang == 'docker')}
|
|
683
|
+
<Popover
|
|
684
|
+
disablePopup={!enterpriseLangs.includes(lang) || !!$enterpriseLicense}
|
|
685
|
+
>
|
|
686
|
+
<Button
|
|
687
|
+
size="sm"
|
|
688
|
+
variant="border"
|
|
689
|
+
color={isPicked ? 'blue' : 'light'}
|
|
690
|
+
btnClasses={isPicked
|
|
691
|
+
? '!border-2 !bg-blue-50/75 dark:!bg-frost-900/75'
|
|
692
|
+
: 'm-[1px]'}
|
|
693
|
+
on:click={() => {
|
|
694
|
+
if (lang == 'docker') {
|
|
695
|
+
if (isCloudHosted()) {
|
|
696
|
+
sendUserToast(
|
|
697
|
+
'You cannot use Docker scripts on the multi-tenant platform. Use a dedicated instance or self-host windmill instead.',
|
|
698
|
+
true,
|
|
699
|
+
[
|
|
700
|
+
{
|
|
701
|
+
label: 'Learn more',
|
|
702
|
+
callback: () => {
|
|
703
|
+
window.open(
|
|
704
|
+
'https://www.windmill.dev/docs/advanced/docker',
|
|
705
|
+
'_blank'
|
|
706
|
+
)
|
|
707
|
+
}
|
|
708
|
+
}
|
|
709
|
+
]
|
|
710
|
+
)
|
|
711
|
+
return
|
|
712
|
+
}
|
|
713
|
+
template = 'docker'
|
|
714
|
+
} else if (lang == 'bunnative') {
|
|
715
|
+
template = 'bunnative'
|
|
716
|
+
} else {
|
|
717
|
+
template = 'script'
|
|
718
|
+
}
|
|
719
|
+
let language = langToLanguage(lang)
|
|
720
|
+
//
|
|
721
|
+
initContent(language, script.kind, template)
|
|
722
|
+
script.language = language
|
|
723
|
+
}}
|
|
724
|
+
disabled={lockedLanguage ||
|
|
725
|
+
(enterpriseLangs.includes(lang) && !$enterpriseLicense)}
|
|
726
|
+
>
|
|
727
|
+
<LanguageIcon {lang} />
|
|
728
|
+
<span class="ml-2 py-2 truncate">{label}</span>
|
|
729
|
+
{#if lang === 'ansible'}
|
|
730
|
+
<span class="text-tertiary !text-xs"> BETA </span>
|
|
731
|
+
{/if}
|
|
732
|
+
</Button>
|
|
733
|
+
<svelte:fragment slot="text"
|
|
734
|
+
>{label} is only available with an enterprise license</svelte:fragment
|
|
735
|
+
>
|
|
736
|
+
</Popover>
|
|
737
|
+
{/each}
|
|
950
738
|
</div>
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
>
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
WARNING: This settings ONLY applies to synchronous webhooks or when the script
|
|
970
|
-
is used within a flow. If used individually, this script must be triggered
|
|
971
|
-
using a synchronous endpoint to have the desired effect.
|
|
972
|
-
<br />
|
|
973
|
-
<br />
|
|
974
|
-
The logs, arguments and results of the job will be completely deleted from Windmill
|
|
975
|
-
once it is complete and the result has been returned.
|
|
976
|
-
<br />
|
|
977
|
-
<br />
|
|
978
|
-
The deletion is irreversible.
|
|
979
|
-
{#if !$enterpriseLicense}
|
|
980
|
-
<br />
|
|
981
|
-
<br />
|
|
982
|
-
This option is only available on Windmill Enterprise Edition.
|
|
983
|
-
{/if}
|
|
984
|
-
</Tooltip>
|
|
985
|
-
</svelte:fragment>
|
|
986
|
-
<div class="flex gap-2 shrink flex-col">
|
|
987
|
-
<Toggle
|
|
988
|
-
disabled={!$enterpriseLicense}
|
|
989
|
-
size="sm"
|
|
990
|
-
checked={Boolean(script.delete_after_use)}
|
|
991
|
-
on:change={() => {
|
|
992
|
-
if (script.delete_after_use) {
|
|
993
|
-
script.delete_after_use = undefined
|
|
994
|
-
} else {
|
|
995
|
-
script.delete_after_use = true
|
|
996
|
-
}
|
|
997
|
-
}}
|
|
998
|
-
options={{
|
|
999
|
-
right: 'Delete logs, arguments and results after use'
|
|
1000
|
-
}}
|
|
1001
|
-
/>
|
|
1002
|
-
</div>
|
|
1003
|
-
</Section>
|
|
1004
|
-
{#if !isCloudHosted()}
|
|
1005
|
-
<Section label="High priority script" eeOnly>
|
|
1006
|
-
<Toggle
|
|
1007
|
-
disabled={!$enterpriseLicense || isCloudHosted()}
|
|
1008
|
-
size="sm"
|
|
1009
|
-
checked={script.priority !== undefined && script.priority > 0}
|
|
1010
|
-
on:change={() => {
|
|
1011
|
-
if (script.priority) {
|
|
1012
|
-
script.priority = undefined
|
|
1013
|
-
} else {
|
|
1014
|
-
script.priority = 100
|
|
1015
|
-
}
|
|
1016
|
-
}}
|
|
1017
|
-
options={{
|
|
1018
|
-
right: 'Label as high priority'
|
|
739
|
+
</Section>
|
|
740
|
+
|
|
741
|
+
<Section label="Script kind">
|
|
742
|
+
<svelte:fragment slot="header">
|
|
743
|
+
<Tooltip
|
|
744
|
+
documentationLink="https://www.windmill.dev/docs/script_editor/script_kinds"
|
|
745
|
+
>
|
|
746
|
+
Tag this script's purpose within flows such that it is available as the
|
|
747
|
+
corresponding action.
|
|
748
|
+
</Tooltip>
|
|
749
|
+
</svelte:fragment>
|
|
750
|
+
<ToggleButtonGroup
|
|
751
|
+
class="h-10"
|
|
752
|
+
selected={script.kind}
|
|
753
|
+
on:selected={({ detail }) => {
|
|
754
|
+
template = 'script'
|
|
755
|
+
script.kind = detail
|
|
756
|
+
initContent(script.language, detail, template)
|
|
1019
757
|
}}
|
|
1020
758
|
>
|
|
1021
|
-
|
|
759
|
+
{#each scriptKindOptions as { value, title, desc, documentationLink, Icon }}
|
|
760
|
+
<ToggleButton
|
|
761
|
+
label={title}
|
|
762
|
+
{value}
|
|
763
|
+
tooltip={desc}
|
|
764
|
+
{documentationLink}
|
|
765
|
+
icon={Icon}
|
|
766
|
+
showTooltipIcon={Boolean(desc)}
|
|
767
|
+
/>
|
|
768
|
+
{/each}
|
|
769
|
+
</ToggleButtonGroup>
|
|
770
|
+
</Section>
|
|
771
|
+
</div>
|
|
772
|
+
</TabContent>
|
|
773
|
+
<TabContent value="runtime">
|
|
774
|
+
<div class="flex flex-col gap-8 px-4 py-2">
|
|
775
|
+
<Section label="Concurrency limits" eeOnly>
|
|
776
|
+
<svelte:fragment slot="header">
|
|
777
|
+
<Tooltip
|
|
778
|
+
documentationLink="https://www.windmill.dev/docs/core_concepts/concurrency_limits"
|
|
779
|
+
>
|
|
780
|
+
Allowed concurrency within a given timeframe
|
|
781
|
+
</Tooltip>
|
|
782
|
+
</svelte:fragment>
|
|
783
|
+
<div class="flex flex-col gap-4">
|
|
784
|
+
<Label label="Max number of executions within the time window">
|
|
785
|
+
<div class="flex flex-row gap-2 max-w-sm">
|
|
786
|
+
<input
|
|
787
|
+
disabled={!$enterpriseLicense}
|
|
788
|
+
bind:value={script.concurrent_limit}
|
|
789
|
+
type="number"
|
|
790
|
+
/>
|
|
791
|
+
<Button
|
|
792
|
+
size="sm"
|
|
793
|
+
color="light"
|
|
794
|
+
on:click={() => {
|
|
795
|
+
script.concurrent_limit = undefined
|
|
796
|
+
script.concurrency_time_window_s = undefined
|
|
797
|
+
script.concurrency_key = undefined
|
|
798
|
+
}}
|
|
799
|
+
variant="border">Remove Limits</Button
|
|
800
|
+
>
|
|
801
|
+
</div>
|
|
802
|
+
</Label>
|
|
803
|
+
<Label label="Time window in seconds">
|
|
804
|
+
<SecondsInput
|
|
805
|
+
disabled={!$enterpriseLicense}
|
|
806
|
+
bind:seconds={script.concurrency_time_window_s}
|
|
807
|
+
/>
|
|
808
|
+
</Label>
|
|
809
|
+
<Label label="Custom concurrency key (optional)">
|
|
810
|
+
<svelte:fragment slot="header">
|
|
811
|
+
<Tooltip
|
|
812
|
+
documentationLink="https://www.windmill.dev/docs/core_concepts/concurrency_limits#custom-concurrency-key"
|
|
813
|
+
>
|
|
814
|
+
Concurrency keys are global, you can have them be workspace specific
|
|
815
|
+
using the variable `$workspace`. You can also use an argument's value
|
|
816
|
+
using `$args[name_of_arg]`</Tooltip
|
|
817
|
+
>
|
|
818
|
+
</svelte:fragment>
|
|
1022
819
|
<input
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
bind:value={script.
|
|
1027
|
-
|
|
1028
|
-
on:change={() => {
|
|
1029
|
-
if (script.priority && script.priority > 100) {
|
|
1030
|
-
script.priority = 100
|
|
1031
|
-
} else if (script.priority && script.priority < 0) {
|
|
1032
|
-
script.priority = 0
|
|
1033
|
-
}
|
|
1034
|
-
}}
|
|
820
|
+
disabled={!$enterpriseLicense}
|
|
821
|
+
type="text"
|
|
822
|
+
autofocus
|
|
823
|
+
bind:value={script.concurrency_key}
|
|
824
|
+
placeholder={`$workspace/script/${script.path}-$args[foo]`}
|
|
1035
825
|
/>
|
|
1036
|
-
</
|
|
1037
|
-
</
|
|
826
|
+
</Label>
|
|
827
|
+
</div>
|
|
828
|
+
</Section>
|
|
829
|
+
<Section label="Worker group tag (queue)">
|
|
1038
830
|
<svelte:fragment slot="header">
|
|
1039
|
-
<!-- TODO: Add EE-only badge when we have it -->
|
|
1040
831
|
<Tooltip
|
|
1041
|
-
documentationLink="https://www.windmill.dev/docs/core_concepts/
|
|
832
|
+
documentationLink="https://www.windmill.dev/docs/core_concepts/worker_groups"
|
|
1042
833
|
>
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
{#if !$enterpriseLicense}This is a feature only available on enterprise
|
|
1046
|
-
edition.{/if}
|
|
834
|
+
The script will be executed on a worker configured to listen to this worker
|
|
835
|
+
group tag (queue). For instance, you could setup an "highmem", or "gpu" tag.
|
|
1047
836
|
</Tooltip>
|
|
1048
837
|
</svelte:fragment>
|
|
838
|
+
<WorkerTagPicker bind:tag={script.tag} />
|
|
1049
839
|
</Section>
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
840
|
+
<Section label="Cache">
|
|
841
|
+
<svelte:fragment slot="header">
|
|
842
|
+
<Tooltip
|
|
843
|
+
documentationLink="https://www.windmill.dev/docs/core_concepts/caching"
|
|
844
|
+
>
|
|
845
|
+
Cache the results for each possible inputs
|
|
846
|
+
</Tooltip>
|
|
847
|
+
</svelte:fragment>
|
|
848
|
+
<div class="flex gap-2 shrink flex-col">
|
|
849
|
+
<Toggle
|
|
850
|
+
size="sm"
|
|
851
|
+
checked={Boolean(script.cache_ttl)}
|
|
852
|
+
on:change={() => {
|
|
853
|
+
if (script.cache_ttl && script.cache_ttl != undefined) {
|
|
854
|
+
script.cache_ttl = undefined
|
|
855
|
+
} else {
|
|
856
|
+
script.cache_ttl = 300
|
|
857
|
+
}
|
|
858
|
+
}}
|
|
859
|
+
options={{
|
|
860
|
+
right: 'Cache the results for each possible inputs'
|
|
861
|
+
}}
|
|
862
|
+
/>
|
|
863
|
+
<span class="text-secondary text-sm leading-none">
|
|
864
|
+
How long to the keep cache valid
|
|
865
|
+
</span>
|
|
866
|
+
{#if script.cache_ttl}
|
|
867
|
+
<SecondsInput bind:seconds={script.cache_ttl} />
|
|
868
|
+
{:else}
|
|
869
|
+
<SecondsInput disabled />
|
|
870
|
+
{/if}
|
|
871
|
+
</div>
|
|
872
|
+
</Section>
|
|
873
|
+
<Section label="Timeout">
|
|
874
|
+
<svelte:fragment slot="header">
|
|
875
|
+
<Tooltip
|
|
876
|
+
documentationLink="https://www.windmill.dev/docs/script_editor/settings#timeout"
|
|
877
|
+
>
|
|
878
|
+
Add a custom timeout for this script
|
|
879
|
+
</Tooltip>
|
|
880
|
+
</svelte:fragment>
|
|
881
|
+
<div class="flex gap-2 shrink flex-col">
|
|
882
|
+
<Toggle
|
|
883
|
+
size="sm"
|
|
884
|
+
checked={Boolean(script.timeout)}
|
|
885
|
+
on:change={() => {
|
|
886
|
+
if (script.timeout && script.timeout != undefined) {
|
|
887
|
+
script.timeout = undefined
|
|
888
|
+
} else {
|
|
889
|
+
script.timeout = 300
|
|
890
|
+
}
|
|
891
|
+
}}
|
|
892
|
+
options={{
|
|
893
|
+
right: 'Add a custom timeout for this script'
|
|
894
|
+
}}
|
|
895
|
+
/>
|
|
896
|
+
<span class="text-secondary text-sm leading-none"> Timeout duration </span>
|
|
897
|
+
{#if script.timeout}
|
|
898
|
+
<SecondsInput bind:seconds={script.timeout} />
|
|
899
|
+
{:else}
|
|
900
|
+
<SecondsInput disabled />
|
|
901
|
+
{/if}
|
|
902
|
+
</div>
|
|
903
|
+
</Section>
|
|
904
|
+
<Section label="Perpetual script">
|
|
905
|
+
<svelte:fragment slot="header">
|
|
906
|
+
<Tooltip
|
|
907
|
+
documentationLink="https://www.windmill.dev/docs/script_editor/perpetual_scripts"
|
|
908
|
+
>
|
|
909
|
+
Restart the script upon ending unless cancelled
|
|
910
|
+
</Tooltip>
|
|
911
|
+
</svelte:fragment>
|
|
912
|
+
<div class="flex gap-2 shrink flex-col">
|
|
913
|
+
<Toggle
|
|
914
|
+
size="sm"
|
|
915
|
+
checked={Boolean(script.restart_unless_cancelled)}
|
|
916
|
+
on:change={() => {
|
|
917
|
+
if (script.restart_unless_cancelled) {
|
|
918
|
+
script.restart_unless_cancelled = undefined
|
|
919
|
+
} else {
|
|
920
|
+
script.restart_unless_cancelled = true
|
|
921
|
+
}
|
|
922
|
+
}}
|
|
923
|
+
options={{
|
|
924
|
+
right: 'Restart upon ending unless cancelled'
|
|
925
|
+
}}
|
|
926
|
+
/>
|
|
927
|
+
</div>
|
|
928
|
+
</Section>
|
|
929
|
+
<Section label="Dedicated workers" eeOnly>
|
|
1062
930
|
<Toggle
|
|
931
|
+
disabled={!$enterpriseLicense ||
|
|
932
|
+
isCloudHosted() ||
|
|
933
|
+
(script.language != 'bun' &&
|
|
934
|
+
script.language != 'python3' &&
|
|
935
|
+
script.language != 'deno')}
|
|
1063
936
|
size="sm"
|
|
1064
|
-
checked={Boolean(script.
|
|
937
|
+
checked={Boolean(script.dedicated_worker)}
|
|
1065
938
|
on:change={() => {
|
|
1066
|
-
if (script.
|
|
1067
|
-
script.
|
|
939
|
+
if (script.dedicated_worker) {
|
|
940
|
+
script.dedicated_worker = undefined
|
|
1068
941
|
} else {
|
|
1069
|
-
script.
|
|
942
|
+
script.dedicated_worker = true
|
|
1070
943
|
}
|
|
1071
944
|
}}
|
|
1072
945
|
options={{
|
|
1073
|
-
right: '
|
|
946
|
+
right: 'Script is run on dedicated workers'
|
|
1074
947
|
}}
|
|
1075
948
|
/>
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
949
|
+
{#if script.dedicated_worker}
|
|
950
|
+
<div class="py-2">
|
|
951
|
+
<Alert type="info" title="Require dedicated workers">
|
|
952
|
+
One worker in a worker group needs to be configured with dedicated worker
|
|
953
|
+
set to: <pre>{$workspaceStore}:{script.path}</pre>
|
|
954
|
+
</Alert>
|
|
955
|
+
</div>
|
|
956
|
+
{/if}
|
|
957
|
+
<svelte:fragment slot="header">
|
|
958
|
+
<Tooltip
|
|
959
|
+
documentationLink="https://www.windmill.dev/docs/core_concepts/dedicated_workers"
|
|
960
|
+
>
|
|
961
|
+
In this mode, the script is meant to be run on dedicated workers that run
|
|
962
|
+
the script at native speed. Can reach >1500rps per dedicated worker. Only
|
|
963
|
+
available on enterprise edition and for Python3, Deno and Bun. For other
|
|
964
|
+
languages, the efficiency is already on par with deidcated workers since
|
|
965
|
+
they do not spawn a full runtime</Tooltip
|
|
966
|
+
>
|
|
967
|
+
</svelte:fragment>
|
|
968
|
+
</Section>
|
|
969
|
+
<Section label="Delete after use">
|
|
1080
970
|
<svelte:fragment slot="header">
|
|
1081
971
|
<Tooltip
|
|
1082
|
-
documentationLink="https://www.windmill.dev/docs/script_editor/
|
|
972
|
+
documentationLink="https://www.windmill.dev/docs/script_editor/settings#delete-after-use"
|
|
1083
973
|
>
|
|
1084
|
-
|
|
974
|
+
WARNING: This settings ONLY applies to synchronous webhooks or when the
|
|
975
|
+
script is used within a flow. If used individually, this script must be
|
|
976
|
+
triggered using a synchronous endpoint to have the desired effect.
|
|
977
|
+
<br />
|
|
978
|
+
<br />
|
|
979
|
+
The logs, arguments and results of the job will be completely deleted from Windmill
|
|
980
|
+
once it is complete and the result has been returned.
|
|
981
|
+
<br />
|
|
982
|
+
<br />
|
|
983
|
+
The deletion is irreversible.
|
|
984
|
+
{#if !$enterpriseLicense}
|
|
985
|
+
<br />
|
|
986
|
+
<br />
|
|
987
|
+
This option is only available on Windmill Enterprise Edition.
|
|
988
|
+
{/if}
|
|
1085
989
|
</Tooltip>
|
|
1086
990
|
</svelte:fragment>
|
|
1087
|
-
|
|
1088
|
-
<
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
|
|
1093
|
-
|
|
1094
|
-
|
|
1095
|
-
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
on:click={() => {
|
|
1104
|
-
script.envs && script.envs.splice(i, 1)
|
|
1105
|
-
script.envs = script.envs
|
|
1106
|
-
}}
|
|
1107
|
-
>
|
|
1108
|
-
<X size={14} />
|
|
1109
|
-
</button>
|
|
1110
|
-
</div>
|
|
1111
|
-
{/each}
|
|
1112
|
-
{/if}
|
|
991
|
+
<div class="flex gap-2 shrink flex-col">
|
|
992
|
+
<Toggle
|
|
993
|
+
disabled={!$enterpriseLicense}
|
|
994
|
+
size="sm"
|
|
995
|
+
checked={Boolean(script.delete_after_use)}
|
|
996
|
+
on:change={() => {
|
|
997
|
+
if (script.delete_after_use) {
|
|
998
|
+
script.delete_after_use = undefined
|
|
999
|
+
} else {
|
|
1000
|
+
script.delete_after_use = true
|
|
1001
|
+
}
|
|
1002
|
+
}}
|
|
1003
|
+
options={{
|
|
1004
|
+
right: 'Delete logs, arguments and results after use'
|
|
1005
|
+
}}
|
|
1006
|
+
/>
|
|
1113
1007
|
</div>
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
1008
|
+
</Section>
|
|
1009
|
+
{#if !isCloudHosted()}
|
|
1010
|
+
<Section label="High priority script" eeOnly>
|
|
1011
|
+
<Toggle
|
|
1012
|
+
disabled={!$enterpriseLicense || isCloudHosted()}
|
|
1013
|
+
size="sm"
|
|
1014
|
+
checked={script.priority !== undefined && script.priority > 0}
|
|
1015
|
+
on:change={() => {
|
|
1016
|
+
if (script.priority) {
|
|
1017
|
+
script.priority = undefined
|
|
1018
|
+
} else {
|
|
1019
|
+
script.priority = 100
|
|
1122
1020
|
}
|
|
1123
|
-
|
|
1021
|
+
}}
|
|
1022
|
+
options={{
|
|
1023
|
+
right: 'Label as high priority'
|
|
1124
1024
|
}}
|
|
1125
1025
|
>
|
|
1126
|
-
<
|
|
1127
|
-
<
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1026
|
+
<svelte:fragment slot="right">
|
|
1027
|
+
<input
|
|
1028
|
+
type="number"
|
|
1029
|
+
class="!w-16 ml-4"
|
|
1030
|
+
disabled={script.priority === undefined}
|
|
1031
|
+
bind:value={script.priority}
|
|
1032
|
+
on:focus
|
|
1033
|
+
on:change={() => {
|
|
1034
|
+
if (script.priority && script.priority > 100) {
|
|
1035
|
+
script.priority = 100
|
|
1036
|
+
} else if (script.priority && script.priority < 0) {
|
|
1037
|
+
script.priority = 0
|
|
1038
|
+
}
|
|
1039
|
+
}}
|
|
1040
|
+
/>
|
|
1041
|
+
</svelte:fragment>
|
|
1042
|
+
</Toggle>
|
|
1043
|
+
<svelte:fragment slot="header">
|
|
1044
|
+
<!-- TODO: Add EE-only badge when we have it -->
|
|
1045
|
+
<Tooltip
|
|
1046
|
+
documentationLink="https://www.windmill.dev/docs/core_concepts/jobs#high-priority-jobs"
|
|
1047
|
+
>
|
|
1048
|
+
Jobs from script labeled as high priority take precedence over the other
|
|
1049
|
+
jobs when in the jobs queue.
|
|
1050
|
+
{#if !$enterpriseLicense}This is a feature only available on enterprise
|
|
1051
|
+
edition.{/if}
|
|
1052
|
+
</Tooltip>
|
|
1053
|
+
</svelte:fragment>
|
|
1054
|
+
</Section>
|
|
1055
|
+
{/if}
|
|
1056
|
+
<Section label="Runs visibility">
|
|
1057
|
+
<svelte:fragment slot="header">
|
|
1058
|
+
<Tooltip
|
|
1059
|
+
documentationLink="https://www.windmill.dev/docs/core_concepts/monitor_past_and_future_runs#invisible-runs"
|
|
1060
|
+
>
|
|
1061
|
+
When this option is enabled, manual executions of this script are invisible
|
|
1062
|
+
to users other than the user running it, including the owner(s). This
|
|
1063
|
+
setting can be overridden when this script is run manually from the advanced
|
|
1064
|
+
menu.
|
|
1065
|
+
</Tooltip>
|
|
1066
|
+
</svelte:fragment>
|
|
1067
|
+
<div class="flex gap-2 shrink flex-col">
|
|
1068
|
+
<Toggle
|
|
1069
|
+
size="sm"
|
|
1070
|
+
checked={Boolean(script.visible_to_runner_only)}
|
|
1071
|
+
on:change={() => {
|
|
1072
|
+
if (script.visible_to_runner_only) {
|
|
1073
|
+
script.visible_to_runner_only = undefined
|
|
1074
|
+
} else {
|
|
1075
|
+
script.visible_to_runner_only = true
|
|
1076
|
+
}
|
|
1077
|
+
}}
|
|
1078
|
+
options={{
|
|
1079
|
+
right: 'Make runs invisible to others'
|
|
1080
|
+
}}
|
|
1081
|
+
/>
|
|
1131
1082
|
</div>
|
|
1132
1083
|
</Section>
|
|
1133
|
-
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
|
|
1154
|
-
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
|
|
1159
|
-
|
|
1160
|
-
|
|
1161
|
-
|
|
1162
|
-
|
|
1084
|
+
<Section label="On behalf of last editor">
|
|
1085
|
+
<svelte:fragment slot="header">
|
|
1086
|
+
<Tooltip>
|
|
1087
|
+
When this option is enabled, the script will be run with the permissions of
|
|
1088
|
+
the last editor.
|
|
1089
|
+
</Tooltip>
|
|
1090
|
+
</svelte:fragment>
|
|
1091
|
+
<div class="flex gap-2 shrink flex-col">
|
|
1092
|
+
<Toggle
|
|
1093
|
+
size="sm"
|
|
1094
|
+
checked={Boolean(script.on_behalf_of_email)}
|
|
1095
|
+
on:change={() => {
|
|
1096
|
+
if (script.on_behalf_of_email) {
|
|
1097
|
+
script.on_behalf_of_email = undefined
|
|
1098
|
+
} else {
|
|
1099
|
+
script.on_behalf_of_email = $userStore?.email
|
|
1100
|
+
}
|
|
1101
|
+
}}
|
|
1102
|
+
options={{
|
|
1103
|
+
right: 'Run on behalf of last editor'
|
|
1104
|
+
}}
|
|
1105
|
+
/>
|
|
1106
|
+
</div>
|
|
1107
|
+
</Section>
|
|
1108
|
+
{#if !isCloudHosted()}
|
|
1109
|
+
<Section label="Custom env variables">
|
|
1110
|
+
<svelte:fragment slot="header">
|
|
1111
|
+
<Tooltip
|
|
1112
|
+
documentationLink="https://www.windmill.dev/docs/script_editor/custom_environment_variables"
|
|
1113
|
+
>
|
|
1114
|
+
Additional static custom env variables to pass to the script.
|
|
1115
|
+
</Tooltip>
|
|
1116
|
+
</svelte:fragment>
|
|
1117
|
+
{#if script.envs && script.envs.length > 0}
|
|
1118
|
+
<Alert type="warning" title="Not passed in previews" size="xs">
|
|
1119
|
+
Static envs variables are not passed in preview but solely on deployed
|
|
1120
|
+
scripts.
|
|
1121
|
+
</Alert>
|
|
1122
|
+
{/if}
|
|
1123
|
+
<div class="w-full mt-2">
|
|
1124
|
+
<span class="text-tertiary text-xs pb-2"
|
|
1125
|
+
>Format is: `{'<KEY>=<VALUE>'}`</span
|
|
1126
|
+
>
|
|
1127
|
+
{#if Array.isArray(script.envs ?? [])}
|
|
1128
|
+
{#each script.envs ?? [] as v, i}
|
|
1129
|
+
<div class="flex max-w-md mt-1 w-full items-center relative">
|
|
1130
|
+
<input type="text" bind:value={v} placeholder="<KEY>=<VALUE>" />
|
|
1131
|
+
<button
|
|
1132
|
+
transition:fade|local={{ duration: 50 }}
|
|
1133
|
+
class="rounded-full p-1 bg-surface/60 duration-200 hover:bg-gray-200 absolute right-2"
|
|
1134
|
+
aria-label="Clear"
|
|
1135
|
+
on:click={() => {
|
|
1136
|
+
script.envs && script.envs.splice(i, 1)
|
|
1137
|
+
script.envs = script.envs
|
|
1138
|
+
}}
|
|
1139
|
+
>
|
|
1140
|
+
<X size={14} />
|
|
1141
|
+
</button>
|
|
1142
|
+
</div>
|
|
1143
|
+
{/each}
|
|
1144
|
+
{/if}
|
|
1145
|
+
</div>
|
|
1146
|
+
<div class="flex mt-2">
|
|
1147
|
+
<Button
|
|
1148
|
+
variant="border"
|
|
1149
|
+
color="light"
|
|
1150
|
+
size="xs"
|
|
1151
|
+
on:click={() => {
|
|
1152
|
+
if (script.envs == undefined || !Array.isArray(script.envs)) {
|
|
1153
|
+
script.envs = []
|
|
1154
|
+
}
|
|
1155
|
+
script.envs = script.envs.concat('')
|
|
1156
|
+
}}
|
|
1157
|
+
>
|
|
1158
|
+
<div class="flex flex-row gap-1">
|
|
1159
|
+
<Plus size="16" />
|
|
1160
|
+
Add item
|
|
1161
|
+
</div>
|
|
1162
|
+
</Button>
|
|
1163
|
+
</div>
|
|
1164
|
+
</Section>
|
|
1165
|
+
{/if}
|
|
1166
|
+
</div>
|
|
1167
|
+
</TabContent>
|
|
1168
|
+
<TabContent value="ui" class="h-full p-4">
|
|
1169
|
+
<ScriptSchema bind:schema={script.schema} />
|
|
1170
|
+
</TabContent>
|
|
1171
|
+
<TabContent value="triggers">
|
|
1172
|
+
<TriggersEditor
|
|
1173
|
+
on:applyArgs={applyArgs}
|
|
1174
|
+
on:addPreprocessor={addPreprocessor}
|
|
1175
|
+
on:exitTriggers={() => {
|
|
1176
|
+
captureTable?.loadCaptures(true)
|
|
1177
|
+
}}
|
|
1178
|
+
{initialPath}
|
|
1179
|
+
schema={script.schema}
|
|
1180
|
+
noEditor={true}
|
|
1181
|
+
isFlow={false}
|
|
1182
|
+
currentPath={script.path}
|
|
1183
|
+
hash={script.parent_hash}
|
|
1184
|
+
newItem={initialPath == ''}
|
|
1185
|
+
canHavePreprocessor={script.language === 'bun' ||
|
|
1186
|
+
script.language === 'deno' ||
|
|
1187
|
+
script.language === 'python3'}
|
|
1188
|
+
{hasPreprocessor}
|
|
1189
|
+
/>
|
|
1190
|
+
<!-- <ScriptSchedules {initialPath} schema={script.schema} schedule={scheduleStore} /> -->
|
|
1191
|
+
</TabContent>
|
|
1192
|
+
</div>
|
|
1193
|
+
</svelte:fragment>
|
|
1194
|
+
</Tabs>
|
|
1195
|
+
</div>
|
|
1163
1196
|
</DrawerContent>
|
|
1164
1197
|
</Drawer>
|
|
1165
1198
|
|