shelving
Version:
Toolkit for using data in JavaScript.
39 lines (38 loc) • 2.64 kB
TypeScript
import type { Data } from "../../util/data.js";
import type { Identifier, Item } from "../../util/item.js";
import type { Query } from "../../util/query.js";
import type { Collection } from "../collection/Collection.js";
import type { DBProvider } from "../provider/DBProvider.js";
import type { MemoryDBProvider } from "../provider/MemoryDBProvider.js";
import type { ItemStore } from "../store/ItemStore.js";
import type { QueryStore } from "../store/QueryStore.js";
import { CollectionCache } from "./CollectionCache.js";
/**
* Cache of `CollectionCache` objects for multiple collections.
* - Use `get(collection)` to retrieve or create the `CollectionCache` for a given collection,
* then `getItem(id)` / `getQuery(query)` on that to get a specific store.
*/
export declare class DBCache<I extends Identifier = Identifier, T extends Data = Data> implements AsyncDisposable {
private readonly _collections;
readonly provider: DBProvider<I, T>;
readonly memory: MemoryDBProvider<I, T> | undefined;
constructor(provider: DBProvider<I, T>);
private _get;
/** Get (or create) the `CollectionCache` for the given collection. */
get<II extends I, TT extends T>(collection: Collection<string, II, TT>): CollectionCache<II, TT>;
/** Get (or create) an `ItemStore` for a collection/id in one hop. */
getItem<II extends I, TT extends T>(collection: Collection<string, II, TT>, id: II): ItemStore<II, TT>;
/** Get (or create) a `QueryStore` for a collection/query in one hop. */
getQuery<II extends I, TT extends T>(collection: Collection<string, II, TT>, query: Query<Item<II, TT>>): QueryStore<II, TT>;
/** Refresh a specific item store for a collection. */
refreshItem<II extends I, TT extends T>(collection: Collection<string, II, TT>, id: II, maxAge?: number): Promise<void>;
/** Refresh every cached item store for a collection. */
refreshItems<II extends I, TT extends T>(collection: Collection<string, II, TT>, maxAge?: number): Promise<void>;
/** Refresh a specific query store for a collection. */
refreshQuery<II extends I, TT extends T>(collection: Collection<string, II, TT>, query: Query<Item<II, TT>>, maxAge?: number): Promise<void>;
/** Refresh every cached query store for a collection. */
refreshQueries<II extends I, TT extends T>(collection: Collection<string, II, TT>, maxAge?: number): Promise<void>;
/** Refresh every cached store (items and queries) for a collection. */
refreshAll<II extends I, TT extends T>(collection: Collection<string, II, TT>, maxAge?: number): Promise<void>;
[Symbol.asyncDispose](): Promise<void>;
}