UNPKG

svelte-map-reduce-store

Version:

```typescript import { MapReduce } from 'svelte-map-reduce-store';

81 lines (80 loc) 2.74 kB
import type { SortCmd } from './fast-sort'; import * as dic from './dic'; export declare type BaseT<IdType> = { _id: IdType; }; export declare type BaseF<T> = { list: T[]; }; export declare type MapReduceProps<F extends BaseF<any>, OrderArgs extends any[], Index> = { format: () => F; index: (_id: F['list'][number]['_id']) => Index; initialize?: (doc: F['list'][number]) => void; reduce: (o: F, doc: F['list'][number]) => void; order: (o: F, utils: typeof OrderUtils, ...args: OrderArgs) => void; start?: (set: (value: F) => void) => void | (() => void); }; export declare const OrderUtils: { sort: typeof dic.sort; group_sort: typeof dic.group_sort; }; declare type Validator<A extends any[], F extends BaseF<any>> = (o: F['list'][number], ...args: A) => boolean; declare type LookupProps<F, OrderArgs extends any[]> = { format: () => F; subscribe: (set: (value: F) => void, lookup: LookupProps<F, OrderArgs>) => void; order: (o: F, { sort, group_sort }: typeof OrderUtils, ...args: OrderArgs) => void; }; export declare function lookup<F, OrderArgs extends any[]>( o: LookupProps<F, OrderArgs> ): { sort: (...sa: OrderArgs) => void; format: () => F; data: F; subscribe: ( this: void, run: import('svelte/store').Subscriber<F>, invalidate?: (value?: F) => void ) => import('svelte/store').Unsubscriber; }; export declare function MapReduce<F extends BaseF<any>, OrderArgs extends any[], Index>({ format, index, initialize, reduce, order, start }: MapReduceProps<F, OrderArgs, Index>): { deploy: (json: any, init?: (doc: F['list'][number]) => void) => void; clear: () => void; add: (docs: F['list'], init?: (doc: F['list'][number]) => void) => void; del: (ids: F['list'][number]['_id'][]) => void; find: (_id: F['list'][number]['_id']) => F['list'][number]; index: (_id: F['list'][number]['_id']) => Index; reduce: <EMIT>(ids: F['list'][number]['_id'][], emit: (o: EMIT) => void) => SortCmd<F['list'][number] & EMIT>; filter: <A extends any[]>( validator: Validator<A, F>, key?: string ) => ( ...filter_args: A ) => { reduce: <EMIT>(ids: F['list'][number]['_id'][], emit: (o: EMIT) => void) => SortCmd<F['list'][number] & EMIT>; filter: any; sort: (...sa: OrderArgs) => void; data: F; subscribe: ( this: void, run: import('svelte/store').Subscriber<F>, invalidate?: (value?: F) => void ) => import('svelte/store').Unsubscriber; validator: Validator<A, F>; }; sort: (...sa: OrderArgs) => void; format: () => F; data: F; subscribe: ( this: void, run: import('svelte/store').Subscriber<F>, invalidate?: (value?: F) => void ) => import('svelte/store').Unsubscriber; }; export {};