import { customRef, onBeforeUnmount, readonly, Ref, ref, } from "@nuxtjs/composition-api" import { Observable, Subscription } from "rxjs" export function useReadonlyStream(stream$: Observable, initialValue: T) { let sub: Subscription | null = null onBeforeUnmount(() => { if (sub) { sub.unsubscribe() } }) const targetRef = ref(initialValue) as Ref sub = stream$.subscribe((value) => { targetRef.value = value }) return readonly(targetRef) } export function useStream( stream$: Observable, initialValue: T, setter: (val: T) => void ) { let sub: Subscription | null = null onBeforeUnmount(() => { if (sub) { sub.unsubscribe() } }) return customRef((track, trigger) => { let value = initialValue sub = stream$.subscribe((val) => { value = val trigger() }) return { get() { track() return value }, set(value: T) { trigger() setter(value) }, } }) }