summaryrefslogtreecommitdiffhomepage
path: root/src/app/plugin-host.svelte.ts
diff options
context:
space:
mode:
authorAdam Malczewski <[email protected]>2026-09-05 05:20:01 +0900
committerAdam Malczewski <[email protected]>2026-09-05 05:20:01 +0900
commit535215bfd1fee6087613108f42d28cd2807184d3 (patch)
treede34459b2357e722dc08ff3e2e02b6b19fc8e401 /src/app/plugin-host.svelte.ts
parent5e5f02c67d0c165dd93f8277a3815d51a540d996 (diff)
downloaddispatch-web-535215bfd1fee6087613108f42d28cd2807184d3.tar.gz
dispatch-web-535215bfd1fee6087613108f42d28cd2807184d3.zip
fix(layout): guard plugin-host sync against malformed /plugins list; fix App test fake
Diffstat (limited to 'src/app/plugin-host.svelte.ts')
-rw-r--r--src/app/plugin-host.svelte.ts6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/app/plugin-host.svelte.ts b/src/app/plugin-host.svelte.ts
index 9e53bc1..729a8aa 100644
--- a/src/app/plugin-host.svelte.ts
+++ b/src/app/plugin-host.svelte.ts
@@ -122,6 +122,12 @@ export function createPluginHost(opts: PluginHostOptions): PluginHost {
opts.http.workspacePlugins(workspaceId),
]);
if (list === null) return;
+ // Shape guard at the outermost edge (asymmetric testing: the shell
+ // guards, the pure diff stays trusting): a malformed-but-200
+ // `/plugins` response (wrong shape, contract drift, a test fake that
+ // doesn't model the route) must fail SOFT exactly like `null` — keep
+ // the current imported set, never throw from the fire-and-forget sync.
+ if (!Array.isArray(list.loaded)) return;
const candidates = frontendCandidates(list, {
workspaceId,
usableIds: usablePluginIds(workspace?.plugins ?? []),