windmill-components 1.504.5 → 1.510.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package/ata/index.js +1 -1
- package/package/components/AppConnectInner.svelte +161 -29
- package/package/components/ArgInput.svelte +33 -103
- package/package/components/AuthSettings.svelte +45 -1
- package/package/components/Dev.svelte +31 -24
- package/package/components/DisplayResult.svelte +53 -26
- package/package/components/DisplayResult.svelte.d.ts +1 -1
- package/package/components/DynSelect.svelte +3 -3
- package/package/components/Editor.svelte +7 -4
- package/package/components/EditorBar.svelte +2 -2
- package/package/components/ErrorOrRecoveryHandler.svelte +73 -67
- package/package/components/ErrorOrRecoveryHandler.svelte.d.ts +8 -24
- package/package/components/FlowBuilder.svelte +11 -2
- package/package/components/FlowJobResult.svelte +12 -17
- package/package/components/FlowJobResult.svelte.d.ts +5 -18
- package/package/components/FlowPreviewContent.svelte +13 -10
- package/package/components/FlowPreviewContent.svelte.d.ts +1 -1
- package/package/components/FlowPreviewResult.svelte +14 -6
- package/package/components/FlowStatusViewer.svelte +11 -24
- package/package/components/FlowStatusViewer.svelte.d.ts +19 -18
- package/package/components/FlowStatusViewerInner.svelte +110 -131
- package/package/components/FlowStatusViewerInner.svelte.d.ts +20 -18
- package/package/components/GitDiffPreview.svelte +55 -0
- package/package/components/GitDiffPreview.svelte.d.ts +13 -0
- package/package/components/HistoricInputs.svelte +2 -2
- package/package/components/InitGitRepoPopover.svelte +410 -0
- package/package/components/InitGitRepoPopover.svelte.d.ts +13 -0
- package/package/components/InstanceSetting.svelte +21 -9
- package/package/components/InstanceSettings.svelte +16 -3
- package/package/components/JobLoader.svelte +567 -0
- package/package/components/JobLoader.svelte.d.ts +53 -0
- package/package/components/JobLogs.svelte +6 -4
- package/package/components/JobLogs.svelte.d.ts +5 -18
- package/package/components/LightweightResourcePicker.svelte +18 -39
- package/package/components/LightweightResourcePicker.svelte.d.ts +6 -22
- package/package/components/LogViewer.svelte +35 -41
- package/package/components/LogViewer.svelte.d.ts +6 -20
- package/package/components/ModulePreviewResultViewer.svelte +3 -1
- package/package/components/ModulePreviewResultViewer.svelte.d.ts +1 -0
- package/package/components/ModuleTest.svelte +16 -11
- package/package/components/PullGitRepoPopover.svelte +355 -0
- package/package/components/PullGitRepoPopover.svelte.d.ts +18 -0
- package/package/components/S3FilePicker.svelte +5 -3
- package/package/components/SavedInputs.svelte +2 -2
- package/package/components/ScriptBuilder.svelte +4 -3
- package/package/components/ScriptEditor.svelte +34 -31
- package/package/components/ScriptEditor.svelte.d.ts +3 -3
- package/package/components/ServiceLogsInner.svelte +2 -1
- package/package/components/ServiceLogsInner.svelte.d.ts +1 -0
- package/package/components/UserSettings.svelte +1 -1
- package/package/components/WorkerTagSelect.svelte +32 -3
- package/package/components/apps/components/buttons/AppButton.svelte +7 -1
- package/package/components/apps/components/buttons/AppButton.svelte.d.ts +1 -0
- package/package/components/apps/components/display/AppCustomComponent.svelte +1 -1
- package/package/components/apps/components/display/AppDisplayComponentByJobId.svelte +16 -11
- package/package/components/apps/components/display/AppJobIdLogComponent.svelte +13 -10
- package/package/components/apps/components/display/AppMenu.svelte +5 -0
- package/package/components/apps/components/display/dbtable/AppDbExplorer.svelte +3 -3
- package/package/components/apps/components/display/dbtable/DeleteRow.svelte +3 -3
- package/package/components/apps/components/display/dbtable/InsertRowRunnable.svelte +3 -3
- package/package/components/apps/components/display/dbtable/UpdateCell.svelte +3 -3
- package/package/components/apps/components/display/table/AppAggridInfiniteTable.svelte +3 -3
- package/package/components/apps/components/helpers/RunnableComponent.svelte +65 -54
- package/package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +5 -5
- package/package/components/apps/components/inputs/AppUserResource.svelte +26 -8
- package/package/components/apps/editor/AppEditorHeader.svelte +11 -5
- package/package/components/apps/editor/AppJobsDrawer.svelte +5 -5
- package/package/components/apps/editor/RunnableJobPanel.svelte +4 -4
- package/package/components/apps/editor/component/components.d.ts +12 -0
- package/package/components/apps/editor/component/components.js +19 -7
- package/package/components/assets/AssetButtons.svelte +38 -0
- package/package/components/assets/AssetButtons.svelte.d.ts +15 -0
- package/package/components/assets/AssetsDropdownButton.svelte +60 -72
- package/package/components/assets/AssetsDropdownButton.svelte.d.ts +3 -4
- package/package/components/assets/AssetsUsageDrawer.svelte +10 -10
- package/package/components/assets/JobAssetsViewer.svelte +79 -0
- package/package/components/assets/JobAssetsViewer.svelte.d.ts +7 -0
- package/package/components/assets/README_DEV.md +0 -0
- package/package/components/assets/lib.d.ts +9 -1
- package/package/components/assets/lib.js +48 -7
- package/package/components/common/fileUpload/FileUpload.svelte +126 -84
- package/package/components/common/fileUpload/FileUpload.svelte.d.ts +13 -3
- package/package/components/common/fileUpload/S3ArgInput.svelte +111 -0
- package/package/components/common/fileUpload/S3ArgInput.svelte.d.ts +21 -0
- package/package/components/common/table/ScriptRow.svelte +3 -1
- package/package/components/copilot/autocomplete/Autocompletor.js +23 -5
- package/package/components/copilot/chat/AIChatDisplay.svelte +8 -0
- package/package/components/copilot/chat/AIChatManager.svelte.js +13 -8
- package/package/components/copilot/chat/flow/ModuleAcceptReject.svelte +5 -5
- package/package/components/copilot/chat/flow/core.d.ts +1 -1
- package/package/components/copilot/chat/flow/core.js +2 -38
- package/package/components/copilot/chat/navigator/apiTools.d.ts +8 -0
- package/package/components/copilot/chat/navigator/apiTools.js +95 -15
- package/package/components/copilot/chat/navigator/core.d.ts +1 -1
- package/package/components/copilot/chat/navigator/core.js +2 -1
- package/package/components/copilot/chat/script/core.d.ts +11 -2
- package/package/components/copilot/chat/script/core.js +135 -1
- package/package/components/copilot/chat/shared.d.ts +10 -0
- package/package/components/copilot/chat/shared.js +56 -0
- package/package/components/copilot/lib.d.ts +1 -0
- package/package/components/copilot/lib.js +27 -9
- package/package/components/custom_ui.d.ts +1 -0
- package/package/components/flows/FlowAssetsHandler.svelte +133 -0
- package/package/components/flows/FlowAssetsHandler.svelte.d.ts +14 -0
- package/package/components/flows/content/FlowModuleComponent.svelte +16 -18
- package/package/components/flows/flowStore.d.ts +1 -1
- package/package/components/flows/map/FlowModuleSchemaItem.svelte +1 -0
- package/package/components/flows/propPicker/OutputPicker.svelte +9 -4
- package/package/components/flows/scheduleUtils.js +1 -1
- package/package/components/flows/types.d.ts +2 -1
- package/package/components/graph/FlowGraphV2.svelte +8 -104
- package/package/components/graph/FlowGraphV2.svelte.d.ts +0 -2
- package/package/components/graph/graphBuilder.svelte.d.ts +6 -3
- package/package/components/graph/graphBuilder.svelte.js +35 -9
- package/package/components/graph/renderers/edges/BaseEdge.svelte +2 -5
- package/package/components/graph/renderers/edges/BaseEdge.svelte.d.ts +1 -0
- package/package/components/graph/renderers/nodes/AssetNode.svelte +23 -20
- package/package/components/graph/renderers/nodes/AssetNode.svelte.d.ts +5 -10
- package/package/components/graph/renderers/nodes/AssetsOverflowedNode.svelte +1 -1
- package/package/components/graph/util.js +1 -1
- package/package/components/home/ItemsList.svelte +2 -0
- package/package/components/icons/AssetGenericIcon.svelte +0 -3
- package/package/components/jobs/JobPreview.svelte +10 -6
- package/package/components/raw_apps/RawAppInlineScriptRunnable.svelte +13 -12
- package/package/components/runs/BatchReRunOptionsPane.svelte +5 -1
- package/package/components/runs/JobPreview.svelte +26 -16
- package/package/components/runs/{JobLoader.svelte.d.ts → JobsLoader.svelte.d.ts} +3 -3
- package/package/components/runs/NoWorkerWithTagWarning.svelte +2 -2
- package/package/components/runs/NoWorkerWithTagWarning.svelte.d.ts +1 -0
- package/package/components/runs/RunsFilter.svelte.d.ts +1 -1
- package/package/components/schema/AddPropertyFormV2.svelte +42 -33
- package/package/components/schema/AddPropertyFormV2.svelte.d.ts +1 -0
- package/package/components/schema/AddPropertyV2.svelte +2 -1
- package/package/components/schema/AddPropertyV2.svelte.d.ts +1 -0
- package/package/components/schema/EditableSchemaWrapper.svelte +3 -1
- package/package/components/schema/editable_schema_wrapper.d.ts +3 -0
- package/package/components/scriptEditor/LogPanel.svelte +3 -2
- package/package/components/script_builder.d.ts +2 -2
- package/package/components/settings/CreateToken.svelte +76 -41
- package/package/components/settings/CreateToken.svelte.d.ts +1 -1
- package/package/components/settings/ScopeSelector.svelte +613 -0
- package/package/components/settings/ScopeSelector.svelte.d.ts +8 -0
- package/package/components/settings/TokenDisplay.svelte +103 -0
- package/package/components/settings/TokenDisplay.svelte.d.ts +10 -0
- package/package/components/settings/TokensTable.svelte +70 -349
- package/package/components/sidebar/CriticalAlertModal.svelte +3 -0
- package/package/components/triggers/DeleteTriggerButton.svelte +1 -1
- package/package/components/triggers/TriggerEditorToolbar.svelte +3 -3
- package/package/components/triggers/TriggerRetriesAndErrorHandler.svelte +55 -0
- package/package/components/triggers/TriggerRetriesAndErrorHandler.svelte.d.ts +13 -0
- package/package/components/triggers/TriggersEditor.svelte +45 -3
- package/package/components/triggers/TriggersWrapper.svelte +2 -2
- package/package/components/triggers/gcp/GcpTriggerEditorInner.svelte +43 -2
- package/package/components/triggers/gcp/utils.js +9 -1
- package/package/components/triggers/http/OpenAPISpecGenerator.svelte +1 -0
- package/package/components/triggers/http/RouteEditorInner.svelte +208 -164
- package/package/components/triggers/http/RouteEditorInner.svelte.d.ts +6 -2
- package/package/components/triggers/http/utils.js +9 -3
- package/package/components/triggers/kafka/KafkaTriggerEditorInner.svelte +43 -2
- package/package/components/triggers/kafka/utils.js +9 -1
- package/package/components/triggers/mqtt/MqttEditorConfigSection.svelte +4 -132
- package/package/components/triggers/mqtt/MqttEditorConfigSection.svelte.d.ts +2 -5
- package/package/components/triggers/mqtt/MqttTriggerEditorInner.svelte +178 -9
- package/package/components/triggers/mqtt/utils.js +9 -1
- package/package/components/triggers/nats/NatsTriggerEditorInner.svelte +43 -2
- package/package/components/triggers/nats/utils.js +9 -1
- package/package/components/triggers/postgres/PostgresTriggerEditorInner.svelte +41 -2
- package/package/components/triggers/postgres/utils.js +9 -1
- package/package/components/triggers/schedules/ScheduleEditorInner.svelte +34 -88
- package/package/components/triggers/sqs/SqsTriggerEditorInner.svelte +43 -2
- package/package/components/triggers/sqs/utils.js +9 -1
- package/package/components/triggers/utils.js +12 -0
- package/package/components/triggers/websocket/WebsocketTriggerEditorInner.svelte +43 -2
- package/package/components/triggers/websocket/utils.js +11 -1
- package/package/components/workspaceSettings/AISettings.svelte +0 -2
- package/package/components/workspaceSettings/FilterList.svelte +56 -0
- package/package/components/workspaceSettings/FilterList.svelte.d.ts +8 -0
- package/package/components/workspaceSettings/GitSyncFilterSettings.svelte +785 -0
- package/package/components/workspaceSettings/GitSyncFilterSettings.svelte.d.ts +18 -0
- package/package/gen/core/OpenAPI.js +1 -1
- package/package/gen/schemas.gen.d.ts +305 -23
- package/package/gen/schemas.gen.js +305 -23
- package/package/gen/services.gen.d.ts +33 -1
- package/package/gen/services.gen.js +66 -2
- package/package/gen/types.gen.d.ts +216 -11
- package/package/history.svelte.js +0 -2
- package/package/hub.d.ts +1 -0
- package/package/hubPaths.json +5 -2
- package/package/infer.js +16 -10
- package/package/svelte5Utils.svelte.d.ts +1 -0
- package/package/svelte5Utils.svelte.js +25 -18
- package/package/toast.js +10 -0
- package/package/utils.d.ts +3 -2
- package/package/utils.js +20 -5
- package/package.json +11 -11
- package/package/components/ResultJobLoader.svelte +0 -219
- package/package/components/ResultJobLoader.svelte.d.ts +0 -52
- package/package/components/TestJobLoader.svelte +0 -274
- package/package/components/TestJobLoader.svelte.d.ts +0 -43
- package/package/components/icons/AssetVarIcon.svelte +0 -31
- package/package/components/icons/AssetVarIcon.svelte.d.ts +0 -9
- /package/package/components/runs/{JobLoader.svelte → JobsLoader.svelte} +0 -0
|
@@ -179,11 +179,17 @@ async function computeTriggerables() {
|
|
|
179
179
|
.filter(Boolean);
|
|
180
180
|
if (items.findIndex((x) => {
|
|
181
181
|
const c = x.data;
|
|
182
|
-
if (c.type === 'schemaformcomponent'
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
182
|
+
if (c.type === 'schemaformcomponent' ||
|
|
183
|
+
c.type === 'formbuttoncomponent' ||
|
|
184
|
+
c.type === 'formcomponent') {
|
|
185
|
+
const props = c.type === 'schemaformcomponent'
|
|
186
|
+
? c.componentInput?.value?.properties
|
|
187
|
+
: c.componentInput?.runnable?.type === 'runnableByName'
|
|
188
|
+
? c.componentInput?.runnable?.inlineScript?.schema?.properties
|
|
189
|
+
: c.componentInput?.runnable?.schema?.properties;
|
|
190
|
+
return (Object.values(props ?? {}).findIndex((p) => (p?.type === 'object' && p?.format === 'resource-s3_object') ||
|
|
191
|
+
(p?.type === 'array' &&
|
|
192
|
+
(p?.items?.resourceType === 's3object' || p?.items?.resourceType === 's3_object'))) !== -1);
|
|
187
193
|
}
|
|
188
194
|
else {
|
|
189
195
|
return false;
|
|
@@ -12,18 +12,18 @@ import { classNames, truncateRev, isFlowPreview } from '../../../utils';
|
|
|
12
12
|
import PanelSection from './settingsPanel/common/PanelSection.svelte';
|
|
13
13
|
import AppTimeline from './AppTimeline.svelte';
|
|
14
14
|
import HighlightCode from '../../HighlightCode.svelte';
|
|
15
|
-
import
|
|
15
|
+
import JobLoader from '../../JobLoader.svelte';
|
|
16
16
|
import { createEventDispatcher, untrack } from 'svelte';
|
|
17
17
|
let { open = $bindable(false), jobs, jobsById, hasErrors = false, selectedJobId = $bindable(undefined), refreshComponents = undefined, errorByComponent = {} } = $props();
|
|
18
18
|
const dispatch = createEventDispatcher();
|
|
19
|
-
let
|
|
19
|
+
let jobLoader = $state();
|
|
20
20
|
let job = $state(undefined);
|
|
21
21
|
let testIsLoading = $state(false);
|
|
22
22
|
let rightColumnSelect = $state('timeline');
|
|
23
23
|
$effect(() => {
|
|
24
24
|
selectedJobId &&
|
|
25
25
|
!selectedJobId?.includes('Frontend') &&
|
|
26
|
-
untrack(() => selectedJobId &&
|
|
26
|
+
untrack(() => selectedJobId && jobLoader?.watchJob(selectedJobId));
|
|
27
27
|
});
|
|
28
28
|
$effect(() => {
|
|
29
29
|
if (selectedJobId?.includes('Frontend') && selectedJobId) {
|
|
@@ -32,7 +32,7 @@ $effect(() => {
|
|
|
32
32
|
});
|
|
33
33
|
</script>
|
|
34
34
|
|
|
35
|
-
<
|
|
35
|
+
<JobLoader noCode={true} bind:this={jobLoader} bind:isLoading={testIsLoading} bind:job />
|
|
36
36
|
|
|
37
37
|
<Drawer bind:open size="900px">
|
|
38
38
|
<DrawerContent
|
|
@@ -149,7 +149,7 @@ $effect(() => {
|
|
|
149
149
|
<Button
|
|
150
150
|
color="red"
|
|
151
151
|
variant="border"
|
|
152
|
-
on:click={() =>
|
|
152
|
+
on:click={() => jobLoader?.cancelJob()}
|
|
153
153
|
>
|
|
154
154
|
<Loader2 size={14} class="animate-spin mr-2" />
|
|
155
155
|
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
<script lang="ts">import { getContext, untrack } from 'svelte';
|
|
2
|
-
import
|
|
2
|
+
import JobLoader from '../../JobLoader.svelte';
|
|
3
3
|
import RunnableJobPanelInner from './RunnableJobPanelInner.svelte';
|
|
4
4
|
let { float = true, hidden = false, testJob = $bindable(undefined), jobToWatch = $bindable(undefined), width = undefined } = $props();
|
|
5
5
|
const { runnableJobEditorPanel, selectedComponentInEditor } = getContext('AppEditorContext');
|
|
6
6
|
let testIsLoading = $state(false);
|
|
7
|
-
let
|
|
7
|
+
let jobLoader = $state();
|
|
8
8
|
function updateSelectedJob() {
|
|
9
9
|
const selectedComponent = $selectedComponentInEditor;
|
|
10
10
|
if (selectedComponent) {
|
|
@@ -17,7 +17,7 @@ function updateSelectedJob() {
|
|
|
17
17
|
testJob = undefined;
|
|
18
18
|
}
|
|
19
19
|
jobToWatch = { componentId: selectedComponent, job: backendJob };
|
|
20
|
-
|
|
20
|
+
jobLoader?.watchJob(backendJob);
|
|
21
21
|
}
|
|
22
22
|
else {
|
|
23
23
|
testJob = undefined;
|
|
@@ -38,7 +38,7 @@ $effect(() => {
|
|
|
38
38
|
});
|
|
39
39
|
</script>
|
|
40
40
|
|
|
41
|
-
<
|
|
41
|
+
<JobLoader bind:this={jobLoader} bind:isLoading={testIsLoading} bind:job={testJob} />
|
|
42
42
|
|
|
43
43
|
{#if ($runnableJobEditorPanel.focused && $selectedComponentInEditor) || logDrawerOpen || resultDrawerOpen || !float}
|
|
44
44
|
{@const frontendJob = $runnableJobEditorPanel?.frontendJobs[$selectedComponentInEditor ?? '']}
|
|
@@ -2665,6 +2665,12 @@ export declare const components: {
|
|
|
2665
2665
|
readonly componentInput: undefined;
|
|
2666
2666
|
readonly configuration: {
|
|
2667
2667
|
readonly items: StaticAppInput;
|
|
2668
|
+
readonly defaultValue: {
|
|
2669
|
+
readonly type: "static";
|
|
2670
|
+
readonly fieldType: "text";
|
|
2671
|
+
readonly value: undefined;
|
|
2672
|
+
readonly tooltip: "Format: $res:path/to/resource";
|
|
2673
|
+
};
|
|
2668
2674
|
readonly placeholder: {
|
|
2669
2675
|
readonly type: "static";
|
|
2670
2676
|
readonly fieldType: "text";
|
|
@@ -2704,6 +2710,12 @@ export declare const components: {
|
|
|
2704
2710
|
readonly fieldType: "text";
|
|
2705
2711
|
readonly value: "postgresql";
|
|
2706
2712
|
};
|
|
2713
|
+
readonly defaultValue: {
|
|
2714
|
+
readonly type: "static";
|
|
2715
|
+
readonly fieldType: "text";
|
|
2716
|
+
readonly value: undefined;
|
|
2717
|
+
readonly tooltip: "Format: $res:path/to/resource";
|
|
2718
|
+
};
|
|
2707
2719
|
readonly expressOauthSetup: {
|
|
2708
2720
|
readonly type: "static";
|
|
2709
2721
|
readonly fieldType: "boolean";
|
|
@@ -1140,8 +1140,8 @@ export const components = {
|
|
|
1140
1140
|
backgroundColor: ['#FF6384', '#4BC0C0', '#FFCE56']
|
|
1141
1141
|
}
|
|
1142
1142
|
]
|
|
1143
|
-
}
|
|
1144
|
-
}
|
|
1143
|
+
}
|
|
1144
|
+
}
|
|
1145
1145
|
}
|
|
1146
1146
|
},
|
|
1147
1147
|
chartjscomponentv2: {
|
|
@@ -1178,8 +1178,8 @@ export const components = {
|
|
|
1178
1178
|
backgroundColor: ['#FF6384', '#4BC0C0', '#FFCE56']
|
|
1179
1179
|
}
|
|
1180
1180
|
]
|
|
1181
|
-
}
|
|
1182
|
-
}
|
|
1181
|
+
}
|
|
1182
|
+
}
|
|
1183
1183
|
}
|
|
1184
1184
|
},
|
|
1185
1185
|
barchartcomponent: {
|
|
@@ -1345,7 +1345,7 @@ This is a paragraph.
|
|
|
1345
1345
|
width: 2.5
|
|
1346
1346
|
}
|
|
1347
1347
|
}
|
|
1348
|
-
}
|
|
1348
|
+
}
|
|
1349
1349
|
},
|
|
1350
1350
|
configuration: {
|
|
1351
1351
|
layout: {
|
|
@@ -1377,7 +1377,7 @@ This is a paragraph.
|
|
|
1377
1377
|
width: 2.5
|
|
1378
1378
|
}
|
|
1379
1379
|
}
|
|
1380
|
-
}
|
|
1380
|
+
}
|
|
1381
1381
|
},
|
|
1382
1382
|
configuration: {
|
|
1383
1383
|
layout: {
|
|
@@ -1387,7 +1387,7 @@ This is a paragraph.
|
|
|
1387
1387
|
tooltip: 'Layout options for the plot. See https://plotly.com/javascript/reference/layout/ for more information'
|
|
1388
1388
|
}
|
|
1389
1389
|
}
|
|
1390
|
-
}
|
|
1390
|
+
}
|
|
1391
1391
|
},
|
|
1392
1392
|
timeseriescomponent: {
|
|
1393
1393
|
name: 'Timeseries',
|
|
@@ -1891,6 +1891,12 @@ This is a paragraph.
|
|
|
1891
1891
|
allowTypeChange: false,
|
|
1892
1892
|
value: []
|
|
1893
1893
|
},
|
|
1894
|
+
defaultValue: {
|
|
1895
|
+
type: 'static',
|
|
1896
|
+
fieldType: 'text',
|
|
1897
|
+
value: undefined,
|
|
1898
|
+
tooltip: 'Format: $res:path/to/resource'
|
|
1899
|
+
},
|
|
1894
1900
|
placeholder: {
|
|
1895
1901
|
type: 'static',
|
|
1896
1902
|
fieldType: 'text',
|
|
@@ -1927,6 +1933,12 @@ This is a paragraph.
|
|
|
1927
1933
|
fieldType: 'text',
|
|
1928
1934
|
value: 'postgresql'
|
|
1929
1935
|
},
|
|
1936
|
+
defaultValue: {
|
|
1937
|
+
type: 'static',
|
|
1938
|
+
fieldType: 'text',
|
|
1939
|
+
value: undefined,
|
|
1940
|
+
tooltip: 'Format: $res:path/to/resource'
|
|
1941
|
+
},
|
|
1930
1942
|
expressOauthSetup: {
|
|
1931
1943
|
type: 'static',
|
|
1932
1944
|
fieldType: 'boolean',
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
<script lang="ts">import { AlertTriangle, Edit2 } from 'lucide-svelte';
|
|
2
|
+
import { Button } from '../common';
|
|
3
|
+
import { Tooltip } from '../meltComponents';
|
|
4
|
+
import ExploreAssetButton, { assetCanBeExplored } from '../ExploreAssetButton.svelte';
|
|
5
|
+
import S3FilePicker from '../S3FilePicker.svelte';
|
|
6
|
+
import DbManagerDrawer from '../DBManagerDrawer.svelte';
|
|
7
|
+
import ResourceEditorDrawer from '../ResourceEditorDrawer.svelte';
|
|
8
|
+
let { s3FilePicker, dbManagerDrawer, resourceEditorDrawer, resourceDataCache, asset, onClick } = $props();
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
<div class="flex gap-2 items-center">
|
|
12
|
+
{#if asset.kind === 'resource' && resourceDataCache[asset.path] !== undefined}
|
|
13
|
+
<Button
|
|
14
|
+
startIcon={{ icon: Edit2 }}
|
|
15
|
+
size="xs"
|
|
16
|
+
variant="border"
|
|
17
|
+
spacingSize="xs2"
|
|
18
|
+
iconOnly
|
|
19
|
+
on:click={() => (resourceEditorDrawer?.initEdit(asset.path), onClick?.())}
|
|
20
|
+
/>
|
|
21
|
+
{/if}
|
|
22
|
+
{#if asset.kind === 'resource' && resourceDataCache[asset.path] === undefined}
|
|
23
|
+
<Tooltip class="mr-2.5">
|
|
24
|
+
<AlertTriangle size={16} class="text-orange-600 dark:text-orange-500" />
|
|
25
|
+
<svelte:fragment slot="text">Could not find resource</svelte:fragment>
|
|
26
|
+
</Tooltip>
|
|
27
|
+
{/if}
|
|
28
|
+
{#if assetCanBeExplored(asset, { resource_type: resourceDataCache[asset.path] })}
|
|
29
|
+
<ExploreAssetButton
|
|
30
|
+
{asset}
|
|
31
|
+
{s3FilePicker}
|
|
32
|
+
{dbManagerDrawer}
|
|
33
|
+
onClick={() => onClick?.()}
|
|
34
|
+
noText
|
|
35
|
+
_resourceMetadata={{ resource_type: resourceDataCache[asset.path] }}
|
|
36
|
+
/>
|
|
37
|
+
{/if}
|
|
38
|
+
</div>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import S3FilePicker from '../S3FilePicker.svelte';
|
|
2
|
+
import DbManagerDrawer from '../DBManagerDrawer.svelte';
|
|
3
|
+
import ResourceEditorDrawer from '../ResourceEditorDrawer.svelte';
|
|
4
|
+
import type { Asset } from '../../gen';
|
|
5
|
+
type Props = {
|
|
6
|
+
s3FilePicker?: S3FilePicker | undefined;
|
|
7
|
+
dbManagerDrawer?: DbManagerDrawer | undefined;
|
|
8
|
+
resourceEditorDrawer?: ResourceEditorDrawer | undefined;
|
|
9
|
+
resourceDataCache: Record<string, string | undefined>;
|
|
10
|
+
asset: Asset;
|
|
11
|
+
onClick?: () => void;
|
|
12
|
+
};
|
|
13
|
+
declare const AssetButtons: import("svelte").Component<Props, {}, "">;
|
|
14
|
+
type AssetButtons = ReturnType<typeof AssetButtons>;
|
|
15
|
+
export default AssetButtons;
|
|
@@ -1,21 +1,20 @@
|
|
|
1
1
|
<script lang="ts">import { clone, pluralize } from '../../utils';
|
|
2
|
-
import {
|
|
3
|
-
import { AlertTriangle, Edit2, Pyramid } from 'lucide-svelte';
|
|
2
|
+
import { Pyramid } from 'lucide-svelte';
|
|
4
3
|
import { twMerge } from 'tailwind-merge';
|
|
5
4
|
import { Popover } from '../meltComponents';
|
|
6
5
|
import S3FilePicker from '../S3FilePicker.svelte';
|
|
7
|
-
import
|
|
8
|
-
import { assetEq, formatAssetKind } from './lib';
|
|
6
|
+
import { assetsEq, formatAssetAccessType, formatAssetKind, getAccessType } from './lib';
|
|
9
7
|
import DbManagerDrawer from '../DBManagerDrawer.svelte';
|
|
10
|
-
import {
|
|
8
|
+
import { untrack } from 'svelte';
|
|
11
9
|
import { ResourceService } from '../../gen';
|
|
12
10
|
import { workspaceStore } from '../../stores';
|
|
13
|
-
import Button from '../common/button/Button.svelte';
|
|
14
11
|
import Tooltip from '../meltComponents/Tooltip.svelte';
|
|
12
|
+
import Tooltip2 from '../Tooltip.svelte';
|
|
15
13
|
import ResourceEditorDrawer from '../ResourceEditorDrawer.svelte';
|
|
14
|
+
import AssetButtons from './AssetButtons.svelte';
|
|
16
15
|
import ToggleButtonGroup from '../common/toggleButton-v2/ToggleButtonGroup.svelte';
|
|
17
16
|
import ToggleButton from '../common/toggleButton-v2/ToggleButton.svelte';
|
|
18
|
-
let { assets, enableChangeAnimation = true, size = 'xs', noBtnText = false, popoverPlacement = 'bottom-end', disableLiTooltip = false,
|
|
17
|
+
let { assets, enableChangeAnimation = true, size = 'xs', noBtnText = false, popoverPlacement = 'bottom-end', disableLiTooltip = false, onHoverLi, liSubtitle } = $props();
|
|
19
18
|
let prevAssets = $state([]);
|
|
20
19
|
let blueBgDiv = $state();
|
|
21
20
|
let s3FilePicker = $state();
|
|
@@ -33,7 +32,7 @@ $effect(() => {
|
|
|
33
32
|
$effect(() => {
|
|
34
33
|
assets;
|
|
35
34
|
untrack(() => {
|
|
36
|
-
if (
|
|
35
|
+
if (assetsEq(assets, prevAssets))
|
|
37
36
|
return;
|
|
38
37
|
prevAssets = clone(assets);
|
|
39
38
|
// Replay animation
|
|
@@ -86,16 +85,52 @@ $effect(() => {
|
|
|
86
85
|
<svelte:fragment slot="content">
|
|
87
86
|
<ul class="divide-y rounded-md">
|
|
88
87
|
{#each assets as asset}
|
|
89
|
-
{@const fallbackAccessType = fallbackAccessTypes?.find((a) =>
|
|
90
|
-
assetEq(a, asset)
|
|
91
|
-
)?.access_type}
|
|
92
|
-
{@const hasWarning = !asset.access_type && !fallbackAccessType}
|
|
93
88
|
<li
|
|
94
|
-
class="text-sm px-
|
|
89
|
+
class="text-sm px-3 h-12 flex gap-3 items-center hover:bg-surface-hover/25"
|
|
95
90
|
onmouseenter={() => onHoverLi?.(asset, 'enter')}
|
|
96
91
|
onmouseleave={() => onHoverLi?.(asset, 'leave')}
|
|
97
92
|
>
|
|
98
|
-
<
|
|
93
|
+
<Popover
|
|
94
|
+
contentClasses="py-2 px-4 flex flex-col gap-2"
|
|
95
|
+
disablePopup={!!asset.access_type}
|
|
96
|
+
>
|
|
97
|
+
<svelte:fragment slot="trigger">
|
|
98
|
+
<div
|
|
99
|
+
class={twMerge(
|
|
100
|
+
'text-xs font-normal border text-tertiary w-10 p-1 text-center rounded-md',
|
|
101
|
+
!asset.access_type && !asset.alt_access_type
|
|
102
|
+
? 'text-orange-500 !border-orange-500'
|
|
103
|
+
: '',
|
|
104
|
+
!asset.access_type ? 'hover:bg-surface active:opacity-80' : ''
|
|
105
|
+
)}
|
|
106
|
+
>
|
|
107
|
+
{formatAssetAccessType(getAccessType(asset))}
|
|
108
|
+
</div>
|
|
109
|
+
</svelte:fragment>
|
|
110
|
+
<svelte:fragment slot="content">
|
|
111
|
+
{#if !asset.access_type}
|
|
112
|
+
<span class="text-sm text-tertiary leading-4">
|
|
113
|
+
Could not infer automatically <br />
|
|
114
|
+
<span class="text-xs">Please select manually </span>
|
|
115
|
+
</span>
|
|
116
|
+
<div class="flex items-center gap-2">
|
|
117
|
+
<ToggleButtonGroup bind:selected={asset.alt_access_type} class="max-w-fit">
|
|
118
|
+
{#snippet children({ item })}
|
|
119
|
+
<ToggleButton value="r" label="Read" {item} />
|
|
120
|
+
<ToggleButton value="w" label="Write" {item} />
|
|
121
|
+
<ToggleButton value="rw" label="Read/Write" {item} />
|
|
122
|
+
{/snippet}
|
|
123
|
+
</ToggleButtonGroup>
|
|
124
|
+
|
|
125
|
+
<Tooltip2>
|
|
126
|
+
This is used to determine if the asset should be displayed as an input or an
|
|
127
|
+
output node in the flow editor
|
|
128
|
+
</Tooltip2>
|
|
129
|
+
</div>
|
|
130
|
+
{/if}
|
|
131
|
+
</svelte:fragment>
|
|
132
|
+
</Popover>
|
|
133
|
+
<div class="flex flex-col flex-1">
|
|
99
134
|
<Tooltip class="select-none max-w-48 truncate" disablePopup={disableLiTooltip}>
|
|
100
135
|
{asset.path}
|
|
101
136
|
<svelte:fragment slot="text">
|
|
@@ -106,68 +141,21 @@ $effect(() => {
|
|
|
106
141
|
{liSubtitle?.(asset) ??
|
|
107
142
|
formatAssetKind({
|
|
108
143
|
...asset,
|
|
109
|
-
|
|
144
|
+
...(asset.kind === 'resource'
|
|
145
|
+
? { metadata: { resource_type: resourceDataCache[asset.path] } }
|
|
146
|
+
: {})
|
|
110
147
|
})}
|
|
111
148
|
</span>
|
|
112
149
|
</div>
|
|
113
150
|
|
|
114
|
-
<
|
|
115
|
-
{
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
on:click={() => (resourceEditorDrawer?.initEdit(asset.path), (isOpen = false))}
|
|
123
|
-
/>
|
|
124
|
-
{/if}
|
|
125
|
-
{#if asset.kind === 'resource' && resourceDataCache[asset.path] === undefined}
|
|
126
|
-
<Tooltip class="mr-2.5">
|
|
127
|
-
<AlertTriangle size={16} class="text-orange-600 dark:text-orange-500" />
|
|
128
|
-
<svelte:fragment slot="text">Could not find resource</svelte:fragment>
|
|
129
|
-
</Tooltip>
|
|
130
|
-
{/if}
|
|
131
|
-
{#if assetCanBeExplored(asset, { resource_type: resourceDataCache[asset.path] })}
|
|
132
|
-
<ExploreAssetButton
|
|
133
|
-
{asset}
|
|
134
|
-
{s3FilePicker}
|
|
135
|
-
{dbManagerDrawer}
|
|
136
|
-
onClick={() => (isOpen = false)}
|
|
137
|
-
noText
|
|
138
|
-
_resourceMetadata={{ resource_type: resourceDataCache[asset.path] }}
|
|
139
|
-
/>
|
|
140
|
-
{/if}
|
|
141
|
-
|
|
142
|
-
<ToggleButtonGroup
|
|
143
|
-
disabled={!!asset.access_type}
|
|
144
|
-
tabListClass={hasWarning ? 'bg-red-200 dark:bg-red-300' : ''}
|
|
145
|
-
bind:selected={
|
|
146
|
-
() => asset.access_type ?? fallbackAccessType,
|
|
147
|
-
async (access_type) => {
|
|
148
|
-
fallbackAccessTypes ??= []
|
|
149
|
-
await tick()
|
|
150
|
-
let val = fallbackAccessTypes?.filter((a) => !assetEq(a, asset))
|
|
151
|
-
val.push({ ...asset, access_type })
|
|
152
|
-
fallbackAccessTypes = val
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
>
|
|
156
|
-
{#snippet children({ item })}
|
|
157
|
-
{#each ['r', 'w', 'rw'] as v}
|
|
158
|
-
<ToggleButton
|
|
159
|
-
class={hasWarning
|
|
160
|
-
? 'bg-transparent hover:bg-red-100 dark:text-primary-inverse'
|
|
161
|
-
: ''}
|
|
162
|
-
value={v}
|
|
163
|
-
label={v}
|
|
164
|
-
{item}
|
|
165
|
-
tooltip={'Could not infer access type from code, please select manually'}
|
|
166
|
-
/>
|
|
167
|
-
{/each}
|
|
168
|
-
{/snippet}
|
|
169
|
-
</ToggleButtonGroup>
|
|
170
|
-
</div>
|
|
151
|
+
<AssetButtons
|
|
152
|
+
onClick={() => (isOpen = false)}
|
|
153
|
+
{asset}
|
|
154
|
+
{resourceDataCache}
|
|
155
|
+
{dbManagerDrawer}
|
|
156
|
+
{resourceEditorDrawer}
|
|
157
|
+
{s3FilePicker}
|
|
158
|
+
/>
|
|
171
159
|
</li>
|
|
172
160
|
{/each}
|
|
173
161
|
</ul>
|
|
@@ -1,16 +1,15 @@
|
|
|
1
|
-
import { type Asset, type
|
|
1
|
+
import { type Asset, type AssetWithAltAccessType } from './lib';
|
|
2
2
|
import type { Placement } from '@floating-ui/core';
|
|
3
3
|
type $$ComponentProps = {
|
|
4
|
-
assets:
|
|
4
|
+
assets: AssetWithAltAccessType[];
|
|
5
5
|
enableChangeAnimation?: boolean;
|
|
6
6
|
size?: 'xs' | '3xs';
|
|
7
7
|
noBtnText?: boolean;
|
|
8
8
|
popoverPlacement?: Placement;
|
|
9
9
|
disableLiTooltip?: boolean;
|
|
10
|
-
fallbackAccessTypes?: AssetWithAccessType[];
|
|
11
10
|
onHoverLi?: (asset: Asset, eventType: 'enter' | 'leave') => void;
|
|
12
11
|
liSubtitle?: (asset: Asset) => string;
|
|
13
12
|
};
|
|
14
|
-
declare const AssetsDropdownButton: import("svelte").Component<$$ComponentProps, {}, "
|
|
13
|
+
declare const AssetsDropdownButton: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
15
14
|
type AssetsDropdownButton = ReturnType<typeof AssetsDropdownButton>;
|
|
16
15
|
export default AssetsDropdownButton;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
<script lang="ts">import {
|
|
1
|
+
<script lang="ts">import { twMerge } from 'tailwind-merge';
|
|
2
|
+
import { Drawer, DrawerContent } from '../common';
|
|
2
3
|
import RowIcon from '../common/table/RowIcon.svelte';
|
|
3
|
-
import {
|
|
4
|
-
import { getAssetUsagePageUri } from './lib';
|
|
4
|
+
import { formatAssetAccessType, getAssetUsagePageUri } from './lib';
|
|
5
5
|
let usagesDrawerData = $state();
|
|
6
6
|
export function open(data) {
|
|
7
7
|
usagesDrawerData = data;
|
|
@@ -27,13 +27,13 @@ export function open(data) {
|
|
|
27
27
|
<span class="font-semibold">{u.path}</span>
|
|
28
28
|
<span class="text-xs text-tertiary">{u.kind}</span>
|
|
29
29
|
</div>
|
|
30
|
-
<div
|
|
31
|
-
{
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
{
|
|
30
|
+
<div
|
|
31
|
+
class={twMerge(
|
|
32
|
+
'text-xs font-normal border text-tertiary w-10 p-1 text-center rounded-md',
|
|
33
|
+
!u.access_type ? 'hover:bg-surface active:opacity-80' : ''
|
|
34
|
+
)}
|
|
35
|
+
>
|
|
36
|
+
{formatAssetAccessType(u.access_type)}
|
|
37
37
|
</div>
|
|
38
38
|
</a>
|
|
39
39
|
</li>
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
<script lang="ts">import { ResourceService } from '../../gen';
|
|
2
|
+
import { inferAssets } from '../../infer';
|
|
3
|
+
import { workspaceStore } from '../../stores';
|
|
4
|
+
import { usePromise } from '../../svelte5Utils.svelte';
|
|
5
|
+
import { pruneNullishArrayWithSet, uniqueBy } from '../../utils';
|
|
6
|
+
import DbManagerDrawer from '../DBManagerDrawer.svelte';
|
|
7
|
+
import ResourceEditorDrawer from '../ResourceEditorDrawer.svelte';
|
|
8
|
+
import S3FilePicker from '../S3FilePicker.svelte';
|
|
9
|
+
import AssetButtons from './AssetButtons.svelte';
|
|
10
|
+
import { formatAssetKind, getFlowModuleAssets, parseInputArgsAssets } from './lib';
|
|
11
|
+
let { job } = $props();
|
|
12
|
+
async function extractAssets(job) {
|
|
13
|
+
if (job.job_kind === 'flow') {
|
|
14
|
+
const additionalAssetsMap = {
|
|
15
|
+
// TODO : Transitive assets
|
|
16
|
+
};
|
|
17
|
+
return uniqueBy(pruneNullishArrayWithSet([
|
|
18
|
+
...(job.raw_flow?.modules.flatMap((m) => getFlowModuleAssets(m, additionalAssetsMap)) ??
|
|
19
|
+
[]),
|
|
20
|
+
...parseInputArgsAssets(job.args ?? {})
|
|
21
|
+
]), (x) => x.kind + x.path);
|
|
22
|
+
}
|
|
23
|
+
if (job.job_kind === 'script') {
|
|
24
|
+
return [
|
|
25
|
+
...(await inferAssets(job.language, job.raw_code ?? '')),
|
|
26
|
+
...parseInputArgsAssets(job.args ?? {})
|
|
27
|
+
];
|
|
28
|
+
}
|
|
29
|
+
return [];
|
|
30
|
+
}
|
|
31
|
+
let assets = usePromise(() => extractAssets(job), { loadInit: false });
|
|
32
|
+
$effect(() => {
|
|
33
|
+
job.id;
|
|
34
|
+
$workspaceStore;
|
|
35
|
+
assets.refresh();
|
|
36
|
+
});
|
|
37
|
+
let resourceDataCache = $state({});
|
|
38
|
+
$effect(() => {
|
|
39
|
+
for (const asset of assets.value ?? []) {
|
|
40
|
+
if (asset.kind !== 'resource' || asset.path in resourceDataCache)
|
|
41
|
+
continue;
|
|
42
|
+
ResourceService.getResource({ path: asset.path, workspace: $workspaceStore })
|
|
43
|
+
.then((resource) => (resourceDataCache[asset.path] = resource.resource_type))
|
|
44
|
+
.catch((err) => (resourceDataCache[asset.path] = undefined));
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
let s3FilePicker = $state();
|
|
48
|
+
let dbManagerDrawer = $state();
|
|
49
|
+
let resourceEditorDrawer = $state();
|
|
50
|
+
</script>
|
|
51
|
+
|
|
52
|
+
<ul class="flex flex-col divide-y mt-1">
|
|
53
|
+
{#each assets.value ?? [] as asset}
|
|
54
|
+
<li class="flex justify-between py-3 leading-4 text-sm pl-4">
|
|
55
|
+
<div class="flex flex-col flex-1 truncate">
|
|
56
|
+
{asset.path}
|
|
57
|
+
<span class="text-2xs text-tertiary">
|
|
58
|
+
{formatAssetKind({
|
|
59
|
+
...asset,
|
|
60
|
+
...(asset.kind === 'resource'
|
|
61
|
+
? { metadata: { resource_type: resourceDataCache[asset.path] } }
|
|
62
|
+
: {})
|
|
63
|
+
})}
|
|
64
|
+
</span>
|
|
65
|
+
</div>
|
|
66
|
+
<AssetButtons
|
|
67
|
+
{asset}
|
|
68
|
+
{resourceDataCache}
|
|
69
|
+
{dbManagerDrawer}
|
|
70
|
+
{resourceEditorDrawer}
|
|
71
|
+
{s3FilePicker}
|
|
72
|
+
/>
|
|
73
|
+
</li>
|
|
74
|
+
{/each}
|
|
75
|
+
</ul>
|
|
76
|
+
|
|
77
|
+
<S3FilePicker bind:this={s3FilePicker} readOnlyMode />
|
|
78
|
+
<DbManagerDrawer bind:this={dbManagerDrawer} />
|
|
79
|
+
<ResourceEditorDrawer bind:this={resourceEditorDrawer} />
|
|
File without changes
|
|
@@ -1,12 +1,16 @@
|
|
|
1
|
-
import type { AssetKind as _AssetKind, Asset as _Asset, ListAssetsResponse, AssetUsageAccessType } from '../../gen';
|
|
1
|
+
import type { AssetKind as _AssetKind, Asset as _Asset, ListAssetsResponse, AssetUsageAccessType, FlowModule, ScriptArgs } from '../../gen';
|
|
2
2
|
export type Asset = _Asset;
|
|
3
3
|
export type AssetKind = _AssetKind;
|
|
4
4
|
export type AssetWithAccessType = Asset & {
|
|
5
5
|
access_type?: AssetUsageAccessType;
|
|
6
6
|
};
|
|
7
|
+
export type AssetWithAltAccessType = AssetWithAccessType & {
|
|
8
|
+
alt_access_type?: AssetUsageAccessType;
|
|
9
|
+
};
|
|
7
10
|
export declare function formatAsset(asset: Asset): string;
|
|
8
11
|
export declare function getAssetUsagePageUri(usage: ListAssetsResponse[number]['usages'][number]): string | undefined;
|
|
9
12
|
export declare function assetEq(a: Asset | undefined, b: Asset | undefined): boolean;
|
|
13
|
+
export declare function assetsEq(a: Asset[], b: Asset[]): boolean;
|
|
10
14
|
export declare function parseAssetFromString(s: string): Asset | undefined;
|
|
11
15
|
export declare function formatAssetKind(asset: {
|
|
12
16
|
kind: AssetKind;
|
|
@@ -14,3 +18,7 @@ export declare function formatAssetKind(asset: {
|
|
|
14
18
|
resource_type?: string;
|
|
15
19
|
};
|
|
16
20
|
}): string;
|
|
21
|
+
export declare function formatAssetAccessType(accessType: AssetUsageAccessType | undefined): "?" | "Read" | "Write" | "R/W";
|
|
22
|
+
export declare function getAccessType(asset: AssetWithAltAccessType): AssetUsageAccessType | undefined;
|
|
23
|
+
export declare function getFlowModuleAssets(flowModuleValue: FlowModule, additionalAssetsMap?: Record<string, AssetWithAccessType[]>): AssetWithAccessType[] | undefined;
|
|
24
|
+
export declare function parseInputArgsAssets(args: ScriptArgs): AssetWithAccessType[];
|