tinybase 5.0.0-beta.3 → 5.0.0-beta.5
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/checkpoints.js +1 -1
- package/lib/checkpoints.js.gz +0 -0
- package/lib/cjs/checkpoints.cjs +1 -1
- package/lib/cjs/checkpoints.cjs.gz +0 -0
- package/lib/cjs/indexes.cjs +1 -1
- package/lib/cjs/indexes.cjs.gz +0 -0
- package/lib/cjs/mergeable-store.cjs +1 -1
- package/lib/cjs/mergeable-store.cjs.gz +0 -0
- package/lib/cjs/metrics.cjs +1 -1
- package/lib/cjs/metrics.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-libsql.cjs +1 -0
- package/lib/cjs/persisters/persister-libsql.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-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/queries.cjs +1 -1
- package/lib/cjs/queries.cjs.gz +0 -0
- package/lib/cjs/relationships.cjs +1 -1
- package/lib/cjs/relationships.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/checkpoints.cjs +1 -1
- package/lib/cjs-es6/checkpoints.cjs.gz +0 -0
- package/lib/cjs-es6/indexes.cjs +1 -1
- package/lib/cjs-es6/indexes.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/metrics.cjs +1 -1
- package/lib/cjs-es6/metrics.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-libsql.cjs +1 -0
- package/lib/cjs-es6/persisters/persister-libsql.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-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/queries.cjs +1 -1
- package/lib/cjs-es6/queries.cjs.gz +0 -0
- package/lib/cjs-es6/relationships.cjs +1 -1
- package/lib/cjs-es6/relationships.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/checkpoints.js +3 -1
- package/lib/debug/indexes.js +3 -1
- package/lib/debug/mergeable-store.js +247 -139
- package/lib/debug/metrics.js +3 -1
- package/lib/debug/persisters/persister-automerge.js +36 -12
- package/lib/debug/persisters/persister-browser.js +37 -13
- package/lib/debug/persisters/persister-cr-sqlite-wasm.js +36 -12
- package/lib/debug/persisters/persister-electric-sql.js +36 -12
- package/lib/debug/persisters/persister-expo-sqlite-next.js +36 -12
- package/lib/debug/persisters/persister-expo-sqlite.js +36 -12
- package/lib/debug/persisters/persister-file.js +37 -13
- package/lib/debug/persisters/persister-indexed-db.js +36 -12
- package/lib/debug/persisters/persister-libsql.js +898 -0
- package/lib/debug/persisters/persister-partykit-client.js +36 -12
- package/lib/debug/persisters/persister-remote.js +36 -12
- package/lib/debug/persisters/persister-sqlite-wasm.js +36 -12
- package/lib/debug/persisters/persister-sqlite3.js +36 -12
- package/lib/debug/persisters/persister-yjs.js +36 -12
- package/lib/debug/persisters.js +36 -12
- package/lib/debug/queries.js +7 -4
- package/lib/debug/relationships.js +3 -1
- package/lib/debug/store.js +21 -22
- package/lib/debug/tinybase.js +279 -150
- package/lib/debug/tools.js +7 -4
- package/lib/debug/ui-react-dom.js +55 -34
- package/lib/es6/checkpoints.js +1 -1
- package/lib/es6/checkpoints.js.gz +0 -0
- package/lib/es6/indexes.js +1 -1
- package/lib/es6/indexes.js.gz +0 -0
- package/lib/es6/mergeable-store.js +1 -1
- package/lib/es6/mergeable-store.js.gz +0 -0
- package/lib/es6/metrics.js +1 -1
- package/lib/es6/metrics.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-libsql.js +1 -0
- package/lib/es6/persisters/persister-libsql.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-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/queries.js +1 -1
- package/lib/es6/queries.js.gz +0 -0
- package/lib/es6/relationships.js +1 -1
- package/lib/es6/relationships.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/indexes.js +1 -1
- package/lib/indexes.js.gz +0 -0
- package/lib/mergeable-store.js +1 -1
- package/lib/mergeable-store.js.gz +0 -0
- package/lib/metrics.js +1 -1
- package/lib/metrics.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-libsql.js +1 -0
- package/lib/persisters/persister-libsql.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-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/queries.js +1 -1
- package/lib/queries.js.gz +0 -0
- package/lib/relationships.js +1 -1
- package/lib/relationships.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 +78 -11
- package/lib/types/persisters/persister-browser.d.ts +2 -2
- package/lib/types/persisters/persister-file.d.ts +1 -1
- package/lib/types/persisters/persister-libsql.d.ts +139 -0
- package/lib/types/persisters.d.ts +19 -7
- package/lib/types/with-schemas/mergeable-store.d.ts +314 -31
- package/lib/types/with-schemas/persisters/persister-browser.d.ts +2 -2
- package/lib/types/with-schemas/persisters/persister-file.d.ts +1 -1
- package/lib/types/with-schemas/persisters/persister-libsql.d.ts +152 -0
- package/lib/types/with-schemas/persisters.d.ts +14 -6
- package/lib/types/with-schemas/store.d.ts +37 -87
- package/lib/umd/checkpoints.js +1 -1
- package/lib/umd/checkpoints.js.gz +0 -0
- package/lib/umd/indexes.js +1 -1
- package/lib/umd/indexes.js.gz +0 -0
- package/lib/umd/mergeable-store.js +1 -1
- package/lib/umd/mergeable-store.js.gz +0 -0
- package/lib/umd/metrics.js +1 -1
- package/lib/umd/metrics.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-libsql.js +1 -0
- package/lib/umd/persisters/persister-libsql.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-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/queries.js +1 -1
- package/lib/umd/queries.js.gz +0 -0
- package/lib/umd/relationships.js +1 -1
- package/lib/umd/relationships.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/checkpoints.js +1 -1
- package/lib/umd-es6/checkpoints.js.gz +0 -0
- package/lib/umd-es6/indexes.js +1 -1
- package/lib/umd-es6/indexes.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/metrics.js +1 -1
- package/lib/umd-es6/metrics.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-libsql.js +1 -0
- package/lib/umd-es6/persisters/persister-libsql.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-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/queries.js +1 -1
- package/lib/umd-es6/queries.js.gz +0 -0
- package/lib/umd-es6/relationships.js +1 -1
- package/lib/umd-es6/relationships.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 +35 -30
- package/readme.md +2 -2
|
@@ -59,15 +59,34 @@ const mapNew = (entries) => new Map(entries);
|
|
|
59
59
|
const mapGet = (map, key) => map?.get(key);
|
|
60
60
|
const mapSet = (map, key, value) =>
|
|
61
61
|
isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
|
|
62
|
-
const mapEnsure = (map, key, getDefaultValue) => {
|
|
62
|
+
const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
|
|
63
63
|
if (!collHas(map, key)) {
|
|
64
64
|
mapSet(map, key, getDefaultValue());
|
|
65
|
+
} else {
|
|
66
|
+
hadExistingValue?.(mapGet(map, key));
|
|
65
67
|
}
|
|
66
68
|
return mapGet(map, key);
|
|
67
69
|
};
|
|
68
70
|
|
|
69
71
|
const scheduleRunning = mapNew();
|
|
70
72
|
const scheduleActions = mapNew();
|
|
73
|
+
const isMergeable = (contentOrChanges) => isString(contentOrChanges?.[0]);
|
|
74
|
+
const getStoreFunctions = (supportsMergeableStore, store) =>
|
|
75
|
+
!supportsMergeableStore || isUndefined(store.getMergeableContent)
|
|
76
|
+
? [
|
|
77
|
+
0,
|
|
78
|
+
store.getContent,
|
|
79
|
+
store.getTransactionChanges,
|
|
80
|
+
([changedTables, changedValues]) =>
|
|
81
|
+
!objIsEmpty(changedTables) || !objIsEmpty(changedValues),
|
|
82
|
+
]
|
|
83
|
+
: [
|
|
84
|
+
1,
|
|
85
|
+
store.getMergeableContent,
|
|
86
|
+
store.getTransactionMergeableChanges,
|
|
87
|
+
([, [[, changedTables], [, changedValues]]]) =>
|
|
88
|
+
!objIsEmpty(changedTables) || !objIsEmpty(changedValues),
|
|
89
|
+
];
|
|
71
90
|
const createCustomPersister = (
|
|
72
91
|
store,
|
|
73
92
|
getPersisted,
|
|
@@ -88,10 +107,8 @@ const createCustomPersister = (
|
|
|
88
107
|
let listeningHandle;
|
|
89
108
|
mapEnsure(scheduleRunning, scheduleId, () => 0);
|
|
90
109
|
mapEnsure(scheduleActions, scheduleId, () => []);
|
|
91
|
-
const getContent =
|
|
92
|
-
(supportsMergeableStore
|
|
93
|
-
store.getContent;
|
|
94
|
-
const getChanges = store.getTransactionChanges;
|
|
110
|
+
const [isMergeableStore, getContent, getChanges, hasChanges] =
|
|
111
|
+
getStoreFunctions(supportsMergeableStore, store);
|
|
95
112
|
const run = async () => {
|
|
96
113
|
/* istanbul ignore else */
|
|
97
114
|
if (!mapGet(scheduleRunning, scheduleId)) {
|
|
@@ -128,8 +145,8 @@ const createCustomPersister = (
|
|
|
128
145
|
await loadLock(async () => {
|
|
129
146
|
try {
|
|
130
147
|
const content = await getPersisted();
|
|
131
|
-
(
|
|
132
|
-
? store.
|
|
148
|
+
(isMergeableStore && isMergeable(content)
|
|
149
|
+
? store.setMergeableContent
|
|
133
150
|
: store.setContent)(content);
|
|
134
151
|
} catch {
|
|
135
152
|
store.setContent([initialTables, initialValues]);
|
|
@@ -143,11 +160,18 @@ const createCustomPersister = (
|
|
|
143
160
|
async (getContent2, getChanges2) => {
|
|
144
161
|
if (getChanges2) {
|
|
145
162
|
const changes = getChanges2();
|
|
146
|
-
await loadLock(async () =>
|
|
163
|
+
await loadLock(async () =>
|
|
164
|
+
(isMergeableStore && isMergeable(changes)
|
|
165
|
+
? store.applyMergeableChanges
|
|
166
|
+
: store.applyChanges)(changes),
|
|
167
|
+
);
|
|
147
168
|
} else {
|
|
148
169
|
await loadLock(async () => {
|
|
149
170
|
try {
|
|
150
|
-
|
|
171
|
+
const content = getContent2?.() ?? (await getPersisted());
|
|
172
|
+
(isMergeableStore && isMergeable(content)
|
|
173
|
+
? store.setMergeableContent
|
|
174
|
+
: store.setContent)(content);
|
|
151
175
|
} catch (error) {
|
|
152
176
|
onIgnoredError?.(error);
|
|
153
177
|
}
|
|
@@ -187,9 +211,9 @@ const createCustomPersister = (
|
|
|
187
211
|
startAutoSave: async () => {
|
|
188
212
|
await persister.stopAutoSave().save();
|
|
189
213
|
listenerId = store.addDidFinishTransactionListener(() => {
|
|
190
|
-
const
|
|
191
|
-
if (
|
|
192
|
-
persister.save(() =>
|
|
214
|
+
const changes = getChanges();
|
|
215
|
+
if (hasChanges(changes)) {
|
|
216
|
+
persister.save(() => changes);
|
|
193
217
|
}
|
|
194
218
|
});
|
|
195
219
|
return persister;
|
|
@@ -47,15 +47,34 @@ const mapNew = (entries) => new Map(entries);
|
|
|
47
47
|
const mapGet = (map, key) => map?.get(key);
|
|
48
48
|
const mapSet = (map, key, value) =>
|
|
49
49
|
isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
|
|
50
|
-
const mapEnsure = (map, key, getDefaultValue) => {
|
|
50
|
+
const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
|
|
51
51
|
if (!collHas(map, key)) {
|
|
52
52
|
mapSet(map, key, getDefaultValue());
|
|
53
|
+
} else {
|
|
54
|
+
hadExistingValue?.(mapGet(map, key));
|
|
53
55
|
}
|
|
54
56
|
return mapGet(map, key);
|
|
55
57
|
};
|
|
56
58
|
|
|
57
59
|
const scheduleRunning = mapNew();
|
|
58
60
|
const scheduleActions = mapNew();
|
|
61
|
+
const isMergeable = (contentOrChanges) => isString(contentOrChanges?.[0]);
|
|
62
|
+
const getStoreFunctions = (supportsMergeableStore, store) =>
|
|
63
|
+
!supportsMergeableStore || isUndefined(store.getMergeableContent)
|
|
64
|
+
? [
|
|
65
|
+
0,
|
|
66
|
+
store.getContent,
|
|
67
|
+
store.getTransactionChanges,
|
|
68
|
+
([changedTables, changedValues]) =>
|
|
69
|
+
!objIsEmpty(changedTables) || !objIsEmpty(changedValues),
|
|
70
|
+
]
|
|
71
|
+
: [
|
|
72
|
+
1,
|
|
73
|
+
store.getMergeableContent,
|
|
74
|
+
store.getTransactionMergeableChanges,
|
|
75
|
+
([, [[, changedTables], [, changedValues]]]) =>
|
|
76
|
+
!objIsEmpty(changedTables) || !objIsEmpty(changedValues),
|
|
77
|
+
];
|
|
59
78
|
const createCustomPersister = (
|
|
60
79
|
store,
|
|
61
80
|
getPersisted,
|
|
@@ -76,10 +95,8 @@ const createCustomPersister = (
|
|
|
76
95
|
let listeningHandle;
|
|
77
96
|
mapEnsure(scheduleRunning, scheduleId, () => 0);
|
|
78
97
|
mapEnsure(scheduleActions, scheduleId, () => []);
|
|
79
|
-
const getContent =
|
|
80
|
-
(supportsMergeableStore
|
|
81
|
-
store.getContent;
|
|
82
|
-
const getChanges = store.getTransactionChanges;
|
|
98
|
+
const [isMergeableStore, getContent, getChanges, hasChanges] =
|
|
99
|
+
getStoreFunctions(supportsMergeableStore, store);
|
|
83
100
|
const run = async () => {
|
|
84
101
|
/* istanbul ignore else */
|
|
85
102
|
if (!mapGet(scheduleRunning, scheduleId)) {
|
|
@@ -116,8 +133,8 @@ const createCustomPersister = (
|
|
|
116
133
|
await loadLock(async () => {
|
|
117
134
|
try {
|
|
118
135
|
const content = await getPersisted();
|
|
119
|
-
(
|
|
120
|
-
? store.
|
|
136
|
+
(isMergeableStore && isMergeable(content)
|
|
137
|
+
? store.setMergeableContent
|
|
121
138
|
: store.setContent)(content);
|
|
122
139
|
} catch {
|
|
123
140
|
store.setContent([initialTables, initialValues]);
|
|
@@ -131,11 +148,18 @@ const createCustomPersister = (
|
|
|
131
148
|
async (getContent2, getChanges2) => {
|
|
132
149
|
if (getChanges2) {
|
|
133
150
|
const changes = getChanges2();
|
|
134
|
-
await loadLock(async () =>
|
|
151
|
+
await loadLock(async () =>
|
|
152
|
+
(isMergeableStore && isMergeable(changes)
|
|
153
|
+
? store.applyMergeableChanges
|
|
154
|
+
: store.applyChanges)(changes),
|
|
155
|
+
);
|
|
135
156
|
} else {
|
|
136
157
|
await loadLock(async () => {
|
|
137
158
|
try {
|
|
138
|
-
|
|
159
|
+
const content = getContent2?.() ?? (await getPersisted());
|
|
160
|
+
(isMergeableStore && isMergeable(content)
|
|
161
|
+
? store.setMergeableContent
|
|
162
|
+
: store.setContent)(content);
|
|
139
163
|
} catch (error) {
|
|
140
164
|
onIgnoredError?.(error);
|
|
141
165
|
}
|
|
@@ -175,9 +199,9 @@ const createCustomPersister = (
|
|
|
175
199
|
startAutoSave: async () => {
|
|
176
200
|
await persister.stopAutoSave().save();
|
|
177
201
|
listenerId = store.addDidFinishTransactionListener(() => {
|
|
178
|
-
const
|
|
179
|
-
if (
|
|
180
|
-
persister.save(() =>
|
|
202
|
+
const changes = getChanges();
|
|
203
|
+
if (hasChanges(changes)) {
|
|
204
|
+
persister.save(() => changes);
|
|
181
205
|
}
|
|
182
206
|
});
|
|
183
207
|
return persister;
|
|
@@ -75,9 +75,11 @@ const mapMap = (coll, cb) =>
|
|
|
75
75
|
arrayMap([...(coll?.entries() ?? [])], ([key, value]) => cb(value, key));
|
|
76
76
|
const mapSet = (map, key, value) =>
|
|
77
77
|
isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
|
|
78
|
-
const mapEnsure = (map, key, getDefaultValue) => {
|
|
78
|
+
const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
|
|
79
79
|
if (!collHas(map, key)) {
|
|
80
80
|
mapSet(map, key, getDefaultValue());
|
|
81
|
+
} else {
|
|
82
|
+
hadExistingValue?.(mapGet(map, key));
|
|
81
83
|
}
|
|
82
84
|
return mapGet(map, key);
|
|
83
85
|
};
|
|
@@ -376,6 +378,23 @@ const jsonParse = JSON.parse;
|
|
|
376
378
|
|
|
377
379
|
const scheduleRunning = mapNew();
|
|
378
380
|
const scheduleActions = mapNew();
|
|
381
|
+
const isMergeable = (contentOrChanges) => isString(contentOrChanges?.[0]);
|
|
382
|
+
const getStoreFunctions = (supportsMergeableStore, store) =>
|
|
383
|
+
!supportsMergeableStore || isUndefined(store.getMergeableContent)
|
|
384
|
+
? [
|
|
385
|
+
0,
|
|
386
|
+
store.getContent,
|
|
387
|
+
store.getTransactionChanges,
|
|
388
|
+
([changedTables, changedValues]) =>
|
|
389
|
+
!objIsEmpty(changedTables) || !objIsEmpty(changedValues),
|
|
390
|
+
]
|
|
391
|
+
: [
|
|
392
|
+
1,
|
|
393
|
+
store.getMergeableContent,
|
|
394
|
+
store.getTransactionMergeableChanges,
|
|
395
|
+
([, [[, changedTables], [, changedValues]]]) =>
|
|
396
|
+
!objIsEmpty(changedTables) || !objIsEmpty(changedValues),
|
|
397
|
+
];
|
|
379
398
|
const createCustomPersister = (
|
|
380
399
|
store,
|
|
381
400
|
getPersisted,
|
|
@@ -396,10 +415,8 @@ const createCustomPersister = (
|
|
|
396
415
|
let listeningHandle;
|
|
397
416
|
mapEnsure(scheduleRunning, scheduleId, () => 0);
|
|
398
417
|
mapEnsure(scheduleActions, scheduleId, () => []);
|
|
399
|
-
const getContent =
|
|
400
|
-
(supportsMergeableStore
|
|
401
|
-
store.getContent;
|
|
402
|
-
const getChanges = store.getTransactionChanges;
|
|
418
|
+
const [isMergeableStore, getContent, getChanges, hasChanges] =
|
|
419
|
+
getStoreFunctions(supportsMergeableStore, store);
|
|
403
420
|
const run = async () => {
|
|
404
421
|
/* istanbul ignore else */
|
|
405
422
|
if (!mapGet(scheduleRunning, scheduleId)) {
|
|
@@ -436,8 +453,8 @@ const createCustomPersister = (
|
|
|
436
453
|
await loadLock(async () => {
|
|
437
454
|
try {
|
|
438
455
|
const content = await getPersisted();
|
|
439
|
-
(
|
|
440
|
-
? store.
|
|
456
|
+
(isMergeableStore && isMergeable(content)
|
|
457
|
+
? store.setMergeableContent
|
|
441
458
|
: store.setContent)(content);
|
|
442
459
|
} catch {
|
|
443
460
|
store.setContent([initialTables, initialValues]);
|
|
@@ -451,11 +468,18 @@ const createCustomPersister = (
|
|
|
451
468
|
async (getContent2, getChanges2) => {
|
|
452
469
|
if (getChanges2) {
|
|
453
470
|
const changes = getChanges2();
|
|
454
|
-
await loadLock(async () =>
|
|
471
|
+
await loadLock(async () =>
|
|
472
|
+
(isMergeableStore && isMergeable(changes)
|
|
473
|
+
? store.applyMergeableChanges
|
|
474
|
+
: store.applyChanges)(changes),
|
|
475
|
+
);
|
|
455
476
|
} else {
|
|
456
477
|
await loadLock(async () => {
|
|
457
478
|
try {
|
|
458
|
-
|
|
479
|
+
const content = getContent2?.() ?? (await getPersisted());
|
|
480
|
+
(isMergeableStore && isMergeable(content)
|
|
481
|
+
? store.setMergeableContent
|
|
482
|
+
: store.setContent)(content);
|
|
459
483
|
} catch (error) {
|
|
460
484
|
onIgnoredError?.(error);
|
|
461
485
|
}
|
|
@@ -495,9 +519,9 @@ const createCustomPersister = (
|
|
|
495
519
|
startAutoSave: async () => {
|
|
496
520
|
await persister.stopAutoSave().save();
|
|
497
521
|
listenerId = store.addDidFinishTransactionListener(() => {
|
|
498
|
-
const
|
|
499
|
-
if (
|
|
500
|
-
persister.save(() =>
|
|
522
|
+
const changes = getChanges();
|
|
523
|
+
if (hasChanges(changes)) {
|
|
524
|
+
persister.save(() => changes);
|
|
501
525
|
}
|
|
502
526
|
});
|
|
503
527
|
return persister;
|
|
@@ -76,9 +76,11 @@ const mapMap = (coll, cb) =>
|
|
|
76
76
|
arrayMap([...(coll?.entries() ?? [])], ([key, value]) => cb(value, key));
|
|
77
77
|
const mapSet = (map, key, value) =>
|
|
78
78
|
isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
|
|
79
|
-
const mapEnsure = (map, key, getDefaultValue) => {
|
|
79
|
+
const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
|
|
80
80
|
if (!collHas(map, key)) {
|
|
81
81
|
mapSet(map, key, getDefaultValue());
|
|
82
|
+
} else {
|
|
83
|
+
hadExistingValue?.(mapGet(map, key));
|
|
82
84
|
}
|
|
83
85
|
return mapGet(map, key);
|
|
84
86
|
};
|
|
@@ -377,6 +379,23 @@ const jsonParse = JSON.parse;
|
|
|
377
379
|
|
|
378
380
|
const scheduleRunning = mapNew();
|
|
379
381
|
const scheduleActions = mapNew();
|
|
382
|
+
const isMergeable = (contentOrChanges) => isString(contentOrChanges?.[0]);
|
|
383
|
+
const getStoreFunctions = (supportsMergeableStore, store) =>
|
|
384
|
+
!supportsMergeableStore || isUndefined(store.getMergeableContent)
|
|
385
|
+
? [
|
|
386
|
+
0,
|
|
387
|
+
store.getContent,
|
|
388
|
+
store.getTransactionChanges,
|
|
389
|
+
([changedTables, changedValues]) =>
|
|
390
|
+
!objIsEmpty(changedTables) || !objIsEmpty(changedValues),
|
|
391
|
+
]
|
|
392
|
+
: [
|
|
393
|
+
1,
|
|
394
|
+
store.getMergeableContent,
|
|
395
|
+
store.getTransactionMergeableChanges,
|
|
396
|
+
([, [[, changedTables], [, changedValues]]]) =>
|
|
397
|
+
!objIsEmpty(changedTables) || !objIsEmpty(changedValues),
|
|
398
|
+
];
|
|
380
399
|
const createCustomPersister = (
|
|
381
400
|
store,
|
|
382
401
|
getPersisted,
|
|
@@ -397,10 +416,8 @@ const createCustomPersister = (
|
|
|
397
416
|
let listeningHandle;
|
|
398
417
|
mapEnsure(scheduleRunning, scheduleId, () => 0);
|
|
399
418
|
mapEnsure(scheduleActions, scheduleId, () => []);
|
|
400
|
-
const getContent =
|
|
401
|
-
(supportsMergeableStore
|
|
402
|
-
store.getContent;
|
|
403
|
-
const getChanges = store.getTransactionChanges;
|
|
419
|
+
const [isMergeableStore, getContent, getChanges, hasChanges] =
|
|
420
|
+
getStoreFunctions(supportsMergeableStore, store);
|
|
404
421
|
const run = async () => {
|
|
405
422
|
/* istanbul ignore else */
|
|
406
423
|
if (!mapGet(scheduleRunning, scheduleId)) {
|
|
@@ -437,8 +454,8 @@ const createCustomPersister = (
|
|
|
437
454
|
await loadLock(async () => {
|
|
438
455
|
try {
|
|
439
456
|
const content = await getPersisted();
|
|
440
|
-
(
|
|
441
|
-
? store.
|
|
457
|
+
(isMergeableStore && isMergeable(content)
|
|
458
|
+
? store.setMergeableContent
|
|
442
459
|
: store.setContent)(content);
|
|
443
460
|
} catch {
|
|
444
461
|
store.setContent([initialTables, initialValues]);
|
|
@@ -452,11 +469,18 @@ const createCustomPersister = (
|
|
|
452
469
|
async (getContent2, getChanges2) => {
|
|
453
470
|
if (getChanges2) {
|
|
454
471
|
const changes = getChanges2();
|
|
455
|
-
await loadLock(async () =>
|
|
472
|
+
await loadLock(async () =>
|
|
473
|
+
(isMergeableStore && isMergeable(changes)
|
|
474
|
+
? store.applyMergeableChanges
|
|
475
|
+
: store.applyChanges)(changes),
|
|
476
|
+
);
|
|
456
477
|
} else {
|
|
457
478
|
await loadLock(async () => {
|
|
458
479
|
try {
|
|
459
|
-
|
|
480
|
+
const content = getContent2?.() ?? (await getPersisted());
|
|
481
|
+
(isMergeableStore && isMergeable(content)
|
|
482
|
+
? store.setMergeableContent
|
|
483
|
+
: store.setContent)(content);
|
|
460
484
|
} catch (error) {
|
|
461
485
|
onIgnoredError?.(error);
|
|
462
486
|
}
|
|
@@ -496,9 +520,9 @@ const createCustomPersister = (
|
|
|
496
520
|
startAutoSave: async () => {
|
|
497
521
|
await persister.stopAutoSave().save();
|
|
498
522
|
listenerId = store.addDidFinishTransactionListener(() => {
|
|
499
|
-
const
|
|
500
|
-
if (
|
|
501
|
-
persister.save(() =>
|
|
523
|
+
const changes = getChanges();
|
|
524
|
+
if (hasChanges(changes)) {
|
|
525
|
+
persister.save(() => changes);
|
|
502
526
|
}
|
|
503
527
|
});
|
|
504
528
|
return persister;
|
|
@@ -57,15 +57,34 @@ const mapForEach = (map, cb) =>
|
|
|
57
57
|
collForEach(map, (value, key) => cb(key, value));
|
|
58
58
|
const mapSet = (map, key, value) =>
|
|
59
59
|
isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
|
|
60
|
-
const mapEnsure = (map, key, getDefaultValue) => {
|
|
60
|
+
const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
|
|
61
61
|
if (!collHas(map, key)) {
|
|
62
62
|
mapSet(map, key, getDefaultValue());
|
|
63
|
+
} else {
|
|
64
|
+
hadExistingValue?.(mapGet(map, key));
|
|
63
65
|
}
|
|
64
66
|
return mapGet(map, key);
|
|
65
67
|
};
|
|
66
68
|
|
|
67
69
|
const scheduleRunning = mapNew();
|
|
68
70
|
const scheduleActions = mapNew();
|
|
71
|
+
const isMergeable = (contentOrChanges) => isString(contentOrChanges?.[0]);
|
|
72
|
+
const getStoreFunctions = (supportsMergeableStore, store) =>
|
|
73
|
+
!supportsMergeableStore || isUndefined(store.getMergeableContent)
|
|
74
|
+
? [
|
|
75
|
+
0,
|
|
76
|
+
store.getContent,
|
|
77
|
+
store.getTransactionChanges,
|
|
78
|
+
([changedTables, changedValues]) =>
|
|
79
|
+
!objIsEmpty(changedTables) || !objIsEmpty(changedValues),
|
|
80
|
+
]
|
|
81
|
+
: [
|
|
82
|
+
1,
|
|
83
|
+
store.getMergeableContent,
|
|
84
|
+
store.getTransactionMergeableChanges,
|
|
85
|
+
([, [[, changedTables], [, changedValues]]]) =>
|
|
86
|
+
!objIsEmpty(changedTables) || !objIsEmpty(changedValues),
|
|
87
|
+
];
|
|
69
88
|
const createCustomPersister = (
|
|
70
89
|
store,
|
|
71
90
|
getPersisted,
|
|
@@ -86,10 +105,8 @@ const createCustomPersister = (
|
|
|
86
105
|
let listeningHandle;
|
|
87
106
|
mapEnsure(scheduleRunning, scheduleId, () => 0);
|
|
88
107
|
mapEnsure(scheduleActions, scheduleId, () => []);
|
|
89
|
-
const getContent =
|
|
90
|
-
(supportsMergeableStore
|
|
91
|
-
store.getContent;
|
|
92
|
-
const getChanges = store.getTransactionChanges;
|
|
108
|
+
const [isMergeableStore, getContent, getChanges, hasChanges] =
|
|
109
|
+
getStoreFunctions(supportsMergeableStore, store);
|
|
93
110
|
const run = async () => {
|
|
94
111
|
/* istanbul ignore else */
|
|
95
112
|
if (!mapGet(scheduleRunning, scheduleId)) {
|
|
@@ -126,8 +143,8 @@ const createCustomPersister = (
|
|
|
126
143
|
await loadLock(async () => {
|
|
127
144
|
try {
|
|
128
145
|
const content = await getPersisted();
|
|
129
|
-
(
|
|
130
|
-
? store.
|
|
146
|
+
(isMergeableStore && isMergeable(content)
|
|
147
|
+
? store.setMergeableContent
|
|
131
148
|
: store.setContent)(content);
|
|
132
149
|
} catch {
|
|
133
150
|
store.setContent([initialTables, initialValues]);
|
|
@@ -141,11 +158,18 @@ const createCustomPersister = (
|
|
|
141
158
|
async (getContent2, getChanges2) => {
|
|
142
159
|
if (getChanges2) {
|
|
143
160
|
const changes = getChanges2();
|
|
144
|
-
await loadLock(async () =>
|
|
161
|
+
await loadLock(async () =>
|
|
162
|
+
(isMergeableStore && isMergeable(changes)
|
|
163
|
+
? store.applyMergeableChanges
|
|
164
|
+
: store.applyChanges)(changes),
|
|
165
|
+
);
|
|
145
166
|
} else {
|
|
146
167
|
await loadLock(async () => {
|
|
147
168
|
try {
|
|
148
|
-
|
|
169
|
+
const content = getContent2?.() ?? (await getPersisted());
|
|
170
|
+
(isMergeableStore && isMergeable(content)
|
|
171
|
+
? store.setMergeableContent
|
|
172
|
+
: store.setContent)(content);
|
|
149
173
|
} catch (error) {
|
|
150
174
|
onIgnoredError?.(error);
|
|
151
175
|
}
|
|
@@ -185,9 +209,9 @@ const createCustomPersister = (
|
|
|
185
209
|
startAutoSave: async () => {
|
|
186
210
|
await persister.stopAutoSave().save();
|
|
187
211
|
listenerId = store.addDidFinishTransactionListener(() => {
|
|
188
|
-
const
|
|
189
|
-
if (
|
|
190
|
-
persister.save(() =>
|
|
212
|
+
const changes = getChanges();
|
|
213
|
+
if (hasChanges(changes)) {
|
|
214
|
+
persister.save(() => changes);
|
|
191
215
|
}
|
|
192
216
|
});
|
|
193
217
|
return persister;
|
package/lib/debug/persisters.js
CHANGED
|
@@ -35,15 +35,34 @@ const mapNew = (entries) => new Map(entries);
|
|
|
35
35
|
const mapGet = (map, key) => map?.get(key);
|
|
36
36
|
const mapSet = (map, key, value) =>
|
|
37
37
|
isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
|
|
38
|
-
const mapEnsure = (map, key, getDefaultValue) => {
|
|
38
|
+
const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
|
|
39
39
|
if (!collHas(map, key)) {
|
|
40
40
|
mapSet(map, key, getDefaultValue());
|
|
41
|
+
} else {
|
|
42
|
+
hadExistingValue?.(mapGet(map, key));
|
|
41
43
|
}
|
|
42
44
|
return mapGet(map, key);
|
|
43
45
|
};
|
|
44
46
|
|
|
45
47
|
const scheduleRunning = mapNew();
|
|
46
48
|
const scheduleActions = mapNew();
|
|
49
|
+
const isMergeable = (contentOrChanges) => isString(contentOrChanges?.[0]);
|
|
50
|
+
const getStoreFunctions = (supportsMergeableStore, store) =>
|
|
51
|
+
!supportsMergeableStore || isUndefined(store.getMergeableContent)
|
|
52
|
+
? [
|
|
53
|
+
0,
|
|
54
|
+
store.getContent,
|
|
55
|
+
store.getTransactionChanges,
|
|
56
|
+
([changedTables, changedValues]) =>
|
|
57
|
+
!objIsEmpty(changedTables) || !objIsEmpty(changedValues),
|
|
58
|
+
]
|
|
59
|
+
: [
|
|
60
|
+
1,
|
|
61
|
+
store.getMergeableContent,
|
|
62
|
+
store.getTransactionMergeableChanges,
|
|
63
|
+
([, [[, changedTables], [, changedValues]]]) =>
|
|
64
|
+
!objIsEmpty(changedTables) || !objIsEmpty(changedValues),
|
|
65
|
+
];
|
|
47
66
|
const createCustomPersister = (
|
|
48
67
|
store,
|
|
49
68
|
getPersisted,
|
|
@@ -64,10 +83,8 @@ const createCustomPersister = (
|
|
|
64
83
|
let listeningHandle;
|
|
65
84
|
mapEnsure(scheduleRunning, scheduleId, () => 0);
|
|
66
85
|
mapEnsure(scheduleActions, scheduleId, () => []);
|
|
67
|
-
const getContent =
|
|
68
|
-
(supportsMergeableStore
|
|
69
|
-
store.getContent;
|
|
70
|
-
const getChanges = store.getTransactionChanges;
|
|
86
|
+
const [isMergeableStore, getContent, getChanges, hasChanges] =
|
|
87
|
+
getStoreFunctions(supportsMergeableStore, store);
|
|
71
88
|
const run = async () => {
|
|
72
89
|
/* istanbul ignore else */
|
|
73
90
|
if (!mapGet(scheduleRunning, scheduleId)) {
|
|
@@ -104,8 +121,8 @@ const createCustomPersister = (
|
|
|
104
121
|
await loadLock(async () => {
|
|
105
122
|
try {
|
|
106
123
|
const content = await getPersisted();
|
|
107
|
-
(
|
|
108
|
-
? store.
|
|
124
|
+
(isMergeableStore && isMergeable(content)
|
|
125
|
+
? store.setMergeableContent
|
|
109
126
|
: store.setContent)(content);
|
|
110
127
|
} catch {
|
|
111
128
|
store.setContent([initialTables, initialValues]);
|
|
@@ -119,11 +136,18 @@ const createCustomPersister = (
|
|
|
119
136
|
async (getContent2, getChanges2) => {
|
|
120
137
|
if (getChanges2) {
|
|
121
138
|
const changes = getChanges2();
|
|
122
|
-
await loadLock(async () =>
|
|
139
|
+
await loadLock(async () =>
|
|
140
|
+
(isMergeableStore && isMergeable(changes)
|
|
141
|
+
? store.applyMergeableChanges
|
|
142
|
+
: store.applyChanges)(changes),
|
|
143
|
+
);
|
|
123
144
|
} else {
|
|
124
145
|
await loadLock(async () => {
|
|
125
146
|
try {
|
|
126
|
-
|
|
147
|
+
const content = getContent2?.() ?? (await getPersisted());
|
|
148
|
+
(isMergeableStore && isMergeable(content)
|
|
149
|
+
? store.setMergeableContent
|
|
150
|
+
: store.setContent)(content);
|
|
127
151
|
} catch (error) {
|
|
128
152
|
onIgnoredError?.(error);
|
|
129
153
|
}
|
|
@@ -163,9 +187,9 @@ const createCustomPersister = (
|
|
|
163
187
|
startAutoSave: async () => {
|
|
164
188
|
await persister.stopAutoSave().save();
|
|
165
189
|
listenerId = store.addDidFinishTransactionListener(() => {
|
|
166
|
-
const
|
|
167
|
-
if (
|
|
168
|
-
persister.save(() =>
|
|
190
|
+
const changes = getChanges();
|
|
191
|
+
if (hasChanges(changes)) {
|
|
192
|
+
persister.save(() => changes);
|
|
169
193
|
}
|
|
170
194
|
});
|
|
171
195
|
return persister;
|
package/lib/debug/queries.js
CHANGED
|
@@ -66,9 +66,11 @@ const mapForEach = (map, cb) =>
|
|
|
66
66
|
collForEach(map, (value, key) => cb(key, value));
|
|
67
67
|
const mapSet = (map, key, value) =>
|
|
68
68
|
isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
|
|
69
|
-
const mapEnsure = (map, key, getDefaultValue) => {
|
|
69
|
+
const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
|
|
70
70
|
if (!collHas(map, key)) {
|
|
71
71
|
mapSet(map, key, getDefaultValue());
|
|
72
|
+
} else {
|
|
73
|
+
hadExistingValue?.(mapGet(map, key));
|
|
72
74
|
}
|
|
73
75
|
return mapGet(map, key);
|
|
74
76
|
};
|
|
@@ -171,9 +173,10 @@ const getAggregateValue = (
|
|
|
171
173
|
: aggregateValue;
|
|
172
174
|
};
|
|
173
175
|
|
|
174
|
-
const getCellOrValueType = (
|
|
175
|
-
const type = getTypeOf(
|
|
176
|
-
return isTypeStringOrBoolean(type) ||
|
|
176
|
+
const getCellOrValueType = (cellOrValue) => {
|
|
177
|
+
const type = getTypeOf(cellOrValue);
|
|
178
|
+
return isTypeStringOrBoolean(type) ||
|
|
179
|
+
(type == NUMBER && isFiniteNumber(cellOrValue))
|
|
177
180
|
? type
|
|
178
181
|
: void 0;
|
|
179
182
|
};
|
|
@@ -42,9 +42,11 @@ const mapForEach = (map, cb) =>
|
|
|
42
42
|
collForEach(map, (value, key) => cb(key, value));
|
|
43
43
|
const mapSet = (map, key, value) =>
|
|
44
44
|
isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
|
|
45
|
-
const mapEnsure = (map, key, getDefaultValue) => {
|
|
45
|
+
const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
|
|
46
46
|
if (!collHas(map, key)) {
|
|
47
47
|
mapSet(map, key, getDefaultValue());
|
|
48
|
+
} else {
|
|
49
|
+
hadExistingValue?.(mapGet(map, key));
|
|
48
50
|
}
|
|
49
51
|
return mapGet(map, key);
|
|
50
52
|
};
|