@powersync/op-sqlite 0.0.0-dev-20260202162549 → 0.0.0-dev-20260216124709

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/lib/commonjs/db/OPSQLiteConnection.js +106 -0
  2. package/lib/commonjs/db/OPSQLiteConnection.js.map +1 -0
  3. package/lib/commonjs/db/OPSqliteAdapter.js +261 -0
  4. package/lib/commonjs/db/OPSqliteAdapter.js.map +1 -0
  5. package/lib/commonjs/db/OPSqliteDBOpenFactory.js +26 -0
  6. package/lib/commonjs/db/OPSqliteDBOpenFactory.js.map +1 -0
  7. package/lib/commonjs/db/SqliteOptions.js +41 -0
  8. package/lib/commonjs/db/SqliteOptions.js.map +1 -0
  9. package/lib/commonjs/index.js +19 -0
  10. package/lib/commonjs/index.js.map +1 -0
  11. package/lib/commonjs/package.json +1 -0
  12. package/lib/module/db/OPSQLiteConnection.js +101 -0
  13. package/lib/module/db/OPSQLiteConnection.js.map +1 -0
  14. package/lib/module/db/OPSqliteAdapter.js +257 -0
  15. package/lib/module/db/OPSqliteAdapter.js.map +1 -0
  16. package/lib/module/db/OPSqliteDBOpenFactory.js +21 -0
  17. package/lib/module/db/OPSqliteDBOpenFactory.js.map +1 -0
  18. package/lib/module/db/SqliteOptions.js +39 -0
  19. package/lib/module/db/SqliteOptions.js.map +1 -0
  20. package/lib/module/index.js +4 -0
  21. package/lib/module/index.js.map +1 -0
  22. package/lib/module/package.json +1 -0
  23. package/lib/typescript/commonjs/package.json +1 -0
  24. package/lib/typescript/commonjs/src/db/OPSQLiteConnection.d.ts +28 -0
  25. package/lib/typescript/commonjs/src/db/OPSQLiteConnection.d.ts.map +1 -0
  26. package/lib/typescript/commonjs/src/db/OPSqliteAdapter.d.ts +46 -0
  27. package/lib/typescript/commonjs/src/db/OPSqliteAdapter.d.ts.map +1 -0
  28. package/lib/typescript/commonjs/src/db/OPSqliteDBOpenFactory.d.ts +12 -0
  29. package/lib/typescript/commonjs/src/db/OPSqliteDBOpenFactory.d.ts.map +1 -0
  30. package/lib/typescript/commonjs/src/db/SqliteOptions.d.ts +69 -0
  31. package/lib/typescript/commonjs/src/db/SqliteOptions.d.ts.map +1 -0
  32. package/lib/typescript/commonjs/src/index.d.ts +2 -0
  33. package/lib/typescript/commonjs/src/index.d.ts.map +1 -0
  34. package/lib/typescript/module/package.json +1 -0
  35. package/lib/typescript/module/src/db/OPSQLiteConnection.d.ts +28 -0
  36. package/lib/typescript/module/src/db/OPSQLiteConnection.d.ts.map +1 -0
  37. package/lib/typescript/module/src/db/OPSqliteAdapter.d.ts +46 -0
  38. package/lib/typescript/module/src/db/OPSqliteAdapter.d.ts.map +1 -0
  39. package/lib/typescript/module/src/db/OPSqliteDBOpenFactory.d.ts +12 -0
  40. package/lib/typescript/module/src/db/OPSqliteDBOpenFactory.d.ts.map +1 -0
  41. package/lib/typescript/module/src/db/SqliteOptions.d.ts +69 -0
  42. package/lib/typescript/module/src/db/SqliteOptions.d.ts.map +1 -0
  43. package/lib/typescript/module/src/index.d.ts +2 -0
  44. package/lib/typescript/module/src/index.d.ts.map +1 -0
  45. package/package.json +3 -3
@@ -0,0 +1,257 @@
1
+ "use strict";
2
+
3
+ import { getDylibPath, open } from '@op-engineering/op-sqlite';
4
+ import { BaseObserver, mutexRunExclusive } from '@powersync/common';
5
+ import { Mutex } from 'async-mutex';
6
+ import { Platform } from 'react-native';
7
+ import { OPSQLiteConnection } from "./OPSQLiteConnection.js";
8
+
9
+ /**
10
+ * Adapter for React Native Quick SQLite
11
+ */
12
+
13
+ const READ_CONNECTIONS = 5;
14
+ export class OPSQLiteDBAdapter extends BaseObserver {
15
+ readQueue = [];
16
+ constructor(options) {
17
+ super();
18
+ this.options = options;
19
+ this.name = this.options.name;
20
+ this.writeMutex = new Mutex();
21
+ this.readConnections = null;
22
+ this.writeConnection = null;
23
+ this.abortController = new AbortController();
24
+ this.initialized = this.init();
25
+ }
26
+ async init() {
27
+ const {
28
+ lockTimeoutMs,
29
+ journalMode,
30
+ journalSizeLimit,
31
+ synchronous,
32
+ cacheSizeKb,
33
+ temporaryStorage
34
+ } = this.options.sqliteOptions;
35
+ const dbFilename = this.options.name;
36
+ this.writeConnection = await this.openConnection(dbFilename);
37
+ const baseStatements = [`PRAGMA busy_timeout = ${lockTimeoutMs}`, `PRAGMA cache_size = -${cacheSizeKb}`, `PRAGMA temp_store = ${temporaryStorage}`];
38
+ const writeConnectionStatements = [...baseStatements, `PRAGMA journal_mode = ${journalMode}`, `PRAGMA journal_size_limit = ${journalSizeLimit}`, `PRAGMA synchronous = ${synchronous}`];
39
+ const readConnectionStatements = [...baseStatements, 'PRAGMA query_only = true'];
40
+ for (const statement of writeConnectionStatements) {
41
+ for (let tries = 0; tries < 30; tries++) {
42
+ try {
43
+ await this.writeConnection.execute(statement);
44
+ break;
45
+ } catch (e) {
46
+ if (e instanceof Error && e.message.includes('database is locked') && tries < 29) {
47
+ continue;
48
+ } else {
49
+ throw e;
50
+ }
51
+ }
52
+ }
53
+ }
54
+
55
+ // Changes should only occur in the write connection
56
+ this.writeConnection.registerListener({
57
+ tablesUpdated: notification => this.iterateListeners(cb => cb.tablesUpdated?.(notification))
58
+ });
59
+ this.readConnections = [];
60
+ for (let i = 0; i < READ_CONNECTIONS; i++) {
61
+ const conn = await this.openConnection(dbFilename);
62
+ for (let statement of readConnectionStatements) {
63
+ await conn.execute(statement);
64
+ }
65
+ this.readConnections.push({
66
+ busy: false,
67
+ connection: conn
68
+ });
69
+ }
70
+ }
71
+ async openConnection(filenameOverride) {
72
+ const dbFilename = filenameOverride ?? this.options.name;
73
+ const DB = this.openDatabase(dbFilename, this.options.sqliteOptions?.encryptionKey ?? undefined);
74
+
75
+ //Load extensions for all connections
76
+ this.loadAdditionalExtensions(DB);
77
+ this.loadPowerSyncExtension(DB);
78
+ await DB.execute('SELECT powersync_init()');
79
+ return new OPSQLiteConnection({
80
+ baseDB: DB
81
+ });
82
+ }
83
+ openDatabase(dbFilename, encryptionKey) {
84
+ const openOptions = {
85
+ name: dbFilename
86
+ };
87
+ if (this.options.dbLocation) {
88
+ openOptions.location = this.options.dbLocation;
89
+ }
90
+
91
+ // If the encryption key is undefined/null when using SQLCipher it will cause the open function to fail
92
+ if (encryptionKey) {
93
+ openOptions.encryptionKey = encryptionKey;
94
+ }
95
+ return open(openOptions);
96
+ }
97
+ loadAdditionalExtensions(DB) {
98
+ if (this.options.sqliteOptions?.extensions && this.options.sqliteOptions.extensions.length > 0) {
99
+ for (const extension of this.options.sqliteOptions.extensions) {
100
+ DB.loadExtension(extension.path, extension.entryPoint);
101
+ }
102
+ }
103
+ }
104
+ async loadPowerSyncExtension(DB) {
105
+ if (Platform.OS === 'ios') {
106
+ const libPath = getDylibPath('co.powersync.sqlitecore', 'powersync-sqlite-core');
107
+ DB.loadExtension(libPath, 'sqlite3_powersync_init');
108
+ } else {
109
+ DB.loadExtension('libpowersync', 'sqlite3_powersync_init');
110
+ }
111
+ }
112
+ async close() {
113
+ await this.initialized;
114
+ // Abort any pending operations
115
+ this.abortController.abort();
116
+ this.readQueue = [];
117
+ this.writeConnection.close();
118
+ this.readConnections.forEach(c => c.connection.close());
119
+ }
120
+ async readLock(fn, options) {
121
+ await this.initialized;
122
+ return new Promise(async (resolve, reject) => {
123
+ const execute = async () => {
124
+ // Find an available connection that is not busy
125
+ const availableConnection = this.readConnections.find(conn => !conn.busy);
126
+
127
+ // If we have an available connection, use it
128
+ if (availableConnection) {
129
+ availableConnection.busy = true;
130
+ try {
131
+ resolve(await fn(availableConnection.connection));
132
+ } catch (error) {
133
+ reject(error);
134
+ } finally {
135
+ availableConnection.busy = false;
136
+ // After query execution, process any queued tasks
137
+ this.processQueue();
138
+ }
139
+ } else {
140
+ // If no available connections, add to the queue
141
+ this.readQueue.push(execute);
142
+ }
143
+ };
144
+ execute();
145
+ });
146
+ }
147
+ async processQueue() {
148
+ if (this.readQueue.length > 0) {
149
+ const next = this.readQueue.shift();
150
+ if (next) {
151
+ next();
152
+ }
153
+ }
154
+ }
155
+ async writeLock(fn, options) {
156
+ await this.initialized;
157
+ return new Promise(async (resolve, reject) => {
158
+ // Set up abort signal listener
159
+ const abortListener = () => {
160
+ reject(new Error('Database connection was closed'));
161
+ };
162
+ this.abortController.signal.addEventListener('abort', abortListener);
163
+ try {
164
+ await mutexRunExclusive(this.writeMutex, async () => {
165
+ // Check if operation was aborted before executing
166
+ if (this.abortController.signal.aborted) {
167
+ reject(new Error('Database connection was closed'));
168
+ }
169
+ resolve(await fn(this.writeConnection));
170
+ }, options);
171
+ // flush updates once a write lock has been released
172
+ this.writeConnection.flushUpdates();
173
+ } catch (ex) {
174
+ reject(ex);
175
+ } finally {
176
+ this.abortController.signal.removeEventListener('abort', abortListener);
177
+ }
178
+ });
179
+ }
180
+ readTransaction(fn, options) {
181
+ return this.readLock(ctx => this.internalTransaction(ctx, fn));
182
+ }
183
+ writeTransaction(fn, options) {
184
+ return this.writeLock(ctx => this.internalTransaction(ctx, fn));
185
+ }
186
+ getAll(sql, parameters) {
187
+ return this.readLock(ctx => ctx.getAll(sql, parameters));
188
+ }
189
+ getOptional(sql, parameters) {
190
+ return this.readLock(ctx => ctx.getOptional(sql, parameters));
191
+ }
192
+ get(sql, parameters) {
193
+ return this.readLock(ctx => ctx.get(sql, parameters));
194
+ }
195
+ execute(query, params) {
196
+ return this.writeLock(ctx => ctx.execute(query, params));
197
+ }
198
+ executeRaw(query, params) {
199
+ return this.writeLock(ctx => ctx.executeRaw(query, params));
200
+ }
201
+ async executeBatch(query, params = []) {
202
+ return this.writeLock(ctx => ctx.executeBatch(query, params));
203
+ }
204
+ async internalTransaction(connection, fn) {
205
+ let finalized = false;
206
+ const commit = async () => {
207
+ if (finalized) {
208
+ return {
209
+ rowsAffected: 0
210
+ };
211
+ }
212
+ finalized = true;
213
+ return connection.execute('COMMIT');
214
+ };
215
+ const rollback = async () => {
216
+ if (finalized) {
217
+ return {
218
+ rowsAffected: 0
219
+ };
220
+ }
221
+ finalized = true;
222
+ return connection.execute('ROLLBACK');
223
+ };
224
+ try {
225
+ await connection.execute('BEGIN');
226
+ const result = await fn({
227
+ execute: (query, params) => connection.execute(query, params),
228
+ executeRaw: (query, params) => connection.executeRaw(query, params),
229
+ get: (query, params) => connection.get(query, params),
230
+ getAll: (query, params) => connection.getAll(query, params),
231
+ getOptional: (query, params) => connection.getOptional(query, params),
232
+ commit,
233
+ rollback
234
+ });
235
+ await commit();
236
+ return result;
237
+ } catch (ex) {
238
+ try {
239
+ await rollback();
240
+ } catch (ex2) {
241
+ // In rare cases, a rollback may fail.
242
+ // Safe to ignore.
243
+ }
244
+ throw ex;
245
+ }
246
+ }
247
+ async refreshSchema() {
248
+ await this.initialized;
249
+ await this.writeConnection.refreshSchema();
250
+ if (this.readConnections) {
251
+ for (let readConnection of this.readConnections) {
252
+ await readConnection.connection.refreshSchema();
253
+ }
254
+ }
255
+ }
256
+ }
257
+ //# sourceMappingURL=OPSqliteAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["getDylibPath","open","BaseObserver","mutexRunExclusive","Mutex","Platform","OPSQLiteConnection","READ_CONNECTIONS","OPSQLiteDBAdapter","readQueue","constructor","options","name","writeMutex","readConnections","writeConnection","abortController","AbortController","initialized","init","lockTimeoutMs","journalMode","journalSizeLimit","synchronous","cacheSizeKb","temporaryStorage","sqliteOptions","dbFilename","openConnection","baseStatements","writeConnectionStatements","readConnectionStatements","statement","tries","execute","e","Error","message","includes","registerListener","tablesUpdated","notification","iterateListeners","cb","i","conn","push","busy","connection","filenameOverride","DB","openDatabase","encryptionKey","undefined","loadAdditionalExtensions","loadPowerSyncExtension","baseDB","openOptions","dbLocation","location","extensions","length","extension","loadExtension","path","entryPoint","OS","libPath","close","abort","forEach","c","readLock","fn","Promise","resolve","reject","availableConnection","find","error","processQueue","next","shift","writeLock","abortListener","signal","addEventListener","aborted","flushUpdates","ex","removeEventListener","readTransaction","ctx","internalTransaction","writeTransaction","getAll","sql","parameters","getOptional","get","query","params","executeRaw","executeBatch","finalized","commit","rowsAffected","rollback","result","ex2","refreshSchema","readConnection"],"sourceRoot":"../../../src","sources":["db/OPSqliteAdapter.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+
3
+ import { OPSQLiteDBAdapter } from "./OPSqliteAdapter.js";
4
+ import { DEFAULT_SQLITE_OPTIONS } from "./SqliteOptions.js";
5
+ export class OPSqliteOpenFactory {
6
+ constructor(options) {
7
+ this.options = options;
8
+ this.sqliteOptions = {
9
+ ...DEFAULT_SQLITE_OPTIONS,
10
+ ...this.options.sqliteOptions
11
+ };
12
+ }
13
+ openDB() {
14
+ return new OPSQLiteDBAdapter({
15
+ name: this.options.dbFilename,
16
+ dbLocation: this.options.dbLocation,
17
+ sqliteOptions: this.sqliteOptions
18
+ });
19
+ }
20
+ }
21
+ //# sourceMappingURL=OPSqliteDBOpenFactory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["OPSQLiteDBAdapter","DEFAULT_SQLITE_OPTIONS","OPSqliteOpenFactory","constructor","options","sqliteOptions","openDB","name","dbFilename","dbLocation"],"sourceRoot":"../../../src","sources":["db/OPSqliteDBOpenFactory.ts"],"mappings":";;AACA,SAASA,iBAAiB,QAAQ,sBAAmB;AACrD,SAASC,sBAAsB,QAAuB,oBAAiB;AAKvE,OAAO,MAAMC,mBAAmB,CAA2B;EAGzDC,WAAWA,CAAWC,OAAmC,EAAE;IAAA,KAArCA,OAAmC,GAAnCA,OAAmC;IACvD,IAAI,CAACC,aAAa,GAAG;MACnB,GAAGJ,sBAAsB;MACzB,GAAG,IAAI,CAACG,OAAO,CAACC;IAClB,CAAC;EACH;EAEAC,MAAMA,CAAA,EAAc;IAClB,OAAO,IAAIN,iBAAiB,CAAC;MAC3BO,IAAI,EAAE,IAAI,CAACH,OAAO,CAACI,UAAU;MAC7BC,UAAU,EAAE,IAAI,CAACL,OAAO,CAACK,UAAU;MACnCJ,aAAa,EAAE,IAAI,CAACA;IACtB,CAAC,CAAC;EACJ;AACF","ignoreList":[]}
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+
3
+ export let TemporaryStorageOption = /*#__PURE__*/function (TemporaryStorageOption) {
4
+ TemporaryStorageOption["MEMORY"] = "memory";
5
+ TemporaryStorageOption["FILESYSTEM"] = "file";
6
+ return TemporaryStorageOption;
7
+ }({});
8
+
9
+ // SQLite journal mode. Set on the primary connection.
10
+ // This library is written with WAL mode in mind - other modes may cause
11
+ // unexpected locking behavior.
12
+ var SqliteJournalMode = /*#__PURE__*/function (SqliteJournalMode) {
13
+ // Use a write-ahead log instead of a rollback journal.
14
+ // This provides good performance and concurrency.
15
+ SqliteJournalMode["wal"] = "WAL";
16
+ SqliteJournalMode["delete"] = "DELETE";
17
+ SqliteJournalMode["truncate"] = "TRUNCATE";
18
+ SqliteJournalMode["persist"] = "PERSIST";
19
+ SqliteJournalMode["memory"] = "MEMORY";
20
+ SqliteJournalMode["off"] = "OFF";
21
+ return SqliteJournalMode;
22
+ }(SqliteJournalMode || {}); // SQLite file commit mode.
23
+ var SqliteSynchronous = /*#__PURE__*/function (SqliteSynchronous) {
24
+ SqliteSynchronous["normal"] = "NORMAL";
25
+ SqliteSynchronous["full"] = "FULL";
26
+ SqliteSynchronous["off"] = "OFF";
27
+ return SqliteSynchronous;
28
+ }(SqliteSynchronous || {});
29
+ export const DEFAULT_SQLITE_OPTIONS = {
30
+ journalMode: SqliteJournalMode.wal,
31
+ synchronous: SqliteSynchronous.normal,
32
+ journalSizeLimit: 6 * 1024 * 1024,
33
+ cacheSizeKb: 50 * 1024,
34
+ temporaryStorage: TemporaryStorageOption.MEMORY,
35
+ lockTimeoutMs: 30000,
36
+ encryptionKey: null,
37
+ extensions: []
38
+ };
39
+ //# sourceMappingURL=SqliteOptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["TemporaryStorageOption","SqliteJournalMode","SqliteSynchronous","DEFAULT_SQLITE_OPTIONS","journalMode","wal","synchronous","normal","journalSizeLimit","cacheSizeKb","temporaryStorage","MEMORY","lockTimeoutMs","encryptionKey","extensions"],"sourceRoot":"../../../src","sources":["db/SqliteOptions.ts"],"mappings":";;AAyDA,WAAYA,sBAAsB,0BAAtBA,sBAAsB;EAAtBA,sBAAsB;EAAtBA,sBAAsB;EAAA,OAAtBA,sBAAsB;AAAA;;AAKlC;AACA;AACA;AAAA,IACKC,iBAAiB,0BAAjBA,iBAAiB;EACpB;EACA;EAFGA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAA,OAAjBA,iBAAiB;AAAA,EAAjBA,iBAAiB,SAWtB;AAAA,IACKC,iBAAiB,0BAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAA,OAAjBA,iBAAiB;AAAA,EAAjBA,iBAAiB;AAMtB,OAAO,MAAMC,sBAA+C,GAAG;EAC7DC,WAAW,EAAEH,iBAAiB,CAACI,GAAG;EAClCC,WAAW,EAAEJ,iBAAiB,CAACK,MAAM;EACrCC,gBAAgB,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI;EACjCC,WAAW,EAAE,EAAE,GAAG,IAAI;EACtBC,gBAAgB,EAAEV,sBAAsB,CAACW,MAAM;EAC/CC,aAAa,EAAE,KAAK;EACpBC,aAAa,EAAE,IAAI;EACnBC,UAAU,EAAE;AACd,CAAC","ignoreList":[]}
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+
3
+ export { OPSqliteOpenFactory, OPSQLiteOpenFactoryOptions } from "./db/OPSqliteDBOpenFactory.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["OPSqliteOpenFactory","OPSQLiteOpenFactoryOptions"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA,SACEA,mBAAmB,EACnBC,0BAA0B,QACrB,+BAA4B","ignoreList":[]}
@@ -0,0 +1 @@
1
+ {"type":"module"}
@@ -0,0 +1 @@
1
+ {"type":"commonjs"}
@@ -0,0 +1,28 @@
1
+ import { DB, UpdateHookOperation } from '@op-engineering/op-sqlite';
2
+ import { BaseObserver, DBAdapterListener, QueryResult } from '@powersync/common';
3
+ export type OPSQLiteConnectionOptions = {
4
+ baseDB: DB;
5
+ };
6
+ export type OPSQLiteUpdateNotification = {
7
+ table: string;
8
+ operation: UpdateHookOperation;
9
+ row?: any;
10
+ rowId: number;
11
+ };
12
+ export declare class OPSQLiteConnection extends BaseObserver<DBAdapterListener> {
13
+ protected options: OPSQLiteConnectionOptions;
14
+ protected DB: DB;
15
+ private updateBuffer;
16
+ constructor(options: OPSQLiteConnectionOptions);
17
+ addTableUpdate(update: OPSQLiteUpdateNotification): void;
18
+ flushUpdates(): void;
19
+ close(): void;
20
+ execute(query: string, params?: any[]): Promise<QueryResult>;
21
+ executeRaw(query: string, params?: any[]): Promise<any[][]>;
22
+ executeBatch(query: string, params?: any[][]): Promise<QueryResult>;
23
+ getAll<T>(sql: string, parameters?: any[]): Promise<T[]>;
24
+ getOptional<T>(sql: string, parameters?: any[]): Promise<T | null>;
25
+ get<T>(sql: string, parameters?: any[]): Promise<T>;
26
+ refreshSchema(): Promise<void>;
27
+ }
28
+ //# sourceMappingURL=OPSQLiteConnection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OPSQLiteConnection.d.ts","sourceRoot":"","sources":["../../../../../src/db/OPSQLiteConnection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAiB,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACnF,OAAO,EACL,YAAY,EAEZ,iBAAiB,EACjB,WAAW,EAGZ,MAAM,mBAAmB,CAAC;AAE3B,MAAM,MAAM,yBAAyB,GAAG;IACtC,MAAM,EAAE,EAAE,CAAC;CACZ,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,mBAAmB,CAAC;IAC/B,GAAG,CAAC,EAAE,GAAG,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,qBAAa,kBAAmB,SAAQ,YAAY,CAAC,iBAAiB,CAAC;IAIzD,SAAS,CAAC,OAAO,EAAE,yBAAyB;IAHxD,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC;IACjB,OAAO,CAAC,YAAY,CAAuB;gBAErB,OAAO,EAAE,yBAAyB;IAcxD,cAAc,CAAC,MAAM,EAAE,0BAA0B;IAqBjD,YAAY;IAsBZ,KAAK;IAIC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC;IAa5D,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;IAI3D,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,GAAE,GAAG,EAAE,EAAO,GAAG,OAAO,CAAC,WAAW,CAAC;IAUvE,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAKxD,WAAW,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAKlE,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC;IAQnD,aAAa;CAGpB"}
@@ -0,0 +1,46 @@
1
+ import { BaseObserver, DBAdapter, DBAdapterListener, DBLockOptions, QueryResult, Transaction } from '@powersync/common';
2
+ import { Mutex } from 'async-mutex';
3
+ import { OPSQLiteConnection } from './OPSQLiteConnection';
4
+ import { SqliteOptions } from './SqliteOptions';
5
+ /**
6
+ * Adapter for React Native Quick SQLite
7
+ */
8
+ export type OPSQLiteAdapterOptions = {
9
+ name: string;
10
+ dbLocation?: string;
11
+ sqliteOptions?: SqliteOptions;
12
+ };
13
+ export declare class OPSQLiteDBAdapter extends BaseObserver<DBAdapterListener> implements DBAdapter {
14
+ protected options: OPSQLiteAdapterOptions;
15
+ name: string;
16
+ protected writeMutex: Mutex;
17
+ protected initialized: Promise<void>;
18
+ protected readConnections: Array<{
19
+ busy: boolean;
20
+ connection: OPSQLiteConnection;
21
+ }> | null;
22
+ protected writeConnection: OPSQLiteConnection | null;
23
+ private readQueue;
24
+ private abortController;
25
+ constructor(options: OPSQLiteAdapterOptions);
26
+ protected init(): Promise<void>;
27
+ protected openConnection(filenameOverride?: string): Promise<OPSQLiteConnection>;
28
+ private openDatabase;
29
+ private loadAdditionalExtensions;
30
+ private loadPowerSyncExtension;
31
+ close(): Promise<void>;
32
+ readLock<T>(fn: (tx: OPSQLiteConnection) => Promise<T>, options?: DBLockOptions): Promise<T>;
33
+ private processQueue;
34
+ writeLock<T>(fn: (tx: OPSQLiteConnection) => Promise<T>, options?: DBLockOptions): Promise<T>;
35
+ readTransaction<T>(fn: (tx: Transaction) => Promise<T>, options?: DBLockOptions): Promise<T>;
36
+ writeTransaction<T>(fn: (tx: Transaction) => Promise<T>, options?: DBLockOptions): Promise<T>;
37
+ getAll<T>(sql: string, parameters?: any[]): Promise<T[]>;
38
+ getOptional<T>(sql: string, parameters?: any[]): Promise<T | null>;
39
+ get<T>(sql: string, parameters?: any[]): Promise<T>;
40
+ execute(query: string, params?: any[]): Promise<QueryResult>;
41
+ executeRaw(query: string, params?: any[]): Promise<any[][]>;
42
+ executeBatch(query: string, params?: any[][]): Promise<QueryResult>;
43
+ protected internalTransaction<T>(connection: OPSQLiteConnection, fn: (tx: Transaction) => Promise<T>): Promise<T>;
44
+ refreshSchema(): Promise<void>;
45
+ }
46
+ //# sourceMappingURL=OPSqliteAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OPSqliteAdapter.d.ts","sourceRoot":"","sources":["../../../../../src/db/OPSqliteAdapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { DBAdapter, SQLOpenFactory, SQLOpenOptions } from '@powersync/common';
2
+ import { SqliteOptions } from './SqliteOptions';
3
+ export interface OPSQLiteOpenFactoryOptions extends SQLOpenOptions {
4
+ sqliteOptions?: SqliteOptions;
5
+ }
6
+ export declare class OPSqliteOpenFactory implements SQLOpenFactory {
7
+ protected options: OPSQLiteOpenFactoryOptions;
8
+ private sqliteOptions;
9
+ constructor(options: OPSQLiteOpenFactoryOptions);
10
+ openDB(): DBAdapter;
11
+ }
12
+ //# sourceMappingURL=OPSqliteDBOpenFactory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OPSqliteDBOpenFactory.d.ts","sourceRoot":"","sources":["../../../../../src/db/OPSqliteDBOpenFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAE9E,OAAO,EAA0B,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAExE,MAAM,WAAW,0BAA2B,SAAQ,cAAc;IAChE,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AACD,qBAAa,mBAAoB,YAAW,cAAc;IAG5C,SAAS,CAAC,OAAO,EAAE,0BAA0B;IAFzD,OAAO,CAAC,aAAa,CAA0B;gBAEzB,OAAO,EAAE,0BAA0B;IAOzD,MAAM,IAAI,SAAS;CAOpB"}
@@ -0,0 +1,69 @@
1
+ export interface SqliteOptions {
2
+ /**
3
+ * SQLite journal mode. Defaults to [SqliteJournalMode.wal].
4
+ */
5
+ journalMode?: SqliteJournalMode;
6
+ /**
7
+ * SQLite synchronous flag. Defaults to [SqliteSynchronous.normal], which
8
+ * is safe for WAL mode.
9
+ */
10
+ synchronous?: SqliteSynchronous;
11
+ /**
12
+ * Journal/WAL size limit. Defaults to 6MB.
13
+ * The WAL may grow larger than this limit during writes, but SQLite will
14
+ * attempt to truncate the file afterwards.
15
+ */
16
+ journalSizeLimit?: number;
17
+ /**
18
+ * Timeout in milliseconds waiting for locks to be released by other connections.
19
+ * Defaults to 30 seconds.
20
+ * Set to null or zero to fail immediately when the database is locked.
21
+ */
22
+ lockTimeoutMs?: number;
23
+ /**
24
+ * Encryption key for the database.
25
+ * If set, the database will be encrypted using SQLCipher.
26
+ */
27
+ encryptionKey?: string | null;
28
+ /**
29
+ * Where to store SQLite temporary files. Defaults to 'MEMORY'.
30
+ * Setting this to `FILESYSTEM` can cause issues with larger queries or datasets.
31
+ *
32
+ * For details, see: https://www.sqlite.org/pragma.html#pragma_temp_store
33
+ */
34
+ temporaryStorage?: TemporaryStorageOption;
35
+ /**
36
+ * Maximum SQLite cache size. Defaults to 50MB.
37
+ *
38
+ * For details, see: https://www.sqlite.org/pragma.html#pragma_cache_size
39
+ */
40
+ cacheSizeKb?: number;
41
+ /**
42
+ * Load extensions using the path and entryPoint.
43
+ * More info can be found here https://op-engineering.github.io/op-sqlite/docs/api#loading-extensions.
44
+ */
45
+ extensions?: Array<{
46
+ path: string;
47
+ entryPoint?: string;
48
+ }>;
49
+ }
50
+ export declare enum TemporaryStorageOption {
51
+ MEMORY = "memory",
52
+ FILESYSTEM = "file"
53
+ }
54
+ declare enum SqliteJournalMode {
55
+ wal = "WAL",
56
+ delete = "DELETE",
57
+ truncate = "TRUNCATE",
58
+ persist = "PERSIST",
59
+ memory = "MEMORY",
60
+ off = "OFF"
61
+ }
62
+ declare enum SqliteSynchronous {
63
+ normal = "NORMAL",
64
+ full = "FULL",
65
+ off = "OFF"
66
+ }
67
+ export declare const DEFAULT_SQLITE_OPTIONS: Required<SqliteOptions>;
68
+ export {};
69
+ //# sourceMappingURL=SqliteOptions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SqliteOptions.d.ts","sourceRoot":"","sources":["../../../../../src/db/SqliteOptions.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAEhC;;;OAGG;IACH,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAEhC;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAE9B;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,sBAAsB,CAAC;IAE1C;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,UAAU,CAAC,EAAE,KAAK,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;CACJ;AAED,oBAAY,sBAAsB;IAChC,MAAM,WAAW;IACjB,UAAU,SAAS;CACpB;AAKD,aAAK,iBAAiB;IAGpB,GAAG,QAAQ;IACX,MAAM,WAAW;IACjB,QAAQ,aAAa;IACrB,OAAO,YAAY;IACnB,MAAM,WAAW;IACjB,GAAG,QAAQ;CACZ;AAGD,aAAK,iBAAiB;IACpB,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,GAAG,QAAQ;CACZ;AAED,eAAO,MAAM,sBAAsB,EAAE,QAAQ,CAAC,aAAa,CAS1D,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { OPSqliteOpenFactory, OPSQLiteOpenFactoryOptions } from './db/OPSqliteDBOpenFactory';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,0BAA0B,EAC3B,MAAM,4BAA4B,CAAC"}
@@ -0,0 +1 @@
1
+ {"type":"module"}
@@ -0,0 +1,28 @@
1
+ import { DB, UpdateHookOperation } from '@op-engineering/op-sqlite';
2
+ import { BaseObserver, DBAdapterListener, QueryResult } from '@powersync/common';
3
+ export type OPSQLiteConnectionOptions = {
4
+ baseDB: DB;
5
+ };
6
+ export type OPSQLiteUpdateNotification = {
7
+ table: string;
8
+ operation: UpdateHookOperation;
9
+ row?: any;
10
+ rowId: number;
11
+ };
12
+ export declare class OPSQLiteConnection extends BaseObserver<DBAdapterListener> {
13
+ protected options: OPSQLiteConnectionOptions;
14
+ protected DB: DB;
15
+ private updateBuffer;
16
+ constructor(options: OPSQLiteConnectionOptions);
17
+ addTableUpdate(update: OPSQLiteUpdateNotification): void;
18
+ flushUpdates(): void;
19
+ close(): void;
20
+ execute(query: string, params?: any[]): Promise<QueryResult>;
21
+ executeRaw(query: string, params?: any[]): Promise<any[][]>;
22
+ executeBatch(query: string, params?: any[][]): Promise<QueryResult>;
23
+ getAll<T>(sql: string, parameters?: any[]): Promise<T[]>;
24
+ getOptional<T>(sql: string, parameters?: any[]): Promise<T | null>;
25
+ get<T>(sql: string, parameters?: any[]): Promise<T>;
26
+ refreshSchema(): Promise<void>;
27
+ }
28
+ //# sourceMappingURL=OPSQLiteConnection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OPSQLiteConnection.d.ts","sourceRoot":"","sources":["../../../../../src/db/OPSQLiteConnection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAiB,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACnF,OAAO,EACL,YAAY,EAEZ,iBAAiB,EACjB,WAAW,EAGZ,MAAM,mBAAmB,CAAC;AAE3B,MAAM,MAAM,yBAAyB,GAAG;IACtC,MAAM,EAAE,EAAE,CAAC;CACZ,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,mBAAmB,CAAC;IAC/B,GAAG,CAAC,EAAE,GAAG,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,qBAAa,kBAAmB,SAAQ,YAAY,CAAC,iBAAiB,CAAC;IAIzD,SAAS,CAAC,OAAO,EAAE,yBAAyB;IAHxD,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC;IACjB,OAAO,CAAC,YAAY,CAAuB;gBAErB,OAAO,EAAE,yBAAyB;IAcxD,cAAc,CAAC,MAAM,EAAE,0BAA0B;IAqBjD,YAAY;IAsBZ,KAAK;IAIC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC;IAa5D,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;IAI3D,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,GAAE,GAAG,EAAE,EAAO,GAAG,OAAO,CAAC,WAAW,CAAC;IAUvE,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAKxD,WAAW,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAKlE,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC;IAQnD,aAAa;CAGpB"}
@@ -0,0 +1,46 @@
1
+ import { BaseObserver, DBAdapter, DBAdapterListener, DBLockOptions, QueryResult, Transaction } from '@powersync/common';
2
+ import { Mutex } from 'async-mutex';
3
+ import { OPSQLiteConnection } from './OPSQLiteConnection';
4
+ import { SqliteOptions } from './SqliteOptions';
5
+ /**
6
+ * Adapter for React Native Quick SQLite
7
+ */
8
+ export type OPSQLiteAdapterOptions = {
9
+ name: string;
10
+ dbLocation?: string;
11
+ sqliteOptions?: SqliteOptions;
12
+ };
13
+ export declare class OPSQLiteDBAdapter extends BaseObserver<DBAdapterListener> implements DBAdapter {
14
+ protected options: OPSQLiteAdapterOptions;
15
+ name: string;
16
+ protected writeMutex: Mutex;
17
+ protected initialized: Promise<void>;
18
+ protected readConnections: Array<{
19
+ busy: boolean;
20
+ connection: OPSQLiteConnection;
21
+ }> | null;
22
+ protected writeConnection: OPSQLiteConnection | null;
23
+ private readQueue;
24
+ private abortController;
25
+ constructor(options: OPSQLiteAdapterOptions);
26
+ protected init(): Promise<void>;
27
+ protected openConnection(filenameOverride?: string): Promise<OPSQLiteConnection>;
28
+ private openDatabase;
29
+ private loadAdditionalExtensions;
30
+ private loadPowerSyncExtension;
31
+ close(): Promise<void>;
32
+ readLock<T>(fn: (tx: OPSQLiteConnection) => Promise<T>, options?: DBLockOptions): Promise<T>;
33
+ private processQueue;
34
+ writeLock<T>(fn: (tx: OPSQLiteConnection) => Promise<T>, options?: DBLockOptions): Promise<T>;
35
+ readTransaction<T>(fn: (tx: Transaction) => Promise<T>, options?: DBLockOptions): Promise<T>;
36
+ writeTransaction<T>(fn: (tx: Transaction) => Promise<T>, options?: DBLockOptions): Promise<T>;
37
+ getAll<T>(sql: string, parameters?: any[]): Promise<T[]>;
38
+ getOptional<T>(sql: string, parameters?: any[]): Promise<T | null>;
39
+ get<T>(sql: string, parameters?: any[]): Promise<T>;
40
+ execute(query: string, params?: any[]): Promise<QueryResult>;
41
+ executeRaw(query: string, params?: any[]): Promise<any[][]>;
42
+ executeBatch(query: string, params?: any[][]): Promise<QueryResult>;
43
+ protected internalTransaction<T>(connection: OPSQLiteConnection, fn: (tx: Transaction) => Promise<T>): Promise<T>;
44
+ refreshSchema(): Promise<void>;
45
+ }
46
+ //# sourceMappingURL=OPSqliteAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OPSqliteAdapter.d.ts","sourceRoot":"","sources":["../../../../../src/db/OPSqliteAdapter.ts"],"names":[],"mappings":"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"}