import {createAdapter} from '@most/adapter'; import {Stream} from '@most/types'; import {hold} from '@most/hold'; export type Subject = { stream$: Stream; next: (val: T) => void; getValue: () => T; } export const createSubject = (data: T): Subject => { let cache = data; const [handler, stream$] = createAdapter(); return { next: (val: T) => { cache = val; handler(val); }, stream$: hold(stream$), getValue: () => cache }; };