@anfenn/dync 1.0.21 → 1.0.22
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/dist/capacitor.cjs +0 -2
- package/dist/capacitor.cjs.map +1 -1
- package/dist/capacitor.js +1 -1
- package/dist/{chunk-CGCYGESK.js → chunk-SQB6E7V2.js} +1 -3
- package/dist/chunk-SQB6E7V2.js.map +1 -0
- package/dist/{chunk-I2KQD4DD.js → chunk-YSKDP34Q.js} +6 -5
- package/dist/chunk-YSKDP34Q.js.map +1 -0
- package/dist/expoSqlite.cjs +0 -1
- package/dist/expoSqlite.cjs.map +1 -1
- package/dist/expoSqlite.js +0 -1
- package/dist/expoSqlite.js.map +1 -1
- package/dist/index.cjs +5 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +2 -2
- package/dist/node.cjs +0 -1
- package/dist/node.cjs.map +1 -1
- package/dist/node.js +0 -1
- package/dist/node.js.map +1 -1
- package/dist/react/index.js +2 -2
- package/dist/wa-sqlite.cjs +0 -1
- package/dist/wa-sqlite.cjs.map +1 -1
- package/dist/wa-sqlite.js +0 -1
- package/dist/wa-sqlite.js.map +1 -1
- package/package.json +1 -1
- package/src/storage/sqlite/drivers/BetterSqlite3Driver.ts +0 -3
- package/src/storage/sqlite/drivers/CapacitorFastSqlDriver.ts +0 -2
- package/src/storage/sqlite/drivers/CapacitorSQLiteDriver.ts +0 -2
- package/src/storage/sqlite/drivers/ExpoSQLiteDriver.native.ts +0 -2
- package/src/storage/sqlite/drivers/WaSqliteDriver.ts +0 -3
- package/src/storage/sqlite/helpers.ts +8 -4
- package/dist/chunk-CGCYGESK.js.map +0 -1
- package/dist/chunk-I2KQD4DD.js.map +0 -1
package/dist/capacitor.cjs
CHANGED
|
@@ -101,7 +101,6 @@ var CapacitorSQLiteDriver = class {
|
|
|
101
101
|
}
|
|
102
102
|
const db = await this.ensureDb();
|
|
103
103
|
await db.open();
|
|
104
|
-
await db.execute("PRAGMA case_sensitive_like = ON");
|
|
105
104
|
this.opened = true;
|
|
106
105
|
})();
|
|
107
106
|
try {
|
|
@@ -180,7 +179,6 @@ var CapacitorFastSqlDriver = class {
|
|
|
180
179
|
encryptionKey,
|
|
181
180
|
readOnly: this.options.readonly
|
|
182
181
|
});
|
|
183
|
-
await this.db.execute("PRAGMA case_sensitive_like = ON");
|
|
184
182
|
this.opened = true;
|
|
185
183
|
}
|
|
186
184
|
})();
|
package/dist/capacitor.cjs.map
CHANGED
|
@@ -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 // Case-sensitive LIKE to match Dexie's startsWith() behavior\n await db.execute('PRAGMA case_sensitive_like = ON');\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 // Case-sensitive LIKE to match Dexie's startsWith() behavior\n await this.db.execute('PRAGMA case_sensitive_like = ON');\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":[]}
|
package/dist/capacitor.js
CHANGED
|
@@ -64,7 +64,6 @@ var CapacitorSQLiteDriver = class {
|
|
|
64
64
|
}
|
|
65
65
|
const db = await this.ensureDb();
|
|
66
66
|
await db.open();
|
|
67
|
-
await db.execute("PRAGMA case_sensitive_like = ON");
|
|
68
67
|
this.opened = true;
|
|
69
68
|
})();
|
|
70
69
|
try {
|
|
@@ -143,7 +142,6 @@ var CapacitorFastSqlDriver = class {
|
|
|
143
142
|
encryptionKey,
|
|
144
143
|
readOnly: this.options.readonly
|
|
145
144
|
});
|
|
146
|
-
await this.db.execute("PRAGMA case_sensitive_like = ON");
|
|
147
145
|
this.opened = true;
|
|
148
146
|
}
|
|
149
147
|
})();
|
|
@@ -190,4 +188,4 @@ export {
|
|
|
190
188
|
CapacitorSQLiteDriver,
|
|
191
189
|
CapacitorFastSqlDriver
|
|
192
190
|
};
|
|
193
|
-
//# sourceMappingURL=chunk-
|
|
191
|
+
//# sourceMappingURL=chunk-SQB6E7V2.js.map
|
|
@@ -0,0 +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":[]}
|
|
@@ -2356,7 +2356,7 @@ var buildCondition = (condition) => {
|
|
|
2356
2356
|
switch (condition.type) {
|
|
2357
2357
|
case "equals": {
|
|
2358
2358
|
if (condition.caseInsensitive) {
|
|
2359
|
-
return { clause:
|
|
2359
|
+
return { clause: `${col} = ? COLLATE NOCASE`, parameters: [condition.value] };
|
|
2360
2360
|
}
|
|
2361
2361
|
return { clause: `${col} = ?`, parameters: [condition.value] };
|
|
2362
2362
|
}
|
|
@@ -2378,7 +2378,7 @@ var buildCondition = (condition) => {
|
|
|
2378
2378
|
const placeholders = condition.values.map(() => "?").join(", ");
|
|
2379
2379
|
if (condition.caseInsensitive) {
|
|
2380
2380
|
return {
|
|
2381
|
-
clause:
|
|
2381
|
+
clause: `${col} COLLATE NOCASE IN (${placeholders})`,
|
|
2382
2382
|
parameters: condition.values
|
|
2383
2383
|
};
|
|
2384
2384
|
}
|
|
@@ -2393,9 +2393,10 @@ var buildCondition = (condition) => {
|
|
|
2393
2393
|
}
|
|
2394
2394
|
case "like": {
|
|
2395
2395
|
if (condition.caseInsensitive) {
|
|
2396
|
-
return { clause:
|
|
2396
|
+
return { clause: `${col} LIKE ?`, parameters: [condition.pattern] };
|
|
2397
2397
|
}
|
|
2398
|
-
|
|
2398
|
+
const globPattern = condition.pattern.replace(/%/g, "*").replace(/_/g, "?");
|
|
2399
|
+
return { clause: `${col} GLOB ?`, parameters: [globPattern] };
|
|
2399
2400
|
}
|
|
2400
2401
|
}
|
|
2401
2402
|
};
|
|
@@ -3818,4 +3819,4 @@ export {
|
|
|
3818
3819
|
SqliteQueryContext,
|
|
3819
3820
|
SQLiteAdapter2 as SQLiteAdapter
|
|
3820
3821
|
};
|
|
3821
|
-
//# sourceMappingURL=chunk-
|
|
3822
|
+
//# sourceMappingURL=chunk-YSKDP34Q.js.map
|