Skip to content

Commit d6d9c10

Browse files
committed
Dropped Object.assign usage in favour of extending the classes.
1 parent 796eccc commit d6d9c10

File tree

2 files changed

+56
-48
lines changed
  • packages
    • drizzle-driver/src/sqlite
    • kysely-driver/src/sqlite

2 files changed

+56
-48
lines changed

packages/drizzle-driver/src/sqlite/db.ts

Lines changed: 40 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -23,48 +23,55 @@ import { PowerSyncSQLiteSession, PowerSyncSQLiteTransactionConfig } from './sqli
2323

2424
export 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

3872
export 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
}

packages/kysely-driver/src/sqlite/db.ts

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -15,24 +15,25 @@ export type PowerSyncKyselyOptions = Omit<KyselyConfig, 'dialect'> & {
1515
dialect?: Dialect;
1616
};
1717

18-
export type PowerSyncKyselyDatabase<T> = Kysely<T> & {
19-
watch: <K>(query: CompilableQuery<K>, handler: CompilableQueryWatchHandler<K>, options?: SQLWatchOptions) => void;
20-
};
18+
export class PowerSyncKyselyDatabase<T> extends Kysely<T> {
19+
private db: AbstractPowerSyncDatabase;
20+
21+
constructor(db: AbstractPowerSyncDatabase, options?: PowerSyncKyselyOptions) {
22+
super({
23+
dialect: new PowerSyncDialect({ db }),
24+
...options
25+
});
26+
this.db = db;
27+
}
28+
29+
watch<K>(query: CompilableQuery<K>, handler: CompilableQueryWatchHandler<K>, options?: SQLWatchOptions): void {
30+
compilableQueryWatch(this.db, query, handler, options);
31+
}
32+
}
2133

2234
export const wrapPowerSyncWithKysely = <T>(
2335
db: AbstractPowerSyncDatabase,
2436
options?: PowerSyncKyselyOptions
2537
): PowerSyncKyselyDatabase<T> => {
26-
const kysely = new Kysely<T>({
27-
dialect: new PowerSyncDialect({
28-
db
29-
}),
30-
...options
31-
});
32-
33-
return Object.assign(kysely, {
34-
watch: <K>(query: CompilableQuery<K>, handler: CompilableQueryWatchHandler<K>, options?: SQLWatchOptions) => {
35-
compilableQueryWatch(db, query, handler, options);
36-
}
37-
});
38+
return new PowerSyncKyselyDatabase<T>(db, options);
3839
};

0 commit comments

Comments
 (0)