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