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'; // === Data Models == export type ReadModel< M extends Models, CN extends CollectionNameFromModels, > = Unalias>; export type WriteModel< M extends Models, CN extends CollectionNameFromModels, > = Unalias>; // === API Options === export interface DBOptions< M extends Models = 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< M extends Models = Models, CN extends CollectionNameFromModels = CollectionNameFromModels, > = Partial> | EntityUpdater; export type EntityUpdater< M extends Models, 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< M extends Models = Models, Q extends SchemaQuery = SchemaQuery, > = (results: FetchResult, queryKey?: string) => void; export type OnCommitCallback = (changes: DBChanges) => Promise; export type SchemaChangeListener = ( change: SchemaChange ) => void | Promise;