shelving
Version:
Toolkit for using data in JavaScript.
68 lines (67 loc) • 4.5 kB
TypeScript
import { DeferredSequence } from "../../sequence/DeferredSequence.js";
import type { Data } from "../../util/data.js";
import type { Identifier, Item, Items, ItemsSequence, OptionalItem, OptionalItemSequence } from "../../util/item.js";
import type { Query } from "../../util/query.js";
import type { Updates } from "../../util/update.js";
import type { Collection } from "../collection/Collection.js";
import { DBProvider } from "./DBProvider.js";
/**
* Fast in-memory store for data.
* - Extremely fast (ideal for caching!), but does not persist data after the browser window is closed.
* - `getItem()` etc return the exact same instance of an object that's passed into `setItem()`
*/
export declare class MemoryDBProvider<I extends Identifier = Identifier, T extends Data = Data> extends DBProvider<I, T> {
/** List of tables in `{ name: MemoryTable }` format. */
private _tables;
/** Get a table for a collection. */
getTable<II extends I, TT extends T>(collection: Collection<string, II, TT>): MemoryTable<II, TT>;
getItem<II extends I, TT extends T>(collection: Collection<string, II, TT>, id: II): Promise<OptionalItem<II, TT>>;
getItemSequence<II extends I, TT extends T>(collection: Collection<string, II, TT>, id: II): OptionalItemSequence<II, TT>;
addItem<II extends I, TT extends T>(collection: Collection<string, II, TT>, data: TT): Promise<II>;
setItem<II extends I, TT extends T>(collection: Collection<string, II, TT>, id: II, data: TT): Promise<void>;
updateItem<II extends I, TT extends T>(collection: Collection<string, II, TT>, id: II, updates: Updates<Item<II, TT>>): Promise<void>;
deleteItem<II extends I, TT extends T>(collection: Collection<string, II, TT>, id: II): Promise<void>;
countQuery<II extends I, TT extends T>(collection: Collection<string, II, TT>, query?: Query<Item<II, TT>>): Promise<number>;
getQuery<II extends I, TT extends T>(collection: Collection<string, II, TT>, query?: Query<Item<II, TT>>): Promise<Items<II, TT>>;
getQuerySequence<II extends I, TT extends T>(collection: Collection<string, II, TT>, query?: Query<Item<II, TT>>): ItemsSequence<II, TT>;
setQuery<II extends I, TT extends T>(collection: Collection<string, II, TT>, query: Query<Item<II, TT>>, data: TT): Promise<void>;
updateQuery<II extends I, TT extends T>(collection: Collection<string, II, TT>, query: Query<Item<II, TT>>, updates: Updates<TT>): Promise<void>;
deleteQuery<II extends I, TT extends T>(collection: Collection<string, II, TT>, query: Query<Item<II, TT>>): Promise<void>;
setItems<II extends I, TT extends T>(collection: Collection<string, II, TT>, items: Items<II, TT>): void;
}
/** An individual table of data. */
export declare class MemoryTable<I extends Identifier, T extends Data> {
/** Actual data in this table. */
protected readonly _data: Map<I, Item<I, T>>;
/** Deferred sequence of next values. */
readonly next: DeferredSequence<void, void, void>;
readonly collection: Collection<string, I, T>;
constructor(collection: Collection<string, I, T>);
getItem(id: I): OptionalItem<I, T>;
/**
* Subscribe to all changes for this item key.
* - Emits the current item immediately, including `undefined` when absent.
* - Wakes on every table change, but only yields when this item's value actually changed.
*/
getItemSequence(id: I): AsyncIterable<OptionalItem<I, T>>;
/** Generate a unique ID for a new item in this table. */
generateUniqueID(): I;
addItem(data: T): I;
setItem(id: I, data: Item<I, T> | T): void;
setItemSequence(id: I, sequence: AsyncIterable<OptionalItem<I, T>>): AsyncIterable<OptionalItem<I, T>>;
updateItem(id: I, updates: Updates<Item<I, T>>): void;
deleteItem(id: I): void;
countQuery(query?: Query<Item<I, T>>): number;
getQuery(query?: Query<Item<I, T>>): Items<I, T>;
/**
* Subscribe to the live result of a query.
* - Emits the current query result immediately, even if empty.
* - Wakes on every table change, but only yields when the computed query result changed.
*/
getQuerySequence(query?: Query<Item<I, T>>): AsyncIterable<Items<I, T>>;
setQuery(query: Query<Item<I, T>>, data: T): void;
updateQuery(query: Query<Item<I, T>>, updates: Updates<T>): void;
deleteQuery(query: Query<Item<I, T>>): void;
setItems(items: Items<I, T>): void;
setItemsSequence(sequence: AsyncIterable<Items<I, T>>): AsyncIterable<Items<I, T>>;
}