tinybase 5.0.0-beta.2 → 5.0.0-beta.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/mergeable-store.cjs +1 -1
- package/lib/cjs/mergeable-store.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-automerge.cjs +1 -1
- package/lib/cjs/persisters/persister-automerge.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-browser.cjs +1 -1
- package/lib/cjs/persisters/persister-browser.cjs.gz +0 -0
- 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-electric-sql.cjs +1 -1
- package/lib/cjs/persisters/persister-electric-sql.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-expo-sqlite-next.cjs +1 -1
- package/lib/cjs/persisters/persister-expo-sqlite-next.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-expo-sqlite.cjs +1 -1
- package/lib/cjs/persisters/persister-expo-sqlite.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-file.cjs +1 -1
- package/lib/cjs/persisters/persister-file.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-indexed-db.cjs +1 -1
- package/lib/cjs/persisters/persister-indexed-db.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-partykit-client.cjs +1 -1
- package/lib/cjs/persisters/persister-partykit-client.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-partykit-server.cjs +1 -1
- package/lib/cjs/persisters/persister-partykit-server.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-remote.cjs +1 -1
- package/lib/cjs/persisters/persister-remote.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/persisters/persister-yjs.cjs +1 -1
- package/lib/cjs/persisters/persister-yjs.cjs.gz +0 -0
- package/lib/cjs/persisters.cjs +1 -1
- package/lib/cjs/persisters.cjs.gz +0 -0
- package/lib/cjs/store.cjs +1 -1
- package/lib/cjs/store.cjs.gz +0 -0
- package/lib/cjs/tinybase.cjs +1 -1
- package/lib/cjs/tinybase.cjs.gz +0 -0
- package/lib/cjs/tools.cjs +1 -1
- package/lib/cjs/tools.cjs.gz +0 -0
- package/lib/cjs/ui-react-dom-debug.cjs +1 -1
- package/lib/cjs/ui-react-dom-debug.cjs.gz +0 -0
- package/lib/cjs-es6/mergeable-store.cjs +1 -1
- package/lib/cjs-es6/mergeable-store.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-automerge.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-automerge.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-browser.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-browser.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-electric-sql.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-electric-sql.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-expo-sqlite-next.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-expo-sqlite-next.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-expo-sqlite.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-expo-sqlite.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-file.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-file.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-indexed-db.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-indexed-db.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-partykit-client.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-partykit-client.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-partykit-server.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-partykit-server.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-remote.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-remote.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/cjs-es6/persisters/persister-yjs.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-yjs.cjs.gz +0 -0
- package/lib/cjs-es6/persisters.cjs +1 -1
- package/lib/cjs-es6/persisters.cjs.gz +0 -0
- package/lib/cjs-es6/store.cjs +1 -1
- package/lib/cjs-es6/store.cjs.gz +0 -0
- package/lib/cjs-es6/tinybase.cjs +1 -1
- package/lib/cjs-es6/tinybase.cjs.gz +0 -0
- package/lib/cjs-es6/tools.cjs +1 -1
- package/lib/cjs-es6/tools.cjs.gz +0 -0
- package/lib/cjs-es6/ui-react-dom-debug.cjs +1 -1
- package/lib/cjs-es6/ui-react-dom-debug.cjs.gz +0 -0
- package/lib/debug/mergeable-store.js +158 -187
- package/lib/debug/persisters/persister-automerge.js +42 -43
- package/lib/debug/persisters/persister-browser.js +28 -18
- package/lib/debug/persisters/persister-cr-sqlite-wasm.js +77 -54
- package/lib/debug/persisters/persister-electric-sql.js +77 -54
- package/lib/debug/persisters/persister-expo-sqlite-next.js +77 -54
- package/lib/debug/persisters/persister-expo-sqlite.js +77 -54
- package/lib/debug/persisters/persister-file.js +27 -18
- package/lib/debug/persisters/persister-indexed-db.js +28 -20
- package/lib/debug/persisters/persister-partykit-client.js +26 -23
- package/lib/debug/persisters/persister-partykit-server.js +8 -18
- package/lib/debug/persisters/persister-remote.js +28 -18
- package/lib/debug/persisters/persister-sqlite-wasm.js +77 -54
- package/lib/debug/persisters/persister-sqlite3.js +77 -54
- package/lib/debug/persisters/persister-yjs.js +44 -42
- package/lib/debug/persisters.js +27 -18
- package/lib/debug/store.js +50 -68
- package/lib/debug/tinybase.js +180 -205
- package/lib/debug/tools.js +9 -11
- package/lib/debug/ui-react-dom.js +73 -86
- package/lib/es6/mergeable-store.js +1 -1
- package/lib/es6/mergeable-store.js.gz +0 -0
- package/lib/es6/persisters/persister-automerge.js +1 -1
- package/lib/es6/persisters/persister-automerge.js.gz +0 -0
- package/lib/es6/persisters/persister-browser.js +1 -1
- package/lib/es6/persisters/persister-browser.js.gz +0 -0
- 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-electric-sql.js +1 -1
- package/lib/es6/persisters/persister-electric-sql.js.gz +0 -0
- package/lib/es6/persisters/persister-expo-sqlite-next.js +1 -1
- package/lib/es6/persisters/persister-expo-sqlite-next.js.gz +0 -0
- package/lib/es6/persisters/persister-expo-sqlite.js +1 -1
- package/lib/es6/persisters/persister-expo-sqlite.js.gz +0 -0
- package/lib/es6/persisters/persister-file.js +1 -1
- package/lib/es6/persisters/persister-file.js.gz +0 -0
- package/lib/es6/persisters/persister-indexed-db.js +1 -1
- package/lib/es6/persisters/persister-indexed-db.js.gz +0 -0
- package/lib/es6/persisters/persister-partykit-client.js +1 -1
- package/lib/es6/persisters/persister-partykit-client.js.gz +0 -0
- package/lib/es6/persisters/persister-partykit-server.js +1 -1
- package/lib/es6/persisters/persister-partykit-server.js.gz +0 -0
- package/lib/es6/persisters/persister-remote.js +1 -1
- package/lib/es6/persisters/persister-remote.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/es6/persisters/persister-yjs.js +1 -1
- package/lib/es6/persisters/persister-yjs.js.gz +0 -0
- package/lib/es6/persisters.js +1 -1
- package/lib/es6/persisters.js.gz +0 -0
- package/lib/es6/store.js +1 -1
- package/lib/es6/store.js.gz +0 -0
- package/lib/es6/tinybase.js +1 -1
- package/lib/es6/tinybase.js.gz +0 -0
- package/lib/es6/tools.js +1 -1
- package/lib/es6/tools.js.gz +0 -0
- package/lib/es6/ui-react-dom-debug.js +1 -1
- package/lib/es6/ui-react-dom-debug.js.gz +0 -0
- package/lib/mergeable-store.js +1 -1
- package/lib/mergeable-store.js.gz +0 -0
- package/lib/persisters/persister-automerge.js +1 -1
- package/lib/persisters/persister-automerge.js.gz +0 -0
- package/lib/persisters/persister-browser.js +1 -1
- package/lib/persisters/persister-browser.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-electric-sql.js +1 -1
- package/lib/persisters/persister-electric-sql.js.gz +0 -0
- package/lib/persisters/persister-expo-sqlite-next.js +1 -1
- package/lib/persisters/persister-expo-sqlite-next.js.gz +0 -0
- package/lib/persisters/persister-expo-sqlite.js +1 -1
- package/lib/persisters/persister-expo-sqlite.js.gz +0 -0
- package/lib/persisters/persister-file.js +1 -1
- package/lib/persisters/persister-file.js.gz +0 -0
- package/lib/persisters/persister-indexed-db.js +1 -1
- package/lib/persisters/persister-indexed-db.js.gz +0 -0
- package/lib/persisters/persister-partykit-client.js +1 -1
- package/lib/persisters/persister-partykit-client.js.gz +0 -0
- package/lib/persisters/persister-partykit-server.js +1 -1
- package/lib/persisters/persister-partykit-server.js.gz +0 -0
- package/lib/persisters/persister-remote.js +1 -1
- package/lib/persisters/persister-remote.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/persisters/persister-yjs.js +1 -1
- package/lib/persisters/persister-yjs.js.gz +0 -0
- package/lib/persisters.js +1 -1
- package/lib/persisters.js.gz +0 -0
- package/lib/store.js +1 -1
- package/lib/store.js.gz +0 -0
- package/lib/tinybase.js +1 -1
- package/lib/tinybase.js.gz +0 -0
- package/lib/tools.js +1 -1
- package/lib/tools.js.gz +0 -0
- package/lib/types/mergeable-store.d.ts +37 -13
- package/lib/types/persisters/persister-partykit-server.d.ts +7 -8
- package/lib/types/persisters.d.ts +47 -27
- package/lib/types/store.d.ts +153 -111
- package/lib/types/tools.d.ts +2 -2
- package/lib/types/with-schemas/mergeable-store.d.ts +40 -13
- package/lib/types/with-schemas/persisters/persister-partykit-server.d.ts +10 -11
- package/lib/types/with-schemas/persisters.d.ts +78 -42
- package/lib/types/with-schemas/store.d.ts +165 -136
- package/lib/types/with-schemas/tools.d.ts +2 -2
- package/lib/umd/mergeable-store.js +1 -1
- package/lib/umd/mergeable-store.js.gz +0 -0
- package/lib/umd/persisters/persister-automerge.js +1 -1
- package/lib/umd/persisters/persister-automerge.js.gz +0 -0
- package/lib/umd/persisters/persister-browser.js +1 -1
- package/lib/umd/persisters/persister-browser.js.gz +0 -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-electric-sql.js +1 -1
- package/lib/umd/persisters/persister-electric-sql.js.gz +0 -0
- package/lib/umd/persisters/persister-expo-sqlite-next.js +1 -1
- package/lib/umd/persisters/persister-expo-sqlite-next.js.gz +0 -0
- package/lib/umd/persisters/persister-expo-sqlite.js +1 -1
- package/lib/umd/persisters/persister-expo-sqlite.js.gz +0 -0
- package/lib/umd/persisters/persister-file.js +1 -1
- package/lib/umd/persisters/persister-file.js.gz +0 -0
- package/lib/umd/persisters/persister-indexed-db.js +1 -1
- package/lib/umd/persisters/persister-indexed-db.js.gz +0 -0
- package/lib/umd/persisters/persister-partykit-client.js +1 -1
- package/lib/umd/persisters/persister-partykit-client.js.gz +0 -0
- package/lib/umd/persisters/persister-partykit-server.js +1 -1
- package/lib/umd/persisters/persister-partykit-server.js.gz +0 -0
- package/lib/umd/persisters/persister-remote.js +1 -1
- package/lib/umd/persisters/persister-remote.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/persisters/persister-yjs.js +1 -1
- package/lib/umd/persisters/persister-yjs.js.gz +0 -0
- package/lib/umd/persisters.js +1 -1
- package/lib/umd/persisters.js.gz +0 -0
- package/lib/umd/store.js +1 -1
- package/lib/umd/store.js.gz +0 -0
- package/lib/umd/tinybase.js +1 -1
- package/lib/umd/tinybase.js.gz +0 -0
- package/lib/umd/tools.js +1 -1
- package/lib/umd/tools.js.gz +0 -0
- package/lib/umd/ui-react-dom-debug.js +1 -1
- package/lib/umd/ui-react-dom-debug.js.gz +0 -0
- package/lib/umd-es6/mergeable-store.js +1 -1
- package/lib/umd-es6/mergeable-store.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-automerge.js +1 -1
- package/lib/umd-es6/persisters/persister-automerge.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-browser.js +1 -1
- package/lib/umd-es6/persisters/persister-browser.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-electric-sql.js +1 -1
- package/lib/umd-es6/persisters/persister-electric-sql.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-expo-sqlite-next.js +1 -1
- package/lib/umd-es6/persisters/persister-expo-sqlite-next.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-expo-sqlite.js +1 -1
- package/lib/umd-es6/persisters/persister-expo-sqlite.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-file.js +1 -1
- package/lib/umd-es6/persisters/persister-file.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-indexed-db.js +1 -1
- package/lib/umd-es6/persisters/persister-indexed-db.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-partykit-client.js +1 -1
- package/lib/umd-es6/persisters/persister-partykit-client.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-partykit-server.js +1 -1
- package/lib/umd-es6/persisters/persister-partykit-server.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-remote.js +1 -1
- package/lib/umd-es6/persisters/persister-remote.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/lib/umd-es6/persisters/persister-yjs.js +1 -1
- package/lib/umd-es6/persisters/persister-yjs.js.gz +0 -0
- package/lib/umd-es6/persisters.js +1 -1
- package/lib/umd-es6/persisters.js.gz +0 -0
- package/lib/umd-es6/store.js +1 -1
- package/lib/umd-es6/store.js.gz +0 -0
- package/lib/umd-es6/tinybase.js +1 -1
- package/lib/umd-es6/tinybase.js.gz +0 -0
- package/lib/umd-es6/tools.js +1 -1
- package/lib/umd-es6/tools.js.gz +0 -0
- package/lib/umd-es6/ui-react-dom-debug.js +1 -1
- package/lib/umd-es6/ui-react-dom-debug.js.gz +0 -0
- package/package.json +26 -22
- package/readme.md +2 -2
|
@@ -56,8 +56,7 @@ const isObject = (obj) =>
|
|
|
56
56
|
);
|
|
57
57
|
const objNew = (entries = []) => object.fromEntries(entries);
|
|
58
58
|
const objMerge = (...objs) => object.assign({}, ...objs);
|
|
59
|
-
const
|
|
60
|
-
const objHas = (obj, id) => !isUndefined(objGet(obj, id));
|
|
59
|
+
const objHas = (obj, id) => id in obj;
|
|
61
60
|
const objDel = (obj, id) => {
|
|
62
61
|
delete obj[id];
|
|
63
62
|
return obj;
|
|
@@ -100,7 +99,12 @@ const setAdd = (set, value) => set?.add(value);
|
|
|
100
99
|
const SELECT_STAR_FROM = SELECT + '*FROM';
|
|
101
100
|
const FROM_PRAGMA_TABLE = 'FROM pragma_table_';
|
|
102
101
|
const WHERE = 'WHERE';
|
|
103
|
-
const getCommandFunctions = (
|
|
102
|
+
const getCommandFunctions = (
|
|
103
|
+
cmd,
|
|
104
|
+
managedTableNames,
|
|
105
|
+
onIgnoredError,
|
|
106
|
+
useOnConflict,
|
|
107
|
+
) => {
|
|
104
108
|
const schemaMap = mapNew();
|
|
105
109
|
const canSelect = (tableName, rowIdColumnName) =>
|
|
106
110
|
!isUndefined(mapGet(mapGet(schemaMap, tableName), rowIdColumnName));
|
|
@@ -113,7 +117,7 @@ const getCommandFunctions = (cmd, managedTableNames, onIgnoredError) => {
|
|
|
113
117
|
await cmd(
|
|
114
118
|
'SELECT name ' +
|
|
115
119
|
FROM_PRAGMA_TABLE +
|
|
116
|
-
`list WHERE schema='main'AND
|
|
120
|
+
`list WHERE schema='main'AND(type='table'OR type='view')AND name IN(` +
|
|
117
121
|
getPlaceholders(managedTableNames) +
|
|
118
122
|
`)ORDER BY name`,
|
|
119
123
|
managedTableNames,
|
|
@@ -168,16 +172,18 @@ const getCommandFunctions = (cmd, managedTableNames, onIgnoredError) => {
|
|
|
168
172
|
const saveTable = async (
|
|
169
173
|
tableName,
|
|
170
174
|
rowIdColumnName,
|
|
171
|
-
|
|
175
|
+
content,
|
|
172
176
|
deleteEmptyColumns,
|
|
173
177
|
deleteEmptyTable,
|
|
174
178
|
partial = false,
|
|
175
179
|
) => {
|
|
176
|
-
const
|
|
177
|
-
objToArray(
|
|
178
|
-
arrayMap(objIds(
|
|
180
|
+
const tableCellOrValueIds = setNew();
|
|
181
|
+
objToArray(content ?? {}, (contentRow) =>
|
|
182
|
+
arrayMap(objIds(contentRow ?? {}), (cellOrValueId) =>
|
|
183
|
+
setAdd(tableCellOrValueIds, cellOrValueId),
|
|
184
|
+
),
|
|
179
185
|
);
|
|
180
|
-
const tableColumnNames = collValues(
|
|
186
|
+
const tableColumnNames = collValues(tableCellOrValueIds);
|
|
181
187
|
if (
|
|
182
188
|
!partial &&
|
|
183
189
|
deleteEmptyTable &&
|
|
@@ -235,11 +241,11 @@ const getCommandFunctions = (cmd, managedTableNames, onIgnoredError) => {
|
|
|
235
241
|
]);
|
|
236
242
|
}
|
|
237
243
|
if (partial) {
|
|
238
|
-
if (isUndefined(
|
|
244
|
+
if (isUndefined(content)) {
|
|
239
245
|
await cmd('DELETE FROM' + escapeId(tableName) + 'WHERE 1');
|
|
240
246
|
} else {
|
|
241
247
|
await promiseAll(
|
|
242
|
-
objToArray(
|
|
248
|
+
objToArray(content, async (row, rowId) => {
|
|
243
249
|
if (isUndefined(row)) {
|
|
244
250
|
await cmd(
|
|
245
251
|
'DELETE FROM' +
|
|
@@ -250,10 +256,14 @@ const getCommandFunctions = (cmd, managedTableNames, onIgnoredError) => {
|
|
|
250
256
|
[rowId],
|
|
251
257
|
);
|
|
252
258
|
} else if (!arrayIsEmpty(tableColumnNames)) {
|
|
253
|
-
await upsert(
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
259
|
+
await upsert(
|
|
260
|
+
cmd,
|
|
261
|
+
tableName,
|
|
262
|
+
rowIdColumnName,
|
|
263
|
+
objIds(row),
|
|
264
|
+
[rowId, ...objValues(row)],
|
|
265
|
+
useOnConflict,
|
|
266
|
+
);
|
|
257
267
|
}
|
|
258
268
|
}),
|
|
259
269
|
);
|
|
@@ -266,7 +276,7 @@ const getCommandFunctions = (cmd, managedTableNames, onIgnoredError) => {
|
|
|
266
276
|
);
|
|
267
277
|
const args = [];
|
|
268
278
|
const deleteRowIds = [];
|
|
269
|
-
objToArray(
|
|
279
|
+
objToArray(content ?? {}, (row, rowId) => {
|
|
270
280
|
arrayPush(
|
|
271
281
|
args,
|
|
272
282
|
rowId,
|
|
@@ -315,9 +325,12 @@ const upsert = async (
|
|
|
315
325
|
rowIdColumnName,
|
|
316
326
|
changingColumnNames,
|
|
317
327
|
args,
|
|
328
|
+
useOnConflict = true,
|
|
318
329
|
) =>
|
|
319
330
|
await cmd(
|
|
320
|
-
'INSERT
|
|
331
|
+
'INSERT ' +
|
|
332
|
+
(useOnConflict ? EMPTY_STRING : 'OR REPLACE ') +
|
|
333
|
+
'INTO' +
|
|
321
334
|
escapeId(tableName) +
|
|
322
335
|
'(' +
|
|
323
336
|
escapeId(rowIdColumnName) +
|
|
@@ -335,18 +348,20 @@ const upsert = async (
|
|
|
335
348
|
),
|
|
336
349
|
1,
|
|
337
350
|
) +
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
351
|
+
(useOnConflict
|
|
352
|
+
? 'ON CONFLICT(' +
|
|
353
|
+
escapeId(rowIdColumnName) +
|
|
354
|
+
')DO UPDATE SET' +
|
|
355
|
+
arrayJoin(
|
|
356
|
+
arrayMap(
|
|
357
|
+
changingColumnNames,
|
|
358
|
+
(columnName) =>
|
|
359
|
+
escapeId(columnName) + '=excluded.' + escapeId(columnName),
|
|
360
|
+
),
|
|
361
|
+
COMMA,
|
|
362
|
+
)
|
|
363
|
+
: EMPTY_STRING),
|
|
364
|
+
arrayMap(args, (arg) => arg ?? null),
|
|
350
365
|
);
|
|
351
366
|
const getPlaceholders = (array) =>
|
|
352
367
|
arrayJoin(
|
|
@@ -369,6 +384,7 @@ const createCustomPersister = (
|
|
|
369
384
|
addPersisterListener,
|
|
370
385
|
delPersisterListener,
|
|
371
386
|
onIgnoredError,
|
|
387
|
+
supportsMergeableStore,
|
|
372
388
|
[getThing, thing] = [],
|
|
373
389
|
scheduleId = [],
|
|
374
390
|
) => {
|
|
@@ -381,6 +397,10 @@ const createCustomPersister = (
|
|
|
381
397
|
let listeningHandle;
|
|
382
398
|
mapEnsure(scheduleRunning, scheduleId, () => 0);
|
|
383
399
|
mapEnsure(scheduleActions, scheduleId, () => []);
|
|
400
|
+
const getContent =
|
|
401
|
+
(supportsMergeableStore ? store.getMergeableContent : null) ??
|
|
402
|
+
store.getContent;
|
|
403
|
+
const getChanges = store.getTransactionChanges;
|
|
384
404
|
const run = async () => {
|
|
385
405
|
/* istanbul ignore else */
|
|
386
406
|
if (!mapGet(scheduleRunning, scheduleId)) {
|
|
@@ -416,7 +436,10 @@ const createCustomPersister = (
|
|
|
416
436
|
load: async (initialTables, initialValues) =>
|
|
417
437
|
await loadLock(async () => {
|
|
418
438
|
try {
|
|
419
|
-
|
|
439
|
+
const content = await getPersisted();
|
|
440
|
+
(supportsMergeableStore && isString(content[0])
|
|
441
|
+
? store.applyMergeableChanges
|
|
442
|
+
: store.setContent)(content);
|
|
420
443
|
} catch {
|
|
421
444
|
store.setContent([initialTables, initialValues]);
|
|
422
445
|
}
|
|
@@ -426,16 +449,14 @@ const createCustomPersister = (
|
|
|
426
449
|
await persister.load(initialTables, initialValues);
|
|
427
450
|
listening = 1;
|
|
428
451
|
listeningHandle = addPersisterListener(
|
|
429
|
-
async (
|
|
430
|
-
if (
|
|
431
|
-
const
|
|
432
|
-
await loadLock(async () =>
|
|
433
|
-
store.setTransactionChanges(transactionChanges),
|
|
434
|
-
);
|
|
452
|
+
async (getContent2, getChanges2) => {
|
|
453
|
+
if (getChanges2) {
|
|
454
|
+
const changes = getChanges2();
|
|
455
|
+
await loadLock(async () => store.applyChanges(changes));
|
|
435
456
|
} else {
|
|
436
457
|
await loadLock(async () => {
|
|
437
458
|
try {
|
|
438
|
-
store.setContent(
|
|
459
|
+
store.setContent(getContent2?.() ?? (await getPersisted()));
|
|
439
460
|
} catch (error) {
|
|
440
461
|
onIgnoredError?.(error);
|
|
441
462
|
}
|
|
@@ -453,7 +474,7 @@ const createCustomPersister = (
|
|
|
453
474
|
}
|
|
454
475
|
return persister;
|
|
455
476
|
},
|
|
456
|
-
save: async (
|
|
477
|
+
save: async (getChanges2) => {
|
|
457
478
|
/* istanbul ignore else */
|
|
458
479
|
if (loadSave != 1) {
|
|
459
480
|
loadSave = 2;
|
|
@@ -462,7 +483,7 @@ const createCustomPersister = (
|
|
|
462
483
|
}
|
|
463
484
|
await persister.schedule(async () => {
|
|
464
485
|
try {
|
|
465
|
-
await setPersisted(
|
|
486
|
+
await setPersisted(getContent, getChanges2);
|
|
466
487
|
} catch (error) {
|
|
467
488
|
/* istanbul ignore next */
|
|
468
489
|
onIgnoredError?.(error);
|
|
@@ -474,14 +495,12 @@ const createCustomPersister = (
|
|
|
474
495
|
},
|
|
475
496
|
startAutoSave: async () => {
|
|
476
497
|
await persister.stopAutoSave().save();
|
|
477
|
-
listenerId = store.addDidFinishTransactionListener(
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
},
|
|
484
|
-
);
|
|
498
|
+
listenerId = store.addDidFinishTransactionListener(() => {
|
|
499
|
+
const [tableChanges, valueChanges] = getChanges();
|
|
500
|
+
if (!objIsEmpty(tableChanges) || !objIsEmpty(valueChanges)) {
|
|
501
|
+
persister.save(() => [tableChanges, valueChanges]);
|
|
502
|
+
}
|
|
503
|
+
});
|
|
485
504
|
return persister;
|
|
486
505
|
},
|
|
487
506
|
stopAutoSave: () => {
|
|
@@ -547,6 +566,7 @@ const createJsonSqlitePersister = (
|
|
|
547
566
|
addPersisterListener,
|
|
548
567
|
delPersisterListener,
|
|
549
568
|
onIgnoredError,
|
|
569
|
+
false,
|
|
550
570
|
[getThing, db],
|
|
551
571
|
db,
|
|
552
572
|
);
|
|
@@ -567,9 +587,10 @@ const createTabularSqlitePersister = (
|
|
|
567
587
|
managedTableNames,
|
|
568
588
|
db,
|
|
569
589
|
getThing,
|
|
590
|
+
useOnConflict,
|
|
570
591
|
) => {
|
|
571
592
|
const [refreshSchema, loadTable, saveTable, transaction] =
|
|
572
|
-
getCommandFunctions(cmd, managedTableNames, onIgnoredError);
|
|
593
|
+
getCommandFunctions(cmd, managedTableNames, onIgnoredError, useOnConflict);
|
|
573
594
|
const saveTables = async (tables, partial) =>
|
|
574
595
|
await promiseAll(
|
|
575
596
|
mapMap(
|
|
@@ -578,12 +599,11 @@ const createTabularSqlitePersister = (
|
|
|
578
599
|
[tableName, rowIdColumnName, deleteEmptyColumns, deleteEmptyTable],
|
|
579
600
|
tableId,
|
|
580
601
|
) => {
|
|
581
|
-
|
|
582
|
-
if (!partial || table !== void 0) {
|
|
602
|
+
if (!partial || objHas(tables, tableId)) {
|
|
583
603
|
await saveTable(
|
|
584
604
|
tableName,
|
|
585
605
|
rowIdColumnName,
|
|
586
|
-
|
|
606
|
+
tables[tableId],
|
|
587
607
|
deleteEmptyColumns,
|
|
588
608
|
deleteEmptyTable,
|
|
589
609
|
partial,
|
|
@@ -633,11 +653,11 @@ const createTabularSqlitePersister = (
|
|
|
633
653
|
? [tables, values]
|
|
634
654
|
: void 0;
|
|
635
655
|
});
|
|
636
|
-
const setPersisted = async (getContent,
|
|
656
|
+
const setPersisted = async (getContent, getChanges) =>
|
|
637
657
|
await transaction(async () => {
|
|
638
658
|
await refreshSchema();
|
|
639
|
-
if (!isUndefined(
|
|
640
|
-
const [tableChanges, valueChanges] =
|
|
659
|
+
if (!isUndefined(getChanges)) {
|
|
660
|
+
const [tableChanges, valueChanges] = getChanges();
|
|
641
661
|
await saveTables(tableChanges, true);
|
|
642
662
|
await saveValues(valueChanges, true);
|
|
643
663
|
} else {
|
|
@@ -653,6 +673,7 @@ const createTabularSqlitePersister = (
|
|
|
653
673
|
addPersisterListener,
|
|
654
674
|
delPersisterListener,
|
|
655
675
|
onIgnoredError,
|
|
676
|
+
false,
|
|
656
677
|
[getThing, db],
|
|
657
678
|
db,
|
|
658
679
|
);
|
|
@@ -765,6 +786,7 @@ const createSqlitePersister = (
|
|
|
765
786
|
onIgnoredError,
|
|
766
787
|
db,
|
|
767
788
|
getThing = 'getDb',
|
|
789
|
+
useOnConflict,
|
|
768
790
|
) => {
|
|
769
791
|
let dataVersion;
|
|
770
792
|
let schemaVersion;
|
|
@@ -827,6 +849,7 @@ const createSqlitePersister = (
|
|
|
827
849
|
collValues(managedTableNamesSet),
|
|
828
850
|
db,
|
|
829
851
|
getThing,
|
|
852
|
+
useOnConflict,
|
|
830
853
|
);
|
|
831
854
|
};
|
|
832
855
|
|
|
@@ -57,8 +57,7 @@ const isObject = (obj) =>
|
|
|
57
57
|
);
|
|
58
58
|
const objNew = (entries = []) => object.fromEntries(entries);
|
|
59
59
|
const objMerge = (...objs) => object.assign({}, ...objs);
|
|
60
|
-
const
|
|
61
|
-
const objHas = (obj, id) => !isUndefined(objGet(obj, id));
|
|
60
|
+
const objHas = (obj, id) => id in obj;
|
|
62
61
|
const objDel = (obj, id) => {
|
|
63
62
|
delete obj[id];
|
|
64
63
|
return obj;
|
|
@@ -101,7 +100,12 @@ const setAdd = (set, value) => set?.add(value);
|
|
|
101
100
|
const SELECT_STAR_FROM = SELECT + '*FROM';
|
|
102
101
|
const FROM_PRAGMA_TABLE = 'FROM pragma_table_';
|
|
103
102
|
const WHERE = 'WHERE';
|
|
104
|
-
const getCommandFunctions = (
|
|
103
|
+
const getCommandFunctions = (
|
|
104
|
+
cmd,
|
|
105
|
+
managedTableNames,
|
|
106
|
+
onIgnoredError,
|
|
107
|
+
useOnConflict,
|
|
108
|
+
) => {
|
|
105
109
|
const schemaMap = mapNew();
|
|
106
110
|
const canSelect = (tableName, rowIdColumnName) =>
|
|
107
111
|
!isUndefined(mapGet(mapGet(schemaMap, tableName), rowIdColumnName));
|
|
@@ -114,7 +118,7 @@ const getCommandFunctions = (cmd, managedTableNames, onIgnoredError) => {
|
|
|
114
118
|
await cmd(
|
|
115
119
|
'SELECT name ' +
|
|
116
120
|
FROM_PRAGMA_TABLE +
|
|
117
|
-
`list WHERE schema='main'AND
|
|
121
|
+
`list WHERE schema='main'AND(type='table'OR type='view')AND name IN(` +
|
|
118
122
|
getPlaceholders(managedTableNames) +
|
|
119
123
|
`)ORDER BY name`,
|
|
120
124
|
managedTableNames,
|
|
@@ -169,16 +173,18 @@ const getCommandFunctions = (cmd, managedTableNames, onIgnoredError) => {
|
|
|
169
173
|
const saveTable = async (
|
|
170
174
|
tableName,
|
|
171
175
|
rowIdColumnName,
|
|
172
|
-
|
|
176
|
+
content,
|
|
173
177
|
deleteEmptyColumns,
|
|
174
178
|
deleteEmptyTable,
|
|
175
179
|
partial = false,
|
|
176
180
|
) => {
|
|
177
|
-
const
|
|
178
|
-
objToArray(
|
|
179
|
-
arrayMap(objIds(
|
|
181
|
+
const tableCellOrValueIds = setNew();
|
|
182
|
+
objToArray(content ?? {}, (contentRow) =>
|
|
183
|
+
arrayMap(objIds(contentRow ?? {}), (cellOrValueId) =>
|
|
184
|
+
setAdd(tableCellOrValueIds, cellOrValueId),
|
|
185
|
+
),
|
|
180
186
|
);
|
|
181
|
-
const tableColumnNames = collValues(
|
|
187
|
+
const tableColumnNames = collValues(tableCellOrValueIds);
|
|
182
188
|
if (
|
|
183
189
|
!partial &&
|
|
184
190
|
deleteEmptyTable &&
|
|
@@ -236,11 +242,11 @@ const getCommandFunctions = (cmd, managedTableNames, onIgnoredError) => {
|
|
|
236
242
|
]);
|
|
237
243
|
}
|
|
238
244
|
if (partial) {
|
|
239
|
-
if (isUndefined(
|
|
245
|
+
if (isUndefined(content)) {
|
|
240
246
|
await cmd('DELETE FROM' + escapeId(tableName) + 'WHERE 1');
|
|
241
247
|
} else {
|
|
242
248
|
await promiseAll(
|
|
243
|
-
objToArray(
|
|
249
|
+
objToArray(content, async (row, rowId) => {
|
|
244
250
|
if (isUndefined(row)) {
|
|
245
251
|
await cmd(
|
|
246
252
|
'DELETE FROM' +
|
|
@@ -251,10 +257,14 @@ const getCommandFunctions = (cmd, managedTableNames, onIgnoredError) => {
|
|
|
251
257
|
[rowId],
|
|
252
258
|
);
|
|
253
259
|
} else if (!arrayIsEmpty(tableColumnNames)) {
|
|
254
|
-
await upsert(
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
260
|
+
await upsert(
|
|
261
|
+
cmd,
|
|
262
|
+
tableName,
|
|
263
|
+
rowIdColumnName,
|
|
264
|
+
objIds(row),
|
|
265
|
+
[rowId, ...objValues(row)],
|
|
266
|
+
useOnConflict,
|
|
267
|
+
);
|
|
258
268
|
}
|
|
259
269
|
}),
|
|
260
270
|
);
|
|
@@ -267,7 +277,7 @@ const getCommandFunctions = (cmd, managedTableNames, onIgnoredError) => {
|
|
|
267
277
|
);
|
|
268
278
|
const args = [];
|
|
269
279
|
const deleteRowIds = [];
|
|
270
|
-
objToArray(
|
|
280
|
+
objToArray(content ?? {}, (row, rowId) => {
|
|
271
281
|
arrayPush(
|
|
272
282
|
args,
|
|
273
283
|
rowId,
|
|
@@ -316,9 +326,12 @@ const upsert = async (
|
|
|
316
326
|
rowIdColumnName,
|
|
317
327
|
changingColumnNames,
|
|
318
328
|
args,
|
|
329
|
+
useOnConflict = true,
|
|
319
330
|
) =>
|
|
320
331
|
await cmd(
|
|
321
|
-
'INSERT
|
|
332
|
+
'INSERT ' +
|
|
333
|
+
(useOnConflict ? EMPTY_STRING : 'OR REPLACE ') +
|
|
334
|
+
'INTO' +
|
|
322
335
|
escapeId(tableName) +
|
|
323
336
|
'(' +
|
|
324
337
|
escapeId(rowIdColumnName) +
|
|
@@ -336,18 +349,20 @@ const upsert = async (
|
|
|
336
349
|
),
|
|
337
350
|
1,
|
|
338
351
|
) +
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
352
|
+
(useOnConflict
|
|
353
|
+
? 'ON CONFLICT(' +
|
|
354
|
+
escapeId(rowIdColumnName) +
|
|
355
|
+
')DO UPDATE SET' +
|
|
356
|
+
arrayJoin(
|
|
357
|
+
arrayMap(
|
|
358
|
+
changingColumnNames,
|
|
359
|
+
(columnName) =>
|
|
360
|
+
escapeId(columnName) + '=excluded.' + escapeId(columnName),
|
|
361
|
+
),
|
|
362
|
+
COMMA,
|
|
363
|
+
)
|
|
364
|
+
: EMPTY_STRING),
|
|
365
|
+
arrayMap(args, (arg) => arg ?? null),
|
|
351
366
|
);
|
|
352
367
|
const getPlaceholders = (array) =>
|
|
353
368
|
arrayJoin(
|
|
@@ -370,6 +385,7 @@ const createCustomPersister = (
|
|
|
370
385
|
addPersisterListener,
|
|
371
386
|
delPersisterListener,
|
|
372
387
|
onIgnoredError,
|
|
388
|
+
supportsMergeableStore,
|
|
373
389
|
[getThing, thing] = [],
|
|
374
390
|
scheduleId = [],
|
|
375
391
|
) => {
|
|
@@ -382,6 +398,10 @@ const createCustomPersister = (
|
|
|
382
398
|
let listeningHandle;
|
|
383
399
|
mapEnsure(scheduleRunning, scheduleId, () => 0);
|
|
384
400
|
mapEnsure(scheduleActions, scheduleId, () => []);
|
|
401
|
+
const getContent =
|
|
402
|
+
(supportsMergeableStore ? store.getMergeableContent : null) ??
|
|
403
|
+
store.getContent;
|
|
404
|
+
const getChanges = store.getTransactionChanges;
|
|
385
405
|
const run = async () => {
|
|
386
406
|
/* istanbul ignore else */
|
|
387
407
|
if (!mapGet(scheduleRunning, scheduleId)) {
|
|
@@ -417,7 +437,10 @@ const createCustomPersister = (
|
|
|
417
437
|
load: async (initialTables, initialValues) =>
|
|
418
438
|
await loadLock(async () => {
|
|
419
439
|
try {
|
|
420
|
-
|
|
440
|
+
const content = await getPersisted();
|
|
441
|
+
(supportsMergeableStore && isString(content[0])
|
|
442
|
+
? store.applyMergeableChanges
|
|
443
|
+
: store.setContent)(content);
|
|
421
444
|
} catch {
|
|
422
445
|
store.setContent([initialTables, initialValues]);
|
|
423
446
|
}
|
|
@@ -427,16 +450,14 @@ const createCustomPersister = (
|
|
|
427
450
|
await persister.load(initialTables, initialValues);
|
|
428
451
|
listening = 1;
|
|
429
452
|
listeningHandle = addPersisterListener(
|
|
430
|
-
async (
|
|
431
|
-
if (
|
|
432
|
-
const
|
|
433
|
-
await loadLock(async () =>
|
|
434
|
-
store.setTransactionChanges(transactionChanges),
|
|
435
|
-
);
|
|
453
|
+
async (getContent2, getChanges2) => {
|
|
454
|
+
if (getChanges2) {
|
|
455
|
+
const changes = getChanges2();
|
|
456
|
+
await loadLock(async () => store.applyChanges(changes));
|
|
436
457
|
} else {
|
|
437
458
|
await loadLock(async () => {
|
|
438
459
|
try {
|
|
439
|
-
store.setContent(
|
|
460
|
+
store.setContent(getContent2?.() ?? (await getPersisted()));
|
|
440
461
|
} catch (error) {
|
|
441
462
|
onIgnoredError?.(error);
|
|
442
463
|
}
|
|
@@ -454,7 +475,7 @@ const createCustomPersister = (
|
|
|
454
475
|
}
|
|
455
476
|
return persister;
|
|
456
477
|
},
|
|
457
|
-
save: async (
|
|
478
|
+
save: async (getChanges2) => {
|
|
458
479
|
/* istanbul ignore else */
|
|
459
480
|
if (loadSave != 1) {
|
|
460
481
|
loadSave = 2;
|
|
@@ -463,7 +484,7 @@ const createCustomPersister = (
|
|
|
463
484
|
}
|
|
464
485
|
await persister.schedule(async () => {
|
|
465
486
|
try {
|
|
466
|
-
await setPersisted(
|
|
487
|
+
await setPersisted(getContent, getChanges2);
|
|
467
488
|
} catch (error) {
|
|
468
489
|
/* istanbul ignore next */
|
|
469
490
|
onIgnoredError?.(error);
|
|
@@ -475,14 +496,12 @@ const createCustomPersister = (
|
|
|
475
496
|
},
|
|
476
497
|
startAutoSave: async () => {
|
|
477
498
|
await persister.stopAutoSave().save();
|
|
478
|
-
listenerId = store.addDidFinishTransactionListener(
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
},
|
|
485
|
-
);
|
|
499
|
+
listenerId = store.addDidFinishTransactionListener(() => {
|
|
500
|
+
const [tableChanges, valueChanges] = getChanges();
|
|
501
|
+
if (!objIsEmpty(tableChanges) || !objIsEmpty(valueChanges)) {
|
|
502
|
+
persister.save(() => [tableChanges, valueChanges]);
|
|
503
|
+
}
|
|
504
|
+
});
|
|
486
505
|
return persister;
|
|
487
506
|
},
|
|
488
507
|
stopAutoSave: () => {
|
|
@@ -548,6 +567,7 @@ const createJsonSqlitePersister = (
|
|
|
548
567
|
addPersisterListener,
|
|
549
568
|
delPersisterListener,
|
|
550
569
|
onIgnoredError,
|
|
570
|
+
false,
|
|
551
571
|
[getThing, db],
|
|
552
572
|
db,
|
|
553
573
|
);
|
|
@@ -568,9 +588,10 @@ const createTabularSqlitePersister = (
|
|
|
568
588
|
managedTableNames,
|
|
569
589
|
db,
|
|
570
590
|
getThing,
|
|
591
|
+
useOnConflict,
|
|
571
592
|
) => {
|
|
572
593
|
const [refreshSchema, loadTable, saveTable, transaction] =
|
|
573
|
-
getCommandFunctions(cmd, managedTableNames, onIgnoredError);
|
|
594
|
+
getCommandFunctions(cmd, managedTableNames, onIgnoredError, useOnConflict);
|
|
574
595
|
const saveTables = async (tables, partial) =>
|
|
575
596
|
await promiseAll(
|
|
576
597
|
mapMap(
|
|
@@ -579,12 +600,11 @@ const createTabularSqlitePersister = (
|
|
|
579
600
|
[tableName, rowIdColumnName, deleteEmptyColumns, deleteEmptyTable],
|
|
580
601
|
tableId,
|
|
581
602
|
) => {
|
|
582
|
-
|
|
583
|
-
if (!partial || table !== void 0) {
|
|
603
|
+
if (!partial || objHas(tables, tableId)) {
|
|
584
604
|
await saveTable(
|
|
585
605
|
tableName,
|
|
586
606
|
rowIdColumnName,
|
|
587
|
-
|
|
607
|
+
tables[tableId],
|
|
588
608
|
deleteEmptyColumns,
|
|
589
609
|
deleteEmptyTable,
|
|
590
610
|
partial,
|
|
@@ -634,11 +654,11 @@ const createTabularSqlitePersister = (
|
|
|
634
654
|
? [tables, values]
|
|
635
655
|
: void 0;
|
|
636
656
|
});
|
|
637
|
-
const setPersisted = async (getContent,
|
|
657
|
+
const setPersisted = async (getContent, getChanges) =>
|
|
638
658
|
await transaction(async () => {
|
|
639
659
|
await refreshSchema();
|
|
640
|
-
if (!isUndefined(
|
|
641
|
-
const [tableChanges, valueChanges] =
|
|
660
|
+
if (!isUndefined(getChanges)) {
|
|
661
|
+
const [tableChanges, valueChanges] = getChanges();
|
|
642
662
|
await saveTables(tableChanges, true);
|
|
643
663
|
await saveValues(valueChanges, true);
|
|
644
664
|
} else {
|
|
@@ -654,6 +674,7 @@ const createTabularSqlitePersister = (
|
|
|
654
674
|
addPersisterListener,
|
|
655
675
|
delPersisterListener,
|
|
656
676
|
onIgnoredError,
|
|
677
|
+
false,
|
|
657
678
|
[getThing, db],
|
|
658
679
|
db,
|
|
659
680
|
);
|
|
@@ -766,6 +787,7 @@ const createSqlitePersister = (
|
|
|
766
787
|
onIgnoredError,
|
|
767
788
|
db,
|
|
768
789
|
getThing = 'getDb',
|
|
790
|
+
useOnConflict,
|
|
769
791
|
) => {
|
|
770
792
|
let dataVersion;
|
|
771
793
|
let schemaVersion;
|
|
@@ -828,6 +850,7 @@ const createSqlitePersister = (
|
|
|
828
850
|
collValues(managedTableNamesSet),
|
|
829
851
|
db,
|
|
830
852
|
getThing,
|
|
853
|
+
useOnConflict,
|
|
831
854
|
);
|
|
832
855
|
};
|
|
833
856
|
|