@anfenn/dync 1.0.30 → 1.0.32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/README.md +31 -9
  2. package/dist/capacitor.cjs +2 -2
  3. package/dist/capacitor.cjs.map +1 -1
  4. package/dist/capacitor.d.cts +1 -1
  5. package/dist/capacitor.d.ts +1 -1
  6. package/dist/capacitor.js +1 -1
  7. package/dist/{chunk-SQB6E7V2.js → chunk-XAHQXK76.js} +3 -3
  8. package/dist/{chunk-SQB6E7V2.js.map → chunk-XAHQXK76.js.map} +1 -1
  9. package/dist/{dexie-T9m1mP1h.d.cts → dexie-3VOQSn1s.d.cts} +5 -5
  10. package/dist/{dexie-BFPA0JU2.d.ts → dexie-D85rTx4g.d.ts} +5 -5
  11. package/dist/dexie.d.cts +2 -2
  12. package/dist/dexie.d.ts +2 -2
  13. package/dist/expoSqlite.d.cts +1 -1
  14. package/dist/expoSqlite.d.ts +1 -1
  15. package/dist/index.cjs +11 -23
  16. package/dist/index.cjs.map +1 -1
  17. package/dist/index.d.cts +9 -9
  18. package/dist/index.d.ts +9 -9
  19. package/dist/index.js +11 -23
  20. package/dist/index.js.map +1 -1
  21. package/dist/node.cjs +5 -5
  22. package/dist/node.cjs.map +1 -1
  23. package/dist/node.d.cts +9 -9
  24. package/dist/node.d.ts +9 -9
  25. package/dist/node.js +4 -4
  26. package/dist/node.js.map +1 -1
  27. package/dist/react/index.d.cts +3 -3
  28. package/dist/react/index.d.ts +3 -3
  29. package/dist/{types-CSbIAfu2.d.cts → types-6-NyRQ0D.d.cts} +3 -11
  30. package/dist/{types-CSbIAfu2.d.ts → types-6-NyRQ0D.d.ts} +3 -11
  31. package/dist/{types-DW42y281.d.cts → types-BszcepJK.d.cts} +1 -1
  32. package/dist/{types-n8Zge2zF.d.ts → types-Dhx9MuUp.d.ts} +1 -1
  33. package/dist/wa-sqlite.cjs +9 -9
  34. package/dist/wa-sqlite.cjs.map +1 -1
  35. package/dist/wa-sqlite.d.cts +13 -13
  36. package/dist/wa-sqlite.d.ts +13 -13
  37. package/dist/wa-sqlite.js +8 -8
  38. package/dist/wa-sqlite.js.map +1 -1
  39. package/package.json +2 -2
  40. package/src/index.native.ts +1 -1
  41. package/src/index.shared.ts +5 -14
  42. package/src/index.ts +1 -1
  43. package/src/node.ts +1 -1
  44. package/src/storage/sqlite/SQLiteAdapter.ts +10 -13
  45. package/src/storage/sqlite/{SqliteQueryContext.ts → SQLiteQueryContext.ts} +1 -1
  46. package/src/storage/sqlite/drivers/{BetterSqlite3Driver.ts → BetterSQLite3Driver.ts} +8 -8
  47. package/src/storage/sqlite/drivers/CapacitorSQLiteDriver.ts +2 -2
  48. package/src/storage/sqlite/drivers/{WaSqliteDriver.ts → WaSQLiteDriver.ts} +20 -20
  49. package/src/storage/sqlite/index.ts +1 -1
  50. package/src/storage/sqlite/types.ts +2 -12
  51. package/src/storage/types.ts +2 -2
  52. package/src/wa-sqlite.ts +1 -1
package/README.md CHANGED
@@ -2,9 +2,9 @@
2
2
 
3
3
  [![npm version](https://img.shields.io/npm/v/@anfenn/dync.svg)](https://www.npmjs.com/package/@anfenn/dync)
4
4
 
5
- A complete Typescript offline-first data layer with sync engine for any local storage (IndexedDB, Sqlite, etc.), and any backend (Restful, GraphQL, Supabase, etc.) in a Website, PWA, CapacitorJs, React Native, or Electron app.
5
+ A complete Typescript offline-first data layer with optional sync engine for any local storage (IndexedDB, SQLite, etc.), and any backend (Restful, GraphQL, Supabase, etc.) in a Website, PWA, CapacitorJs, React Native, or Electron app.
6
6
 
7
- Start with a Website or PWA using IndexedDB, sync with your existing REST API, and later ship native apps with encrypted SQLite - without changing a line of code.
7
+ Start with a Website or PWA using IndexedDB, sync with your existing REST API, and later ship native apps with encrypted SQLite - with no code changes - for free!
8
8
 
9
9
  ## Why Dync?
10
10
 
@@ -28,9 +28,9 @@ And see how Dync compares to the alternatives [below](#hasnt-this-already-been-d
28
28
  ## Goals
29
29
 
30
30
  - Persist SQL or NoSQL data locally and sync some or all tables to a backend
31
- - Storage agnostic. Comes with `Memory`, `IndexedDB` and `Sqlite` adapters (for CapacitorJs & React Native), and extendable with your own custom adapters
31
+ - Storage agnostic. Comes with `Memory`, `IndexedDB` and `SQLite` adapters (for CapacitorJs & React Native), and extendable with your own custom adapters
32
32
  - Lazy loaded data keeps it in native storage, allowing low memory and fast app response, even with >100K records
33
- - Fast React Native Sqlite access via JSI
33
+ - Fast React Native SQLite access via JSI
34
34
  - Single collection based api for both SQLite & IndexedDB, plus query() escape hatch for native storage api e.g.:
35
35
  - `db.myTable.add()` | `.update()` | `.where('myField').equals(42).first()`
36
36
  - `db.query()` is only intended to retrieve records, any mutations will be ignored by the sync engine:
@@ -38,7 +38,7 @@ And see how Dync compares to the alternatives [below](#hasnt-this-already-been-d
38
38
  db.query(async (ctx) => {
39
39
  if (ctx instanceof DexieQueryContext) {
40
40
  return await ctx.table('items').where('value').startsWithIgnoreCase('dexie').toArray();
41
- } else if (ctx instanceof SqliteQueryContext) {
41
+ } else if (ctx instanceof SQLiteQueryContext) {
42
42
  return await ctx.queryRows('SELECT * FROM items WHERE value LIKE ?', ['sqlite%']);
43
43
  }
44
44
  });
@@ -115,7 +115,29 @@ And see how Dync compares to the alternatives [below](#hasnt-this-already-been-d
115
115
  );
116
116
  ```
117
117
 
118
- - Sqlite schema migration
118
+ - SQLite schema migration:
119
+
120
+ ```ts
121
+ db.version(1).stores({ items: { columns: { name: { type: 'TEXT' } } } });
122
+ db.version(2)
123
+ .stores({
124
+ items: {
125
+ columns: {
126
+ name: { type: 'TEXT' },
127
+ priority: { type: 'INTEGER' },
128
+ },
129
+ },
130
+ })
131
+ .sqlite({
132
+ up: async (ctx) => {
133
+ await ctx.execute('ALTER TABLE "items" ADD COLUMN "priority" INTEGER DEFAULT 0');
134
+ },
135
+ down: async (ctx) => {
136
+ await ctx.run('UPDATE "items" SET "priority" = NULL');
137
+ },
138
+ });
139
+ ```
140
+
119
141
  - "It just works" philosophy
120
142
  - Modern and always free (MIT)
121
143
 
@@ -203,7 +225,7 @@ Note: `deleted` doesn't exist on the client, as it's removed during sync.
203
225
 
204
226
  ### WA-SQLite VFS Options
205
227
 
206
- Choose a VFS based on your app's requirements. See [`WaSqliteDriverOptions`](src/storage/sqlite/drivers/WaSqliteDriver.ts) for configuration.
228
+ Choose a VFS based on your app's requirements. See [`WaSQLiteDriverOptions`](src/storage/sqlite/drivers/WaSQLiteDriver.ts) for configuration.
207
229
 
208
230
  | VFS | Context | Multi-Tab | Durability | Performance | Best For |
209
231
  | ----------------------- | ------- | --------- | ---------- | ----------- | ------------------------------------- |
@@ -219,9 +241,9 @@ Choose a VFS based on your app's requirements. See [`WaSqliteDriverOptions`](src
219
241
  - **OPFS VFS types** require a Web Worker context and are not supported on Safari/iOS
220
242
 
221
243
  ```ts
222
- import { WaSqliteDriver, SQLiteAdapter } from '@anfenn/dync/wa-sqlite';
244
+ import { WaSQLiteDriver, SQLiteAdapter } from '@anfenn/dync/wa-sqlite';
223
245
 
224
- const driver = new WaSqliteDriver('mydb', {
246
+ const driver = new WaSQLiteDriver('mydb', {
225
247
  vfs: 'IDBBatchAtomicVFS', // or 'IDBMirrorVFS', 'OPFSCoopSyncVFS', 'AccessHandlePoolVFS'
226
248
  });
227
249
  const adapter = new SQLiteAdapter(driver);
@@ -37,7 +37,7 @@ module.exports = __toCommonJS(capacitor_exports);
37
37
 
38
38
  // src/storage/sqlite/drivers/CapacitorSQLiteDriver.ts
39
39
  var sqliteModuleCache = null;
40
- async function getSqliteModule() {
40
+ async function getSQLiteModule() {
41
41
  if (!sqliteModuleCache) {
42
42
  sqliteModuleCache = await import("@capacitor-community/sqlite");
43
43
  }
@@ -57,7 +57,7 @@ var CapacitorSQLiteDriver = class {
57
57
  }
58
58
  async getConnectionFactory() {
59
59
  if (!this.connectionFactory) {
60
- const { CapacitorSQLite, SQLiteConnection } = await getSqliteModule();
60
+ const { CapacitorSQLite, SQLiteConnection } = await getSQLiteModule();
61
61
  this.connectionFactory = new SQLiteConnection(CapacitorSQLite);
62
62
  }
63
63
  return this.connectionFactory;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/capacitor.ts","../src/storage/sqlite/drivers/CapacitorSQLiteDriver.ts","../src/storage/sqlite/drivers/CapacitorFastSqlDriver.ts"],"sourcesContent":["// Capacitor SQLite Drivers\n// Import this entry point only in Capacitor/native builds\nexport { CapacitorSQLiteDriver } from './storage/sqlite/drivers/CapacitorSQLiteDriver';\nexport { CapacitorFastSqlDriver, type FastSqlDriverOptions } from './storage/sqlite/drivers/CapacitorFastSqlDriver';\n","import type { SQLiteConnection, SQLiteDBConnection } from '@capacitor-community/sqlite';\nimport type { SQLiteDatabaseDriver, SQLiteRunResult, SQLiteQueryResult } from '../types';\n\n// Lazily loaded module cache to avoid top-level imports that break web bundlers\nlet sqliteModuleCache: typeof import('@capacitor-community/sqlite') | null = null;\n\nasync function getSqliteModule(): Promise<typeof import('@capacitor-community/sqlite')> {\n if (!sqliteModuleCache) {\n sqliteModuleCache = await import('@capacitor-community/sqlite');\n }\n return sqliteModuleCache;\n}\n\nexport interface CapacitorSQLiteDriverOptions {\n encrypted?: boolean;\n getEncryptionKey?: () => string;\n readonly?: boolean;\n mode?: string;\n version?: number;\n}\n\nexport class CapacitorSQLiteDriver implements SQLiteDatabaseDriver {\n readonly type = 'CapacitorSQLiteDriver';\n private connectionFactory?: SQLiteConnection;\n private readonly config: CapacitorSQLiteDriverOptions;\n private db?: SQLiteDBConnection;\n private openPromise?: Promise<void>;\n private opened = false;\n readonly name: string;\n\n constructor(databaseName: string, config: CapacitorSQLiteDriverOptions = {}) {\n this.name = databaseName;\n this.config = config;\n }\n\n private async getConnectionFactory(): Promise<SQLiteConnection> {\n if (!this.connectionFactory) {\n const { CapacitorSQLite, SQLiteConnection } = await getSqliteModule();\n this.connectionFactory = new SQLiteConnection(CapacitorSQLite);\n }\n return this.connectionFactory;\n }\n\n private async ensureDb(): Promise<SQLiteDBConnection> {\n if (!this.db) {\n const connectionFactory = await this.getConnectionFactory();\n const readonly = this.config.readonly ?? false;\n\n // Check if a connection already exists (e.g., after page reload)\n const existsResult = await connectionFactory.isConnection(this.name, readonly);\n if (existsResult.result) {\n // Connection exists - retrieve it instead of creating a new one\n this.db = await connectionFactory.retrieveConnection(this.name, readonly);\n } else {\n // Close any stale native connection (e.g., after page reload) before creating\n await connectionFactory.closeConnection(this.name, readonly).catch(() => {});\n this.db = await connectionFactory.createConnection(\n this.name,\n this.config.encrypted ?? false,\n this.config.mode ?? 'no-encryption',\n this.config.version ?? 1,\n readonly,\n );\n }\n\n // New/retrieved connection means we need to (re)open it.\n this.opened = false;\n }\n return this.db;\n }\n\n async open(): Promise<void> {\n if (this.opened) return;\n if (this.openPromise) return this.openPromise;\n\n this.openPromise = (async () => {\n const connectionFactory = await this.getConnectionFactory();\n // Set encryption secret if provided and not already stored (must be done before opening)\n if (this.config.getEncryptionKey) {\n const { result: isStored } = await connectionFactory.isSecretStored();\n if (!isStored) {\n const key = this.config.getEncryptionKey();\n if (!key && this.config.encrypted) {\n throw new Error('CapacitorSQLiteDriverOptions.encrypted=true but no encryption key was provided (getEncryptionKey).');\n }\n await connectionFactory.setEncryptionSecret(key);\n }\n }\n const db = await this.ensureDb();\n await db.open();\n this.opened = true;\n })();\n\n try {\n await this.openPromise;\n } finally {\n this.openPromise = undefined;\n }\n }\n\n async close(): Promise<void> {\n if (!this.db) return;\n await this.db.close();\n const connectionFactory = await this.getConnectionFactory();\n await connectionFactory.closeConnection(this.name, this.config.readonly ?? false);\n this.db = undefined;\n this.opened = false;\n this.openPromise = undefined;\n }\n\n async execute(statement: string): Promise<void> {\n await this.open();\n const db = await this.ensureDb();\n await db.execute(statement, false);\n }\n\n async run(statement: string, values: any[] = []): Promise<SQLiteRunResult> {\n await this.open();\n const db = await this.ensureDb();\n const result = await db.run(statement, values, false, 'no');\n const changes = (result as any)?.changes?.changes ?? (result as any)?.changes ?? 0;\n const lastId = (result as any)?.changes?.lastId ?? undefined;\n return { changes, lastId };\n }\n\n async query(statement: string, values: any[] = []): Promise<SQLiteQueryResult> {\n await this.open();\n const db = await this.ensureDb();\n const result: any = await db.query(statement, values, true);\n if (Array.isArray(result?.values) && result.values.length > 0 && !Array.isArray(result.values[0])) {\n const columns = Object.keys(result.values[0]);\n const rows = result.values.map((row: Record<string, any>) => columns.map((column) => row[column]));\n return { columns, values: rows };\n }\n return { columns: result?.columns ?? [], values: result?.values ?? [] };\n }\n}\n","import type { SQLConnection, SQLValue } from '@capgo/capacitor-fast-sql';\n\nimport type { SQLiteDatabaseDriver, SQLiteRunResult, SQLiteQueryResult } from '../types';\n\nexport interface FastSqlDriverOptions {\n encrypted?: boolean;\n getEncryptionKey?: () => string;\n readonly?: boolean;\n}\n\n// Lazily loaded module cache to avoid top-level imports that break web bundlers\nlet fastSqlModuleCache: typeof import('@capgo/capacitor-fast-sql') | null = null;\n\nasync function getFastSqlModule(): Promise<typeof import('@capgo/capacitor-fast-sql')> {\n if (!fastSqlModuleCache) {\n fastSqlModuleCache = await import('@capgo/capacitor-fast-sql');\n }\n return fastSqlModuleCache;\n}\n\n/**\n * SQLiteDatabaseDriver implementation for @capgo/capacitor-fast-sql plugin.\n *\n * This driver provides a compatible interface with the existing SQLiteAdapter\n * while using the Capgo Fast SQL plugin which offers better performance through\n * a local HTTP server approach that bypasses Capacitor's bridge.\n * \n * Update your AndroidManifest.xml to allow cleartext traffic:\n * <application\n ...\n android:usesCleartextTraffic=\"true\">\n\n Requires Capacitor HTTP plugin to prevent CORS, as FastSql server runs on localhost:9000, not Capacitor's localhost\n */\nexport class CapacitorFastSqlDriver implements SQLiteDatabaseDriver {\n readonly type = 'CapacitorFastSqlDriver';\n private readonly options: FastSqlDriverOptions;\n private db?: SQLConnection;\n private openPromise?: Promise<void>;\n private opened = false;\n readonly name: string;\n\n constructor(databaseName: string, options: FastSqlDriverOptions = {}) {\n this.name = databaseName;\n this.options = options;\n }\n\n async open(): Promise<void> {\n if (this.opened) return;\n if (this.openPromise) return this.openPromise;\n\n this.openPromise = (async () => {\n if (!this.db) {\n const { FastSQL } = await getFastSqlModule();\n const encryptionKey = this.options.getEncryptionKey?.();\n if (!encryptionKey && this.options.encrypted) {\n throw new Error('FastSqlDriverOptions.encrypted=true but no encryption key was provided (getEncryptionKey).');\n }\n this.db = await FastSQL.connect({\n database: this.name,\n encrypted: this.options.encrypted,\n encryptionKey,\n readOnly: this.options.readonly,\n });\n this.opened = true;\n }\n })();\n\n try {\n await this.openPromise;\n } finally {\n this.openPromise = undefined;\n }\n }\n\n async close(): Promise<void> {\n if (this.db) {\n const { FastSQL } = await getFastSqlModule();\n await FastSQL.disconnect(this.name);\n this.db = undefined;\n this.opened = false;\n this.openPromise = undefined;\n }\n }\n\n async execute(statement: string): Promise<void> {\n await this.open();\n await this.db!.execute(statement);\n }\n\n async run(statement: string, values: any[] = []): Promise<SQLiteRunResult> {\n await this.open();\n const result = await this.db!.run(statement, values as SQLValue[]);\n return {\n changes: result.rowsAffected,\n lastId: result.insertId,\n };\n }\n\n async query(statement: string, values: any[] = []): Promise<SQLiteQueryResult> {\n await this.open();\n const rows = await this.db!.query(statement, values as SQLValue[]);\n\n // Convert array of objects to columns + values format expected by adapter\n if (!rows.length) {\n return { columns: [], values: [] };\n }\n\n const columns = Object.keys(rows[0]!);\n const resultValues = rows.map((row) => columns.map((col) => (row as Record<string, any>)[col]));\n\n return { columns, values: resultValues };\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/capacitor.ts","../src/storage/sqlite/drivers/CapacitorSQLiteDriver.ts","../src/storage/sqlite/drivers/CapacitorFastSqlDriver.ts"],"sourcesContent":["// Capacitor SQLite Drivers\n// Import this entry point only in Capacitor/native builds\nexport { CapacitorSQLiteDriver } from './storage/sqlite/drivers/CapacitorSQLiteDriver';\nexport { CapacitorFastSqlDriver, type FastSqlDriverOptions } from './storage/sqlite/drivers/CapacitorFastSqlDriver';\n","import type { SQLiteConnection, SQLiteDBConnection } from '@capacitor-community/sqlite';\nimport type { SQLiteDatabaseDriver, SQLiteRunResult, SQLiteQueryResult } from '../types';\n\n// Lazily loaded module cache to avoid top-level imports that break web bundlers\nlet sqliteModuleCache: typeof import('@capacitor-community/sqlite') | null = null;\n\nasync function getSQLiteModule(): Promise<typeof import('@capacitor-community/sqlite')> {\n if (!sqliteModuleCache) {\n sqliteModuleCache = await import('@capacitor-community/sqlite');\n }\n return sqliteModuleCache;\n}\n\nexport interface CapacitorSQLiteDriverOptions {\n encrypted?: boolean;\n getEncryptionKey?: () => string;\n readonly?: boolean;\n mode?: string;\n version?: number;\n}\n\nexport class CapacitorSQLiteDriver implements SQLiteDatabaseDriver {\n readonly type = 'CapacitorSQLiteDriver';\n private connectionFactory?: SQLiteConnection;\n private readonly config: CapacitorSQLiteDriverOptions;\n private db?: SQLiteDBConnection;\n private openPromise?: Promise<void>;\n private opened = false;\n readonly name: string;\n\n constructor(databaseName: string, config: CapacitorSQLiteDriverOptions = {}) {\n this.name = databaseName;\n this.config = config;\n }\n\n private async getConnectionFactory(): Promise<SQLiteConnection> {\n if (!this.connectionFactory) {\n const { CapacitorSQLite, SQLiteConnection } = await getSQLiteModule();\n this.connectionFactory = new SQLiteConnection(CapacitorSQLite);\n }\n return this.connectionFactory;\n }\n\n private async ensureDb(): Promise<SQLiteDBConnection> {\n if (!this.db) {\n const connectionFactory = await this.getConnectionFactory();\n const readonly = this.config.readonly ?? false;\n\n // Check if a connection already exists (e.g., after page reload)\n const existsResult = await connectionFactory.isConnection(this.name, readonly);\n if (existsResult.result) {\n // Connection exists - retrieve it instead of creating a new one\n this.db = await connectionFactory.retrieveConnection(this.name, readonly);\n } else {\n // Close any stale native connection (e.g., after page reload) before creating\n await connectionFactory.closeConnection(this.name, readonly).catch(() => {});\n this.db = await connectionFactory.createConnection(\n this.name,\n this.config.encrypted ?? false,\n this.config.mode ?? 'no-encryption',\n this.config.version ?? 1,\n readonly,\n );\n }\n\n // New/retrieved connection means we need to (re)open it.\n this.opened = false;\n }\n return this.db;\n }\n\n async open(): Promise<void> {\n if (this.opened) return;\n if (this.openPromise) return this.openPromise;\n\n this.openPromise = (async () => {\n const connectionFactory = await this.getConnectionFactory();\n // Set encryption secret if provided and not already stored (must be done before opening)\n if (this.config.getEncryptionKey) {\n const { result: isStored } = await connectionFactory.isSecretStored();\n if (!isStored) {\n const key = this.config.getEncryptionKey();\n if (!key && this.config.encrypted) {\n throw new Error('CapacitorSQLiteDriverOptions.encrypted=true but no encryption key was provided (getEncryptionKey).');\n }\n await connectionFactory.setEncryptionSecret(key);\n }\n }\n const db = await this.ensureDb();\n await db.open();\n this.opened = true;\n })();\n\n try {\n await this.openPromise;\n } finally {\n this.openPromise = undefined;\n }\n }\n\n async close(): Promise<void> {\n if (!this.db) return;\n await this.db.close();\n const connectionFactory = await this.getConnectionFactory();\n await connectionFactory.closeConnection(this.name, this.config.readonly ?? false);\n this.db = undefined;\n this.opened = false;\n this.openPromise = undefined;\n }\n\n async execute(statement: string): Promise<void> {\n await this.open();\n const db = await this.ensureDb();\n await db.execute(statement, false);\n }\n\n async run(statement: string, values: any[] = []): Promise<SQLiteRunResult> {\n await this.open();\n const db = await this.ensureDb();\n const result = await db.run(statement, values, false, 'no');\n const changes = (result as any)?.changes?.changes ?? (result as any)?.changes ?? 0;\n const lastId = (result as any)?.changes?.lastId ?? undefined;\n return { changes, lastId };\n }\n\n async query(statement: string, values: any[] = []): Promise<SQLiteQueryResult> {\n await this.open();\n const db = await this.ensureDb();\n const result: any = await db.query(statement, values, true);\n if (Array.isArray(result?.values) && result.values.length > 0 && !Array.isArray(result.values[0])) {\n const columns = Object.keys(result.values[0]);\n const rows = result.values.map((row: Record<string, any>) => columns.map((column) => row[column]));\n return { columns, values: rows };\n }\n return { columns: result?.columns ?? [], values: result?.values ?? [] };\n }\n}\n","import type { SQLConnection, SQLValue } from '@capgo/capacitor-fast-sql';\n\nimport type { SQLiteDatabaseDriver, SQLiteRunResult, SQLiteQueryResult } from '../types';\n\nexport interface FastSqlDriverOptions {\n encrypted?: boolean;\n getEncryptionKey?: () => string;\n readonly?: boolean;\n}\n\n// Lazily loaded module cache to avoid top-level imports that break web bundlers\nlet fastSqlModuleCache: typeof import('@capgo/capacitor-fast-sql') | null = null;\n\nasync function getFastSqlModule(): Promise<typeof import('@capgo/capacitor-fast-sql')> {\n if (!fastSqlModuleCache) {\n fastSqlModuleCache = await import('@capgo/capacitor-fast-sql');\n }\n return fastSqlModuleCache;\n}\n\n/**\n * SQLiteDatabaseDriver implementation for @capgo/capacitor-fast-sql plugin.\n *\n * This driver provides a compatible interface with the existing SQLiteAdapter\n * while using the Capgo Fast SQL plugin which offers better performance through\n * a local HTTP server approach that bypasses Capacitor's bridge.\n * \n * Update your AndroidManifest.xml to allow cleartext traffic:\n * <application\n ...\n android:usesCleartextTraffic=\"true\">\n\n Requires Capacitor HTTP plugin to prevent CORS, as FastSql server runs on localhost:9000, not Capacitor's localhost\n */\nexport class CapacitorFastSqlDriver implements SQLiteDatabaseDriver {\n readonly type = 'CapacitorFastSqlDriver';\n private readonly options: FastSqlDriverOptions;\n private db?: SQLConnection;\n private openPromise?: Promise<void>;\n private opened = false;\n readonly name: string;\n\n constructor(databaseName: string, options: FastSqlDriverOptions = {}) {\n this.name = databaseName;\n this.options = options;\n }\n\n async open(): Promise<void> {\n if (this.opened) return;\n if (this.openPromise) return this.openPromise;\n\n this.openPromise = (async () => {\n if (!this.db) {\n const { FastSQL } = await getFastSqlModule();\n const encryptionKey = this.options.getEncryptionKey?.();\n if (!encryptionKey && this.options.encrypted) {\n throw new Error('FastSqlDriverOptions.encrypted=true but no encryption key was provided (getEncryptionKey).');\n }\n this.db = await FastSQL.connect({\n database: this.name,\n encrypted: this.options.encrypted,\n encryptionKey,\n readOnly: this.options.readonly,\n });\n this.opened = true;\n }\n })();\n\n try {\n await this.openPromise;\n } finally {\n this.openPromise = undefined;\n }\n }\n\n async close(): Promise<void> {\n if (this.db) {\n const { FastSQL } = await getFastSqlModule();\n await FastSQL.disconnect(this.name);\n this.db = undefined;\n this.opened = false;\n this.openPromise = undefined;\n }\n }\n\n async execute(statement: string): Promise<void> {\n await this.open();\n await this.db!.execute(statement);\n }\n\n async run(statement: string, values: any[] = []): Promise<SQLiteRunResult> {\n await this.open();\n const result = await this.db!.run(statement, values as SQLValue[]);\n return {\n changes: result.rowsAffected,\n lastId: result.insertId,\n };\n }\n\n async query(statement: string, values: any[] = []): Promise<SQLiteQueryResult> {\n await this.open();\n const rows = await this.db!.query(statement, values as SQLValue[]);\n\n // Convert array of objects to columns + values format expected by adapter\n if (!rows.length) {\n return { columns: [], values: [] };\n }\n\n const columns = Object.keys(rows[0]!);\n const resultValues = rows.map((row) => columns.map((col) => (row as Record<string, any>)[col]));\n\n return { columns, values: resultValues };\n }\n}\n"],"mappings":"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","names":[]}
@@ -1,4 +1,4 @@
1
- import { S as SQLiteDatabaseDriver, a as SQLiteRunResult, b as SQLiteQueryResult } from './types-CSbIAfu2.cjs';
1
+ import { S as SQLiteDatabaseDriver, a as SQLiteRunResult, b as SQLiteQueryResult } from './types-6-NyRQ0D.cjs';
2
2
 
3
3
  interface CapacitorSQLiteDriverOptions {
4
4
  encrypted?: boolean;
@@ -1,4 +1,4 @@
1
- import { S as SQLiteDatabaseDriver, a as SQLiteRunResult, b as SQLiteQueryResult } from './types-CSbIAfu2.js';
1
+ import { S as SQLiteDatabaseDriver, a as SQLiteRunResult, b as SQLiteQueryResult } from './types-6-NyRQ0D.js';
2
2
 
3
3
  interface CapacitorSQLiteDriverOptions {
4
4
  encrypted?: boolean;
package/dist/capacitor.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  CapacitorFastSqlDriver,
3
3
  CapacitorSQLiteDriver
4
- } from "./chunk-SQB6E7V2.js";
4
+ } from "./chunk-XAHQXK76.js";
5
5
  export {
6
6
  CapacitorFastSqlDriver,
7
7
  CapacitorSQLiteDriver
@@ -1,6 +1,6 @@
1
1
  // src/storage/sqlite/drivers/CapacitorSQLiteDriver.ts
2
2
  var sqliteModuleCache = null;
3
- async function getSqliteModule() {
3
+ async function getSQLiteModule() {
4
4
  if (!sqliteModuleCache) {
5
5
  sqliteModuleCache = await import("@capacitor-community/sqlite");
6
6
  }
@@ -20,7 +20,7 @@ var CapacitorSQLiteDriver = class {
20
20
  }
21
21
  async getConnectionFactory() {
22
22
  if (!this.connectionFactory) {
23
- const { CapacitorSQLite, SQLiteConnection } = await getSqliteModule();
23
+ const { CapacitorSQLite, SQLiteConnection } = await getSQLiteModule();
24
24
  this.connectionFactory = new SQLiteConnection(CapacitorSQLite);
25
25
  }
26
26
  return this.connectionFactory;
@@ -188,4 +188,4 @@ export {
188
188
  CapacitorSQLiteDriver,
189
189
  CapacitorFastSqlDriver
190
190
  };
191
- //# sourceMappingURL=chunk-SQB6E7V2.js.map
191
+ //# sourceMappingURL=chunk-XAHQXK76.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/storage/sqlite/drivers/CapacitorSQLiteDriver.ts","../src/storage/sqlite/drivers/CapacitorFastSqlDriver.ts"],"sourcesContent":["import type { SQLiteConnection, SQLiteDBConnection } from '@capacitor-community/sqlite';\nimport type { SQLiteDatabaseDriver, SQLiteRunResult, SQLiteQueryResult } from '../types';\n\n// Lazily loaded module cache to avoid top-level imports that break web bundlers\nlet sqliteModuleCache: typeof import('@capacitor-community/sqlite') | null = null;\n\nasync function getSqliteModule(): Promise<typeof import('@capacitor-community/sqlite')> {\n if (!sqliteModuleCache) {\n sqliteModuleCache = await import('@capacitor-community/sqlite');\n }\n return sqliteModuleCache;\n}\n\nexport interface CapacitorSQLiteDriverOptions {\n encrypted?: boolean;\n getEncryptionKey?: () => string;\n readonly?: boolean;\n mode?: string;\n version?: number;\n}\n\nexport class CapacitorSQLiteDriver implements SQLiteDatabaseDriver {\n readonly type = 'CapacitorSQLiteDriver';\n private connectionFactory?: SQLiteConnection;\n private readonly config: CapacitorSQLiteDriverOptions;\n private db?: SQLiteDBConnection;\n private openPromise?: Promise<void>;\n private opened = false;\n readonly name: string;\n\n constructor(databaseName: string, config: CapacitorSQLiteDriverOptions = {}) {\n this.name = databaseName;\n this.config = config;\n }\n\n private async getConnectionFactory(): Promise<SQLiteConnection> {\n if (!this.connectionFactory) {\n const { CapacitorSQLite, SQLiteConnection } = await getSqliteModule();\n this.connectionFactory = new SQLiteConnection(CapacitorSQLite);\n }\n return this.connectionFactory;\n }\n\n private async ensureDb(): Promise<SQLiteDBConnection> {\n if (!this.db) {\n const connectionFactory = await this.getConnectionFactory();\n const readonly = this.config.readonly ?? false;\n\n // Check if a connection already exists (e.g., after page reload)\n const existsResult = await connectionFactory.isConnection(this.name, readonly);\n if (existsResult.result) {\n // Connection exists - retrieve it instead of creating a new one\n this.db = await connectionFactory.retrieveConnection(this.name, readonly);\n } else {\n // Close any stale native connection (e.g., after page reload) before creating\n await connectionFactory.closeConnection(this.name, readonly).catch(() => {});\n this.db = await connectionFactory.createConnection(\n this.name,\n this.config.encrypted ?? false,\n this.config.mode ?? 'no-encryption',\n this.config.version ?? 1,\n readonly,\n );\n }\n\n // New/retrieved connection means we need to (re)open it.\n this.opened = false;\n }\n return this.db;\n }\n\n async open(): Promise<void> {\n if (this.opened) return;\n if (this.openPromise) return this.openPromise;\n\n this.openPromise = (async () => {\n const connectionFactory = await this.getConnectionFactory();\n // Set encryption secret if provided and not already stored (must be done before opening)\n if (this.config.getEncryptionKey) {\n const { result: isStored } = await connectionFactory.isSecretStored();\n if (!isStored) {\n const key = this.config.getEncryptionKey();\n if (!key && this.config.encrypted) {\n throw new Error('CapacitorSQLiteDriverOptions.encrypted=true but no encryption key was provided (getEncryptionKey).');\n }\n await connectionFactory.setEncryptionSecret(key);\n }\n }\n const db = await this.ensureDb();\n await db.open();\n this.opened = true;\n })();\n\n try {\n await this.openPromise;\n } finally {\n this.openPromise = undefined;\n }\n }\n\n async close(): Promise<void> {\n if (!this.db) return;\n await this.db.close();\n const connectionFactory = await this.getConnectionFactory();\n await connectionFactory.closeConnection(this.name, this.config.readonly ?? false);\n this.db = undefined;\n this.opened = false;\n this.openPromise = undefined;\n }\n\n async execute(statement: string): Promise<void> {\n await this.open();\n const db = await this.ensureDb();\n await db.execute(statement, false);\n }\n\n async run(statement: string, values: any[] = []): Promise<SQLiteRunResult> {\n await this.open();\n const db = await this.ensureDb();\n const result = await db.run(statement, values, false, 'no');\n const changes = (result as any)?.changes?.changes ?? (result as any)?.changes ?? 0;\n const lastId = (result as any)?.changes?.lastId ?? undefined;\n return { changes, lastId };\n }\n\n async query(statement: string, values: any[] = []): Promise<SQLiteQueryResult> {\n await this.open();\n const db = await this.ensureDb();\n const result: any = await db.query(statement, values, true);\n if (Array.isArray(result?.values) && result.values.length > 0 && !Array.isArray(result.values[0])) {\n const columns = Object.keys(result.values[0]);\n const rows = result.values.map((row: Record<string, any>) => columns.map((column) => row[column]));\n return { columns, values: rows };\n }\n return { columns: result?.columns ?? [], values: result?.values ?? [] };\n }\n}\n","import type { SQLConnection, SQLValue } from '@capgo/capacitor-fast-sql';\n\nimport type { SQLiteDatabaseDriver, SQLiteRunResult, SQLiteQueryResult } from '../types';\n\nexport interface FastSqlDriverOptions {\n encrypted?: boolean;\n getEncryptionKey?: () => string;\n readonly?: boolean;\n}\n\n// Lazily loaded module cache to avoid top-level imports that break web bundlers\nlet fastSqlModuleCache: typeof import('@capgo/capacitor-fast-sql') | null = null;\n\nasync function getFastSqlModule(): Promise<typeof import('@capgo/capacitor-fast-sql')> {\n if (!fastSqlModuleCache) {\n fastSqlModuleCache = await import('@capgo/capacitor-fast-sql');\n }\n return fastSqlModuleCache;\n}\n\n/**\n * SQLiteDatabaseDriver implementation for @capgo/capacitor-fast-sql plugin.\n *\n * This driver provides a compatible interface with the existing SQLiteAdapter\n * while using the Capgo Fast SQL plugin which offers better performance through\n * a local HTTP server approach that bypasses Capacitor's bridge.\n * \n * Update your AndroidManifest.xml to allow cleartext traffic:\n * <application\n ...\n android:usesCleartextTraffic=\"true\">\n\n Requires Capacitor HTTP plugin to prevent CORS, as FastSql server runs on localhost:9000, not Capacitor's localhost\n */\nexport class CapacitorFastSqlDriver implements SQLiteDatabaseDriver {\n readonly type = 'CapacitorFastSqlDriver';\n private readonly options: FastSqlDriverOptions;\n private db?: SQLConnection;\n private openPromise?: Promise<void>;\n private opened = false;\n readonly name: string;\n\n constructor(databaseName: string, options: FastSqlDriverOptions = {}) {\n this.name = databaseName;\n this.options = options;\n }\n\n async open(): Promise<void> {\n if (this.opened) return;\n if (this.openPromise) return this.openPromise;\n\n this.openPromise = (async () => {\n if (!this.db) {\n const { FastSQL } = await getFastSqlModule();\n const encryptionKey = this.options.getEncryptionKey?.();\n if (!encryptionKey && this.options.encrypted) {\n throw new Error('FastSqlDriverOptions.encrypted=true but no encryption key was provided (getEncryptionKey).');\n }\n this.db = await FastSQL.connect({\n database: this.name,\n encrypted: this.options.encrypted,\n encryptionKey,\n readOnly: this.options.readonly,\n });\n this.opened = true;\n }\n })();\n\n try {\n await this.openPromise;\n } finally {\n this.openPromise = undefined;\n }\n }\n\n async close(): Promise<void> {\n if (this.db) {\n const { FastSQL } = await getFastSqlModule();\n await FastSQL.disconnect(this.name);\n this.db = undefined;\n this.opened = false;\n this.openPromise = undefined;\n }\n }\n\n async execute(statement: string): Promise<void> {\n await this.open();\n await this.db!.execute(statement);\n }\n\n async run(statement: string, values: any[] = []): Promise<SQLiteRunResult> {\n await this.open();\n const result = await this.db!.run(statement, values as SQLValue[]);\n return {\n changes: result.rowsAffected,\n lastId: result.insertId,\n };\n }\n\n async query(statement: string, values: any[] = []): Promise<SQLiteQueryResult> {\n await this.open();\n const rows = await this.db!.query(statement, values as SQLValue[]);\n\n // Convert array of objects to columns + values format expected by adapter\n if (!rows.length) {\n return { columns: [], values: [] };\n }\n\n const columns = Object.keys(rows[0]!);\n const resultValues = rows.map((row) => columns.map((col) => (row as Record<string, any>)[col]));\n\n return { columns, values: resultValues };\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/storage/sqlite/drivers/CapacitorSQLiteDriver.ts","../src/storage/sqlite/drivers/CapacitorFastSqlDriver.ts"],"sourcesContent":["import type { SQLiteConnection, SQLiteDBConnection } from '@capacitor-community/sqlite';\nimport type { SQLiteDatabaseDriver, SQLiteRunResult, SQLiteQueryResult } from '../types';\n\n// Lazily loaded module cache to avoid top-level imports that break web bundlers\nlet sqliteModuleCache: typeof import('@capacitor-community/sqlite') | null = null;\n\nasync function getSQLiteModule(): Promise<typeof import('@capacitor-community/sqlite')> {\n if (!sqliteModuleCache) {\n sqliteModuleCache = await import('@capacitor-community/sqlite');\n }\n return sqliteModuleCache;\n}\n\nexport interface CapacitorSQLiteDriverOptions {\n encrypted?: boolean;\n getEncryptionKey?: () => string;\n readonly?: boolean;\n mode?: string;\n version?: number;\n}\n\nexport class CapacitorSQLiteDriver implements SQLiteDatabaseDriver {\n readonly type = 'CapacitorSQLiteDriver';\n private connectionFactory?: SQLiteConnection;\n private readonly config: CapacitorSQLiteDriverOptions;\n private db?: SQLiteDBConnection;\n private openPromise?: Promise<void>;\n private opened = false;\n readonly name: string;\n\n constructor(databaseName: string, config: CapacitorSQLiteDriverOptions = {}) {\n this.name = databaseName;\n this.config = config;\n }\n\n private async getConnectionFactory(): Promise<SQLiteConnection> {\n if (!this.connectionFactory) {\n const { CapacitorSQLite, SQLiteConnection } = await getSQLiteModule();\n this.connectionFactory = new SQLiteConnection(CapacitorSQLite);\n }\n return this.connectionFactory;\n }\n\n private async ensureDb(): Promise<SQLiteDBConnection> {\n if (!this.db) {\n const connectionFactory = await this.getConnectionFactory();\n const readonly = this.config.readonly ?? false;\n\n // Check if a connection already exists (e.g., after page reload)\n const existsResult = await connectionFactory.isConnection(this.name, readonly);\n if (existsResult.result) {\n // Connection exists - retrieve it instead of creating a new one\n this.db = await connectionFactory.retrieveConnection(this.name, readonly);\n } else {\n // Close any stale native connection (e.g., after page reload) before creating\n await connectionFactory.closeConnection(this.name, readonly).catch(() => {});\n this.db = await connectionFactory.createConnection(\n this.name,\n this.config.encrypted ?? false,\n this.config.mode ?? 'no-encryption',\n this.config.version ?? 1,\n readonly,\n );\n }\n\n // New/retrieved connection means we need to (re)open it.\n this.opened = false;\n }\n return this.db;\n }\n\n async open(): Promise<void> {\n if (this.opened) return;\n if (this.openPromise) return this.openPromise;\n\n this.openPromise = (async () => {\n const connectionFactory = await this.getConnectionFactory();\n // Set encryption secret if provided and not already stored (must be done before opening)\n if (this.config.getEncryptionKey) {\n const { result: isStored } = await connectionFactory.isSecretStored();\n if (!isStored) {\n const key = this.config.getEncryptionKey();\n if (!key && this.config.encrypted) {\n throw new Error('CapacitorSQLiteDriverOptions.encrypted=true but no encryption key was provided (getEncryptionKey).');\n }\n await connectionFactory.setEncryptionSecret(key);\n }\n }\n const db = await this.ensureDb();\n await db.open();\n this.opened = true;\n })();\n\n try {\n await this.openPromise;\n } finally {\n this.openPromise = undefined;\n }\n }\n\n async close(): Promise<void> {\n if (!this.db) return;\n await this.db.close();\n const connectionFactory = await this.getConnectionFactory();\n await connectionFactory.closeConnection(this.name, this.config.readonly ?? false);\n this.db = undefined;\n this.opened = false;\n this.openPromise = undefined;\n }\n\n async execute(statement: string): Promise<void> {\n await this.open();\n const db = await this.ensureDb();\n await db.execute(statement, false);\n }\n\n async run(statement: string, values: any[] = []): Promise<SQLiteRunResult> {\n await this.open();\n const db = await this.ensureDb();\n const result = await db.run(statement, values, false, 'no');\n const changes = (result as any)?.changes?.changes ?? (result as any)?.changes ?? 0;\n const lastId = (result as any)?.changes?.lastId ?? undefined;\n return { changes, lastId };\n }\n\n async query(statement: string, values: any[] = []): Promise<SQLiteQueryResult> {\n await this.open();\n const db = await this.ensureDb();\n const result: any = await db.query(statement, values, true);\n if (Array.isArray(result?.values) && result.values.length > 0 && !Array.isArray(result.values[0])) {\n const columns = Object.keys(result.values[0]);\n const rows = result.values.map((row: Record<string, any>) => columns.map((column) => row[column]));\n return { columns, values: rows };\n }\n return { columns: result?.columns ?? [], values: result?.values ?? [] };\n }\n}\n","import type { SQLConnection, SQLValue } from '@capgo/capacitor-fast-sql';\n\nimport type { SQLiteDatabaseDriver, SQLiteRunResult, SQLiteQueryResult } from '../types';\n\nexport interface FastSqlDriverOptions {\n encrypted?: boolean;\n getEncryptionKey?: () => string;\n readonly?: boolean;\n}\n\n// Lazily loaded module cache to avoid top-level imports that break web bundlers\nlet fastSqlModuleCache: typeof import('@capgo/capacitor-fast-sql') | null = null;\n\nasync function getFastSqlModule(): Promise<typeof import('@capgo/capacitor-fast-sql')> {\n if (!fastSqlModuleCache) {\n fastSqlModuleCache = await import('@capgo/capacitor-fast-sql');\n }\n return fastSqlModuleCache;\n}\n\n/**\n * SQLiteDatabaseDriver implementation for @capgo/capacitor-fast-sql plugin.\n *\n * This driver provides a compatible interface with the existing SQLiteAdapter\n * while using the Capgo Fast SQL plugin which offers better performance through\n * a local HTTP server approach that bypasses Capacitor's bridge.\n * \n * Update your AndroidManifest.xml to allow cleartext traffic:\n * <application\n ...\n android:usesCleartextTraffic=\"true\">\n\n Requires Capacitor HTTP plugin to prevent CORS, as FastSql server runs on localhost:9000, not Capacitor's localhost\n */\nexport class CapacitorFastSqlDriver implements SQLiteDatabaseDriver {\n readonly type = 'CapacitorFastSqlDriver';\n private readonly options: FastSqlDriverOptions;\n private db?: SQLConnection;\n private openPromise?: Promise<void>;\n private opened = false;\n readonly name: string;\n\n constructor(databaseName: string, options: FastSqlDriverOptions = {}) {\n this.name = databaseName;\n this.options = options;\n }\n\n async open(): Promise<void> {\n if (this.opened) return;\n if (this.openPromise) return this.openPromise;\n\n this.openPromise = (async () => {\n if (!this.db) {\n const { FastSQL } = await getFastSqlModule();\n const encryptionKey = this.options.getEncryptionKey?.();\n if (!encryptionKey && this.options.encrypted) {\n throw new Error('FastSqlDriverOptions.encrypted=true but no encryption key was provided (getEncryptionKey).');\n }\n this.db = await FastSQL.connect({\n database: this.name,\n encrypted: this.options.encrypted,\n encryptionKey,\n readOnly: this.options.readonly,\n });\n this.opened = true;\n }\n })();\n\n try {\n await this.openPromise;\n } finally {\n this.openPromise = undefined;\n }\n }\n\n async close(): Promise<void> {\n if (this.db) {\n const { FastSQL } = await getFastSqlModule();\n await FastSQL.disconnect(this.name);\n this.db = undefined;\n this.opened = false;\n this.openPromise = undefined;\n }\n }\n\n async execute(statement: string): Promise<void> {\n await this.open();\n await this.db!.execute(statement);\n }\n\n async run(statement: string, values: any[] = []): Promise<SQLiteRunResult> {\n await this.open();\n const result = await this.db!.run(statement, values as SQLValue[]);\n return {\n changes: result.rowsAffected,\n lastId: result.insertId,\n };\n }\n\n async query(statement: string, values: any[] = []): Promise<SQLiteQueryResult> {\n await this.open();\n const rows = await this.db!.query(statement, values as SQLValue[]);\n\n // Convert array of objects to columns + values format expected by adapter\n if (!rows.length) {\n return { columns: [], values: [] };\n }\n\n const columns = Object.keys(rows[0]!);\n const resultValues = rows.map((row) => columns.map((col) => (row as Record<string, any>)[col]));\n\n return { columns, values: resultValues };\n }\n}\n"],"mappings":"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","names":[]}
@@ -1,5 +1,5 @@
1
1
  import dexie from 'dexie';
2
- import { d as StorageSchemaDefinitionOptions, S as SQLiteDatabaseDriver, e as SQLiteAdapterOptions, a as SQLiteRunResult, b as SQLiteQueryResult } from './types-CSbIAfu2.cjs';
2
+ import { d as StorageSchemaDefinitionOptions, S as SQLiteDatabaseDriver, e as SQLiteAdapterOptions, a as SQLiteRunResult, b as SQLiteQueryResult } from './types-6-NyRQ0D.cjs';
3
3
 
4
4
  type TableSchemaDefinition = string | SQLiteTableDefinition;
5
5
  interface SQLiteTableDefinition {
@@ -257,7 +257,7 @@ declare class SQLiteAdapter implements StorageAdapter {
257
257
  transaction<T>(_mode: TransactionMode, tableNames: string[], callback: (context: StorageTransactionContext) => Promise<T>): Promise<T>;
258
258
  execute(statement: string, values?: any[]): Promise<void>;
259
259
  run(statement: string, values?: any[]): Promise<SQLiteRunResult>;
260
- query<R>(callback: (ctx: SqliteQueryContext) => Promise<R>): Promise<R>;
260
+ query<R>(callback: (ctx: SQLiteQueryContext) => Promise<R>): Promise<R>;
261
261
  query(statement: string, values?: any[]): Promise<SQLiteQueryResult>;
262
262
  queryRows(statement: string, values?: any[]): Promise<Array<Record<string, any>>>;
263
263
  /**
@@ -303,7 +303,7 @@ declare class SQLiteAdapter implements StorageAdapter {
303
303
  private normalizeColumns;
304
304
  }
305
305
 
306
- declare class SqliteQueryContext {
306
+ declare class SQLiteQueryContext {
307
307
  private readonly driver;
308
308
  private readonly adapter;
309
309
  constructor(driver: SQLiteDatabaseDriver, adapter: SQLiteAdapter);
@@ -324,7 +324,7 @@ interface StorageAdapter {
324
324
  defineSchema(version: number, schema: Record<string, TableSchemaDefinition>, options?: StorageSchemaDefinitionOptions): void;
325
325
  table<T = any>(name: string): StorageTable<T>;
326
326
  transaction<T>(mode: TransactionMode, tableNames: string[], callback: (context: StorageTransactionContext) => Promise<T>): Promise<T>;
327
- query<R>(callback: (ctx: DexieQueryContext | SqliteQueryContext | MemoryQueryContext) => Promise<R>): Promise<R>;
327
+ query<R>(callback: (ctx: DexieQueryContext | SQLiteQueryContext | MemoryQueryContext) => Promise<R>): Promise<R>;
328
328
  }
329
329
  interface StorageTransactionContext {
330
330
  tables: Record<string, StorageTable<any>>;
@@ -440,4 +440,4 @@ declare class DexieAdapter implements StorageAdapter {
440
440
  transaction<T>(mode: TransactionMode, tableNames: string[], callback: (context: StorageTransactionContext) => Promise<T>): Promise<T>;
441
441
  }
442
442
 
443
- export { DexieQueryContext as D, MemoryQueryContext as M, SqliteQueryContext as S, type TableSchemaDefinition as T, type StorageTable as a, MemoryAdapter as b, SQLiteAdapter as c, type StorageAdapter as d, DexieAdapter as e };
443
+ export { DexieQueryContext as D, MemoryQueryContext as M, SQLiteQueryContext as S, type TableSchemaDefinition as T, type StorageTable as a, MemoryAdapter as b, SQLiteAdapter as c, type StorageAdapter as d, DexieAdapter as e };
@@ -1,5 +1,5 @@
1
1
  import dexie from 'dexie';
2
- import { d as StorageSchemaDefinitionOptions, S as SQLiteDatabaseDriver, e as SQLiteAdapterOptions, a as SQLiteRunResult, b as SQLiteQueryResult } from './types-CSbIAfu2.js';
2
+ import { d as StorageSchemaDefinitionOptions, S as SQLiteDatabaseDriver, e as SQLiteAdapterOptions, a as SQLiteRunResult, b as SQLiteQueryResult } from './types-6-NyRQ0D.js';
3
3
 
4
4
  type TableSchemaDefinition = string | SQLiteTableDefinition;
5
5
  interface SQLiteTableDefinition {
@@ -257,7 +257,7 @@ declare class SQLiteAdapter implements StorageAdapter {
257
257
  transaction<T>(_mode: TransactionMode, tableNames: string[], callback: (context: StorageTransactionContext) => Promise<T>): Promise<T>;
258
258
  execute(statement: string, values?: any[]): Promise<void>;
259
259
  run(statement: string, values?: any[]): Promise<SQLiteRunResult>;
260
- query<R>(callback: (ctx: SqliteQueryContext) => Promise<R>): Promise<R>;
260
+ query<R>(callback: (ctx: SQLiteQueryContext) => Promise<R>): Promise<R>;
261
261
  query(statement: string, values?: any[]): Promise<SQLiteQueryResult>;
262
262
  queryRows(statement: string, values?: any[]): Promise<Array<Record<string, any>>>;
263
263
  /**
@@ -303,7 +303,7 @@ declare class SQLiteAdapter implements StorageAdapter {
303
303
  private normalizeColumns;
304
304
  }
305
305
 
306
- declare class SqliteQueryContext {
306
+ declare class SQLiteQueryContext {
307
307
  private readonly driver;
308
308
  private readonly adapter;
309
309
  constructor(driver: SQLiteDatabaseDriver, adapter: SQLiteAdapter);
@@ -324,7 +324,7 @@ interface StorageAdapter {
324
324
  defineSchema(version: number, schema: Record<string, TableSchemaDefinition>, options?: StorageSchemaDefinitionOptions): void;
325
325
  table<T = any>(name: string): StorageTable<T>;
326
326
  transaction<T>(mode: TransactionMode, tableNames: string[], callback: (context: StorageTransactionContext) => Promise<T>): Promise<T>;
327
- query<R>(callback: (ctx: DexieQueryContext | SqliteQueryContext | MemoryQueryContext) => Promise<R>): Promise<R>;
327
+ query<R>(callback: (ctx: DexieQueryContext | SQLiteQueryContext | MemoryQueryContext) => Promise<R>): Promise<R>;
328
328
  }
329
329
  interface StorageTransactionContext {
330
330
  tables: Record<string, StorageTable<any>>;
@@ -440,4 +440,4 @@ declare class DexieAdapter implements StorageAdapter {
440
440
  transaction<T>(mode: TransactionMode, tableNames: string[], callback: (context: StorageTransactionContext) => Promise<T>): Promise<T>;
441
441
  }
442
442
 
443
- export { DexieQueryContext as D, MemoryQueryContext as M, SqliteQueryContext as S, type TableSchemaDefinition as T, type StorageTable as a, MemoryAdapter as b, SQLiteAdapter as c, type StorageAdapter as d, DexieAdapter as e };
443
+ export { DexieQueryContext as D, MemoryQueryContext as M, SQLiteQueryContext as S, type TableSchemaDefinition as T, type StorageTable as a, MemoryAdapter as b, SQLiteAdapter as c, type StorageAdapter as d, DexieAdapter as e };
package/dist/dexie.d.cts CHANGED
@@ -1,3 +1,3 @@
1
- export { e as DexieAdapter, D as DexieQueryContext, d as StorageAdapter } from './dexie-T9m1mP1h.cjs';
1
+ export { e as DexieAdapter, D as DexieQueryContext, d as StorageAdapter } from './dexie-3VOQSn1s.cjs';
2
2
  import 'dexie';
3
- import './types-CSbIAfu2.cjs';
3
+ import './types-6-NyRQ0D.cjs';
package/dist/dexie.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- export { e as DexieAdapter, D as DexieQueryContext, d as StorageAdapter } from './dexie-BFPA0JU2.js';
1
+ export { e as DexieAdapter, D as DexieQueryContext, d as StorageAdapter } from './dexie-D85rTx4g.js';
2
2
  import 'dexie';
3
- import './types-CSbIAfu2.js';
3
+ import './types-6-NyRQ0D.js';
@@ -1,4 +1,4 @@
1
- import { S as SQLiteDatabaseDriver, a as SQLiteRunResult, b as SQLiteQueryResult } from './types-CSbIAfu2.cjs';
1
+ import { S as SQLiteDatabaseDriver, a as SQLiteRunResult, b as SQLiteQueryResult } from './types-6-NyRQ0D.cjs';
2
2
 
3
3
  declare class ExpoSQLiteDriver implements SQLiteDatabaseDriver {
4
4
  readonly type = "ExpoSQLiteDriver";
@@ -1,4 +1,4 @@
1
- import { S as SQLiteDatabaseDriver, a as SQLiteRunResult, b as SQLiteQueryResult } from './types-CSbIAfu2.js';
1
+ import { S as SQLiteDatabaseDriver, a as SQLiteRunResult, b as SQLiteQueryResult } from './types-6-NyRQ0D.js';
2
2
 
3
3
  declare class ExpoSQLiteDriver implements SQLiteDatabaseDriver {
4
4
  readonly type = "ExpoSQLiteDriver";
package/dist/index.cjs CHANGED
@@ -24,7 +24,7 @@ __export(index_exports, {
24
24
  MemoryAdapter: () => MemoryAdapter,
25
25
  MemoryQueryContext: () => MemoryQueryContext,
26
26
  SQLiteAdapter: () => SQLiteAdapter2,
27
- SqliteQueryContext: () => SqliteQueryContext,
27
+ SQLiteQueryContext: () => SQLiteQueryContext,
28
28
  SyncAction: () => SyncAction,
29
29
  createLocalId: () => createLocalId
30
30
  });
@@ -1438,21 +1438,12 @@ var DyncBase = class {
1438
1438
  }
1439
1439
  return builder;
1440
1440
  },
1441
- sqlite(configure) {
1441
+ sqlite(migrations) {
1442
1442
  if (!storesDefined) {
1443
1443
  throw new Error("Call stores() before registering sqlite migrations");
1444
1444
  }
1445
1445
  const sqliteOptions = schemaOptions.sqlite ??= {};
1446
- const migrations = sqliteOptions.migrations ??= {};
1447
- const configurator = {
1448
- upgrade(handler) {
1449
- migrations.upgrade = handler;
1450
- },
1451
- downgrade(handler) {
1452
- migrations.downgrade = handler;
1453
- }
1454
- };
1455
- configure(configurator);
1446
+ sqliteOptions.migrations = migrations;
1456
1447
  return builder;
1457
1448
  }
1458
1449
  };
@@ -2532,8 +2523,8 @@ var normalizeComparableValue = (value) => {
2532
2523
  return value;
2533
2524
  };
2534
2525
 
2535
- // src/storage/sqlite/SqliteQueryContext.ts
2536
- var SqliteQueryContext = class {
2526
+ // src/storage/sqlite/SQLiteQueryContext.ts
2527
+ var SQLiteQueryContext = class {
2537
2528
  constructor(driver, adapter) {
2538
2529
  this.driver = driver;
2539
2530
  this.adapter = adapter;
@@ -2719,7 +2710,7 @@ var SQLiteAdapter2 = class {
2719
2710
  async query(arg1, arg2) {
2720
2711
  if (typeof arg1 === "function") {
2721
2712
  const driver2 = await this.getDriver();
2722
- return arg1(new SqliteQueryContext(driver2, this));
2713
+ return arg1(new SQLiteQueryContext(driver2, this));
2723
2714
  }
2724
2715
  const statement = arg1;
2725
2716
  const values = arg2;
@@ -2838,25 +2829,22 @@ var SQLiteAdapter2 = class {
2838
2829
  }
2839
2830
  if (currentVersion < targetVersion) {
2840
2831
  for (let version = currentVersion + 1; version <= targetVersion; version += 1) {
2841
- await this.runMigrationStep(version, "upgrade", version - 1, version);
2832
+ await this.runMigrationStep(version, "up");
2842
2833
  await this.setStoredSchemaVersion(version);
2843
2834
  }
2844
2835
  return;
2845
2836
  }
2846
2837
  for (let version = currentVersion; version > targetVersion; version -= 1) {
2847
- await this.runMigrationStep(version, "downgrade", version, version - 1);
2838
+ await this.runMigrationStep(version, "down");
2848
2839
  await this.setStoredSchemaVersion(version - 1);
2849
2840
  }
2850
2841
  }
2851
- async runMigrationStep(version, direction, fromVersion, toVersion) {
2842
+ async runMigrationStep(version, direction) {
2852
2843
  const handler = this.getMigrationHandler(version, direction);
2853
2844
  if (!handler) {
2854
2845
  return;
2855
2846
  }
2856
2847
  const context = {
2857
- direction,
2858
- fromVersion,
2859
- toVersion,
2860
2848
  execute: (statement) => this.internalExecute(statement),
2861
2849
  run: (statement, values) => this.internalRun(statement, values),
2862
2850
  query: (statement, values) => this.internalQuery(statement, values)
@@ -2869,7 +2857,7 @@ var SQLiteAdapter2 = class {
2869
2857
  if (!migrations) {
2870
2858
  return void 0;
2871
2859
  }
2872
- return direction === "upgrade" ? migrations.upgrade : migrations.downgrade;
2860
+ return direction === "up" ? migrations.up : migrations.down;
2873
2861
  }
2874
2862
  async applySchema() {
2875
2863
  if (this.schemaApplied) {
@@ -3927,7 +3915,7 @@ var SQLiteCollection2 = class _SQLiteCollection {
3927
3915
  MemoryAdapter,
3928
3916
  MemoryQueryContext,
3929
3917
  SQLiteAdapter,
3930
- SqliteQueryContext,
3918
+ SQLiteQueryContext,
3931
3919
  SyncAction,
3932
3920
  createLocalId
3933
3921
  });