@powersync/capacitor 0.5.1 → 0.5.2

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.
@@ -1,6 +1,5 @@
1
1
  import { SQLiteDBConnection } from '@capacitor-community/sqlite';
2
- import { BaseObserver, ConnectionPool, DBAdapterListener, DBLockOptions, LockContext, QueryResult, Transaction } from '@powersync/web';
3
- import { Mutex } from 'async-mutex';
2
+ import { BaseObserver, ConnectionPool, DBAdapterListener, DBLockOptions, LockContext, Mutex, QueryResult, Transaction } from '@powersync/web';
4
3
  import { CapacitorSQLiteOpenFactoryOptions } from './CapacitorSQLiteOpenFactory.js';
5
4
  declare class CapacitorConnectionPool extends BaseObserver<DBAdapterListener> implements ConnectionPool {
6
5
  protected options: CapacitorSQLiteOpenFactoryOptions;
@@ -1,7 +1,6 @@
1
1
  import { CapacitorSQLite, SQLiteConnection } from '@capacitor-community/sqlite';
2
2
  import { Capacitor } from '@capacitor/core';
3
- import { BaseObserver, DBAdapterDefaultMixin, mutexRunExclusive } from '@powersync/web';
4
- import { Mutex } from 'async-mutex';
3
+ import { BaseObserver, DBAdapterDefaultMixin, Mutex, timeoutSignal } from '@powersync/web';
5
4
  import { PowerSyncCore } from '../plugin/PowerSyncCore.js';
6
5
  import { messageForErrorCode } from '../plugin/PowerSyncPlugin.js';
7
6
  import { DEFAULT_SQLITE_OPTIONS } from './CapacitorSQLiteOpenFactory.js';
@@ -186,13 +185,13 @@ class CapacitorConnectionPool extends BaseObserver {
186
185
  };
187
186
  }
188
187
  readLock(fn, options) {
189
- return mutexRunExclusive(this.readMutex, async () => {
188
+ return this.readMutex.runExclusive(async () => {
190
189
  await this.initializedPromise;
191
- return await fn(this.generateLockContext(this.readConnection));
192
- }, options);
190
+ return fn(this.generateLockContext(this.readConnection));
191
+ }, timeoutSignal(options === null || options === void 0 ? void 0 : options.timeoutMs));
193
192
  }
194
193
  writeLock(fn, options) {
195
- return mutexRunExclusive(this.writeMutex, async () => {
194
+ return this.writeMutex.runExclusive(async () => {
196
195
  var _a;
197
196
  await this.initializedPromise;
198
197
  const result = await fn(this.generateLockContext(this.writeConnection));
@@ -209,7 +208,7 @@ class CapacitorConnectionPool extends BaseObserver {
209
208
  };
210
209
  this.iterateListeners((l) => { var _a; return (_a = l.tablesUpdated) === null || _a === void 0 ? void 0 : _a.call(l, notification); });
211
210
  return result;
212
- }, options);
211
+ }, timeoutSignal(options === null || options === void 0 ? void 0 : options.timeoutMs));
213
212
  }
214
213
  refreshSchema() {
215
214
  return this.writeLock(async (writeTx) => {
@@ -1 +1 @@
1
- {"version":3,"file":"CapacitorSQLiteAdapter.js","sourceRoot":"","sources":["../../../src/adapter/CapacitorSQLiteAdapter.ts"],"names":[],"mappings":"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","sourcesContent":["import { CapacitorSQLite, SQLiteConnection, SQLiteDBConnection } from '@capacitor-community/sqlite';\nimport { Capacitor } from '@capacitor/core';\n\nimport {\n BaseObserver,\n BatchedUpdateNotification,\n ConnectionPool,\n DBAdapter,\n DBAdapterDefaultMixin,\n DBAdapterListener,\n DBLockOptions,\n LockContext,\n mutexRunExclusive,\n QueryResult,\n Transaction\n} from '@powersync/web';\nimport { Mutex } from 'async-mutex';\nimport { PowerSyncCore } from '../plugin/PowerSyncCore.js';\nimport { messageForErrorCode } from '../plugin/PowerSyncPlugin.js';\nimport { CapacitorSQLiteOpenFactoryOptions, 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: string, executor: () => Promise<QueryResult>): Promise<QueryResult> {\n const start = performance.now();\n try {\n const r = await executor();\n performance.measure(`[SQL] ${sql}`, { start });\n return r;\n } catch (e: any) {\n performance.measure(`[SQL] [ERROR: ${e.message}] ${sql}`, { start });\n throw e;\n }\n}\n\nclass CapacitorConnectionPool extends BaseObserver<DBAdapterListener> implements ConnectionPool {\n protected _writeConnection: SQLiteDBConnection | null;\n protected _readConnection: SQLiteDBConnection | null;\n protected initializedPromise: Promise<void>;\n protected writeMutex: Mutex;\n protected readMutex: Mutex;\n\n constructor(protected options: CapacitorSQLiteOpenFactoryOptions) {\n super();\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\n protected get writeConnection(): SQLiteDBConnection {\n if (!this._writeConnection) {\n throw new Error('Init not completed yet');\n }\n return this._writeConnection;\n }\n\n protected get readConnection(): SQLiteDBConnection {\n if (!this._readConnection) {\n throw new Error('Init not completed yet');\n }\n return this._readConnection;\n }\n\n get name() {\n return this.options.dbFilename;\n }\n\n private 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\n const sqlite = new SQLiteConnection(CapacitorSQLite);\n\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\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\n await this._writeConnection.open();\n\n const { cacheSizeKb, journalSizeLimit, synchronous } = { ...DEFAULT_SQLITE_OPTIONS, ...this.options.sqliteOptions };\n\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\n await this._readConnection.open();\n\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\n async close(): Promise<void> {\n await this.initializedPromise;\n await this.writeConnection.close();\n await this.readConnection.close();\n }\n\n protected generateLockContext(db: SQLiteDBConnection): LockContext {\n const _query = async (query: string, params: any[] = []) => {\n const result = await db.query(query, params);\n const arrayResult = result.values ?? [];\n return {\n rowsAffected: 0,\n rows: {\n _array: arrayResult,\n length: arrayResult.length,\n item: (idx: number) => arrayResult[idx]\n }\n };\n };\n\n const _execute = async (query: string, params: any[] = []): Promise<QueryResult> => {\n const platform = Capacitor.getPlatform();\n\n if (db.getConnectionReadOnly()) {\n return _query(query, params);\n }\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 } else {\n const result = await db.executeSet([{ statement: query, values: params }], false);\n return {\n insertId: result.changes?.lastId,\n rowsAffected: result.changes?.changes ?? 0,\n rows: {\n _array: [],\n length: 0,\n item: () => null\n }\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 = result.changes?.values ?? [];\n return {\n insertId: result.changes?.lastId,\n rowsAffected: result.changes?.changes ?? 0,\n rows: {\n _array: resultSet,\n length: resultSet.length,\n item: (idx) => resultSet[idx]\n }\n };\n };\n\n const execute = this.options.debugMode\n ? (sql: string, params?: any[]) => monitorQuery(sql, () => _execute(sql, params))\n : _execute;\n\n const executeQuery = this.options.debugMode\n ? (sql: string, params?: any[]) => monitorQuery(sql, () => _query(sql, params))\n : _query;\n\n const getAll = async <T>(query: string, params?: any[]): Promise<T[]> => {\n const result = await executeQuery(query, params);\n return result.rows?._array ?? ([] as T[]);\n };\n\n const getOptional = async <T>(query: string, params?: any[]): Promise<T | null> => {\n const results = await getAll<T>(query, params);\n return results.length > 0 ? results[0] : null;\n };\n\n const get = async <T>(query: string, params?: any[]): Promise<T> => {\n const result = await getOptional<T>(query, params);\n if (!result) {\n throw new Error(`No results for query: ${query}`);\n }\n return result;\n };\n\n const executeRaw = async (query: string, params?: any[]): Promise<any[][]> => {\n // This is a workaround, we don't support multiple columns of the same name\n const results = await execute(query, params);\n return results.rows?._array.map((row) => Object.values(row)) ?? [];\n };\n\n const executeBatch = async (query: string, params: any[][] = []): Promise<QueryResult> => {\n let result = await db.executeSet(\n params.map((param) => ({\n statement: query,\n values: param\n }))\n );\n\n return {\n rowsAffected: result.changes?.changes ?? 0,\n insertId: result.changes?.lastId\n };\n };\n\n return {\n getAll,\n getOptional,\n get,\n executeRaw,\n execute,\n executeBatch\n };\n }\n\n readLock<T>(fn: (tx: LockContext) => Promise<T>, options?: DBLockOptions): Promise<T> {\n return mutexRunExclusive(\n this.readMutex,\n async () => {\n await this.initializedPromise;\n return await fn(this.generateLockContext(this.readConnection));\n },\n options\n );\n }\n\n writeLock<T>(fn: (tx: LockContext) => Promise<T>, options?: DBLockOptions): Promise<T> {\n return mutexRunExclusive(\n this.writeMutex,\n async () => {\n await this.initializedPromise;\n const result = await fn(this.generateLockContext(this.writeConnection));\n\n // Fetch table updates\n const updates = await this.writeConnection.query(\"SELECT powersync_update_hooks('get') AS table_name\");\n const jsonUpdates = updates.values?.[0];\n if (!jsonUpdates || !jsonUpdates.table_name) {\n throw new Error('Could not fetch table updates');\n }\n const notification: BatchedUpdateNotification = {\n rawUpdates: [],\n tables: JSON.parse(jsonUpdates.table_name),\n groupedUpdates: {}\n };\n this.iterateListeners((l) => l.tablesUpdated?.(notification));\n return result;\n },\n options\n );\n }\n\n refreshSchema(): Promise<void> {\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/**\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"]}
1
+ {"version":3,"file":"CapacitorSQLiteAdapter.js","sourceRoot":"","sources":["../../../src/adapter/CapacitorSQLiteAdapter.ts"],"names":[],"mappings":"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","sourcesContent":["import { CapacitorSQLite, SQLiteConnection, SQLiteDBConnection } from '@capacitor-community/sqlite';\nimport { Capacitor } from '@capacitor/core';\n\nimport {\n BaseObserver,\n BatchedUpdateNotification,\n ConnectionPool,\n DBAdapter,\n DBAdapterDefaultMixin,\n DBAdapterListener,\n DBLockOptions,\n LockContext,\n Mutex,\n QueryResult,\n timeoutSignal,\n Transaction\n} from '@powersync/web';\nimport { PowerSyncCore } from '../plugin/PowerSyncCore.js';\nimport { messageForErrorCode } from '../plugin/PowerSyncPlugin.js';\nimport { CapacitorSQLiteOpenFactoryOptions, 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: string, executor: () => Promise<QueryResult>): Promise<QueryResult> {\n const start = performance.now();\n try {\n const r = await executor();\n performance.measure(`[SQL] ${sql}`, { start });\n return r;\n } catch (e: any) {\n performance.measure(`[SQL] [ERROR: ${e.message}] ${sql}`, { start });\n throw e;\n }\n}\n\nclass CapacitorConnectionPool extends BaseObserver<DBAdapterListener> implements ConnectionPool {\n protected _writeConnection: SQLiteDBConnection | null;\n protected _readConnection: SQLiteDBConnection | null;\n protected initializedPromise: Promise<void>;\n protected writeMutex: Mutex;\n protected readMutex: Mutex;\n\n constructor(protected options: CapacitorSQLiteOpenFactoryOptions) {\n super();\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\n protected get writeConnection(): SQLiteDBConnection {\n if (!this._writeConnection) {\n throw new Error('Init not completed yet');\n }\n return this._writeConnection;\n }\n\n protected get readConnection(): SQLiteDBConnection {\n if (!this._readConnection) {\n throw new Error('Init not completed yet');\n }\n return this._readConnection;\n }\n\n get name() {\n return this.options.dbFilename;\n }\n\n private 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\n const sqlite = new SQLiteConnection(CapacitorSQLite);\n\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\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\n await this._writeConnection.open();\n\n const { cacheSizeKb, journalSizeLimit, synchronous } = { ...DEFAULT_SQLITE_OPTIONS, ...this.options.sqliteOptions };\n\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\n await this._readConnection.open();\n\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\n async close(): Promise<void> {\n await this.initializedPromise;\n await this.writeConnection.close();\n await this.readConnection.close();\n }\n\n protected generateLockContext(db: SQLiteDBConnection): LockContext {\n const _query = async (query: string, params: any[] = []) => {\n const result = await db.query(query, params);\n const arrayResult = result.values ?? [];\n return {\n rowsAffected: 0,\n rows: {\n _array: arrayResult,\n length: arrayResult.length,\n item: (idx: number) => arrayResult[idx]\n }\n };\n };\n\n const _execute = async (query: string, params: any[] = []): Promise<QueryResult> => {\n const platform = Capacitor.getPlatform();\n\n if (db.getConnectionReadOnly()) {\n return _query(query, params);\n }\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 } else {\n const result = await db.executeSet([{ statement: query, values: params }], false);\n return {\n insertId: result.changes?.lastId,\n rowsAffected: result.changes?.changes ?? 0,\n rows: {\n _array: [],\n length: 0,\n item: () => null\n }\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 = result.changes?.values ?? [];\n return {\n insertId: result.changes?.lastId,\n rowsAffected: result.changes?.changes ?? 0,\n rows: {\n _array: resultSet,\n length: resultSet.length,\n item: (idx) => resultSet[idx]\n }\n };\n };\n\n const execute = this.options.debugMode\n ? (sql: string, params?: any[]) => monitorQuery(sql, () => _execute(sql, params))\n : _execute;\n\n const executeQuery = this.options.debugMode\n ? (sql: string, params?: any[]) => monitorQuery(sql, () => _query(sql, params))\n : _query;\n\n const getAll = async <T>(query: string, params?: any[]): Promise<T[]> => {\n const result = await executeQuery(query, params);\n return result.rows?._array ?? ([] as T[]);\n };\n\n const getOptional = async <T>(query: string, params?: any[]): Promise<T | null> => {\n const results = await getAll<T>(query, params);\n return results.length > 0 ? results[0] : null;\n };\n\n const get = async <T>(query: string, params?: any[]): Promise<T> => {\n const result = await getOptional<T>(query, params);\n if (!result) {\n throw new Error(`No results for query: ${query}`);\n }\n return result;\n };\n\n const executeRaw = async (query: string, params?: any[]): Promise<any[][]> => {\n // This is a workaround, we don't support multiple columns of the same name\n const results = await execute(query, params);\n return results.rows?._array.map((row) => Object.values(row)) ?? [];\n };\n\n const executeBatch = async (query: string, params: any[][] = []): Promise<QueryResult> => {\n let result = await db.executeSet(\n params.map((param) => ({\n statement: query,\n values: param\n }))\n );\n\n return {\n rowsAffected: result.changes?.changes ?? 0,\n insertId: result.changes?.lastId\n };\n };\n\n return {\n getAll,\n getOptional,\n get,\n executeRaw,\n execute,\n executeBatch\n };\n }\n\n readLock<T>(fn: (tx: LockContext) => Promise<T>, options?: DBLockOptions): Promise<T> {\n return this.readMutex.runExclusive(async () => {\n await this.initializedPromise;\n return fn(this.generateLockContext(this.readConnection));\n }, timeoutSignal(options?.timeoutMs));\n }\n\n writeLock<T>(fn: (tx: LockContext) => Promise<T>, options?: DBLockOptions): Promise<T> {\n return this.writeMutex.runExclusive(async () => {\n await this.initializedPromise;\n const result = await fn(this.generateLockContext(this.writeConnection));\n\n // Fetch table updates\n const updates = await this.writeConnection.query(\"SELECT powersync_update_hooks('get') AS table_name\");\n const jsonUpdates = updates.values?.[0];\n if (!jsonUpdates || !jsonUpdates.table_name) {\n throw new Error('Could not fetch table updates');\n }\n const notification: BatchedUpdateNotification = {\n rawUpdates: [],\n tables: JSON.parse(jsonUpdates.table_name),\n groupedUpdates: {}\n };\n this.iterateListeners((l) => l.tablesUpdated?.(notification));\n return result;\n }, timeoutSignal(options?.timeoutMs));\n }\n\n refreshSchema(): Promise<void> {\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/**\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"]}
@@ -1,5 +1,4 @@
1
- import { AbstractStreamingSyncImplementation, LockType, mutexRunExclusive } from '@powersync/web';
2
- import { Mutex } from 'async-mutex';
1
+ import { AbstractStreamingSyncImplementation, LockType, Mutex } from '@powersync/web';
3
2
  const GLOBAL_MUTEX_STORE = new Map();
4
3
  /**
5
4
  * Used to identify multiple instances of CapacitorStreamingSyncImplementation
@@ -40,13 +39,9 @@ export class CapacitorStreamingSyncImplementation extends AbstractStreamingSyncI
40
39
  const mutexRecord = GLOBAL_MUTEX_STORE.get(baseIdentifier);
41
40
  mutexRecord.tracking.add(this.instanceId);
42
41
  const mutex = mutexRecord.locks[lockOptions.type];
43
- return mutexRunExclusive(mutex, async () => {
44
- var _a;
45
- if ((_a = lockOptions.signal) === null || _a === void 0 ? void 0 : _a.aborted) {
46
- throw new Error('Aborted');
47
- }
42
+ return mutex.runExclusive(async () => {
48
43
  return await lockOptions.callback();
49
- });
44
+ }, lockOptions.signal);
50
45
  }
51
46
  }
52
47
  //# sourceMappingURL=CapacitorSyncImplementation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CapacitorSyncImplementation.js","sourceRoot":"","sources":["../../../src/sync/CapacitorSyncImplementation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mCAAmC,EAAe,QAAQ,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAC/G,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAapC,MAAM,kBAAkB,GAA0B,IAAI,GAAG,EAAE,CAAC;AAE5D;;GAEG;AACH,IAAI,kCAAkC,GAAG,CAAC,CAAC;AAE3C,MAAM,OAAO,oCAAqC,SAAQ,mCAAmC;IAA7F;;QACE,yFAAyF;QAC/E,eAAU,GAAG,kCAAkC,EAAE,CAAC;IA0C9D,CAAC;IAxCC,KAAK,CAAC,OAAO;QACX,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;QAEtB,wDAAwD;QACxD,KAAK,MAAM,UAAU,IAAI,kBAAkB,CAAC,OAAO,EAAE,EAAE,CAAC;YACtD,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,GAAG,UAAU,CAAC;YACvC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;gBACzC,SAAS;YACX,CAAC;YACD,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACvC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC;gBAC7B,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU,CAAI,WAA2B;QAC7C,4FAA4F;QAC5F,MAAM,EAAE,UAAU,EAAE,cAAc,GAAG,SAAS,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QAChE,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;YAC5C,kBAAkB,CAAC,GAAG,CAAC,cAAc,EAAE;gBACrC,QAAQ,EAAE,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBACpC,KAAK,EAAE;oBACL,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,KAAK,EAAE;oBAC5B,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,KAAK,EAAE;iBAC7B;aACF,CAAC,CAAC;QACL,CAAC;QAED,MAAM,WAAW,GAAG,kBAAkB,CAAC,GAAG,CAAC,cAAc,CAAE,CAAC;QAC5D,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1C,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAElD,OAAO,iBAAiB,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE;;YACzC,IAAI,MAAA,WAAW,CAAC,MAAM,0CAAE,OAAO,EAAE,CAAC;gBAChC,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC;YAC7B,CAAC;YACD,OAAO,MAAM,WAAW,CAAC,QAAQ,EAAE,CAAC;QACtC,CAAC,CAAC,CAAC;IACL,CAAC;CACF","sourcesContent":["import { AbstractStreamingSyncImplementation, LockOptions, LockType, mutexRunExclusive } from '@powersync/web';\nimport { Mutex } from 'async-mutex';\n\ntype MutexMap = {\n /**\n * Used to track the consumers of this Mutex.\n * It should be safe to dispose the Mutex if this is empty.\n */\n tracking: Set<number>;\n locks: {\n [Type in LockType]: Mutex;\n };\n};\n\nconst GLOBAL_MUTEX_STORE: Map<string, MutexMap> = new Map();\n\n/**\n * Used to identify multiple instances of CapacitorStreamingSyncImplementation\n */\nlet _CAPACITOR_STREAMING_SYNC_SEQUENCE = 0;\n\nexport class CapacitorStreamingSyncImplementation extends AbstractStreamingSyncImplementation {\n // A unique ID for tacking this specific instance of CapacitorStreamingSyncImplementation\n protected instanceId = _CAPACITOR_STREAMING_SYNC_SEQUENCE++;\n\n async dispose(): Promise<void> {\n await super.dispose();\n\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\n async obtainLock<T>(lockOptions: LockOptions<T>): Promise<T> {\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\n const mutexRecord = GLOBAL_MUTEX_STORE.get(baseIdentifier)!;\n mutexRecord.tracking.add(this.instanceId);\n const mutex = mutexRecord.locks[lockOptions.type];\n\n return mutexRunExclusive(mutex, async () => {\n if (lockOptions.signal?.aborted) {\n throw new Error('Aborted');\n }\n return await lockOptions.callback();\n });\n }\n}\n"]}
1
+ {"version":3,"file":"CapacitorSyncImplementation.js","sourceRoot":"","sources":["../../../src/sync/CapacitorSyncImplementation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mCAAmC,EAAe,QAAQ,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAanG,MAAM,kBAAkB,GAA0B,IAAI,GAAG,EAAE,CAAC;AAE5D;;GAEG;AACH,IAAI,kCAAkC,GAAG,CAAC,CAAC;AAE3C,MAAM,OAAO,oCAAqC,SAAQ,mCAAmC;IAA7F;;QACE,yFAAyF;QAC/E,eAAU,GAAG,kCAAkC,EAAE,CAAC;IAuC9D,CAAC;IArCC,KAAK,CAAC,OAAO;QACX,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;QAEtB,wDAAwD;QACxD,KAAK,MAAM,UAAU,IAAI,kBAAkB,CAAC,OAAO,EAAE,EAAE,CAAC;YACtD,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,GAAG,UAAU,CAAC;YACvC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;gBACzC,SAAS;YACX,CAAC;YACD,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACvC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC;gBAC7B,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU,CAAI,WAA2B;QAC7C,4FAA4F;QAC5F,MAAM,EAAE,UAAU,EAAE,cAAc,GAAG,SAAS,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QAChE,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;YAC5C,kBAAkB,CAAC,GAAG,CAAC,cAAc,EAAE;gBACrC,QAAQ,EAAE,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBACpC,KAAK,EAAE;oBACL,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,KAAK,EAAE;oBAC5B,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,KAAK,EAAE;iBAC7B;aACF,CAAC,CAAC;QACL,CAAC;QAED,MAAM,WAAW,GAAG,kBAAkB,CAAC,GAAG,CAAC,cAAc,CAAE,CAAC;QAC5D,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1C,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAElD,OAAO,KAAK,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;YACnC,OAAO,MAAM,WAAW,CAAC,QAAQ,EAAE,CAAC;QACtC,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACzB,CAAC;CACF","sourcesContent":["import { AbstractStreamingSyncImplementation, LockOptions, LockType, Mutex } from '@powersync/web';\n\ntype MutexMap = {\n /**\n * Used to track the consumers of this Mutex.\n * It should be safe to dispose the Mutex if this is empty.\n */\n tracking: Set<number>;\n locks: {\n [Type in LockType]: Mutex;\n };\n};\n\nconst GLOBAL_MUTEX_STORE: Map<string, MutexMap> = new Map();\n\n/**\n * Used to identify multiple instances of CapacitorStreamingSyncImplementation\n */\nlet _CAPACITOR_STREAMING_SYNC_SEQUENCE = 0;\n\nexport class CapacitorStreamingSyncImplementation extends AbstractStreamingSyncImplementation {\n // A unique ID for tacking this specific instance of CapacitorStreamingSyncImplementation\n protected instanceId = _CAPACITOR_STREAMING_SYNC_SEQUENCE++;\n\n async dispose(): Promise<void> {\n await super.dispose();\n\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\n async obtainLock<T>(lockOptions: LockOptions<T>): Promise<T> {\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\n const mutexRecord = GLOBAL_MUTEX_STORE.get(baseIdentifier)!;\n mutexRecord.tracking.add(this.instanceId);\n const mutex = mutexRecord.locks[lockOptions.type];\n\n return mutex.runExclusive(async () => {\n return await lockOptions.callback();\n }, lockOptions.signal);\n }\n}\n"]}
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())
@@ -59,8 +58,8 @@ class CapacitorConnectionPool extends web$1.BaseObserver {
59
58
  this.options = options;
60
59
  this._writeConnection = null;
61
60
  this._readConnection = null;
62
- this.writeMutex = new asyncMutex.Mutex();
63
- this.readMutex = new asyncMutex.Mutex();
61
+ this.writeMutex = new web$1.Mutex();
62
+ this.readMutex = new web$1.Mutex();
64
63
  this.initializedPromise = this.init();
65
64
  }
66
65
  get writeConnection() {
@@ -219,13 +218,13 @@ class CapacitorConnectionPool extends web$1.BaseObserver {
219
218
  };
220
219
  }
221
220
  readLock(fn, options) {
222
- return web$1.mutexRunExclusive(this.readMutex, async () => {
221
+ return this.readMutex.runExclusive(async () => {
223
222
  await this.initializedPromise;
224
- return await fn(this.generateLockContext(this.readConnection));
225
- }, options);
223
+ return fn(this.generateLockContext(this.readConnection));
224
+ }, web$1.timeoutSignal(options === null || options === void 0 ? void 0 : options.timeoutMs));
226
225
  }
227
226
  writeLock(fn, options) {
228
- return web$1.mutexRunExclusive(this.writeMutex, async () => {
227
+ return this.writeMutex.runExclusive(async () => {
229
228
  var _a;
230
229
  await this.initializedPromise;
231
230
  const result = await fn(this.generateLockContext(this.writeConnection));
@@ -242,7 +241,7 @@ class CapacitorConnectionPool extends web$1.BaseObserver {
242
241
  };
243
242
  this.iterateListeners((l) => { var _a; return (_a = l.tablesUpdated) === null || _a === void 0 ? void 0 : _a.call(l, notification); });
244
243
  return result;
245
- }, options);
244
+ }, web$1.timeoutSignal(options === null || options === void 0 ? void 0 : options.timeoutMs));
246
245
  }
247
246
  refreshSchema() {
248
247
  return this.writeLock(async (writeTx) => {
@@ -295,21 +294,17 @@ class CapacitorStreamingSyncImplementation extends web$1.AbstractStreamingSyncIm
295
294
  GLOBAL_MUTEX_STORE.set(baseIdentifier, {
296
295
  tracking: new Set([this.instanceId]),
297
296
  locks: {
298
- [web$1.LockType.CRUD]: new asyncMutex.Mutex(),
299
- [web$1.LockType.SYNC]: new asyncMutex.Mutex()
297
+ [web$1.LockType.CRUD]: new web$1.Mutex(),
298
+ [web$1.LockType.SYNC]: new web$1.Mutex()
300
299
  }
301
300
  });
302
301
  }
303
302
  const mutexRecord = GLOBAL_MUTEX_STORE.get(baseIdentifier);
304
303
  mutexRecord.tracking.add(this.instanceId);
305
304
  const mutex = mutexRecord.locks[lockOptions.type];
306
- return web$1.mutexRunExclusive(mutex, async () => {
307
- var _a;
308
- if ((_a = lockOptions.signal) === null || _a === void 0 ? void 0 : _a.aborted) {
309
- throw new Error('Aborted');
310
- }
305
+ return mutex.runExclusive(async () => {
311
306
  return await lockOptions.callback();
312
- });
307
+ }, lockOptions.signal);
313
308
  }
314
309
  }
315
310
 
@@ -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/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}\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 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 { 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 { 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","timeoutSignal","DBAdapterDefaultMixin","AbstractStreamingSyncImplementation","LockType","WebPowerSyncDatabase","MEMORY_TRIGGER_CLAIM_MANAGER","WebRemote","WebPlugin"],"mappings":"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"}
package/dist/plugin.d.cts CHANGED
@@ -1,6 +1,5 @@
1
1
  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';
2
+ import { SQLOpenOptions, SQLOpenFactory, DBAdapter, Transaction, DBLockOptions, QueryResult, LockContext, DBAdapterListener, BaseObserver, ConnectionPool, Mutex, PowerSyncDatabase as PowerSyncDatabase$1, WebPowerSyncDatabaseOptionsWithSettings, TriggerManagerConfig, PowerSyncBackendConnector, RequiredAdditionalConnectionOptions, StreamingSyncImplementation } from '@powersync/web';
4
3
 
5
4
  declare enum SqliteSynchronous {
6
5
  normal = "NORMAL",
package/dist/plugin.js CHANGED
@@ -1,4 +1,4 @@
1
- var capacitorPowerSync = (function (exports, sqlite, core, web$1, asyncMutex) {
1
+ var capacitorPowerSync = (function (exports, sqlite, core, web$1) {
2
2
  'use strict';
3
3
 
4
4
  const PowerSyncCore = core.registerPlugin('PowerSync', {
@@ -55,8 +55,8 @@ var capacitorPowerSync = (function (exports, sqlite, core, web$1, asyncMutex) {
55
55
  this.options = options;
56
56
  this._writeConnection = null;
57
57
  this._readConnection = null;
58
- this.writeMutex = new asyncMutex.Mutex();
59
- this.readMutex = new asyncMutex.Mutex();
58
+ this.writeMutex = new web$1.Mutex();
59
+ this.readMutex = new web$1.Mutex();
60
60
  this.initializedPromise = this.init();
61
61
  }
62
62
  get writeConnection() {
@@ -215,13 +215,13 @@ var capacitorPowerSync = (function (exports, sqlite, core, web$1, asyncMutex) {
215
215
  };
216
216
  }
217
217
  readLock(fn, options) {
218
- return web$1.mutexRunExclusive(this.readMutex, async () => {
218
+ return this.readMutex.runExclusive(async () => {
219
219
  await this.initializedPromise;
220
- return await fn(this.generateLockContext(this.readConnection));
221
- }, options);
220
+ return fn(this.generateLockContext(this.readConnection));
221
+ }, web$1.timeoutSignal(options === null || options === void 0 ? void 0 : options.timeoutMs));
222
222
  }
223
223
  writeLock(fn, options) {
224
- return web$1.mutexRunExclusive(this.writeMutex, async () => {
224
+ return this.writeMutex.runExclusive(async () => {
225
225
  var _a;
226
226
  await this.initializedPromise;
227
227
  const result = await fn(this.generateLockContext(this.writeConnection));
@@ -238,7 +238,7 @@ var capacitorPowerSync = (function (exports, sqlite, core, web$1, asyncMutex) {
238
238
  };
239
239
  this.iterateListeners((l) => { var _a; return (_a = l.tablesUpdated) === null || _a === void 0 ? void 0 : _a.call(l, notification); });
240
240
  return result;
241
- }, options);
241
+ }, web$1.timeoutSignal(options === null || options === void 0 ? void 0 : options.timeoutMs));
242
242
  }
243
243
  refreshSchema() {
244
244
  return this.writeLock(async (writeTx) => {
@@ -291,21 +291,17 @@ var capacitorPowerSync = (function (exports, sqlite, core, web$1, asyncMutex) {
291
291
  GLOBAL_MUTEX_STORE.set(baseIdentifier, {
292
292
  tracking: new Set([this.instanceId]),
293
293
  locks: {
294
- [web$1.LockType.CRUD]: new asyncMutex.Mutex(),
295
- [web$1.LockType.SYNC]: new asyncMutex.Mutex()
294
+ [web$1.LockType.CRUD]: new web$1.Mutex(),
295
+ [web$1.LockType.SYNC]: new web$1.Mutex()
296
296
  }
297
297
  });
298
298
  }
299
299
  const mutexRecord = GLOBAL_MUTEX_STORE.get(baseIdentifier);
300
300
  mutexRecord.tracking.add(this.instanceId);
301
301
  const mutex = mutexRecord.locks[lockOptions.type];
302
- return web$1.mutexRunExclusive(mutex, async () => {
303
- var _a;
304
- if ((_a = lockOptions.signal) === null || _a === void 0 ? void 0 : _a.aborted) {
305
- throw new Error('Aborted');
306
- }
302
+ return mutex.runExclusive(async () => {
307
303
  return await lockOptions.callback();
308
- });
304
+ }, lockOptions.signal);
309
305
  }
310
306
  }
311
307
 
@@ -401,5 +397,5 @@ var capacitorPowerSync = (function (exports, sqlite, core, web$1, asyncMutex) {
401
397
 
402
398
  return exports;
403
399
 
404
- })({}, sqlite, capacitorExports, web$1, asyncMutex);
400
+ })({}, sqlite, capacitorExports, web$1);
405
401
  //# sourceMappingURL=plugin.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","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":";;;IACO,MAAM,aAAa,GAAGA,mBAAc,CAAC,WAAW,EAAE;IACzD,IAAI,GAAG,EAAE,MAAM,mDAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,YAAY,EAAE;IAClE,CAAC,CAAC;;ICHK,MAAM,mBAAmB,GAAG,CAAC,IAAI,KAAK;IAC7C,IAAI,QAAQ,IAAI;IAChB,QAAQ,KAAK,CAAC;IACd,YAAY,OAAO,SAAS;IAC5B,QAAQ;IACR,YAAY,OAAO,CAAC,sDAAsD,EAAE,IAAI,CAAC,CAAC;IAClF;IACA,CAAC;;ICND,IAAI,iBAAiB;IACrB,CAAC,UAAU,iBAAiB,EAAE;IAC9B,IAAI,iBAAiB,CAAC,QAAQ,CAAC,GAAG,QAAQ;IAC1C,IAAI,iBAAiB,CAAC,MAAM,CAAC,GAAG,MAAM;IACtC,IAAI,iBAAiB,CAAC,KAAK,CAAC,GAAG,KAAK;IACpC,CAAC,EAAE,iBAAiB,KAAK,iBAAiB,GAAG,EAAE,CAAC,CAAC;IAC1C,MAAM,sBAAsB,GAAG;IACtC,IAAI,gBAAgB,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI;IACrC,IAAI,WAAW,EAAE,iBAAiB,CAAC,MAAM;IACzC,IAAI,WAAW,EAAE,EAAE,GAAG;IACtB,CAAC;IACM,MAAM,0BAA0B,CAAC;IACxC,IAAI,WAAW,CAAC,OAAO,EAAE;IACzB,QAAQ,IAAI,CAAC,OAAO,GAAG,OAAO;IAC9B,IAAI;IACJ,IAAI,MAAM,GAAG;IACb,QAAQ,OAAO,IAAI,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC;IACvD,IAAI;IACJ;;ICZA;IACA;IACA;IACA,eAAe,YAAY,CAAC,GAAG,EAAE,QAAQ,EAAE;IAC3C,IAAI,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;IACnC,IAAI,IAAI;IACR,QAAQ,MAAM,CAAC,GAAG,MAAM,QAAQ,EAAE;IAClC,QAAQ,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC;IACtD,QAAQ,OAAO,CAAC;IAChB,IAAI;IACJ,IAAI,OAAO,CAAC,EAAE;IACd,QAAQ,WAAW,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC;IAC5E,QAAQ,MAAM,CAAC;IACf,IAAI;IACJ;IACA,MAAM,uBAAuB,SAASC,kBAAY,CAAC;IACnD,IAAI,WAAW,CAAC,OAAO,EAAE;IACzB,QAAQ,KAAK,EAAE;IACf,QAAQ,IAAI,CAAC,OAAO,GAAG,OAAO;IAC9B,QAAQ,IAAI,CAAC,gBAAgB,GAAG,IAAI;IACpC,QAAQ,IAAI,CAAC,eAAe,GAAG,IAAI;IACnC,QAAQ,IAAI,CAAC,UAAU,GAAG,IAAIC,gBAAK,EAAE;IACrC,QAAQ,IAAI,CAAC,SAAS,GAAG,IAAIA,gBAAK,EAAE;IACpC,QAAQ,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,IAAI,EAAE;IAC7C,IAAI;IACJ,IAAI,IAAI,eAAe,GAAG;IAC1B,QAAQ,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;IACpC,YAAY,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC;IACrD,QAAQ;IACR,QAAQ,OAAO,IAAI,CAAC,gBAAgB;IACpC,IAAI;IACJ,IAAI,IAAI,cAAc,GAAG;IACzB,QAAQ,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;IACnC,YAAY,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC;IACrD,QAAQ;IACR,QAAQ,OAAO,IAAI,CAAC,eAAe;IACnC,IAAI;IACJ,IAAI,IAAI,IAAI,GAAG;IACf,QAAQ,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU;IACtC,IAAI;IACJ,IAAI,MAAM,IAAI,GAAG;IACjB,QAAQ,MAAM,EAAE,YAAY,EAAE,wBAAwB,EAAE,GAAG,MAAM,aAAa,CAAC,YAAY,EAAE;IAC7F,QAAQ,IAAI,wBAAwB,IAAI,CAAC,EAAE;IAC3C,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,6CAA6C,EAAE,mBAAmB,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;IAC5H,QAAQ;IACR,QAAQ,MAAMC,QAAM,GAAG,IAAIC,uBAAgB,CAACC,sBAAe,CAAC;IAC5D;IACA;IACA;IACA;IACA,QAAQ,MAAMF,QAAM,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACrF,QAAQ,MAAMA,QAAM,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACpF;IACA,QAAQ,IAAI,CAAC,gBAAgB,GAAG,MAAMA,QAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,EAAE,KAAK,CAAC;IACxH,QAAQ,IAAI,CAAC,eAAe,GAAG,MAAMA,QAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,EAAE,IAAI,CAAC;IACtH,QAAQ,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE;IAC1C,QAAQ,MAAM,EAAE,WAAW,EAAE,gBAAgB,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,sBAAsB,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;IACnJ,QAAQ,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,2BAA2B,CAAC;IACrE,QAAQ,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,4BAA4B,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAC3F,QAAQ,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,0BAA0B,CAAC,CAAC;IACtE,QAAQ,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,qBAAqB,EAAE,WAAW,CAAC,CAAC,CAAC;IAC/E,QAAQ,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,qBAAqB,EAAE,WAAW,CAAC,CAAC,CAAC;IAC/E,QAAQ,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE;IACzC,QAAQ,MAAM,QAAQ,GAAGG,cAAS,CAAC,WAAW,EAAE;IAChD,QAAQ,IAAI,QAAQ,IAAI,SAAS,EAAE;IACnC;IACA;IACA;IACA;IACA,YAAY,MAAM,cAAc,GAAG,oEAAoE;IACvG,YAAY,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,cAAc,CAAC;IAC5D,YAAY,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,cAAc,CAAC;IAC3D,QAAQ;IACR,QAAQ,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,0CAA0C,CAAC;IACpF,IAAI;IACJ,IAAI,MAAM,KAAK,GAAG;IAClB,QAAQ,MAAM,IAAI,CAAC,kBAAkB;IACrC,QAAQ,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE;IAC1C,QAAQ,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;IACzC,IAAI;IACJ,IAAI,mBAAmB,CAAC,EAAE,EAAE;IAC5B,QAAQ,MAAM,MAAM,GAAG,OAAO,KAAK,EAAE,MAAM,GAAG,EAAE,KAAK;IACrD,YAAY,IAAI,EAAE;IAClB,YAAY,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC;IACxD,YAAY,MAAM,WAAW,GAAG,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,EAAE;IACxF,YAAY,OAAO;IACnB,gBAAgB,YAAY,EAAE,CAAC;IAC/B,gBAAgB,IAAI,EAAE;IACtB,oBAAoB,MAAM,EAAE,WAAW;IACvC,oBAAoB,MAAM,EAAE,WAAW,CAAC,MAAM;IAC9C,oBAAoB,IAAI,EAAE,CAAC,GAAG,KAAK,WAAW,CAAC,GAAG;IAClD;IACA,aAAa;IACb,QAAQ,CAAC;IACT,QAAQ,MAAM,QAAQ,GAAG,OAAO,KAAK,EAAE,MAAM,GAAG,EAAE,KAAK;IACvD,YAAY,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9C,YAAY,MAAM,QAAQ,GAAGA,cAAS,CAAC,WAAW,EAAE;IACpD,YAAY,IAAI,EAAE,CAAC,qBAAqB,EAAE,EAAE;IAC5C,gBAAgB,OAAO,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC;IAC5C,YAAY;IACZ,YAAY,IAAI,QAAQ,IAAI,SAAS,EAAE;IACvC;IACA;IACA,gBAAgB,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;IACrE,oBAAoB,OAAO,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC;IAChD,gBAAgB;IAChB,qBAAqB;IACrB,oBAAoB,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC;IACrG,oBAAoB,OAAO;IAC3B,wBAAwB,QAAQ,EAAE,CAAC,EAAE,GAAG,MAAM,CAAC,OAAO,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,MAAM;IACtG,wBAAwB,YAAY,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,MAAM,CAAC,OAAO,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,OAAO,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,CAAC;IACrJ,wBAAwB,IAAI,EAAE;IAC9B,4BAA4B,MAAM,EAAE,EAAE;IACtC,4BAA4B,MAAM,EAAE,CAAC;IACrC,4BAA4B,IAAI,EAAE,MAAM;IACxC;IACA,qBAAqB;IACrB,gBAAgB;IAChB,YAAY;IACZ;IACA,YAAY,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC;IACpE,YAAY,MAAM,SAAS,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,MAAM,CAAC,OAAO,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,MAAM,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,EAAE;IAC7I,YAAY,OAAO;IACnB,gBAAgB,QAAQ,EAAE,CAAC,EAAE,GAAG,MAAM,CAAC,OAAO,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,MAAM;IAC9F,gBAAgB,YAAY,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,MAAM,CAAC,OAAO,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,OAAO,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,CAAC;IAC7I,gBAAgB,IAAI,EAAE;IACtB,oBAAoB,MAAM,EAAE,SAAS;IACrC,oBAAoB,MAAM,EAAE,SAAS,CAAC,MAAM;IAC5C,oBAAoB,IAAI,EAAE,CAAC,GAAG,KAAK,SAAS,CAAC,GAAG;IAChD;IACA,aAAa;IACb,QAAQ,CAAC;IACT,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;IACrC,cAAc,CAAC,GAAG,EAAE,MAAM,KAAK,YAAY,CAAC,GAAG,EAAE,MAAM,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAC5E,cAAc,QAAQ;IACtB,QAAQ,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC;IAC1C,cAAc,CAAC,GAAG,EAAE,MAAM,KAAK,YAAY,CAAC,GAAG,EAAE,MAAM,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC;IAC1E,cAAc,MAAM;IACpB,QAAQ,MAAM,MAAM,GAAG,OAAO,KAAK,EAAE,MAAM,KAAK;IAChD,YAAY,IAAI,EAAE,EAAE,EAAE;IACtB,YAAY,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC;IAC5D,YAAY,OAAO,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,MAAM,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,EAAE;IAC/H,QAAQ,CAAC;IACT,QAAQ,MAAM,WAAW,GAAG,OAAO,KAAK,EAAE,MAAM,KAAK;IACrD,YAAY,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC;IACvD,YAAY,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI;IACzD,QAAQ,CAAC;IACT,QAAQ,MAAM,GAAG,GAAG,OAAO,KAAK,EAAE,MAAM,KAAK;IAC7C,YAAY,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC;IAC3D,YAAY,IAAI,CAAC,MAAM,EAAE;IACzB,gBAAgB,MAAM,IAAI,KAAK,CAAC,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC,CAAC;IACjE,YAAY;IACZ,YAAY,OAAO,MAAM;IACzB,QAAQ,CAAC;IACT,QAAQ,MAAM,UAAU,GAAG,OAAO,KAAK,EAAE,MAAM,KAAK;IACpD,YAAY,IAAI,EAAE,EAAE,EAAE;IACtB;IACA,YAAY,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;IACxD,YAAY,OAAO,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,EAAE;IACjK,QAAQ,CAAC;IACT,QAAQ,MAAM,YAAY,GAAG,OAAO,KAAK,EAAE,MAAM,GAAG,EAAE,KAAK;IAC3D,YAAY,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE;IAC1B,YAAY,IAAI,MAAM,GAAG,MAAM,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,MAAM;IACpE,gBAAgB,SAAS,EAAE,KAAK;IAChC,gBAAgB,MAAM,EAAE;IACxB,aAAa,CAAC,CAAC,CAAC;IAChB,YAAY,OAAO;IACnB,gBAAgB,YAAY,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,MAAM,CAAC,OAAO,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,OAAO,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,CAAC;IAC7I,gBAAgB,QAAQ,EAAE,CAAC,EAAE,GAAG,MAAM,CAAC,OAAO,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC;IACxF,aAAa;IACb,QAAQ,CAAC;IACT,QAAQ,OAAO;IACf,YAAY,MAAM;IAClB,YAAY,WAAW;IACvB,YAAY,GAAG;IACf,YAAY,UAAU;IACtB,YAAY,OAAO;IACnB,YAAY;IACZ,SAAS;IACT,IAAI;IACJ,IAAI,QAAQ,CAAC,EAAE,EAAE,OAAO,EAAE;IAC1B,QAAQ,OAAOC,uBAAiB,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY;IAC7D,YAAY,MAAM,IAAI,CAAC,kBAAkB;IACzC,YAAY,OAAO,MAAM,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC1E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI;IACJ,IAAI,SAAS,CAAC,EAAE,EAAE,OAAO,EAAE;IAC3B,QAAQ,OAAOA,uBAAiB,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY;IAC9D,YAAY,IAAI,EAAE;IAClB,YAAY,MAAM,IAAI,CAAC,kBAAkB;IACzC,YAAY,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACnF;IACA,YAAY,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,oDAAoD,CAAC;IAClH,YAAY,MAAM,WAAW,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC,MAAM,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC;IAChG,YAAY,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE;IACzD,gBAAgB,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC;IAChE,YAAY;IACZ,YAAY,MAAM,YAAY,GAAG;IACjC,gBAAgB,UAAU,EAAE,EAAE;IAC9B,gBAAgB,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC;IAC1D,gBAAgB,cAAc,EAAE;IAChC,aAAa;IACb,YAAY,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC,aAAa,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IAClJ,YAAY,OAAO,MAAM;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI;IACJ,IAAI,aAAa,GAAG;IACpB,QAAQ,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,OAAO,KAAK;IACjD,YAAY,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,MAAM,KAAK;IACnD,gBAAgB,MAAM,WAAW,GAAG,CAAC,kCAAkC,CAAC;IACxE,gBAAgB,MAAM,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;IAC9C,gBAAgB,MAAM,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC;IAC7C,YAAY,CAAC,CAAC;IACd,QAAQ,CAAC,CAAC;IACV,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA;IACO,MAAM,sBAAsB,SAASC,2BAAqB,CAAC,uBAAuB,CAAC,CAAC;IAC3F;;ICpOA,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAE;IACpC;IACA;IACA;IACA,IAAI,kCAAkC,GAAG,CAAC;IACnC,MAAM,oCAAoC,SAASC,yCAAmC,CAAC;IAC9F,IAAI,WAAW,GAAG;IAClB,QAAQ,KAAK,CAAC,GAAG,SAAS,CAAC;IAC3B;IACA,QAAQ,IAAI,CAAC,UAAU,GAAG,kCAAkC,EAAE;IAC9D,IAAI;IACJ,IAAI,MAAM,OAAO,GAAG;IACpB,QAAQ,MAAM,KAAK,CAAC,OAAO,EAAE;IAC7B;IACA,QAAQ,KAAK,MAAM,UAAU,IAAI,kBAAkB,CAAC,OAAO,EAAE,EAAE;IAC/D,YAAY,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,GAAG,UAAU;IAClD,YAAY,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;IACtD,gBAAgB;IAChB,YAAY;IACZ,YAAY,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;IAClD,YAAY,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,EAAE;IAC1C,gBAAgB,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC;IACrD,YAAY;IACZ,QAAQ;IACR,IAAI;IACJ,IAAI,MAAM,UAAU,CAAC,WAAW,EAAE;IAClC;IACA,QAAQ,MAAM,EAAE,UAAU,EAAE,cAAc,GAAG,SAAS,EAAE,GAAG,IAAI,CAAC,OAAO;IACvE,QAAQ,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE;IACrD,YAAY,kBAAkB,CAAC,GAAG,CAAC,cAAc,EAAE;IACnD,gBAAgB,QAAQ,EAAE,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACpD,gBAAgB,KAAK,EAAE;IACvB,oBAAoB,CAACC,cAAQ,CAAC,IAAI,GAAG,IAAIR,gBAAK,EAAE;IAChD,oBAAoB,CAACQ,cAAQ,CAAC,IAAI,GAAG,IAAIR,gBAAK;IAC9C;IACA,aAAa,CAAC;IACd,QAAQ;IACR,QAAQ,MAAM,WAAW,GAAG,kBAAkB,CAAC,GAAG,CAAC,cAAc,CAAC;IAClE,QAAQ,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;IACjD,QAAQ,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC;IACzD,QAAQ,OAAOK,uBAAiB,CAAC,KAAK,EAAE,YAAY;IACpD,YAAY,IAAI,EAAE;IAClB,YAAY,IAAI,CAAC,EAAE,GAAG,WAAW,CAAC,MAAM,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,OAAO,EAAE;IAC3F,gBAAgB,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC;IAC1C,YAAY;IACZ,YAAY,OAAO,MAAM,WAAW,CAAC,QAAQ,EAAE;IAC/C,QAAQ,CAAC,CAAC;IACV,IAAI;IACJ;;IC9CA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,MAAM,iBAAiB,SAASI,uBAAoB,CAAC;IAC5D,IAAI,IAAI,yBAAyB,GAAG;IACpC,QAAQ,MAAM,QAAQ,GAAGL,cAAS,CAAC,WAAW,EAAE;IAChD,QAAQ,OAAO,QAAQ,IAAI,KAAK,IAAI,QAAQ,IAAI,SAAS;IACzD,IAAI;IACJ,IAAI,aAAa,CAAC,OAAO,EAAE;IAC3B,QAAQ,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE;IACtB,QAAQ,MAAM,QAAQ,GAAGA,cAAS,CAAC,WAAW,EAAE;IAChD,QAAQ,IAAI,QAAQ,IAAI,KAAK,IAAI,QAAQ,IAAI,SAAS,EAAE;IACxD,YAAY,IAAI,OAAO,CAAC,QAAQ,CAAC,UAAU,EAAE;IAC7C,gBAAgB,CAAC,EAAE,GAAG,OAAO,CAAC,MAAM,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,IAAI,CAAC;AACnF;AACA;AACA,2FAA2F,CAAC,CAAC;IAC7F,YAAY;IACZ,YAAY,CAAC,EAAE,GAAG,OAAO,CAAC,MAAM,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,2CAA2C,EAAE,QAAQ,CAAC,CAAC,CAAC;IACzI,YAAY,OAAO,IAAI,sBAAsB,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAClF,QAAQ;IACR,aAAa;IACb,YAAY,CAAC,EAAE,GAAG,OAAO,CAAC,MAAM,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,0CAA0C,CAAC,CAAC;IAC7H,YAAY,OAAO,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC;IAC/C,QAAQ;IACR,IAAI;IACJ,IAAI,4BAA4B,GAAG;IACnC,QAAQ,MAAM,MAAM,GAAG,KAAK,CAAC,4BAA4B,EAAE;IAC3D,QAAQ,IAAI,IAAI,CAAC,yBAAyB,EAAE;IAC5C;IACA;IACA;IACA;IACA,YAAY,MAAM,CAAC,YAAY,GAAGM,kCAA4B;IAC9D,QAAQ;IACR,QAAQ,OAAO,MAAM;IACrB,IAAI;IACJ,IAAI,YAAY,CAAC,EAAE,EAAE;IACrB,QAAQ,IAAI,IAAI,CAAC,yBAAyB,EAAE;IAC5C;IACA;IACA,YAAY,OAAO,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,EAAE,CAAC;IAC1D,QAAQ;IACR,aAAa;IACb;IACA,YAAY,OAAO,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;IACzC,QAAQ;IACR,IAAI;IACJ,IAAI,gCAAgC,CAAC,SAAS,EAAE,OAAO,EAAE;IACzD,QAAQ,IAAI,EAAE;IACd,QAAQ,IAAI,IAAI,CAAC,yBAAyB,EAAE;IAC5C;IACA;IACA,YAAY,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,mCAAmC,CAAC,CAAC;IACpE,YAAY,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,eAAe,EAAE;IACnG,gBAAgB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,kFAAkF,CAAC,CAAC;IACtH,YAAY;IACZ,YAAY,MAAM,MAAM,GAAG,IAAIC,eAAS,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC;IAChE,YAAY,OAAO,IAAI,oCAAoC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,oBAAoB,EAAE,OAAO,CAAC,oBAAoB,EAAE,OAAO,EAAE,IAAI,CAAC,oBAAoB,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY;IACzQ,oBAAoB,MAAM,IAAI,CAAC,YAAY,EAAE;IAC7C,oBAAoB,MAAM,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC;IACpD,gBAAgB,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IAChH,QAAQ;IACR,aAAa;IACb,YAAY,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,sDAAsD,CAAC,CAAC;IACvF,YAAY,OAAO,KAAK,CAAC,gCAAgC,CAAC,SAAS,EAAE,OAAO,CAAC;IAC7E,QAAQ;IACR,IAAI;IACJ;;IC5EO,MAAM,YAAY,SAASC,cAAS,CAAC;IAC5C,IAAI,MAAM,YAAY,GAAG;IACzB,QAAQ,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC;IAClE,IAAI;IACJ;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"plugin.js","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, 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}\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 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 { 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 { 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","timeoutSignal","DBAdapterDefaultMixin","AbstractStreamingSyncImplementation","LockType","WebPowerSyncDatabase","MEMORY_TRIGGER_CLAIM_MANAGER","WebRemote","WebPlugin"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@powersync/capacitor",
3
- "version": "0.5.1",
3
+ "version": "0.5.2",
4
4
  "description": "Adds PowerSync Capacitor support for iOS/Android",
5
5
  "publishConfig": {
6
6
  "registry": "https://registry.npmjs.org/",
@@ -67,7 +67,7 @@
67
67
  },
68
68
  "peerDependencies": {
69
69
  "@capacitor-community/sqlite": "^7.0.2",
70
- "@powersync/web": "^1.36.0"
70
+ "@powersync/web": "^1.37.0"
71
71
  },
72
72
  "swiftlint": "@ionic/swiftlint-config",
73
73
  "capacitor": {
@@ -80,9 +80,6 @@
80
80
  "src": "android"
81
81
  }
82
82
  },
83
- "dependencies": {
84
- "async-mutex": "^0.5.0"
85
- },
86
83
  "scripts": {
87
84
  "verify": "pnpm verify:ios && pnpm verify:android && pnpm verify:web",
88
85
  "verify:ios": "cd example-app && npm install && cd ios/App && pod install && xcodebuild -workspace App.xcworkspace -scheme App -destination 'platform=iOS Simulator,name=iPhone 16,OS=latest'",
@@ -10,11 +10,11 @@ import {
10
10
  DBAdapterListener,
11
11
  DBLockOptions,
12
12
  LockContext,
13
- mutexRunExclusive,
13
+ Mutex,
14
14
  QueryResult,
15
+ timeoutSignal,
15
16
  Transaction
16
17
  } from '@powersync/web';
17
- import { Mutex } from 'async-mutex';
18
18
  import { PowerSyncCore } from '../plugin/PowerSyncCore.js';
19
19
  import { messageForErrorCode } from '../plugin/PowerSyncPlugin.js';
20
20
  import { CapacitorSQLiteOpenFactoryOptions, DEFAULT_SQLITE_OPTIONS } from './CapacitorSQLiteOpenFactory.js';
@@ -228,39 +228,31 @@ class CapacitorConnectionPool extends BaseObserver<DBAdapterListener> implements
228
228
  }
229
229
 
230
230
  readLock<T>(fn: (tx: LockContext) => Promise<T>, options?: DBLockOptions): Promise<T> {
231
- return mutexRunExclusive(
232
- this.readMutex,
233
- async () => {
234
- await this.initializedPromise;
235
- return await fn(this.generateLockContext(this.readConnection));
236
- },
237
- options
238
- );
231
+ return this.readMutex.runExclusive(async () => {
232
+ await this.initializedPromise;
233
+ return fn(this.generateLockContext(this.readConnection));
234
+ }, timeoutSignal(options?.timeoutMs));
239
235
  }
240
236
 
241
237
  writeLock<T>(fn: (tx: LockContext) => Promise<T>, options?: DBLockOptions): Promise<T> {
242
- return mutexRunExclusive(
243
- this.writeMutex,
244
- async () => {
245
- await this.initializedPromise;
246
- const result = await fn(this.generateLockContext(this.writeConnection));
247
-
248
- // Fetch table updates
249
- const updates = await this.writeConnection.query("SELECT powersync_update_hooks('get') AS table_name");
250
- const jsonUpdates = updates.values?.[0];
251
- if (!jsonUpdates || !jsonUpdates.table_name) {
252
- throw new Error('Could not fetch table updates');
253
- }
254
- const notification: BatchedUpdateNotification = {
255
- rawUpdates: [],
256
- tables: JSON.parse(jsonUpdates.table_name),
257
- groupedUpdates: {}
258
- };
259
- this.iterateListeners((l) => l.tablesUpdated?.(notification));
260
- return result;
261
- },
262
- options
263
- );
238
+ return this.writeMutex.runExclusive(async () => {
239
+ await this.initializedPromise;
240
+ const result = await fn(this.generateLockContext(this.writeConnection));
241
+
242
+ // Fetch table updates
243
+ const updates = await this.writeConnection.query("SELECT powersync_update_hooks('get') AS table_name");
244
+ const jsonUpdates = updates.values?.[0];
245
+ if (!jsonUpdates || !jsonUpdates.table_name) {
246
+ throw new Error('Could not fetch table updates');
247
+ }
248
+ const notification: BatchedUpdateNotification = {
249
+ rawUpdates: [],
250
+ tables: JSON.parse(jsonUpdates.table_name),
251
+ groupedUpdates: {}
252
+ };
253
+ this.iterateListeners((l) => l.tablesUpdated?.(notification));
254
+ return result;
255
+ }, timeoutSignal(options?.timeoutMs));
264
256
  }
265
257
 
266
258
  refreshSchema(): Promise<void> {
@@ -1,5 +1,4 @@
1
- import { AbstractStreamingSyncImplementation, LockOptions, LockType, mutexRunExclusive } from '@powersync/web';
2
- import { Mutex } from 'async-mutex';
1
+ import { AbstractStreamingSyncImplementation, LockOptions, LockType, Mutex } from '@powersync/web';
3
2
 
4
3
  type MutexMap = {
5
4
  /**
@@ -56,11 +55,8 @@ export class CapacitorStreamingSyncImplementation extends AbstractStreamingSyncI
56
55
  mutexRecord.tracking.add(this.instanceId);
57
56
  const mutex = mutexRecord.locks[lockOptions.type];
58
57
 
59
- return mutexRunExclusive(mutex, async () => {
60
- if (lockOptions.signal?.aborted) {
61
- throw new Error('Aborted');
62
- }
58
+ return mutex.runExclusive(async () => {
63
59
  return await lockOptions.callback();
64
- });
60
+ }, lockOptions.signal);
65
61
  }
66
62
  }