UNPKG

shelving

Version:

Toolkit for using data in JavaScript.

64 lines (63 loc) 4.18 kB
import { DeferredSequence } from "../sequence/DeferredSequence.js"; import type { Data, DataKey, Database } from "../util/data.js"; import type { Item, ItemQuery, Items, OptionalItem } from "../util/item.js"; import type { Updates } from "../util/update.js"; import { Provider } from "./Provider.js"; /** * Fast in-memory store for data. * - Extremely fast (ideal for caching!), but does not persist data after the browser window is closed. * - `get()` etc return the exact same instance of an object that's passed into `set()` */ export declare class MemoryProvider<T extends Database> extends Provider<T> { /** List of tables in `{ collection: Table }` format. */ private _tables; /** Get a table for a collection. */ getTable<K extends DataKey<T>>(collection: K): MemoryTable<T[K]>; getItemTime<K extends DataKey<T>>(collection: K, id: string): number | undefined; getItem<K extends DataKey<T>>(collection: K, id: string): OptionalItem<T[K]>; getItemSequence<K extends DataKey<T>>(collection: K, id: string): AsyncIterable<OptionalItem<T[K]>>; getCachedItemSequence<K extends DataKey<T>>(collection: K, id: string): AsyncIterable<OptionalItem<T[K]>>; addItem<K extends DataKey<T>>(collection: K, data: T[K]): string; setItem<K extends DataKey<T>>(collection: K, id: string, data: T[K]): void; setItemSequence<K extends DataKey<T>>(collection: K, id: string, sequence: AsyncIterable<OptionalItem<T[K]>>): AsyncIterable<OptionalItem<T[K]>>; updateItem<K extends DataKey<T>>(collection: K, id: string, updates: Updates<T[K]>): void; deleteItem<K extends DataKey<T>>(collection: K, id: string): void; getQueryTime<K extends DataKey<T>>(collection: K, query?: ItemQuery<T[K]>): number | undefined; countQuery<K extends DataKey<T>>(collection: K, query?: ItemQuery<T[K]>): number; getQuery<K extends DataKey<T>>(collection: K, query?: ItemQuery<T[K]>): Items<T[K]>; getQuerySequence<K extends DataKey<T>>(collection: K, query?: ItemQuery<T[K]>): AsyncIterable<Items<T[K]>>; getCachedQuerySequence<K extends DataKey<T>>(collection: K, query?: ItemQuery<T[K]>): AsyncIterable<Items<T[K]>>; setQuery<K extends DataKey<T>>(collection: K, query: ItemQuery<T[K]>, data: T[K]): void; updateQuery<K extends DataKey<T>>(collection: K, query: ItemQuery<T[K]>, updates: Updates<T[K]>): void; deleteQuery<K extends DataKey<T>>(collection: K, query: ItemQuery<T[K]>): void; setItems<K extends DataKey<T>>(collection: K, items: Items<T[K]>, query?: ItemQuery<T[K]>): void; setItemsSequence<K extends DataKey<T>>(collection: K, sequence: AsyncIterable<Items<T[K]>>, query?: ItemQuery<T[K]>): AsyncIterable<Items<T[K]>>; } /** An individual table of data. */ export declare class MemoryTable<T extends Data> { /** Actual data in this table. */ protected readonly _data: Map<string, Item<T>>; /** Times data was last updated. */ protected readonly _times: Map<string, number>; /** Deferred sequence of next values. */ readonly next: DeferredSequence<void>; getItemTime(id: string): number | undefined; getItem(id: string): OptionalItem<T>; getItemSequence(id: string): AsyncIterable<OptionalItem<T>>; getCachedItemSequence(id: string): AsyncIterable<OptionalItem<T>>; addItem(data: T): string; setItem(id: string, data: Item<T> | T): void; setItemSequence(id: string, sequence: AsyncIterable<OptionalItem<T>>): AsyncIterable<OptionalItem<T>>; updateItem(id: string, updates: Updates<T>): void; deleteItem(id: string): void; getQueryTime(query?: ItemQuery<T>): number | undefined; countQuery(query?: ItemQuery<T>): number; getQuery(query?: ItemQuery<T>): Items<T>; getQuerySequence(query?: ItemQuery<T>): AsyncIterable<Items<T>>; getCachedQuerySequence(query?: ItemQuery<T>): AsyncIterable<Items<T>>; setQuery(query: ItemQuery<T>, data: T): void; updateQuery(query: ItemQuery<T>, updates: Updates<T>): void; deleteQuery(query: ItemQuery<T>): void; setItems(items: Items<T>, query?: ItemQuery<T>): void; setItemsSequence(sequence: AsyncIterable<Items<T>>, query?: ItemQuery<T>): AsyncIterable<Items<T>>; }