tinybase 4.0.1 → 4.0.3
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/lib/cjs/persisters/persister-cr-sqlite-wasm.cjs +1 -1
- package/lib/cjs/persisters/persister-cr-sqlite-wasm.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-expo-sqlite.cjs +1 -0
- package/lib/cjs/persisters/persister-expo-sqlite.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-sqlite-wasm.cjs +1 -1
- package/lib/cjs/persisters/persister-sqlite-wasm.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-sqlite3.cjs +1 -1
- package/lib/cjs/persisters/persister-sqlite3.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-expo-sqlite.cjs +1 -0
- package/lib/cjs-es6/persisters/persister-expo-sqlite.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-sqlite3.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-sqlite3.cjs.gz +0 -0
- package/lib/debug/persisters/persister-cr-sqlite-wasm.js +177 -117
- package/lib/debug/persisters/persister-expo-sqlite.js +764 -0
- package/lib/debug/persisters/persister-sqlite-wasm.js +172 -116
- package/lib/debug/persisters/persister-sqlite3.js +174 -119
- package/lib/es6/persisters/persister-cr-sqlite-wasm.js +1 -1
- package/lib/es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
- package/lib/es6/persisters/persister-expo-sqlite.js +1 -0
- package/lib/es6/persisters/persister-expo-sqlite.js.gz +0 -0
- package/lib/es6/persisters/persister-sqlite-wasm.js +1 -1
- package/lib/es6/persisters/persister-sqlite-wasm.js.gz +0 -0
- package/lib/es6/persisters/persister-sqlite3.js +1 -1
- package/lib/es6/persisters/persister-sqlite3.js.gz +0 -0
- package/lib/persisters/persister-cr-sqlite-wasm.js +1 -1
- package/lib/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
- package/lib/persisters/persister-expo-sqlite.js +1 -0
- package/lib/persisters/persister-expo-sqlite.js.gz +0 -0
- package/lib/persisters/persister-sqlite-wasm.js +1 -1
- package/lib/persisters/persister-sqlite-wasm.js.gz +0 -0
- package/lib/persisters/persister-sqlite3.js +1 -1
- package/lib/persisters/persister-sqlite3.js.gz +0 -0
- package/lib/types/persisters/persister-expo-sqlite.d.ts +118 -0
- package/lib/types/persisters.d.ts +7 -0
- package/lib/types/with-schemas/persisters/persister-expo-sqlite.d.ts +128 -0
- package/lib/types/with-schemas/persisters.d.ts +7 -0
- package/lib/umd/persisters/persister-cr-sqlite-wasm.js +1 -1
- package/lib/umd/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
- package/lib/umd/persisters/persister-expo-sqlite.js +1 -0
- package/lib/umd/persisters/persister-expo-sqlite.js.gz +0 -0
- package/lib/umd/persisters/persister-sqlite-wasm.js +1 -1
- package/lib/umd/persisters/persister-sqlite-wasm.js.gz +0 -0
- package/lib/umd/persisters/persister-sqlite3.js +1 -1
- package/lib/umd/persisters/persister-sqlite3.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js +1 -1
- package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-expo-sqlite.js +1 -0
- package/lib/umd-es6/persisters/persister-expo-sqlite.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-sqlite-wasm.js +1 -1
- package/lib/umd-es6/persisters/persister-sqlite-wasm.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-sqlite3.js +1 -1
- package/lib/umd-es6/persisters/persister-sqlite3.js.gz +0 -0
- package/package.json +20 -19
- package/readme.md +1 -1
|
@@ -69,10 +69,6 @@ const mapMatch = (map, obj, set, del = mapSet) => {
|
|
|
69
69
|
return map;
|
|
70
70
|
};
|
|
71
71
|
|
|
72
|
-
const SINGLE_ROW_ID = '_';
|
|
73
|
-
const DEFAULT_ROW_ID_COLUMN_NAME = '_id';
|
|
74
|
-
const escapeId = (str) => `"${str.replace(/"/g, '""')}"`;
|
|
75
|
-
|
|
76
72
|
const setNew = (entryOrEntries) =>
|
|
77
73
|
new Set(
|
|
78
74
|
isArray(entryOrEntries) || isUndefined(entryOrEntries)
|
|
@@ -81,6 +77,10 @@ const setNew = (entryOrEntries) =>
|
|
|
81
77
|
);
|
|
82
78
|
const setAdd = (set, value) => set?.add(value);
|
|
83
79
|
|
|
80
|
+
const SINGLE_ROW_ID = '_';
|
|
81
|
+
const DEFAULT_ROW_ID_COLUMN_NAME = '_id';
|
|
82
|
+
const escapeId = (str) => `"${str.replace(/"/g, '""')}"`;
|
|
83
|
+
|
|
84
84
|
const SELECT_STAR_FROM = 'SELECT*FROM';
|
|
85
85
|
const FROM_PRAGMA_TABLE = 'FROM pragma_table_';
|
|
86
86
|
const WHERE = 'WHERE';
|
|
@@ -134,21 +134,6 @@ const getCommandFunctions = (cmd, managedTableNames) => {
|
|
|
134
134
|
),
|
|
135
135
|
(_, name) => mapSet(schemaMap, name),
|
|
136
136
|
);
|
|
137
|
-
const loadSingleRow = async (tableName, rowIdColumnName) => {
|
|
138
|
-
const rows = canSelect(tableName, rowIdColumnName)
|
|
139
|
-
? await cmd(
|
|
140
|
-
SELECT_STAR_FROM +
|
|
141
|
-
escapeId(tableName) +
|
|
142
|
-
WHERE +
|
|
143
|
-
escapeId(rowIdColumnName) +
|
|
144
|
-
'=?',
|
|
145
|
-
[SINGLE_ROW_ID],
|
|
146
|
-
)
|
|
147
|
-
: [];
|
|
148
|
-
return arrayIsEmpty(rows) ? null : objDel(rows[0], rowIdColumnName);
|
|
149
|
-
};
|
|
150
|
-
const saveSingleRow = async (tableName, rowIdColumnName, rowId, row) =>
|
|
151
|
-
await saveTable(tableName, rowIdColumnName, true, true, {[rowId]: row});
|
|
152
137
|
const loadTable = async (tableName, rowIdColumnName) =>
|
|
153
138
|
canSelect(tableName, rowIdColumnName)
|
|
154
139
|
? objNew(
|
|
@@ -167,30 +152,32 @@ const getCommandFunctions = (cmd, managedTableNames) => {
|
|
|
167
152
|
const saveTable = async (
|
|
168
153
|
tableName,
|
|
169
154
|
rowIdColumnName,
|
|
155
|
+
table,
|
|
170
156
|
deleteEmptyColumns,
|
|
171
157
|
deleteEmptyTable,
|
|
172
|
-
|
|
158
|
+
partial = false,
|
|
173
159
|
) => {
|
|
174
|
-
const
|
|
160
|
+
const tableCellIds = setNew();
|
|
175
161
|
objMap(table ?? {}, (row) =>
|
|
176
|
-
arrayMap(objIds(row), (cellId) => setAdd(
|
|
162
|
+
arrayMap(objIds(row ?? {}), (cellId) => setAdd(tableCellIds, cellId)),
|
|
177
163
|
);
|
|
178
|
-
const
|
|
164
|
+
const tableColumnNames = collValues(tableCellIds);
|
|
179
165
|
if (
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
166
|
+
!partial &&
|
|
167
|
+
deleteEmptyTable &&
|
|
168
|
+
arrayIsEmpty(tableColumnNames) &&
|
|
169
|
+
collHas(schemaMap, tableName)
|
|
183
170
|
) {
|
|
184
171
|
await cmd('DROP TABLE' + escapeId(tableName));
|
|
185
172
|
mapSet(schemaMap, tableName);
|
|
186
173
|
return;
|
|
187
174
|
}
|
|
188
|
-
if (!arrayIsEmpty(
|
|
175
|
+
if (!arrayIsEmpty(tableColumnNames) && !collHas(schemaMap, tableName)) {
|
|
189
176
|
await cmd(
|
|
190
177
|
`CREATE TABLE${escapeId(tableName)}(${escapeId(
|
|
191
178
|
rowIdColumnName,
|
|
192
179
|
)} PRIMARY KEY ON CONFLICT REPLACE${arrayJoin(
|
|
193
|
-
arrayMap(
|
|
180
|
+
arrayMap(tableColumnNames, (cellId) => COMMA + escapeId(cellId)),
|
|
194
181
|
)});`,
|
|
195
182
|
);
|
|
196
183
|
mapSet(
|
|
@@ -198,14 +185,17 @@ const getCommandFunctions = (cmd, managedTableNames) => {
|
|
|
198
185
|
tableName,
|
|
199
186
|
mapNew([
|
|
200
187
|
[rowIdColumnName, EMPTY_STRING],
|
|
201
|
-
...arrayMap(
|
|
188
|
+
...arrayMap(tableColumnNames, (columnName) => [
|
|
189
|
+
columnName,
|
|
190
|
+
EMPTY_STRING,
|
|
191
|
+
]),
|
|
202
192
|
]),
|
|
203
193
|
);
|
|
204
194
|
} else {
|
|
205
195
|
const tableSchemaMap = mapGet(schemaMap, tableName);
|
|
206
196
|
const columnNamesAccountedFor = setNew(mapKeys(tableSchemaMap));
|
|
207
197
|
await promiseAll([
|
|
208
|
-
...arrayMap(
|
|
198
|
+
...arrayMap(tableColumnNames, async (columnName) => {
|
|
209
199
|
if (!collDel(columnNamesAccountedFor, columnName)) {
|
|
210
200
|
await cmd(
|
|
211
201
|
`ALTER TABLE${escapeId(tableName)}ADD${escapeId(columnName)}`,
|
|
@@ -213,7 +203,7 @@ const getCommandFunctions = (cmd, managedTableNames) => {
|
|
|
213
203
|
mapSet(tableSchemaMap, columnName, EMPTY_STRING);
|
|
214
204
|
}
|
|
215
205
|
}),
|
|
216
|
-
...(deleteEmptyColumns
|
|
206
|
+
...(!partial && deleteEmptyColumns
|
|
217
207
|
? arrayMap(
|
|
218
208
|
collValues(columnNamesAccountedFor),
|
|
219
209
|
async (columnName) => {
|
|
@@ -230,68 +220,106 @@ const getCommandFunctions = (cmd, managedTableNames) => {
|
|
|
230
220
|
: []),
|
|
231
221
|
]);
|
|
232
222
|
}
|
|
233
|
-
if (
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
223
|
+
if (partial) {
|
|
224
|
+
if (isUndefined(table)) {
|
|
225
|
+
await cmd('DELETE FROM' + escapeId(tableName) + 'WHERE 1');
|
|
226
|
+
} else {
|
|
227
|
+
await promiseAll(
|
|
228
|
+
objMap(table, async (row, rowId) => {
|
|
229
|
+
if (isUndefined(row)) {
|
|
230
|
+
await cmd(
|
|
231
|
+
'DELETE FROM' +
|
|
232
|
+
escapeId(tableName) +
|
|
233
|
+
WHERE +
|
|
234
|
+
escapeId(rowIdColumnName) +
|
|
235
|
+
'=?',
|
|
236
|
+
[rowId],
|
|
237
|
+
);
|
|
238
|
+
} else if (!arrayIsEmpty(tableColumnNames)) {
|
|
239
|
+
await upsert(cmd, tableName, rowIdColumnName, objIds(row), [
|
|
240
|
+
rowId,
|
|
241
|
+
...objValues(row),
|
|
242
|
+
]);
|
|
243
|
+
}
|
|
244
|
+
}),
|
|
245
245
|
);
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
246
|
+
}
|
|
247
|
+
} else {
|
|
248
|
+
if (!arrayIsEmpty(tableColumnNames)) {
|
|
249
|
+
const changingColumnNames = arrayFilter(
|
|
250
|
+
mapKeys(mapGet(schemaMap, tableName)),
|
|
251
|
+
(columnName) => columnName != rowIdColumnName,
|
|
250
252
|
);
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
)
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
)
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
escapeId(tableName) +
|
|
282
|
-
WHERE +
|
|
283
|
-
escapeId(rowIdColumnName) +
|
|
284
|
-
'NOT IN(' +
|
|
285
|
-
getPlaceholders(deleteRowIds) +
|
|
286
|
-
')',
|
|
287
|
-
deleteRowIds,
|
|
288
|
-
);
|
|
289
|
-
} else if (collHas(schemaMap, tableName)) {
|
|
290
|
-
await cmd('DELETE FROM' + escapeId(tableName));
|
|
253
|
+
const args = [];
|
|
254
|
+
const deleteRowIds = [];
|
|
255
|
+
objMap(table ?? {}, (row, rowId) => {
|
|
256
|
+
arrayPush(
|
|
257
|
+
args,
|
|
258
|
+
rowId,
|
|
259
|
+
...arrayMap(changingColumnNames, (cellId) => row?.[cellId]),
|
|
260
|
+
);
|
|
261
|
+
arrayPush(deleteRowIds, rowId);
|
|
262
|
+
});
|
|
263
|
+
await upsert(
|
|
264
|
+
cmd,
|
|
265
|
+
tableName,
|
|
266
|
+
rowIdColumnName,
|
|
267
|
+
changingColumnNames,
|
|
268
|
+
args,
|
|
269
|
+
);
|
|
270
|
+
await cmd(
|
|
271
|
+
'DELETE FROM' +
|
|
272
|
+
escapeId(tableName) +
|
|
273
|
+
WHERE +
|
|
274
|
+
escapeId(rowIdColumnName) +
|
|
275
|
+
'NOT IN(' +
|
|
276
|
+
getPlaceholders(deleteRowIds) +
|
|
277
|
+
')',
|
|
278
|
+
deleteRowIds,
|
|
279
|
+
);
|
|
280
|
+
} else if (collHas(schemaMap, tableName)) {
|
|
281
|
+
await cmd('DELETE FROM' + escapeId(tableName) + 'WHERE 1');
|
|
282
|
+
}
|
|
291
283
|
}
|
|
292
284
|
};
|
|
293
|
-
return [refreshSchema,
|
|
285
|
+
return [refreshSchema, loadTable, saveTable];
|
|
294
286
|
};
|
|
287
|
+
const upsert = async (
|
|
288
|
+
cmd,
|
|
289
|
+
tableName,
|
|
290
|
+
rowIdColumnName,
|
|
291
|
+
changingColumnNames,
|
|
292
|
+
args,
|
|
293
|
+
) =>
|
|
294
|
+
await cmd(
|
|
295
|
+
'INSERT INTO' +
|
|
296
|
+
escapeId(tableName) +
|
|
297
|
+
'(' +
|
|
298
|
+
escapeId(rowIdColumnName) +
|
|
299
|
+
arrayJoin(
|
|
300
|
+
arrayMap(
|
|
301
|
+
changingColumnNames,
|
|
302
|
+
(columnName) => COMMA + escapeId(columnName),
|
|
303
|
+
),
|
|
304
|
+
) +
|
|
305
|
+
')VALUES' +
|
|
306
|
+
strRepeat(
|
|
307
|
+
`,(?${strRepeat(',?', arrayLength(changingColumnNames))})`,
|
|
308
|
+
arrayLength(args) / (arrayLength(changingColumnNames) + 1),
|
|
309
|
+
).substring(1) +
|
|
310
|
+
'ON CONFLICT(' +
|
|
311
|
+
escapeId(rowIdColumnName) +
|
|
312
|
+
')DO UPDATE SET' +
|
|
313
|
+
arrayJoin(
|
|
314
|
+
arrayMap(
|
|
315
|
+
changingColumnNames,
|
|
316
|
+
(columnName) =>
|
|
317
|
+
escapeId(columnName) + '=excluded.' + escapeId(columnName),
|
|
318
|
+
),
|
|
319
|
+
COMMA,
|
|
320
|
+
),
|
|
321
|
+
args,
|
|
322
|
+
);
|
|
295
323
|
const getPlaceholders = (array) =>
|
|
296
324
|
arrayJoin(
|
|
297
325
|
arrayMap(array, () => '?'),
|
|
@@ -434,25 +462,28 @@ const createJsonSqlitePersister = (
|
|
|
434
462
|
[storeTableName],
|
|
435
463
|
managedTableNames,
|
|
436
464
|
) => {
|
|
437
|
-
const [refreshSchema,
|
|
465
|
+
const [refreshSchema, loadTable, saveTable] = getCommandFunctions(
|
|
438
466
|
cmd,
|
|
439
467
|
managedTableNames,
|
|
440
468
|
);
|
|
441
469
|
const getPersisted = async () => {
|
|
442
470
|
await refreshSchema();
|
|
443
471
|
return jsonParse(
|
|
444
|
-
(
|
|
445
|
-
|
|
446
|
-
],
|
|
472
|
+
(await loadTable(storeTableName, DEFAULT_ROW_ID_COLUMN_NAME))[
|
|
473
|
+
SINGLE_ROW_ID
|
|
474
|
+
]?.[STORE_COLUMN],
|
|
447
475
|
);
|
|
448
476
|
};
|
|
449
477
|
const setPersisted = async (getContent) =>
|
|
450
478
|
persister.schedule(refreshSchema, async () => {
|
|
451
|
-
await
|
|
479
|
+
await saveTable(
|
|
452
480
|
storeTableName,
|
|
453
481
|
DEFAULT_ROW_ID_COLUMN_NAME,
|
|
454
|
-
|
|
455
|
-
|
|
482
|
+
{
|
|
483
|
+
[SINGLE_ROW_ID]: {[STORE_COLUMN]: jsonString(getContent())},
|
|
484
|
+
},
|
|
485
|
+
true,
|
|
486
|
+
true,
|
|
456
487
|
);
|
|
457
488
|
});
|
|
458
489
|
const persister = createCustomPersister(
|
|
@@ -477,32 +508,41 @@ const createTabularSqlitePersister = (
|
|
|
477
508
|
],
|
|
478
509
|
managedTableNames,
|
|
479
510
|
) => {
|
|
480
|
-
const [refreshSchema,
|
|
481
|
-
|
|
482
|
-
|
|
511
|
+
const [refreshSchema, loadTable, saveTable] = getCommandFunctions(
|
|
512
|
+
cmd,
|
|
513
|
+
managedTableNames,
|
|
514
|
+
);
|
|
515
|
+
const saveTables = async (tables, partial) =>
|
|
483
516
|
await promiseAll(
|
|
484
517
|
mapMap(
|
|
485
518
|
tablesSaveConfig,
|
|
486
519
|
async (
|
|
487
520
|
[tableName, rowIdColumnName, deleteEmptyColumns, deleteEmptyTable],
|
|
488
521
|
tableId,
|
|
489
|
-
) =>
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
522
|
+
) => {
|
|
523
|
+
const table = tables[tableId];
|
|
524
|
+
if (!partial || table !== void 0) {
|
|
525
|
+
await saveTable(
|
|
526
|
+
tableName,
|
|
527
|
+
rowIdColumnName,
|
|
528
|
+
table,
|
|
529
|
+
deleteEmptyColumns,
|
|
530
|
+
deleteEmptyTable,
|
|
531
|
+
partial,
|
|
532
|
+
);
|
|
533
|
+
}
|
|
534
|
+
},
|
|
497
535
|
),
|
|
498
536
|
);
|
|
499
|
-
const saveValues = async (values) =>
|
|
537
|
+
const saveValues = async (values, partial) =>
|
|
500
538
|
valuesSave
|
|
501
|
-
? await
|
|
539
|
+
? await saveTable(
|
|
502
540
|
valuesTableName,
|
|
503
541
|
DEFAULT_ROW_ID_COLUMN_NAME,
|
|
504
|
-
SINGLE_ROW_ID,
|
|
505
|
-
|
|
542
|
+
{[SINGLE_ROW_ID]: values},
|
|
543
|
+
true,
|
|
544
|
+
true,
|
|
545
|
+
partial,
|
|
506
546
|
)
|
|
507
547
|
: null;
|
|
508
548
|
const loadTables = async () =>
|
|
@@ -522,7 +562,9 @@ const createTabularSqlitePersister = (
|
|
|
522
562
|
);
|
|
523
563
|
const loadValues = async () =>
|
|
524
564
|
valuesLoad
|
|
525
|
-
? await
|
|
565
|
+
? (await loadTable(valuesTableName, DEFAULT_ROW_ID_COLUMN_NAME))[
|
|
566
|
+
SINGLE_ROW_ID
|
|
567
|
+
]
|
|
526
568
|
: {};
|
|
527
569
|
const getPersisted = async () => {
|
|
528
570
|
await refreshSchema();
|
|
@@ -532,11 +574,17 @@ const createTabularSqlitePersister = (
|
|
|
532
574
|
? [tables, values]
|
|
533
575
|
: void 0;
|
|
534
576
|
};
|
|
535
|
-
const setPersisted = async (getContent) => {
|
|
536
|
-
const [tables, values] = getContent();
|
|
577
|
+
const setPersisted = async (getContent, getTransactionChanges) => {
|
|
537
578
|
await refreshSchema();
|
|
538
|
-
|
|
539
|
-
|
|
579
|
+
if (!isUndefined(getTransactionChanges)) {
|
|
580
|
+
const [tableChanges, valueChanges] = getTransactionChanges();
|
|
581
|
+
await saveTables(tableChanges, true);
|
|
582
|
+
await saveValues(valueChanges, true);
|
|
583
|
+
} else {
|
|
584
|
+
const [tables, values] = getContent();
|
|
585
|
+
await saveTables(tables);
|
|
586
|
+
await saveValues(values);
|
|
587
|
+
}
|
|
540
588
|
};
|
|
541
589
|
const persister = createCustomPersister(
|
|
542
590
|
store,
|
|
@@ -650,6 +698,7 @@ const createSqlitePersister = (
|
|
|
650
698
|
cmd,
|
|
651
699
|
addUpdateListener,
|
|
652
700
|
delUpdateListener,
|
|
701
|
+
logSql,
|
|
653
702
|
) => {
|
|
654
703
|
let dataVersion;
|
|
655
704
|
let schemaVersion;
|
|
@@ -689,7 +738,12 @@ const createSqlitePersister = (
|
|
|
689
738
|
};
|
|
690
739
|
return (isJson ? createJsonSqlitePersister : createTabularSqlitePersister)(
|
|
691
740
|
store,
|
|
692
|
-
|
|
741
|
+
logSql
|
|
742
|
+
? async (sql, args) => {
|
|
743
|
+
logSql(sql, args);
|
|
744
|
+
return await cmd(sql, args);
|
|
745
|
+
}
|
|
746
|
+
: cmd,
|
|
693
747
|
addPersisterListener,
|
|
694
748
|
delPersisterListener,
|
|
695
749
|
defaultedConfig,
|
|
@@ -698,12 +752,12 @@ const createSqlitePersister = (
|
|
|
698
752
|
};
|
|
699
753
|
|
|
700
754
|
const CHANGE = 'change';
|
|
701
|
-
const createSqlite3Persister = (store, db, configOrStoreTableName) =>
|
|
755
|
+
const createSqlite3Persister = (store, db, configOrStoreTableName, logSql) =>
|
|
702
756
|
createSqlitePersister(
|
|
703
757
|
store,
|
|
704
758
|
configOrStoreTableName,
|
|
705
|
-
(sql, args = []) =>
|
|
706
|
-
promiseNew((resolve, reject) =>
|
|
759
|
+
async (sql, args = []) =>
|
|
760
|
+
await promiseNew((resolve, reject) =>
|
|
707
761
|
db.all(sql, args, (error, rows) =>
|
|
708
762
|
error ? reject(error) : resolve(rows.map((row) => ({...row}))),
|
|
709
763
|
),
|
|
@@ -714,6 +768,7 @@ const createSqlite3Persister = (store, db, configOrStoreTableName) =>
|
|
|
714
768
|
return observer;
|
|
715
769
|
},
|
|
716
770
|
(observer) => db.off(CHANGE, observer),
|
|
771
|
+
logSql,
|
|
717
772
|
);
|
|
718
773
|
|
|
719
774
|
export {createSqlite3Persister};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=e=>typeof e,n="tinybase",t=",",l=e(""),r=(e,n="")=>e.join(n),
|
|
1
|
+
const e=e=>typeof e,n="tinybase",t=",",l=e(""),o=(e,n)=>e.repeat(n),r=(e,n="")=>e.join(n),i=(e,n)=>e.map(n),u=e=>e.length,a=e=>0==u(e),d=(e,n)=>e.filter(n),c=(e,n,t)=>e.slice(n,t),s=(e,...n)=>e.push(...n),v=Promise,y=(e,n)=>e instanceof n,f=e=>null==e,h=(e,n,t)=>f(e)?null==t?void 0:t():n(e),E=n=>e(n)==l,p=e=>{return n=function*(){return v.all(e)},new Promise(((e,t)=>{var l=e=>{try{r(n.next(e))}catch(e){t(e)}},o=e=>{try{r(n.throw(e))}catch(e){t(e)}},r=n=>n.done?e(n.value):Promise.resolve(n.value).then(l,o);r((n=n.apply(void 0,null)).next())}));var n},m=(e,n)=>{var t;return null!=(t=null==e?void 0:e.has(n))&&t},T=e=>{var n;return[...null!=(n=null==e?void 0:e.values())?n:[]]},O=(e,n)=>null==e?void 0:e.delete(n),A=Object,L=A.keys,P=A.freeze,b=(e=[])=>A.fromEntries(e),w=(...e)=>A.assign({},...e),R=(e,n)=>i(A.entries(e),(([e,t])=>n(t,e))),x=e=>A.values(e),N=e=>u(L(e)),S=e=>(e=>y(e,A)&&e.constructor==A)(e)&&0==N(e),C=e=>new Map(e),g=e=>{var n;return[...null!=(n=null==e?void 0:e.keys())?n:[]]},D=(e,n)=>null==e?void 0:e.get(n),I=(e,n)=>{var t;return i([...null!=(t=null==e?void 0:e.entries())?t:[]],(([e,t])=>n(t,e)))},F=(e,n,t)=>f(t)?(O(e,n),e):null==e?void 0:e.set(n,t),M=(e,n,t,l=F)=>(R(n,((n,l)=>t(e,l,n))),((e,n)=>{((e,n)=>{null==e||e.forEach(n)})(e,((e,t)=>n(t)))})(e,(t=>((e,n)=>!f(((e,n)=>h(e,(e=>e[n])))(e,n)))(n,t)?0:l(e,t))),e),$=e=>new Set(Array.isArray(e)||f(e)?e:[e]),j=(e,n)=>null==e?void 0:e.add(n),_="_",B="_id",H=e=>`"${e.replace(/"/g,'""')}"`;var W=Object.defineProperty,U=Object.getOwnPropertySymbols,k=Object.prototype.hasOwnProperty,J=Object.prototype.propertyIsEnumerable,Y=(e,n,t)=>n in e?W(e,n,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[n]=t,z=(e,n)=>{for(var t in n||(n={}))k.call(n,t)&&Y(e,t,n[t]);if(U)for(var t of U(n))J.call(n,t)&&Y(e,t,n[t]);return e},K=(e,n,t)=>new Promise(((l,o)=>{var r=e=>{try{u(t.next(e))}catch(e){o(e)}},i=e=>{try{u(t.throw(e))}catch(e){o(e)}},u=e=>e.done?l(e.value):Promise.resolve(e.value).then(r,i);u((t=t.apply(e,n)).next())}));const V="FROM pragma_table_",q="WHERE",G=(e,n)=>{const l=C();return[()=>K(void 0,null,(function*(){return M(l,b(yield p(i(yield e("SELECT name "+V+"list WHERE schema='main'AND type='table'AND name IN("+X(n)+")",n),(n=>K(void 0,[n],(function*({name:n}){return[n,b(i(yield e("SELECT name,type "+V+"info(?)",[n]),(({name:e,type:n})=>[e,n])))]})))))),((e,n,t)=>{return F(l,n,M((i=C,m(o=l,r=n)||F(o,r,i()),D(o,r)),t,((e,n,t)=>{t!=D(e,n)&&F(e,n,t)}),((e,n)=>F(e,n))));var o,r,i}),((e,n)=>F(l,n)))})),(n,t)=>K(void 0,null,(function*(){return((e,n)=>!f(D(D(l,e),n)))(n,t)?b(d(i(yield e("SELECT*FROM"+H(n)),(e=>{return[e[t],(n=z({},e),l=t,delete n[l],n)];var n,l})),(([e,n])=>!f(e)&&!S(n)))):{}})),(n,o,u,c,v,y=!1)=>K(void 0,null,(function*(){const h=$();R(null!=u?u:{},(e=>i(L(null!=e?e:{}),(e=>j(h,e)))));const E=T(h);if(!y&&v&&a(E)&&m(l,n))return yield e("DROP TABLE"+H(n)),void F(l,n);if(a(E)||m(l,n)){const t=D(l,n),r=$(g(t));yield p([...i(E,(l=>K(void 0,null,(function*(){O(r,l)||(yield e(`ALTER TABLE${H(n)}ADD${H(l)}`),F(t,l,""))})))),...!y&&c?i(T(r),(l=>K(void 0,null,(function*(){l!=o&&(yield e(`ALTER TABLE${H(n)}DROP${H(l)}`),F(t,l))})))):[]])}else yield e(`CREATE TABLE${H(n)}(${H(o)} PRIMARY KEY ON CONFLICT REPLACE${r(i(E,(e=>t+H(e))))});`),F(l,n,C([[o,""],...i(E,(e=>[e,""]))]));if(y)f(u)?yield e("DELETE FROM"+H(n)+"WHERE 1"):yield p(R(u,((t,l)=>K(void 0,null,(function*(){f(t)?yield e("DELETE FROM"+H(n)+q+H(o)+"=?",[l]):a(E)||(yield Q(e,n,o,L(t),[l,...x(t)]))})))));else if(a(E))m(l,n)&&(yield e("DELETE FROM"+H(n)+"WHERE 1"));else{const t=d(g(D(l,n)),(e=>e!=o)),r=[],a=[];R(null!=u?u:{},((e,n)=>{s(r,n,...i(t,(n=>null==e?void 0:e[n]))),s(a,n)})),yield Q(e,n,o,t,r),yield e("DELETE FROM"+H(n)+q+H(o)+"NOT IN("+X(a)+")",a)}}))]},Q=(e,n,l,a,d)=>K(void 0,null,(function*(){return yield e("INSERT INTO"+H(n)+"("+H(l)+r(i(a,(e=>t+H(e))))+")VALUES"+o(`,(?${o(",?",u(a))})`,u(d)/(u(a)+1)).substring(1)+"ON CONFLICT("+H(l)+")DO UPDATE SET"+r(i(a,(e=>H(e)+"=excluded."+H(e))),t),d)})),X=e=>r(i(e,(()=>"?")),t),Z=JSON.parse;var ee=(e,n,t)=>new Promise(((l,o)=>{var r=e=>{try{u(t.next(e))}catch(e){o(e)}},i=e=>{try{u(t.throw(e))}catch(e){o(e)}},u=e=>e.done?l(e.value):Promise.resolve(e.value).then(r,i);u((t=t.apply(e,n)).next())}));const ne=(e,n,t,l,o)=>{let r,i,u,a=0,d=0,c=0;const v=[],y=e=>ee(void 0,null,(function*(){return 2!=a&&(a=1,yield E.schedule((()=>ee(void 0,null,(function*(){yield e(),a=0}))))),E})),E={load:(t,l)=>ee(void 0,null,(function*(){return yield y((()=>ee(void 0,null,(function*(){try{e.setContent(yield n())}catch(n){e.setContent([t,l])}}))))})),startAutoLoad:(...t)=>ee(void 0,[...t],(function*(t={},o={}){return E.stopAutoLoad(),yield E.load(t,o),c=1,u=l(((t,l)=>ee(void 0,null,(function*(){return yield y((()=>ee(void 0,null,(function*(){var o;if(l)e.setTransactionChanges(l());else try{e.setContent(null!=(o=null==t?void 0:t())?o:yield n())}catch(e){}}))))})))),E})),stopAutoLoad:()=>(c&&(o(u),u=void 0,c=0),E),save:n=>ee(void 0,null,(function*(){return 1!=a&&(a=2,yield E.schedule((()=>ee(void 0,null,(function*(){try{yield t(e.getContent,n)}catch(e){}a=0}))))),E})),startAutoSave:()=>ee(void 0,null,(function*(){return yield E.stopAutoSave().save(),r=e.addDidFinishTransactionListener(((e,n)=>{const[t,l]=n();S(t)&&S(l)||E.save((()=>[t,l]))})),E})),stopAutoSave:()=>(h(r,e.delListener),E),schedule:(...e)=>ee(void 0,null,(function*(){return s(v,...e),yield ee(void 0,null,(function*(){if(!d){for(d=1;!f((e=v,i=e.shift()));)try{yield i()}catch(e){}d=0}var e})),E})),getStore:()=>e,destroy:()=>E.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return P(E)};var te=(e,n,t)=>new Promise(((l,o)=>{var r=e=>{try{u(t.next(e))}catch(e){o(e)}},i=e=>{try{u(t.throw(e))}catch(e){o(e)}},u=e=>e.done?l(e.value):Promise.resolve(e.value).then(r,i);u((t=t.apply(e,n)).next())}));const le="store",oe=(e,n,t,l,[o],r)=>{const[i,u,a]=G(n,r),d=ne(e,(()=>te(void 0,null,(function*(){var e;return yield i(),Z(null==(e=(yield u(o,B))[_])?void 0:e[le])}))),(e=>te(void 0,null,(function*(){return d.schedule(i,(()=>te(void 0,null,(function*(){var n;yield a(o,B,{[_]:{[le]:(n=e(),JSON.stringify(n,((e,n)=>y(n,Map)?A.fromEntries([...n]):n)))}},!0,!0)}))))}))),t,l);return d};var re=(e,n,t)=>new Promise(((l,o)=>{var r=e=>{try{u(t.next(e))}catch(e){o(e)}},i=e=>{try{u(t.throw(e))}catch(e){o(e)}},u=e=>e.done?l(e.value):Promise.resolve(e.value).then(r,i);u((t=t.apply(e,n)).next())}));const ie=(e,n,t,l,[o,r,[i,u,a]],c)=>{const[s,v,y]=G(n,c),h=(e,n)=>re(void 0,null,(function*(){return yield p(I(r,((t,l)=>re(void 0,[t,l],(function*([t,l,o,r],i){const u=e[i];n&&void 0===u||(yield y(t,l,u,o,r,n))})))))})),E=(e,n)=>re(void 0,null,(function*(){return u?yield y(a,B,{[_]:e},!0,!0,n):null}));return ne(e,(()=>re(void 0,null,(function*(){yield s();const e=yield re(void 0,null,(function*(){return b(d(yield p(I(o,((e,n)=>re(void 0,[e,n],(function*([e,n],t){return[e,yield v(t,n)]}))))),(e=>!S(e[1]))))})),n=yield re(void 0,null,(function*(){return i?(yield v(a,B))[_]:{}}));return S(e)&&f(n)?void 0:[e,n]}))),((e,n)=>re(void 0,null,(function*(){if(yield s(),f(n)){const[n,t]=e();yield h(n),yield E(t)}else{const[e,t]=n();yield h(e,!0),yield E(t,!0)}}))),t,l)},ue="json",ae="autoLoadIntervalSeconds",de="rowIdColumnName",ce="tableId",se="tableName",ve={mode:ue,[ae]:1},ye={load:0,save:0,[se]:n+"_values"},fe=(e,n,t,l)=>{const o=C();return R(e,((e,r)=>{const i=c(x(w(n,E(e)?{[t]:e}:e)),0,N(n));f(i[0])||l(r,i[0])||F(o,r,i)})),o};var he=(e,n,t)=>new Promise(((l,o)=>{var r=e=>{try{u(t.next(e))}catch(e){o(e)}},i=e=>{try{u(t.throw(e))}catch(e){o(e)}},u=e=>e.done?l(e.value):Promise.resolve(e.value).then(r,i);u((t=t.apply(e,n)).next())}));const Ee="pragma ",pe="data_version",me="schema_version",Te=(e,t,l,o,r,i)=>{let u,a;const[d,s,v,y]=(e=>{const t=(e=>w(ve,E(e)?{storeTableName:e}:null!=e?e:{}))(e),l=t[ae];if(t.mode==ue){const{storeTableName:e=n}=t;return[1,l,[e],$(e)]}const{tables:{load:o={},save:r={}}={},values:i={}}=t,u=c(x(w(ye,i)),0,N(ye)),a=u[2],d=$(a);return[0,l,[fe(o,{[ce]:null,[de]:B},ce,(e=>j(d,e)&&e==a)),fe(r,{[se]:null,[de]:B,deleteEmptyColumns:0,deleteEmptyTable:0},se,((e,n)=>j(d,n)&&n==a)),u],d]})(t);return(d?oe:ie)(e,i?(e,n)=>he(void 0,null,(function*(){return i(e,n),yield l(e,n)})):l,(e=>[setInterval((()=>he(void 0,null,(function*(){try{const n=(yield l(Ee+pe))[0][pe],t=(yield l(Ee+me))[0][me];n==(null!=u?u:u=n)&&t==(null!=a?a:a=t)||(e(),u=n,a=t)}catch(e){}}))),1e3*s),o((n=>y.has(n)?e():0))]),(([e,n])=>{clearInterval(e),u=a=null,r(n)}),v,T(y))},Oe=(e,n,t,l)=>Te(e,t,((e,...t)=>{return l=[e,...t],o=function*(e,t=[]){return yield n.execO(e,t)},new Promise(((e,n)=>{var t=e=>{try{i(o.next(e))}catch(e){n(e)}},r=e=>{try{i(o.throw(e))}catch(e){n(e)}},i=n=>n.done?e(n.value):Promise.resolve(n.value).then(t,r);i((o=o.apply(void 0,l)).next())}));var l,o}),(e=>n.onUpdate(((n,t,l)=>e(l)))),(e=>e()),l);export{Oe as createCrSqliteWasmPersister};
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e=e=>typeof e,n="tinybase",t=",",l=e(""),o=(e,n)=>e.repeat(n),r=(e,n="")=>e.join(n),i=(e,n)=>e.map(n),u=e=>e.length,a=e=>0==u(e),d=(e,n)=>e.filter(n),s=(e,n,t)=>e.slice(n,t),c=(e,...n)=>e.push(...n),v=Promise,y=(e,n)=>e instanceof n,f=e=>null==e,h=(e,n,t)=>f(e)?null==t?void 0:t():n(e),E=n=>e(n)==l,p=e=>{return n=function*(){return v.all(e)},new Promise(((e,t)=>{var l=e=>{try{r(n.next(e))}catch(e){t(e)}},o=e=>{try{r(n.throw(e))}catch(e){t(e)}},r=n=>n.done?e(n.value):Promise.resolve(n.value).then(l,o);r((n=n.apply(void 0,null)).next())}));var n},m=(e,n)=>{var t;return null!=(t=null==e?void 0:e.has(n))&&t},T=e=>{var n;return[...null!=(n=null==e?void 0:e.values())?n:[]]},A=(e,n)=>null==e?void 0:e.delete(n),L=Object,O=L.keys,P=L.freeze,b=(e=[])=>L.fromEntries(e),w=(...e)=>L.assign({},...e),R=(e,n)=>i(L.entries(e),(([e,t])=>n(t,e))),N=e=>L.values(e),x=e=>u(O(e)),C=e=>(e=>y(e,L)&&e.constructor==L)(e)&&0==x(e),S=e=>new Map(e),g=e=>{var n;return[...null!=(n=null==e?void 0:e.keys())?n:[]]},D=(e,n)=>null==e?void 0:e.get(n),I=(e,n)=>{var t;return i([...null!=(t=null==e?void 0:e.entries())?t:[]],(([e,t])=>n(t,e)))},F=(e,n,t)=>f(t)?(A(e,n),e):null==e?void 0:e.set(n,t),M=(e,n,t,l=F)=>(R(n,((n,l)=>t(e,l,n))),((e,n)=>{((e,n)=>{null==e||e.forEach(n)})(e,((e,t)=>n(t)))})(e,(t=>((e,n)=>!f(((e,n)=>h(e,(e=>e[n])))(e,n)))(n,t)?0:l(e,t))),e),$=e=>new Set(Array.isArray(e)||f(e)?e:[e]),j=(e,n)=>null==e?void 0:e.add(n),_="_",B="_id",H=e=>`"${e.replace(/"/g,'""')}"`;var W=Object.defineProperty,k=Object.getOwnPropertySymbols,J=Object.prototype.hasOwnProperty,U=Object.prototype.propertyIsEnumerable,Y=(e,n,t)=>n in e?W(e,n,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[n]=t,q=(e,n)=>{for(var t in n||(n={}))J.call(n,t)&&Y(e,t,n[t]);if(k)for(var t of k(n))U.call(n,t)&&Y(e,t,n[t]);return e},z=(e,n,t)=>new Promise(((l,o)=>{var r=e=>{try{u(t.next(e))}catch(e){o(e)}},i=e=>{try{u(t.throw(e))}catch(e){o(e)}},u=e=>e.done?l(e.value):Promise.resolve(e.value).then(r,i);u((t=t.apply(e,n)).next())}));const K="FROM pragma_table_",V="WHERE",G=(e,n)=>{const l=S();return[()=>z(void 0,null,(function*(){return M(l,b(yield p(i(yield e("SELECT name "+K+"list WHERE schema='main'AND type='table'AND name IN("+X(n)+")",n),(n=>z(void 0,[n],(function*({name:n}){return[n,b(i(yield e("SELECT name,type "+K+"info(?)",[n]),(({name:e,type:n})=>[e,n])))]})))))),((e,n,t)=>{return F(l,n,M((i=S,m(o=l,r=n)||F(o,r,i()),D(o,r)),t,((e,n,t)=>{t!=D(e,n)&&F(e,n,t)}),((e,n)=>F(e,n))));var o,r,i}),((e,n)=>F(l,n)))})),(n,t)=>z(void 0,null,(function*(){return((e,n)=>!f(D(D(l,e),n)))(n,t)?b(d(i(yield e("SELECT*FROM"+H(n)),(e=>{return[e[t],(n=q({},e),l=t,delete n[l],n)];var n,l})),(([e,n])=>!f(e)&&!C(n)))):{}})),(n,o,u,s,v,y=!1)=>z(void 0,null,(function*(){const h=$();R(null!=u?u:{},(e=>i(O(null!=e?e:{}),(e=>j(h,e)))));const E=T(h);if(!y&&v&&a(E)&&m(l,n))return yield e("DROP TABLE"+H(n)),void F(l,n);if(a(E)||m(l,n)){const t=D(l,n),r=$(g(t));yield p([...i(E,(l=>z(void 0,null,(function*(){A(r,l)||(yield e(`ALTER TABLE${H(n)}ADD${H(l)}`),F(t,l,""))})))),...!y&&s?i(T(r),(l=>z(void 0,null,(function*(){l!=o&&(yield e(`ALTER TABLE${H(n)}DROP${H(l)}`),F(t,l))})))):[]])}else yield e(`CREATE TABLE${H(n)}(${H(o)} PRIMARY KEY ON CONFLICT REPLACE${r(i(E,(e=>t+H(e))))});`),F(l,n,S([[o,""],...i(E,(e=>[e,""]))]));if(y)f(u)?yield e("DELETE FROM"+H(n)+"WHERE 1"):yield p(R(u,((t,l)=>z(void 0,null,(function*(){f(t)?yield e("DELETE FROM"+H(n)+V+H(o)+"=?",[l]):a(E)||(yield Q(e,n,o,O(t),[l,...N(t)]))})))));else if(a(E))m(l,n)&&(yield e("DELETE FROM"+H(n)+"WHERE 1"));else{const t=d(g(D(l,n)),(e=>e!=o)),r=[],a=[];R(null!=u?u:{},((e,n)=>{c(r,n,...i(t,(n=>null==e?void 0:e[n]))),c(a,n)})),yield Q(e,n,o,t,r),yield e("DELETE FROM"+H(n)+V+H(o)+"NOT IN("+X(a)+")",a)}}))]},Q=(e,n,l,a,d)=>z(void 0,null,(function*(){return yield e("INSERT INTO"+H(n)+"("+H(l)+r(i(a,(e=>t+H(e))))+")VALUES"+o(`,(?${o(",?",u(a))})`,u(d)/(u(a)+1)).substring(1)+"ON CONFLICT("+H(l)+")DO UPDATE SET"+r(i(a,(e=>H(e)+"=excluded."+H(e))),t),d)})),X=e=>r(i(e,(()=>"?")),t),Z=JSON.parse;var ee=(e,n,t)=>new Promise(((l,o)=>{var r=e=>{try{u(t.next(e))}catch(e){o(e)}},i=e=>{try{u(t.throw(e))}catch(e){o(e)}},u=e=>e.done?l(e.value):Promise.resolve(e.value).then(r,i);u((t=t.apply(e,n)).next())}));const ne=(e,n,t,l,o)=>{let r,i,u,a=0,d=0,s=0;const v=[],y=e=>ee(void 0,null,(function*(){return 2!=a&&(a=1,yield E.schedule((()=>ee(void 0,null,(function*(){yield e(),a=0}))))),E})),E={load:(t,l)=>ee(void 0,null,(function*(){return yield y((()=>ee(void 0,null,(function*(){try{e.setContent(yield n())}catch(n){e.setContent([t,l])}}))))})),startAutoLoad:(...t)=>ee(void 0,[...t],(function*(t={},o={}){return E.stopAutoLoad(),yield E.load(t,o),s=1,u=l(((t,l)=>ee(void 0,null,(function*(){return yield y((()=>ee(void 0,null,(function*(){var o;if(l)e.setTransactionChanges(l());else try{e.setContent(null!=(o=null==t?void 0:t())?o:yield n())}catch(e){}}))))})))),E})),stopAutoLoad:()=>(s&&(o(u),u=void 0,s=0),E),save:n=>ee(void 0,null,(function*(){return 1!=a&&(a=2,yield E.schedule((()=>ee(void 0,null,(function*(){try{yield t(e.getContent,n)}catch(e){}a=0}))))),E})),startAutoSave:()=>ee(void 0,null,(function*(){return yield E.stopAutoSave().save(),r=e.addDidFinishTransactionListener(((e,n)=>{const[t,l]=n();C(t)&&C(l)||E.save((()=>[t,l]))})),E})),stopAutoSave:()=>(h(r,e.delListener),E),schedule:(...e)=>ee(void 0,null,(function*(){return c(v,...e),yield ee(void 0,null,(function*(){if(!d){for(d=1;!f((e=v,i=e.shift()));)try{yield i()}catch(e){}d=0}var e})),E})),getStore:()=>e,destroy:()=>E.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return P(E)};var te=(e,n,t)=>new Promise(((l,o)=>{var r=e=>{try{u(t.next(e))}catch(e){o(e)}},i=e=>{try{u(t.throw(e))}catch(e){o(e)}},u=e=>e.done?l(e.value):Promise.resolve(e.value).then(r,i);u((t=t.apply(e,n)).next())}));const le="store",oe=(e,n,t,l,[o],r)=>{const[i,u,a]=G(n,r),d=ne(e,(()=>te(void 0,null,(function*(){var e;return yield i(),Z(null==(e=(yield u(o,B))[_])?void 0:e[le])}))),(e=>te(void 0,null,(function*(){return d.schedule(i,(()=>te(void 0,null,(function*(){var n;yield a(o,B,{[_]:{[le]:(n=e(),JSON.stringify(n,((e,n)=>y(n,Map)?L.fromEntries([...n]):n)))}},!0,!0)}))))}))),t,l);return d};var re=(e,n,t)=>new Promise(((l,o)=>{var r=e=>{try{u(t.next(e))}catch(e){o(e)}},i=e=>{try{u(t.throw(e))}catch(e){o(e)}},u=e=>e.done?l(e.value):Promise.resolve(e.value).then(r,i);u((t=t.apply(e,n)).next())}));const ie=(e,n,t,l,[o,r,[i,u,a]],s)=>{const[c,v,y]=G(n,s),h=(e,n)=>re(void 0,null,(function*(){return yield p(I(r,((t,l)=>re(void 0,[t,l],(function*([t,l,o,r],i){const u=e[i];n&&void 0===u||(yield y(t,l,u,o,r,n))})))))})),E=(e,n)=>re(void 0,null,(function*(){return u?yield y(a,B,{[_]:e},!0,!0,n):null}));return ne(e,(()=>re(void 0,null,(function*(){yield c();const e=yield re(void 0,null,(function*(){return b(d(yield p(I(o,((e,n)=>re(void 0,[e,n],(function*([e,n],t){return[e,yield v(t,n)]}))))),(e=>!C(e[1]))))})),n=yield re(void 0,null,(function*(){return i?(yield v(a,B))[_]:{}}));return C(e)&&f(n)?void 0:[e,n]}))),((e,n)=>re(void 0,null,(function*(){if(yield c(),f(n)){const[n,t]=e();yield h(n),yield E(t)}else{const[e,t]=n();yield h(e,!0),yield E(t,!0)}}))),t,l)},ue="json",ae="autoLoadIntervalSeconds",de="rowIdColumnName",se="tableId",ce="tableName",ve={mode:ue,[ae]:1},ye={load:0,save:0,[ce]:n+"_values"},fe=(e,n,t,l)=>{const o=S();return R(e,((e,r)=>{const i=s(N(w(n,E(e)?{[t]:e}:e)),0,x(n));f(i[0])||l(r,i[0])||F(o,r,i)})),o};var he=(e,n,t)=>new Promise(((l,o)=>{var r=e=>{try{u(t.next(e))}catch(e){o(e)}},i=e=>{try{u(t.throw(e))}catch(e){o(e)}},u=e=>e.done?l(e.value):Promise.resolve(e.value).then(r,i);u((t=t.apply(e,n)).next())}));const Ee="pragma ",pe="data_version",me="schema_version",Te=(e,t,l,o,r,i)=>{let u,a;const[d,c,v,y]=(e=>{const t=(e=>w(ve,E(e)?{storeTableName:e}:null!=e?e:{}))(e),l=t[ae];if(t.mode==ue){const{storeTableName:e=n}=t;return[1,l,[e],$(e)]}const{tables:{load:o={},save:r={}}={},values:i={}}=t,u=s(N(w(ye,i)),0,x(ye)),a=u[2],d=$(a);return[0,l,[fe(o,{[se]:null,[de]:B},se,(e=>j(d,e)&&e==a)),fe(r,{[ce]:null,[de]:B,deleteEmptyColumns:0,deleteEmptyTable:0},ce,((e,n)=>j(d,n)&&n==a)),u],d]})(t);return(d?oe:ie)(e,i?(e,n)=>he(void 0,null,(function*(){return i(e,n),yield l(e,n)})):l,(e=>[setInterval((()=>he(void 0,null,(function*(){try{const n=(yield l(Ee+pe))[0][pe],t=(yield l(Ee+me))[0][me];n==(null!=u?u:u=n)&&t==(null!=a?a:a=t)||(e(),u=n,a=t)}catch(e){}}))),1e3*c),o((n=>y.has(n)?e():0))]),(([e,n])=>{clearInterval(e),u=a=null,r(n)}),v,T(y))},Ae=(e,n,t,l)=>Te(e,t,((e,...t)=>{return l=[e,...t],o=function*(e,t=[]){return(yield n.execAsync([{sql:e,args:t}],!1))[0].rows},new Promise(((e,n)=>{var t=e=>{try{i(o.next(e))}catch(e){n(e)}},r=e=>{try{i(o.throw(e))}catch(e){n(e)}},i=n=>n.done?e(n.value):Promise.resolve(n.value).then(t,r);i((o=o.apply(void 0,l)).next())}));var l,o}),(e=>n.onDatabaseChange((({tableName:n})=>e(n)))),(e=>e.remove()),l);export{Ae as createExpoSqlitePersister};
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=e=>typeof e,n="tinybase",t=",",l=e(""),r=(e,n="")=>e.join(n),
|
|
1
|
+
const e=e=>typeof e,n="tinybase",t=",",l=e(""),o=(e,n)=>e.repeat(n),r=(e,n="")=>e.join(n),i=(e,n)=>e.map(n),u=e=>e.length,a=e=>0==u(e),d=(e,n)=>e.filter(n),c=(e,n,t)=>e.slice(n,t),s=(e,...n)=>e.push(...n),v=Promise,y=(e,n)=>e instanceof n,f=e=>null==e,p=(e,n,t)=>f(e)?null==t?void 0:t():n(e),h=n=>e(n)==l,E=e=>{return n=function*(){return v.all(e)},new Promise(((e,t)=>{var l=e=>{try{r(n.next(e))}catch(e){t(e)}},o=e=>{try{r(n.throw(e))}catch(e){t(e)}},r=n=>n.done?e(n.value):Promise.resolve(n.value).then(l,o);r((n=n.apply(void 0,null)).next())}));var n},m=(e,n)=>{var t;return null!=(t=null==e?void 0:e.has(n))&&t},b=e=>{var n;return[...null!=(n=null==e?void 0:e.values())?n:[]]},O=(e,n)=>null==e?void 0:e.delete(n),P=Object,T=P.keys,w=P.freeze,A=(e=[])=>P.fromEntries(e),L=(...e)=>P.assign({},...e),R=(e,n)=>i(P.entries(e),(([e,t])=>n(t,e))),S=e=>P.values(e),x=e=>u(T(e)),N=e=>(e=>y(e,P)&&e.constructor==P)(e)&&0==x(e),g=e=>new Map(e),C=e=>{var n;return[...null!=(n=null==e?void 0:e.keys())?n:[]]},I=(e,n)=>null==e?void 0:e.get(n),D=(e,n)=>{var t;return i([...null!=(t=null==e?void 0:e.entries())?t:[]],(([e,t])=>n(t,e)))},j=(e,n,t)=>f(t)?(O(e,n),e):null==e?void 0:e.set(n,t),_=(e,n,t,l=j)=>(R(n,((n,l)=>t(e,l,n))),((e,n)=>{((e,n)=>{null==e||e.forEach(n)})(e,((e,t)=>n(t)))})(e,(t=>((e,n)=>!f(((e,n)=>p(e,(e=>e[n])))(e,n)))(n,t)?0:l(e,t))),e),M=e=>new Set(Array.isArray(e)||f(e)?e:[e]),F=(e,n)=>null==e?void 0:e.add(n),$="_",k="_id",B=e=>`"${e.replace(/"/g,'""')}"`;var H=Object.defineProperty,W=Object.getOwnPropertySymbols,q=Object.prototype.hasOwnProperty,J=Object.prototype.propertyIsEnumerable,U=(e,n,t)=>n in e?H(e,n,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[n]=t,V=(e,n)=>{for(var t in n||(n={}))q.call(n,t)&&U(e,t,n[t]);if(W)for(var t of W(n))J.call(n,t)&&U(e,t,n[t]);return e},Y=(e,n,t)=>new Promise(((l,o)=>{var r=e=>{try{u(t.next(e))}catch(e){o(e)}},i=e=>{try{u(t.throw(e))}catch(e){o(e)}},u=e=>e.done?l(e.value):Promise.resolve(e.value).then(r,i);u((t=t.apply(e,n)).next())}));const z="FROM pragma_table_",K="WHERE",G=(e,n)=>{const l=g();return[()=>Y(void 0,null,(function*(){return _(l,A(yield E(i(yield e("SELECT name "+z+"list WHERE schema='main'AND type='table'AND name IN("+X(n)+")",n),(n=>Y(void 0,[n],(function*({name:n}){return[n,A(i(yield e("SELECT name,type "+z+"info(?)",[n]),(({name:e,type:n})=>[e,n])))]})))))),((e,n,t)=>{return j(l,n,_((i=g,m(o=l,r=n)||j(o,r,i()),I(o,r)),t,((e,n,t)=>{t!=I(e,n)&&j(e,n,t)}),((e,n)=>j(e,n))));var o,r,i}),((e,n)=>j(l,n)))})),(n,t)=>Y(void 0,null,(function*(){return((e,n)=>!f(I(I(l,e),n)))(n,t)?A(d(i(yield e("SELECT*FROM"+B(n)),(e=>{return[e[t],(n=V({},e),l=t,delete n[l],n)];var n,l})),(([e,n])=>!f(e)&&!N(n)))):{}})),(n,o,u,c,v,y=!1)=>Y(void 0,null,(function*(){const p=M();R(null!=u?u:{},(e=>i(T(null!=e?e:{}),(e=>F(p,e)))));const h=b(p);if(!y&&v&&a(h)&&m(l,n))return yield e("DROP TABLE"+B(n)),void j(l,n);if(a(h)||m(l,n)){const t=I(l,n),r=M(C(t));yield E([...i(h,(l=>Y(void 0,null,(function*(){O(r,l)||(yield e(`ALTER TABLE${B(n)}ADD${B(l)}`),j(t,l,""))})))),...!y&&c?i(b(r),(l=>Y(void 0,null,(function*(){l!=o&&(yield e(`ALTER TABLE${B(n)}DROP${B(l)}`),j(t,l))})))):[]])}else yield e(`CREATE TABLE${B(n)}(${B(o)} PRIMARY KEY ON CONFLICT REPLACE${r(i(h,(e=>t+B(e))))});`),j(l,n,g([[o,""],...i(h,(e=>[e,""]))]));if(y)f(u)?yield e("DELETE FROM"+B(n)+"WHERE 1"):yield E(R(u,((t,l)=>Y(void 0,null,(function*(){f(t)?yield e("DELETE FROM"+B(n)+K+B(o)+"=?",[l]):a(h)||(yield Q(e,n,o,T(t),[l,...S(t)]))})))));else if(a(h))m(l,n)&&(yield e("DELETE FROM"+B(n)+"WHERE 1"));else{const t=d(C(I(l,n)),(e=>e!=o)),r=[],a=[];R(null!=u?u:{},((e,n)=>{s(r,n,...i(t,(n=>null==e?void 0:e[n]))),s(a,n)})),yield Q(e,n,o,t,r),yield e("DELETE FROM"+B(n)+K+B(o)+"NOT IN("+X(a)+")",a)}}))]},Q=(e,n,l,a,d)=>Y(void 0,null,(function*(){return yield e("INSERT INTO"+B(n)+"("+B(l)+r(i(a,(e=>t+B(e))))+")VALUES"+o(`,(?${o(",?",u(a))})`,u(d)/(u(a)+1)).substring(1)+"ON CONFLICT("+B(l)+")DO UPDATE SET"+r(i(a,(e=>B(e)+"=excluded."+B(e))),t),d)})),X=e=>r(i(e,(()=>"?")),t),Z=JSON.parse;var ee=(e,n,t)=>new Promise(((l,o)=>{var r=e=>{try{u(t.next(e))}catch(e){o(e)}},i=e=>{try{u(t.throw(e))}catch(e){o(e)}},u=e=>e.done?l(e.value):Promise.resolve(e.value).then(r,i);u((t=t.apply(e,n)).next())}));const ne=(e,n,t,l,o)=>{let r,i,u,a=0,d=0,c=0;const v=[],y=e=>ee(void 0,null,(function*(){return 2!=a&&(a=1,yield h.schedule((()=>ee(void 0,null,(function*(){yield e(),a=0}))))),h})),h={load:(t,l)=>ee(void 0,null,(function*(){return yield y((()=>ee(void 0,null,(function*(){try{e.setContent(yield n())}catch(n){e.setContent([t,l])}}))))})),startAutoLoad:(...t)=>ee(void 0,[...t],(function*(t={},o={}){return h.stopAutoLoad(),yield h.load(t,o),c=1,u=l(((t,l)=>ee(void 0,null,(function*(){return yield y((()=>ee(void 0,null,(function*(){var o;if(l)e.setTransactionChanges(l());else try{e.setContent(null!=(o=null==t?void 0:t())?o:yield n())}catch(e){}}))))})))),h})),stopAutoLoad:()=>(c&&(o(u),u=void 0,c=0),h),save:n=>ee(void 0,null,(function*(){return 1!=a&&(a=2,yield h.schedule((()=>ee(void 0,null,(function*(){try{yield t(e.getContent,n)}catch(e){}a=0}))))),h})),startAutoSave:()=>ee(void 0,null,(function*(){return yield h.stopAutoSave().save(),r=e.addDidFinishTransactionListener(((e,n)=>{const[t,l]=n();N(t)&&N(l)||h.save((()=>[t,l]))})),h})),stopAutoSave:()=>(p(r,e.delListener),h),schedule:(...e)=>ee(void 0,null,(function*(){return s(v,...e),yield ee(void 0,null,(function*(){if(!d){for(d=1;!f((e=v,i=e.shift()));)try{yield i()}catch(e){}d=0}var e})),h})),getStore:()=>e,destroy:()=>h.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return w(h)};var te=(e,n,t)=>new Promise(((l,o)=>{var r=e=>{try{u(t.next(e))}catch(e){o(e)}},i=e=>{try{u(t.throw(e))}catch(e){o(e)}},u=e=>e.done?l(e.value):Promise.resolve(e.value).then(r,i);u((t=t.apply(e,n)).next())}));const le="store",oe=(e,n,t,l,[o],r)=>{const[i,u,a]=G(n,r),d=ne(e,(()=>te(void 0,null,(function*(){var e;return yield i(),Z(null==(e=(yield u(o,k))[$])?void 0:e[le])}))),(e=>te(void 0,null,(function*(){return d.schedule(i,(()=>te(void 0,null,(function*(){var n;yield a(o,k,{[$]:{[le]:(n=e(),JSON.stringify(n,((e,n)=>y(n,Map)?P.fromEntries([...n]):n)))}},!0,!0)}))))}))),t,l);return d};var re=(e,n,t)=>new Promise(((l,o)=>{var r=e=>{try{u(t.next(e))}catch(e){o(e)}},i=e=>{try{u(t.throw(e))}catch(e){o(e)}},u=e=>e.done?l(e.value):Promise.resolve(e.value).then(r,i);u((t=t.apply(e,n)).next())}));const ie=(e,n,t,l,[o,r,[i,u,a]],c)=>{const[s,v,y]=G(n,c),p=(e,n)=>re(void 0,null,(function*(){return yield E(D(r,((t,l)=>re(void 0,[t,l],(function*([t,l,o,r],i){const u=e[i];n&&void 0===u||(yield y(t,l,u,o,r,n))})))))})),h=(e,n)=>re(void 0,null,(function*(){return u?yield y(a,k,{[$]:e},!0,!0,n):null}));return ne(e,(()=>re(void 0,null,(function*(){yield s();const e=yield re(void 0,null,(function*(){return A(d(yield E(D(o,((e,n)=>re(void 0,[e,n],(function*([e,n],t){return[e,yield v(t,n)]}))))),(e=>!N(e[1]))))})),n=yield re(void 0,null,(function*(){return i?(yield v(a,k))[$]:{}}));return N(e)&&f(n)?void 0:[e,n]}))),((e,n)=>re(void 0,null,(function*(){if(yield s(),f(n)){const[n,t]=e();yield p(n),yield h(t)}else{const[e,t]=n();yield p(e,!0),yield h(t,!0)}}))),t,l)},ue="json",ae="autoLoadIntervalSeconds",de="rowIdColumnName",ce="tableId",se="tableName",ve={mode:ue,[ae]:1},ye={load:0,save:0,[se]:n+"_values"},fe=(e,n,t,l)=>{const o=g();return R(e,((e,r)=>{const i=c(S(L(n,h(e)?{[t]:e}:e)),0,x(n));f(i[0])||l(r,i[0])||j(o,r,i)})),o};var pe=(e,n,t)=>new Promise(((l,o)=>{var r=e=>{try{u(t.next(e))}catch(e){o(e)}},i=e=>{try{u(t.throw(e))}catch(e){o(e)}},u=e=>e.done?l(e.value):Promise.resolve(e.value).then(r,i);u((t=t.apply(e,n)).next())}));const he="pragma ",Ee="data_version",me="schema_version",be=(e,t,l,o,r,i)=>{let u,a;const[d,s,v,y]=(e=>{const t=(e=>L(ve,h(e)?{storeTableName:e}:null!=e?e:{}))(e),l=t[ae];if(t.mode==ue){const{storeTableName:e=n}=t;return[1,l,[e],M(e)]}const{tables:{load:o={},save:r={}}={},values:i={}}=t,u=c(S(L(ye,i)),0,x(ye)),a=u[2],d=M(a);return[0,l,[fe(o,{[ce]:null,[de]:k},ce,(e=>F(d,e)&&e==a)),fe(r,{[se]:null,[de]:k,deleteEmptyColumns:0,deleteEmptyTable:0},se,((e,n)=>F(d,n)&&n==a)),u],d]})(t);return(d?oe:ie)(e,i?(e,n)=>pe(void 0,null,(function*(){return i(e,n),yield l(e,n)})):l,(e=>[setInterval((()=>pe(void 0,null,(function*(){try{const n=(yield l(he+Ee))[0][Ee],t=(yield l(he+me))[0][me];n==(null!=u?u:u=n)&&t==(null!=a?a:a=t)||(e(),u=n,a=t)}catch(e){}}))),1e3*s),o((n=>y.has(n)?e():0))]),(([e,n])=>{clearInterval(e),u=a=null,r(n)}),v,b(y))};var Oe=Object.defineProperty,Pe=Object.getOwnPropertySymbols,Te=Object.prototype.hasOwnProperty,we=Object.prototype.propertyIsEnumerable,Ae=(e,n,t)=>n in e?Oe(e,n,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[n]=t;const Le=(e,n,t,l,o)=>be(e,l,((e,...n)=>{return l=[e,...n],o=function*(e,n=[]){return t.exec(e,{bind:n,rowMode:"object",returnValue:"resultRows"}).map((e=>((e,n)=>{for(var t in n||(n={}))Te.call(n,t)&&Ae(e,t,n[t]);if(Pe)for(var t of Pe(n))we.call(n,t)&&Ae(e,t,n[t]);return e})({},e)))},new Promise(((e,n)=>{var t=e=>{try{i(o.next(e))}catch(e){n(e)}},r=e=>{try{i(o.throw(e))}catch(e){n(e)}},i=n=>n.done?e(n.value):Promise.resolve(n.value).then(t,r);i((o=o.apply(void 0,l)).next())}));var l,o}),(e=>n.capi.sqlite3_update_hook(t,((n,t,l,o)=>e(o)),0)),(()=>n.capi.sqlite3_update_hook(t,(()=>0),0)),o);export{Le as createSqliteWasmPersister};
|
|
Binary file
|