@anfenn/dync 1.0.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/LICENSE +21 -0
- package/README.md +212 -0
- package/dist/capacitor.cjs +228 -0
- package/dist/capacitor.cjs.map +1 -0
- package/dist/capacitor.d.cts +62 -0
- package/dist/capacitor.d.ts +62 -0
- package/dist/capacitor.js +9 -0
- package/dist/capacitor.js.map +1 -0
- package/dist/chunk-LGHOZECP.js +3884 -0
- package/dist/chunk-LGHOZECP.js.map +1 -0
- package/dist/chunk-SQB6E7V2.js +191 -0
- package/dist/chunk-SQB6E7V2.js.map +1 -0
- package/dist/dexie-Bv-fV10P.d.cts +444 -0
- package/dist/dexie-DJFApKsM.d.ts +444 -0
- package/dist/dexie.cjs +381 -0
- package/dist/dexie.cjs.map +1 -0
- package/dist/dexie.d.cts +3 -0
- package/dist/dexie.d.ts +3 -0
- package/dist/dexie.js +343 -0
- package/dist/dexie.js.map +1 -0
- package/dist/expoSqlite.cjs +98 -0
- package/dist/expoSqlite.cjs.map +1 -0
- package/dist/expoSqlite.d.cts +17 -0
- package/dist/expoSqlite.d.ts +17 -0
- package/dist/expoSqlite.js +61 -0
- package/dist/expoSqlite.js.map +1 -0
- package/dist/index.cjs +3916 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +8 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/index.shared-CPIge2ZM.d.ts +234 -0
- package/dist/index.shared-YSn6c01d.d.cts +234 -0
- package/dist/node.cjs +126 -0
- package/dist/node.cjs.map +1 -0
- package/dist/node.d.cts +80 -0
- package/dist/node.d.ts +80 -0
- package/dist/node.js +89 -0
- package/dist/node.js.map +1 -0
- package/dist/react/index.cjs +1754 -0
- package/dist/react/index.cjs.map +1 -0
- package/dist/react/index.d.cts +40 -0
- package/dist/react/index.d.ts +40 -0
- package/dist/react/index.js +78 -0
- package/dist/react/index.js.map +1 -0
- package/dist/types-CSbIAfu2.d.cts +46 -0
- package/dist/types-CSbIAfu2.d.ts +46 -0
- package/dist/wa-sqlite.cjs +318 -0
- package/dist/wa-sqlite.cjs.map +1 -0
- package/dist/wa-sqlite.d.cts +175 -0
- package/dist/wa-sqlite.d.ts +175 -0
- package/dist/wa-sqlite.js +281 -0
- package/dist/wa-sqlite.js.map +1 -0
- package/package.json +171 -0
- package/src/addVisibilityChangeListener.native.ts +33 -0
- package/src/addVisibilityChangeListener.ts +24 -0
- package/src/capacitor.ts +4 -0
- package/src/core/StateManager.ts +272 -0
- package/src/core/firstLoad.ts +332 -0
- package/src/core/pullOperations.ts +212 -0
- package/src/core/pushOperations.ts +290 -0
- package/src/core/tableEnhancers.ts +457 -0
- package/src/core/types.ts +3 -0
- package/src/createLocalId.native.ts +8 -0
- package/src/createLocalId.ts +6 -0
- package/src/dexie.ts +2 -0
- package/src/expoSqlite.ts +2 -0
- package/src/helpers.ts +87 -0
- package/src/index.native.ts +28 -0
- package/src/index.shared.ts +613 -0
- package/src/index.ts +28 -0
- package/src/logger.ts +26 -0
- package/src/node.ts +4 -0
- package/src/react/index.ts +2 -0
- package/src/react/useDync.ts +156 -0
- package/src/storage/dexie/DexieAdapter.ts +72 -0
- package/src/storage/dexie/DexieQueryContext.ts +14 -0
- package/src/storage/dexie/DexieStorageCollection.ts +124 -0
- package/src/storage/dexie/DexieStorageTable.ts +123 -0
- package/src/storage/dexie/DexieStorageWhereClause.ts +103 -0
- package/src/storage/dexie/helpers.ts +1 -0
- package/src/storage/dexie/index.ts +7 -0
- package/src/storage/memory/MemoryAdapter.ts +55 -0
- package/src/storage/memory/MemoryCollection.ts +215 -0
- package/src/storage/memory/MemoryQueryContext.ts +14 -0
- package/src/storage/memory/MemoryTable.ts +336 -0
- package/src/storage/memory/MemoryWhereClause.ts +134 -0
- package/src/storage/memory/index.ts +7 -0
- package/src/storage/memory/types.ts +24 -0
- package/src/storage/sqlite/SQLiteAdapter.ts +564 -0
- package/src/storage/sqlite/SQLiteCollection.ts +294 -0
- package/src/storage/sqlite/SQLiteTable.ts +604 -0
- package/src/storage/sqlite/SQLiteWhereClause.ts +341 -0
- package/src/storage/sqlite/SqliteQueryContext.ts +30 -0
- package/src/storage/sqlite/drivers/BetterSqlite3Driver.ts +156 -0
- package/src/storage/sqlite/drivers/CapacitorFastSqlDriver.ts +114 -0
- package/src/storage/sqlite/drivers/CapacitorSQLiteDriver.ts +137 -0
- package/src/storage/sqlite/drivers/ExpoSQLiteDriver.native.ts +67 -0
- package/src/storage/sqlite/drivers/WaSqliteDriver.ts +537 -0
- package/src/storage/sqlite/drivers/wa-sqlite-vfs.d.ts +46 -0
- package/src/storage/sqlite/helpers.ts +144 -0
- package/src/storage/sqlite/index.ts +11 -0
- package/src/storage/sqlite/schema.ts +44 -0
- package/src/storage/sqlite/types.ts +164 -0
- package/src/storage/types.ts +112 -0
- package/src/types.ts +186 -0
- package/src/wa-sqlite.ts +4 -0
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
// src/storage/sqlite/drivers/CapacitorSQLiteDriver.ts
|
|
2
|
+
var sqliteModuleCache = null;
|
|
3
|
+
async function getSqliteModule() {
|
|
4
|
+
if (!sqliteModuleCache) {
|
|
5
|
+
sqliteModuleCache = await import("@capacitor-community/sqlite");
|
|
6
|
+
}
|
|
7
|
+
return sqliteModuleCache;
|
|
8
|
+
}
|
|
9
|
+
var CapacitorSQLiteDriver = class {
|
|
10
|
+
type = "CapacitorSQLiteDriver";
|
|
11
|
+
connectionFactory;
|
|
12
|
+
config;
|
|
13
|
+
db;
|
|
14
|
+
openPromise;
|
|
15
|
+
opened = false;
|
|
16
|
+
name;
|
|
17
|
+
constructor(databaseName, config = {}) {
|
|
18
|
+
this.name = databaseName;
|
|
19
|
+
this.config = config;
|
|
20
|
+
}
|
|
21
|
+
async getConnectionFactory() {
|
|
22
|
+
if (!this.connectionFactory) {
|
|
23
|
+
const { CapacitorSQLite, SQLiteConnection } = await getSqliteModule();
|
|
24
|
+
this.connectionFactory = new SQLiteConnection(CapacitorSQLite);
|
|
25
|
+
}
|
|
26
|
+
return this.connectionFactory;
|
|
27
|
+
}
|
|
28
|
+
async ensureDb() {
|
|
29
|
+
if (!this.db) {
|
|
30
|
+
const connectionFactory = await this.getConnectionFactory();
|
|
31
|
+
const readonly = this.config.readonly ?? false;
|
|
32
|
+
const existsResult = await connectionFactory.isConnection(this.name, readonly);
|
|
33
|
+
if (existsResult.result) {
|
|
34
|
+
this.db = await connectionFactory.retrieveConnection(this.name, readonly);
|
|
35
|
+
} else {
|
|
36
|
+
await connectionFactory.closeConnection(this.name, readonly).catch(() => {
|
|
37
|
+
});
|
|
38
|
+
this.db = await connectionFactory.createConnection(
|
|
39
|
+
this.name,
|
|
40
|
+
this.config.encrypted ?? false,
|
|
41
|
+
this.config.mode ?? "no-encryption",
|
|
42
|
+
this.config.version ?? 1,
|
|
43
|
+
readonly
|
|
44
|
+
);
|
|
45
|
+
}
|
|
46
|
+
this.opened = false;
|
|
47
|
+
}
|
|
48
|
+
return this.db;
|
|
49
|
+
}
|
|
50
|
+
async open() {
|
|
51
|
+
if (this.opened) return;
|
|
52
|
+
if (this.openPromise) return this.openPromise;
|
|
53
|
+
this.openPromise = (async () => {
|
|
54
|
+
const connectionFactory = await this.getConnectionFactory();
|
|
55
|
+
if (this.config.getEncryptionKey) {
|
|
56
|
+
const { result: isStored } = await connectionFactory.isSecretStored();
|
|
57
|
+
if (!isStored) {
|
|
58
|
+
const key = this.config.getEncryptionKey();
|
|
59
|
+
if (!key && this.config.encrypted) {
|
|
60
|
+
throw new Error("CapacitorSQLiteDriverOptions.encrypted=true but no encryption key was provided (getEncryptionKey).");
|
|
61
|
+
}
|
|
62
|
+
await connectionFactory.setEncryptionSecret(key);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
const db = await this.ensureDb();
|
|
66
|
+
await db.open();
|
|
67
|
+
this.opened = true;
|
|
68
|
+
})();
|
|
69
|
+
try {
|
|
70
|
+
await this.openPromise;
|
|
71
|
+
} finally {
|
|
72
|
+
this.openPromise = void 0;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
async close() {
|
|
76
|
+
if (!this.db) return;
|
|
77
|
+
await this.db.close();
|
|
78
|
+
const connectionFactory = await this.getConnectionFactory();
|
|
79
|
+
await connectionFactory.closeConnection(this.name, this.config.readonly ?? false);
|
|
80
|
+
this.db = void 0;
|
|
81
|
+
this.opened = false;
|
|
82
|
+
this.openPromise = void 0;
|
|
83
|
+
}
|
|
84
|
+
async execute(statement) {
|
|
85
|
+
await this.open();
|
|
86
|
+
const db = await this.ensureDb();
|
|
87
|
+
await db.execute(statement, false);
|
|
88
|
+
}
|
|
89
|
+
async run(statement, values = []) {
|
|
90
|
+
await this.open();
|
|
91
|
+
const db = await this.ensureDb();
|
|
92
|
+
const result = await db.run(statement, values, false, "no");
|
|
93
|
+
const changes = result?.changes?.changes ?? result?.changes ?? 0;
|
|
94
|
+
const lastId = result?.changes?.lastId ?? void 0;
|
|
95
|
+
return { changes, lastId };
|
|
96
|
+
}
|
|
97
|
+
async query(statement, values = []) {
|
|
98
|
+
await this.open();
|
|
99
|
+
const db = await this.ensureDb();
|
|
100
|
+
const result = await db.query(statement, values, true);
|
|
101
|
+
if (Array.isArray(result?.values) && result.values.length > 0 && !Array.isArray(result.values[0])) {
|
|
102
|
+
const columns = Object.keys(result.values[0]);
|
|
103
|
+
const rows = result.values.map((row) => columns.map((column) => row[column]));
|
|
104
|
+
return { columns, values: rows };
|
|
105
|
+
}
|
|
106
|
+
return { columns: result?.columns ?? [], values: result?.values ?? [] };
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
// src/storage/sqlite/drivers/CapacitorFastSqlDriver.ts
|
|
111
|
+
var fastSqlModuleCache = null;
|
|
112
|
+
async function getFastSqlModule() {
|
|
113
|
+
if (!fastSqlModuleCache) {
|
|
114
|
+
fastSqlModuleCache = await import("@capgo/capacitor-fast-sql");
|
|
115
|
+
}
|
|
116
|
+
return fastSqlModuleCache;
|
|
117
|
+
}
|
|
118
|
+
var CapacitorFastSqlDriver = class {
|
|
119
|
+
type = "CapacitorFastSqlDriver";
|
|
120
|
+
options;
|
|
121
|
+
db;
|
|
122
|
+
openPromise;
|
|
123
|
+
opened = false;
|
|
124
|
+
name;
|
|
125
|
+
constructor(databaseName, options = {}) {
|
|
126
|
+
this.name = databaseName;
|
|
127
|
+
this.options = options;
|
|
128
|
+
}
|
|
129
|
+
async open() {
|
|
130
|
+
if (this.opened) return;
|
|
131
|
+
if (this.openPromise) return this.openPromise;
|
|
132
|
+
this.openPromise = (async () => {
|
|
133
|
+
if (!this.db) {
|
|
134
|
+
const { FastSQL } = await getFastSqlModule();
|
|
135
|
+
const encryptionKey = this.options.getEncryptionKey?.();
|
|
136
|
+
if (!encryptionKey && this.options.encrypted) {
|
|
137
|
+
throw new Error("FastSqlDriverOptions.encrypted=true but no encryption key was provided (getEncryptionKey).");
|
|
138
|
+
}
|
|
139
|
+
this.db = await FastSQL.connect({
|
|
140
|
+
database: this.name,
|
|
141
|
+
encrypted: this.options.encrypted,
|
|
142
|
+
encryptionKey,
|
|
143
|
+
readOnly: this.options.readonly
|
|
144
|
+
});
|
|
145
|
+
this.opened = true;
|
|
146
|
+
}
|
|
147
|
+
})();
|
|
148
|
+
try {
|
|
149
|
+
await this.openPromise;
|
|
150
|
+
} finally {
|
|
151
|
+
this.openPromise = void 0;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
async close() {
|
|
155
|
+
if (this.db) {
|
|
156
|
+
const { FastSQL } = await getFastSqlModule();
|
|
157
|
+
await FastSQL.disconnect(this.name);
|
|
158
|
+
this.db = void 0;
|
|
159
|
+
this.opened = false;
|
|
160
|
+
this.openPromise = void 0;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
async execute(statement) {
|
|
164
|
+
await this.open();
|
|
165
|
+
await this.db.execute(statement);
|
|
166
|
+
}
|
|
167
|
+
async run(statement, values = []) {
|
|
168
|
+
await this.open();
|
|
169
|
+
const result = await this.db.run(statement, values);
|
|
170
|
+
return {
|
|
171
|
+
changes: result.rowsAffected,
|
|
172
|
+
lastId: result.insertId
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
async query(statement, values = []) {
|
|
176
|
+
await this.open();
|
|
177
|
+
const rows = await this.db.query(statement, values);
|
|
178
|
+
if (!rows.length) {
|
|
179
|
+
return { columns: [], values: [] };
|
|
180
|
+
}
|
|
181
|
+
const columns = Object.keys(rows[0]);
|
|
182
|
+
const resultValues = rows.map((row) => columns.map((col) => row[col]));
|
|
183
|
+
return { columns, values: resultValues };
|
|
184
|
+
}
|
|
185
|
+
};
|
|
186
|
+
|
|
187
|
+
export {
|
|
188
|
+
CapacitorSQLiteDriver,
|
|
189
|
+
CapacitorFastSqlDriver
|
|
190
|
+
};
|
|
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":[]}
|
|
@@ -0,0 +1,444 @@
|
|
|
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';
|
|
3
|
+
|
|
4
|
+
type TableSchemaDefinition = string | SQLiteTableDefinition;
|
|
5
|
+
interface SQLiteTableDefinition {
|
|
6
|
+
columns: Record<string, SQLiteColumnDefinition>;
|
|
7
|
+
indexes?: SQLiteIndexDefinition[];
|
|
8
|
+
tableConstraints?: string[];
|
|
9
|
+
withoutRowId?: boolean;
|
|
10
|
+
strict?: boolean;
|
|
11
|
+
}
|
|
12
|
+
interface SQLiteColumnDefinition {
|
|
13
|
+
type?: string;
|
|
14
|
+
length?: number;
|
|
15
|
+
nullable?: boolean;
|
|
16
|
+
unique?: boolean;
|
|
17
|
+
default?: SQLiteDefaultValue;
|
|
18
|
+
check?: string;
|
|
19
|
+
references?: SQLiteForeignKeyReference | string;
|
|
20
|
+
collate?: string;
|
|
21
|
+
generatedAlwaysAs?: string;
|
|
22
|
+
stored?: boolean;
|
|
23
|
+
constraints?: string[];
|
|
24
|
+
}
|
|
25
|
+
type SQLiteDefaultValue = string | number | boolean | null;
|
|
26
|
+
interface SQLiteForeignKeyReference {
|
|
27
|
+
table: string;
|
|
28
|
+
column?: string;
|
|
29
|
+
onDelete?: SQLiteForeignKeyAction;
|
|
30
|
+
onUpdate?: SQLiteForeignKeyAction;
|
|
31
|
+
match?: string;
|
|
32
|
+
}
|
|
33
|
+
type SQLiteForeignKeyAction = 'SET NULL' | 'SET DEFAULT' | 'RESTRICT' | 'NO ACTION' | 'CASCADE';
|
|
34
|
+
interface SQLiteIndexDefinition {
|
|
35
|
+
name?: string;
|
|
36
|
+
columns: string[];
|
|
37
|
+
unique?: boolean;
|
|
38
|
+
where?: string;
|
|
39
|
+
collate?: string;
|
|
40
|
+
orders?: Array<'ASC' | 'DESC'>;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
declare class DexieQueryContext {
|
|
44
|
+
private readonly adapter;
|
|
45
|
+
constructor(adapter: DexieAdapter);
|
|
46
|
+
table<T = any>(name: string): StorageTable<T>;
|
|
47
|
+
transaction<T>(mode: TransactionMode, tableNames: string[], callback: (context: StorageTransactionContext) => Promise<T>): Promise<T>;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
interface MemoryRecord {
|
|
51
|
+
_localId?: string;
|
|
52
|
+
id?: unknown;
|
|
53
|
+
updated_at?: string;
|
|
54
|
+
[key: string]: unknown;
|
|
55
|
+
}
|
|
56
|
+
interface MemoryCollectionState<T extends MemoryRecord> {
|
|
57
|
+
predicate: (record: T, key: string) => boolean;
|
|
58
|
+
orderBy?: {
|
|
59
|
+
index: string | string[];
|
|
60
|
+
direction: 'asc' | 'desc';
|
|
61
|
+
};
|
|
62
|
+
reverse: boolean;
|
|
63
|
+
offset: number;
|
|
64
|
+
limit?: number;
|
|
65
|
+
distinct: boolean;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
declare class MemoryCollection<T extends MemoryRecord = MemoryRecord> implements StorageCollection<T> {
|
|
69
|
+
private readonly table;
|
|
70
|
+
private readonly state;
|
|
71
|
+
constructor(table: MemoryTable<T>, state: MemoryCollectionState<T>);
|
|
72
|
+
getState(): MemoryCollectionState<T>;
|
|
73
|
+
matches(record: T, key: string): boolean;
|
|
74
|
+
clone(_props?: Record<string, unknown>): StorageCollection<T>;
|
|
75
|
+
reverse(): StorageCollection<T>;
|
|
76
|
+
offset(offset: number): StorageCollection<T>;
|
|
77
|
+
limit(count: number): StorageCollection<T>;
|
|
78
|
+
toCollection(): StorageCollection<T>;
|
|
79
|
+
distinct(): StorageCollection<T>;
|
|
80
|
+
jsFilter(predicate: (item: T) => boolean): StorageCollection<T>;
|
|
81
|
+
or(index: string): StorageWhereClause<T>;
|
|
82
|
+
first(): Promise<T | undefined>;
|
|
83
|
+
last(): Promise<T | undefined>;
|
|
84
|
+
each(callback: (item: T, index: number) => void | Promise<void>): Promise<void>;
|
|
85
|
+
eachKey(callback: (key: unknown, index: number) => void | Promise<void>): Promise<void>;
|
|
86
|
+
eachPrimaryKey(callback: (key: unknown, index: number) => void | Promise<void>): Promise<void>;
|
|
87
|
+
eachUniqueKey(callback: (key: unknown, index: number) => void | Promise<void>): Promise<void>;
|
|
88
|
+
keys(): Promise<unknown[]>;
|
|
89
|
+
primaryKeys(): Promise<unknown[]>;
|
|
90
|
+
uniqueKeys(): Promise<unknown[]>;
|
|
91
|
+
count(): Promise<number>;
|
|
92
|
+
sortBy(key: string): Promise<T[]>;
|
|
93
|
+
delete(): Promise<number>;
|
|
94
|
+
modify(changes: Partial<T> | ((item: T) => void | Promise<void>)): Promise<number>;
|
|
95
|
+
toArray(): Promise<T[]>;
|
|
96
|
+
private withState;
|
|
97
|
+
private combinePredicate;
|
|
98
|
+
private materializeEntries;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
declare class MemoryWhereClause<T extends MemoryRecord = MemoryRecord> implements StorageWhereClause<T> {
|
|
102
|
+
private readonly table;
|
|
103
|
+
private readonly index;
|
|
104
|
+
private readonly baseCollection?;
|
|
105
|
+
constructor(table: MemoryTable<T>, index: string | string[], baseCollection?: MemoryCollection<T>);
|
|
106
|
+
equals(value: any): StorageCollection<T>;
|
|
107
|
+
above(value: any): StorageCollection<T>;
|
|
108
|
+
aboveOrEqual(value: any): StorageCollection<T>;
|
|
109
|
+
below(value: any): StorageCollection<T>;
|
|
110
|
+
belowOrEqual(value: any): StorageCollection<T>;
|
|
111
|
+
between(lower: any, upper: any, includeLower?: boolean, includeUpper?: boolean): StorageCollection<T>;
|
|
112
|
+
inAnyRange(ranges: Array<[any, any]>, options?: {
|
|
113
|
+
includeLower?: boolean;
|
|
114
|
+
includeUpper?: boolean;
|
|
115
|
+
}): StorageCollection<T>;
|
|
116
|
+
startsWith(prefix: string): StorageCollection<T>;
|
|
117
|
+
startsWithIgnoreCase(prefix: string): StorageCollection<T>;
|
|
118
|
+
startsWithAnyOf(...prefixes: string[]): StorageCollection<T>;
|
|
119
|
+
startsWithAnyOf(prefixes: string[]): StorageCollection<T>;
|
|
120
|
+
startsWithAnyOfIgnoreCase(...prefixes: string[]): StorageCollection<T>;
|
|
121
|
+
startsWithAnyOfIgnoreCase(prefixes: string[]): StorageCollection<T>;
|
|
122
|
+
equalsIgnoreCase(value: string): StorageCollection<T>;
|
|
123
|
+
anyOf(...values: any[]): StorageCollection<T>;
|
|
124
|
+
anyOf(values: any[]): StorageCollection<T>;
|
|
125
|
+
anyOfIgnoreCase(...values: string[]): StorageCollection<T>;
|
|
126
|
+
anyOfIgnoreCase(values: string[]): StorageCollection<T>;
|
|
127
|
+
noneOf(...values: any[]): StorageCollection<T>;
|
|
128
|
+
noneOf(values: any[]): StorageCollection<T>;
|
|
129
|
+
notEqual(value: any): StorageCollection<T>;
|
|
130
|
+
private createCollection;
|
|
131
|
+
private flattenArgs;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
declare class MemoryTable<T extends MemoryRecord = MemoryRecord> implements StorageTable<T> {
|
|
135
|
+
readonly name: string;
|
|
136
|
+
readonly schema: unknown;
|
|
137
|
+
readonly primaryKey: unknown;
|
|
138
|
+
readonly hook: unknown;
|
|
139
|
+
readonly raw: {
|
|
140
|
+
add: (item: T) => Promise<unknown>;
|
|
141
|
+
put: (item: T) => Promise<unknown>;
|
|
142
|
+
update: (key: unknown, changes: Partial<T>) => Promise<number>;
|
|
143
|
+
delete: (key: unknown) => Promise<void>;
|
|
144
|
+
get: (key: unknown) => Promise<T | undefined>;
|
|
145
|
+
bulkAdd: (items: T[]) => Promise<unknown>;
|
|
146
|
+
bulkPut: (items: T[]) => Promise<unknown>;
|
|
147
|
+
bulkUpdate: (keysAndChanges: Array<{
|
|
148
|
+
key: unknown;
|
|
149
|
+
changes: Partial<T>;
|
|
150
|
+
}>) => Promise<number>;
|
|
151
|
+
bulkDelete: (keys: Array<unknown>) => Promise<void>;
|
|
152
|
+
clear: () => Promise<void>;
|
|
153
|
+
};
|
|
154
|
+
private readonly records;
|
|
155
|
+
constructor(name: string);
|
|
156
|
+
add(item: T): Promise<unknown>;
|
|
157
|
+
put(item: T): Promise<unknown>;
|
|
158
|
+
update(key: unknown, changes: Partial<T>): Promise<number>;
|
|
159
|
+
delete(key: unknown): Promise<void>;
|
|
160
|
+
clear(): Promise<void>;
|
|
161
|
+
private baseClear;
|
|
162
|
+
get(key: unknown): Promise<T | undefined>;
|
|
163
|
+
toArray(): Promise<T[]>;
|
|
164
|
+
count(): Promise<number>;
|
|
165
|
+
bulkAdd(items: T[]): Promise<unknown>;
|
|
166
|
+
private baseBulkAdd;
|
|
167
|
+
bulkPut(items: T[]): Promise<unknown>;
|
|
168
|
+
private baseBulkPut;
|
|
169
|
+
bulkGet(keys: Array<unknown>): Promise<Array<T | undefined>>;
|
|
170
|
+
bulkUpdate(keysAndChanges: Array<{
|
|
171
|
+
key: unknown;
|
|
172
|
+
changes: Partial<T>;
|
|
173
|
+
}>): Promise<number>;
|
|
174
|
+
private baseBulkUpdate;
|
|
175
|
+
bulkDelete(keys: Array<unknown>): Promise<void>;
|
|
176
|
+
private baseBulkDelete;
|
|
177
|
+
where(index: string | string[]): StorageWhereClause<T>;
|
|
178
|
+
orderBy(index: string | string[]): StorageCollection<T>;
|
|
179
|
+
reverse(): StorageCollection<T>;
|
|
180
|
+
offset(offset: number): StorageCollection<T>;
|
|
181
|
+
limit(count: number): StorageCollection<T>;
|
|
182
|
+
mapToClass(_ctor: new (...args: any[]) => any): StorageTable<T>;
|
|
183
|
+
each(callback: (item: T) => void | Promise<void>): Promise<void>;
|
|
184
|
+
jsFilter(predicate: (item: T) => boolean): StorageCollection<T>;
|
|
185
|
+
private createCollection;
|
|
186
|
+
createCollectionFromPredicate(predicate: (record: T, key: string) => boolean, template?: MemoryCollection<T>): MemoryCollection<T>;
|
|
187
|
+
createWhereClause(index: string | string[], baseCollection?: MemoryCollection<T>): MemoryWhereClause<T>;
|
|
188
|
+
entries(): Array<[string, T]>;
|
|
189
|
+
cloneRecord(record: T): T;
|
|
190
|
+
deleteByKey(key: string): void;
|
|
191
|
+
getMutableRecord(key: string): T | undefined;
|
|
192
|
+
setMutableRecord(key: string, record: T): void;
|
|
193
|
+
resolvePublicKey(record: T, key: string): unknown;
|
|
194
|
+
getIndexValue(record: T, index: string | string[]): unknown;
|
|
195
|
+
compareEntries(left: T, right: T, index: string | string[]): number;
|
|
196
|
+
compareValues(left: unknown, right: unknown): number;
|
|
197
|
+
private normalizeComparableValue;
|
|
198
|
+
private baseAdd;
|
|
199
|
+
private basePut;
|
|
200
|
+
private baseUpdate;
|
|
201
|
+
private baseDelete;
|
|
202
|
+
private baseGet;
|
|
203
|
+
private createPrimaryKey;
|
|
204
|
+
private resolveKey;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
declare class MemoryAdapter implements StorageAdapter {
|
|
208
|
+
readonly type = "MemoryAdapter";
|
|
209
|
+
readonly name: string;
|
|
210
|
+
readonly tables: Map<string, MemoryTable<any>>;
|
|
211
|
+
constructor(name: string);
|
|
212
|
+
open(): Promise<void>;
|
|
213
|
+
close(): Promise<void>;
|
|
214
|
+
delete(): Promise<void>;
|
|
215
|
+
query<R>(callback: (ctx: MemoryQueryContext) => Promise<R>): Promise<R>;
|
|
216
|
+
defineSchema(_version: number, schema: Record<string, string>, _options?: StorageSchemaDefinitionOptions): void;
|
|
217
|
+
table<T = any>(name: string): StorageTable<T>;
|
|
218
|
+
transaction<T>(_mode: TransactionMode, tableNames: string[], callback: (context: StorageTransactionContext) => Promise<T>): Promise<T>;
|
|
219
|
+
private ensureTable;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
declare class MemoryQueryContext {
|
|
223
|
+
private readonly adapter;
|
|
224
|
+
constructor(adapter: MemoryAdapter);
|
|
225
|
+
table<T = any>(name: string): StorageTable<T>;
|
|
226
|
+
transaction<T>(mode: TransactionMode, tableNames: string[], callback: (context: StorageTransactionContext) => Promise<T>): Promise<T>;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
declare class SQLiteAdapter implements StorageAdapter {
|
|
230
|
+
readonly type = "SQLiteAdapter";
|
|
231
|
+
readonly name: string;
|
|
232
|
+
private readonly options;
|
|
233
|
+
private readonly schemas;
|
|
234
|
+
private readonly versionSchemas;
|
|
235
|
+
private readonly versionOptions;
|
|
236
|
+
private readonly tableCache;
|
|
237
|
+
private driver;
|
|
238
|
+
private openPromise?;
|
|
239
|
+
private isOpen;
|
|
240
|
+
private schemaApplied;
|
|
241
|
+
private transactionDepth;
|
|
242
|
+
private targetVersion;
|
|
243
|
+
constructor(driver: SQLiteDatabaseDriver, options?: SQLiteAdapterOptions);
|
|
244
|
+
get driverType(): string;
|
|
245
|
+
/**
|
|
246
|
+
* Opens the database connection and applies schema.
|
|
247
|
+
* This is called automatically when performing operations,
|
|
248
|
+
* so explicit calls are optional but safe (idempotent).
|
|
249
|
+
* When called explicitly after schema changes, it will run any pending migrations.
|
|
250
|
+
*/
|
|
251
|
+
open(): Promise<void>;
|
|
252
|
+
private ensureOpen;
|
|
253
|
+
private performOpen;
|
|
254
|
+
close(): Promise<void>;
|
|
255
|
+
delete(): Promise<void>;
|
|
256
|
+
defineSchema(version: number, schema: Record<string, TableSchemaDefinition>, options?: StorageSchemaDefinitionOptions): void;
|
|
257
|
+
private refreshActiveSchema;
|
|
258
|
+
table<T = any>(name: string): StorageTable<T>;
|
|
259
|
+
transaction<T>(_mode: TransactionMode, tableNames: string[], callback: (context: StorageTransactionContext) => Promise<T>): Promise<T>;
|
|
260
|
+
execute(statement: string, values?: any[]): Promise<void>;
|
|
261
|
+
run(statement: string, values?: any[]): Promise<SQLiteRunResult>;
|
|
262
|
+
query<R>(callback: (ctx: SqliteQueryContext) => Promise<R>): Promise<R>;
|
|
263
|
+
query(statement: string, values?: any[]): Promise<SQLiteQueryResult>;
|
|
264
|
+
queryRows(statement: string, values?: any[]): Promise<Array<Record<string, any>>>;
|
|
265
|
+
/**
|
|
266
|
+
* Ensures the database is open and returns the driver.
|
|
267
|
+
* This is the main entry point for all public database operations.
|
|
268
|
+
*/
|
|
269
|
+
private getDriver;
|
|
270
|
+
/**
|
|
271
|
+
* Internal execute that uses driver directly.
|
|
272
|
+
* Used during the open process to avoid recursion.
|
|
273
|
+
*/
|
|
274
|
+
private internalExecute;
|
|
275
|
+
/**
|
|
276
|
+
* Internal run that uses driver directly.
|
|
277
|
+
* Used during the open process to avoid recursion.
|
|
278
|
+
*/
|
|
279
|
+
private internalRun;
|
|
280
|
+
/**
|
|
281
|
+
* Internal queryRows that uses driver directly.
|
|
282
|
+
* Used during the open process to avoid recursion.
|
|
283
|
+
*/
|
|
284
|
+
private internalQueryRows;
|
|
285
|
+
/**
|
|
286
|
+
* Internal query that uses driver directly.
|
|
287
|
+
* Used during migrations to avoid recursion.
|
|
288
|
+
*/
|
|
289
|
+
private internalQuery;
|
|
290
|
+
private logSql;
|
|
291
|
+
private getStoredSchemaVersion;
|
|
292
|
+
private setStoredSchemaVersion;
|
|
293
|
+
private runPendingMigrations;
|
|
294
|
+
private runMigrationStep;
|
|
295
|
+
private getMigrationHandler;
|
|
296
|
+
private applySchema;
|
|
297
|
+
private buildCreateTableStatement;
|
|
298
|
+
private buildStructuredColumnDefinition;
|
|
299
|
+
private formatColumnType;
|
|
300
|
+
private formatDefaultValue;
|
|
301
|
+
private buildReferencesClause;
|
|
302
|
+
private buildIndexStatements;
|
|
303
|
+
private generateIndexName;
|
|
304
|
+
private parseStructuredSchema;
|
|
305
|
+
private normalizeColumns;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
declare class SqliteQueryContext {
|
|
309
|
+
private readonly driver;
|
|
310
|
+
private readonly adapter;
|
|
311
|
+
constructor(driver: SQLiteDatabaseDriver, adapter: SQLiteAdapter);
|
|
312
|
+
table<T = any>(name: string): StorageTable<T>;
|
|
313
|
+
transaction<T>(mode: TransactionMode, tableNames: string[], callback: (context: StorageTransactionContext) => Promise<T>): Promise<T>;
|
|
314
|
+
execute(statement: string): Promise<void>;
|
|
315
|
+
run(statement: string, values?: any[]): Promise<SQLiteRunResult>;
|
|
316
|
+
queryRows(statement: string, values?: any[]): Promise<Array<Record<string, any>>>;
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
type TransactionMode = 'r' | 'rw';
|
|
320
|
+
interface StorageAdapter {
|
|
321
|
+
readonly type: string;
|
|
322
|
+
readonly name: string;
|
|
323
|
+
open(): Promise<void>;
|
|
324
|
+
close(): Promise<void>;
|
|
325
|
+
delete(): Promise<void>;
|
|
326
|
+
defineSchema(version: number, schema: Record<string, TableSchemaDefinition>, options?: StorageSchemaDefinitionOptions): void;
|
|
327
|
+
table<T = any>(name: string): StorageTable<T>;
|
|
328
|
+
transaction<T>(mode: TransactionMode, tableNames: string[], callback: (context: StorageTransactionContext) => Promise<T>): Promise<T>;
|
|
329
|
+
query<R>(callback: (ctx: DexieQueryContext | SqliteQueryContext | MemoryQueryContext) => Promise<R>): Promise<R>;
|
|
330
|
+
}
|
|
331
|
+
interface StorageTransactionContext {
|
|
332
|
+
tables: Record<string, StorageTable<any>>;
|
|
333
|
+
}
|
|
334
|
+
interface StorageCollection<T = any> {
|
|
335
|
+
first(): Promise<T | undefined>;
|
|
336
|
+
last(): Promise<T | undefined>;
|
|
337
|
+
each(callback: (item: T, index: number) => void | Promise<void>): Promise<void>;
|
|
338
|
+
eachKey(callback: (key: unknown, index: number) => void | Promise<void>): Promise<void>;
|
|
339
|
+
eachPrimaryKey(callback: (key: unknown, index: number) => void | Promise<void>): Promise<void>;
|
|
340
|
+
eachUniqueKey(callback: (key: unknown, index: number) => void | Promise<void>): Promise<void>;
|
|
341
|
+
keys(): Promise<unknown[]>;
|
|
342
|
+
primaryKeys(): Promise<unknown[]>;
|
|
343
|
+
uniqueKeys(): Promise<unknown[]>;
|
|
344
|
+
count(): Promise<number>;
|
|
345
|
+
sortBy(key: string): Promise<T[]>;
|
|
346
|
+
distinct(): StorageCollection<T>;
|
|
347
|
+
jsFilter(predicate: (item: T) => boolean): StorageCollection<T>;
|
|
348
|
+
or(index: string): StorageWhereClause<T>;
|
|
349
|
+
clone(props?: Record<string, unknown>): StorageCollection<T>;
|
|
350
|
+
reverse(): StorageCollection<T>;
|
|
351
|
+
offset(offset: number): StorageCollection<T>;
|
|
352
|
+
limit(count: number): StorageCollection<T>;
|
|
353
|
+
toCollection(): StorageCollection<T>;
|
|
354
|
+
delete(): Promise<number>;
|
|
355
|
+
modify(changes: Partial<T> | ((item: T) => void | Promise<void>)): Promise<number>;
|
|
356
|
+
toArray(): Promise<T[]>;
|
|
357
|
+
}
|
|
358
|
+
interface StorageWhereClause<T = any> {
|
|
359
|
+
equals(value: any): StorageCollection<T>;
|
|
360
|
+
above(value: any): StorageCollection<T>;
|
|
361
|
+
aboveOrEqual(value: any): StorageCollection<T>;
|
|
362
|
+
below(value: any): StorageCollection<T>;
|
|
363
|
+
belowOrEqual(value: any): StorageCollection<T>;
|
|
364
|
+
between(lower: any, upper: any, includeLower?: boolean, includeUpper?: boolean): StorageCollection<T>;
|
|
365
|
+
inAnyRange(ranges: Array<[any, any]>, options?: {
|
|
366
|
+
includeLower?: boolean;
|
|
367
|
+
includeUpper?: boolean;
|
|
368
|
+
}): StorageCollection<T>;
|
|
369
|
+
startsWith(prefix: string): StorageCollection<T>;
|
|
370
|
+
startsWithIgnoreCase(prefix: string): StorageCollection<T>;
|
|
371
|
+
startsWithAnyOf(...prefixes: string[]): StorageCollection<T>;
|
|
372
|
+
startsWithAnyOf(prefixes: string[]): StorageCollection<T>;
|
|
373
|
+
startsWithAnyOfIgnoreCase(...prefixes: string[]): StorageCollection<T>;
|
|
374
|
+
startsWithAnyOfIgnoreCase(prefixes: string[]): StorageCollection<T>;
|
|
375
|
+
equalsIgnoreCase(value: string): StorageCollection<T>;
|
|
376
|
+
anyOf(...values: any[]): StorageCollection<T>;
|
|
377
|
+
anyOf(values: any[]): StorageCollection<T>;
|
|
378
|
+
anyOfIgnoreCase(...values: string[]): StorageCollection<T>;
|
|
379
|
+
anyOfIgnoreCase(values: string[]): StorageCollection<T>;
|
|
380
|
+
noneOf(...values: any[]): StorageCollection<T>;
|
|
381
|
+
noneOf(values: any[]): StorageCollection<T>;
|
|
382
|
+
notEqual(value: any): StorageCollection<T>;
|
|
383
|
+
}
|
|
384
|
+
interface StorageTable<T = any> {
|
|
385
|
+
readonly name: string;
|
|
386
|
+
readonly schema: unknown;
|
|
387
|
+
readonly hook: unknown;
|
|
388
|
+
add(item: T): Promise<unknown>;
|
|
389
|
+
put(item: T): Promise<unknown>;
|
|
390
|
+
update(key: unknown, changes: Partial<T>): Promise<number>;
|
|
391
|
+
delete(key: unknown): Promise<void>;
|
|
392
|
+
clear(): Promise<void>;
|
|
393
|
+
get(key: unknown): Promise<T | undefined>;
|
|
394
|
+
toArray(): Promise<T[]>;
|
|
395
|
+
count(): Promise<number>;
|
|
396
|
+
bulkAdd(items: T[]): Promise<unknown>;
|
|
397
|
+
bulkPut(items: T[]): Promise<unknown>;
|
|
398
|
+
bulkGet(keys: Array<unknown>): Promise<Array<T | undefined>>;
|
|
399
|
+
bulkUpdate(keysAndChanges: Array<{
|
|
400
|
+
key: unknown;
|
|
401
|
+
changes: Partial<T>;
|
|
402
|
+
}>): Promise<number>;
|
|
403
|
+
bulkDelete(keys: Array<unknown>): Promise<void>;
|
|
404
|
+
where(index: string | string[]): StorageWhereClause<T>;
|
|
405
|
+
orderBy(index: string | string[]): StorageCollection<T>;
|
|
406
|
+
reverse(): StorageCollection<T>;
|
|
407
|
+
offset(offset: number): StorageCollection<T>;
|
|
408
|
+
limit(count: number): StorageCollection<T>;
|
|
409
|
+
mapToClass(ctor: new (...args: any[]) => any): StorageTable<T>;
|
|
410
|
+
each(callback: (item: T) => void | Promise<void>): Promise<void>;
|
|
411
|
+
jsFilter(predicate: (item: T) => boolean): StorageCollection<T>;
|
|
412
|
+
readonly raw: {
|
|
413
|
+
add(item: T): Promise<unknown>;
|
|
414
|
+
put(item: T): Promise<unknown>;
|
|
415
|
+
update(key: unknown, changes: Partial<T>): Promise<number>;
|
|
416
|
+
delete(key: unknown): Promise<void>;
|
|
417
|
+
get(key: unknown): Promise<T | undefined>;
|
|
418
|
+
bulkAdd(items: T[]): Promise<unknown>;
|
|
419
|
+
bulkPut(items: T[]): Promise<unknown>;
|
|
420
|
+
bulkUpdate(keysAndChanges: Array<{
|
|
421
|
+
key: unknown;
|
|
422
|
+
changes: Partial<T>;
|
|
423
|
+
}>): Promise<number>;
|
|
424
|
+
bulkDelete(keys: Array<unknown>): Promise<void>;
|
|
425
|
+
clear(): Promise<void>;
|
|
426
|
+
};
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
declare class DexieAdapter implements StorageAdapter {
|
|
430
|
+
readonly type = "DexieAdapter";
|
|
431
|
+
readonly name: string;
|
|
432
|
+
readonly db: dexie;
|
|
433
|
+
private readonly tableCache;
|
|
434
|
+
constructor(databaseName: string);
|
|
435
|
+
open(): Promise<void>;
|
|
436
|
+
close(): Promise<void>;
|
|
437
|
+
delete(): Promise<void>;
|
|
438
|
+
query<R>(callback: (ctx: DexieQueryContext) => Promise<R>): Promise<R>;
|
|
439
|
+
defineSchema(version: number, schema: Record<string, TableSchemaDefinition>, _options?: StorageSchemaDefinitionOptions): void;
|
|
440
|
+
table<T = any>(name: string): StorageTable<T>;
|
|
441
|
+
transaction<T>(mode: TransactionMode, tableNames: string[], callback: (context: StorageTransactionContext) => Promise<T>): Promise<T>;
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
export { DexieQueryContext as D, MemoryAdapter as M, SQLiteAdapter as S, type TableSchemaDefinition as T, MemoryQueryContext as a, SqliteQueryContext as b, type StorageAdapter as c, type StorageTable as d, DexieAdapter as e };
|