/** * svelte-idb — Core Type Definitions * * All public and internal types for the library. * No runtime code — pure type declarations. */ /** Configuration for a secondary index on an object store. */ export interface IndexConfig { /** Property path(s) to index. */ keyPath: string | string[]; /** Enforce unique values. */ unique?: boolean; /** Index arrays of values (multiEntry). */ multiEntry?: boolean; } /** Configuration for a single object store. */ export interface StoreConfig { /** Property name used as the primary key. */ keyPath: string; /** Auto-generate numeric keys for new records. */ autoIncrement?: boolean; /** Secondary indexes for querying. */ indexes?: Record; } /** A schema is a map of store names to their configurations. */ export type DBSchema = Record; /** SSR behavior strategy. */ export type SSRStrategy = 'noop' | 'throw' | ((operation: string) => void); /** Configuration passed to `createDB()`. */ export interface DatabaseConfig { /** Database name (must be unique per origin). */ name: string; /** Schema version — increment on every schema change. */ version: number; /** Store definitions. */ stores: TSchema; /** SSR behavior: 'noop' (default), 'throw', or custom handler. */ ssr?: SSRStrategy; /** Migration function called during version upgrades. */ onUpgrade?: (db: IDBDatabase, oldVersion: number, newVersion: number, transaction: IDBTransaction) => void; /** Called when another tab requests a version upgrade. */ onBlocked?: () => void; /** Debug mode — logs all operations to console. */ debug?: boolean; } /** The type of mutation that occurred. */ export type ChangeType = 'add' | 'put' | 'delete' | 'clear' | 'batch'; /** Event emitted when a store is mutated. */ export interface ChangeEvent { type: ChangeType; key?: IDBValidKey; } /** A function that listens for change events. */ export type ChangeSubscriber = (event: ChangeEvent) => void; export interface IQueryBuilder { equals(value: IDBValidKey): IQueryBuilder; between(lower: IDBValidKey, upper: IDBValidKey, lowerOpen?: boolean, upperOpen?: boolean): IQueryBuilder; above(value: IDBValidKey): IQueryBuilder; aboveOrEqual(value: IDBValidKey): IQueryBuilder; below(value: IDBValidKey): IQueryBuilder; belowOrEqual(value: IDBValidKey): IQueryBuilder; toArray(): Promise; first(): Promise; count(): Promise; } /** Public interface for a typed object store. */ export interface IStore { readonly storeName: string; add(value: T): Promise; put(value: T): Promise; get(key: IDBValidKey): Promise; getAll(): Promise; getAllFromIndex(indexName: string, query?: IDBValidKey | IDBKeyRange, count?: number): Promise; where(indexName: string): IQueryBuilder; delete(key: IDBValidKey): Promise; clear(): Promise; count(): Promise; } /** The returned database object — stores are accessed as properties. */ export type Database = { [K in keyof TSchema]: IStore>; } & { /** Access the raw IDBDatabase promise. */ getRawDB(): Promise; /** Close the database connection. */ close(): Promise; }; /** Record with a guaranteed key (after insert). */ export type WithId = T & Required>; /** Record without the key field (before insert). */ export type WithoutId = Omit; /** The shape returned by reactive query functions. */ export interface ILiveQuery { /** The current query result (reactive via $state). */ readonly current: T; /** Whether the query is currently executing. */ readonly loading: boolean; /** The last error, if any. */ readonly error: Error | null; /** Manually trigger a re-query. */ refresh(): Promise; /** Stop observing changes (cleanup). */ destroy(): void; }