Summary
StreamController pushes every event onto an internal _buffer whenever no async-iterator waiter is pending. The primary documented consumption paths (subscribe() / liveQuery()) are callback-based and never drain that buffer, so it grows without bound; close() doesn't clear it either.
Detail
clients/ts/src/stream/controller.ts:
:27-38 onEvent delivers to callback subscribers, then if (waiter) waiter.resolve(...) else this._buffer.push(event).
- Callback-only consumers never call
[Symbol.asyncIterator]().next(), so _buffer.shift() is never reached.
close() (:150-163) resolves waiters but does not clear _buffer.
FilteredStreamController compounds this (inner + outer controllers each buffer).
Impact
A long-lived dashboard subscription on a busy table accumulates every event in memory until the tab dies.
Fix direction
Only buffer when at least one async-iterator consumer has been used, or cap/clear the buffer for callback-only mode; clear _buffer on close().
Found in a repo-wide audit; verified by code trace. #152 is the unrelated server-side buffer.
Summary
StreamControllerpushes every event onto an internal_bufferwhenever no async-iterator waiter is pending. The primary documented consumption paths (subscribe()/liveQuery()) are callback-based and never drain that buffer, so it grows without bound;close()doesn't clear it either.Detail
clients/ts/src/stream/controller.ts::27-38onEventdelivers to callback subscribers, thenif (waiter) waiter.resolve(...) else this._buffer.push(event).[Symbol.asyncIterator]().next(), so_buffer.shift()is never reached.close()(:150-163) resolves waiters but does not clear_buffer.FilteredStreamControllercompounds this (inner + outer controllers each buffer).Impact
A long-lived dashboard subscription on a busy table accumulates every event in memory until the tab dies.
Fix direction
Only buffer when at least one async-iterator consumer has been used, or cap/clear the buffer for callback-only mode; clear
_bufferonclose().Found in a repo-wide audit; verified by code trace. #152 is the unrelated server-side buffer.