import type { ImmutableArray } from "../util/array.js"; import type { Database, DataKey } from "../util/data.js"; import type { Identifier } from "../util/item.js"; import { type Nullish } from "../util/null.js"; import type { ItemQuery } from "../util/query.js"; import type { Updates } from "../util/update.js"; import type { AsyncProvider, Provider } from "./Provider.js"; /** A change to a database. */ export interface Change { readonly action: string; } /** A change to a database collection. */ export interface CollectionChange> extends Change { readonly collection: K; } /** Add an item to a database collection. */ export interface ItemAddChange> extends CollectionChange { readonly action: "add"; readonly id?: never; readonly query?: never; readonly data: T[K]; } /** Change an item in a database collection. */ export interface ItemChange> extends CollectionChange { readonly id: I; readonly query?: never; } /** Set an item in a database collection. */ export interface ItemSetChange> extends ItemChange { readonly action: "set"; readonly data: T[K]; } /** Update an item in a database collection. */ export interface ItemUpdateChange> extends ItemChange { readonly action: "update"; readonly updates: Updates; } /** Delete an item in a database collection. */ export interface ItemDeleteChange> extends ItemChange { readonly action: "delete"; } /** Change multiple items in a database collection. */ export interface QueryChange> extends CollectionChange { readonly query: ItemQuery; readonly id?: never; } /** Set multiple items in a database collection. */ export interface QuerySetChange> extends QueryChange { readonly action: "set"; readonly data: T[K]; } /** Update multiple items in a database collection. */ export interface QueryUpdateChange> extends QueryChange { readonly action: "update"; readonly updates: Updates; } /** Delete multiple items in a database collection. */ export interface QueryDeleteChange> extends QueryChange { readonly action: "delete"; } /** Write an item in a set of collection. */ export type DatabaseItemChange = ItemSetChange> | ItemUpdateChange> | ItemDeleteChange>; /** Write multiple item in a set of collection. */ export type DatabaseQueryChange = QuerySetChange> | QueryUpdateChange> | QueryDeleteChange>; /** Write an item or multiple items in a set of collection. */ export type DatabaseChange = ItemAddChange> | DatabaseItemChange | DatabaseQueryChange; /** Write an item or multiple items in a set of collection. */ export type DatabaseChanges = ImmutableArray>; /** Write a single change to a synchronous provider and return an array of the changes that were written. */ export declare function writeChange(provider: Provider, change: DatabaseChange): DatabaseChange; /** Write a set of changes to a synchronous provider. */ export declare function writeChanges(provider: Provider, ...changes: Nullish>[]): DatabaseChanges; /** Write a single change to an asynchronous provider and return the change that was written. */ export declare function writeAsyncChange(provider: AsyncProvider, change: DatabaseChange): Promise>; /** Write a set of changes to an asynchronous provider. */ export declare function writeAsyncChanges(provider: AsyncProvider, ...changes: Nullish>[]): Promise>;