import { Eq } from 'fp-ts/Eq'; import * as A from './Adapter'; import * as D from './Disposable'; import * as E from './Env'; import * as O from './Option'; import * as RS from './ReaderStream'; /** * @since 0.11.0 * @category Model */ export interface KV extends Eq { readonly key: K; readonly initial: E.Env; } /** * @since 0.11.0 * @category Model */ export interface Of extends KV { } /** * @since 0.11.0 * @category Type-level */ export declare type KeyOf = [A] extends [KV] ? R : never; /** * @since 0.11.0 * @category Type-level */ export declare type EnvOf = [A] extends [KV] ? R : never; /** * @since 0.11.0 * @category Type-level */ export declare type ValueOf = [A] extends [KV] ? R : never; /** * @since 0.11.0 * @category Options */ export declare type Options = { readonly key?: K; } & Partial>; /** * Note that by default an incrementing index is utilized to generate a key if one is not * provided. In other words, by default, this is not referentially transparent for * your own convenience * * @since 0.11.0 * @category Constructor */ export declare function make(initial: E.Env, options?: Options): KV; /** * @since 0.11.0 * @category Combinator */ export declare const get: (kv: KV) => E.Env; /** * @since 0.12.0 * @category Environment */ export interface Get { readonly getKV: (kv: KV) => E.Env; } /** * @since 0.11.0 * @category Combinator */ export declare const has: (kv: KV) => E.Env; /** * @since 0.12.0 * @category Environment */ export interface Has { readonly hasKV: (kv: KV) => E.Of; } /** * @since 0.11.0 * @category Combinator */ export declare const set: (kv: KV) => (value: A) => E.Env; /** * @since 0.12.0 * @category Environment */ export interface Set { readonly setKV: (kv: KV, value: A) => E.Env; } /** * @since 0.11.0 * @category Combinator */ export declare const update: (kv: KV) => (f: (value: A) => E.Env) => E.Env; /** * @since 0.11.0 * @category Combinator */ export declare const remove: (kv: KV) => E.Env>; /** * @since 0.12.0 * @category Environment */ export interface Remove { readonly removeKV: (kv: KV) => E.Env>; } /** * @since 0.12.0 * @category Environment */ export interface Events { readonly kvEvents: Adapter; } /** * @since 0.12.0 * @category Combinator */ export declare const getAdapter: E.Env) => void, import("@most/types").Stream>]>; /** * @since 0.11.0 * @category Combinator */ export declare const getSendEvent: E.Env) => void>; /** * @since 0.11.0 * @category Combinator */ export declare const sendEvent: (event: Event) => E.Env; /** * @since 0.12.0 * @category Combinator */ export declare const getKVEvents: RS.ReaderStream>; /** * @since 0.11.0 * @category Combinator */ export declare const listenTo: (kv: KV) => RS.ReaderStream>; /** * @since 0.11.0 * @category Combinator */ export declare const listenToValues: (kv: KV) => RS.ReaderStream>; /** * @since 0.12.0 * @category Environment */ export interface ParentEnv { readonly parentKVEnv: O.Option; } /** * @since 0.11.0 * @category Combinator */ export declare const getParentEnv: E.Env>; /** * Traverse up the tree of KVEnv and parent KVEnv to find the closest KVEnv that * has reference for a given KV. This is useful for providing a React-like Context * API atop of KV. * @since 0.11.0 * @category Combinator */ export declare const findKVProvider: (ref: KV) => E.Env; /** * @since 0.11.0 * @category Combinator */ export declare const withProvider: (kv: KV) => (env: E.Env) => E.Env; /** * @since 0.11.0 * @category Combinator */ export declare const withProviderStream: (kv: KV) => (rs: RS.ReaderStream) => RS.ReaderStream; /** * @since 0.12.0 * @category Environment */ export interface Env extends Get, Has, Set, Remove, Events, ParentEnv { } /** * @since 0.12.0 * @category Combinator */ export declare const getEnv: E.Env; /** * @since 0.11.0 * @category Model */ export declare type Adapter = A.Adapter>; /** * @since 0.12.0 * @category Model */ export declare type Event = Created | Updated | Removed; /** * @since 0.12.0 * @category Model */ export interface Created { readonly _tag: 'Created'; readonly key: K; readonly value: A; readonly fromAncestor: boolean; } /** * @since 0.11.0 * @category Refinement */ export declare const isCreated: (event: Event) => event is Created; /** * @since 0.12.0 * @category Model */ export interface Updated { readonly _tag: 'Updated'; readonly key: K; readonly previousValue: A; readonly value: A; readonly fromAncestor: boolean; } /** * @since 0.11.0 * @category Refinement */ export declare const isUpdated: (event: Event) => event is Updated; /** * @since 0.12.0 * @category Model */ export interface Removed { readonly _tag: 'Removed'; readonly key: K; readonly fromAncestor: boolean; } /** * @since 0.11.0 * @category Refinement */ export declare const isRemoved: (event: Event) => event is Removed; /** * @since 0.12.0 * @category Deconstructor */ export declare const matchW: (onCreated: (value: A, key: K) => B, onUpdated: (previousValue: A, value: A, key: K) => C, onDeleted: (key: K) => D) => (event: Event) => B | C | D; /** * @since 0.12.0 * @category Deconstructor */ export declare const match: (onCreated: (value: A, key: K) => B, onUpdated: (previousValue: A, value: A, key: K) => B, onDeleted: (key: K) => B) => (event: Event) => B; /** * @since 0.12.0 * @category Environment Constructor */ export declare function env(options?: EnvOptions): Env; /** * @since 0.11.0 * @category Options */ export declare type EnvOptions = { readonly initial?: Iterable; readonly kvEvents?: Adapter; readonly parentEnv?: Env; }; /** * Sample an Env with the latest references when updates have occured. * @since 0.11.0 * @category Combinator */ export declare const sample: (env: E.Env) => RS.ReaderStream; /** * A shared KV for keeping track of a context's disposable resources. * @since 0.11.0 * @category KV */ export declare const Disposable: KV; /** * @since 0.11.0 * @category Use */ export declare const useKeyedEnvs: (Eq: Eq) => E.Env E.Env; readonly deleteRefs: (key: A) => D.Disposable; }>; //# sourceMappingURL=KV.d.ts.map