import { QueryResult, AbstractPowerSyncDatabase, CompilableQueryWatchHandler, SQLWatchOptions, CompilableQuery, TableV2Options, Schema, SchemaTableType, Table, BaseColumnType } from '@powersync/common'; import { Query, Relations, Casing, InferSelectModel } from 'drizzle-orm'; import { ExtractTablesWithRelations } from 'drizzle-orm/relations'; import { SQLiteTransaction, SQLiteTableWithColumns } from 'drizzle-orm/sqlite-core'; import { BaseSQLiteDatabase } from 'drizzle-orm/sqlite-core/db'; import { DrizzleConfig } from 'drizzle-orm/utils'; import { SQLiteTransactionConfig } from 'drizzle-orm/sqlite-core/session'; import { CasingCache } from 'drizzle-orm/casing'; type PowerSyncSQLiteTransactionConfig = SQLiteTransactionConfig & { accessMode?: 'read only' | 'read write'; }; type DrizzleQuery = { toSQL(): Query; execute(): Promise; }; declare class PowerSyncSQLiteDatabase = Record> extends BaseSQLiteDatabase<'async', QueryResult, TSchema> { private db; constructor(db: AbstractPowerSyncDatabase, config?: DrizzleConfig); transaction(transaction: (tx: SQLiteTransaction<'async', QueryResult, TSchema, ExtractTablesWithRelations>) => Promise, config?: PowerSyncSQLiteTransactionConfig): Promise; watch(query: DrizzleQuery, handler: CompilableQueryWatchHandler, options?: SQLWatchOptions): void; } declare function wrapPowerSyncWithDrizzle = Record>(db: AbstractPowerSyncDatabase, config?: DrizzleConfig): PowerSyncSQLiteDatabase; /** * Converts a Drizzle query into a `CompilableQuery` compatible with PowerSync hooks. * It allows you to seamlessly integrate Drizzle queries with PowerSync for * reactive data fetching and real-time updates. * * @example * import { toCompilableQuery } from '@powersync/drizzle-driver'; * * const query = db.select().from(lists); * const { data: listRecords, isLoading } = useQuery(toCompilableQuery(query)); * * return ( * * {listRecords.map((l) => ( * {JSON.stringify(l)} * ))} * * ); * * @public */ declare function toCompilableQuery(query: { execute: () => Promise; toSQL: () => Query; }): CompilableQuery; type ExtractPowerSyncColumns> = { [K in keyof InferSelectModel as K extends 'id' ? never : K]: BaseColumnType[K]>; }; type Expand = T extends infer O ? { [K in keyof O]: O[K]; } : never; declare function toPowerSyncTable>(table: T, options?: Omit & { casingCache?: CasingCache; }): Table>>; type DrizzleTablePowerSyncOptions = Omit; type DrizzleTableWithPowerSyncOptions = { tableDefinition: SQLiteTableWithColumns; options?: DrizzleTablePowerSyncOptions; }; type TableName = T extends SQLiteTableWithColumns ? T['_']['name'] : T extends DrizzleTableWithPowerSyncOptions ? T['tableDefinition']['_']['name'] : never; type TablesFromSchemaEntries = { [K in keyof T as T[K] extends Relations ? never : T[K] extends SQLiteTableWithColumns | DrizzleTableWithPowerSyncOptions ? TableName : never]: T[K] extends SQLiteTableWithColumns ? Table>> : T[K] extends DrizzleTableWithPowerSyncOptions ? Table>> : never; }; type DrizzleAppSchemaOptions = { casing?: Casing; }; declare class DrizzleAppSchema | Relations | DrizzleTableWithPowerSyncOptions>> extends Schema { constructor(drizzleSchema: T, options?: DrizzleAppSchemaOptions); readonly types: SchemaTableType>>; } export { DrizzleAppSchema, PowerSyncSQLiteDatabase, toCompilableQuery, toPowerSyncTable, wrapPowerSyncWithDrizzle }; export type { DrizzleAppSchemaOptions, DrizzleQuery, DrizzleTablePowerSyncOptions, DrizzleTableWithPowerSyncOptions, Expand, ExtractPowerSyncColumns, TableName, TablesFromSchemaEntries };