@absolutejs/sync-capacitor 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/dist/index.js +9 -1
- package/dist/index.js.map +3 -3
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
Native persistence and lifecycle wiring for `@absolutejs/sync` applications
|
|
4
4
|
running in Capacitor. It stores confirmed rows, cursors, installation identity,
|
|
5
5
|
and the durable mutation outbox in one principal-partitioned SQLite database.
|
|
6
|
+
It also exposes namespace-scoped collection discovery so finite native workers
|
|
7
|
+
can resume safe `id`-keyed pulls without application-authored worker code.
|
|
6
8
|
|
|
7
9
|
AbsoluteJS provisions this automatically when Mobile, Sync, and Auth are enabled.
|
|
8
10
|
Direct Capacitor applications can opt in explicitly:
|
package/dist/index.js
CHANGED
|
@@ -101,6 +101,14 @@ var createCapacitorSyncLocalStore = ({
|
|
|
101
101
|
await database.run("INSERT INTO absolute_sync_metadata (namespace, installation_id) VALUES (?, ?) ON CONFLICT(namespace) DO UPDATE SET installation_id = excluded.installation_id", [namespace, installationId], false);
|
|
102
102
|
},
|
|
103
103
|
getCollection: async (key) => parseRecord((await database.query("SELECT record_json FROM absolute_sync_collections WHERE namespace = ? AND collection_key = ? LIMIT 1", [namespace, key])).values?.[0]?.record_json, "collection"),
|
|
104
|
+
listCollections: async () => {
|
|
105
|
+
const rows = (await database.query("SELECT collection_key, record_json FROM absolute_sync_collections WHERE namespace = ? ORDER BY collection_key ASC", [namespace])).values;
|
|
106
|
+
return (rows ?? []).map((row) => {
|
|
107
|
+
const key = row.collection_key;
|
|
108
|
+
const record = parseRecord(row.record_json, "collection");
|
|
109
|
+
return typeof key === "string" && record ? { key, record } : undefined;
|
|
110
|
+
}).filter((entry) => entry !== undefined);
|
|
111
|
+
},
|
|
104
112
|
putCollection: async (key, record) => {
|
|
105
113
|
writable();
|
|
106
114
|
await database.run("INSERT INTO absolute_sync_collections (namespace, collection_key, record_json) VALUES (?, ?, ?) ON CONFLICT(namespace, collection_key) DO UPDATE SET record_json = excluded.record_json", [namespace, key, JSON.stringify(record)], false);
|
|
@@ -202,5 +210,5 @@ export {
|
|
|
202
210
|
AbsoluteBackgroundSync
|
|
203
211
|
};
|
|
204
212
|
|
|
205
|
-
//# debugId=
|
|
213
|
+
//# debugId=EA73B100A46BA53064756E2164756E21
|
|
206
214
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/index.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"import {\n\tCapacitorSQLite,\n\tSQLiteConnection,\n\ttype SQLiteDBConnection\n} from '@capacitor-community/sqlite';\nimport type {\n\tLocalCollectionRecord,\n\tLocalMutationRecord,\n\tSyncLocalStore,\n\tSyncLocalStoreMode,\n\tSyncLocalTransaction\n} from '@absolutejs/sync/client';\nimport type {\n\tDeviceLifecycleCapability,\n\tDeviceNetworkCapability,\n\tDeviceSubscription\n} from '@absolutejs/devices';\nimport type { SyncClient } from '@absolutejs/sync/client';\nimport { registerPlugin } from '@capacitor/core';\n\nexport type CapacitorBackgroundSyncConfig = {\n\tendpoint: string;\n\tissuer: string;\n\tclientId: string;\n\tnamespace: string;\n\tdatabaseName?: string;\n\tintervalMinutes?: number;\n\tmaxMutations?: number;\n\tmaxPulls?: number;\n\tmaxAttempts?: number;\n};\n\nexport type CapacitorBackgroundSyncStatus = {\n\tconfigured: boolean;\n\trunning: boolean;\n\tlastRunAt?: number;\n\tlastError?: string;\n\tlastAcknowledged?: number;\n\tlastPulled?: number;\n};\n\nexport type AbsoluteBackgroundSyncPlugin = {\n\tconfigure(options: CapacitorBackgroundSyncConfig): Promise<void>;\n\tclear(): Promise<void>;\n\trunNow(): Promise<CapacitorBackgroundSyncStatus>;\n\tstatus(): Promise<CapacitorBackgroundSyncStatus>;\n};\n\nexport const AbsoluteBackgroundSync =\n\tregisterPlugin<AbsoluteBackgroundSyncPlugin>('AbsoluteBackgroundSync');\n\n/** Configure the managed scheduler. Auth credentials remain in the native vault. */\nexport const configureCapacitorBackgroundSync = (\n\toptions: CapacitorBackgroundSyncConfig,\n\tplugin: AbsoluteBackgroundSyncPlugin = AbsoluteBackgroundSync\n) => plugin.configure(options);\n\nexport type CapacitorSyncSqliteConnection = Pick<\n\tSQLiteDBConnection,\n\t| 'beginTransaction'\n\t| 'commitTransaction'\n\t| 'execute'\n\t| 'open'\n\t| 'query'\n\t| 'rollbackTransaction'\n\t| 'run'\n>;\n\nexport type CapacitorSyncSqliteFactory = () =>\n\t| CapacitorSyncSqliteConnection\n\t| Promise<CapacitorSyncSqliteConnection>;\n\nexport type CapacitorSyncLocalStoreOptions = {\n\t/** Defaults to `absolutejs-sync-local-v1`. */\n\tdatabaseName?: string;\n\t/** Injection seam for tests and custom SQLCipher provisioning. */\n\tconnection?: CapacitorSyncSqliteFactory;\n};\n\nconst SCHEMA = `\nCREATE TABLE IF NOT EXISTS absolute_sync_metadata (\n namespace TEXT PRIMARY KEY NOT NULL,\n installation_id TEXT NOT NULL\n);\nCREATE TABLE IF NOT EXISTS absolute_sync_collections (\n namespace TEXT NOT NULL,\n collection_key TEXT NOT NULL,\n record_json TEXT NOT NULL,\n PRIMARY KEY (namespace, collection_key)\n);\nCREATE TABLE IF NOT EXISTS absolute_sync_mutations (\n namespace TEXT NOT NULL,\n operation_id TEXT NOT NULL,\n created_at INTEGER NOT NULL,\n record_json TEXT NOT NULL,\n PRIMARY KEY (namespace, operation_id)\n);\nCREATE INDEX IF NOT EXISTS absolute_sync_mutations_order\n ON absolute_sync_mutations (namespace, created_at, operation_id);\n`;\n\ntype SqliteRow = Record<string, unknown>;\n\nconst firstString = (rows: SqliteRow[] | undefined, field: string) => {\n\tconst value = rows?.[0]?.[field];\n\treturn typeof value === 'string' ? value : undefined;\n};\n\nconst parseRecord = <T>(value: unknown, label: string): T | undefined => {\n\tif (value === undefined) return undefined;\n\tif (typeof value !== 'string')\n\t\tthrow new Error(\n\t\t\t`Capacitor Sync SQLite returned invalid ${label} JSON.`\n\t\t);\n\ttry {\n\t\treturn JSON.parse(value) as T;\n\t} catch (cause) {\n\t\tthrow new Error(\n\t\t\t`Capacitor Sync SQLite could not parse ${label} JSON.`,\n\t\t\t{\n\t\t\t\tcause\n\t\t\t}\n\t\t);\n\t}\n};\n\nconst defaultConnection = async (\n\tdatabaseName: string\n): Promise<CapacitorSyncSqliteConnection> => {\n\tconst sqlite = new SQLiteConnection(CapacitorSQLite);\n\tconst existing = await sqlite.isConnection(databaseName, false);\n\tconst connection = existing.result\n\t\t? await sqlite.retrieveConnection(databaseName, false)\n\t\t: await sqlite.createConnection(\n\t\t\t\tdatabaseName,\n\t\t\t\tfalse,\n\t\t\t\t'no-encryption',\n\t\t\t\t1,\n\t\t\t\tfalse\n\t\t\t);\n\tawait connection.open();\n\treturn connection;\n};\n\nconst requireNamespace = (namespace: string) => {\n\tif (namespace.length === 0)\n\t\tthrow new Error('Sync local-store namespace must not be empty');\n};\n\n/**\n * Native SQLite implementation of Sync's principal-partitioned atomic cache\n * and mutation outbox. All calls are serialized because a Capacitor database\n * connection owns one explicit transaction at a time.\n */\nexport const createCapacitorSyncLocalStore = ({\n\tdatabaseName = 'absolutejs-sync-local-v1',\n\tconnection: createConnection = () => defaultConnection(databaseName)\n}: CapacitorSyncLocalStoreOptions = {}): SyncLocalStore => {\n\tif (databaseName.length === 0)\n\t\tthrow new TypeError('Capacitor Sync databaseName cannot be empty.');\n\tlet connectionPromise: Promise<CapacitorSyncSqliteConnection> | undefined;\n\tconst connection = () => {\n\t\tconnectionPromise ??= Promise.resolve(createConnection()).then(\n\t\t\tasync (database) => {\n\t\t\t\tawait database.execute(SCHEMA);\n\t\t\t\treturn database;\n\t\t\t}\n\t\t);\n\t\treturn connectionPromise;\n\t};\n\tlet tail = Promise.resolve();\n\tconst locked = async <R>(run: () => Promise<R>): Promise<R> => {\n\t\tlet release!: () => void;\n\t\tconst previous = tail;\n\t\ttail = new Promise<void>((resolve) => {\n\t\t\trelease = resolve;\n\t\t});\n\t\tawait previous;\n\t\ttry {\n\t\t\treturn await run();\n\t\t} finally {\n\t\t\trelease();\n\t\t}\n\t};\n\n\tconst transaction = async <R>(\n\t\tnamespace: string,\n\t\tmode: SyncLocalStoreMode,\n\t\trun: (tx: SyncLocalTransaction) => Promise<R>\n\t): Promise<R> => {\n\t\trequireNamespace(namespace);\n\t\treturn locked(async () => {\n\t\t\tconst database = await connection();\n\t\t\tawait database.beginTransaction();\n\t\t\tconst writable = () => {\n\t\t\t\tif (mode !== 'readwrite')\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t'Cannot write in a readonly Sync local transaction'\n\t\t\t\t\t);\n\t\t\t};\n\t\t\tconst tx: SyncLocalTransaction = {\n\t\t\t\tgetInstallationId: async () =>\n\t\t\t\t\tfirstString(\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\tawait database.query(\n\t\t\t\t\t\t\t\t'SELECT installation_id FROM absolute_sync_metadata WHERE namespace = ? LIMIT 1',\n\t\t\t\t\t\t\t\t[namespace]\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t).values,\n\t\t\t\t\t\t'installation_id'\n\t\t\t\t\t),\n\t\t\t\tsetInstallationId: async (installationId) => {\n\t\t\t\t\twritable();\n\t\t\t\t\tif (installationId.length === 0)\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t'Sync installation id must not be empty'\n\t\t\t\t\t\t);\n\t\t\t\t\tawait database.run(\n\t\t\t\t\t\t'INSERT INTO absolute_sync_metadata (namespace, installation_id) VALUES (?, ?) ON CONFLICT(namespace) DO UPDATE SET installation_id = excluded.installation_id',\n\t\t\t\t\t\t[namespace, installationId],\n\t\t\t\t\t\tfalse\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tgetCollection: async <T>(key: string) =>\n\t\t\t\t\tparseRecord<LocalCollectionRecord<T>>(\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\tawait database.query(\n\t\t\t\t\t\t\t\t'SELECT record_json FROM absolute_sync_collections WHERE namespace = ? AND collection_key = ? LIMIT 1',\n\t\t\t\t\t\t\t\t[namespace, key]\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t).values?.[0]?.record_json,\n\t\t\t\t\t\t'collection'\n\t\t\t\t\t),\n\t\t\t\tputCollection: async (key, record) => {\n\t\t\t\t\twritable();\n\t\t\t\t\tawait database.run(\n\t\t\t\t\t\t'INSERT INTO absolute_sync_collections (namespace, collection_key, record_json) VALUES (?, ?, ?) ON CONFLICT(namespace, collection_key) DO UPDATE SET record_json = excluded.record_json',\n\t\t\t\t\t\t[namespace, key, JSON.stringify(record)],\n\t\t\t\t\t\tfalse\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tdeleteCollection: async (key) => {\n\t\t\t\t\twritable();\n\t\t\t\t\tawait database.run(\n\t\t\t\t\t\t'DELETE FROM absolute_sync_collections WHERE namespace = ? AND collection_key = ?',\n\t\t\t\t\t\t[namespace, key],\n\t\t\t\t\t\tfalse\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tlistMutations: async () => {\n\t\t\t\t\tconst rows = (\n\t\t\t\t\t\tawait database.query(\n\t\t\t\t\t\t\t'SELECT record_json FROM absolute_sync_mutations WHERE namespace = ? ORDER BY created_at ASC, operation_id ASC',\n\t\t\t\t\t\t\t[namespace]\n\t\t\t\t\t\t)\n\t\t\t\t\t).values;\n\t\t\t\t\treturn (rows ?? [])\n\t\t\t\t\t\t.map((row) =>\n\t\t\t\t\t\t\tparseRecord<LocalMutationRecord>(\n\t\t\t\t\t\t\t\trow.record_json,\n\t\t\t\t\t\t\t\t'mutation'\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.filter(\n\t\t\t\t\t\t\t(record): record is LocalMutationRecord =>\n\t\t\t\t\t\t\t\trecord !== undefined\n\t\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tgetMutation: async (operationId) =>\n\t\t\t\t\tparseRecord<LocalMutationRecord>(\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\tawait database.query(\n\t\t\t\t\t\t\t\t'SELECT record_json FROM absolute_sync_mutations WHERE namespace = ? AND operation_id = ? LIMIT 1',\n\t\t\t\t\t\t\t\t[namespace, operationId]\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t).values?.[0]?.record_json,\n\t\t\t\t\t\t'mutation'\n\t\t\t\t\t),\n\t\t\t\tputMutation: async (record) => {\n\t\t\t\t\twritable();\n\t\t\t\t\tawait database.run(\n\t\t\t\t\t\t'INSERT INTO absolute_sync_mutations (namespace, operation_id, created_at, record_json) VALUES (?, ?, ?, ?) ON CONFLICT(namespace, operation_id) DO UPDATE SET created_at = excluded.created_at, record_json = excluded.record_json',\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\tnamespace,\n\t\t\t\t\t\t\trecord.operationId,\n\t\t\t\t\t\t\trecord.createdAt,\n\t\t\t\t\t\t\tJSON.stringify(record)\n\t\t\t\t\t\t],\n\t\t\t\t\t\tfalse\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tdeleteMutation: async (operationId) => {\n\t\t\t\t\twritable();\n\t\t\t\t\tawait database.run(\n\t\t\t\t\t\t'DELETE FROM absolute_sync_mutations WHERE namespace = ? AND operation_id = ?',\n\t\t\t\t\t\t[namespace, operationId],\n\t\t\t\t\t\tfalse\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t};\n\t\t\ttry {\n\t\t\t\tconst result = await run(tx);\n\t\t\t\tawait database.commitTransaction();\n\t\t\t\treturn result;\n\t\t\t} catch (error) {\n\t\t\t\ttry {\n\t\t\t\t\tawait database.rollbackTransaction();\n\t\t\t\t} catch (rollbackError) {\n\t\t\t\t\tthrow new AggregateError(\n\t\t\t\t\t\t[error, rollbackError],\n\t\t\t\t\t\t'Capacitor Sync SQLite transaction and rollback both failed'\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t});\n\t};\n\n\treturn {\n\t\ttransaction,\n\t\tdeleteNamespace: async (namespace) => {\n\t\t\trequireNamespace(namespace);\n\t\t\tawait locked(async () => {\n\t\t\t\tconst database = await connection();\n\t\t\t\tawait database.beginTransaction();\n\t\t\t\ttry {\n\t\t\t\t\tfor (const table of [\n\t\t\t\t\t\t'absolute_sync_metadata',\n\t\t\t\t\t\t'absolute_sync_collections',\n\t\t\t\t\t\t'absolute_sync_mutations'\n\t\t\t\t\t])\n\t\t\t\t\t\tawait database.run(\n\t\t\t\t\t\t\t`DELETE FROM ${table} WHERE namespace = ?`,\n\t\t\t\t\t\t\t[namespace],\n\t\t\t\t\t\t\tfalse\n\t\t\t\t\t\t);\n\t\t\t\t\tawait database.commitTransaction();\n\t\t\t\t} catch (error) {\n\t\t\t\t\tawait database.rollbackTransaction();\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t};\n};\n\nexport type CapacitorSyncLifecycleOptions = {\n\tclient: Pick<SyncClient, 'reconnect'> & Partial<Pick<SyncClient, 'flush'>>;\n\tlifecycle: DeviceLifecycleCapability;\n\tnetwork: DeviceNetworkCapability;\n\t/** Finite outbox budget after a wake-up. Defaults to 10 seconds. */\n\tflushTimeoutMs?: number;\n\t/** Lifecycle flush failures are observable without becoming unhandled. */\n\tonError?: (error: unknown) => void;\n};\n\n/** Refreshes the socket/ticket and runs a bounded outbox flush after wake-up. */\nexport const installCapacitorSyncLifecycle = async ({\n\tclient,\n\tlifecycle,\n\tnetwork,\n\tflushTimeoutMs = 10_000,\n\tonError\n}: CapacitorSyncLifecycleOptions): Promise<DeviceSubscription> => {\n\tif (!Number.isFinite(flushTimeoutMs) || flushTimeoutMs < 0)\n\t\tthrow new TypeError(\n\t\t\t'Capacitor Sync flushTimeoutMs must be a non-negative number.'\n\t\t);\n\tconst wake = () => {\n\t\tclient.reconnect();\n\t\tvoid client\n\t\t\t.flush?.({ timeoutMs: flushTimeoutMs })\n\t\t\t.catch((error) => onError?.(error));\n\t};\n\tconst removers = await Promise.all([\n\t\tlifecycle.onResume?.(wake) ?? (() => undefined),\n\t\tnetwork.onChange((status) => {\n\t\t\tif (status.connected) wake();\n\t\t})\n\t]);\n\tlet active = true;\n\treturn async () => {\n\t\tif (!active) return;\n\t\tactive = false;\n\t\tawait Promise.all(removers.map((remove) => remove()));\n\t};\n};\n"
|
|
5
|
+
"import {\n\tCapacitorSQLite,\n\tSQLiteConnection,\n\ttype SQLiteDBConnection\n} from '@capacitor-community/sqlite';\nimport type {\n\tLocalCollectionRecord,\n\tLocalMutationRecord,\n\tSyncLocalStore,\n\tSyncLocalStoreMode,\n\tSyncLocalTransaction\n} from '@absolutejs/sync/client';\nimport type {\n\tDeviceLifecycleCapability,\n\tDeviceNetworkCapability,\n\tDeviceSubscription\n} from '@absolutejs/devices';\nimport type { SyncClient } from '@absolutejs/sync/client';\nimport { registerPlugin } from '@capacitor/core';\n\nexport type CapacitorBackgroundSyncConfig = {\n\tendpoint: string;\n\tissuer: string;\n\tclientId: string;\n\tnamespace: string;\n\tdatabaseName?: string;\n\tintervalMinutes?: number;\n\tmaxMutations?: number;\n\tmaxPulls?: number;\n\tmaxAttempts?: number;\n};\n\nexport type CapacitorBackgroundSyncStatus = {\n\tconfigured: boolean;\n\trunning: boolean;\n\tlastRunAt?: number;\n\tlastError?: string;\n\tlastAcknowledged?: number;\n\tlastPulled?: number;\n};\n\nexport type AbsoluteBackgroundSyncPlugin = {\n\tconfigure(options: CapacitorBackgroundSyncConfig): Promise<void>;\n\tclear(): Promise<void>;\n\trunNow(): Promise<CapacitorBackgroundSyncStatus>;\n\tstatus(): Promise<CapacitorBackgroundSyncStatus>;\n};\n\nexport const AbsoluteBackgroundSync =\n\tregisterPlugin<AbsoluteBackgroundSyncPlugin>('AbsoluteBackgroundSync');\n\n/** Configure the managed scheduler. Auth credentials remain in the native vault. */\nexport const configureCapacitorBackgroundSync = (\n\toptions: CapacitorBackgroundSyncConfig,\n\tplugin: AbsoluteBackgroundSyncPlugin = AbsoluteBackgroundSync\n) => plugin.configure(options);\n\nexport type CapacitorSyncSqliteConnection = Pick<\n\tSQLiteDBConnection,\n\t| 'beginTransaction'\n\t| 'commitTransaction'\n\t| 'execute'\n\t| 'open'\n\t| 'query'\n\t| 'rollbackTransaction'\n\t| 'run'\n>;\n\nexport type CapacitorSyncSqliteFactory = () =>\n\t| CapacitorSyncSqliteConnection\n\t| Promise<CapacitorSyncSqliteConnection>;\n\nexport type CapacitorSyncLocalStoreOptions = {\n\t/** Defaults to `absolutejs-sync-local-v1`. */\n\tdatabaseName?: string;\n\t/** Injection seam for tests and custom SQLCipher provisioning. */\n\tconnection?: CapacitorSyncSqliteFactory;\n};\n\nconst SCHEMA = `\nCREATE TABLE IF NOT EXISTS absolute_sync_metadata (\n namespace TEXT PRIMARY KEY NOT NULL,\n installation_id TEXT NOT NULL\n);\nCREATE TABLE IF NOT EXISTS absolute_sync_collections (\n namespace TEXT NOT NULL,\n collection_key TEXT NOT NULL,\n record_json TEXT NOT NULL,\n PRIMARY KEY (namespace, collection_key)\n);\nCREATE TABLE IF NOT EXISTS absolute_sync_mutations (\n namespace TEXT NOT NULL,\n operation_id TEXT NOT NULL,\n created_at INTEGER NOT NULL,\n record_json TEXT NOT NULL,\n PRIMARY KEY (namespace, operation_id)\n);\nCREATE INDEX IF NOT EXISTS absolute_sync_mutations_order\n ON absolute_sync_mutations (namespace, created_at, operation_id);\n`;\n\ntype SqliteRow = Record<string, unknown>;\n\nconst firstString = (rows: SqliteRow[] | undefined, field: string) => {\n\tconst value = rows?.[0]?.[field];\n\treturn typeof value === 'string' ? value : undefined;\n};\n\nconst parseRecord = <T>(value: unknown, label: string): T | undefined => {\n\tif (value === undefined) return undefined;\n\tif (typeof value !== 'string')\n\t\tthrow new Error(\n\t\t\t`Capacitor Sync SQLite returned invalid ${label} JSON.`\n\t\t);\n\ttry {\n\t\treturn JSON.parse(value) as T;\n\t} catch (cause) {\n\t\tthrow new Error(\n\t\t\t`Capacitor Sync SQLite could not parse ${label} JSON.`,\n\t\t\t{\n\t\t\t\tcause\n\t\t\t}\n\t\t);\n\t}\n};\n\nconst defaultConnection = async (\n\tdatabaseName: string\n): Promise<CapacitorSyncSqliteConnection> => {\n\tconst sqlite = new SQLiteConnection(CapacitorSQLite);\n\tconst existing = await sqlite.isConnection(databaseName, false);\n\tconst connection = existing.result\n\t\t? await sqlite.retrieveConnection(databaseName, false)\n\t\t: await sqlite.createConnection(\n\t\t\t\tdatabaseName,\n\t\t\t\tfalse,\n\t\t\t\t'no-encryption',\n\t\t\t\t1,\n\t\t\t\tfalse\n\t\t\t);\n\tawait connection.open();\n\treturn connection;\n};\n\nconst requireNamespace = (namespace: string) => {\n\tif (namespace.length === 0)\n\t\tthrow new Error('Sync local-store namespace must not be empty');\n};\n\n/**\n * Native SQLite implementation of Sync's principal-partitioned atomic cache\n * and mutation outbox. All calls are serialized because a Capacitor database\n * connection owns one explicit transaction at a time.\n */\nexport const createCapacitorSyncLocalStore = ({\n\tdatabaseName = 'absolutejs-sync-local-v1',\n\tconnection: createConnection = () => defaultConnection(databaseName)\n}: CapacitorSyncLocalStoreOptions = {}): SyncLocalStore => {\n\tif (databaseName.length === 0)\n\t\tthrow new TypeError('Capacitor Sync databaseName cannot be empty.');\n\tlet connectionPromise: Promise<CapacitorSyncSqliteConnection> | undefined;\n\tconst connection = () => {\n\t\tconnectionPromise ??= Promise.resolve(createConnection()).then(\n\t\t\tasync (database) => {\n\t\t\t\tawait database.execute(SCHEMA);\n\t\t\t\treturn database;\n\t\t\t}\n\t\t);\n\t\treturn connectionPromise;\n\t};\n\tlet tail = Promise.resolve();\n\tconst locked = async <R>(run: () => Promise<R>): Promise<R> => {\n\t\tlet release!: () => void;\n\t\tconst previous = tail;\n\t\ttail = new Promise<void>((resolve) => {\n\t\t\trelease = resolve;\n\t\t});\n\t\tawait previous;\n\t\ttry {\n\t\t\treturn await run();\n\t\t} finally {\n\t\t\trelease();\n\t\t}\n\t};\n\n\tconst transaction = async <R>(\n\t\tnamespace: string,\n\t\tmode: SyncLocalStoreMode,\n\t\trun: (tx: SyncLocalTransaction) => Promise<R>\n\t): Promise<R> => {\n\t\trequireNamespace(namespace);\n\t\treturn locked(async () => {\n\t\t\tconst database = await connection();\n\t\t\tawait database.beginTransaction();\n\t\t\tconst writable = () => {\n\t\t\t\tif (mode !== 'readwrite')\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t'Cannot write in a readonly Sync local transaction'\n\t\t\t\t\t);\n\t\t\t};\n\t\t\tconst tx: SyncLocalTransaction = {\n\t\t\t\tgetInstallationId: async () =>\n\t\t\t\t\tfirstString(\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\tawait database.query(\n\t\t\t\t\t\t\t\t'SELECT installation_id FROM absolute_sync_metadata WHERE namespace = ? LIMIT 1',\n\t\t\t\t\t\t\t\t[namespace]\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t).values,\n\t\t\t\t\t\t'installation_id'\n\t\t\t\t\t),\n\t\t\t\tsetInstallationId: async (installationId) => {\n\t\t\t\t\twritable();\n\t\t\t\t\tif (installationId.length === 0)\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t'Sync installation id must not be empty'\n\t\t\t\t\t\t);\n\t\t\t\t\tawait database.run(\n\t\t\t\t\t\t'INSERT INTO absolute_sync_metadata (namespace, installation_id) VALUES (?, ?) ON CONFLICT(namespace) DO UPDATE SET installation_id = excluded.installation_id',\n\t\t\t\t\t\t[namespace, installationId],\n\t\t\t\t\t\tfalse\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tgetCollection: async <T>(key: string) =>\n\t\t\t\t\tparseRecord<LocalCollectionRecord<T>>(\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\tawait database.query(\n\t\t\t\t\t\t\t\t'SELECT record_json FROM absolute_sync_collections WHERE namespace = ? AND collection_key = ? LIMIT 1',\n\t\t\t\t\t\t\t\t[namespace, key]\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t).values?.[0]?.record_json,\n\t\t\t\t\t\t'collection'\n\t\t\t\t\t),\n\t\t\t\tlistCollections: async () => {\n\t\t\t\t\tconst rows = (\n\t\t\t\t\t\tawait database.query(\n\t\t\t\t\t\t\t'SELECT collection_key, record_json FROM absolute_sync_collections WHERE namespace = ? ORDER BY collection_key ASC',\n\t\t\t\t\t\t\t[namespace]\n\t\t\t\t\t\t)\n\t\t\t\t\t).values;\n\t\t\t\t\treturn (rows ?? [])\n\t\t\t\t\t\t.map((row) => {\n\t\t\t\t\t\t\tconst key = row.collection_key;\n\t\t\t\t\t\t\tconst record = parseRecord<LocalCollectionRecord>(\n\t\t\t\t\t\t\t\trow.record_json,\n\t\t\t\t\t\t\t\t'collection'\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\treturn typeof key === 'string' && record\n\t\t\t\t\t\t\t\t? { key, record }\n\t\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.filter(\n\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\tentry\n\t\t\t\t\t\t\t): entry is {\n\t\t\t\t\t\t\t\tkey: string;\n\t\t\t\t\t\t\t\trecord: LocalCollectionRecord;\n\t\t\t\t\t\t\t} => entry !== undefined\n\t\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tputCollection: async (key, record) => {\n\t\t\t\t\twritable();\n\t\t\t\t\tawait database.run(\n\t\t\t\t\t\t'INSERT INTO absolute_sync_collections (namespace, collection_key, record_json) VALUES (?, ?, ?) ON CONFLICT(namespace, collection_key) DO UPDATE SET record_json = excluded.record_json',\n\t\t\t\t\t\t[namespace, key, JSON.stringify(record)],\n\t\t\t\t\t\tfalse\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tdeleteCollection: async (key) => {\n\t\t\t\t\twritable();\n\t\t\t\t\tawait database.run(\n\t\t\t\t\t\t'DELETE FROM absolute_sync_collections WHERE namespace = ? AND collection_key = ?',\n\t\t\t\t\t\t[namespace, key],\n\t\t\t\t\t\tfalse\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tlistMutations: async () => {\n\t\t\t\t\tconst rows = (\n\t\t\t\t\t\tawait database.query(\n\t\t\t\t\t\t\t'SELECT record_json FROM absolute_sync_mutations WHERE namespace = ? ORDER BY created_at ASC, operation_id ASC',\n\t\t\t\t\t\t\t[namespace]\n\t\t\t\t\t\t)\n\t\t\t\t\t).values;\n\t\t\t\t\treturn (rows ?? [])\n\t\t\t\t\t\t.map((row) =>\n\t\t\t\t\t\t\tparseRecord<LocalMutationRecord>(\n\t\t\t\t\t\t\t\trow.record_json,\n\t\t\t\t\t\t\t\t'mutation'\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.filter(\n\t\t\t\t\t\t\t(record): record is LocalMutationRecord =>\n\t\t\t\t\t\t\t\trecord !== undefined\n\t\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tgetMutation: async (operationId) =>\n\t\t\t\t\tparseRecord<LocalMutationRecord>(\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\tawait database.query(\n\t\t\t\t\t\t\t\t'SELECT record_json FROM absolute_sync_mutations WHERE namespace = ? AND operation_id = ? LIMIT 1',\n\t\t\t\t\t\t\t\t[namespace, operationId]\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t).values?.[0]?.record_json,\n\t\t\t\t\t\t'mutation'\n\t\t\t\t\t),\n\t\t\t\tputMutation: async (record) => {\n\t\t\t\t\twritable();\n\t\t\t\t\tawait database.run(\n\t\t\t\t\t\t'INSERT INTO absolute_sync_mutations (namespace, operation_id, created_at, record_json) VALUES (?, ?, ?, ?) ON CONFLICT(namespace, operation_id) DO UPDATE SET created_at = excluded.created_at, record_json = excluded.record_json',\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\tnamespace,\n\t\t\t\t\t\t\trecord.operationId,\n\t\t\t\t\t\t\trecord.createdAt,\n\t\t\t\t\t\t\tJSON.stringify(record)\n\t\t\t\t\t\t],\n\t\t\t\t\t\tfalse\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tdeleteMutation: async (operationId) => {\n\t\t\t\t\twritable();\n\t\t\t\t\tawait database.run(\n\t\t\t\t\t\t'DELETE FROM absolute_sync_mutations WHERE namespace = ? AND operation_id = ?',\n\t\t\t\t\t\t[namespace, operationId],\n\t\t\t\t\t\tfalse\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t};\n\t\t\ttry {\n\t\t\t\tconst result = await run(tx);\n\t\t\t\tawait database.commitTransaction();\n\t\t\t\treturn result;\n\t\t\t} catch (error) {\n\t\t\t\ttry {\n\t\t\t\t\tawait database.rollbackTransaction();\n\t\t\t\t} catch (rollbackError) {\n\t\t\t\t\tthrow new AggregateError(\n\t\t\t\t\t\t[error, rollbackError],\n\t\t\t\t\t\t'Capacitor Sync SQLite transaction and rollback both failed'\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t});\n\t};\n\n\treturn {\n\t\ttransaction,\n\t\tdeleteNamespace: async (namespace) => {\n\t\t\trequireNamespace(namespace);\n\t\t\tawait locked(async () => {\n\t\t\t\tconst database = await connection();\n\t\t\t\tawait database.beginTransaction();\n\t\t\t\ttry {\n\t\t\t\t\tfor (const table of [\n\t\t\t\t\t\t'absolute_sync_metadata',\n\t\t\t\t\t\t'absolute_sync_collections',\n\t\t\t\t\t\t'absolute_sync_mutations'\n\t\t\t\t\t])\n\t\t\t\t\t\tawait database.run(\n\t\t\t\t\t\t\t`DELETE FROM ${table} WHERE namespace = ?`,\n\t\t\t\t\t\t\t[namespace],\n\t\t\t\t\t\t\tfalse\n\t\t\t\t\t\t);\n\t\t\t\t\tawait database.commitTransaction();\n\t\t\t\t} catch (error) {\n\t\t\t\t\tawait database.rollbackTransaction();\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t};\n};\n\nexport type CapacitorSyncLifecycleOptions = {\n\tclient: Pick<SyncClient, 'reconnect'> & Partial<Pick<SyncClient, 'flush'>>;\n\tlifecycle: DeviceLifecycleCapability;\n\tnetwork: DeviceNetworkCapability;\n\t/** Finite outbox budget after a wake-up. Defaults to 10 seconds. */\n\tflushTimeoutMs?: number;\n\t/** Lifecycle flush failures are observable without becoming unhandled. */\n\tonError?: (error: unknown) => void;\n};\n\n/** Refreshes the socket/ticket and runs a bounded outbox flush after wake-up. */\nexport const installCapacitorSyncLifecycle = async ({\n\tclient,\n\tlifecycle,\n\tnetwork,\n\tflushTimeoutMs = 10_000,\n\tonError\n}: CapacitorSyncLifecycleOptions): Promise<DeviceSubscription> => {\n\tif (!Number.isFinite(flushTimeoutMs) || flushTimeoutMs < 0)\n\t\tthrow new TypeError(\n\t\t\t'Capacitor Sync flushTimeoutMs must be a non-negative number.'\n\t\t);\n\tconst wake = () => {\n\t\tclient.reconnect();\n\t\tvoid client\n\t\t\t.flush?.({ timeoutMs: flushTimeoutMs })\n\t\t\t.catch((error) => onError?.(error));\n\t};\n\tconst removers = await Promise.all([\n\t\tlifecycle.onResume?.(wake) ?? (() => undefined),\n\t\tnetwork.onChange((status) => {\n\t\t\tif (status.connected) wake();\n\t\t})\n\t]);\n\tlet active = true;\n\treturn async () => {\n\t\tif (!active) return;\n\t\tactive = false;\n\t\tawait Promise.all(removers.map((remove) => remove()));\n\t};\n};\n"
|
|
6
6
|
],
|
|
7
|
-
"mappings": "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",
|
|
8
|
-
"debugId": "
|
|
7
|
+
"mappings": "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",
|
|
8
|
+
"debugId": "EA73B100A46BA53064756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@absolutejs/sync-capacitor",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "Transactional Capacitor SQLite local store and native lifecycle adapter for @absolutejs/sync",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -38,14 +38,14 @@
|
|
|
38
38
|
"peerDependencies": {
|
|
39
39
|
"@absolutejs/devices": ">=0.0.3 <0.1.0",
|
|
40
40
|
"@absolutejs/devices-capacitor": ">=0.1.3 <0.2.0",
|
|
41
|
-
"@absolutejs/sync": ">=2.
|
|
41
|
+
"@absolutejs/sync": ">=2.24.0 <3",
|
|
42
42
|
"@capacitor/core": ">=8 <9",
|
|
43
43
|
"@capacitor-community/sqlite": ">=8.1.1 <9"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
46
|
"@absolutejs/devices": "0.0.3",
|
|
47
47
|
"@absolutejs/devices-capacitor": "0.1.3",
|
|
48
|
-
"@absolutejs/sync": "2.
|
|
48
|
+
"@absolutejs/sync": "2.24.0",
|
|
49
49
|
"@capacitor/core": "8.5.0",
|
|
50
50
|
"@capacitor-community/sqlite": "8.1.1",
|
|
51
51
|
"@types/bun": "1.3.14",
|