import { DBTransaction } from '../db-transaction.js'; import { DBSchema } from '../db.js'; import { IVM } from '../ivm/index.js'; import { CollectionNameFromModels, Decoded, Models, SchemaChange, WriteDecoded } from '../schema/index.js'; import { DBChanges, EntitySyncStore, FetchResult, KVStore, SchemaQuery } from '../types.js'; import { Unalias } from '../utils/types.js'; export type ReadModel, CN extends CollectionNameFromModels> = Unalias>; export type WriteModel, CN extends CollectionNameFromModels> = Unalias>; export interface DBOptions = Models, E extends EntitySyncStore = EntitySyncStore> { kv?: KVStore; clientId?: string; entityStore?: E; schema?: DBSchema; ivm?: IVM; variables?: Record; experimental?: {}; } export type FetchOptions = { skipRules?: boolean; }; export type UpdatePayload = Models, CN extends CollectionNameFromModels = CollectionNameFromModels> = Partial> | EntityUpdater; export type EntityUpdater, CN extends CollectionNameFromModels> = (entity: ReadModel) => void | Promise; export type ClearOptions = { full?: boolean; }; export type TransactCallback, Output> = (tx: DBTransaction) => Promise; export type TransactOptions = EntityWriteOptions; export type EntityWriteOptions = { skipRules: boolean; }; export type SubscriptionResultsCallback = Models, Q extends SchemaQuery = SchemaQuery> = (results: FetchResult, queryKey?: string) => void; export type OnCommitCallback = (changes: DBChanges) => Promise; export type SchemaChangeListener = (change: SchemaChange) => void | Promise;