@powersync/capacitor 0.5.1 → 0.5.3
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.
- package/PowersyncCapacitor.podspec +1 -1
- package/README.md +3 -1
- package/android/build.gradle +1 -1
- package/dist/esm/PowerSyncDatabase.d.ts +8 -1
- package/dist/esm/PowerSyncDatabase.js +20 -2
- package/dist/esm/PowerSyncDatabase.js.map +1 -1
- package/dist/esm/adapter/CapacitorSQLiteAdapter.d.ts +3 -4
- package/dist/esm/adapter/CapacitorSQLiteAdapter.js +73 -28
- package/dist/esm/adapter/CapacitorSQLiteAdapter.js.map +1 -1
- package/dist/esm/sync/CapacitorRemote.d.ts +4 -0
- package/dist/esm/sync/CapacitorRemote.js +23 -0
- package/dist/esm/sync/CapacitorRemote.js.map +1 -0
- package/dist/esm/sync/CapacitorSyncImplementation.js +3 -8
- package/dist/esm/sync/CapacitorSyncImplementation.js.map +1 -1
- package/dist/plugin.cjs +118 -38
- package/dist/plugin.cjs.map +1 -1
- package/dist/plugin.d.cts +11 -4
- package/dist/plugin.js +120 -39
- package/dist/plugin.js.map +1 -1
- package/package.json +2 -5
- package/src/PowerSyncDatabase.ts +30 -3
- package/src/adapter/CapacitorSQLiteAdapter.ts +96 -53
- package/src/sync/CapacitorRemote.ts +23 -0
- package/src/sync/CapacitorSyncImplementation.ts +3 -7
package/dist/plugin.cjs
CHANGED
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
var sqlite = require('@capacitor-community/sqlite');
|
|
4
4
|
var core = require('@capacitor/core');
|
|
5
5
|
var web$1 = require('@powersync/web');
|
|
6
|
-
var asyncMutex = require('async-mutex');
|
|
7
6
|
|
|
8
7
|
const PowerSyncCore = core.registerPlugin('PowerSync', {
|
|
9
8
|
web: () => Promise.resolve().then(function () { return web; }).then((m) => new m.PowerSyncWeb())
|
|
@@ -53,14 +52,52 @@ async function monitorQuery(sql, executor) {
|
|
|
53
52
|
throw e;
|
|
54
53
|
}
|
|
55
54
|
}
|
|
55
|
+
/**
|
|
56
|
+
* Maps SQLite query parameter values to Capacitor Community supported formats.
|
|
57
|
+
* This handles binary payloads for both iOS and Android.
|
|
58
|
+
*/
|
|
59
|
+
function mapSQLiteParameterValues({ platform, values }) {
|
|
60
|
+
return values.map((value) => {
|
|
61
|
+
if (value instanceof Uint8Array) {
|
|
62
|
+
switch (platform) {
|
|
63
|
+
case 'ios': {
|
|
64
|
+
/**
|
|
65
|
+
* The Buffer polyfill, used in @powersync/common, is a Uint8Array subclass which defines additional fields like
|
|
66
|
+
* `_isBuffer` and `parent` on its `prototype`. The additional fields are serialized when passed through the native bridge.
|
|
67
|
+
* The Capacitor Community SQLite library expects a dictionary of indexes to numerical bytes.
|
|
68
|
+
* The additional fields (which are not an index to numerical byte mapping) cause the parsing logic in the SQLite library to throw an error:
|
|
69
|
+
* "Error in reading buffer".
|
|
70
|
+
*
|
|
71
|
+
* Re-wrapping the same backing buffer as a plain Uint8Array removes the Buffer subclass wrapper
|
|
72
|
+
* while keeping the same underlying bytes. This creates a new view, not a byte copy, so the
|
|
73
|
+
* overhead should be minimal.
|
|
74
|
+
*/
|
|
75
|
+
return new Uint8Array(value.buffer, value.byteOffset, value.byteLength);
|
|
76
|
+
}
|
|
77
|
+
case 'android': {
|
|
78
|
+
/**
|
|
79
|
+
* Android expects an object of the form:
|
|
80
|
+
* { type: 'Buffer', data: [...]}
|
|
81
|
+
*/
|
|
82
|
+
return {
|
|
83
|
+
type: 'Buffer',
|
|
84
|
+
data: Array.from(value)
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// return value as-is
|
|
90
|
+
return value;
|
|
91
|
+
});
|
|
92
|
+
}
|
|
56
93
|
class CapacitorConnectionPool extends web$1.BaseObserver {
|
|
57
94
|
constructor(options) {
|
|
58
95
|
super();
|
|
59
96
|
this.options = options;
|
|
60
97
|
this._writeConnection = null;
|
|
61
98
|
this._readConnection = null;
|
|
62
|
-
this.writeMutex = new
|
|
63
|
-
this.readMutex = new
|
|
99
|
+
this.writeMutex = new web$1.Mutex();
|
|
100
|
+
this.readMutex = new web$1.Mutex();
|
|
64
101
|
this.initializedPromise = this.init();
|
|
65
102
|
}
|
|
66
103
|
get writeConnection() {
|
|
@@ -121,7 +158,11 @@ class CapacitorConnectionPool extends web$1.BaseObserver {
|
|
|
121
158
|
generateLockContext(db) {
|
|
122
159
|
const _query = async (query, params = []) => {
|
|
123
160
|
var _a;
|
|
124
|
-
const
|
|
161
|
+
const mappedParams = mapSQLiteParameterValues({
|
|
162
|
+
platform: core.Capacitor.getPlatform(),
|
|
163
|
+
values: params
|
|
164
|
+
});
|
|
165
|
+
const result = await db.query(query, mappedParams);
|
|
125
166
|
const arrayResult = (_a = result.values) !== null && _a !== void 0 ? _a : [];
|
|
126
167
|
return {
|
|
127
168
|
rowsAffected: 0,
|
|
@@ -135,30 +176,30 @@ class CapacitorConnectionPool extends web$1.BaseObserver {
|
|
|
135
176
|
const _execute = async (query, params = []) => {
|
|
136
177
|
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
137
178
|
const platform = core.Capacitor.getPlatform();
|
|
138
|
-
if (db.getConnectionReadOnly()
|
|
179
|
+
if (db.getConnectionReadOnly() ||
|
|
180
|
+
// Android: use query for SELECT and executeSet for mutations
|
|
181
|
+
// We cannot use `run` here for both cases.
|
|
182
|
+
(platform == 'android' && query.toLowerCase().trim().startsWith('select'))) {
|
|
139
183
|
return _query(query, params);
|
|
140
184
|
}
|
|
185
|
+
const mappedParams = mapSQLiteParameterValues({
|
|
186
|
+
platform,
|
|
187
|
+
values: params
|
|
188
|
+
});
|
|
141
189
|
if (platform == 'android') {
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
rows: {
|
|
153
|
-
_array: [],
|
|
154
|
-
length: 0,
|
|
155
|
-
item: () => null
|
|
156
|
-
}
|
|
157
|
-
};
|
|
158
|
-
}
|
|
190
|
+
const result = await db.executeSet([{ statement: query, values: mappedParams }], false);
|
|
191
|
+
return {
|
|
192
|
+
insertId: (_a = result.changes) === null || _a === void 0 ? void 0 : _a.lastId,
|
|
193
|
+
rowsAffected: (_c = (_b = result.changes) === null || _b === void 0 ? void 0 : _b.changes) !== null && _c !== void 0 ? _c : 0,
|
|
194
|
+
rows: {
|
|
195
|
+
_array: [],
|
|
196
|
+
length: 0,
|
|
197
|
+
item: () => null
|
|
198
|
+
}
|
|
199
|
+
};
|
|
159
200
|
}
|
|
160
201
|
// iOS (and other platforms): use run("all")
|
|
161
|
-
const result = await db.run(query,
|
|
202
|
+
const result = await db.run(query, mappedParams, false, 'all');
|
|
162
203
|
const resultSet = (_e = (_d = result.changes) === null || _d === void 0 ? void 0 : _d.values) !== null && _e !== void 0 ? _e : [];
|
|
163
204
|
return {
|
|
164
205
|
insertId: (_f = result.changes) === null || _f === void 0 ? void 0 : _f.lastId,
|
|
@@ -200,9 +241,13 @@ class CapacitorConnectionPool extends web$1.BaseObserver {
|
|
|
200
241
|
};
|
|
201
242
|
const executeBatch = async (query, params = []) => {
|
|
202
243
|
var _a, _b, _c;
|
|
244
|
+
const platform = core.Capacitor.getPlatform();
|
|
203
245
|
let result = await db.executeSet(params.map((param) => ({
|
|
204
246
|
statement: query,
|
|
205
|
-
values:
|
|
247
|
+
values: mapSQLiteParameterValues({
|
|
248
|
+
platform,
|
|
249
|
+
values: param
|
|
250
|
+
})
|
|
206
251
|
})));
|
|
207
252
|
return {
|
|
208
253
|
rowsAffected: (_b = (_a = result.changes) === null || _a === void 0 ? void 0 : _a.changes) !== null && _b !== void 0 ? _b : 0,
|
|
@@ -219,13 +264,13 @@ class CapacitorConnectionPool extends web$1.BaseObserver {
|
|
|
219
264
|
};
|
|
220
265
|
}
|
|
221
266
|
readLock(fn, options) {
|
|
222
|
-
return
|
|
267
|
+
return this.readMutex.runExclusive(async () => {
|
|
223
268
|
await this.initializedPromise;
|
|
224
|
-
return
|
|
225
|
-
}, options);
|
|
269
|
+
return fn(this.generateLockContext(this.readConnection));
|
|
270
|
+
}, web$1.timeoutSignal(options === null || options === void 0 ? void 0 : options.timeoutMs));
|
|
226
271
|
}
|
|
227
272
|
writeLock(fn, options) {
|
|
228
|
-
return
|
|
273
|
+
return this.writeMutex.runExclusive(async () => {
|
|
229
274
|
var _a;
|
|
230
275
|
await this.initializedPromise;
|
|
231
276
|
const result = await fn(this.generateLockContext(this.writeConnection));
|
|
@@ -242,7 +287,7 @@ class CapacitorConnectionPool extends web$1.BaseObserver {
|
|
|
242
287
|
};
|
|
243
288
|
this.iterateListeners((l) => { var _a; return (_a = l.tablesUpdated) === null || _a === void 0 ? void 0 : _a.call(l, notification); });
|
|
244
289
|
return result;
|
|
245
|
-
}, options);
|
|
290
|
+
}, web$1.timeoutSignal(options === null || options === void 0 ? void 0 : options.timeoutMs));
|
|
246
291
|
}
|
|
247
292
|
refreshSchema() {
|
|
248
293
|
return this.writeLock(async (writeTx) => {
|
|
@@ -263,6 +308,28 @@ class CapacitorConnectionPool extends web$1.BaseObserver {
|
|
|
263
308
|
class CapacitorSQLiteAdapter extends web$1.DBAdapterDefaultMixin(CapacitorConnectionPool) {
|
|
264
309
|
}
|
|
265
310
|
|
|
311
|
+
class CapacitorRemote extends web$1.WebRemote {
|
|
312
|
+
get supportsStreamingBinaryResponses() {
|
|
313
|
+
/**
|
|
314
|
+
* We'd like to avoid passing Binary buffers to SQLite when using
|
|
315
|
+
* iOS and Android for now. This is due to inefficient binary processing.
|
|
316
|
+
* Syncing using Buffers and Capacitor Community SQLite has been observed to be notably
|
|
317
|
+
* slower than the NDJSON option.
|
|
318
|
+
* Capacitor Community SQLite serializes Buffer objects, which causes slowdown
|
|
319
|
+
* ios: https://github.com/capacitor-community/sqlite/blob/f507a1e779688ea72b9d7e8744c647f7b688c568/ios/Plugin/CapacitorSQLite.swift#L888-L912
|
|
320
|
+
* android: https://github.com/capacitor-community/sqlite/blob/master/android/src/main/java/com/getcapacitor/community/database/sqlite/SQLite/UtilsSQLite.java#L141-L147
|
|
321
|
+
* As a rough guideline, the time to locally sync 10_000 small records was observed as:
|
|
322
|
+
* iOS:
|
|
323
|
+
* - NDJSON: 449ms
|
|
324
|
+
* - Binary: 68_982ms
|
|
325
|
+
* Android:
|
|
326
|
+
* - NDJSON: 452ms
|
|
327
|
+
* - Binary: 1_847ms
|
|
328
|
+
*/
|
|
329
|
+
return false;
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
|
|
266
333
|
const GLOBAL_MUTEX_STORE = new Map();
|
|
267
334
|
/**
|
|
268
335
|
* Used to identify multiple instances of CapacitorStreamingSyncImplementation
|
|
@@ -295,21 +362,17 @@ class CapacitorStreamingSyncImplementation extends web$1.AbstractStreamingSyncIm
|
|
|
295
362
|
GLOBAL_MUTEX_STORE.set(baseIdentifier, {
|
|
296
363
|
tracking: new Set([this.instanceId]),
|
|
297
364
|
locks: {
|
|
298
|
-
[web$1.LockType.CRUD]: new
|
|
299
|
-
[web$1.LockType.SYNC]: new
|
|
365
|
+
[web$1.LockType.CRUD]: new web$1.Mutex(),
|
|
366
|
+
[web$1.LockType.SYNC]: new web$1.Mutex()
|
|
300
367
|
}
|
|
301
368
|
});
|
|
302
369
|
}
|
|
303
370
|
const mutexRecord = GLOBAL_MUTEX_STORE.get(baseIdentifier);
|
|
304
371
|
mutexRecord.tracking.add(this.instanceId);
|
|
305
372
|
const mutex = mutexRecord.locks[lockOptions.type];
|
|
306
|
-
return
|
|
307
|
-
var _a;
|
|
308
|
-
if ((_a = lockOptions.signal) === null || _a === void 0 ? void 0 : _a.aborted) {
|
|
309
|
-
throw new Error('Aborted');
|
|
310
|
-
}
|
|
373
|
+
return mutex.runExclusive(async () => {
|
|
311
374
|
return await lockOptions.callback();
|
|
312
|
-
});
|
|
375
|
+
}, lockOptions.signal);
|
|
313
376
|
}
|
|
314
377
|
}
|
|
315
378
|
|
|
@@ -322,6 +385,23 @@ class CapacitorStreamingSyncImplementation extends web$1.AbstractStreamingSyncIm
|
|
|
322
385
|
* @alpha
|
|
323
386
|
*/
|
|
324
387
|
class PowerSyncDatabase extends web$1.PowerSyncDatabase {
|
|
388
|
+
/**
|
|
389
|
+
* Connects to stream of events from the PowerSync instance.
|
|
390
|
+
* {@link PowerSyncConnectionOptions#connectionMethod} defaults to WebSocket connection on Web platforms
|
|
391
|
+
* or HTTP connections if using {@link CapacitorSQLiteAdapter} - this is due to poor performance with
|
|
392
|
+
* the Capacitor Community SQLite library and binary payloads.
|
|
393
|
+
*/
|
|
394
|
+
connect(connector, options) {
|
|
395
|
+
var _a;
|
|
396
|
+
const isUsingCapacitorDriver = this.database instanceof CapacitorSQLiteAdapter;
|
|
397
|
+
const defaultConnectionMethod = isUsingCapacitorDriver
|
|
398
|
+
? web$1.SyncStreamConnectionMethod.HTTP
|
|
399
|
+
: web$1.DEFAULT_STREAM_CONNECTION_OPTIONS.connectionMethod;
|
|
400
|
+
if ((options === null || options === void 0 ? void 0 : options.connectionMethod) == web$1.SyncStreamConnectionMethod.WEB_SOCKET && isUsingCapacitorDriver) {
|
|
401
|
+
this.logger.warn(`Connecting via 'SyncStreamConnectionMethod.WEB_SOCKET' when using the 'CapacitorSQLiteAdapter' will result in poor sync performance. Use 'SyncStreamConnectionMethod.HTTP' (the default for native) instead.`);
|
|
402
|
+
}
|
|
403
|
+
return super.connect(connector, Object.assign(Object.assign({}, (options !== null && options !== void 0 ? options : {})), { connectionMethod: (_a = options === null || options === void 0 ? void 0 : options.connectionMethod) !== null && _a !== void 0 ? _a : defaultConnectionMethod }));
|
|
404
|
+
}
|
|
325
405
|
get isNativeCapacitorPlatform() {
|
|
326
406
|
const platform = core.Capacitor.getPlatform();
|
|
327
407
|
return platform == 'ios' || platform == 'android';
|
|
@@ -375,7 +455,7 @@ class PowerSyncDatabase extends web$1.PowerSyncDatabase {
|
|
|
375
455
|
if ((_a = this.options.flags) === null || _a === void 0 ? void 0 : _a.enableMultiTabs) {
|
|
376
456
|
this.logger.warn(`enableMultiTabs is not supported on Capacitor mobile platforms. Ignoring the flag.`);
|
|
377
457
|
}
|
|
378
|
-
const remote = new
|
|
458
|
+
const remote = new CapacitorRemote(connector, this.logger);
|
|
379
459
|
return new CapacitorStreamingSyncImplementation(Object.assign(Object.assign({}, this.options), { retryDelayMs: options.retryDelayMs, crudUploadThrottleMs: options.crudUploadThrottleMs, adapter: this.bucketStorageAdapter, remote, uploadCrud: async () => {
|
|
380
460
|
await this.waitForReady();
|
|
381
461
|
await connector.uploadData(this);
|
package/dist/plugin.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.cjs","sources":["esm/plugin/PowerSyncCore.js","esm/plugin/PowerSyncPlugin.js","esm/adapter/CapacitorSQLiteOpenFactory.js","esm/adapter/CapacitorSQLiteAdapter.js","esm/sync/CapacitorSyncImplementation.js","esm/PowerSyncDatabase.js","esm/plugin/web.js"],"sourcesContent":["import { registerPlugin } from '@capacitor/core';\nexport const PowerSyncCore = registerPlugin('PowerSync', {\n web: () => import('./web.js').then((m) => new m.PowerSyncWeb())\n});\n//# sourceMappingURL=PowerSyncCore.js.map","export const messageForErrorCode = (code) => {\n switch (code) {\n case 0:\n return 'Success';\n default:\n return `Extension registration failed with SQLite error code: ${code}`;\n }\n};\n//# sourceMappingURL=PowerSyncPlugin.js.map","import { CapacitorSQLiteAdapter } from './CapacitorSQLiteAdapter.js';\nvar SqliteSynchronous;\n(function (SqliteSynchronous) {\n SqliteSynchronous[\"normal\"] = \"NORMAL\";\n SqliteSynchronous[\"full\"] = \"FULL\";\n SqliteSynchronous[\"off\"] = \"OFF\";\n})(SqliteSynchronous || (SqliteSynchronous = {}));\nexport const DEFAULT_SQLITE_OPTIONS = {\n journalSizeLimit: 6 * 1024 * 1024,\n synchronous: SqliteSynchronous.normal,\n cacheSizeKb: 50 * 1024\n};\nexport class CapacitorSQLiteOpenFactory {\n constructor(options) {\n this.options = options;\n }\n openDB() {\n return new CapacitorSQLiteAdapter(this.options);\n }\n}\n//# sourceMappingURL=CapacitorSQLiteOpenFactory.js.map","import { CapacitorSQLite, SQLiteConnection } from '@capacitor-community/sqlite';\nimport { Capacitor } from '@capacitor/core';\nimport { BaseObserver, DBAdapterDefaultMixin, mutexRunExclusive } from '@powersync/web';\nimport { Mutex } from 'async-mutex';\nimport { PowerSyncCore } from '../plugin/PowerSyncCore.js';\nimport { messageForErrorCode } from '../plugin/PowerSyncPlugin.js';\nimport { DEFAULT_SQLITE_OPTIONS } from './CapacitorSQLiteOpenFactory.js';\n/**\n * Monitors the execution time of a query and logs it to the performance timeline.\n */\nasync function monitorQuery(sql, executor) {\n const start = performance.now();\n try {\n const r = await executor();\n performance.measure(`[SQL] ${sql}`, { start });\n return r;\n }\n catch (e) {\n performance.measure(`[SQL] [ERROR: ${e.message}] ${sql}`, { start });\n throw e;\n }\n}\nclass CapacitorConnectionPool extends BaseObserver {\n constructor(options) {\n super();\n this.options = options;\n this._writeConnection = null;\n this._readConnection = null;\n this.writeMutex = new Mutex();\n this.readMutex = new Mutex();\n this.initializedPromise = this.init();\n }\n get writeConnection() {\n if (!this._writeConnection) {\n throw new Error('Init not completed yet');\n }\n return this._writeConnection;\n }\n get readConnection() {\n if (!this._readConnection) {\n throw new Error('Init not completed yet');\n }\n return this._readConnection;\n }\n get name() {\n return this.options.dbFilename;\n }\n async init() {\n const { responseCode: registrationResponseCode } = await PowerSyncCore.registerCore();\n if (registrationResponseCode != 0) {\n throw new Error(`Could not register PowerSync core extension: ${messageForErrorCode(registrationResponseCode)}`);\n }\n const sqlite = new SQLiteConnection(CapacitorSQLite);\n // It seems like the isConnection and retrieveConnection methods\n // only check a JS side map of connections.\n // On hot reload this JS cache can be cleared, while the connection\n // still exists natively. and `createConnection` will fail if it already exists.\n await sqlite.closeConnection(this.options.dbFilename, false).catch(() => { });\n await sqlite.closeConnection(this.options.dbFilename, true).catch(() => { });\n // TODO support encryption eventually\n this._writeConnection = await sqlite.createConnection(this.options.dbFilename, false, 'no-encryption', 1, false);\n this._readConnection = await sqlite.createConnection(this.options.dbFilename, false, 'no-encryption', 1, true);\n await this._writeConnection.open();\n const { cacheSizeKb, journalSizeLimit, synchronous } = Object.assign(Object.assign({}, DEFAULT_SQLITE_OPTIONS), this.options.sqliteOptions);\n await this.writeConnection.query('PRAGMA journal_mode = WAL');\n await this.writeConnection.query(`PRAGMA journal_size_limit = ${journalSizeLimit}`);\n await this.writeConnection.query(`PRAGMA temp_store = memory`);\n await this.writeConnection.query(`PRAGMA synchronous = ${synchronous}`);\n await this.writeConnection.query(`PRAGMA cache_size = -${cacheSizeKb}`);\n await this._readConnection.open();\n const platform = Capacitor.getPlatform();\n if (platform == 'android') {\n /**\n * SQLCipher for Android enables dynamic loading of extensions.\n * On iOS we use a static auto extension registration.\n */\n const extensionQuery = \"SELECT load_extension('libpowersync.so', 'sqlite3_powersync_init')\";\n await this.writeConnection.query(extensionQuery);\n await this.readConnection.query(extensionQuery);\n }\n await this.writeConnection.query(\"SELECT powersync_update_hooks('install')\");\n }\n async close() {\n await this.initializedPromise;\n await this.writeConnection.close();\n await this.readConnection.close();\n }\n generateLockContext(db) {\n const _query = async (query, params = []) => {\n var _a;\n const result = await db.query(query, params);\n const arrayResult = (_a = result.values) !== null && _a !== void 0 ? _a : [];\n return {\n rowsAffected: 0,\n rows: {\n _array: arrayResult,\n length: arrayResult.length,\n item: (idx) => arrayResult[idx]\n }\n };\n };\n const _execute = async (query, params = []) => {\n var _a, _b, _c, _d, _e, _f, _g, _h;\n const platform = Capacitor.getPlatform();\n if (db.getConnectionReadOnly()) {\n return _query(query, params);\n }\n if (platform == 'android') {\n // Android: use query for SELECT and executeSet for mutations\n // We cannot use `run` here for both cases.\n if (query.toLowerCase().trim().startsWith('select')) {\n return _query(query, params);\n }\n else {\n const result = await db.executeSet([{ statement: query, values: params }], false);\n return {\n insertId: (_a = result.changes) === null || _a === void 0 ? void 0 : _a.lastId,\n rowsAffected: (_c = (_b = result.changes) === null || _b === void 0 ? void 0 : _b.changes) !== null && _c !== void 0 ? _c : 0,\n rows: {\n _array: [],\n length: 0,\n item: () => null\n }\n };\n }\n }\n // iOS (and other platforms): use run(\"all\")\n const result = await db.run(query, params, false, 'all');\n const resultSet = (_e = (_d = result.changes) === null || _d === void 0 ? void 0 : _d.values) !== null && _e !== void 0 ? _e : [];\n return {\n insertId: (_f = result.changes) === null || _f === void 0 ? void 0 : _f.lastId,\n rowsAffected: (_h = (_g = result.changes) === null || _g === void 0 ? void 0 : _g.changes) !== null && _h !== void 0 ? _h : 0,\n rows: {\n _array: resultSet,\n length: resultSet.length,\n item: (idx) => resultSet[idx]\n }\n };\n };\n const execute = this.options.debugMode\n ? (sql, params) => monitorQuery(sql, () => _execute(sql, params))\n : _execute;\n const executeQuery = this.options.debugMode\n ? (sql, params) => monitorQuery(sql, () => _query(sql, params))\n : _query;\n const getAll = async (query, params) => {\n var _a, _b;\n const result = await executeQuery(query, params);\n return (_b = (_a = result.rows) === null || _a === void 0 ? void 0 : _a._array) !== null && _b !== void 0 ? _b : [];\n };\n const getOptional = async (query, params) => {\n const results = await getAll(query, params);\n return results.length > 0 ? results[0] : null;\n };\n const get = async (query, params) => {\n const result = await getOptional(query, params);\n if (!result) {\n throw new Error(`No results for query: ${query}`);\n }\n return result;\n };\n const executeRaw = async (query, params) => {\n var _a, _b;\n // This is a workaround, we don't support multiple columns of the same name\n const results = await execute(query, params);\n return (_b = (_a = results.rows) === null || _a === void 0 ? void 0 : _a._array.map((row) => Object.values(row))) !== null && _b !== void 0 ? _b : [];\n };\n const executeBatch = async (query, params = []) => {\n var _a, _b, _c;\n let result = await db.executeSet(params.map((param) => ({\n statement: query,\n values: param\n })));\n return {\n rowsAffected: (_b = (_a = result.changes) === null || _a === void 0 ? void 0 : _a.changes) !== null && _b !== void 0 ? _b : 0,\n insertId: (_c = result.changes) === null || _c === void 0 ? void 0 : _c.lastId\n };\n };\n return {\n getAll,\n getOptional,\n get,\n executeRaw,\n execute,\n executeBatch\n };\n }\n readLock(fn, options) {\n return mutexRunExclusive(this.readMutex, async () => {\n await this.initializedPromise;\n return await fn(this.generateLockContext(this.readConnection));\n }, options);\n }\n writeLock(fn, options) {\n return mutexRunExclusive(this.writeMutex, async () => {\n var _a;\n await this.initializedPromise;\n const result = await fn(this.generateLockContext(this.writeConnection));\n // Fetch table updates\n const updates = await this.writeConnection.query(\"SELECT powersync_update_hooks('get') AS table_name\");\n const jsonUpdates = (_a = updates.values) === null || _a === void 0 ? void 0 : _a[0];\n if (!jsonUpdates || !jsonUpdates.table_name) {\n throw new Error('Could not fetch table updates');\n }\n const notification = {\n rawUpdates: [],\n tables: JSON.parse(jsonUpdates.table_name),\n groupedUpdates: {}\n };\n this.iterateListeners((l) => { var _a; return (_a = l.tablesUpdated) === null || _a === void 0 ? void 0 : _a.call(l, notification); });\n return result;\n }, options);\n }\n refreshSchema() {\n return this.writeLock(async (writeTx) => {\n return this.readLock(async (readTx) => {\n const updateQuery = `PRAGMA table_info('sqlite_master')`;\n await writeTx.get(updateQuery);\n await readTx.get(updateQuery);\n });\n });\n }\n}\n/**\n * An implementation of {@link DBAdapter} using the Capacitor Community SQLite [plugin](https://github.com/capacitor-community/sqlite).\n *\n * @experimental\n * @alpha This is currently experimental and may change without a major version bump.\n */\nexport class CapacitorSQLiteAdapter extends DBAdapterDefaultMixin(CapacitorConnectionPool) {\n}\n//# sourceMappingURL=CapacitorSQLiteAdapter.js.map","import { AbstractStreamingSyncImplementation, LockType, mutexRunExclusive } from '@powersync/web';\nimport { Mutex } from 'async-mutex';\nconst GLOBAL_MUTEX_STORE = new Map();\n/**\n * Used to identify multiple instances of CapacitorStreamingSyncImplementation\n */\nlet _CAPACITOR_STREAMING_SYNC_SEQUENCE = 0;\nexport class CapacitorStreamingSyncImplementation extends AbstractStreamingSyncImplementation {\n constructor() {\n super(...arguments);\n // A unique ID for tacking this specific instance of CapacitorStreamingSyncImplementation\n this.instanceId = _CAPACITOR_STREAMING_SYNC_SEQUENCE++;\n }\n async dispose() {\n await super.dispose();\n // Clear up any global mutexes which aren't used anymore\n for (const mutexEntry of GLOBAL_MUTEX_STORE.entries()) {\n const [identifier, mutex] = mutexEntry;\n if (!mutex.tracking.has(this.instanceId)) {\n continue;\n }\n mutex.tracking.delete(this.instanceId);\n if (mutex.tracking.size == 0) {\n GLOBAL_MUTEX_STORE.delete(identifier);\n }\n }\n }\n async obtainLock(lockOptions) {\n // If we don't have an identifier for some reason (should not happen), we use a shared Mutex\n const { identifier: baseIdentifier = 'DEFAULT' } = this.options;\n if (!GLOBAL_MUTEX_STORE.has(baseIdentifier)) {\n GLOBAL_MUTEX_STORE.set(baseIdentifier, {\n tracking: new Set([this.instanceId]),\n locks: {\n [LockType.CRUD]: new Mutex(),\n [LockType.SYNC]: new Mutex()\n }\n });\n }\n const mutexRecord = GLOBAL_MUTEX_STORE.get(baseIdentifier);\n mutexRecord.tracking.add(this.instanceId);\n const mutex = mutexRecord.locks[lockOptions.type];\n return mutexRunExclusive(mutex, async () => {\n var _a;\n if ((_a = lockOptions.signal) === null || _a === void 0 ? void 0 : _a.aborted) {\n throw new Error('Aborted');\n }\n return await lockOptions.callback();\n });\n }\n}\n//# sourceMappingURL=CapacitorSyncImplementation.js.map","import { Capacitor } from '@capacitor/core';\nimport { MEMORY_TRIGGER_CLAIM_MANAGER, PowerSyncDatabase as WebPowerSyncDatabase, WebRemote } from '@powersync/web';\nimport { CapacitorSQLiteAdapter } from './adapter/CapacitorSQLiteAdapter.js';\nimport { CapacitorStreamingSyncImplementation } from './sync/CapacitorSyncImplementation.js';\n/**\n * PowerSyncDatabase class for managing database connections and sync implementations.\n * This extends the WebPowerSyncDatabase to provide platform-specific implementations\n * for Capacitor environments (iOS and Android).\n *\n * @experimental\n * @alpha\n */\nexport class PowerSyncDatabase extends WebPowerSyncDatabase {\n get isNativeCapacitorPlatform() {\n const platform = Capacitor.getPlatform();\n return platform == 'ios' || platform == 'android';\n }\n openDBAdapter(options) {\n var _a, _b, _c;\n const platform = Capacitor.getPlatform();\n if (platform == 'ios' || platform == 'android') {\n if (options.database.dbLocation) {\n (_a = options.logger) === null || _a === void 0 ? void 0 : _a.warn(`\n dbLocation is ignored on iOS and Android platforms. \n The database directory can be configured in the Capacitor project.\n See https://github.com/capacitor-community/sqlite?tab=readme-ov-file#installation`);\n }\n (_b = options.logger) === null || _b === void 0 ? void 0 : _b.debug(`Using CapacitorSQLiteAdapter for platform: ${platform}`);\n return new CapacitorSQLiteAdapter(Object.assign({}, options.database));\n }\n else {\n (_c = options.logger) === null || _c === void 0 ? void 0 : _c.debug(`Using default web adapter for web platform`);\n return super.openDBAdapter(options);\n }\n }\n generateTriggerManagerConfig() {\n const config = super.generateTriggerManagerConfig();\n if (this.isNativeCapacitorPlatform) {\n /**\n * We usually only ever have a single tab for capacitor.\n * Avoiding navigator locks allows insecure contexts (during development).\n */\n config.claimManager = MEMORY_TRIGGER_CLAIM_MANAGER;\n }\n return config;\n }\n runExclusive(cb) {\n if (this.isNativeCapacitorPlatform) {\n // Use mutex for mobile platforms.\n // This is mainly for testing purposes since navigator.locks require secure contexts.\n return this.runExclusiveMutex.runExclusive(cb);\n }\n else {\n // Use navigator.locks for web platform\n return super.runExclusive(cb);\n }\n }\n generateSyncStreamImplementation(connector, options) {\n var _a;\n if (this.isNativeCapacitorPlatform) {\n // We don't want to support multi-tab on mobile platforms.\n // We technically can, but it's not a common use case and requires additional work/testing.\n this.logger.debug(`Using Capacitor sync implementation`);\n if ((_a = this.options.flags) === null || _a === void 0 ? void 0 : _a.enableMultiTabs) {\n this.logger.warn(`enableMultiTabs is not supported on Capacitor mobile platforms. Ignoring the flag.`);\n }\n const remote = new WebRemote(connector, this.logger);\n return new CapacitorStreamingSyncImplementation(Object.assign(Object.assign({}, this.options), { retryDelayMs: options.retryDelayMs, crudUploadThrottleMs: options.crudUploadThrottleMs, adapter: this.bucketStorageAdapter, remote, uploadCrud: async () => {\n await this.waitForReady();\n await connector.uploadData(this);\n }, identifier: this.database.name, logger: this.logger, subscriptions: options.subscriptions }));\n }\n else {\n this.logger.debug(`Using default web sync implementation for web platform`);\n return super.generateSyncStreamImplementation(connector, options);\n }\n }\n}\n//# sourceMappingURL=PowerSyncDatabase.js.map","import { WebPlugin } from '@capacitor/core';\nexport class PowerSyncWeb extends WebPlugin {\n async registerCore() {\n throw new Error('This code path is not supported on web.');\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["registerPlugin","BaseObserver","Mutex","sqlite","SQLiteConnection","CapacitorSQLite","Capacitor","mutexRunExclusive","DBAdapterDefaultMixin","AbstractStreamingSyncImplementation","LockType","WebPowerSyncDatabase","MEMORY_TRIGGER_CLAIM_MANAGER","WebRemote","WebPlugin"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"plugin.cjs","sources":["esm/plugin/PowerSyncCore.js","esm/plugin/PowerSyncPlugin.js","esm/adapter/CapacitorSQLiteOpenFactory.js","esm/adapter/CapacitorSQLiteAdapter.js","esm/sync/CapacitorRemote.js","esm/sync/CapacitorSyncImplementation.js","esm/PowerSyncDatabase.js","esm/plugin/web.js"],"sourcesContent":["import { registerPlugin } from '@capacitor/core';\nexport const PowerSyncCore = registerPlugin('PowerSync', {\n web: () => import('./web.js').then((m) => new m.PowerSyncWeb())\n});\n//# sourceMappingURL=PowerSyncCore.js.map","export const messageForErrorCode = (code) => {\n switch (code) {\n case 0:\n return 'Success';\n default:\n return `Extension registration failed with SQLite error code: ${code}`;\n }\n};\n//# sourceMappingURL=PowerSyncPlugin.js.map","import { CapacitorSQLiteAdapter } from './CapacitorSQLiteAdapter.js';\nvar SqliteSynchronous;\n(function (SqliteSynchronous) {\n SqliteSynchronous[\"normal\"] = \"NORMAL\";\n SqliteSynchronous[\"full\"] = \"FULL\";\n SqliteSynchronous[\"off\"] = \"OFF\";\n})(SqliteSynchronous || (SqliteSynchronous = {}));\nexport const DEFAULT_SQLITE_OPTIONS = {\n journalSizeLimit: 6 * 1024 * 1024,\n synchronous: SqliteSynchronous.normal,\n cacheSizeKb: 50 * 1024\n};\nexport class CapacitorSQLiteOpenFactory {\n constructor(options) {\n this.options = options;\n }\n openDB() {\n return new CapacitorSQLiteAdapter(this.options);\n }\n}\n//# sourceMappingURL=CapacitorSQLiteOpenFactory.js.map","import { CapacitorSQLite, SQLiteConnection } from '@capacitor-community/sqlite';\nimport { Capacitor } from '@capacitor/core';\nimport { BaseObserver, DBAdapterDefaultMixin, Mutex, timeoutSignal } from '@powersync/web';\nimport { PowerSyncCore } from '../plugin/PowerSyncCore.js';\nimport { messageForErrorCode } from '../plugin/PowerSyncPlugin.js';\nimport { DEFAULT_SQLITE_OPTIONS } from './CapacitorSQLiteOpenFactory.js';\n/**\n * Monitors the execution time of a query and logs it to the performance timeline.\n */\nasync function monitorQuery(sql, executor) {\n const start = performance.now();\n try {\n const r = await executor();\n performance.measure(`[SQL] ${sql}`, { start });\n return r;\n }\n catch (e) {\n performance.measure(`[SQL] [ERROR: ${e.message}] ${sql}`, { start });\n throw e;\n }\n}\n/**\n * Maps SQLite query parameter values to Capacitor Community supported formats.\n * This handles binary payloads for both iOS and Android.\n */\nfunction mapSQLiteParameterValues({ platform, values }) {\n return values.map((value) => {\n if (value instanceof Uint8Array) {\n switch (platform) {\n case 'ios': {\n /**\n * The Buffer polyfill, used in @powersync/common, is a Uint8Array subclass which defines additional fields like\n * `_isBuffer` and `parent` on its `prototype`. The additional fields are serialized when passed through the native bridge.\n * The Capacitor Community SQLite library expects a dictionary of indexes to numerical bytes.\n * The additional fields (which are not an index to numerical byte mapping) cause the parsing logic in the SQLite library to throw an error:\n * \"Error in reading buffer\".\n *\n * Re-wrapping the same backing buffer as a plain Uint8Array removes the Buffer subclass wrapper\n * while keeping the same underlying bytes. This creates a new view, not a byte copy, so the\n * overhead should be minimal.\n */\n return new Uint8Array(value.buffer, value.byteOffset, value.byteLength);\n }\n case 'android': {\n /**\n * Android expects an object of the form:\n * { type: 'Buffer', data: [...]}\n */\n return {\n type: 'Buffer',\n data: Array.from(value)\n };\n }\n }\n }\n // return value as-is\n return value;\n });\n}\nclass CapacitorConnectionPool extends BaseObserver {\n constructor(options) {\n super();\n this.options = options;\n this._writeConnection = null;\n this._readConnection = null;\n this.writeMutex = new Mutex();\n this.readMutex = new Mutex();\n this.initializedPromise = this.init();\n }\n get writeConnection() {\n if (!this._writeConnection) {\n throw new Error('Init not completed yet');\n }\n return this._writeConnection;\n }\n get readConnection() {\n if (!this._readConnection) {\n throw new Error('Init not completed yet');\n }\n return this._readConnection;\n }\n get name() {\n return this.options.dbFilename;\n }\n async init() {\n const { responseCode: registrationResponseCode } = await PowerSyncCore.registerCore();\n if (registrationResponseCode != 0) {\n throw new Error(`Could not register PowerSync core extension: ${messageForErrorCode(registrationResponseCode)}`);\n }\n const sqlite = new SQLiteConnection(CapacitorSQLite);\n // It seems like the isConnection and retrieveConnection methods\n // only check a JS side map of connections.\n // On hot reload this JS cache can be cleared, while the connection\n // still exists natively. and `createConnection` will fail if it already exists.\n await sqlite.closeConnection(this.options.dbFilename, false).catch(() => { });\n await sqlite.closeConnection(this.options.dbFilename, true).catch(() => { });\n // TODO support encryption eventually\n this._writeConnection = await sqlite.createConnection(this.options.dbFilename, false, 'no-encryption', 1, false);\n this._readConnection = await sqlite.createConnection(this.options.dbFilename, false, 'no-encryption', 1, true);\n await this._writeConnection.open();\n const { cacheSizeKb, journalSizeLimit, synchronous } = Object.assign(Object.assign({}, DEFAULT_SQLITE_OPTIONS), this.options.sqliteOptions);\n await this.writeConnection.query('PRAGMA journal_mode = WAL');\n await this.writeConnection.query(`PRAGMA journal_size_limit = ${journalSizeLimit}`);\n await this.writeConnection.query(`PRAGMA temp_store = memory`);\n await this.writeConnection.query(`PRAGMA synchronous = ${synchronous}`);\n await this.writeConnection.query(`PRAGMA cache_size = -${cacheSizeKb}`);\n await this._readConnection.open();\n const platform = Capacitor.getPlatform();\n if (platform == 'android') {\n /**\n * SQLCipher for Android enables dynamic loading of extensions.\n * On iOS we use a static auto extension registration.\n */\n const extensionQuery = \"SELECT load_extension('libpowersync.so', 'sqlite3_powersync_init')\";\n await this.writeConnection.query(extensionQuery);\n await this.readConnection.query(extensionQuery);\n }\n await this.writeConnection.query(\"SELECT powersync_update_hooks('install')\");\n }\n async close() {\n await this.initializedPromise;\n await this.writeConnection.close();\n await this.readConnection.close();\n }\n generateLockContext(db) {\n const _query = async (query, params = []) => {\n var _a;\n const mappedParams = mapSQLiteParameterValues({\n platform: Capacitor.getPlatform(),\n values: params\n });\n const result = await db.query(query, mappedParams);\n const arrayResult = (_a = result.values) !== null && _a !== void 0 ? _a : [];\n return {\n rowsAffected: 0,\n rows: {\n _array: arrayResult,\n length: arrayResult.length,\n item: (idx) => arrayResult[idx]\n }\n };\n };\n const _execute = async (query, params = []) => {\n var _a, _b, _c, _d, _e, _f, _g, _h;\n const platform = Capacitor.getPlatform();\n if (db.getConnectionReadOnly() ||\n // Android: use query for SELECT and executeSet for mutations\n // We cannot use `run` here for both cases.\n (platform == 'android' && query.toLowerCase().trim().startsWith('select'))) {\n return _query(query, params);\n }\n const mappedParams = mapSQLiteParameterValues({\n platform,\n values: params\n });\n if (platform == 'android') {\n const result = await db.executeSet([{ statement: query, values: mappedParams }], false);\n return {\n insertId: (_a = result.changes) === null || _a === void 0 ? void 0 : _a.lastId,\n rowsAffected: (_c = (_b = result.changes) === null || _b === void 0 ? void 0 : _b.changes) !== null && _c !== void 0 ? _c : 0,\n rows: {\n _array: [],\n length: 0,\n item: () => null\n }\n };\n }\n // iOS (and other platforms): use run(\"all\")\n const result = await db.run(query, mappedParams, false, 'all');\n const resultSet = (_e = (_d = result.changes) === null || _d === void 0 ? void 0 : _d.values) !== null && _e !== void 0 ? _e : [];\n return {\n insertId: (_f = result.changes) === null || _f === void 0 ? void 0 : _f.lastId,\n rowsAffected: (_h = (_g = result.changes) === null || _g === void 0 ? void 0 : _g.changes) !== null && _h !== void 0 ? _h : 0,\n rows: {\n _array: resultSet,\n length: resultSet.length,\n item: (idx) => resultSet[idx]\n }\n };\n };\n const execute = this.options.debugMode\n ? (sql, params) => monitorQuery(sql, () => _execute(sql, params))\n : _execute;\n const executeQuery = this.options.debugMode\n ? (sql, params) => monitorQuery(sql, () => _query(sql, params))\n : _query;\n const getAll = async (query, params) => {\n var _a, _b;\n const result = await executeQuery(query, params);\n return (_b = (_a = result.rows) === null || _a === void 0 ? void 0 : _a._array) !== null && _b !== void 0 ? _b : [];\n };\n const getOptional = async (query, params) => {\n const results = await getAll(query, params);\n return results.length > 0 ? results[0] : null;\n };\n const get = async (query, params) => {\n const result = await getOptional(query, params);\n if (!result) {\n throw new Error(`No results for query: ${query}`);\n }\n return result;\n };\n const executeRaw = async (query, params) => {\n var _a, _b;\n // This is a workaround, we don't support multiple columns of the same name\n const results = await execute(query, params);\n return (_b = (_a = results.rows) === null || _a === void 0 ? void 0 : _a._array.map((row) => Object.values(row))) !== null && _b !== void 0 ? _b : [];\n };\n const executeBatch = async (query, params = []) => {\n var _a, _b, _c;\n const platform = Capacitor.getPlatform();\n let result = await db.executeSet(params.map((param) => ({\n statement: query,\n values: mapSQLiteParameterValues({\n platform,\n values: param\n })\n })));\n return {\n rowsAffected: (_b = (_a = result.changes) === null || _a === void 0 ? void 0 : _a.changes) !== null && _b !== void 0 ? _b : 0,\n insertId: (_c = result.changes) === null || _c === void 0 ? void 0 : _c.lastId\n };\n };\n return {\n getAll,\n getOptional,\n get,\n executeRaw,\n execute,\n executeBatch\n };\n }\n readLock(fn, options) {\n return this.readMutex.runExclusive(async () => {\n await this.initializedPromise;\n return fn(this.generateLockContext(this.readConnection));\n }, timeoutSignal(options === null || options === void 0 ? void 0 : options.timeoutMs));\n }\n writeLock(fn, options) {\n return this.writeMutex.runExclusive(async () => {\n var _a;\n await this.initializedPromise;\n const result = await fn(this.generateLockContext(this.writeConnection));\n // Fetch table updates\n const updates = await this.writeConnection.query(\"SELECT powersync_update_hooks('get') AS table_name\");\n const jsonUpdates = (_a = updates.values) === null || _a === void 0 ? void 0 : _a[0];\n if (!jsonUpdates || !jsonUpdates.table_name) {\n throw new Error('Could not fetch table updates');\n }\n const notification = {\n rawUpdates: [],\n tables: JSON.parse(jsonUpdates.table_name),\n groupedUpdates: {}\n };\n this.iterateListeners((l) => { var _a; return (_a = l.tablesUpdated) === null || _a === void 0 ? void 0 : _a.call(l, notification); });\n return result;\n }, timeoutSignal(options === null || options === void 0 ? void 0 : options.timeoutMs));\n }\n refreshSchema() {\n return this.writeLock(async (writeTx) => {\n return this.readLock(async (readTx) => {\n const updateQuery = `PRAGMA table_info('sqlite_master')`;\n await writeTx.get(updateQuery);\n await readTx.get(updateQuery);\n });\n });\n }\n}\n/**\n * An implementation of {@link DBAdapter} using the Capacitor Community SQLite [plugin](https://github.com/capacitor-community/sqlite).\n *\n * @experimental\n * @alpha This is currently experimental and may change without a major version bump.\n */\nexport class CapacitorSQLiteAdapter extends DBAdapterDefaultMixin(CapacitorConnectionPool) {\n}\n//# sourceMappingURL=CapacitorSQLiteAdapter.js.map","import { WebRemote } from '@powersync/web';\nexport class CapacitorRemote extends WebRemote {\n get supportsStreamingBinaryResponses() {\n /**\n * We'd like to avoid passing Binary buffers to SQLite when using\n * iOS and Android for now. This is due to inefficient binary processing.\n * Syncing using Buffers and Capacitor Community SQLite has been observed to be notably\n * slower than the NDJSON option.\n * Capacitor Community SQLite serializes Buffer objects, which causes slowdown\n * ios: https://github.com/capacitor-community/sqlite/blob/f507a1e779688ea72b9d7e8744c647f7b688c568/ios/Plugin/CapacitorSQLite.swift#L888-L912\n * android: https://github.com/capacitor-community/sqlite/blob/master/android/src/main/java/com/getcapacitor/community/database/sqlite/SQLite/UtilsSQLite.java#L141-L147\n * As a rough guideline, the time to locally sync 10_000 small records was observed as:\n * iOS:\n * - NDJSON: 449ms\n * - Binary: 68_982ms\n * Android:\n * - NDJSON: 452ms\n * - Binary: 1_847ms\n */\n return false;\n }\n}\n//# sourceMappingURL=CapacitorRemote.js.map","import { AbstractStreamingSyncImplementation, LockType, Mutex } from '@powersync/web';\nconst GLOBAL_MUTEX_STORE = new Map();\n/**\n * Used to identify multiple instances of CapacitorStreamingSyncImplementation\n */\nlet _CAPACITOR_STREAMING_SYNC_SEQUENCE = 0;\nexport class CapacitorStreamingSyncImplementation extends AbstractStreamingSyncImplementation {\n constructor() {\n super(...arguments);\n // A unique ID for tacking this specific instance of CapacitorStreamingSyncImplementation\n this.instanceId = _CAPACITOR_STREAMING_SYNC_SEQUENCE++;\n }\n async dispose() {\n await super.dispose();\n // Clear up any global mutexes which aren't used anymore\n for (const mutexEntry of GLOBAL_MUTEX_STORE.entries()) {\n const [identifier, mutex] = mutexEntry;\n if (!mutex.tracking.has(this.instanceId)) {\n continue;\n }\n mutex.tracking.delete(this.instanceId);\n if (mutex.tracking.size == 0) {\n GLOBAL_MUTEX_STORE.delete(identifier);\n }\n }\n }\n async obtainLock(lockOptions) {\n // If we don't have an identifier for some reason (should not happen), we use a shared Mutex\n const { identifier: baseIdentifier = 'DEFAULT' } = this.options;\n if (!GLOBAL_MUTEX_STORE.has(baseIdentifier)) {\n GLOBAL_MUTEX_STORE.set(baseIdentifier, {\n tracking: new Set([this.instanceId]),\n locks: {\n [LockType.CRUD]: new Mutex(),\n [LockType.SYNC]: new Mutex()\n }\n });\n }\n const mutexRecord = GLOBAL_MUTEX_STORE.get(baseIdentifier);\n mutexRecord.tracking.add(this.instanceId);\n const mutex = mutexRecord.locks[lockOptions.type];\n return mutex.runExclusive(async () => {\n return await lockOptions.callback();\n }, lockOptions.signal);\n }\n}\n//# sourceMappingURL=CapacitorSyncImplementation.js.map","import { Capacitor } from '@capacitor/core';\nimport { DEFAULT_STREAM_CONNECTION_OPTIONS, MEMORY_TRIGGER_CLAIM_MANAGER, SyncStreamConnectionMethod, PowerSyncDatabase as WebPowerSyncDatabase } from '@powersync/web';\nimport { CapacitorSQLiteAdapter } from './adapter/CapacitorSQLiteAdapter.js';\nimport { CapacitorRemote } from './sync/CapacitorRemote.js';\nimport { CapacitorStreamingSyncImplementation } from './sync/CapacitorSyncImplementation.js';\n/**\n * PowerSyncDatabase class for managing database connections and sync implementations.\n * This extends the WebPowerSyncDatabase to provide platform-specific implementations\n * for Capacitor environments (iOS and Android).\n *\n * @experimental\n * @alpha\n */\nexport class PowerSyncDatabase extends WebPowerSyncDatabase {\n /**\n * Connects to stream of events from the PowerSync instance.\n * {@link PowerSyncConnectionOptions#connectionMethod} defaults to WebSocket connection on Web platforms\n * or HTTP connections if using {@link CapacitorSQLiteAdapter} - this is due to poor performance with\n * the Capacitor Community SQLite library and binary payloads.\n */\n connect(connector, options) {\n var _a;\n const isUsingCapacitorDriver = this.database instanceof CapacitorSQLiteAdapter;\n const defaultConnectionMethod = isUsingCapacitorDriver\n ? SyncStreamConnectionMethod.HTTP\n : DEFAULT_STREAM_CONNECTION_OPTIONS.connectionMethod;\n if ((options === null || options === void 0 ? void 0 : options.connectionMethod) == SyncStreamConnectionMethod.WEB_SOCKET && isUsingCapacitorDriver) {\n this.logger.warn(`Connecting via 'SyncStreamConnectionMethod.WEB_SOCKET' when using the 'CapacitorSQLiteAdapter' will result in poor sync performance. Use 'SyncStreamConnectionMethod.HTTP' (the default for native) instead.`);\n }\n return super.connect(connector, Object.assign(Object.assign({}, (options !== null && options !== void 0 ? options : {})), { connectionMethod: (_a = options === null || options === void 0 ? void 0 : options.connectionMethod) !== null && _a !== void 0 ? _a : defaultConnectionMethod }));\n }\n get isNativeCapacitorPlatform() {\n const platform = Capacitor.getPlatform();\n return platform == 'ios' || platform == 'android';\n }\n openDBAdapter(options) {\n var _a, _b, _c;\n const platform = Capacitor.getPlatform();\n if (platform == 'ios' || platform == 'android') {\n if (options.database.dbLocation) {\n (_a = options.logger) === null || _a === void 0 ? void 0 : _a.warn(`\n dbLocation is ignored on iOS and Android platforms. \n The database directory can be configured in the Capacitor project.\n See https://github.com/capacitor-community/sqlite?tab=readme-ov-file#installation`);\n }\n (_b = options.logger) === null || _b === void 0 ? void 0 : _b.debug(`Using CapacitorSQLiteAdapter for platform: ${platform}`);\n return new CapacitorSQLiteAdapter(Object.assign({}, options.database));\n }\n else {\n (_c = options.logger) === null || _c === void 0 ? void 0 : _c.debug(`Using default web adapter for web platform`);\n return super.openDBAdapter(options);\n }\n }\n generateTriggerManagerConfig() {\n const config = super.generateTriggerManagerConfig();\n if (this.isNativeCapacitorPlatform) {\n /**\n * We usually only ever have a single tab for capacitor.\n * Avoiding navigator locks allows insecure contexts (during development).\n */\n config.claimManager = MEMORY_TRIGGER_CLAIM_MANAGER;\n }\n return config;\n }\n runExclusive(cb) {\n if (this.isNativeCapacitorPlatform) {\n // Use mutex for mobile platforms.\n // This is mainly for testing purposes since navigator.locks require secure contexts.\n return this.runExclusiveMutex.runExclusive(cb);\n }\n else {\n // Use navigator.locks for web platform\n return super.runExclusive(cb);\n }\n }\n generateSyncStreamImplementation(connector, options) {\n var _a;\n if (this.isNativeCapacitorPlatform) {\n // We don't want to support multi-tab on mobile platforms.\n // We technically can, but it's not a common use case and requires additional work/testing.\n this.logger.debug(`Using Capacitor sync implementation`);\n if ((_a = this.options.flags) === null || _a === void 0 ? void 0 : _a.enableMultiTabs) {\n this.logger.warn(`enableMultiTabs is not supported on Capacitor mobile platforms. Ignoring the flag.`);\n }\n const remote = new CapacitorRemote(connector, this.logger);\n return new CapacitorStreamingSyncImplementation(Object.assign(Object.assign({}, this.options), { retryDelayMs: options.retryDelayMs, crudUploadThrottleMs: options.crudUploadThrottleMs, adapter: this.bucketStorageAdapter, remote, uploadCrud: async () => {\n await this.waitForReady();\n await connector.uploadData(this);\n }, identifier: this.database.name, logger: this.logger, subscriptions: options.subscriptions }));\n }\n else {\n this.logger.debug(`Using default web sync implementation for web platform`);\n return super.generateSyncStreamImplementation(connector, options);\n }\n }\n}\n//# sourceMappingURL=PowerSyncDatabase.js.map","import { WebPlugin } from '@capacitor/core';\nexport class PowerSyncWeb extends WebPlugin {\n async registerCore() {\n throw new Error('This code path is not supported on web.');\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["registerPlugin","BaseObserver","Mutex","sqlite","SQLiteConnection","CapacitorSQLite","Capacitor","timeoutSignal","DBAdapterDefaultMixin","WebRemote","AbstractStreamingSyncImplementation","LockType","WebPowerSyncDatabase","SyncStreamConnectionMethod","DEFAULT_STREAM_CONNECTION_OPTIONS","MEMORY_TRIGGER_CLAIM_MANAGER","WebPlugin"],"mappings":"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"}
|
package/dist/plugin.d.cts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import * as _powersync_web from '@powersync/web';
|
|
2
|
+
import { SQLOpenOptions, SQLOpenFactory, DBAdapter, DBLockOptions, QueryResult, LockContext, DBAdapterListener, BaseObserver, ConnectionPool, Mutex, PowerSyncDatabase as PowerSyncDatabase$1, PowerSyncBackendConnector, PowerSyncConnectionOptions, WebPowerSyncDatabaseOptionsWithSettings, TriggerManagerConfig, RequiredAdditionalConnectionOptions, StreamingSyncImplementation } from '@powersync/web';
|
|
1
3
|
import { SQLiteDBConnection } from '@capacitor-community/sqlite';
|
|
2
|
-
import { SQLOpenOptions, SQLOpenFactory, DBAdapter, Transaction, DBLockOptions, QueryResult, LockContext, DBAdapterListener, BaseObserver, ConnectionPool, PowerSyncDatabase as PowerSyncDatabase$1, WebPowerSyncDatabaseOptionsWithSettings, TriggerManagerConfig, PowerSyncBackendConnector, RequiredAdditionalConnectionOptions, StreamingSyncImplementation } from '@powersync/web';
|
|
3
|
-
import { Mutex } from 'async-mutex';
|
|
4
4
|
|
|
5
5
|
declare enum SqliteSynchronous {
|
|
6
6
|
normal = "NORMAL",
|
|
@@ -54,8 +54,8 @@ declare class CapacitorConnectionPool extends BaseObserver<DBAdapterListener> im
|
|
|
54
54
|
refreshSchema(): Promise<void>;
|
|
55
55
|
}
|
|
56
56
|
declare const CapacitorSQLiteAdapter_base: (new (...args: any[]) => {
|
|
57
|
-
readTransaction<T>(fn: (tx: Transaction) => Promise<T>, options?: DBLockOptions): Promise<T>;
|
|
58
|
-
writeTransaction<T>(fn: (tx: Transaction) => Promise<T>, options?: DBLockOptions): Promise<T>;
|
|
57
|
+
readTransaction<T>(fn: (tx: _powersync_web.Transaction) => Promise<T>, options?: DBLockOptions): Promise<T>;
|
|
58
|
+
writeTransaction<T>(fn: (tx: _powersync_web.Transaction) => Promise<T>, options?: DBLockOptions): Promise<T>;
|
|
59
59
|
getAll<T>(sql: string, parameters?: any[]): Promise<T[]>;
|
|
60
60
|
getOptional<T>(sql: string, parameters?: any[]): Promise<T | null>;
|
|
61
61
|
get<T>(sql: string, parameters?: any[]): Promise<T>;
|
|
@@ -87,6 +87,13 @@ declare class CapacitorSQLiteAdapter extends CapacitorSQLiteAdapter_base {
|
|
|
87
87
|
* @alpha
|
|
88
88
|
*/
|
|
89
89
|
declare class PowerSyncDatabase extends PowerSyncDatabase$1 {
|
|
90
|
+
/**
|
|
91
|
+
* Connects to stream of events from the PowerSync instance.
|
|
92
|
+
* {@link PowerSyncConnectionOptions#connectionMethod} defaults to WebSocket connection on Web platforms
|
|
93
|
+
* or HTTP connections if using {@link CapacitorSQLiteAdapter} - this is due to poor performance with
|
|
94
|
+
* the Capacitor Community SQLite library and binary payloads.
|
|
95
|
+
*/
|
|
96
|
+
connect(connector: PowerSyncBackendConnector, options?: PowerSyncConnectionOptions): Promise<void>;
|
|
90
97
|
protected get isNativeCapacitorPlatform(): boolean;
|
|
91
98
|
protected openDBAdapter(options: WebPowerSyncDatabaseOptionsWithSettings): DBAdapter;
|
|
92
99
|
protected generateTriggerManagerConfig(): TriggerManagerConfig;
|