tinybase 5.0.0-beta.1 → 5.0.0-beta.10
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 -0
- 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-partykit-server.cjs +1 -1
- package/lib/cjs/persisters/persister-partykit-server.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-powersync.cjs +1 -0
- package/lib/cjs/persisters/persister-powersync.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/synchronizers/synchronizer-local.cjs +1 -0
- package/lib/cjs/synchronizers/synchronizer-local.cjs.gz +0 -0
- package/lib/cjs/synchronizers/synchronizer-ws-client.cjs +1 -0
- package/lib/cjs/synchronizers/synchronizer-ws-client.cjs.gz +0 -0
- package/lib/cjs/synchronizers/synchronizer-ws-server.cjs +1 -0
- package/lib/cjs/synchronizers/synchronizer-ws-server.cjs.gz +0 -0
- package/lib/cjs/synchronizers.cjs +1 -0
- package/lib/cjs/synchronizers.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/ui-react-dom.cjs +1 -1
- package/lib/cjs/ui-react-dom.cjs.gz +0 -0
- package/lib/cjs/ui-react.cjs +1 -1
- package/lib/cjs/ui-react.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 -0
- 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-partykit-server.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-partykit-server.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-powersync.cjs +1 -0
- package/lib/cjs-es6/persisters/persister-powersync.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/synchronizers/synchronizer-local.cjs +1 -0
- package/lib/cjs-es6/synchronizers/synchronizer-local.cjs.gz +0 -0
- package/lib/cjs-es6/synchronizers/synchronizer-ws-client.cjs +1 -0
- package/lib/cjs-es6/synchronizers/synchronizer-ws-client.cjs.gz +0 -0
- package/lib/cjs-es6/synchronizers/synchronizer-ws-server.cjs +1 -0
- package/lib/cjs-es6/synchronizers/synchronizer-ws-server.cjs.gz +0 -0
- package/lib/cjs-es6/synchronizers.cjs +1 -0
- package/lib/cjs-es6/synchronizers.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/cjs-es6/ui-react-dom.cjs +1 -1
- package/lib/cjs-es6/ui-react-dom.cjs.gz +0 -0
- package/lib/cjs-es6/ui-react.cjs +1 -1
- package/lib/cjs-es6/ui-react.cjs.gz +0 -0
- package/lib/debug/checkpoints.js +3 -1
- package/lib/debug/indexes.js +3 -1
- package/lib/debug/mergeable-store.js +2230 -0
- package/lib/debug/metrics.js +3 -1
- package/lib/debug/persisters/persister-automerge.js +110 -86
- package/lib/debug/persisters/persister-browser.js +94 -57
- package/lib/debug/persisters/persister-cr-sqlite-wasm.js +168 -106
- package/lib/debug/persisters/persister-electric-sql.js +168 -106
- package/lib/debug/persisters/persister-expo-sqlite-next.js +168 -106
- package/lib/debug/persisters/persister-expo-sqlite.js +168 -106
- package/lib/debug/persisters/persister-file.js +93 -57
- package/lib/debug/persisters/persister-indexed-db.js +90 -56
- package/lib/debug/persisters/persister-libsql.js +913 -0
- package/lib/debug/persisters/persister-partykit-client.js +89 -59
- package/lib/debug/persisters/persister-partykit-server.js +17 -25
- package/lib/debug/persisters/persister-powersync.js +928 -0
- package/lib/debug/persisters/persister-remote.js +85 -53
- package/lib/debug/persisters/persister-sqlite-wasm.js +168 -106
- package/lib/debug/persisters/persister-sqlite3.js +168 -106
- package/lib/debug/persisters/persister-yjs.js +108 -83
- package/lib/debug/persisters.js +81 -50
- package/lib/debug/queries.js +9 -6
- package/lib/debug/relationships.js +3 -1
- package/lib/debug/store.js +147 -126
- package/lib/debug/synchronizers/synchronizer-local.js +559 -0
- package/lib/debug/synchronizers/synchronizer-ws-client.js +586 -0
- package/lib/debug/synchronizers/synchronizer-ws-server.js +96 -0
- package/lib/debug/synchronizers.js +519 -0
- package/lib/debug/tinybase.js +1027 -174
- package/lib/debug/tools.js +22 -21
- package/lib/debug/ui-react-dom.js +275 -213
- package/lib/debug/ui-react.js +55 -6
- 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 -0
- 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-partykit-server.js +1 -1
- package/lib/es6/persisters/persister-partykit-server.js.gz +0 -0
- package/lib/es6/persisters/persister-powersync.js +1 -0
- package/lib/es6/persisters/persister-powersync.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/synchronizers/synchronizer-local.js +1 -0
- package/lib/es6/synchronizers/synchronizer-local.js.gz +0 -0
- package/lib/es6/synchronizers/synchronizer-ws-client.js +1 -0
- package/lib/es6/synchronizers/synchronizer-ws-client.js.gz +0 -0
- package/lib/es6/synchronizers/synchronizer-ws-server.js +1 -0
- package/lib/es6/synchronizers/synchronizer-ws-server.js.gz +0 -0
- package/lib/es6/synchronizers.js +1 -0
- package/lib/es6/synchronizers.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/es6/ui-react-dom.js +1 -1
- package/lib/es6/ui-react-dom.js.gz +0 -0
- package/lib/es6/ui-react.js +1 -1
- package/lib/es6/ui-react.js.gz +0 -0
- package/lib/indexes.js +1 -1
- package/lib/indexes.js.gz +0 -0
- package/lib/mergeable-store.js +1 -0
- 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-partykit-server.js +1 -1
- package/lib/persisters/persister-partykit-server.js.gz +0 -0
- package/lib/persisters/persister-powersync.js +1 -0
- package/lib/persisters/persister-powersync.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/synchronizers/synchronizer-local.js +1 -0
- package/lib/synchronizers/synchronizer-local.js.gz +0 -0
- package/lib/synchronizers/synchronizer-ws-client.js +1 -0
- package/lib/synchronizers/synchronizer-ws-client.js.gz +0 -0
- package/lib/synchronizers/synchronizer-ws-server.js +1 -0
- package/lib/synchronizers/synchronizer-ws-server.js.gz +0 -0
- package/lib/synchronizers.js +1 -0
- package/lib/synchronizers.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/checkpoints.d.ts +2 -2
- package/lib/types/indexes.d.ts +2 -2
- package/lib/types/mergeable-store.d.ts +214 -0
- package/lib/types/metrics.d.ts +2 -2
- package/lib/types/persisters/persister-automerge.d.ts +11 -7
- package/lib/types/persisters/persister-browser.d.ts +13 -4
- package/lib/types/persisters/persister-cr-sqlite-wasm.d.ts +4 -0
- package/lib/types/persisters/persister-electric-sql.d.ts +4 -0
- package/lib/types/persisters/persister-expo-sqlite-next.d.ts +4 -0
- package/lib/types/persisters/persister-expo-sqlite.d.ts +4 -0
- package/lib/types/persisters/persister-file.d.ts +7 -2
- package/lib/types/persisters/persister-indexed-db.d.ts +4 -0
- package/lib/types/persisters/persister-libsql.d.ts +142 -0
- package/lib/types/persisters/persister-partykit-client.d.ts +4 -0
- package/lib/types/persisters/persister-partykit-server.d.ts +12 -8
- package/lib/types/persisters/persister-powersync.d.ts +157 -0
- package/lib/types/persisters/persister-remote.d.ts +4 -0
- package/lib/types/persisters/persister-sqlite-wasm.d.ts +4 -0
- package/lib/types/persisters/persister-sqlite3.d.ts +4 -0
- package/lib/types/persisters/persister-yjs.d.ts +6 -2
- package/lib/types/persisters.d.ts +125 -48
- package/lib/types/queries.d.ts +2 -2
- package/lib/types/relationships.d.ts +2 -2
- package/lib/types/store.d.ts +275 -187
- package/lib/types/synchronizers/synchronizer-local.d.ts +27 -0
- package/lib/types/synchronizers/synchronizer-ws-client.d.ts +35 -0
- package/lib/types/synchronizers/synchronizer-ws-server.d.ts +36 -0
- package/lib/types/synchronizers.d.ts +132 -0
- package/lib/types/tinybase.d.ts +10 -8
- package/lib/types/tools.d.ts +4 -4
- package/lib/types/ui-react.d.ts +160 -9
- package/lib/types/with-schemas/checkpoints.d.ts +2 -2
- package/lib/types/with-schemas/indexes.d.ts +2 -2
- package/lib/types/with-schemas/internal/store.d.ts +4 -0
- package/lib/types/with-schemas/mergeable-store.d.ts +492 -0
- package/lib/types/with-schemas/metrics.d.ts +2 -2
- package/lib/types/with-schemas/persisters/persister-automerge.d.ts +12 -8
- package/lib/types/with-schemas/persisters/persister-browser.d.ts +17 -8
- package/lib/types/with-schemas/persisters/persister-cr-sqlite-wasm.d.ts +5 -1
- package/lib/types/with-schemas/persisters/persister-electric-sql.d.ts +5 -1
- package/lib/types/with-schemas/persisters/persister-expo-sqlite-next.d.ts +5 -1
- package/lib/types/with-schemas/persisters/persister-expo-sqlite.d.ts +5 -1
- package/lib/types/with-schemas/persisters/persister-file.d.ts +9 -4
- package/lib/types/with-schemas/persisters/persister-indexed-db.d.ts +5 -1
- package/lib/types/with-schemas/persisters/persister-libsql.d.ts +155 -0
- package/lib/types/with-schemas/persisters/persister-partykit-client.d.ts +5 -1
- package/lib/types/with-schemas/persisters/persister-partykit-server.d.ts +15 -11
- package/lib/types/with-schemas/persisters/persister-powersync.d.ts +170 -0
- package/lib/types/with-schemas/persisters/persister-remote.d.ts +5 -1
- package/lib/types/with-schemas/persisters/persister-sqlite-wasm.d.ts +5 -1
- package/lib/types/with-schemas/persisters/persister-sqlite3.d.ts +5 -1
- package/lib/types/with-schemas/persisters/persister-yjs.d.ts +7 -3
- package/lib/types/with-schemas/persisters.d.ts +161 -101
- package/lib/types/with-schemas/queries.d.ts +3 -3
- package/lib/types/with-schemas/relationships.d.ts +2 -2
- package/lib/types/with-schemas/store.d.ts +483 -345
- package/lib/types/with-schemas/synchronizers/synchronizer-local.d.ts +29 -0
- package/lib/types/with-schemas/synchronizers/synchronizer-ws-client.d.ts +41 -0
- package/lib/types/with-schemas/synchronizers/synchronizer-ws-server.d.ts +36 -0
- package/lib/types/with-schemas/synchronizers.d.ts +146 -0
- package/lib/types/with-schemas/tinybase.d.ts +9 -8
- package/lib/types/with-schemas/tools.d.ts +4 -4
- package/lib/types/with-schemas/ui-react.d.ts +177 -9
- package/lib/ui-react-dom.js +1 -1
- package/lib/ui-react-dom.js.gz +0 -0
- package/lib/ui-react.js +1 -1
- package/lib/ui-react.js.gz +0 -0
- 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 -0
- 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-partykit-server.js +1 -1
- package/lib/umd/persisters/persister-partykit-server.js.gz +0 -0
- package/lib/umd/persisters/persister-powersync.js +1 -0
- package/lib/umd/persisters/persister-powersync.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/synchronizers/synchronizer-local.js +1 -0
- package/lib/umd/synchronizers/synchronizer-local.js.gz +0 -0
- package/lib/umd/synchronizers/synchronizer-ws-client.js +1 -0
- package/lib/umd/synchronizers/synchronizer-ws-client.js.gz +0 -0
- package/lib/umd/synchronizers/synchronizer-ws-server.js +1 -0
- package/lib/umd/synchronizers/synchronizer-ws-server.js.gz +0 -0
- package/lib/umd/synchronizers.js +1 -0
- package/lib/umd/synchronizers.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/ui-react-dom.js +1 -1
- package/lib/umd/ui-react-dom.js.gz +0 -0
- package/lib/umd/ui-react.js +1 -1
- package/lib/umd/ui-react.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 -0
- 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-partykit-server.js +1 -1
- package/lib/umd-es6/persisters/persister-partykit-server.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-powersync.js +1 -0
- package/lib/umd-es6/persisters/persister-powersync.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/synchronizers/synchronizer-local.js +1 -0
- package/lib/umd-es6/synchronizers/synchronizer-local.js.gz +0 -0
- package/lib/umd-es6/synchronizers/synchronizer-ws-client.js +1 -0
- package/lib/umd-es6/synchronizers/synchronizer-ws-client.js.gz +0 -0
- package/lib/umd-es6/synchronizers/synchronizer-ws-server.js +1 -0
- package/lib/umd-es6/synchronizers/synchronizer-ws-server.js.gz +0 -0
- package/lib/umd-es6/synchronizers.js +1 -0
- package/lib/umd-es6/synchronizers.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/lib/umd-es6/ui-react-dom.js +1 -1
- package/lib/umd-es6/ui-react-dom.js.gz +0 -0
- package/lib/umd-es6/ui-react.js +1 -1
- package/lib/umd-es6/ui-react.js.gz +0 -0
- package/package.json +65 -45
- package/readme.md +2 -2
|
@@ -41,8 +41,6 @@ const collDel = (coll, keyOrValue) => coll?.delete(keyOrValue);
|
|
|
41
41
|
const object = Object;
|
|
42
42
|
const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
|
|
43
43
|
const objEntries = object.entries;
|
|
44
|
-
const objIds = object.keys;
|
|
45
|
-
const objFreeze = object.freeze;
|
|
46
44
|
const isObject = (obj) =>
|
|
47
45
|
!isUndefined(obj) &&
|
|
48
46
|
ifNotUndefined(
|
|
@@ -53,15 +51,16 @@ const isObject = (obj) =>
|
|
|
53
51
|
/* istanbul ignore next */
|
|
54
52
|
() => true,
|
|
55
53
|
);
|
|
54
|
+
const objIds = object.keys;
|
|
55
|
+
const objFreeze = object.freeze;
|
|
56
56
|
const objNew = (entries = []) => object.fromEntries(entries);
|
|
57
57
|
const objMerge = (...objs) => object.assign({}, ...objs);
|
|
58
|
-
const
|
|
59
|
-
const objHas = (obj, id) => !isUndefined(objGet(obj, id));
|
|
58
|
+
const objHas = (obj, id) => id in obj;
|
|
60
59
|
const objDel = (obj, id) => {
|
|
61
60
|
delete obj[id];
|
|
62
61
|
return obj;
|
|
63
62
|
};
|
|
64
|
-
const
|
|
63
|
+
const objToArray = (obj, cb) =>
|
|
65
64
|
arrayMap(objEntries(obj), ([id, value]) => cb(value, id));
|
|
66
65
|
const objValues = (obj) => object.values(obj);
|
|
67
66
|
const objSize = (obj) => size(objIds(obj));
|
|
@@ -76,14 +75,16 @@ const mapMap = (coll, cb) =>
|
|
|
76
75
|
arrayMap([...(coll?.entries() ?? [])], ([key, value]) => cb(value, key));
|
|
77
76
|
const mapSet = (map, key, value) =>
|
|
78
77
|
isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
|
|
79
|
-
const mapEnsure = (map, key, getDefaultValue) => {
|
|
78
|
+
const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
|
|
80
79
|
if (!collHas(map, key)) {
|
|
81
80
|
mapSet(map, key, getDefaultValue());
|
|
81
|
+
} else {
|
|
82
|
+
hadExistingValue?.(mapGet(map, key));
|
|
82
83
|
}
|
|
83
84
|
return mapGet(map, key);
|
|
84
85
|
};
|
|
85
86
|
const mapMatch = (map, obj, set, del = mapSet) => {
|
|
86
|
-
|
|
87
|
+
objToArray(obj, (value, id) => set(map, id, value));
|
|
87
88
|
mapForEach(map, (id) => (objHas(obj, id) ? 0 : del(map, id)));
|
|
88
89
|
return map;
|
|
89
90
|
};
|
|
@@ -96,10 +97,18 @@ const setNew = (entryOrEntries) =>
|
|
|
96
97
|
);
|
|
97
98
|
const setAdd = (set, value) => set?.add(value);
|
|
98
99
|
|
|
100
|
+
const TABLE = 'TABLE';
|
|
101
|
+
const ALTER_TABLE = 'ALTER ' + TABLE;
|
|
102
|
+
const DELETE_FROM = 'DELETE FROM';
|
|
99
103
|
const SELECT_STAR_FROM = SELECT + '*FROM';
|
|
100
104
|
const FROM_PRAGMA_TABLE = 'FROM pragma_table_';
|
|
101
105
|
const WHERE = 'WHERE';
|
|
102
|
-
const getCommandFunctions = (
|
|
106
|
+
const getCommandFunctions = (
|
|
107
|
+
cmd,
|
|
108
|
+
managedTableNames,
|
|
109
|
+
onIgnoredError,
|
|
110
|
+
useOnConflict,
|
|
111
|
+
) => {
|
|
103
112
|
const schemaMap = mapNew();
|
|
104
113
|
const canSelect = (tableName, rowIdColumnName) =>
|
|
105
114
|
!isUndefined(mapGet(mapGet(schemaMap, tableName), rowIdColumnName));
|
|
@@ -112,7 +121,7 @@ const getCommandFunctions = (cmd, managedTableNames, onIgnoredError) => {
|
|
|
112
121
|
await cmd(
|
|
113
122
|
'SELECT name ' +
|
|
114
123
|
FROM_PRAGMA_TABLE +
|
|
115
|
-
`list WHERE schema='main'AND
|
|
124
|
+
`list WHERE schema='main'AND(type='table'OR type='view')AND name IN(` +
|
|
116
125
|
getPlaceholders(managedTableNames) +
|
|
117
126
|
`)ORDER BY name`,
|
|
118
127
|
managedTableNames,
|
|
@@ -167,31 +176,38 @@ const getCommandFunctions = (cmd, managedTableNames, onIgnoredError) => {
|
|
|
167
176
|
const saveTable = async (
|
|
168
177
|
tableName,
|
|
169
178
|
rowIdColumnName,
|
|
170
|
-
|
|
179
|
+
content,
|
|
171
180
|
deleteEmptyColumns,
|
|
172
181
|
deleteEmptyTable,
|
|
173
182
|
partial = false,
|
|
174
183
|
) => {
|
|
175
|
-
const
|
|
176
|
-
|
|
177
|
-
arrayMap(objIds(
|
|
184
|
+
const tableCellOrValueIds = setNew();
|
|
185
|
+
objToArray(content ?? {}, (contentRow) =>
|
|
186
|
+
arrayMap(objIds(contentRow ?? {}), (cellOrValueId) =>
|
|
187
|
+
setAdd(tableCellOrValueIds, cellOrValueId),
|
|
188
|
+
),
|
|
178
189
|
);
|
|
179
|
-
const tableColumnNames = collValues(
|
|
190
|
+
const tableColumnNames = collValues(tableCellOrValueIds);
|
|
180
191
|
if (
|
|
181
192
|
!partial &&
|
|
182
193
|
deleteEmptyTable &&
|
|
183
194
|
arrayIsEmpty(tableColumnNames) &&
|
|
184
195
|
collHas(schemaMap, tableName)
|
|
185
196
|
) {
|
|
186
|
-
await cmd('DROP
|
|
197
|
+
await cmd('DROP ' + TABLE + escapeId(tableName));
|
|
187
198
|
mapSet(schemaMap, tableName);
|
|
188
199
|
return;
|
|
189
200
|
}
|
|
190
201
|
if (!arrayIsEmpty(tableColumnNames) && !collHas(schemaMap, tableName)) {
|
|
191
202
|
await cmd(
|
|
192
|
-
`CREATE
|
|
193
|
-
|
|
194
|
-
|
|
203
|
+
`CREATE ` +
|
|
204
|
+
TABLE +
|
|
205
|
+
escapeId(tableName) +
|
|
206
|
+
'(' +
|
|
207
|
+
escapeId(rowIdColumnName) +
|
|
208
|
+
` PRIMARY KEY ON CONFLICT REPLACE${arrayJoin(
|
|
209
|
+
arrayMap(tableColumnNames, (cellId) => COMMA + escapeId(cellId)),
|
|
210
|
+
)});`,
|
|
195
211
|
);
|
|
196
212
|
mapSet(
|
|
197
213
|
schemaMap,
|
|
@@ -211,7 +227,7 @@ const getCommandFunctions = (cmd, managedTableNames, onIgnoredError) => {
|
|
|
211
227
|
...arrayMap(tableColumnNames, async (columnName) => {
|
|
212
228
|
if (!collDel(columnNamesAccountedFor, columnName)) {
|
|
213
229
|
await cmd(
|
|
214
|
-
|
|
230
|
+
ALTER_TABLE + escapeId(tableName) + 'ADD' + escapeId(columnName),
|
|
215
231
|
);
|
|
216
232
|
mapSet(tableSchemaMap, columnName, EMPTY_STRING);
|
|
217
233
|
}
|
|
@@ -222,9 +238,10 @@ const getCommandFunctions = (cmd, managedTableNames, onIgnoredError) => {
|
|
|
222
238
|
async (columnName) => {
|
|
223
239
|
if (columnName != rowIdColumnName) {
|
|
224
240
|
await cmd(
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
241
|
+
ALTER_TABLE +
|
|
242
|
+
escapeId(tableName) +
|
|
243
|
+
'DROP' +
|
|
244
|
+
escapeId(columnName),
|
|
228
245
|
);
|
|
229
246
|
mapSet(tableSchemaMap, columnName);
|
|
230
247
|
}
|
|
@@ -234,14 +251,14 @@ const getCommandFunctions = (cmd, managedTableNames, onIgnoredError) => {
|
|
|
234
251
|
]);
|
|
235
252
|
}
|
|
236
253
|
if (partial) {
|
|
237
|
-
if (isUndefined(
|
|
238
|
-
await cmd(
|
|
254
|
+
if (isUndefined(content)) {
|
|
255
|
+
await cmd(DELETE_FROM + escapeId(tableName) + WHERE + ' 1');
|
|
239
256
|
} else {
|
|
240
257
|
await promiseAll(
|
|
241
|
-
|
|
258
|
+
objToArray(content, async (row, rowId) => {
|
|
242
259
|
if (isUndefined(row)) {
|
|
243
260
|
await cmd(
|
|
244
|
-
|
|
261
|
+
DELETE_FROM +
|
|
245
262
|
escapeId(tableName) +
|
|
246
263
|
WHERE +
|
|
247
264
|
escapeId(rowIdColumnName) +
|
|
@@ -249,10 +266,14 @@ const getCommandFunctions = (cmd, managedTableNames, onIgnoredError) => {
|
|
|
249
266
|
[rowId],
|
|
250
267
|
);
|
|
251
268
|
} else if (!arrayIsEmpty(tableColumnNames)) {
|
|
252
|
-
await upsert(
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
269
|
+
await upsert(
|
|
270
|
+
cmd,
|
|
271
|
+
tableName,
|
|
272
|
+
rowIdColumnName,
|
|
273
|
+
objIds(row),
|
|
274
|
+
[rowId, ...objValues(row)],
|
|
275
|
+
useOnConflict,
|
|
276
|
+
);
|
|
256
277
|
}
|
|
257
278
|
}),
|
|
258
279
|
);
|
|
@@ -265,7 +286,7 @@ const getCommandFunctions = (cmd, managedTableNames, onIgnoredError) => {
|
|
|
265
286
|
);
|
|
266
287
|
const args = [];
|
|
267
288
|
const deleteRowIds = [];
|
|
268
|
-
|
|
289
|
+
objToArray(content ?? {}, (row, rowId) => {
|
|
269
290
|
arrayPush(
|
|
270
291
|
args,
|
|
271
292
|
rowId,
|
|
@@ -279,9 +300,10 @@ const getCommandFunctions = (cmd, managedTableNames, onIgnoredError) => {
|
|
|
279
300
|
rowIdColumnName,
|
|
280
301
|
changingColumnNames,
|
|
281
302
|
args,
|
|
303
|
+
useOnConflict,
|
|
282
304
|
);
|
|
283
305
|
await cmd(
|
|
284
|
-
|
|
306
|
+
DELETE_FROM +
|
|
285
307
|
escapeId(tableName) +
|
|
286
308
|
WHERE +
|
|
287
309
|
escapeId(rowIdColumnName) +
|
|
@@ -291,7 +313,7 @@ const getCommandFunctions = (cmd, managedTableNames, onIgnoredError) => {
|
|
|
291
313
|
deleteRowIds,
|
|
292
314
|
);
|
|
293
315
|
} else if (collHas(schemaMap, tableName)) {
|
|
294
|
-
await cmd(
|
|
316
|
+
await cmd(DELETE_FROM + escapeId(tableName) + WHERE + ' 1');
|
|
295
317
|
}
|
|
296
318
|
}
|
|
297
319
|
};
|
|
@@ -314,9 +336,12 @@ const upsert = async (
|
|
|
314
336
|
rowIdColumnName,
|
|
315
337
|
changingColumnNames,
|
|
316
338
|
args,
|
|
339
|
+
useOnConflict = true,
|
|
317
340
|
) =>
|
|
318
341
|
await cmd(
|
|
319
|
-
'INSERT
|
|
342
|
+
'INSERT ' +
|
|
343
|
+
(useOnConflict ? EMPTY_STRING : 'OR REPLACE ') +
|
|
344
|
+
'INTO' +
|
|
320
345
|
escapeId(tableName) +
|
|
321
346
|
'(' +
|
|
322
347
|
escapeId(rowIdColumnName) +
|
|
@@ -334,18 +359,20 @@ const upsert = async (
|
|
|
334
359
|
),
|
|
335
360
|
1,
|
|
336
361
|
) +
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
362
|
+
(useOnConflict
|
|
363
|
+
? 'ON CONFLICT(' +
|
|
364
|
+
escapeId(rowIdColumnName) +
|
|
365
|
+
')DO UPDATE SET' +
|
|
366
|
+
arrayJoin(
|
|
367
|
+
arrayMap(
|
|
368
|
+
changingColumnNames,
|
|
369
|
+
(columnName) =>
|
|
370
|
+
escapeId(columnName) + '=excluded.' + escapeId(columnName),
|
|
371
|
+
),
|
|
372
|
+
COMMA,
|
|
373
|
+
)
|
|
374
|
+
: EMPTY_STRING),
|
|
375
|
+
arrayMap(args, (arg) => arg ?? null),
|
|
349
376
|
);
|
|
350
377
|
const getPlaceholders = (array) =>
|
|
351
378
|
arrayJoin(
|
|
@@ -353,7 +380,7 @@ const getPlaceholders = (array) =>
|
|
|
353
380
|
COMMA,
|
|
354
381
|
);
|
|
355
382
|
|
|
356
|
-
const
|
|
383
|
+
const jsonStringWithMap = (obj) =>
|
|
357
384
|
JSON.stringify(obj, (_key, value) =>
|
|
358
385
|
isInstanceOf(value, Map) ? object.fromEntries([...value]) : value,
|
|
359
386
|
);
|
|
@@ -361,6 +388,24 @@ const jsonParse = JSON.parse;
|
|
|
361
388
|
|
|
362
389
|
const scheduleRunning = mapNew();
|
|
363
390
|
const scheduleActions = mapNew();
|
|
391
|
+
const getStoreFunctions = (supportsMergeableStore, store) =>
|
|
392
|
+
!supportsMergeableStore || isUndefined(store.getMergeableContent)
|
|
393
|
+
? [
|
|
394
|
+
0,
|
|
395
|
+
store.getContent,
|
|
396
|
+
store.getTransactionChanges,
|
|
397
|
+
([changedTables, changedValues]) =>
|
|
398
|
+
!objIsEmpty(changedTables) || !objIsEmpty(changedValues),
|
|
399
|
+
store.setContent,
|
|
400
|
+
]
|
|
401
|
+
: [
|
|
402
|
+
1,
|
|
403
|
+
store.getMergeableContent,
|
|
404
|
+
store.getTransactionMergeableChanges,
|
|
405
|
+
([[changedTables], [changedValues]]) =>
|
|
406
|
+
!objIsEmpty(changedTables) || !objIsEmpty(changedValues),
|
|
407
|
+
store.setDefaultContent,
|
|
408
|
+
];
|
|
364
409
|
const createCustomPersister = (
|
|
365
410
|
store,
|
|
366
411
|
getPersisted,
|
|
@@ -368,18 +413,25 @@ const createCustomPersister = (
|
|
|
368
413
|
addPersisterListener,
|
|
369
414
|
delPersisterListener,
|
|
370
415
|
onIgnoredError,
|
|
371
|
-
|
|
416
|
+
supportsMergeableStore,
|
|
417
|
+
extra = {},
|
|
372
418
|
scheduleId = [],
|
|
373
419
|
) => {
|
|
374
|
-
let listenerId;
|
|
375
420
|
let loadSave = 0;
|
|
376
421
|
let loads = 0;
|
|
377
422
|
let saves = 0;
|
|
378
|
-
let listening = 0;
|
|
379
423
|
let action;
|
|
380
|
-
let
|
|
424
|
+
let autoLoadHandle;
|
|
425
|
+
let autoSaveListenerId;
|
|
381
426
|
mapEnsure(scheduleRunning, scheduleId, () => 0);
|
|
382
427
|
mapEnsure(scheduleActions, scheduleId, () => []);
|
|
428
|
+
const [
|
|
429
|
+
isMergeableStore,
|
|
430
|
+
getContent,
|
|
431
|
+
getChanges,
|
|
432
|
+
hasChanges,
|
|
433
|
+
setDefaultContent,
|
|
434
|
+
] = getStoreFunctions(supportsMergeableStore, store);
|
|
383
435
|
const run = async () => {
|
|
384
436
|
/* istanbul ignore else */
|
|
385
437
|
if (!mapGet(scheduleRunning, scheduleId)) {
|
|
@@ -411,48 +463,54 @@ const createCustomPersister = (
|
|
|
411
463
|
}
|
|
412
464
|
return persister;
|
|
413
465
|
};
|
|
466
|
+
const setContentOrChanges = (contentOrChanges) => {
|
|
467
|
+
(isMergeableStore && isArray(contentOrChanges?.[0])
|
|
468
|
+
? contentOrChanges?.[2] === 1
|
|
469
|
+
? store.applyMergeableChanges
|
|
470
|
+
: store.setMergeableContent
|
|
471
|
+
: contentOrChanges?.[2] === 1
|
|
472
|
+
? store.applyChanges
|
|
473
|
+
: store.setContent)(contentOrChanges);
|
|
474
|
+
};
|
|
414
475
|
const persister = {
|
|
415
|
-
load: async (
|
|
476
|
+
load: async (initialContent) =>
|
|
416
477
|
await loadLock(async () => {
|
|
417
478
|
try {
|
|
418
|
-
|
|
419
|
-
} catch {
|
|
420
|
-
|
|
479
|
+
setContentOrChanges(await getPersisted());
|
|
480
|
+
} catch (error) {
|
|
481
|
+
onIgnoredError?.(error);
|
|
482
|
+
if (initialContent) {
|
|
483
|
+
setDefaultContent(initialContent);
|
|
484
|
+
}
|
|
421
485
|
}
|
|
422
486
|
}),
|
|
423
|
-
startAutoLoad: async (
|
|
424
|
-
persister.stopAutoLoad();
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
)
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
store.setContent(getContent?.() ?? (await getPersisted()));
|
|
438
|
-
} catch (error) {
|
|
439
|
-
onIgnoredError?.(error);
|
|
440
|
-
}
|
|
441
|
-
});
|
|
442
|
-
}
|
|
487
|
+
startAutoLoad: async (initialContent) => {
|
|
488
|
+
await persister.stopAutoLoad().load(initialContent);
|
|
489
|
+
autoLoadHandle = addPersisterListener(
|
|
490
|
+
async (getContent2, getChanges2) => {
|
|
491
|
+
const changes = getChanges2?.();
|
|
492
|
+
await loadLock(async () => {
|
|
493
|
+
try {
|
|
494
|
+
setContentOrChanges(
|
|
495
|
+
changes ?? getContent2?.() ?? (await getPersisted()),
|
|
496
|
+
);
|
|
497
|
+
} catch (error) {
|
|
498
|
+
onIgnoredError?.(error);
|
|
499
|
+
}
|
|
500
|
+
});
|
|
443
501
|
},
|
|
444
502
|
);
|
|
445
503
|
return persister;
|
|
446
504
|
},
|
|
447
505
|
stopAutoLoad: () => {
|
|
448
|
-
if (
|
|
449
|
-
delPersisterListener(
|
|
450
|
-
|
|
451
|
-
listening = 0;
|
|
506
|
+
if (autoLoadHandle) {
|
|
507
|
+
delPersisterListener(autoLoadHandle);
|
|
508
|
+
autoLoadHandle = void 0;
|
|
452
509
|
}
|
|
453
510
|
return persister;
|
|
454
511
|
},
|
|
455
|
-
|
|
512
|
+
isAutoLoading: () => !isUndefined(autoLoadHandle),
|
|
513
|
+
save: async (getChanges2) => {
|
|
456
514
|
/* istanbul ignore else */
|
|
457
515
|
if (loadSave != 1) {
|
|
458
516
|
loadSave = 2;
|
|
@@ -461,7 +519,7 @@ const createCustomPersister = (
|
|
|
461
519
|
}
|
|
462
520
|
await persister.schedule(async () => {
|
|
463
521
|
try {
|
|
464
|
-
await setPersisted(
|
|
522
|
+
await setPersisted(getContent, getChanges2);
|
|
465
523
|
} catch (error) {
|
|
466
524
|
/* istanbul ignore next */
|
|
467
525
|
onIgnoredError?.(error);
|
|
@@ -473,21 +531,20 @@ const createCustomPersister = (
|
|
|
473
531
|
},
|
|
474
532
|
startAutoSave: async () => {
|
|
475
533
|
await persister.stopAutoSave().save();
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
},
|
|
483
|
-
);
|
|
534
|
+
autoSaveListenerId = store.addDidFinishTransactionListener(() => {
|
|
535
|
+
const changes = getChanges();
|
|
536
|
+
if (hasChanges(changes)) {
|
|
537
|
+
persister.save(() => changes);
|
|
538
|
+
}
|
|
539
|
+
});
|
|
484
540
|
return persister;
|
|
485
541
|
},
|
|
486
542
|
stopAutoSave: () => {
|
|
487
|
-
ifNotUndefined(
|
|
488
|
-
|
|
543
|
+
ifNotUndefined(autoSaveListenerId, store.delListener);
|
|
544
|
+
autoSaveListenerId = void 0;
|
|
489
545
|
return persister;
|
|
490
546
|
},
|
|
547
|
+
isAutoSaving: () => !isUndefined(autoSaveListenerId),
|
|
491
548
|
schedule: async (...actions) => {
|
|
492
549
|
arrayPush(mapGet(scheduleActions, scheduleId), ...actions);
|
|
493
550
|
await run();
|
|
@@ -496,10 +553,8 @@ const createCustomPersister = (
|
|
|
496
553
|
getStore: () => store,
|
|
497
554
|
destroy: () => persister.stopAutoLoad().stopAutoSave(),
|
|
498
555
|
getStats: () => ({loads, saves}),
|
|
556
|
+
...extra,
|
|
499
557
|
};
|
|
500
|
-
if (getThing) {
|
|
501
|
-
persister[getThing] = () => thing;
|
|
502
|
-
}
|
|
503
558
|
return objFreeze(persister);
|
|
504
559
|
};
|
|
505
560
|
|
|
@@ -514,9 +569,10 @@ const createJsonSqlitePersister = (
|
|
|
514
569
|
managedTableNames,
|
|
515
570
|
db,
|
|
516
571
|
getThing,
|
|
572
|
+
useOnConflict,
|
|
517
573
|
) => {
|
|
518
574
|
const [refreshSchema, loadTable, saveTable, transaction] =
|
|
519
|
-
getCommandFunctions(cmd, managedTableNames, onIgnoredError);
|
|
575
|
+
getCommandFunctions(cmd, managedTableNames, onIgnoredError, useOnConflict);
|
|
520
576
|
const getPersisted = async () =>
|
|
521
577
|
await transaction(async () => {
|
|
522
578
|
await refreshSchema();
|
|
@@ -533,7 +589,9 @@ const createJsonSqlitePersister = (
|
|
|
533
589
|
storeTableName,
|
|
534
590
|
DEFAULT_ROW_ID_COLUMN_NAME,
|
|
535
591
|
{
|
|
536
|
-
[SINGLE_ROW_ID]: {
|
|
592
|
+
[SINGLE_ROW_ID]: {
|
|
593
|
+
[STORE_COLUMN]: jsonStringWithMap(getContent() ?? null),
|
|
594
|
+
},
|
|
537
595
|
},
|
|
538
596
|
true,
|
|
539
597
|
true,
|
|
@@ -546,7 +604,8 @@ const createJsonSqlitePersister = (
|
|
|
546
604
|
addPersisterListener,
|
|
547
605
|
delPersisterListener,
|
|
548
606
|
onIgnoredError,
|
|
549
|
-
|
|
607
|
+
false,
|
|
608
|
+
{[getThing]: () => db},
|
|
550
609
|
db,
|
|
551
610
|
);
|
|
552
611
|
return persister;
|
|
@@ -566,9 +625,10 @@ const createTabularSqlitePersister = (
|
|
|
566
625
|
managedTableNames,
|
|
567
626
|
db,
|
|
568
627
|
getThing,
|
|
628
|
+
useOnConflict,
|
|
569
629
|
) => {
|
|
570
630
|
const [refreshSchema, loadTable, saveTable, transaction] =
|
|
571
|
-
getCommandFunctions(cmd, managedTableNames, onIgnoredError);
|
|
631
|
+
getCommandFunctions(cmd, managedTableNames, onIgnoredError, useOnConflict);
|
|
572
632
|
const saveTables = async (tables, partial) =>
|
|
573
633
|
await promiseAll(
|
|
574
634
|
mapMap(
|
|
@@ -577,12 +637,11 @@ const createTabularSqlitePersister = (
|
|
|
577
637
|
[tableName, rowIdColumnName, deleteEmptyColumns, deleteEmptyTable],
|
|
578
638
|
tableId,
|
|
579
639
|
) => {
|
|
580
|
-
|
|
581
|
-
if (!partial || table !== void 0) {
|
|
640
|
+
if (!partial || objHas(tables, tableId)) {
|
|
582
641
|
await saveTable(
|
|
583
642
|
tableName,
|
|
584
643
|
rowIdColumnName,
|
|
585
|
-
|
|
644
|
+
tables[tableId],
|
|
586
645
|
deleteEmptyColumns,
|
|
587
646
|
deleteEmptyTable,
|
|
588
647
|
partial,
|
|
@@ -632,11 +691,11 @@ const createTabularSqlitePersister = (
|
|
|
632
691
|
? [tables, values]
|
|
633
692
|
: void 0;
|
|
634
693
|
});
|
|
635
|
-
const setPersisted = async (getContent,
|
|
694
|
+
const setPersisted = async (getContent, getChanges) =>
|
|
636
695
|
await transaction(async () => {
|
|
637
696
|
await refreshSchema();
|
|
638
|
-
if (!isUndefined(
|
|
639
|
-
const [tableChanges, valueChanges] =
|
|
697
|
+
if (!isUndefined(getChanges)) {
|
|
698
|
+
const [tableChanges, valueChanges] = getChanges();
|
|
640
699
|
await saveTables(tableChanges, true);
|
|
641
700
|
await saveValues(valueChanges, true);
|
|
642
701
|
} else {
|
|
@@ -652,7 +711,8 @@ const createTabularSqlitePersister = (
|
|
|
652
711
|
addPersisterListener,
|
|
653
712
|
delPersisterListener,
|
|
654
713
|
onIgnoredError,
|
|
655
|
-
|
|
714
|
+
false,
|
|
715
|
+
{[getThing]: () => db},
|
|
656
716
|
db,
|
|
657
717
|
);
|
|
658
718
|
return persister;
|
|
@@ -689,7 +749,7 @@ const getDefaultedTabularConfigMap = (
|
|
|
689
749
|
filter,
|
|
690
750
|
) => {
|
|
691
751
|
const configMap = mapNew();
|
|
692
|
-
|
|
752
|
+
objToArray(configsObj, (configObj, id) => {
|
|
693
753
|
const defaultedConfig = slice(
|
|
694
754
|
objValues(
|
|
695
755
|
objMerge(
|
|
@@ -764,6 +824,7 @@ const createSqlitePersister = (
|
|
|
764
824
|
onIgnoredError,
|
|
765
825
|
db,
|
|
766
826
|
getThing = 'getDb',
|
|
827
|
+
useOnConflict,
|
|
767
828
|
) => {
|
|
768
829
|
let dataVersion;
|
|
769
830
|
let schemaVersion;
|
|
@@ -826,6 +887,7 @@ const createSqlitePersister = (
|
|
|
826
887
|
collValues(managedTableNamesSet),
|
|
827
888
|
db,
|
|
828
889
|
getThing,
|
|
890
|
+
useOnConflict,
|
|
829
891
|
);
|
|
830
892
|
};
|
|
831
893
|
|