Skip to content

Commit c08ef93

Browse files
committed
[powersync] Turn factory into function
1 parent 2ae8c78 commit c08ef93

File tree

1 file changed

+54
-73
lines changed

1 file changed

+54
-73
lines changed

test/unit/persisters/sqlite.ts

Lines changed: 54 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import {ElectricDatabase, electrify} from 'electric-sql/wa-sqlite';
66
import {
77
QueryResult,
88
SQLWatchOptions,
9-
Schema,
109
WatchOnChangeEvent,
1110
} from '@journeyapps/powersync-sdk-common';
1211
import initWasm, {DB} from '@vlcn.io/crsqlite-wasm';
@@ -25,7 +24,11 @@ export type SqliteWasmDb = [sqlite3: any, db: any];
2524
const electricSchema = new DbSchema({}, []);
2625
type Electric = ElectricClient<typeof electricSchema>;
2726

28-
const powerSyncSchema = new Schema([]);
27+
type AbstractPowerSyncDatabase = {
28+
execute(sql: string, args: any[]): Promise<QueryResult>;
29+
close(): Promise<void>;
30+
onChange(options: SQLWatchOptions): AsyncIterable<WatchOnChangeEvent>;
31+
};
2932

3033
type Dump = {[name: string]: [sql: string, rows: {[column: string]: any}[]]};
3134

@@ -50,71 +53,54 @@ type SqliteVariant<Database> = [
5053

5154
const escapeId = (str: string) => `"${str.replace(/"/g, '""')}"`;
5255

53-
// Mock for PowerSync
54-
type AbstractPowerSyncDatabase = {
55-
execute(sql: string, args: any[]): Promise<QueryResult>;
56-
close(): Promise<void>;
57-
onChange(options: SQLWatchOptions): AsyncIterable<WatchOnChangeEvent>;
58-
};
59-
60-
class WaSqlitePowerSyncDatabaseOpenFactory {
61-
public dbFilename: string;
62-
public db: sqlite3.Database;
63-
64-
constructor({schema: _, dbFilename}: {schema: Schema; dbFilename: string}) {
65-
this.dbFilename = dbFilename;
66-
this.db = new sqlite3.Database(this.dbFilename);
67-
}
68-
69-
getInstance(): AbstractPowerSyncDatabase {
70-
const db = this.db;
71-
72-
const instance: AbstractPowerSyncDatabase = {
73-
execute: (sql, args) =>
74-
new Promise((resolve, reject) => {
75-
return db.all(sql, args, (error, rows: {[id: string]: any}[]) =>
76-
error
77-
? reject(error)
78-
: resolve({
79-
rows: {
80-
_array: rows.map((row: {[id: string]: any}) => ({
81-
...row,
82-
})),
83-
length: rows.length,
84-
item: () => null,
85-
},
86-
rowsAffected: 0,
87-
}),
88-
);
89-
}),
90-
close: () =>
91-
new Promise((resolve) => {
92-
db.close();
93-
resolve();
94-
}),
95-
onChange: ({signal} = {}) => ({
96-
async *[Symbol.asyncIterator]() {
97-
signal?.addEventListener('abort', () =>
98-
db.removeAllListeners('change'),
99-
);
100-
while (!signal?.aborted) {
101-
const nextChange = await new Promise<WatchOnChangeEvent>(
102-
(resolve) => {
103-
const observer = (_: any, _2: any, tableName: string) => {
104-
db.removeAllListeners('change');
105-
resolve({changedTables: [tableName]});
106-
};
107-
db.addListener('change', observer);
108-
},
109-
);
110-
yield nextChange;
111-
}
112-
},
56+
const getPowerSyncDatabase = (
57+
dbFilename: string,
58+
): AbstractPowerSyncDatabase => {
59+
const db = new sqlite3.Database(dbFilename);
60+
return {
61+
execute: (sql, args) =>
62+
new Promise((resolve, reject) => {
63+
return db.all(sql, args, (error, rows: {[id: string]: any}[]) =>
64+
error
65+
? reject(error)
66+
: resolve({
67+
rows: {
68+
_array: rows.map((row: {[id: string]: any}) => ({
69+
...row,
70+
})),
71+
length: rows.length,
72+
item: () => null,
73+
},
74+
rowsAffected: 0,
75+
}),
76+
);
77+
}),
78+
close: () =>
79+
new Promise((resolve) => {
80+
db.close();
81+
resolve();
11382
}),
114-
};
115-
return instance;
116-
}
117-
}
83+
onChange: ({signal} = {}) => ({
84+
async *[Symbol.asyncIterator]() {
85+
signal?.addEventListener('abort', () =>
86+
db.removeAllListeners('change'),
87+
);
88+
while (!signal?.aborted) {
89+
const nextChange = await new Promise<WatchOnChangeEvent>(
90+
(resolve) => {
91+
const observer = (_: any, _2: any, tableName: string) => {
92+
db.removeAllListeners('change');
93+
resolve({changedTables: [tableName]});
94+
};
95+
db.addListener('change', observer);
96+
},
97+
);
98+
yield nextChange;
99+
}
100+
},
101+
}),
102+
};
103+
};
118104

119105
export const VARIANTS: {[name: string]: SqliteVariant<any>} = {
120106
libSql: [
@@ -173,13 +159,8 @@ export const VARIANTS: {[name: string]: SqliteVariant<any>} = {
173159
1000,
174160
],
175161
powerSync: [
176-
async (): Promise<AbstractPowerSyncDatabase> => {
177-
const factory = new WaSqlitePowerSyncDatabaseOpenFactory({
178-
schema: powerSyncSchema,
179-
dbFilename: ':memory:',
180-
});
181-
return factory.getInstance();
182-
},
162+
async (): Promise<AbstractPowerSyncDatabase> =>
163+
getPowerSyncDatabase(':memory:'),
183164
['getPowerSync', (powerSync: AbstractPowerSyncDatabase) => powerSync],
184165
(
185166
store: Store,

0 commit comments

Comments
 (0)