sync.d.ts 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. import { FanOut } from './fanout';
  2. /** React.js synchronous state interface. */
  3. export interface SyncStore<T> {
  4. subscribe: SyncStoreSubscribe;
  5. getSnapshot: () => T;
  6. }
  7. export type SyncStoreSubscribe = (callback: () => void) => SyncStoreUnsubscribe;
  8. export type SyncStoreUnsubscribe = () => void;
  9. export type SyncDep<T> = SyncValue<T> & SyncStore<T> & FanOut<void>;
  10. export type WrapListInSyncDep<T extends unknown[]> = {
  11. [K in keyof T]: SyncDep<T[K]>;
  12. };
  13. export interface Disposable {
  14. dispose(): void;
  15. }
  16. export interface SyncValue<T> {
  17. value: T;
  18. }
  19. export declare class Value<V> extends FanOut<void> implements SyncStore<V>, SyncValue<V> {
  20. constructor(value: V);
  21. next(value: V, force?: boolean): void;
  22. /** ----------------------------------------------------- {@link SyncValue} */
  23. value: V;
  24. /** ----------------------------------------------------- {@link SyncStore} */
  25. readonly subscribe: SyncStoreSubscribe;
  26. readonly getSnapshot: () => V;
  27. }
  28. export declare class Computed<N, V extends unknown[] = any> extends FanOut<void> implements SyncValue<N>, SyncStore<N>, Disposable {
  29. protected readonly deps: WrapListInSyncDep<V>;
  30. protected readonly compute: (args: V) => N;
  31. private cache;
  32. private subs;
  33. constructor(deps: WrapListInSyncDep<V>, compute: (args: V) => N);
  34. private _comp;
  35. /** ----------------------------------------------------- {@link SyncValue} */
  36. get value(): N;
  37. /** ----------------------------------------------------- {@link SyncStore} */
  38. readonly subscribe: SyncStoreSubscribe;
  39. readonly getSnapshot: () => N;
  40. /** ---------------------------------------------------- {@link Disposable} */
  41. dispose(): void;
  42. }
  43. export declare const val: <V>(initial: V) => Value<V>;
  44. export declare const comp: <V extends unknown[], N>(deps: WrapListInSyncDep<V>, compute: (args: V) => N) => Computed<N, V>;