import { Context, Effect, Layer, Option, Ref, Scope } from "effect"; export class PiTurnRefService extends Context.Service(value?: Option.Option) => Effect.Effect>, never, Scope.Scope>; readonly reset: () => Effect.Effect; }>()("pi-webmcp/PiTurnRefService") { static readonly live = Layer.effect( PiTurnRefService, Effect.gen(function*() { const refs = new Set>>(); return PiTurnRefService.of({ make: Effect.fn("PiTurnRefService.make")(function*(value: Option.Option = Option.none()) { const ref = yield* Ref.make(value); refs.add(ref); yield* Effect.addFinalizer(() => { return Effect.sync(() => refs.delete(ref)); }); return ref; }), reset: Effect.fn("PiTurnRefService.reset")(function*() { for (const ref of refs) { yield* Ref.set(ref, Option.none()); } }), }); }), ); }