shelving
Version:
Toolkit for using data in JavaScript.
64 lines (63 loc) • 4.18 kB
TypeScript
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>>;
}