Summary
Observable queries backed by an in-memory store silently returned nothing. The wrappers in Cratis.Reactive subscribed the source into a plain Subject before any consumer could attach, so a source that emits while it is being subscribed — a BehaviorSubject seed, a ReplaySubject buffer, anything reading in-memory state — pushed its value into a subject with no observers, and it was lost for good. Sources whose first value arrives asynchronously (a database round-trip) were unaffected, which is why this only ever surfaced against in-memory backing stores.
Fixed
- Observable queries no longer lose the value their source emits synchronously on subscribe.
InvokeAndWrapWithSubject,InvokeAndWrapWithTransformSubject, andTransformingSubjectnow buffer the most recent value, so the consumer that subscribes after wrapping still receives the current state. - The source subscription is now disposed when the wrapping subject completes, instead of leaking for the lifetime of the source.
Changed
- Subjects returned by
InvokeAndWrapWithSubjectandInvokeAndWrapWithTransformSubject, andTransformingSubjectitself, replay their most recent value to new subscribers. A subscriber attaching after a value has been produced now sees the current state rather than waiting for the next change.