History

fix(client): release idle VCS subscriptions immediately

Ben Davis committed 4 months ago

Commit a49d7a71 parent 52b04b92 files · +15 −0Browse files

Unified · Split

2 files
  1. packages/client-runtime/src/state/runtime.test.ts +14 −0
  2. packages/client-runtime/src/state/vcs.ts +1 −0
packages/client-runtime/src/state/runtime.test.ts+14−0
@@ -9,6 +9,7 @@ import * as Layer from "effect/Layer"; · 8 unmodified lines
99 import * as Stream from "effect/Stream";
1010 import { AsyncResult, Atom, AtomRegistry } from "effect/unstable/reactivity";
1111
12+import { EnvironmentRegistry } from "../connection/registry.ts";
1213 import {
1314 environmentRpcKey,
1415 createAtomCommandScheduler,
@@ -22,6 +23,19 @@ import { · 7 unmodified lines
2223 settlePromise,
2324 squashAtomCommandFailure,
2425 } from "./runtime.ts";
26+import { createVcsEnvironmentAtoms } from "./vcs.ts";
27+
28+describe("VCS status subscription lifecycle", () => {
29+ it("removes the status subscription immediately after its last consumer unmounts", () => {
30+ const runtime = Atom.runtime(Layer.effect(EnvironmentRegistry, Effect.never));
31+ const statusAtom = createVcsEnvironmentAtoms(runtime).status({
32+ environmentId: EnvironmentId.make("env-1"),
33+ input: { cwd: "/repo" },
34+ });
35+
36+ expect(statusAtom.idleTTL).toBe(0);
37+ });
38+});
2539
2640 describe("settleAsyncResult", () => {
2741 it("preserves successful values and typed failures", async () => {
packages/client-runtime/src/state/vcs.ts+1−0
@@ -23,6 +23,7 @@ export function createVcsEnvironmentAtoms<R, E>( · 22 unmodified lines
2323 }),
2424 status: createEnvironmentSubscriptionAtomFamily(runtime, {
2525 label: "environment-data:vcs:status",
26+ idleTtlMs: 0,
2627 subscribe: (input: EnvironmentRpcInput<typeof WS_METHODS.subscribeVcsStatus>) =>
2728 subscribe(WS_METHODS.subscribeVcsStatus, input).pipe(
2829 Stream.mapAccum(