windmill-components 1.339.2 → 1.352.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/assets/app.css +0 -12
- package/package/ata/index.js +1 -0
- package/package/autosize.js +1 -1
- package/package/common.d.ts +6 -2
- package/package/common.js +2 -1
- package/package/components/AppConnectDrawer.svelte +1 -1
- package/package/components/AppConnectInner.svelte +9 -15
- package/package/components/ArgEnum.svelte +4 -1
- package/package/components/ArgEnum.svelte.d.ts +3 -1
- package/package/components/ArgInput.svelte +184 -141
- package/package/components/ArgInput.svelte.d.ts +7 -7
- package/package/components/ArrayTypeNarrowing.svelte +29 -27
- package/package/components/CenteredPage.svelte +2 -2
- package/package/components/DefaultTagsInner.svelte +1 -1
- package/package/components/Dev.svelte +2 -1
- package/package/components/DiffDrawer.svelte +1 -2
- package/package/components/DisplayResult.svelte +293 -233
- package/package/components/DurationMs.svelte +11 -3
- package/package/components/DurationMs.svelte.d.ts +2 -0
- package/package/components/EditableSchemaForm.svelte +447 -103
- package/package/components/EditableSchemaForm.svelte.d.ts +16 -6
- package/package/components/Editor.svelte +3 -1
- package/package/components/EditorBar.svelte +2 -2
- package/package/components/FlowBuilder.svelte +14 -6
- package/package/components/FlowGraphViewer.svelte +1 -1
- package/package/components/FlowGraphViewerStep.svelte +37 -9
- package/package/components/FlowGraphViewerStep.svelte.d.ts +2 -7
- package/package/components/FlowJobResult.svelte +1 -3
- package/package/components/FlowMetadata.svelte +1 -1
- package/package/components/FlowPreviewContent.svelte +5 -3
- package/package/components/FlowStatusViewer.svelte +4 -0
- package/package/components/FlowStatusViewer.svelte.d.ts +3 -0
- package/package/components/FlowStatusViewerInner.svelte +50 -17
- package/package/components/FlowStatusViewerInner.svelte.d.ts +3 -0
- package/package/components/FlowTimeline.svelte +13 -0
- package/package/components/FlowTimeline.svelte.d.ts +2 -0
- package/package/components/FlowViewer.svelte +0 -5
- package/package/components/FolderEditor.svelte +25 -0
- package/package/components/FolderEditor.svelte.d.ts +2 -0
- package/package/components/GroupEditor.svelte +36 -91
- package/package/components/GroupInfo.svelte +1 -1
- package/package/components/InputTransformForm.svelte +16 -1
- package/package/components/InputTransformForm.svelte.d.ts +2 -0
- package/package/components/InputTransformSchemaForm.svelte +6 -0
- package/package/components/InputTransformSchemaForm.svelte.d.ts +2 -0
- package/package/components/InstanceSettings.svelte +36 -3
- package/package/components/InstanceSettings.svelte.d.ts +2 -0
- package/package/components/JobStatus.svelte +2 -2
- package/package/components/LightweightArgInput.svelte +66 -14
- package/package/components/LightweightArgInput.svelte.d.ts +3 -2
- package/package/components/LightweightSchemaForm.svelte +24 -15
- package/package/components/ModulePreviewForm.svelte +1 -0
- package/package/components/NumberTypeNarrowing.svelte +71 -44
- package/package/components/ObjectResourceInput.svelte +2 -0
- package/package/components/ObjectResourceInput.svelte.d.ts +1 -0
- package/package/components/ObjectTypeNarrowing.svelte +0 -1
- package/package/components/ParqetCsvTableRenderer.svelte +181 -0
- package/package/components/ParqetCsvTableRenderer.svelte.d.ts +21 -0
- package/package/components/Path.svelte +2 -2
- package/package/components/PersistentScriptDrawer.svelte +6 -3
- package/package/components/Range.svelte +88 -286
- package/package/components/Range.svelte.d.ts +9 -23
- package/package/components/ResourceEditor.svelte +138 -141
- package/package/components/ResourceEditor.svelte.d.ts +9 -2
- package/package/components/ResourceEditorDrawer.svelte +45 -0
- package/package/components/ResourceEditorDrawer.svelte.d.ts +21 -0
- package/package/components/ResourcePicker.svelte +5 -2
- package/package/components/ResourceTypePicker.svelte +88 -36
- package/package/components/RunChart.svelte +55 -5
- package/package/components/RunChart.svelte.d.ts +1 -0
- package/package/components/RunForm.svelte +1 -1
- package/package/components/S3FilePicker.svelte +20 -8
- package/package/components/S3FilePicker.svelte.d.ts +2 -0
- package/package/components/ScheduleEditorInner.svelte +40 -37
- package/package/components/SchemaForm.svelte +192 -103
- package/package/components/SchemaForm.svelte.d.ts +16 -2
- package/package/components/ScriptBuilder.svelte +13 -8
- package/package/components/ScriptSchedules.svelte +11 -8
- package/package/components/ScriptSchema.svelte +3 -21
- package/package/components/ScriptVersionHistory.svelte +1 -1
- package/package/components/StringTypeNarrowing.svelte +217 -174
- package/package/components/StringTypeNarrowing.svelte.d.ts +5 -1
- package/package/components/Toggle.svelte +6 -3
- package/package/components/Toggle.svelte.d.ts +1 -0
- package/package/components/UserSettings.svelte +24 -1
- package/package/components/WorkspaceGroup.svelte +11 -13
- package/package/components/apps/components/buttons/AppButton.svelte +2 -0
- package/package/components/apps/components/buttons/AppButton.svelte.d.ts +1 -0
- package/package/components/apps/components/display/AppFlowStatusComponent.svelte +13 -70
- package/package/components/apps/components/display/AppFlowStatusComponent.svelte.d.ts +1 -9
- package/package/components/apps/components/display/AppJobIdFlowStatus.svelte +21 -8
- package/package/components/apps/components/display/AppJobIdFlowStatus.svelte.d.ts +1 -3
- package/package/components/apps/components/display/AppJobIdLogComponent.svelte +19 -7
- package/package/components/apps/components/display/AppJobIdLogComponent.svelte.d.ts +1 -3
- package/package/components/apps/components/display/AppLogsComponent.svelte +13 -70
- package/package/components/apps/components/display/AppLogsComponent.svelte.d.ts +1 -9
- package/package/components/apps/components/display/charts/AppAgCharts.svelte +25 -15
- package/package/components/apps/components/display/table/AppAggridTableActions.svelte +2 -0
- package/package/components/apps/components/display/table/SyncColumnDefs.svelte +1 -1
- package/package/components/apps/components/helpers/HiddenComponent.svelte +2 -1
- package/package/components/apps/components/helpers/RunnableComponent.svelte +18 -8
- package/package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +1 -0
- package/package/components/apps/components/helpers/RunnableWrapper.svelte +2 -0
- package/package/components/apps/components/helpers/RunnableWrapper.svelte.d.ts +1 -0
- package/package/components/apps/components/helpers/eval.js +1 -36
- package/package/components/apps/components/inputs/AppFileInput.svelte +3 -1
- package/package/components/apps/components/inputs/AppFileInput.svelte.d.ts +1 -0
- package/package/components/apps/components/inputs/AppS3FileInput.svelte +3 -1
- package/package/components/apps/components/inputs/AppS3FileInput.svelte.d.ts +1 -0
- package/package/components/apps/components/layout/AppConditionalWrapper.svelte +3 -1
- package/package/components/apps/components/layout/AppConditionalWrapper.svelte.d.ts +1 -0
- package/package/components/apps/components/layout/AppStepper.svelte +5 -1
- package/package/components/apps/components/layout/AppStepper.svelte.d.ts +2 -0
- package/package/components/apps/components/layout/AppTabs.svelte +3 -1
- package/package/components/apps/components/layout/AppTabs.svelte.d.ts +1 -0
- package/package/components/apps/editor/AppEditorHeader.svelte +6 -7
- package/package/components/apps/editor/SettingsPanel.svelte +13 -3
- package/package/components/apps/editor/component/Component.svelte +8 -16
- package/package/components/apps/editor/component/components.d.ts +11 -2
- package/package/components/apps/editor/component/components.js +2 -1
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte +1 -1
- package/package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte +5 -34
- package/package/components/apps/editor/settingsPanel/ComponentPanel.svelte +3 -41
- package/package/components/apps/editor/settingsPanel/EventHandlerItem.svelte +33 -0
- package/package/components/apps/editor/settingsPanel/EventHandlerItem.svelte.d.ts +19 -0
- package/package/components/apps/editor/settingsPanel/EventHandlers.svelte +103 -0
- package/package/components/apps/editor/settingsPanel/EventHandlers.svelte.d.ts +18 -0
- package/package/components/apps/editor/settingsPanel/GridCondition.svelte +21 -45
- package/package/components/apps/editor/settingsPanel/GridTab.svelte +3 -23
- package/package/components/apps/editor/settingsPanel/InputsSpecsEditor.svelte +5 -1
- package/package/components/apps/editor/settingsPanel/SubTypeEditor.svelte +0 -2
- package/package/components/apps/editor/settingsPanel/SubTypeEditor.svelte.d.ts +0 -1
- package/package/components/apps/editor/settingsPanel/inputEditor/EvalV2InputEditor.svelte +7 -1
- package/package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte +7 -14
- package/package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte.d.ts +0 -1
- package/package/components/common/button/ButtonDropdown.svelte +1 -0
- package/package/components/common/drawer/Disposable.svelte +3 -2
- package/package/components/common/drawer/Disposable.svelte.d.ts +1 -0
- package/package/components/common/drawer/Drawer.svelte +12 -2
- package/package/components/common/drawer/Drawer.svelte.d.ts +1 -0
- package/package/components/common/fileDownload/FileDownload.svelte +4 -2
- package/package/components/common/fileUpload/FileUpload.svelte +4 -3
- package/package/components/common/modal/Modal.svelte +4 -1
- package/package/components/common/modal/Modal.svelte.d.ts +1 -0
- package/package/components/common/popup/Popup.svelte +1 -1
- package/package/components/common/toggleButton-v2/ToggleButtonGroup.svelte +4 -1
- package/package/components/common/toggleButton-v2/ToggleButtonGroup.svelte.d.ts +1 -0
- package/package/components/common/waitTimeWarning/WaitTimeWarning.svelte +79 -0
- package/package/components/common/waitTimeWarning/WaitTimeWarning.svelte.d.ts +18 -0
- package/package/components/flows/content/FlowEditorPanel.svelte +16 -2
- package/package/components/flows/content/FlowInput.svelte +63 -53
- package/package/components/flows/content/FlowModuleComponent.svelte +26 -3
- package/package/components/flows/content/FlowModuleScript.svelte +40 -1
- package/package/components/flows/content/FlowModuleScript.svelte.d.ts +2 -0
- package/package/components/flows/content/FlowModuleSuspend.svelte +99 -59
- package/package/components/flows/content/FlowModuleWrapper.svelte +16 -1
- package/package/components/flows/content/FlowSchedules.svelte +11 -8
- package/package/components/flows/content/ScriptEditorDrawer.svelte +3 -4
- package/package/components/flows/flowStateUtils.js +4 -1
- package/package/components/flows/map/FlowModuleSchemaItem.svelte +16 -1
- package/package/components/flows/map/FlowModuleSchemaMap.svelte +6 -1
- package/package/components/flows/types.d.ts +4 -0
- package/package/components/flows/utils.d.ts +5 -1
- package/package/components/flows/utils.js +36 -0
- package/package/components/graph/FlowGraph.svelte +5 -2
- package/package/components/graph/FlowGraph.svelte.d.ts +2 -0
- package/package/components/graph/svelvet/container/models/index.d.ts +0 -5
- package/package/components/graph/svelvet/container/models/index.js +1 -1
- package/package/components/graph/svelvet/container/views/Svelvet.svelte +2 -5
- package/package/components/graph/util.d.ts +1 -37
- package/package/components/graph/util.js +0 -34
- package/package/components/instanceSettings.js +2 -1
- package/package/components/jobs/JobPreview.svelte +1 -1
- package/package/components/multiselect/MultiSelect.svelte +4 -3
- package/package/components/multiselect/MultiSelect.svelte.d.ts +1 -0
- package/package/components/multiselect/MultiSelectWrapper.svelte +89 -0
- package/package/components/multiselect/MultiSelectWrapper.svelte.d.ts +20 -0
- package/package/components/propertyPicker/ObjectViewer.svelte +6 -2
- package/package/components/runs/JobPreview.svelte +5 -1
- package/package/components/runs/RunRow.svelte +22 -3
- package/package/components/runs/RunRow.svelte.d.ts +2 -1
- package/package/components/runs/RunsTable.svelte +22 -9
- package/package/components/runs/RunsTable.svelte.d.ts +2 -1
- package/package/components/schema/AddProperty.svelte +149 -0
- package/package/components/schema/AddProperty.svelte.d.ts +23 -0
- package/package/components/schema/AddPropertyForm.svelte +33 -0
- package/package/components/schema/AddPropertyForm.svelte.d.ts +16 -0
- package/package/components/schema/EditableSchemaDrawer.svelte +198 -0
- package/package/components/schema/EditableSchemaDrawer.svelte.d.ts +21 -0
- package/package/components/schema/EditableSchemaWrapper.svelte +31 -0
- package/package/components/schema/EditableSchemaWrapper.svelte.d.ts +22 -0
- package/package/components/schema/FlowPropertyEditor.svelte +393 -0
- package/package/components/schema/FlowPropertyEditor.svelte.d.ts +47 -0
- package/package/components/schema/PropertyEditor.svelte +185 -0
- package/package/components/schema/PropertyEditor.svelte.d.ts +46 -0
- package/package/components/schema/SchemaFormDND.svelte +75 -0
- package/package/components/schema/SchemaFormDND.svelte.d.ts +28 -0
- package/package/components/table/AutoDataTable.svelte +90 -104
- package/package/components/table/Cell.svelte +4 -1
- package/package/components/table/Cell.svelte.d.ts +1 -0
- package/package/components/table/DownloadCsv.svelte +30 -0
- package/package/components/table/DownloadCsv.svelte.d.ts +17 -0
- package/package/components/table/tableUtils.d.ts +8 -0
- package/package/components/table/tableUtils.js +37 -0
- package/package/consts.js +3 -1
- package/package/deno_fetch.d.ts.txt +6 -0
- package/package/gen/core/OpenAPI.js +1 -1
- package/package/gen/schemas.gen.d.ts +76 -0
- package/package/gen/schemas.gen.js +76 -0
- package/package/gen/services.gen.d.ts +100 -5
- package/package/gen/services.gen.js +216 -16
- package/package/gen/types.gen.d.ts +378 -5
- package/package/inferArgSig.d.ts +10 -0
- package/package/inferArgSig.js +59 -2
- package/package/scripts.d.ts +2 -0
- package/package/scripts.js +6 -3
- package/package/utils.d.ts +4 -3
- package/package/utils.js +9 -4
- package/package/workspace_settings.d.ts +15 -0
- package/package/workspace_settings.js +81 -0
- package/package.json +16 -7
- package/package/components/ParqetTableRenderer.svelte +0 -117
- package/package/components/ParqetTableRenderer.svelte.d.ts +0 -18
- package/package/components/PropertyRow.svelte +0 -88
- package/package/components/PropertyRow.svelte.d.ts +0 -23
- package/package/components/SchemaEditor.svelte +0 -346
- package/package/components/SchemaEditor.svelte.d.ts +0 -25
- package/package/components/SchemaModal.svelte +0 -443
- package/package/components/SchemaModal.svelte.d.ts +0 -33
- package/package/components/apps/editor/settingsPanel/Recompute.svelte +0 -55
- package/package/components/apps/editor/settingsPanel/Recompute.svelte.d.ts +0 -20
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { json } from 'svelte-highlight/languages';
|
|
3
3
|
import { copyToClipboard, roughSizeOfObject } from '../utils';
|
|
4
4
|
import { Button, Drawer, DrawerContent } from './common';
|
|
5
|
-
import { ClipboardCopy, Download, Expand, PanelRightOpen, Table2, Braces, Highlighter, InfoIcon } from 'lucide-svelte';
|
|
5
|
+
import { ClipboardCopy, Download, Expand, PanelRightOpen, Table2, Braces, Highlighter, InfoIcon, ArrowDownFromLine } from 'lucide-svelte';
|
|
6
6
|
import Portal from 'svelte-portal';
|
|
7
7
|
import ObjectViewer from './propertyPicker/ObjectViewer.svelte';
|
|
8
8
|
import S3FilePicker from './S3FilePicker.svelte';
|
|
@@ -11,11 +11,14 @@ import AutoDataTable from './table/AutoDataTable.svelte';
|
|
|
11
11
|
import Markdown from 'svelte-exmarkdown';
|
|
12
12
|
import Toggle from './Toggle.svelte';
|
|
13
13
|
import FileDownload from './common/fileDownload/FileDownload.svelte';
|
|
14
|
-
import ParqetTableRenderer from './
|
|
14
|
+
import ParqetTableRenderer from './ParqetCsvTableRenderer.svelte';
|
|
15
15
|
import ToggleButtonGroup from './common/toggleButton-v2/ToggleButtonGroup.svelte';
|
|
16
16
|
import ToggleButton from './common/toggleButton-v2/ToggleButton.svelte';
|
|
17
17
|
import MapResult from './MapResult.svelte';
|
|
18
18
|
import Popover from './Popover.svelte';
|
|
19
|
+
import DownloadCsv from './table/DownloadCsv.svelte';
|
|
20
|
+
import { convertJsonToCsv } from './table/tableUtils';
|
|
21
|
+
import Tooltip from './Tooltip.svelte';
|
|
19
22
|
export let result;
|
|
20
23
|
export let requireHtmlApproval = false;
|
|
21
24
|
export let filename = undefined;
|
|
@@ -56,15 +59,17 @@ function isTableRowObject(json) {
|
|
|
56
59
|
}
|
|
57
60
|
let largeObject = undefined;
|
|
58
61
|
function checkIfS3(result, keys) {
|
|
59
|
-
return keys.
|
|
62
|
+
return keys.includes('s3') && typeof result.s3 === 'string';
|
|
60
63
|
}
|
|
61
64
|
let is_render_all = false;
|
|
65
|
+
let download_as_csv = false;
|
|
62
66
|
function inferResultKind(result) {
|
|
63
67
|
if (result == 'WINDMILL_TOO_BIG') {
|
|
64
68
|
largeObject = true;
|
|
65
69
|
return 'json';
|
|
66
70
|
}
|
|
67
71
|
if (result !== undefined) {
|
|
72
|
+
download_as_csv = false;
|
|
68
73
|
if (typeof result === 'string') {
|
|
69
74
|
length = 0;
|
|
70
75
|
largeObject = false;
|
|
@@ -81,12 +86,18 @@ function inferResultKind(result) {
|
|
|
81
86
|
largeObject = roughSizeOfObject(result) > IMG_MAX_SIZE;
|
|
82
87
|
return keys[0];
|
|
83
88
|
}
|
|
84
|
-
|
|
89
|
+
let size = roughSizeOfObject(result);
|
|
85
90
|
// Otherwise, check if the result is too large (10kb) for json
|
|
86
|
-
|
|
87
|
-
|
|
91
|
+
if (size > TABLE_MAX_SIZE) {
|
|
92
|
+
largeObject = true;
|
|
93
|
+
if (Array.isArray(result) && isTableRowObject(result)) {
|
|
94
|
+
download_as_csv = true;
|
|
95
|
+
}
|
|
88
96
|
return 'json';
|
|
89
97
|
}
|
|
98
|
+
else {
|
|
99
|
+
largeObject = size > DISPLAY_MAX_SIZE;
|
|
100
|
+
}
|
|
90
101
|
if (Array.isArray(result)) {
|
|
91
102
|
if (result.length === 0) {
|
|
92
103
|
return 'json';
|
|
@@ -246,6 +257,7 @@ function arrayOfRowsToObjects(input) {
|
|
|
246
257
|
return [];
|
|
247
258
|
}
|
|
248
259
|
let globalForceJson = false;
|
|
260
|
+
let seeS3PreviewFileFromList = '';
|
|
249
261
|
</script>
|
|
250
262
|
|
|
251
263
|
{#if is_render_all}
|
|
@@ -327,257 +339,305 @@ let globalForceJson = false;
|
|
|
327
339
|
</button>
|
|
328
340
|
{/if}
|
|
329
341
|
</div>
|
|
330
|
-
</div
|
|
331
|
-
{
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
{
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
{
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
{
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
<div class="
|
|
346
|
-
<div class="
|
|
347
|
-
|
|
342
|
+
</div><div class="grow"
|
|
343
|
+
>{#if !forceJson && resultKind == 'table-col'}
|
|
344
|
+
{@const data = 'table-col' in result ? result['table-col'] : result}
|
|
345
|
+
<AutoDataTable objects={objectOfArraysToObjects(data)} />
|
|
346
|
+
{:else if !forceJson && resultKind == 'table-row'}
|
|
347
|
+
{@const data = 'table-row' in result ? result['table-row'] : result}
|
|
348
|
+
<AutoDataTable objects={arrayOfRowsToObjects(data)} />
|
|
349
|
+
{:else if !forceJson && resultKind == 'table-row-object'}
|
|
350
|
+
{@const data = 'table-row-object' in result ? result['table-row-object'] : result}
|
|
351
|
+
<AutoDataTable objects={handleArrayOfObjectsHeaders(data)} />
|
|
352
|
+
{:else if !forceJson && resultKind == 'html'}
|
|
353
|
+
<div class="h-full">
|
|
354
|
+
{#if !requireHtmlApproval || enableHtml}
|
|
355
|
+
{@html result.html}
|
|
356
|
+
{:else}
|
|
357
|
+
<div class="font-main text-sm">
|
|
358
|
+
<div class="flex flex-col">
|
|
359
|
+
<div class="bg-red-400 py-1 rounded-t text-white font-bold text-center">
|
|
360
|
+
Warning
|
|
361
|
+
</div>
|
|
362
|
+
<p
|
|
363
|
+
class="text-tertiary mb-2 text-left border-2 !border-t-0 rounded-b border-red-400 overflow-auto p-1"
|
|
364
|
+
>Rendering HTML can expose you to <a
|
|
365
|
+
href="https://owasp.org/www-community/attacks/xss/"
|
|
366
|
+
target="_blank"
|
|
367
|
+
rel="noreferrer"
|
|
368
|
+
class="hover:underline">XSS attacks</a
|
|
369
|
+
>. Only enable it if you trust the author of the script.
|
|
370
|
+
</p>
|
|
371
|
+
</div>
|
|
372
|
+
<div class="center-center">
|
|
373
|
+
<Button size="sm" color="dark" on:click={() => (enableHtml = true)}>
|
|
374
|
+
Enable HTML rendering
|
|
375
|
+
</Button>
|
|
348
376
|
</div>
|
|
349
|
-
<p
|
|
350
|
-
class="text-tertiary mb-2 text-left border-2 !border-t-0 rounded-b border-red-400 overflow-auto p-1"
|
|
351
|
-
>Rendering HTML can expose you to <a
|
|
352
|
-
href="https://owasp.org/www-community/attacks/xss/"
|
|
353
|
-
target="_blank"
|
|
354
|
-
rel="noreferrer"
|
|
355
|
-
class="hover:underline">XSS attacks</a
|
|
356
|
-
>. Only enable it if you trust the author of the script.
|
|
357
|
-
</p>
|
|
358
|
-
</div>
|
|
359
|
-
<div class="center-center">
|
|
360
|
-
<Button size="sm" color="dark" on:click={() => (enableHtml = true)}>
|
|
361
|
-
Enable HTML rendering
|
|
362
|
-
</Button>
|
|
363
377
|
</div>
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
markers={result.map.markers}
|
|
374
|
-
/>
|
|
375
|
-
</div>
|
|
376
|
-
{:else if !forceJson && resultKind == 'png'}
|
|
377
|
-
<div class="h-full">
|
|
378
|
-
<img
|
|
379
|
-
alt="png rendered"
|
|
380
|
-
class="w-auto h-full"
|
|
381
|
-
src="data:image/png;base64,{contentOrRootString(result.png)}"
|
|
382
|
-
/>
|
|
383
|
-
</div>
|
|
384
|
-
{:else if !forceJson && resultKind == 'jpeg'}
|
|
385
|
-
<div class="h-full">
|
|
386
|
-
<img
|
|
387
|
-
alt="jpeg rendered"
|
|
388
|
-
class="w-auto h-full"
|
|
389
|
-
src="data:image/jpeg;base64,{contentOrRootString(result.jpeg)}"
|
|
390
|
-
/>
|
|
391
|
-
</div>
|
|
392
|
-
{:else if !forceJson && resultKind == 'svg'}
|
|
393
|
-
<div
|
|
394
|
-
><a download="windmill.svg" href="data:text/plain;base64,{btoa(result.svg)}">Download</a>
|
|
395
|
-
</div>
|
|
396
|
-
<div class="h-full overflow-auto">{@html result.svg} </div>
|
|
397
|
-
{:else if !forceJson && resultKind == 'gif'}
|
|
398
|
-
<div class="h-full">
|
|
399
|
-
<img
|
|
400
|
-
alt="gif rendered"
|
|
401
|
-
class="w-auto h-full"
|
|
402
|
-
src="data:image/gif;base64,{contentOrRootString(result.gif)}"
|
|
403
|
-
/>
|
|
404
|
-
</div>
|
|
405
|
-
{:else if !forceJson && resultKind == 'plain'}<div class="h-full text-2xs"
|
|
406
|
-
><pre>{typeof result == 'string' ? result : result?.['result']}</pre>{#if !noControls}
|
|
407
|
-
<div class="flex">
|
|
408
|
-
<Button
|
|
409
|
-
on:click={() =>
|
|
410
|
-
copyToClipboard(typeof result == 'string' ? result : result?.['result'])}
|
|
411
|
-
color="light"
|
|
412
|
-
size="xs"
|
|
413
|
-
>
|
|
414
|
-
<div class="flex gap-2 items-center">Copy <ClipboardCopy size={12} /> </div>
|
|
415
|
-
</Button>
|
|
416
|
-
</div>
|
|
417
|
-
{/if}
|
|
418
|
-
</div>
|
|
419
|
-
{:else if !forceJson && resultKind == 'file'}
|
|
420
|
-
<div>
|
|
421
|
-
<a
|
|
422
|
-
download={result.filename ?? result.file?.filename ?? 'windmill.file'}
|
|
423
|
-
href="data:application/octet-stream;base64,{contentOrRootString(result.file)}"
|
|
424
|
-
>Download</a
|
|
425
|
-
>
|
|
426
|
-
</div>
|
|
427
|
-
{:else if !forceJson && resultKind == 'error' && result?.error}
|
|
428
|
-
<div class="flex flex-col items-start">
|
|
429
|
-
<span class="text-red-500 font-semibold text-sm whitespace-pre-wrap"
|
|
430
|
-
>{#if result.error.name || result.error.message}{result.error.name}: {result.error
|
|
431
|
-
.message}{:else}{JSON.stringify(result.error, null, 4)}{/if}</span
|
|
432
|
-
>
|
|
433
|
-
<pre class="text-sm whitespace-pre-wrap text-primary">{result.error.stack ?? ''}</pre>
|
|
434
|
-
<slot />
|
|
435
|
-
</div>
|
|
436
|
-
{:else if !forceJson && resultKind == 'approval'}<div class="flex flex-col gap-3 mt-2 mx-4">
|
|
437
|
-
<Button
|
|
438
|
-
color="green"
|
|
439
|
-
variant="border"
|
|
440
|
-
on:click={() =>
|
|
441
|
-
fetch(result['resume'], {
|
|
442
|
-
method: 'POST',
|
|
443
|
-
body: JSON.stringify({}),
|
|
444
|
-
headers: { 'Content-Type': 'application/json' }
|
|
445
|
-
})}
|
|
446
|
-
>
|
|
447
|
-
Resume</Button
|
|
448
|
-
>
|
|
449
|
-
<Button color="red" variant="border" on:click={() => fetch(result['cancel'])}
|
|
450
|
-
>Cancel</Button
|
|
451
|
-
>
|
|
452
|
-
<div class="center-center"
|
|
453
|
-
><a rel="noreferrer" target="_blank" href={result['approvalPage']}>Approval Page</a
|
|
454
|
-
></div
|
|
455
|
-
>
|
|
456
|
-
</div>
|
|
457
|
-
{:else if !forceJson && resultKind == 's3object'}
|
|
458
|
-
<div
|
|
459
|
-
class="h-full w-full {typeof result?.s3 == 'string' && result?.s3?.endsWith('.parquet')
|
|
460
|
-
? 'h-min-[600px]'
|
|
461
|
-
: ''}"
|
|
462
|
-
>
|
|
463
|
-
<div class="flex flex-col gap-2">
|
|
464
|
-
<Toggle
|
|
465
|
-
class="flex"
|
|
466
|
-
bind:checked={s3FileDisplayRawMode}
|
|
467
|
-
size="xs"
|
|
468
|
-
options={{ right: 'Raw S3 object input' }}
|
|
378
|
+
{/if}
|
|
379
|
+
</div>
|
|
380
|
+
{:else if !forceJson && resultKind == 'map'}
|
|
381
|
+
<div class="h-full">
|
|
382
|
+
<MapResult
|
|
383
|
+
lat={result.map.lat}
|
|
384
|
+
lon={result.map.lon}
|
|
385
|
+
zoom={result.map.zoom}
|
|
386
|
+
markers={result.map.markers}
|
|
469
387
|
/>
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
388
|
+
</div>
|
|
389
|
+
{:else if !forceJson && resultKind == 'png'}
|
|
390
|
+
<div class="h-full">
|
|
391
|
+
<img
|
|
392
|
+
alt="png rendered"
|
|
393
|
+
class="w-auto h-full"
|
|
394
|
+
src="data:image/png;base64,{contentOrRootString(result.png)}"
|
|
395
|
+
/>
|
|
396
|
+
</div>
|
|
397
|
+
{:else if !forceJson && resultKind == 'jpeg'}
|
|
398
|
+
<div class="h-full">
|
|
399
|
+
<img
|
|
400
|
+
alt="jpeg rendered"
|
|
401
|
+
class="w-auto h-full"
|
|
402
|
+
src="data:image/jpeg;base64,{contentOrRootString(result.jpeg)}"
|
|
403
|
+
/>
|
|
404
|
+
</div>
|
|
405
|
+
{:else if !forceJson && resultKind == 'svg'}
|
|
406
|
+
<div
|
|
407
|
+
><a download="windmill.svg" href="data:text/plain;base64,{btoa(result.svg)}">Download</a
|
|
408
|
+
>
|
|
409
|
+
</div>
|
|
410
|
+
<div class="h-full overflow-auto">{@html result.svg} </div>
|
|
411
|
+
{:else if !forceJson && resultKind == 'gif'}
|
|
412
|
+
<div class="h-full">
|
|
413
|
+
<img
|
|
414
|
+
alt="gif rendered"
|
|
415
|
+
class="w-auto h-full"
|
|
416
|
+
src="data:image/gif;base64,{contentOrRootString(result.gif)}"
|
|
417
|
+
/>
|
|
418
|
+
</div>
|
|
419
|
+
{:else if !forceJson && resultKind == 'plain'}<div class="h-full text-2xs"
|
|
420
|
+
><pre>{typeof result == 'string' ? result : result?.['result']}</pre>{#if !noControls}
|
|
421
|
+
<div class="flex">
|
|
422
|
+
<Button
|
|
423
|
+
on:click={() =>
|
|
424
|
+
copyToClipboard(typeof result == 'string' ? result : result?.['result'])}
|
|
425
|
+
color="light"
|
|
426
|
+
size="xs"
|
|
490
427
|
>
|
|
491
|
-
|
|
428
|
+
<div class="flex gap-2 items-center">Copy <ClipboardCopy size={12} /> </div>
|
|
429
|
+
</Button>
|
|
430
|
+
</div>
|
|
492
431
|
{/if}
|
|
493
432
|
</div>
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
433
|
+
{:else if !forceJson && resultKind == 'file'}
|
|
434
|
+
<div>
|
|
435
|
+
<a
|
|
436
|
+
download={result.filename ?? result.file?.filename ?? 'windmill.file'}
|
|
437
|
+
href="data:application/octet-stream;base64,{contentOrRootString(result.file)}"
|
|
438
|
+
>Download</a
|
|
439
|
+
>
|
|
440
|
+
</div>
|
|
441
|
+
{:else if !forceJson && resultKind == 'error' && result?.error}
|
|
442
|
+
<div class="flex flex-col items-start">
|
|
443
|
+
<span class="text-red-500 font-semibold text-sm whitespace-pre-wrap"
|
|
444
|
+
>{#if result.error.name || result.error.message}{result.error.name}: {result.error
|
|
445
|
+
.message}{:else}{JSON.stringify(result.error, null, 4)}{/if}</span
|
|
446
|
+
>
|
|
447
|
+
<pre class="text-sm whitespace-pre-wrap text-primary">{result.error.stack ?? ''}</pre>
|
|
448
|
+
<slot />
|
|
449
|
+
</div>
|
|
450
|
+
{:else if !forceJson && resultKind == 'approval'}<div class="flex flex-col gap-3 mt-2 mx-4">
|
|
451
|
+
<Button
|
|
452
|
+
color="green"
|
|
453
|
+
variant="border"
|
|
454
|
+
on:click={() =>
|
|
455
|
+
fetch(result['resume'], {
|
|
456
|
+
method: 'POST',
|
|
457
|
+
body: JSON.stringify({}),
|
|
458
|
+
headers: { 'Content-Type': 'application/json' }
|
|
459
|
+
})}
|
|
460
|
+
>
|
|
461
|
+
Resume</Button
|
|
462
|
+
>
|
|
463
|
+
<Button color="red" variant="border" on:click={() => fetch(result['cancel'])}
|
|
464
|
+
>Cancel</Button
|
|
465
|
+
>
|
|
466
|
+
<div class="center-center"
|
|
467
|
+
><a rel="noreferrer" target="_blank" href={result['approvalPage']}>Approval Page</a
|
|
468
|
+
></div
|
|
469
|
+
>
|
|
470
|
+
</div>
|
|
471
|
+
{:else if !forceJson && resultKind == 's3object'}
|
|
472
|
+
<div
|
|
473
|
+
class="h-full w-full {typeof result?.s3 == 'string' && result?.s3?.endsWith('.parquet')
|
|
474
|
+
? 'h-min-[600px]'
|
|
475
|
+
: ''}"
|
|
476
|
+
>
|
|
477
|
+
<div class="flex flex-col gap-2">
|
|
478
|
+
<Toggle
|
|
479
|
+
class="flex"
|
|
480
|
+
bind:checked={s3FileDisplayRawMode}
|
|
481
|
+
size="xs"
|
|
482
|
+
options={{ right: 'Raw S3 object' }}
|
|
483
|
+
/>
|
|
484
|
+
|
|
508
485
|
{#if s3FileDisplayRawMode}
|
|
509
486
|
<Highlight
|
|
510
487
|
class=""
|
|
511
488
|
language={json}
|
|
512
|
-
code={toJsonStr(
|
|
489
|
+
code={toJsonStr(result).replace(/\\n/g, '\n')}
|
|
513
490
|
/>
|
|
514
491
|
<button
|
|
515
|
-
class="text-secondary text-2xs whitespace-nowrap"
|
|
492
|
+
class="text-secondary underline text-2xs whitespace-nowrap"
|
|
516
493
|
on:click={() => {
|
|
517
|
-
s3FileViewer?.open?.(
|
|
494
|
+
s3FileViewer?.open?.(result)
|
|
518
495
|
}}
|
|
519
496
|
><span class="flex items-center gap-1"
|
|
520
|
-
><PanelRightOpen size={12} />
|
|
497
|
+
><PanelRightOpen size={12} />object store explorer<Tooltip
|
|
498
|
+
>Require admin privilege or "S3 resource details and content can be accessed
|
|
499
|
+
by all users of this workspace" of S3 Storage to be set in the workspace
|
|
500
|
+
settings</Tooltip
|
|
501
|
+
></span
|
|
502
|
+
>
|
|
503
|
+
</button>
|
|
504
|
+
{:else if !result?.disable_download}
|
|
505
|
+
<FileDownload s3object={result} />
|
|
506
|
+
<button
|
|
507
|
+
class="text-secondary underline text-2xs whitespace-nowrap"
|
|
508
|
+
on:click={() => {
|
|
509
|
+
s3FileViewer?.open?.(result)
|
|
510
|
+
}}
|
|
511
|
+
><span class="flex items-center gap-1"
|
|
512
|
+
><PanelRightOpen size={12} />object store explorer<Tooltip
|
|
513
|
+
>Require admin privilege or "S3 resource details and content can be accessed
|
|
514
|
+
by all users of this workspace" of S3 Storage to be set in the workspace
|
|
515
|
+
settings</Tooltip
|
|
516
|
+
></span
|
|
521
517
|
>
|
|
522
518
|
</button>
|
|
523
|
-
{:else}
|
|
524
|
-
<FileDownload {s3object} />
|
|
525
519
|
{/if}
|
|
526
|
-
|
|
520
|
+
</div>
|
|
521
|
+
{#if typeof result?.s3 == 'string' && (result?.s3?.endsWith('.parquet') || result?.s3?.endsWith('.csv'))}
|
|
522
|
+
{#key result.s3}
|
|
523
|
+
<ParqetTableRenderer
|
|
524
|
+
disable_download={result?.disable_download}
|
|
525
|
+
{workspaceId}
|
|
526
|
+
s3resource={result?.s3}
|
|
527
|
+
storage={result?.storage}
|
|
528
|
+
/>
|
|
529
|
+
{/key}
|
|
530
|
+
{/if}
|
|
527
531
|
</div>
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
532
|
+
{:else if !forceJson && resultKind == 's3object-list'}
|
|
533
|
+
<div class="h-full w-full">
|
|
534
|
+
<div class="flex flex-col gap-2">
|
|
535
|
+
<Toggle
|
|
536
|
+
class="flex mt-1"
|
|
537
|
+
bind:checked={s3FileDisplayRawMode}
|
|
538
|
+
size="xs"
|
|
539
|
+
options={{ right: 'Raw S3 object' }}
|
|
540
|
+
/>
|
|
541
|
+
{#each result as s3object}
|
|
542
|
+
{#if s3FileDisplayRawMode}
|
|
543
|
+
<Highlight
|
|
544
|
+
class=""
|
|
545
|
+
language={json}
|
|
546
|
+
code={toJsonStr(s3object).replace(/\\n/g, '\n')}
|
|
547
|
+
/>
|
|
548
|
+
<button
|
|
549
|
+
class="text-secondary text-2xs whitespace-nowrap"
|
|
550
|
+
on:click={() => {
|
|
551
|
+
s3FileViewer?.open?.(s3object)
|
|
552
|
+
}}
|
|
553
|
+
><span class="flex items-center gap-1"
|
|
554
|
+
><PanelRightOpen size={12} />open preview</span
|
|
555
|
+
>
|
|
556
|
+
</button>
|
|
557
|
+
{:else if !s3object?.disable_download}
|
|
558
|
+
<FileDownload {s3object} />
|
|
559
|
+
{:else}
|
|
560
|
+
<div class="flex text-secondary pt-2">{s3object?.s3} (download disabled)</div>
|
|
561
|
+
{/if}
|
|
562
|
+
{#if s3object?.s3?.endsWith('.parquet') || s3object?.s3?.endsWith('.csv')}
|
|
563
|
+
{#if seeS3PreviewFileFromList == s3object?.s3}
|
|
564
|
+
<ParqetTableRenderer
|
|
565
|
+
disable_download={s3object?.disable_download}
|
|
566
|
+
{workspaceId}
|
|
567
|
+
s3resource={s3object?.s3}
|
|
568
|
+
storage={s3object?.storage}
|
|
569
|
+
/>{:else}
|
|
570
|
+
<button
|
|
571
|
+
class="text-secondary whitespace-nowrap flex gap-2 items-center"
|
|
572
|
+
on:click={() => {
|
|
573
|
+
seeS3PreviewFileFromList = s3object?.s3
|
|
574
|
+
}}
|
|
575
|
+
>open table preview <ArrowDownFromLine />
|
|
576
|
+
</button>
|
|
577
|
+
{/if}
|
|
578
|
+
{/if}
|
|
579
|
+
{/each}
|
|
580
|
+
</div>
|
|
541
581
|
</div>
|
|
542
|
-
{:else}
|
|
543
|
-
<div class="
|
|
544
|
-
|
|
545
|
-
download="{filename ?? 'result'}.json"
|
|
546
|
-
href={workspaceId && jobId
|
|
547
|
-
? `/api/w/${workspaceId}/jobs_u/completed/get_result/${jobId}`
|
|
548
|
-
: `data:text/json;charset=utf-8,${encodeURIComponent(toJsonStr(result))}`}
|
|
549
|
-
>
|
|
550
|
-
Download {filename ? '' : 'as JSON'}
|
|
551
|
-
</a>
|
|
582
|
+
{:else if !forceJson && resultKind == 'markdown'}
|
|
583
|
+
<div class="prose-xs dark:prose-invert !list-disc !list-outside">
|
|
584
|
+
<Markdown md={result?.md ?? result?.markdown} />
|
|
552
585
|
</div>
|
|
586
|
+
{:else if largeObject}
|
|
587
|
+
{#if result && typeof result == 'object' && 'file' in result}
|
|
588
|
+
<div
|
|
589
|
+
><a
|
|
590
|
+
download={result.filename ?? result.file?.filename ?? 'windmill.file'}
|
|
591
|
+
href="data:application/octet-stream;base64,{contentOrRootString(result.file)}"
|
|
592
|
+
>Download</a
|
|
593
|
+
>
|
|
594
|
+
</div>
|
|
595
|
+
{:else}
|
|
596
|
+
<div class="text-sm text-tertiary"
|
|
597
|
+
><a
|
|
598
|
+
download="{filename ?? 'result'}.json"
|
|
599
|
+
href={workspaceId && jobId
|
|
600
|
+
? `/api/w/${workspaceId}/jobs_u/completed/get_result/${jobId}`
|
|
601
|
+
: `data:text/json;charset=utf-8,${encodeURIComponent(toJsonStr(result))}`}
|
|
602
|
+
>
|
|
603
|
+
Download {filename ? '' : 'as JSON'}
|
|
604
|
+
</a>
|
|
605
|
+
{#if download_as_csv}
|
|
606
|
+
<DownloadCsv
|
|
607
|
+
getContent={() => convertJsonToCsv(result)}
|
|
608
|
+
customText="Download as CSV"
|
|
609
|
+
/>
|
|
610
|
+
{/if}
|
|
611
|
+
</div>
|
|
553
612
|
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
613
|
+
<div class="mt-1 mb-2">
|
|
614
|
+
<Alert
|
|
615
|
+
size="xs"
|
|
616
|
+
title="Large result detected"
|
|
617
|
+
type="warning"
|
|
618
|
+
tooltip="We recommend using persistent object storage for large result. See docs for setting up an object storage service integration using s3 or any other s3 compatible services."
|
|
619
|
+
documentationLink="https://www.windmill.dev/docs/core_concepts/persistent_storage#object-storage-for-large-data-s3-r2-minio-azure-blob"
|
|
620
|
+
/>
|
|
621
|
+
</div>
|
|
622
|
+
{#if result && result != 'WINDMILL_TOO_BIG'}
|
|
623
|
+
<ObjectViewer json={result} />
|
|
624
|
+
{/if}
|
|
565
625
|
{/if}
|
|
626
|
+
{:else if typeof result == 'string' && result.length > 0}
|
|
627
|
+
<pre class="text-sm">{result}</pre>{#if !noControls}<div class="flex">
|
|
628
|
+
<Button on:click={() => copyToClipboard(result)} color="light" size="xs">
|
|
629
|
+
<div class="flex gap-2 items-center">Copy <ClipboardCopy size={12} /> </div>
|
|
630
|
+
</Button>
|
|
631
|
+
</div>
|
|
632
|
+
{/if}
|
|
633
|
+
{:else}
|
|
634
|
+
<Highlight
|
|
635
|
+
class={forceJson ? '' : 'h-full w-full'}
|
|
636
|
+
language={json}
|
|
637
|
+
code={toJsonStr(result).replace(/\\n/g, '\n')}
|
|
638
|
+
/>
|
|
566
639
|
{/if}
|
|
567
|
-
|
|
568
|
-
<pre class="text-sm">{result}</pre>{#if !noControls}<div class="flex">
|
|
569
|
-
<Button on:click={() => copyToClipboard(result)} color="light" size="xs">
|
|
570
|
-
<div class="flex gap-2 items-center">Copy <ClipboardCopy size={12} /> </div>
|
|
571
|
-
</Button>
|
|
572
|
-
</div>
|
|
573
|
-
{/if}
|
|
574
|
-
{:else}
|
|
575
|
-
<Highlight
|
|
576
|
-
class={forceJson ? '' : 'h-full w-full'}
|
|
577
|
-
language={json}
|
|
578
|
-
code={toJsonStr(result).replace(/\\n/g, '\n')}
|
|
579
|
-
/>
|
|
580
|
-
{/if}
|
|
640
|
+
</div>
|
|
581
641
|
{:else if typeof result == 'string' && resultKind == 'plain'}
|
|
582
642
|
<div class="h-full text-xs">
|
|
583
643
|
<pre>{result}</pre>
|
|
@@ -1,9 +1,17 @@
|
|
|
1
1
|
<script>import { msToSec } from '../utils';
|
|
2
2
|
import { Badge } from './common';
|
|
3
3
|
import { Hourglass } from 'lucide-svelte';
|
|
4
|
+
import WaitTimeWarning from './common/waitTimeWarning/WaitTimeWarning.svelte';
|
|
4
5
|
export let duration_ms;
|
|
6
|
+
export let self_wait_time_ms = undefined;
|
|
7
|
+
export let aggregate_wait_time_ms = undefined;
|
|
5
8
|
</script>
|
|
6
9
|
|
|
7
|
-
<
|
|
8
|
-
|
|
9
|
-
|
|
10
|
+
<div>
|
|
11
|
+
<Badge large icon={{ icon: Hourglass, position: 'left' }}>
|
|
12
|
+
Ran in {msToSec(duration_ms)}s
|
|
13
|
+
{#if self_wait_time_ms || aggregate_wait_time_ms}
|
|
14
|
+
<WaitTimeWarning {self_wait_time_ms} {aggregate_wait_time_ms} variant="alert" />
|
|
15
|
+
{/if}
|
|
16
|
+
</Badge>
|
|
17
|
+
</div>
|