import { LongTuple } from './realmFactory'; /** @internal */ export type NodeKey = string; /** @internal */ export interface RealmNode<_T = unknown> { key: NodeKey; toString(): string; } /** @internal */ type RN = RealmNode; /** @internal **/ export type Subscription = (value: T) => unknown; /** @internal */ export type UnsubscribeHandle = () => void; type ProjectionFunc = (done: (...values: unknown[]) => void) => (...args: T) => void; /** @internal */ export interface RealmProjection { sources: Set; pulls: Set; sink: NodeKey; map: ProjectionFunc; } /** @internal */ export interface RealmProjectionSpec { sources: RealmNode[]; pulls?: RealmNode[]; sink: RealmNode; map: ProjectionFunc; } /** * A function which determines if two values are equal. * Implement custom comparators when the distinctUntilChanged operator needs to work on non-primitive objects. * @returns true if values should be considered equal. */ export interface Comparator { (current: T, next: T): boolean; } type NodesFromValuesRec = T extends [infer Head, ...infer Tail] ? NodesFromValuesRec : never]> : Acc; /** @internal */ export type NodesFromValues = T extends unknown[] ? NodesFromValuesRec : never; /** * A comparator function to determine if two values are equal. Used by distinctUntilChanged operator. */ export declare function defaultComparator(current: T, next: T): boolean; declare class SetMap { map: Map>; getOrCreate(key: NodeKey): Set; get(key: NodeKey): Set | undefined; use(key: NodeKey, cb: (value: Set) => unknown): void; delete(key: NodeKey): boolean; } /** * @internal */ export declare class RefCount { map: Map; constructor(map?: Map); clone(): RefCount; increment(key: NodeKey): void; decrement(key: NodeKey, ifZero: () => void): void; } /** @internal */ export type RealmGraph = SetMap; /** @internal */ export declare function realm(): { combine: { (nodes_0: RN): RN; (nodes_0: RN, nodes_1: RN): RN<[T1_1, T2]>; (nodes_0: RN, nodes_1: RN, nodes_2: RN): RN<[T1_2, T2_1, T3]>; (nodes_0: RN, nodes_1: RN, nodes_2: RN, nodes_3: RN): RN<[T1_3, T2_2, T3_1, T4]>; (nodes_0: RN, nodes_1: RN, nodes_2: RN, nodes_3: RN, nodes_4: RN): RN<[T1_4, T2_3, T3_2, T4_1, T5]>; (nodes_0: RN, nodes_1: RN, nodes_2: RN, nodes_3: RN, nodes_4: RN, nodes_5: RN): RN<[T1_5, T2_4, T3_3, T4_2, T5_1, T6]>; (nodes_0: RN, nodes_1: RN, nodes_2: RN, nodes_3: RN, nodes_4: RN, nodes_5: RN, nodes_6: RN): RN<[T1_6, T2_5, T3_4, T4_3, T5_2, T6_1, T7]>; (nodes_0: RN, nodes_1: RN, nodes_2: RN, nodes_3: RN, nodes_4: RN, nodes_5: RN, nodes_6: RN, nodes_7: RN): RN<[T1_7, T2_6, T3_5, T4_4, T5_3, T6_2, T7_1, T8]>; (nodes_0: RN, nodes_1: RN, nodes_2: RN, nodes_3: RN, nodes_4: RN, nodes_5: RN, nodes_6: RN, nodes_7: RN, nodes_8: RN): RN<[T1_8, T2_7, T3_6, T4_5, T5_4, T6_3, T7_2, T8_1, T9]>; (nodes_0: RN, nodes_1: RN, nodes_2: RN, nodes_3: RN, nodes_4: RN, nodes_5: RN, nodes_6: RN, nodes_7: RN, nodes_8: RN, nodes_9: RN): RN<[T1_9, T2_8, T3_7, T4_6, T5_5, T6_4, T7_3, T8_2, T9_1, T10]>; (nodes_0: RN, nodes_1: RN, nodes_2: RN, nodes_3: RN, nodes_4: RN, nodes_5: RN, nodes_6: RN, nodes_7: RN, nodes_8: RN, nodes_9: RN, nodes_10: RN): RN<[T1_10, T2_9, T3_8, T4_7, T5_6, T6_5, T7_4, T8_3, T9_2, T10_1, T11]>; (nodes_0: RN, nodes_1: RN, nodes_2: RN, nodes_3: RN, nodes_4: RN, nodes_5: RN, nodes_6: RN, nodes_7: RN, nodes_8: RN, nodes_9: RN, nodes_10: RN, nodes_11: RN, nodes_12: RN): RN<[T1_11, T2_10, T3_9, T4_8, T5_7, T6_6, T7_5, T8_4, T9_3, T10_2, T11_1, T12, T13]>; (nodes_0: RN, nodes_1: RN, nodes_2: RN, nodes_3: RN, nodes_4: RN, nodes_5: RN, nodes_6: RN, nodes_7: RN, nodes_8: RN, nodes_9: RN, nodes_10: RN, nodes_11: RN, nodes_12: RN, nodes_13: RN): RN<[T1_12, T2_11, T3_10, T4_9, T5_8, T6_7, T7_6, T8_5, T9_4, T10_3, T11_2, T12_1, T13_1, T14]>; (nodes_0: RN, nodes_1: RN, nodes_2: RN, nodes_3: RN, nodes_4: RN, nodes_5: RN, nodes_6: RN, nodes_7: RN, nodes_8: RN, nodes_9: RN, nodes_10: RN, nodes_11: RN, nodes_12: RN, nodes_13: RN, nodes_14: RN): RN<[T1_13, T2_12, T3_11, T4_10, T5_9, T6_8, T7_7, T8_6, T9_5, T10_4, T11_3, T12_2, T13_2, T14_1, T15]>; (nodes_0: RN, nodes_1: RN, nodes_2: RN, nodes_3: RN, nodes_4: RN, nodes_5: RN, nodes_6: RN, nodes_7: RN, nodes_8: RN, nodes_9: RN, nodes_10: RN, nodes_11: RN, nodes_12: RN, nodes_13: RN, nodes_14: RN, nodes_15: RN): RN<[T1_14, T2_13, T3_12, T4_11, T5_10, T6_9, T7_8, T8_7, T9_6, T10_5, T11_4, T12_3, T13_3, T14_2, T15_1, T16]>; }; connect: ({ sources, pulls, map, sink: { key: sink } }: RealmProjectionSpec) => void; derive: (source: RealmNode, initial: T_1) => RealmNode; getKeyValue: (key: string) => unknown; getValue: (node: RN) => T_2; getKeyValues: (keys: string[]) => unknown[]; label: (newLabels: Record>) => void; labels: Record>; link: (source: RealmNode, sink: RealmNode) => void; node: (value?: symbol | T_4, distinct?: boolean | Comparator) => RealmNode; o: { delayWithMicrotask: () => (source: RealmNode) => RealmNode; debounceTime: (delay: number) => (source: RealmNode) => RealmNode; filter: (predicate: (value: I_2) => boolean) => (source: RealmNode) => RealmNode; map: (mapFunction: (value: I_3) => O_2) => (source: RealmNode) => RealmNode; mapTo: (value: O_3) => (source: RealmNode) => RealmNode; onNext: (bufNode: RN) => (source: RealmNode) => RealmNode<[I_5, O_4]>; scan: (accumulator: (current: O_5, value: I_6) => O_5, seed: O_5) => (source: RealmNode) => RealmNode; throttleTime: (delay: number) => (source: RealmNode) => RealmNode; withLatestFrom: { (nodes_0: RN): (source: RN) => RN<[I_8, T1_15]>; (nodes_0: RN, nodes_1: RN): (source: RN) => RN<[I_9, T1_16, T2_14]>; (nodes_0: RN, nodes_1: RN, nodes_2: RN): (source: RN) => RN<[I_10, T1_17, T2_15, T3_13]>; (nodes_0: RN, nodes_1: RN, nodes_2: RN, nodes_3: RN): (source: RN) => RN<[I_11, T1_18, T2_16, T3_14, T4_12]>; (nodes_0: RN, nodes_1: RN, nodes_2: RN, nodes_3: RN, nodes_4: RN): (source: RN) => RN<[I_12, T1_19, T2_17, T3_15, T4_13, T5_11]>; (nodes_0: RN, nodes_1: RN, nodes_2: RN, nodes_3: RN, nodes_4: RN, nodes_5: RN): (source: RN) => RN<[I_13, T1_20, T2_18, T3_16, T4_14, T5_12, T6_10]>; (nodes_0: RN, nodes_1: RN, nodes_2: RN, nodes_3: RN, nodes_4: RN, nodes_5: RN, nodes_6: RN): (source: RN) => RN<[I_14, T1_21, T2_19, T3_17, T4_15, T5_13, T6_11, T7_9]>; (nodes_0: RN, nodes_1: RN, nodes_2: RN, nodes_3: RN, nodes_4: RN, nodes_5: RN, nodes_6: RN, nodes_7: RN): (source: RN) => RN<[I_15, T1_22, T2_20, T3_18, T4_16, T5_14, T6_12, T7_10, T8_8]>; }; once: () => (source: RealmNode) => RealmNode; passOnlyAfterNodeHasEmittedBefore: (starterNode: RN, durationNode: RN) => (source: RealmNode) => RealmNode; }; pipe: { (s: RealmNode): RealmNode; (s: RealmNode, o1: (source: RealmNode) => RealmNode): RealmNode; (s: RealmNode, o_0: (source: RealmNode) => RealmNode, o_1: (source: RealmNode) => RealmNode): RealmNode; (s: RealmNode, o_0: (source: RealmNode) => RealmNode, o_1: (source: RealmNode) => RealmNode, o_2: (source: RealmNode) => RealmNode): RealmNode; (s: RealmNode, o_0: (source: RealmNode) => RealmNode, o_1: (source: RealmNode) => RealmNode, o_2: (source: RealmNode) => RealmNode, o_3: (source: RealmNode) => RealmNode): RealmNode; (s: RealmNode, o_0: (source: RealmNode) => RealmNode, o_1: (source: RealmNode) => RealmNode, o_2: (source: RealmNode) => RealmNode, o_3: (source: RealmNode) => RealmNode, o_4: (source: RealmNode) => RealmNode): RealmNode; (s: RealmNode, o_0: (source: RealmNode) => RealmNode, o_1: (source: RealmNode) => RealmNode, o_2: (source: RealmNode) => RealmNode, o_3: (source: RealmNode) => RealmNode, o_4: (source: RealmNode) => RealmNode, o_5: (source: RealmNode) => RealmNode): RealmNode; (s: RealmNode, o_0: (source: RealmNode) => RealmNode, o_1: (source: RealmNode) => RealmNode, o_2: (source: RealmNode) => RealmNode, o_3: (source: RealmNode) => RealmNode, o_4: (source: RealmNode) => RealmNode, o_5: (source: RealmNode) => RealmNode, o_6: (source: RealmNode) => RealmNode): RealmNode; }; pub: { (args_0: RN, args_1: T1_23): void; (args_0: RN, args_1: T1_24, args_2: RN, args_3: T2_21): void; (args_0: RN, args_1: T1_25, args_2: RN, args_3: T2_22, args_4: RN, args_5: T3_19): void; (args_0: RN, args_1: T1_26, args_2: RN, args_3: T2_23, args_4: RN, args_5: T3_20, args_6: T4_17): void; }; pubIn: (values: Record) => void; pubKey: (key: string, value: unknown) => void; pubKeys: (values: Record) => void; resetSingletonSubs: () => void; singletonSub: ({ key }: RealmNode, subscription: Subscription | undefined) => UnsubscribeHandle; singletonSubKey: (key: string, subscription: Subscription | undefined) => UnsubscribeHandle; spread: >(source: RealmNode, initialValues: T_15) => NodesFromValues; sub: { (args_0: RN, args_1: Subscription): UnsubscribeHandle; (args_0: RN, args_1: RN, args_2: Subscription<[T1_28, T2_24]>): UnsubscribeHandle; (args_0: RN, args_1: RN, args_2: RN, args_3: Subscription<[T1_29, T2_25, T3_21]>): UnsubscribeHandle; }; subKey: (key: string, subscription: Subscription) => UnsubscribeHandle; subKeys: (keys: string[], subscription: Subscription) => UnsubscribeHandle; }; /** @internal */ export interface Realm extends ReturnType { } export {};