fix: avoid unsupported workdir subscription
This commit is contained in:
@@ -222,6 +222,9 @@ Deno.test("workspace Worker list lives on the dedicated Workers page", async ()
|
|||||||
const workerWorkdirMeta = await Deno.readTextFile(
|
const workerWorkdirMeta = await Deno.readTextFile(
|
||||||
new URL("../sidebar/worker-workdir-meta.ts", import.meta.url),
|
new URL("../sidebar/worker-workdir-meta.ts", import.meta.url),
|
||||||
);
|
);
|
||||||
|
const workerSubscription = await Deno.readTextFile(
|
||||||
|
new URL("../sidebar/worker-subscription.ts", import.meta.url),
|
||||||
|
);
|
||||||
const sidebar = await Deno.readTextFile(
|
const sidebar = await Deno.readTextFile(
|
||||||
new URL("../sidebar/WorkspaceSidebar.svelte", import.meta.url),
|
new URL("../sidebar/WorkspaceSidebar.svelte", import.meta.url),
|
||||||
);
|
);
|
||||||
@@ -266,6 +269,10 @@ Deno.test("workspace Worker list lives on the dedicated Workers page", async ()
|
|||||||
workerWorkdirMeta.includes("workdir.creation_selector") &&
|
workerWorkdirMeta.includes("workdir.creation_selector") &&
|
||||||
workerWorkdirMeta.includes("explicitReferenceFallback(") &&
|
workerWorkdirMeta.includes("explicitReferenceFallback(") &&
|
||||||
workerWorkdirMeta.includes('"detached"') &&
|
workerWorkdirMeta.includes('"detached"') &&
|
||||||
|
workerSubscription.includes(
|
||||||
|
'workspaceApiPath(workspaceId, "/working-directories")',
|
||||||
|
) &&
|
||||||
|
!workerSubscription.includes('topic: "workspace_workdirs"') &&
|
||||||
sidebarCss.includes(".worker-nav-meta") &&
|
sidebarCss.includes(".worker-nav-meta") &&
|
||||||
sidebarCss.includes("text-overflow: ellipsis") &&
|
sidebarCss.includes("text-overflow: ellipsis") &&
|
||||||
sidebarCss.includes("white-space: nowrap") &&
|
sidebarCss.includes("white-space: nowrap") &&
|
||||||
|
|||||||
@@ -47,22 +47,20 @@ export function workspaceWorkersStore(
|
|||||||
let loading = true;
|
let loading = true;
|
||||||
let error: string | null = null;
|
let error: string | null = null;
|
||||||
let disposed = false;
|
let disposed = false;
|
||||||
let workdirRequest = 0;
|
|
||||||
const publish = () => {
|
const publish = () => {
|
||||||
const workers = [...projection.workers.values()]
|
const workers = [...projection.workers.values()]
|
||||||
.map((worker) => projectWorker(worker, workdirs))
|
.map((worker) => projectWorker(worker, workdirs))
|
||||||
.sort(compareWorkersForSidebar);
|
.sort(compareWorkersForSidebar);
|
||||||
set({ loading, error, workers });
|
set({ loading, error, workers });
|
||||||
};
|
};
|
||||||
const refreshWorkdirs = async () => {
|
const loadWorkdirs = async () => {
|
||||||
const request = ++workdirRequest;
|
|
||||||
const result = await loadJson(
|
const result = await loadJson(
|
||||||
fetch,
|
fetch,
|
||||||
workspaceApiPath(workspaceId, "/working-directories"),
|
workspaceApiPath(workspaceId, "/working-directories"),
|
||||||
undefined,
|
undefined,
|
||||||
parseWorkingDirectoryListResponse,
|
parseWorkingDirectoryListResponse,
|
||||||
);
|
);
|
||||||
if (disposed || request !== workdirRequest || !result.data) return;
|
if (disposed || !result.data) return;
|
||||||
workdirs = new Map(
|
workdirs = new Map(
|
||||||
result.data.items.map((
|
result.data.items.map((
|
||||||
workdir,
|
workdir,
|
||||||
@@ -70,8 +68,7 @@ export function workspaceWorkersStore(
|
|||||||
);
|
);
|
||||||
publish();
|
publish();
|
||||||
};
|
};
|
||||||
const multiplexer = workspaceMultiplexer(workspaceId);
|
const subscription = workspaceMultiplexer(workspaceId).subscribe(
|
||||||
const subscription = multiplexer.subscribe(
|
|
||||||
{ topic: "workspace_workers" },
|
{ topic: "workspace_workers" },
|
||||||
{
|
{
|
||||||
onFrame: (frame) => {
|
onFrame: (frame) => {
|
||||||
@@ -114,25 +111,10 @@ export function workspaceWorkersStore(
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
const workdirSubscription = multiplexer.subscribe(
|
void loadWorkdirs();
|
||||||
{ topic: "workspace_workdirs" },
|
|
||||||
{
|
|
||||||
onFrame: (frame) => {
|
|
||||||
const isSnapshot = frame.frame === "response" &&
|
|
||||||
frame.message.result === "subscribed";
|
|
||||||
const isUpdate = frame.frame === "event" &&
|
|
||||||
frame.message.event === "event" &&
|
|
||||||
(frame.message.data.payload.event === "workdir_upserted" ||
|
|
||||||
frame.message.data.payload.event === "workdir_removed");
|
|
||||||
if (isSnapshot || isUpdate) void refreshWorkdirs();
|
|
||||||
},
|
|
||||||
},
|
|
||||||
);
|
|
||||||
void refreshWorkdirs();
|
|
||||||
return () => {
|
return () => {
|
||||||
disposed = true;
|
disposed = true;
|
||||||
subscription.close();
|
subscription.close();
|
||||||
workdirSubscription.close();
|
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user