@@ -23,48 +23,55 @@ import { PowerSyncSQLiteSession, PowerSyncSQLiteTransactionConfig } from './sqli
2323
2424export type DrizzleQuery < T > = { toSQL ( ) : Query ; execute ( ) : Promise < T > } ;
2525
26- export interface PowerSyncSQLiteDatabase < TSchema extends Record < string , unknown > = Record < string , never > >
27- extends BaseSQLiteDatabase < 'async' , QueryResult , TSchema > {
28- transaction < T > (
26+ export class PowerSyncSQLiteDatabase <
27+ TSchema extends Record < string , unknown > = Record < string , never >
28+ > extends BaseSQLiteDatabase < 'async' , QueryResult , TSchema > {
29+ private db : AbstractPowerSyncDatabase ;
30+
31+ constructor ( db : AbstractPowerSyncDatabase , config : DrizzleConfig < TSchema > = { } ) {
32+ const dialect = new SQLiteAsyncDialect ( { casing : config . casing } ) ;
33+ let logger ;
34+ if ( config . logger === true ) {
35+ logger = new DefaultLogger ( ) ;
36+ } else if ( config . logger !== false ) {
37+ logger = config . logger ;
38+ }
39+
40+ let schema : RelationalSchemaConfig < TablesRelationalConfig > | undefined ;
41+ if ( config . schema ) {
42+ const tablesConfig = extractTablesRelationalConfig ( config . schema , createTableRelationsHelpers ) ;
43+ schema = {
44+ fullSchema : config . schema ,
45+ schema : tablesConfig . tables ,
46+ tableNamesMap : tablesConfig . tableNamesMap
47+ } ;
48+ }
49+
50+ const session = new PowerSyncSQLiteSession ( db , dialect , schema , {
51+ logger
52+ } ) ;
53+
54+ super ( 'async' , dialect , session as any , schema as any ) ;
55+ this . db = db ;
56+ }
57+
58+ override transaction < T > (
2959 transaction : (
3060 tx : SQLiteTransaction < 'async' , QueryResult , TSchema , ExtractTablesWithRelations < TSchema > >
3161 ) => Promise < T > ,
3262 config ?: PowerSyncSQLiteTransactionConfig
33- ) : Promise < T > ;
63+ ) : Promise < T > {
64+ return super . transaction ( transaction , config ) ;
65+ }
3466
35- watch < T > ( query : DrizzleQuery < T > , handler ?: CompilableQueryWatchHandler < T > , options ?: SQLWatchOptions ) : void ;
67+ watch < T > ( query : DrizzleQuery < T > , handler : CompilableQueryWatchHandler < T > , options ?: SQLWatchOptions ) : void {
68+ compilableQueryWatch ( this . db , toCompilableQuery ( query ) , handler , options ) ;
69+ }
3670}
3771
3872export function wrapPowerSyncWithDrizzle < TSchema extends Record < string , unknown > = Record < string , never > > (
3973 db : AbstractPowerSyncDatabase ,
4074 config : DrizzleConfig < TSchema > = { }
4175) : PowerSyncSQLiteDatabase < TSchema > {
42- const dialect = new SQLiteAsyncDialect ( { casing : config . casing } ) ;
43- let logger ;
44- if ( config . logger === true ) {
45- logger = new DefaultLogger ( ) ;
46- } else if ( config . logger !== false ) {
47- logger = config . logger ;
48- }
49-
50- let schema : RelationalSchemaConfig < TablesRelationalConfig > | undefined ;
51- if ( config . schema ) {
52- const tablesConfig = extractTablesRelationalConfig ( config . schema , createTableRelationsHelpers ) ;
53- schema = {
54- fullSchema : config . schema ,
55- schema : tablesConfig . tables ,
56- tableNamesMap : tablesConfig . tableNamesMap
57- } ;
58- }
59-
60- const session = new PowerSyncSQLiteSession ( db , dialect , schema , {
61- logger
62- } ) ;
63-
64- const baseDatabase = new BaseSQLiteDatabase ( 'async' , dialect , session , schema ) as PowerSyncSQLiteDatabase < TSchema > ;
65- return Object . assign ( baseDatabase , {
66- watch : < T > ( query : DrizzleQuery < T > , handler : CompilableQueryWatchHandler < T > , options ?: SQLWatchOptions ) => {
67- compilableQueryWatch ( db , toCompilableQuery ( query ) , handler , options ) ;
68- }
69- } ) ;
76+ return new PowerSyncSQLiteDatabase < TSchema > ( db , config ) ;
7077}
0 commit comments