© 2026 Hedgehog Software, LLC
Stream.share
const sharedChangeStream = yield* listenStream(vscode.workspace.onDidChangeTextDocument).pipe( Stream.share({ capacity: "unbounded" }), ) yield* sharedChangeStream.pipe( Stream.debounce("200 millis"), Stream.runForEach(() => Effect.log("First one")), Effect.forkScoped, ) yield* sharedChangeStream.pipe( Stream.debounce("2 seconds"), Stream.runForEach(() => Effect.log("Second one one")), Effect.forkScoped, )
listenStream (vscode.ts):
export const listenStream = <A>(event: vscode.Event<A>): Stream.Stream<A> => Stream.async<A>(emit => { const d = event(data => emit.single(data)) return Effect.sync(() => { d.dispose() }) })