@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
package/dist/dexie.js
ADDED
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
// src/storage/dexie/DexieAdapter.ts
|
|
2
|
+
import Dexie from "dexie";
|
|
3
|
+
|
|
4
|
+
// src/storage/dexie/DexieQueryContext.ts
|
|
5
|
+
var DexieQueryContext = class {
|
|
6
|
+
constructor(adapter) {
|
|
7
|
+
this.adapter = adapter;
|
|
8
|
+
}
|
|
9
|
+
table(name) {
|
|
10
|
+
return this.adapter.table(name);
|
|
11
|
+
}
|
|
12
|
+
transaction(mode, tableNames, callback) {
|
|
13
|
+
return this.adapter.transaction(mode, tableNames, callback);
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
// src/storage/dexie/helpers.ts
|
|
18
|
+
var normalizeIndexName = (index) => Array.isArray(index) ? `[${index.join("+")}]` : index;
|
|
19
|
+
|
|
20
|
+
// src/storage/dexie/DexieStorageWhereClause.ts
|
|
21
|
+
var DexieStorageWhereClause = class {
|
|
22
|
+
clause;
|
|
23
|
+
constructor(clause) {
|
|
24
|
+
this.clause = clause;
|
|
25
|
+
}
|
|
26
|
+
equals(value) {
|
|
27
|
+
return new DexieStorageCollection(this.clause.equals(value));
|
|
28
|
+
}
|
|
29
|
+
above(value) {
|
|
30
|
+
return new DexieStorageCollection(this.clause.above(value));
|
|
31
|
+
}
|
|
32
|
+
aboveOrEqual(value) {
|
|
33
|
+
return new DexieStorageCollection(this.clause.aboveOrEqual(value));
|
|
34
|
+
}
|
|
35
|
+
below(value) {
|
|
36
|
+
return new DexieStorageCollection(this.clause.below(value));
|
|
37
|
+
}
|
|
38
|
+
belowOrEqual(value) {
|
|
39
|
+
return new DexieStorageCollection(this.clause.belowOrEqual(value));
|
|
40
|
+
}
|
|
41
|
+
between(lower, upper, includeLower, includeUpper) {
|
|
42
|
+
return new DexieStorageCollection(this.clause.between(lower, upper, includeLower, includeUpper));
|
|
43
|
+
}
|
|
44
|
+
inAnyRange(ranges, options) {
|
|
45
|
+
const normalizedOptions = options ? {
|
|
46
|
+
includeLowers: options.includeLower,
|
|
47
|
+
includeUppers: options.includeUpper
|
|
48
|
+
} : void 0;
|
|
49
|
+
return new DexieStorageCollection(this.clause.inAnyRange(ranges, normalizedOptions));
|
|
50
|
+
}
|
|
51
|
+
startsWith(prefix) {
|
|
52
|
+
return new DexieStorageCollection(this.clause.startsWith(prefix));
|
|
53
|
+
}
|
|
54
|
+
startsWithIgnoreCase(prefix) {
|
|
55
|
+
return new DexieStorageCollection(this.clause.startsWithIgnoreCase(prefix));
|
|
56
|
+
}
|
|
57
|
+
startsWithAnyOf(...args) {
|
|
58
|
+
const values = this.flattenArgs(args);
|
|
59
|
+
return new DexieStorageCollection(this.clause.startsWithAnyOf(...values));
|
|
60
|
+
}
|
|
61
|
+
startsWithAnyOfIgnoreCase(...args) {
|
|
62
|
+
const values = this.flattenArgs(args);
|
|
63
|
+
return new DexieStorageCollection(this.clause.startsWithAnyOfIgnoreCase(...values));
|
|
64
|
+
}
|
|
65
|
+
equalsIgnoreCase(value) {
|
|
66
|
+
return new DexieStorageCollection(this.clause.equalsIgnoreCase(value));
|
|
67
|
+
}
|
|
68
|
+
anyOf(...args) {
|
|
69
|
+
const values = this.flattenArgs(args);
|
|
70
|
+
return new DexieStorageCollection(this.clause.anyOf(...values));
|
|
71
|
+
}
|
|
72
|
+
anyOfIgnoreCase(...args) {
|
|
73
|
+
const values = this.flattenArgs(args);
|
|
74
|
+
return new DexieStorageCollection(this.clause.anyOfIgnoreCase(...values));
|
|
75
|
+
}
|
|
76
|
+
noneOf(...args) {
|
|
77
|
+
const values = this.flattenArgs(args);
|
|
78
|
+
return new DexieStorageCollection(this.clause.noneOf(values));
|
|
79
|
+
}
|
|
80
|
+
notEqual(value) {
|
|
81
|
+
return new DexieStorageCollection(this.clause.notEqual(value));
|
|
82
|
+
}
|
|
83
|
+
flattenArgs(args) {
|
|
84
|
+
if (args.length === 1 && Array.isArray(args[0])) {
|
|
85
|
+
return args[0];
|
|
86
|
+
}
|
|
87
|
+
return args;
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
// src/storage/dexie/DexieStorageCollection.ts
|
|
92
|
+
var DexieStorageCollection = class _DexieStorageCollection {
|
|
93
|
+
collection;
|
|
94
|
+
constructor(collection) {
|
|
95
|
+
this.collection = collection;
|
|
96
|
+
}
|
|
97
|
+
first() {
|
|
98
|
+
return this.collection.first();
|
|
99
|
+
}
|
|
100
|
+
async last() {
|
|
101
|
+
return this.collection.last();
|
|
102
|
+
}
|
|
103
|
+
async each(callback) {
|
|
104
|
+
const tasks = [];
|
|
105
|
+
let index = 0;
|
|
106
|
+
await this.collection.each((item) => {
|
|
107
|
+
tasks.push(callback(item, index));
|
|
108
|
+
index += 1;
|
|
109
|
+
});
|
|
110
|
+
await Promise.all(tasks.map((task) => task ? Promise.resolve(task) : Promise.resolve()));
|
|
111
|
+
}
|
|
112
|
+
async eachKey(callback) {
|
|
113
|
+
const tasks = [];
|
|
114
|
+
let index = 0;
|
|
115
|
+
await this.collection.eachKey((key) => {
|
|
116
|
+
tasks.push(callback(key, index));
|
|
117
|
+
index += 1;
|
|
118
|
+
});
|
|
119
|
+
await Promise.all(tasks.map((task) => task ? Promise.resolve(task) : Promise.resolve()));
|
|
120
|
+
}
|
|
121
|
+
async eachPrimaryKey(callback) {
|
|
122
|
+
const tasks = [];
|
|
123
|
+
let index = 0;
|
|
124
|
+
await this.collection.eachPrimaryKey((key) => {
|
|
125
|
+
tasks.push(callback(key, index));
|
|
126
|
+
index += 1;
|
|
127
|
+
});
|
|
128
|
+
await Promise.all(tasks.map((task) => task ? Promise.resolve(task) : Promise.resolve()));
|
|
129
|
+
}
|
|
130
|
+
async eachUniqueKey(callback) {
|
|
131
|
+
const tasks = [];
|
|
132
|
+
let index = 0;
|
|
133
|
+
await this.collection.eachUniqueKey((key) => {
|
|
134
|
+
tasks.push(callback(key, index));
|
|
135
|
+
index += 1;
|
|
136
|
+
});
|
|
137
|
+
await Promise.all(tasks.map((task) => task ? Promise.resolve(task) : Promise.resolve()));
|
|
138
|
+
}
|
|
139
|
+
keys() {
|
|
140
|
+
return this.collection.keys();
|
|
141
|
+
}
|
|
142
|
+
primaryKeys() {
|
|
143
|
+
return this.collection.primaryKeys();
|
|
144
|
+
}
|
|
145
|
+
uniqueKeys() {
|
|
146
|
+
return this.collection.uniqueKeys();
|
|
147
|
+
}
|
|
148
|
+
count() {
|
|
149
|
+
return this.collection.count();
|
|
150
|
+
}
|
|
151
|
+
sortBy(key) {
|
|
152
|
+
return this.collection.sortBy(key);
|
|
153
|
+
}
|
|
154
|
+
distinct() {
|
|
155
|
+
return new _DexieStorageCollection(this.collection.distinct());
|
|
156
|
+
}
|
|
157
|
+
jsFilter(predicate) {
|
|
158
|
+
return new _DexieStorageCollection(this.collection.filter(predicate));
|
|
159
|
+
}
|
|
160
|
+
or(index) {
|
|
161
|
+
return new DexieStorageWhereClause(this.collection.or(normalizeIndexName(index)));
|
|
162
|
+
}
|
|
163
|
+
clone(props) {
|
|
164
|
+
return new _DexieStorageCollection(this.collection.clone(props));
|
|
165
|
+
}
|
|
166
|
+
reverse() {
|
|
167
|
+
return new _DexieStorageCollection(this.collection.reverse());
|
|
168
|
+
}
|
|
169
|
+
offset(offset) {
|
|
170
|
+
return new _DexieStorageCollection(this.collection.offset(offset));
|
|
171
|
+
}
|
|
172
|
+
limit(count) {
|
|
173
|
+
return new _DexieStorageCollection(this.collection.limit(count));
|
|
174
|
+
}
|
|
175
|
+
toCollection() {
|
|
176
|
+
return this.clone();
|
|
177
|
+
}
|
|
178
|
+
delete() {
|
|
179
|
+
return this.collection.delete();
|
|
180
|
+
}
|
|
181
|
+
modify(changes) {
|
|
182
|
+
return this.collection.modify(changes);
|
|
183
|
+
}
|
|
184
|
+
toArray() {
|
|
185
|
+
return this.collection.toArray();
|
|
186
|
+
}
|
|
187
|
+
};
|
|
188
|
+
|
|
189
|
+
// src/storage/dexie/DexieStorageTable.ts
|
|
190
|
+
var DexieStorageTable = class {
|
|
191
|
+
name;
|
|
192
|
+
schema;
|
|
193
|
+
primaryKey;
|
|
194
|
+
hook;
|
|
195
|
+
raw = Object.freeze({
|
|
196
|
+
add: (item) => this.table.add(item),
|
|
197
|
+
put: (item) => this.table.put(item),
|
|
198
|
+
update: (key, changes) => this.table.update(key, changes),
|
|
199
|
+
delete: (key) => this.table.delete(key),
|
|
200
|
+
get: (key) => this.table.get(key),
|
|
201
|
+
bulkAdd: (items) => this.table.bulkAdd(items),
|
|
202
|
+
bulkPut: (items) => this.table.bulkPut(items),
|
|
203
|
+
bulkUpdate: (keysAndChanges) => this.table.bulkUpdate(keysAndChanges),
|
|
204
|
+
bulkDelete: (keys) => this.table.bulkDelete(keys),
|
|
205
|
+
clear: () => this.table.clear()
|
|
206
|
+
});
|
|
207
|
+
table;
|
|
208
|
+
constructor(table) {
|
|
209
|
+
this.table = table;
|
|
210
|
+
this.name = table.name;
|
|
211
|
+
this.schema = table.schema;
|
|
212
|
+
this.primaryKey = table.schema?.primKey;
|
|
213
|
+
this.hook = table.hook;
|
|
214
|
+
}
|
|
215
|
+
add(item) {
|
|
216
|
+
return this.table.add(item);
|
|
217
|
+
}
|
|
218
|
+
put(item) {
|
|
219
|
+
return this.table.put(item);
|
|
220
|
+
}
|
|
221
|
+
update(key, changes) {
|
|
222
|
+
return this.table.update(key, changes);
|
|
223
|
+
}
|
|
224
|
+
delete(key) {
|
|
225
|
+
return this.table.delete(key).then(() => void 0);
|
|
226
|
+
}
|
|
227
|
+
clear() {
|
|
228
|
+
return this.table.clear();
|
|
229
|
+
}
|
|
230
|
+
get(key) {
|
|
231
|
+
return this.table.get(key);
|
|
232
|
+
}
|
|
233
|
+
toArray() {
|
|
234
|
+
return this.table.toArray();
|
|
235
|
+
}
|
|
236
|
+
count() {
|
|
237
|
+
return this.table.count();
|
|
238
|
+
}
|
|
239
|
+
bulkAdd(items) {
|
|
240
|
+
return this.table.bulkAdd(items);
|
|
241
|
+
}
|
|
242
|
+
bulkPut(items) {
|
|
243
|
+
return this.table.bulkPut(items);
|
|
244
|
+
}
|
|
245
|
+
bulkGet(keys) {
|
|
246
|
+
return this.table.bulkGet(keys);
|
|
247
|
+
}
|
|
248
|
+
bulkUpdate(keysAndChanges) {
|
|
249
|
+
return this.table.bulkUpdate(keysAndChanges);
|
|
250
|
+
}
|
|
251
|
+
bulkDelete(keys) {
|
|
252
|
+
return this.table.bulkDelete(keys);
|
|
253
|
+
}
|
|
254
|
+
where(index) {
|
|
255
|
+
return new DexieStorageWhereClause(this.table.where(normalizeIndexName(index)));
|
|
256
|
+
}
|
|
257
|
+
orderBy(index) {
|
|
258
|
+
return new DexieStorageCollection(this.table.orderBy(normalizeIndexName(index)));
|
|
259
|
+
}
|
|
260
|
+
reverse() {
|
|
261
|
+
return new DexieStorageCollection(this.table.reverse());
|
|
262
|
+
}
|
|
263
|
+
offset(offset) {
|
|
264
|
+
return new DexieStorageCollection(this.table.offset(offset));
|
|
265
|
+
}
|
|
266
|
+
limit(count) {
|
|
267
|
+
return new DexieStorageCollection(this.table.limit(count));
|
|
268
|
+
}
|
|
269
|
+
mapToClass(ctor) {
|
|
270
|
+
this.table.mapToClass(ctor);
|
|
271
|
+
return this;
|
|
272
|
+
}
|
|
273
|
+
async each(callback) {
|
|
274
|
+
const tasks = [];
|
|
275
|
+
await this.table.each((item) => {
|
|
276
|
+
tasks.push(callback(item));
|
|
277
|
+
});
|
|
278
|
+
await Promise.all(tasks.map((task) => task ? Promise.resolve(task) : Promise.resolve()));
|
|
279
|
+
}
|
|
280
|
+
jsFilter(predicate) {
|
|
281
|
+
return new DexieStorageCollection(this.table.filter(predicate));
|
|
282
|
+
}
|
|
283
|
+
};
|
|
284
|
+
|
|
285
|
+
// src/storage/dexie/DexieAdapter.ts
|
|
286
|
+
var DexieAdapter = class {
|
|
287
|
+
type = "DexieAdapter";
|
|
288
|
+
name;
|
|
289
|
+
db;
|
|
290
|
+
tableCache = /* @__PURE__ */ new Map();
|
|
291
|
+
constructor(databaseName) {
|
|
292
|
+
this.db = new Dexie(databaseName);
|
|
293
|
+
this.name = this.db.name;
|
|
294
|
+
}
|
|
295
|
+
async open() {
|
|
296
|
+
}
|
|
297
|
+
async close() {
|
|
298
|
+
if (this.db.isOpen()) {
|
|
299
|
+
this.db.close();
|
|
300
|
+
}
|
|
301
|
+
this.tableCache.clear();
|
|
302
|
+
}
|
|
303
|
+
async delete() {
|
|
304
|
+
await this.db.delete();
|
|
305
|
+
this.tableCache.clear();
|
|
306
|
+
await this.db.open();
|
|
307
|
+
}
|
|
308
|
+
async query(callback) {
|
|
309
|
+
return callback(new DexieQueryContext(this));
|
|
310
|
+
}
|
|
311
|
+
defineSchema(version, schema, _options) {
|
|
312
|
+
const normalized = {};
|
|
313
|
+
for (const [tableName, definition] of Object.entries(schema)) {
|
|
314
|
+
if (typeof definition !== "string") {
|
|
315
|
+
throw new Error(`DexieAdapter requires string schema definitions. Received non-string definition for table '${tableName}'.`);
|
|
316
|
+
}
|
|
317
|
+
normalized[tableName] = definition;
|
|
318
|
+
}
|
|
319
|
+
const dexieVersion = this.db.version(version);
|
|
320
|
+
dexieVersion.stores(normalized);
|
|
321
|
+
}
|
|
322
|
+
table(name) {
|
|
323
|
+
if (!this.tableCache.has(name)) {
|
|
324
|
+
const table = this.db.table(name);
|
|
325
|
+
this.tableCache.set(name, new DexieStorageTable(table));
|
|
326
|
+
}
|
|
327
|
+
return this.tableCache.get(name);
|
|
328
|
+
}
|
|
329
|
+
async transaction(mode, tableNames, callback) {
|
|
330
|
+
return this.db.transaction(mode, ...tableNames, async () => {
|
|
331
|
+
const tables = {};
|
|
332
|
+
for (const tableName of tableNames) {
|
|
333
|
+
tables[tableName] = this.table(tableName);
|
|
334
|
+
}
|
|
335
|
+
return callback({ tables });
|
|
336
|
+
});
|
|
337
|
+
}
|
|
338
|
+
};
|
|
339
|
+
export {
|
|
340
|
+
DexieAdapter,
|
|
341
|
+
DexieQueryContext
|
|
342
|
+
};
|
|
343
|
+
//# sourceMappingURL=dexie.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/storage/dexie/DexieAdapter.ts","../src/storage/dexie/DexieQueryContext.ts","../src/storage/dexie/helpers.ts","../src/storage/dexie/DexieStorageWhereClause.ts","../src/storage/dexie/DexieStorageCollection.ts","../src/storage/dexie/DexieStorageTable.ts"],"sourcesContent":["import Dexie from 'dexie';\nimport type { StorageAdapter, StorageTable, StorageTransactionContext, TransactionMode } from '../types';\nimport type { StorageSchemaDefinitionOptions } from '../sqlite/types';\nimport type { TableSchemaDefinition } from '../sqlite/schema';\nimport { DexieQueryContext } from './DexieQueryContext';\nimport { DexieStorageTable } from './DexieStorageTable';\n\nexport class DexieAdapter implements StorageAdapter {\n readonly type = 'DexieAdapter';\n readonly name: string;\n readonly db: Dexie;\n private readonly tableCache = new Map<string, StorageTable<any>>();\n\n constructor(databaseName: string) {\n this.db = new Dexie(databaseName);\n this.name = this.db.name;\n }\n\n async open(): Promise<void> {\n // Dexie auto-opens on first operation, so this is typically a no-op.\n // However, after delete() we explicitly re-open to ensure continued usability.\n }\n\n async close(): Promise<void> {\n if (this.db.isOpen()) {\n this.db.close();\n }\n this.tableCache.clear();\n }\n\n async delete(): Promise<void> {\n await this.db.delete();\n this.tableCache.clear();\n // Dexie.delete() closes the database, so re-open it to allow continued use.\n // Without this, subsequent operations would fail with DatabaseClosedError.\n await this.db.open();\n }\n\n async query<R>(callback: (ctx: DexieQueryContext) => Promise<R>): Promise<R> {\n return callback(new DexieQueryContext(this));\n }\n\n defineSchema(version: number, schema: Record<string, TableSchemaDefinition>, _options?: StorageSchemaDefinitionOptions): void {\n const normalized: Record<string, string> = {};\n for (const [tableName, definition] of Object.entries(schema)) {\n if (typeof definition !== 'string') {\n throw new Error(`DexieAdapter requires string schema definitions. Received non-string definition for table '${tableName}'.`);\n }\n normalized[tableName] = definition;\n }\n const dexieVersion = this.db.version(version);\n dexieVersion.stores(normalized);\n }\n\n table<T = any>(name: string): StorageTable<T> {\n if (!this.tableCache.has(name)) {\n const table = this.db.table<T>(name);\n this.tableCache.set(name, new DexieStorageTable(table));\n }\n return this.tableCache.get(name)! as StorageTable<T>;\n }\n\n async transaction<T>(mode: TransactionMode, tableNames: string[], callback: (context: StorageTransactionContext) => Promise<T>): Promise<T> {\n return (this.db.transaction as any)(mode, ...tableNames, async () => {\n const tables: Record<string, StorageTable<any>> = {};\n for (const tableName of tableNames) {\n tables[tableName] = this.table(tableName);\n }\n return callback({ tables });\n });\n }\n}\n","import type { StorageTable, StorageTransactionContext, TransactionMode } from '../types';\nimport type { DexieAdapter } from './DexieAdapter';\n\nexport class DexieQueryContext {\n constructor(private readonly adapter: DexieAdapter) {}\n\n table<T = any>(name: string): StorageTable<T> {\n return this.adapter.table(name);\n }\n\n transaction<T>(mode: TransactionMode, tableNames: string[], callback: (context: StorageTransactionContext) => Promise<T>): Promise<T> {\n return this.adapter.transaction(mode, tableNames, callback);\n }\n}\n","export const normalizeIndexName = (index: string | string[]): string => (Array.isArray(index) ? `[${index.join('+')}]` : index);\n","import type { WhereClause as DexieWhereClause } from 'dexie';\nimport type { StorageCollection, StorageWhereClause } from '../types';\nimport { DexieStorageCollection } from './DexieStorageCollection';\n\nexport class DexieStorageWhereClause<T = any> implements StorageWhereClause<T> {\n private readonly clause: DexieWhereClause<T, any, T>;\n\n constructor(clause: DexieWhereClause<T, any, T>) {\n this.clause = clause;\n }\n\n equals(value: any): StorageCollection<T> {\n return new DexieStorageCollection(this.clause.equals(value));\n }\n\n above(value: any): StorageCollection<T> {\n return new DexieStorageCollection(this.clause.above(value));\n }\n\n aboveOrEqual(value: any): StorageCollection<T> {\n return new DexieStorageCollection(this.clause.aboveOrEqual(value));\n }\n\n below(value: any): StorageCollection<T> {\n return new DexieStorageCollection(this.clause.below(value));\n }\n\n belowOrEqual(value: any): StorageCollection<T> {\n return new DexieStorageCollection(this.clause.belowOrEqual(value));\n }\n\n between(lower: any, upper: any, includeLower?: boolean, includeUpper?: boolean): StorageCollection<T> {\n return new DexieStorageCollection(this.clause.between(lower, upper, includeLower, includeUpper));\n }\n\n inAnyRange(ranges: Array<[any, any]>, options?: { includeLower?: boolean; includeUpper?: boolean }): StorageCollection<T> {\n const normalizedOptions = options\n ? {\n includeLowers: options.includeLower,\n includeUppers: options.includeUpper,\n }\n : undefined;\n return new DexieStorageCollection(this.clause.inAnyRange(ranges as any, normalizedOptions));\n }\n\n startsWith(prefix: string): StorageCollection<T> {\n return new DexieStorageCollection(this.clause.startsWith(prefix));\n }\n\n startsWithIgnoreCase(prefix: string): StorageCollection<T> {\n return new DexieStorageCollection(this.clause.startsWithIgnoreCase(prefix));\n }\n\n startsWithAnyOf(...prefixes: string[]): StorageCollection<T>;\n startsWithAnyOf(prefixes: string[]): StorageCollection<T>;\n startsWithAnyOf(...args: any[]): StorageCollection<T> {\n const values = this.flattenArgs<string>(args);\n return new DexieStorageCollection(this.clause.startsWithAnyOf(...values));\n }\n\n startsWithAnyOfIgnoreCase(...prefixes: string[]): StorageCollection<T>;\n startsWithAnyOfIgnoreCase(prefixes: string[]): StorageCollection<T>;\n startsWithAnyOfIgnoreCase(...args: any[]): StorageCollection<T> {\n const values = this.flattenArgs<string>(args);\n return new DexieStorageCollection(this.clause.startsWithAnyOfIgnoreCase(...values));\n }\n\n equalsIgnoreCase(value: string): StorageCollection<T> {\n return new DexieStorageCollection(this.clause.equalsIgnoreCase(value));\n }\n\n anyOf(...values: any[]): StorageCollection<T>;\n anyOf(values: any[]): StorageCollection<T>;\n anyOf(...args: any[]): StorageCollection<T> {\n const values = this.flattenArgs<any>(args);\n return new DexieStorageCollection(this.clause.anyOf(...values));\n }\n\n anyOfIgnoreCase(...values: string[]): StorageCollection<T>;\n anyOfIgnoreCase(values: string[]): StorageCollection<T>;\n anyOfIgnoreCase(...args: any[]): StorageCollection<T> {\n const values = this.flattenArgs<string>(args);\n return new DexieStorageCollection(this.clause.anyOfIgnoreCase(...values));\n }\n\n noneOf(...values: any[]): StorageCollection<T>;\n noneOf(values: any[]): StorageCollection<T>;\n noneOf(...args: any[]): StorageCollection<T> {\n const values = this.flattenArgs<any>(args);\n return new DexieStorageCollection(this.clause.noneOf(values as any));\n }\n\n notEqual(value: any): StorageCollection<T> {\n return new DexieStorageCollection(this.clause.notEqual(value));\n }\n\n private flattenArgs<TValue>(args: any[]): TValue[] {\n if (args.length === 1 && Array.isArray(args[0])) {\n return args[0] as TValue[];\n }\n return args as TValue[];\n }\n}\n","import type { Collection as DexieCollection } from 'dexie';\nimport type { StorageCollection, StorageWhereClause } from '../types';\nimport { normalizeIndexName } from './helpers';\nimport { DexieStorageWhereClause } from './DexieStorageWhereClause';\n\nexport class DexieStorageCollection<T = any> implements StorageCollection<T> {\n private readonly collection: DexieCollection<T, any, T>;\n\n constructor(collection: DexieCollection<T, any, T>) {\n this.collection = collection;\n }\n\n first(): Promise<T | undefined> {\n return this.collection.first();\n }\n\n async last(): Promise<T | undefined> {\n return this.collection.last();\n }\n\n async each(callback: (item: T, index: number) => void | Promise<void>): Promise<void> {\n const tasks: Array<void | Promise<void>> = [];\n let index = 0;\n await this.collection.each((item) => {\n tasks.push(callback(item, index));\n index += 1;\n });\n await Promise.all(tasks.map((task) => (task ? Promise.resolve(task) : Promise.resolve())));\n }\n\n async eachKey(callback: (key: unknown, index: number) => void | Promise<void>): Promise<void> {\n const tasks: Array<void | Promise<void>> = [];\n let index = 0;\n await this.collection.eachKey((key) => {\n tasks.push(callback(key, index));\n index += 1;\n });\n await Promise.all(tasks.map((task) => (task ? Promise.resolve(task) : Promise.resolve())));\n }\n\n async eachPrimaryKey(callback: (key: unknown, index: number) => void | Promise<void>): Promise<void> {\n const tasks: Array<void | Promise<void>> = [];\n let index = 0;\n await this.collection.eachPrimaryKey((key) => {\n tasks.push(callback(key, index));\n index += 1;\n });\n await Promise.all(tasks.map((task) => (task ? Promise.resolve(task) : Promise.resolve())));\n }\n\n async eachUniqueKey(callback: (key: unknown, index: number) => void | Promise<void>): Promise<void> {\n const tasks: Array<void | Promise<void>> = [];\n let index = 0;\n await this.collection.eachUniqueKey((key) => {\n tasks.push(callback(key, index));\n index += 1;\n });\n await Promise.all(tasks.map((task) => (task ? Promise.resolve(task) : Promise.resolve())));\n }\n\n keys(): Promise<unknown[]> {\n return this.collection.keys();\n }\n\n primaryKeys(): Promise<unknown[]> {\n return this.collection.primaryKeys();\n }\n\n uniqueKeys(): Promise<unknown[]> {\n return this.collection.uniqueKeys();\n }\n\n count(): Promise<number> {\n return this.collection.count();\n }\n\n sortBy(key: string): Promise<T[]> {\n return this.collection.sortBy(key);\n }\n\n distinct(): StorageCollection<T> {\n return new DexieStorageCollection(this.collection.distinct());\n }\n\n jsFilter(predicate: (item: T) => boolean): StorageCollection<T> {\n return new DexieStorageCollection(this.collection.filter(predicate));\n }\n\n or(index: string): StorageWhereClause<T> {\n return new DexieStorageWhereClause(this.collection.or(normalizeIndexName(index)));\n }\n\n clone(props?: Record<string, unknown>): StorageCollection<T> {\n return new DexieStorageCollection(this.collection.clone(props));\n }\n\n reverse(): StorageCollection<T> {\n return new DexieStorageCollection(this.collection.reverse());\n }\n\n offset(offset: number): StorageCollection<T> {\n return new DexieStorageCollection(this.collection.offset(offset));\n }\n\n limit(count: number): StorageCollection<T> {\n return new DexieStorageCollection(this.collection.limit(count));\n }\n\n toCollection(): StorageCollection<T> {\n return this.clone();\n }\n\n delete(): Promise<number> {\n return this.collection.delete();\n }\n\n modify(changes: Partial<T> | ((item: T) => void | Promise<void>)): Promise<number> {\n return this.collection.modify(changes as any);\n }\n\n toArray(): Promise<T[]> {\n return this.collection.toArray();\n }\n}\n","import type { Table as DexieTable } from 'dexie';\nimport type { StorageCollection, StorageTable, StorageWhereClause } from '../types';\nimport { normalizeIndexName } from './helpers';\nimport { DexieStorageCollection } from './DexieStorageCollection';\nimport { DexieStorageWhereClause } from './DexieStorageWhereClause';\n\nexport class DexieStorageTable<T = any> implements StorageTable<T> {\n readonly name: string;\n readonly schema: unknown;\n readonly primaryKey: unknown;\n readonly hook: unknown;\n readonly raw = Object.freeze({\n add: (item: T) => this.table.add(item),\n put: (item: T) => this.table.put(item),\n update: (key: unknown, changes: Partial<T>) => this.table.update(key as any, changes as any),\n delete: (key: unknown) => this.table.delete(key as any),\n get: (key: unknown) => this.table.get(key as any),\n bulkAdd: (items: T[]) => this.table.bulkAdd(items),\n bulkPut: (items: T[]) => this.table.bulkPut(items),\n bulkUpdate: (keysAndChanges: Array<{ key: unknown; changes: Partial<T> }>) => this.table.bulkUpdate(keysAndChanges as any),\n bulkDelete: (keys: Array<unknown>) => this.table.bulkDelete(keys as any),\n clear: () => this.table.clear(),\n });\n\n private readonly table: DexieTable<T, any, T>;\n\n constructor(table: DexieTable<T, any, T>) {\n this.table = table;\n this.name = table.name;\n this.schema = table.schema;\n this.primaryKey = table.schema?.primKey;\n this.hook = table.hook;\n }\n\n add(item: T): Promise<unknown> {\n return this.table.add(item);\n }\n\n put(item: T): Promise<unknown> {\n return this.table.put(item);\n }\n\n update(key: unknown, changes: Partial<T>): Promise<number> {\n return this.table.update(key as any, changes as any);\n }\n\n delete(key: unknown): Promise<void> {\n return this.table.delete(key as any).then(() => undefined);\n }\n\n clear(): Promise<void> {\n return this.table.clear();\n }\n\n get(key: unknown): Promise<T | undefined> {\n return this.table.get(key as any);\n }\n\n toArray(): Promise<T[]> {\n return this.table.toArray();\n }\n\n count(): Promise<number> {\n return this.table.count();\n }\n\n bulkAdd(items: T[]): Promise<unknown> {\n return this.table.bulkAdd(items);\n }\n\n bulkPut(items: T[]): Promise<unknown> {\n return this.table.bulkPut(items);\n }\n\n bulkGet(keys: Array<unknown>): Promise<Array<T | undefined>> {\n return this.table.bulkGet(keys as any);\n }\n\n bulkUpdate(keysAndChanges: Array<{ key: unknown; changes: Partial<T> }>): Promise<number> {\n return this.table.bulkUpdate(keysAndChanges as any);\n }\n\n bulkDelete(keys: Array<unknown>): Promise<void> {\n return this.table.bulkDelete(keys as any);\n }\n\n where(index: string | string[]): StorageWhereClause<T> {\n return new DexieStorageWhereClause(this.table.where(normalizeIndexName(index)));\n }\n\n orderBy(index: string | string[]): StorageCollection<T> {\n return new DexieStorageCollection(this.table.orderBy(normalizeIndexName(index)));\n }\n\n reverse(): StorageCollection<T> {\n return new DexieStorageCollection(this.table.reverse());\n }\n\n offset(offset: number): StorageCollection<T> {\n return new DexieStorageCollection(this.table.offset(offset));\n }\n\n limit(count: number): StorageCollection<T> {\n return new DexieStorageCollection(this.table.limit(count));\n }\n\n mapToClass(ctor: new (...args: any[]) => any): StorageTable<T> {\n this.table.mapToClass(ctor as any);\n return this;\n }\n\n async each(callback: (item: T) => void | Promise<void>): Promise<void> {\n const tasks: Array<void | Promise<void>> = [];\n await this.table.each((item) => {\n tasks.push(callback(item));\n });\n await Promise.all(tasks.map((task) => (task ? Promise.resolve(task) : Promise.resolve())));\n }\n\n jsFilter(predicate: (item: T) => boolean): StorageCollection<T> {\n return new DexieStorageCollection(this.table.filter(predicate));\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
|
|
30
|
+
// src/expoSqlite.ts
|
|
31
|
+
var expoSqlite_exports = {};
|
|
32
|
+
__export(expoSqlite_exports, {
|
|
33
|
+
ExpoSQLiteDriver: () => ExpoSQLiteDriver
|
|
34
|
+
});
|
|
35
|
+
module.exports = __toCommonJS(expoSqlite_exports);
|
|
36
|
+
|
|
37
|
+
// src/storage/sqlite/drivers/ExpoSQLiteDriver.native.ts
|
|
38
|
+
var SQLite = __toESM(require("expo-sqlite"), 1);
|
|
39
|
+
var ExpoSQLiteDriver = class {
|
|
40
|
+
type = "ExpoSQLiteDriver";
|
|
41
|
+
db = null;
|
|
42
|
+
openPromise;
|
|
43
|
+
opened = false;
|
|
44
|
+
name;
|
|
45
|
+
constructor(name) {
|
|
46
|
+
this.name = name;
|
|
47
|
+
}
|
|
48
|
+
async open() {
|
|
49
|
+
if (this.opened) return;
|
|
50
|
+
if (this.openPromise) return this.openPromise;
|
|
51
|
+
this.openPromise = (async () => {
|
|
52
|
+
if (!this.db) {
|
|
53
|
+
this.db = await SQLite.openDatabaseAsync(this.name);
|
|
54
|
+
this.opened = true;
|
|
55
|
+
}
|
|
56
|
+
})();
|
|
57
|
+
try {
|
|
58
|
+
await this.openPromise;
|
|
59
|
+
} finally {
|
|
60
|
+
this.openPromise = void 0;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
async close() {
|
|
64
|
+
const db = this.db;
|
|
65
|
+
this.db = null;
|
|
66
|
+
this.opened = false;
|
|
67
|
+
this.openPromise = void 0;
|
|
68
|
+
if (db?.closeAsync) {
|
|
69
|
+
await db.closeAsync();
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
async execute(statement) {
|
|
73
|
+
await this.run(statement, []);
|
|
74
|
+
}
|
|
75
|
+
async run(statement, values = []) {
|
|
76
|
+
await this.open();
|
|
77
|
+
const db = this.db;
|
|
78
|
+
const result = await db.runAsync(statement, values);
|
|
79
|
+
return {
|
|
80
|
+
changes: result.changes ?? 0,
|
|
81
|
+
lastId: result.lastInsertRowId ?? result.lastInsertId ?? void 0
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
async query(statement, values = []) {
|
|
85
|
+
await this.open();
|
|
86
|
+
const db = this.db;
|
|
87
|
+
const rows = await db.getAllAsync(statement, values);
|
|
88
|
+
const first = rows[0];
|
|
89
|
+
const columns = first ? Object.keys(first) : [];
|
|
90
|
+
const valuesMatrix = rows.map((row) => columns.map((col) => row[col]));
|
|
91
|
+
return { columns, values: valuesMatrix };
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
95
|
+
0 && (module.exports = {
|
|
96
|
+
ExpoSQLiteDriver
|
|
97
|
+
});
|
|
98
|
+
//# sourceMappingURL=expoSqlite.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/expoSqlite.ts","../src/storage/sqlite/drivers/ExpoSQLiteDriver.native.ts"],"sourcesContent":["export { ExpoSQLiteDriver } from './storage/sqlite/drivers/ExpoSQLiteDriver.native';\nexport type { SQLiteDatabaseDriver, SQLiteQueryResult, SQLiteRunResult } from './storage/sqlite/types';\n","import * as SQLite from 'expo-sqlite';\n\nimport type { SQLiteDatabaseDriver, SQLiteQueryResult, SQLiteRunResult } from '../types';\n\nexport class ExpoSQLiteDriver implements SQLiteDatabaseDriver {\n readonly type = 'ExpoSQLiteDriver';\n private db: SQLite.SQLiteDatabase | null = null;\n private openPromise?: Promise<void>;\n private opened = false;\n readonly name: string;\n\n constructor(name: string) {\n this.name = name;\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 this.db = await SQLite.openDatabaseAsync(this.name);\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 const db = this.db;\n this.db = null;\n this.opened = false;\n this.openPromise = undefined;\n if (db?.closeAsync) {\n await db.closeAsync();\n }\n }\n\n async execute(statement: string): Promise<void> {\n await this.run(statement, []);\n }\n\n async run(statement: string, values: any[] = []): Promise<SQLiteRunResult> {\n await this.open();\n const db = this.db!;\n const result = await db.runAsync(statement, values);\n return {\n changes: result.changes ?? 0,\n lastId: (result as any).lastInsertRowId ?? (result as any).lastInsertId ?? undefined,\n };\n }\n\n async query(statement: string, values: any[] = []): Promise<SQLiteQueryResult> {\n await this.open();\n const db = this.db!;\n const rows = await db.getAllAsync(statement, values);\n const first = rows[0];\n const columns = first ? Object.keys(first) : [];\n const valuesMatrix = rows.map((row) => columns.map((col) => (row as any)[col]));\n return { columns, values: valuesMatrix };\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,aAAwB;AAIjB,IAAM,mBAAN,MAAuD;AAAA,EACjD,OAAO;AAAA,EACR,KAAmC;AAAA,EACnC;AAAA,EACA,SAAS;AAAA,EACR;AAAA,EAET,YAAY,MAAc;AACtB,SAAK,OAAO;AAAA,EAChB;AAAA,EAEA,MAAM,OAAsB;AACxB,QAAI,KAAK,OAAQ;AACjB,QAAI,KAAK,YAAa,QAAO,KAAK;AAElC,SAAK,eAAe,YAAY;AAC5B,UAAI,CAAC,KAAK,IAAI;AACV,aAAK,KAAK,MAAa,yBAAkB,KAAK,IAAI;AAClD,aAAK,SAAS;AAAA,MAClB;AAAA,IACJ,GAAG;AAEH,QAAI;AACA,YAAM,KAAK;AAAA,IACf,UAAE;AACE,WAAK,cAAc;AAAA,IACvB;AAAA,EACJ;AAAA,EAEA,MAAM,QAAuB;AACzB,UAAM,KAAK,KAAK;AAChB,SAAK,KAAK;AACV,SAAK,SAAS;AACd,SAAK,cAAc;AACnB,QAAI,IAAI,YAAY;AAChB,YAAM,GAAG,WAAW;AAAA,IACxB;AAAA,EACJ;AAAA,EAEA,MAAM,QAAQ,WAAkC;AAC5C,UAAM,KAAK,IAAI,WAAW,CAAC,CAAC;AAAA,EAChC;AAAA,EAEA,MAAM,IAAI,WAAmB,SAAgB,CAAC,GAA6B;AACvE,UAAM,KAAK,KAAK;AAChB,UAAM,KAAK,KAAK;AAChB,UAAM,SAAS,MAAM,GAAG,SAAS,WAAW,MAAM;AAClD,WAAO;AAAA,MACH,SAAS,OAAO,WAAW;AAAA,MAC3B,QAAS,OAAe,mBAAoB,OAAe,gBAAgB;AAAA,IAC/E;AAAA,EACJ;AAAA,EAEA,MAAM,MAAM,WAAmB,SAAgB,CAAC,GAA+B;AAC3E,UAAM,KAAK,KAAK;AAChB,UAAM,KAAK,KAAK;AAChB,UAAM,OAAO,MAAM,GAAG,YAAY,WAAW,MAAM;AACnD,UAAM,QAAQ,KAAK,CAAC;AACpB,UAAM,UAAU,QAAQ,OAAO,KAAK,KAAK,IAAI,CAAC;AAC9C,UAAM,eAAe,KAAK,IAAI,CAAC,QAAQ,QAAQ,IAAI,CAAC,QAAS,IAAY,GAAG,CAAC,CAAC;AAC9E,WAAO,EAAE,SAAS,QAAQ,aAAa;AAAA,EAC3C;AACJ;","names":[]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { S as SQLiteDatabaseDriver, a as SQLiteRunResult, b as SQLiteQueryResult } from './types-CSbIAfu2.cjs';
|
|
2
|
+
|
|
3
|
+
declare class ExpoSQLiteDriver implements SQLiteDatabaseDriver {
|
|
4
|
+
readonly type = "ExpoSQLiteDriver";
|
|
5
|
+
private db;
|
|
6
|
+
private openPromise?;
|
|
7
|
+
private opened;
|
|
8
|
+
readonly name: string;
|
|
9
|
+
constructor(name: string);
|
|
10
|
+
open(): Promise<void>;
|
|
11
|
+
close(): Promise<void>;
|
|
12
|
+
execute(statement: string): Promise<void>;
|
|
13
|
+
run(statement: string, values?: any[]): Promise<SQLiteRunResult>;
|
|
14
|
+
query(statement: string, values?: any[]): Promise<SQLiteQueryResult>;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export { ExpoSQLiteDriver, SQLiteDatabaseDriver, SQLiteQueryResult, SQLiteRunResult };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { S as SQLiteDatabaseDriver, a as SQLiteRunResult, b as SQLiteQueryResult } from './types-CSbIAfu2.js';
|
|
2
|
+
|
|
3
|
+
declare class ExpoSQLiteDriver implements SQLiteDatabaseDriver {
|
|
4
|
+
readonly type = "ExpoSQLiteDriver";
|
|
5
|
+
private db;
|
|
6
|
+
private openPromise?;
|
|
7
|
+
private opened;
|
|
8
|
+
readonly name: string;
|
|
9
|
+
constructor(name: string);
|
|
10
|
+
open(): Promise<void>;
|
|
11
|
+
close(): Promise<void>;
|
|
12
|
+
execute(statement: string): Promise<void>;
|
|
13
|
+
run(statement: string, values?: any[]): Promise<SQLiteRunResult>;
|
|
14
|
+
query(statement: string, values?: any[]): Promise<SQLiteQueryResult>;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export { ExpoSQLiteDriver, SQLiteDatabaseDriver, SQLiteQueryResult, SQLiteRunResult };
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
// src/storage/sqlite/drivers/ExpoSQLiteDriver.native.ts
|
|
2
|
+
import * as SQLite from "expo-sqlite";
|
|
3
|
+
var ExpoSQLiteDriver = class {
|
|
4
|
+
type = "ExpoSQLiteDriver";
|
|
5
|
+
db = null;
|
|
6
|
+
openPromise;
|
|
7
|
+
opened = false;
|
|
8
|
+
name;
|
|
9
|
+
constructor(name) {
|
|
10
|
+
this.name = name;
|
|
11
|
+
}
|
|
12
|
+
async open() {
|
|
13
|
+
if (this.opened) return;
|
|
14
|
+
if (this.openPromise) return this.openPromise;
|
|
15
|
+
this.openPromise = (async () => {
|
|
16
|
+
if (!this.db) {
|
|
17
|
+
this.db = await SQLite.openDatabaseAsync(this.name);
|
|
18
|
+
this.opened = true;
|
|
19
|
+
}
|
|
20
|
+
})();
|
|
21
|
+
try {
|
|
22
|
+
await this.openPromise;
|
|
23
|
+
} finally {
|
|
24
|
+
this.openPromise = void 0;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
async close() {
|
|
28
|
+
const db = this.db;
|
|
29
|
+
this.db = null;
|
|
30
|
+
this.opened = false;
|
|
31
|
+
this.openPromise = void 0;
|
|
32
|
+
if (db?.closeAsync) {
|
|
33
|
+
await db.closeAsync();
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
async execute(statement) {
|
|
37
|
+
await this.run(statement, []);
|
|
38
|
+
}
|
|
39
|
+
async run(statement, values = []) {
|
|
40
|
+
await this.open();
|
|
41
|
+
const db = this.db;
|
|
42
|
+
const result = await db.runAsync(statement, values);
|
|
43
|
+
return {
|
|
44
|
+
changes: result.changes ?? 0,
|
|
45
|
+
lastId: result.lastInsertRowId ?? result.lastInsertId ?? void 0
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
async query(statement, values = []) {
|
|
49
|
+
await this.open();
|
|
50
|
+
const db = this.db;
|
|
51
|
+
const rows = await db.getAllAsync(statement, values);
|
|
52
|
+
const first = rows[0];
|
|
53
|
+
const columns = first ? Object.keys(first) : [];
|
|
54
|
+
const valuesMatrix = rows.map((row) => columns.map((col) => row[col]));
|
|
55
|
+
return { columns, values: valuesMatrix };
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
export {
|
|
59
|
+
ExpoSQLiteDriver
|
|
60
|
+
};
|
|
61
|
+
//# sourceMappingURL=expoSqlite.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/storage/sqlite/drivers/ExpoSQLiteDriver.native.ts"],"sourcesContent":["import * as SQLite from 'expo-sqlite';\n\nimport type { SQLiteDatabaseDriver, SQLiteQueryResult, SQLiteRunResult } from '../types';\n\nexport class ExpoSQLiteDriver implements SQLiteDatabaseDriver {\n readonly type = 'ExpoSQLiteDriver';\n private db: SQLite.SQLiteDatabase | null = null;\n private openPromise?: Promise<void>;\n private opened = false;\n readonly name: string;\n\n constructor(name: string) {\n this.name = name;\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 this.db = await SQLite.openDatabaseAsync(this.name);\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 const db = this.db;\n this.db = null;\n this.opened = false;\n this.openPromise = undefined;\n if (db?.closeAsync) {\n await db.closeAsync();\n }\n }\n\n async execute(statement: string): Promise<void> {\n await this.run(statement, []);\n }\n\n async run(statement: string, values: any[] = []): Promise<SQLiteRunResult> {\n await this.open();\n const db = this.db!;\n const result = await db.runAsync(statement, values);\n return {\n changes: result.changes ?? 0,\n lastId: (result as any).lastInsertRowId ?? (result as any).lastInsertId ?? undefined,\n };\n }\n\n async query(statement: string, values: any[] = []): Promise<SQLiteQueryResult> {\n await this.open();\n const db = this.db!;\n const rows = await db.getAllAsync(statement, values);\n const first = rows[0];\n const columns = first ? Object.keys(first) : [];\n const valuesMatrix = rows.map((row) => columns.map((col) => (row as any)[col]));\n return { columns, values: valuesMatrix };\n }\n}\n"],"mappings":";AAAA,YAAY,YAAY;AAIjB,IAAM,mBAAN,MAAuD;AAAA,EACjD,OAAO;AAAA,EACR,KAAmC;AAAA,EACnC;AAAA,EACA,SAAS;AAAA,EACR;AAAA,EAET,YAAY,MAAc;AACtB,SAAK,OAAO;AAAA,EAChB;AAAA,EAEA,MAAM,OAAsB;AACxB,QAAI,KAAK,OAAQ;AACjB,QAAI,KAAK,YAAa,QAAO,KAAK;AAElC,SAAK,eAAe,YAAY;AAC5B,UAAI,CAAC,KAAK,IAAI;AACV,aAAK,KAAK,MAAa,yBAAkB,KAAK,IAAI;AAClD,aAAK,SAAS;AAAA,MAClB;AAAA,IACJ,GAAG;AAEH,QAAI;AACA,YAAM,KAAK;AAAA,IACf,UAAE;AACE,WAAK,cAAc;AAAA,IACvB;AAAA,EACJ;AAAA,EAEA,MAAM,QAAuB;AACzB,UAAM,KAAK,KAAK;AAChB,SAAK,KAAK;AACV,SAAK,SAAS;AACd,SAAK,cAAc;AACnB,QAAI,IAAI,YAAY;AAChB,YAAM,GAAG,WAAW;AAAA,IACxB;AAAA,EACJ;AAAA,EAEA,MAAM,QAAQ,WAAkC;AAC5C,UAAM,KAAK,IAAI,WAAW,CAAC,CAAC;AAAA,EAChC;AAAA,EAEA,MAAM,IAAI,WAAmB,SAAgB,CAAC,GAA6B;AACvE,UAAM,KAAK,KAAK;AAChB,UAAM,KAAK,KAAK;AAChB,UAAM,SAAS,MAAM,GAAG,SAAS,WAAW,MAAM;AAClD,WAAO;AAAA,MACH,SAAS,OAAO,WAAW;AAAA,MAC3B,QAAS,OAAe,mBAAoB,OAAe,gBAAgB;AAAA,IAC/E;AAAA,EACJ;AAAA,EAEA,MAAM,MAAM,WAAmB,SAAgB,CAAC,GAA+B;AAC3E,UAAM,KAAK,KAAK;AAChB,UAAM,KAAK,KAAK;AAChB,UAAM,OAAO,MAAM,GAAG,YAAY,WAAW,MAAM;AACnD,UAAM,QAAQ,KAAK,CAAC;AACpB,UAAM,UAAU,QAAQ,OAAO,KAAK,KAAK,IAAI,CAAC;AAC9C,UAAM,eAAe,KAAK,IAAI,CAAC,QAAQ,QAAQ,IAAI,CAAC,QAAS,IAAY,GAAG,CAAC,CAAC;AAC9E,WAAO,EAAE,SAAS,QAAQ,aAAa;AAAA,EAC3C;AACJ;","names":[]}
|