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