import { ValueFromSubscribables, LoopSubscriber, ValueFromSubscribable } from "./loop-subscriber"; import { LoopObserver } from "./loop-observer"; import { loopObserverRegistry } from "./registry"; import { Subscribable, ArrayOfSubscribables } from "./subscribable"; export const observe = (key: "calc" | "write" | "midwrite" | "recalc", action: (...args: ValueFromSubscribables) => T, ...dependencies: D) => { const observer = new LoopSubscriber(action, ...dependencies); loopObserverRegistry.register(key, observer); return observer; }; export const read = (action: () => T) => { const observer = new LoopObserver(action); loopObserverRegistry.register("read", observer); return observer; }; export const write = (action: (...args: ValueFromSubscribables) => T, ...dependencies: D) => observe("write", action, ...dependencies); export const calc = (action: (...args: ValueFromSubscribables) => T, ...dependencies: D) => observe("calc", action, ...dependencies); export const midwrite = (action: (...args: ValueFromSubscribables) => T, ...dependencies: D) => observe("midwrite", action, ...dependencies); export const recalc = (action: (...args: ValueFromSubscribables) => T, ...dependencies: D) => observe("recalc", action, ...dependencies); export const stopObserving = (observer: LoopSubscriber) => loopObserverRegistry.unregister(observer); const test = read(() => document.body.clientHeight); write((t) => t, test);