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