shelving
Version:
Toolkit for using data in JavaScript.
32 lines (31 loc) • 1.99 kB
TypeScript
import type { MutableArray } from "../../util/array.js";
import type { Data } from "../../util/data.js";
import type { Identifier, Item } 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 { ThroughDBProvider } from "./ThroughDBProvider.js";
/** A structured log entry for a database change. */
export type DBChange<I extends Identifier> = {
readonly action: "add" | "set" | "update" | "delete";
readonly collection: string;
readonly id?: I | undefined;
readonly query?: unknown;
readonly data?: unknown;
readonly updates?: unknown;
};
/**
* Database provider that keeps a log of any written changes to its `.changes` property.
* - This is useful if you want to hook into a database to build out audit logging functionality.
*/
export declare class ChangesDBProvider<I extends Identifier, T extends Data> extends ThroughDBProvider<I, T> {
get changes(): ReadonlyArray<DBChange<I>>;
readonly _changes: MutableArray<DBChange<I>>;
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>;
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>;
}