shelving
Version:
Toolkit for using data in JavaScript.
38 lines (37 loc) • 1.93 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 { ItemStore } from "../store/ItemStore.js";
import { QueryStore } from "../store/QueryStore.js";
/**
* Cache of `ItemStore` and `QueryStore` objects for a single collection.
* - Use `getItem(id)` to retrieve or create the `ItemStore` for a given id.
* - Use `getQuery(query)` to retrieve or create the `QueryStore` for a given query.
*/
export declare class CollectionCache<I extends Identifier, T extends Data> implements AsyncDisposable {
private readonly _items;
private readonly _queries;
readonly collection: Collection<string, I, T>;
readonly provider: DBProvider<I>;
readonly memory: MemoryDBProvider<I> | undefined;
constructor(collection: Collection<string, I, T>, provider: DBProvider<I>, memory?: MemoryDBProvider<I>);
/** Get (or create) the `ItemStore` for the given id. */
getItem(id: I): ItemStore<I, T>;
/** Get (or create) the `QueryStore` for the given query. */
getQuery(query: Query<Item<I, T>>): QueryStore<I, T>;
/** Refresh a specific item store. */
refreshItem(id: I, maxAge?: number): Promise<void>;
/** Refresh every cached item store. */
refreshItems(maxAge?: number): Promise<void>;
/** Refresh a specific query store. */
refreshQuery(query: Query<Item<I, T>>, maxAge?: number): Promise<void>;
/** Refresh every cached query store. */
refreshQueries(maxAge?: number): Promise<void>;
/** Refresh every cached store (items and queries). */
refreshAll(maxAge?: number): Promise<void>;
private _queryKey;
[Symbol.asyncDispose](): Promise<void>;
}