tinybase 5.0.0-beta.0 → 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/bin/cli.js +1 -1
- 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 +254 -235
- package/lib/debug/indexes.js +10 -6
- package/lib/debug/mergeable-store.js +2230 -0
- package/lib/debug/metrics.js +10 -6
- package/lib/debug/persisters/persister-automerge.js +113 -87
- package/lib/debug/persisters/persister-browser.js +95 -57
- package/lib/debug/persisters/persister-cr-sqlite-wasm.js +175 -109
- package/lib/debug/persisters/persister-electric-sql.js +176 -109
- package/lib/debug/persisters/persister-expo-sqlite-next.js +176 -110
- package/lib/debug/persisters/persister-expo-sqlite.js +175 -109
- package/lib/debug/persisters/persister-file.js +94 -57
- package/lib/debug/persisters/persister-indexed-db.js +94 -57
- package/lib/debug/persisters/persister-libsql.js +913 -0
- package/lib/debug/persisters/persister-partykit-client.js +90 -59
- package/lib/debug/persisters/persister-partykit-server.js +19 -26
- package/lib/debug/persisters/persister-powersync.js +928 -0
- package/lib/debug/persisters/persister-remote.js +86 -53
- package/lib/debug/persisters/persister-sqlite-wasm.js +175 -109
- package/lib/debug/persisters/persister-sqlite3.js +175 -109
- package/lib/debug/persisters/persister-yjs.js +111 -84
- package/lib/debug/persisters.js +82 -50
- package/lib/debug/queries.js +18 -12
- package/lib/debug/relationships.js +10 -6
- package/lib/debug/store.js +150 -127
- 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 +1281 -409
- package/lib/debug/tools.js +41 -64
- package/lib/debug/ui-react-dom.js +277 -213
- package/lib/debug/ui-react.js +213 -198
- 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 +7 -3
- 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 +235 -95
- 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/queries.d.ts +4 -3
- package/lib/types/with-schemas/internal/store.d.ts +8 -3
- 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 +8 -4
- 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 +259 -102
- 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 +68 -48
- package/readme.md +2 -2
|
@@ -42,8 +42,7 @@ const collDel = (coll, keyOrValue) => coll?.delete(keyOrValue);
|
|
|
42
42
|
|
|
43
43
|
const object = Object;
|
|
44
44
|
const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
|
|
45
|
-
const
|
|
46
|
-
const objFreeze = object.freeze;
|
|
45
|
+
const objEntries = object.entries;
|
|
47
46
|
const isObject = (obj) =>
|
|
48
47
|
!isUndefined(obj) &&
|
|
49
48
|
ifNotUndefined(
|
|
@@ -51,18 +50,20 @@ const isObject = (obj) =>
|
|
|
51
50
|
(objPrototype) =>
|
|
52
51
|
objPrototype == object.prototype ||
|
|
53
52
|
isUndefined(getPrototypeOf(objPrototype)),
|
|
53
|
+
/* istanbul ignore next */
|
|
54
54
|
() => true,
|
|
55
55
|
);
|
|
56
|
+
const objIds = object.keys;
|
|
57
|
+
const objFreeze = object.freeze;
|
|
56
58
|
const objNew = (entries = []) => object.fromEntries(entries);
|
|
57
59
|
const objMerge = (...objs) => object.assign({}, ...objs);
|
|
58
|
-
const
|
|
59
|
-
const objHas = (obj, id) => !isUndefined(objGet(obj, id));
|
|
60
|
+
const objHas = (obj, id) => id in obj;
|
|
60
61
|
const objDel = (obj, id) => {
|
|
61
62
|
delete obj[id];
|
|
62
63
|
return obj;
|
|
63
64
|
};
|
|
64
|
-
const
|
|
65
|
-
arrayMap(
|
|
65
|
+
const objToArray = (obj, cb) =>
|
|
66
|
+
arrayMap(objEntries(obj), ([id, value]) => cb(value, id));
|
|
66
67
|
const objValues = (obj) => object.values(obj);
|
|
67
68
|
const objSize = (obj) => size(objIds(obj));
|
|
68
69
|
const objIsEmpty = (obj) => isObject(obj) && objSize(obj) == 0;
|
|
@@ -76,14 +77,16 @@ const mapMap = (coll, cb) =>
|
|
|
76
77
|
arrayMap([...(coll?.entries() ?? [])], ([key, value]) => cb(value, key));
|
|
77
78
|
const mapSet = (map, key, value) =>
|
|
78
79
|
isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
|
|
79
|
-
const mapEnsure = (map, key, getDefaultValue) => {
|
|
80
|
+
const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
|
|
80
81
|
if (!collHas(map, key)) {
|
|
81
82
|
mapSet(map, key, getDefaultValue());
|
|
83
|
+
} else {
|
|
84
|
+
hadExistingValue?.(mapGet(map, key));
|
|
82
85
|
}
|
|
83
86
|
return mapGet(map, key);
|
|
84
87
|
};
|
|
85
88
|
const mapMatch = (map, obj, set, del = mapSet) => {
|
|
86
|
-
|
|
89
|
+
objToArray(obj, (value, id) => set(map, id, value));
|
|
87
90
|
mapForEach(map, (id) => (objHas(obj, id) ? 0 : del(map, id)));
|
|
88
91
|
return map;
|
|
89
92
|
};
|
|
@@ -96,10 +99,18 @@ const setNew = (entryOrEntries) =>
|
|
|
96
99
|
);
|
|
97
100
|
const setAdd = (set, value) => set?.add(value);
|
|
98
101
|
|
|
102
|
+
const TABLE = 'TABLE';
|
|
103
|
+
const ALTER_TABLE = 'ALTER ' + TABLE;
|
|
104
|
+
const DELETE_FROM = 'DELETE FROM';
|
|
99
105
|
const SELECT_STAR_FROM = SELECT + '*FROM';
|
|
100
106
|
const FROM_PRAGMA_TABLE = 'FROM pragma_table_';
|
|
101
107
|
const WHERE = 'WHERE';
|
|
102
|
-
const getCommandFunctions = (
|
|
108
|
+
const getCommandFunctions = (
|
|
109
|
+
cmd,
|
|
110
|
+
managedTableNames,
|
|
111
|
+
onIgnoredError,
|
|
112
|
+
useOnConflict,
|
|
113
|
+
) => {
|
|
103
114
|
const schemaMap = mapNew();
|
|
104
115
|
const canSelect = (tableName, rowIdColumnName) =>
|
|
105
116
|
!isUndefined(mapGet(mapGet(schemaMap, tableName), rowIdColumnName));
|
|
@@ -112,7 +123,7 @@ const getCommandFunctions = (cmd, managedTableNames, onIgnoredError) => {
|
|
|
112
123
|
await cmd(
|
|
113
124
|
'SELECT name ' +
|
|
114
125
|
FROM_PRAGMA_TABLE +
|
|
115
|
-
`list WHERE schema='main'AND
|
|
126
|
+
`list WHERE schema='main'AND(type='table'OR type='view')AND name IN(` +
|
|
116
127
|
getPlaceholders(managedTableNames) +
|
|
117
128
|
`)ORDER BY name`,
|
|
118
129
|
managedTableNames,
|
|
@@ -167,33 +178,38 @@ const getCommandFunctions = (cmd, managedTableNames, onIgnoredError) => {
|
|
|
167
178
|
const saveTable = async (
|
|
168
179
|
tableName,
|
|
169
180
|
rowIdColumnName,
|
|
170
|
-
|
|
181
|
+
content,
|
|
171
182
|
deleteEmptyColumns,
|
|
172
183
|
deleteEmptyTable,
|
|
173
184
|
partial = false,
|
|
174
185
|
) => {
|
|
175
|
-
const
|
|
176
|
-
|
|
177
|
-
arrayMap(objIds(
|
|
186
|
+
const tableCellOrValueIds = setNew();
|
|
187
|
+
objToArray(content ?? {}, (contentRow) =>
|
|
188
|
+
arrayMap(objIds(contentRow ?? {}), (cellOrValueId) =>
|
|
189
|
+
setAdd(tableCellOrValueIds, cellOrValueId),
|
|
190
|
+
),
|
|
178
191
|
);
|
|
179
|
-
const tableColumnNames = collValues(
|
|
192
|
+
const tableColumnNames = collValues(tableCellOrValueIds);
|
|
180
193
|
if (
|
|
181
194
|
!partial &&
|
|
182
195
|
deleteEmptyTable &&
|
|
183
196
|
arrayIsEmpty(tableColumnNames) &&
|
|
184
197
|
collHas(schemaMap, tableName)
|
|
185
198
|
) {
|
|
186
|
-
await cmd('DROP
|
|
199
|
+
await cmd('DROP ' + TABLE + escapeId(tableName));
|
|
187
200
|
mapSet(schemaMap, tableName);
|
|
188
201
|
return;
|
|
189
202
|
}
|
|
190
203
|
if (!arrayIsEmpty(tableColumnNames) && !collHas(schemaMap, tableName)) {
|
|
191
204
|
await cmd(
|
|
192
|
-
`CREATE
|
|
193
|
-
|
|
194
|
-
|
|
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
|
|
|
@@ -515,9 +570,11 @@ const createJsonSqlitePersister = (
|
|
|
515
570
|
[storeTableName],
|
|
516
571
|
managedTableNames,
|
|
517
572
|
db,
|
|
573
|
+
getThing,
|
|
574
|
+
useOnConflict,
|
|
518
575
|
) => {
|
|
519
576
|
const [refreshSchema, loadTable, saveTable, transaction] =
|
|
520
|
-
getCommandFunctions(cmd, managedTableNames, onIgnoredError);
|
|
577
|
+
getCommandFunctions(cmd, managedTableNames, onIgnoredError, useOnConflict);
|
|
521
578
|
const getPersisted = async () =>
|
|
522
579
|
await transaction(async () => {
|
|
523
580
|
await refreshSchema();
|
|
@@ -534,7 +591,9 @@ const createJsonSqlitePersister = (
|
|
|
534
591
|
storeTableName,
|
|
535
592
|
DEFAULT_ROW_ID_COLUMN_NAME,
|
|
536
593
|
{
|
|
537
|
-
[SINGLE_ROW_ID]: {
|
|
594
|
+
[SINGLE_ROW_ID]: {
|
|
595
|
+
[STORE_COLUMN]: jsonStringWithMap(getContent() ?? null),
|
|
596
|
+
},
|
|
538
597
|
},
|
|
539
598
|
true,
|
|
540
599
|
true,
|
|
@@ -547,7 +606,8 @@ const createJsonSqlitePersister = (
|
|
|
547
606
|
addPersisterListener,
|
|
548
607
|
delPersisterListener,
|
|
549
608
|
onIgnoredError,
|
|
550
|
-
|
|
609
|
+
false,
|
|
610
|
+
{[getThing]: () => db},
|
|
551
611
|
db,
|
|
552
612
|
);
|
|
553
613
|
return persister;
|
|
@@ -566,9 +626,11 @@ const createTabularSqlitePersister = (
|
|
|
566
626
|
],
|
|
567
627
|
managedTableNames,
|
|
568
628
|
db,
|
|
629
|
+
getThing,
|
|
630
|
+
useOnConflict,
|
|
569
631
|
) => {
|
|
570
632
|
const [refreshSchema, loadTable, saveTable, transaction] =
|
|
571
|
-
getCommandFunctions(cmd, managedTableNames, onIgnoredError);
|
|
633
|
+
getCommandFunctions(cmd, managedTableNames, onIgnoredError, useOnConflict);
|
|
572
634
|
const saveTables = async (tables, partial) =>
|
|
573
635
|
await promiseAll(
|
|
574
636
|
mapMap(
|
|
@@ -577,12 +639,11 @@ const createTabularSqlitePersister = (
|
|
|
577
639
|
[tableName, rowIdColumnName, deleteEmptyColumns, deleteEmptyTable],
|
|
578
640
|
tableId,
|
|
579
641
|
) => {
|
|
580
|
-
|
|
581
|
-
if (!partial || table !== void 0) {
|
|
642
|
+
if (!partial || objHas(tables, tableId)) {
|
|
582
643
|
await saveTable(
|
|
583
644
|
tableName,
|
|
584
645
|
rowIdColumnName,
|
|
585
|
-
|
|
646
|
+
tables[tableId],
|
|
586
647
|
deleteEmptyColumns,
|
|
587
648
|
deleteEmptyTable,
|
|
588
649
|
partial,
|
|
@@ -632,11 +693,11 @@ const createTabularSqlitePersister = (
|
|
|
632
693
|
? [tables, values]
|
|
633
694
|
: void 0;
|
|
634
695
|
});
|
|
635
|
-
const setPersisted = async (getContent,
|
|
696
|
+
const setPersisted = async (getContent, getChanges) =>
|
|
636
697
|
await transaction(async () => {
|
|
637
698
|
await refreshSchema();
|
|
638
|
-
if (!isUndefined(
|
|
639
|
-
const [tableChanges, valueChanges] =
|
|
699
|
+
if (!isUndefined(getChanges)) {
|
|
700
|
+
const [tableChanges, valueChanges] = getChanges();
|
|
640
701
|
await saveTables(tableChanges, true);
|
|
641
702
|
await saveValues(valueChanges, true);
|
|
642
703
|
} else {
|
|
@@ -652,7 +713,8 @@ const createTabularSqlitePersister = (
|
|
|
652
713
|
addPersisterListener,
|
|
653
714
|
delPersisterListener,
|
|
654
715
|
onIgnoredError,
|
|
655
|
-
|
|
716
|
+
false,
|
|
717
|
+
{[getThing]: () => db},
|
|
656
718
|
db,
|
|
657
719
|
);
|
|
658
720
|
return persister;
|
|
@@ -689,7 +751,7 @@ const getDefaultedTabularConfigMap = (
|
|
|
689
751
|
filter,
|
|
690
752
|
) => {
|
|
691
753
|
const configMap = mapNew();
|
|
692
|
-
|
|
754
|
+
objToArray(configsObj, (configObj, id) => {
|
|
693
755
|
const defaultedConfig = slice(
|
|
694
756
|
objValues(
|
|
695
757
|
objMerge(
|
|
@@ -763,6 +825,8 @@ const createSqlitePersister = (
|
|
|
763
825
|
onSqlCommand,
|
|
764
826
|
onIgnoredError,
|
|
765
827
|
db,
|
|
828
|
+
getThing = 'getDb',
|
|
829
|
+
useOnConflict,
|
|
766
830
|
) => {
|
|
767
831
|
let dataVersion;
|
|
768
832
|
let schemaVersion;
|
|
@@ -824,6 +888,8 @@ const createSqlitePersister = (
|
|
|
824
888
|
defaultedConfig,
|
|
825
889
|
collValues(managedTableNamesSet),
|
|
826
890
|
db,
|
|
891
|
+
getThing,
|
|
892
|
+
useOnConflict,
|
|
827
893
|
);
|
|
828
894
|
};
|
|
829
895
|
|
|
@@ -837,7 +903,7 @@ const createExpoSqliteNextPersister = (
|
|
|
837
903
|
createSqlitePersister(
|
|
838
904
|
store,
|
|
839
905
|
configOrStoreTableName,
|
|
840
|
-
async (sql, args = []) => await db.
|
|
906
|
+
async (sql, args = []) => await db.getAllAsync(sql, args),
|
|
841
907
|
(listener) =>
|
|
842
908
|
addDatabaseChangeListener(({tableName}) => listener(tableName)),
|
|
843
909
|
(subscription) => subscription.remove(),
|