tinybase 5.0.0-beta.1 → 5.0.0-beta.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/checkpoints.js +1 -1
- package/lib/checkpoints.js.gz +0 -0
- package/lib/cjs/checkpoints.cjs +1 -1
- package/lib/cjs/checkpoints.cjs.gz +0 -0
- package/lib/cjs/indexes.cjs +1 -1
- package/lib/cjs/indexes.cjs.gz +0 -0
- package/lib/cjs/mergeable-store.cjs +1 -0
- package/lib/cjs/mergeable-store.cjs.gz +0 -0
- package/lib/cjs/metrics.cjs +1 -1
- package/lib/cjs/metrics.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-automerge.cjs +1 -1
- package/lib/cjs/persisters/persister-automerge.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-browser.cjs +1 -1
- package/lib/cjs/persisters/persister-browser.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-cr-sqlite-wasm.cjs +1 -1
- package/lib/cjs/persisters/persister-cr-sqlite-wasm.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-electric-sql.cjs +1 -1
- package/lib/cjs/persisters/persister-electric-sql.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-expo-sqlite-next.cjs +1 -1
- package/lib/cjs/persisters/persister-expo-sqlite-next.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-expo-sqlite.cjs +1 -1
- package/lib/cjs/persisters/persister-expo-sqlite.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-file.cjs +1 -1
- package/lib/cjs/persisters/persister-file.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-indexed-db.cjs +1 -1
- package/lib/cjs/persisters/persister-indexed-db.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-libsql.cjs +1 -0
- package/lib/cjs/persisters/persister-libsql.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-partykit-client.cjs +1 -1
- package/lib/cjs/persisters/persister-partykit-client.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-partykit-server.cjs +1 -1
- package/lib/cjs/persisters/persister-partykit-server.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-powersync.cjs +1 -0
- package/lib/cjs/persisters/persister-powersync.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-remote.cjs +1 -1
- package/lib/cjs/persisters/persister-remote.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-sqlite-wasm.cjs +1 -1
- package/lib/cjs/persisters/persister-sqlite-wasm.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-sqlite3.cjs +1 -1
- package/lib/cjs/persisters/persister-sqlite3.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-yjs.cjs +1 -1
- package/lib/cjs/persisters/persister-yjs.cjs.gz +0 -0
- package/lib/cjs/persisters.cjs +1 -1
- package/lib/cjs/persisters.cjs.gz +0 -0
- package/lib/cjs/queries.cjs +1 -1
- package/lib/cjs/queries.cjs.gz +0 -0
- package/lib/cjs/relationships.cjs +1 -1
- package/lib/cjs/relationships.cjs.gz +0 -0
- package/lib/cjs/store.cjs +1 -1
- package/lib/cjs/store.cjs.gz +0 -0
- package/lib/cjs/synchronizers/synchronizer-local.cjs +1 -0
- package/lib/cjs/synchronizers/synchronizer-local.cjs.gz +0 -0
- package/lib/cjs/synchronizers/synchronizer-ws-client.cjs +1 -0
- package/lib/cjs/synchronizers/synchronizer-ws-client.cjs.gz +0 -0
- package/lib/cjs/synchronizers/synchronizer-ws-server.cjs +1 -0
- package/lib/cjs/synchronizers/synchronizer-ws-server.cjs.gz +0 -0
- package/lib/cjs/synchronizers.cjs +1 -0
- package/lib/cjs/synchronizers.cjs.gz +0 -0
- package/lib/cjs/tinybase.cjs +1 -1
- package/lib/cjs/tinybase.cjs.gz +0 -0
- package/lib/cjs/tools.cjs +1 -1
- package/lib/cjs/tools.cjs.gz +0 -0
- package/lib/cjs/ui-react-dom-debug.cjs +1 -1
- package/lib/cjs/ui-react-dom-debug.cjs.gz +0 -0
- package/lib/cjs/ui-react-dom.cjs +1 -1
- package/lib/cjs/ui-react-dom.cjs.gz +0 -0
- package/lib/cjs/ui-react.cjs +1 -1
- package/lib/cjs/ui-react.cjs.gz +0 -0
- package/lib/cjs-es6/checkpoints.cjs +1 -1
- package/lib/cjs-es6/checkpoints.cjs.gz +0 -0
- package/lib/cjs-es6/indexes.cjs +1 -1
- package/lib/cjs-es6/indexes.cjs.gz +0 -0
- package/lib/cjs-es6/mergeable-store.cjs +1 -0
- package/lib/cjs-es6/mergeable-store.cjs.gz +0 -0
- package/lib/cjs-es6/metrics.cjs +1 -1
- package/lib/cjs-es6/metrics.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-automerge.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-automerge.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-browser.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-browser.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-electric-sql.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-electric-sql.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-expo-sqlite-next.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-expo-sqlite-next.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-expo-sqlite.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-expo-sqlite.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-file.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-file.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-indexed-db.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-indexed-db.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-libsql.cjs +1 -0
- package/lib/cjs-es6/persisters/persister-libsql.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-partykit-client.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-partykit-client.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-partykit-server.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-partykit-server.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-powersync.cjs +1 -0
- package/lib/cjs-es6/persisters/persister-powersync.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-remote.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-remote.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-sqlite3.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-sqlite3.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-yjs.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-yjs.cjs.gz +0 -0
- package/lib/cjs-es6/persisters.cjs +1 -1
- package/lib/cjs-es6/persisters.cjs.gz +0 -0
- package/lib/cjs-es6/queries.cjs +1 -1
- package/lib/cjs-es6/queries.cjs.gz +0 -0
- package/lib/cjs-es6/relationships.cjs +1 -1
- package/lib/cjs-es6/relationships.cjs.gz +0 -0
- package/lib/cjs-es6/store.cjs +1 -1
- package/lib/cjs-es6/store.cjs.gz +0 -0
- package/lib/cjs-es6/synchronizers/synchronizer-local.cjs +1 -0
- package/lib/cjs-es6/synchronizers/synchronizer-local.cjs.gz +0 -0
- package/lib/cjs-es6/synchronizers/synchronizer-ws-client.cjs +1 -0
- package/lib/cjs-es6/synchronizers/synchronizer-ws-client.cjs.gz +0 -0
- package/lib/cjs-es6/synchronizers/synchronizer-ws-server.cjs +1 -0
- package/lib/cjs-es6/synchronizers/synchronizer-ws-server.cjs.gz +0 -0
- package/lib/cjs-es6/synchronizers.cjs +1 -0
- package/lib/cjs-es6/synchronizers.cjs.gz +0 -0
- package/lib/cjs-es6/tinybase.cjs +1 -1
- package/lib/cjs-es6/tinybase.cjs.gz +0 -0
- package/lib/cjs-es6/tools.cjs +1 -1
- package/lib/cjs-es6/tools.cjs.gz +0 -0
- package/lib/cjs-es6/ui-react-dom-debug.cjs +1 -1
- package/lib/cjs-es6/ui-react-dom-debug.cjs.gz +0 -0
- package/lib/cjs-es6/ui-react-dom.cjs +1 -1
- package/lib/cjs-es6/ui-react-dom.cjs.gz +0 -0
- package/lib/cjs-es6/ui-react.cjs +1 -1
- package/lib/cjs-es6/ui-react.cjs.gz +0 -0
- package/lib/debug/checkpoints.js +3 -1
- package/lib/debug/indexes.js +3 -1
- package/lib/debug/mergeable-store.js +2230 -0
- package/lib/debug/metrics.js +3 -1
- package/lib/debug/persisters/persister-automerge.js +167 -131
- package/lib/debug/persisters/persister-browser.js +155 -102
- package/lib/debug/persisters/persister-cr-sqlite-wasm.js +225 -152
- package/lib/debug/persisters/persister-electric-sql.js +225 -152
- package/lib/debug/persisters/persister-expo-sqlite-next.js +225 -152
- package/lib/debug/persisters/persister-expo-sqlite.js +225 -152
- package/lib/debug/persisters/persister-file.js +149 -101
- package/lib/debug/persisters/persister-indexed-db.js +146 -100
- package/lib/debug/persisters/persister-libsql.js +924 -0
- package/lib/debug/persisters/persister-partykit-client.js +146 -104
- package/lib/debug/persisters/persister-partykit-server.js +17 -25
- package/lib/debug/persisters/persister-powersync.js +939 -0
- package/lib/debug/persisters/persister-remote.js +141 -97
- package/lib/debug/persisters/persister-sqlite-wasm.js +225 -152
- package/lib/debug/persisters/persister-sqlite3.js +225 -152
- package/lib/debug/persisters/persister-yjs.js +164 -127
- package/lib/debug/persisters.js +137 -94
- package/lib/debug/queries.js +9 -6
- package/lib/debug/relationships.js +3 -1
- package/lib/debug/store.js +147 -126
- package/lib/debug/synchronizers/synchronizer-local.js +571 -0
- package/lib/debug/synchronizers/synchronizer-ws-client.js +598 -0
- package/lib/debug/synchronizers/synchronizer-ws-server.js +241 -0
- package/lib/debug/synchronizers.js +531 -0
- package/lib/debug/tinybase.js +1080 -215
- package/lib/debug/tools.js +22 -21
- package/lib/debug/ui-react-dom.js +336 -258
- package/lib/debug/ui-react.js +55 -6
- package/lib/es6/checkpoints.js +1 -1
- package/lib/es6/checkpoints.js.gz +0 -0
- package/lib/es6/indexes.js +1 -1
- package/lib/es6/indexes.js.gz +0 -0
- package/lib/es6/mergeable-store.js +1 -0
- package/lib/es6/mergeable-store.js.gz +0 -0
- package/lib/es6/metrics.js +1 -1
- package/lib/es6/metrics.js.gz +0 -0
- package/lib/es6/persisters/persister-automerge.js +1 -1
- package/lib/es6/persisters/persister-automerge.js.gz +0 -0
- package/lib/es6/persisters/persister-browser.js +1 -1
- package/lib/es6/persisters/persister-browser.js.gz +0 -0
- package/lib/es6/persisters/persister-cr-sqlite-wasm.js +1 -1
- package/lib/es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
- package/lib/es6/persisters/persister-electric-sql.js +1 -1
- package/lib/es6/persisters/persister-electric-sql.js.gz +0 -0
- package/lib/es6/persisters/persister-expo-sqlite-next.js +1 -1
- package/lib/es6/persisters/persister-expo-sqlite-next.js.gz +0 -0
- package/lib/es6/persisters/persister-expo-sqlite.js +1 -1
- package/lib/es6/persisters/persister-expo-sqlite.js.gz +0 -0
- package/lib/es6/persisters/persister-file.js +1 -1
- package/lib/es6/persisters/persister-file.js.gz +0 -0
- package/lib/es6/persisters/persister-indexed-db.js +1 -1
- package/lib/es6/persisters/persister-indexed-db.js.gz +0 -0
- package/lib/es6/persisters/persister-libsql.js +1 -0
- package/lib/es6/persisters/persister-libsql.js.gz +0 -0
- package/lib/es6/persisters/persister-partykit-client.js +1 -1
- package/lib/es6/persisters/persister-partykit-client.js.gz +0 -0
- package/lib/es6/persisters/persister-partykit-server.js +1 -1
- package/lib/es6/persisters/persister-partykit-server.js.gz +0 -0
- package/lib/es6/persisters/persister-powersync.js +1 -0
- package/lib/es6/persisters/persister-powersync.js.gz +0 -0
- package/lib/es6/persisters/persister-remote.js +1 -1
- package/lib/es6/persisters/persister-remote.js.gz +0 -0
- package/lib/es6/persisters/persister-sqlite-wasm.js +1 -1
- package/lib/es6/persisters/persister-sqlite-wasm.js.gz +0 -0
- package/lib/es6/persisters/persister-sqlite3.js +1 -1
- package/lib/es6/persisters/persister-sqlite3.js.gz +0 -0
- package/lib/es6/persisters/persister-yjs.js +1 -1
- package/lib/es6/persisters/persister-yjs.js.gz +0 -0
- package/lib/es6/persisters.js +1 -1
- package/lib/es6/persisters.js.gz +0 -0
- package/lib/es6/queries.js +1 -1
- package/lib/es6/queries.js.gz +0 -0
- package/lib/es6/relationships.js +1 -1
- package/lib/es6/relationships.js.gz +0 -0
- package/lib/es6/store.js +1 -1
- package/lib/es6/store.js.gz +0 -0
- package/lib/es6/synchronizers/synchronizer-local.js +1 -0
- package/lib/es6/synchronizers/synchronizer-local.js.gz +0 -0
- package/lib/es6/synchronizers/synchronizer-ws-client.js +1 -0
- package/lib/es6/synchronizers/synchronizer-ws-client.js.gz +0 -0
- package/lib/es6/synchronizers/synchronizer-ws-server.js +1 -0
- package/lib/es6/synchronizers/synchronizer-ws-server.js.gz +0 -0
- package/lib/es6/synchronizers.js +1 -0
- package/lib/es6/synchronizers.js.gz +0 -0
- package/lib/es6/tinybase.js +1 -1
- package/lib/es6/tinybase.js.gz +0 -0
- package/lib/es6/tools.js +1 -1
- package/lib/es6/tools.js.gz +0 -0
- package/lib/es6/ui-react-dom-debug.js +1 -1
- package/lib/es6/ui-react-dom-debug.js.gz +0 -0
- package/lib/es6/ui-react-dom.js +1 -1
- package/lib/es6/ui-react-dom.js.gz +0 -0
- package/lib/es6/ui-react.js +1 -1
- package/lib/es6/ui-react.js.gz +0 -0
- package/lib/indexes.js +1 -1
- package/lib/indexes.js.gz +0 -0
- package/lib/mergeable-store.js +1 -0
- package/lib/mergeable-store.js.gz +0 -0
- package/lib/metrics.js +1 -1
- package/lib/metrics.js.gz +0 -0
- package/lib/persisters/persister-automerge.js +1 -1
- package/lib/persisters/persister-automerge.js.gz +0 -0
- package/lib/persisters/persister-browser.js +1 -1
- package/lib/persisters/persister-browser.js.gz +0 -0
- package/lib/persisters/persister-cr-sqlite-wasm.js +1 -1
- package/lib/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
- package/lib/persisters/persister-electric-sql.js +1 -1
- package/lib/persisters/persister-electric-sql.js.gz +0 -0
- package/lib/persisters/persister-expo-sqlite-next.js +1 -1
- package/lib/persisters/persister-expo-sqlite-next.js.gz +0 -0
- package/lib/persisters/persister-expo-sqlite.js +1 -1
- package/lib/persisters/persister-expo-sqlite.js.gz +0 -0
- package/lib/persisters/persister-file.js +1 -1
- package/lib/persisters/persister-file.js.gz +0 -0
- package/lib/persisters/persister-indexed-db.js +1 -1
- package/lib/persisters/persister-indexed-db.js.gz +0 -0
- package/lib/persisters/persister-libsql.js +1 -0
- package/lib/persisters/persister-libsql.js.gz +0 -0
- package/lib/persisters/persister-partykit-client.js +1 -1
- package/lib/persisters/persister-partykit-client.js.gz +0 -0
- package/lib/persisters/persister-partykit-server.js +1 -1
- package/lib/persisters/persister-partykit-server.js.gz +0 -0
- package/lib/persisters/persister-powersync.js +1 -0
- package/lib/persisters/persister-powersync.js.gz +0 -0
- package/lib/persisters/persister-remote.js +1 -1
- package/lib/persisters/persister-remote.js.gz +0 -0
- package/lib/persisters/persister-sqlite-wasm.js +1 -1
- package/lib/persisters/persister-sqlite-wasm.js.gz +0 -0
- package/lib/persisters/persister-sqlite3.js +1 -1
- package/lib/persisters/persister-sqlite3.js.gz +0 -0
- package/lib/persisters/persister-yjs.js +1 -1
- package/lib/persisters/persister-yjs.js.gz +0 -0
- package/lib/persisters.js +1 -1
- package/lib/persisters.js.gz +0 -0
- package/lib/queries.js +1 -1
- package/lib/queries.js.gz +0 -0
- package/lib/relationships.js +1 -1
- package/lib/relationships.js.gz +0 -0
- package/lib/store.js +1 -1
- package/lib/store.js.gz +0 -0
- package/lib/synchronizers/synchronizer-local.js +1 -0
- package/lib/synchronizers/synchronizer-local.js.gz +0 -0
- package/lib/synchronizers/synchronizer-ws-client.js +1 -0
- package/lib/synchronizers/synchronizer-ws-client.js.gz +0 -0
- package/lib/synchronizers/synchronizer-ws-server.js +1 -0
- package/lib/synchronizers/synchronizer-ws-server.js.gz +0 -0
- package/lib/synchronizers.js +1 -0
- package/lib/synchronizers.js.gz +0 -0
- package/lib/tinybase.js +1 -1
- package/lib/tinybase.js.gz +0 -0
- package/lib/tools.js +1 -1
- package/lib/tools.js.gz +0 -0
- package/lib/types/checkpoints.d.ts +2 -2
- package/lib/types/indexes.d.ts +2 -2
- package/lib/types/mergeable-store.d.ts +214 -0
- package/lib/types/metrics.d.ts +2 -2
- package/lib/types/persisters/persister-automerge.d.ts +11 -7
- package/lib/types/persisters/persister-browser.d.ts +13 -4
- package/lib/types/persisters/persister-cr-sqlite-wasm.d.ts +4 -0
- package/lib/types/persisters/persister-electric-sql.d.ts +4 -0
- package/lib/types/persisters/persister-expo-sqlite-next.d.ts +4 -0
- package/lib/types/persisters/persister-expo-sqlite.d.ts +4 -0
- package/lib/types/persisters/persister-file.d.ts +7 -2
- package/lib/types/persisters/persister-indexed-db.d.ts +4 -0
- package/lib/types/persisters/persister-libsql.d.ts +142 -0
- package/lib/types/persisters/persister-partykit-client.d.ts +4 -0
- package/lib/types/persisters/persister-partykit-server.d.ts +12 -8
- package/lib/types/persisters/persister-powersync.d.ts +157 -0
- package/lib/types/persisters/persister-remote.d.ts +4 -0
- package/lib/types/persisters/persister-sqlite-wasm.d.ts +4 -0
- package/lib/types/persisters/persister-sqlite3.d.ts +4 -0
- package/lib/types/persisters/persister-yjs.d.ts +6 -2
- package/lib/types/persisters.d.ts +162 -59
- 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 +57 -0
- package/lib/types/synchronizers.d.ts +132 -0
- package/lib/types/tinybase.d.ts +10 -8
- package/lib/types/tools.d.ts +4 -4
- package/lib/types/ui-react.d.ts +160 -9
- package/lib/types/with-schemas/checkpoints.d.ts +2 -2
- package/lib/types/with-schemas/indexes.d.ts +2 -2
- package/lib/types/with-schemas/internal/store.d.ts +4 -0
- package/lib/types/with-schemas/mergeable-store.d.ts +492 -0
- package/lib/types/with-schemas/metrics.d.ts +2 -2
- package/lib/types/with-schemas/persisters/persister-automerge.d.ts +12 -8
- package/lib/types/with-schemas/persisters/persister-browser.d.ts +17 -8
- package/lib/types/with-schemas/persisters/persister-cr-sqlite-wasm.d.ts +5 -1
- package/lib/types/with-schemas/persisters/persister-electric-sql.d.ts +5 -1
- package/lib/types/with-schemas/persisters/persister-expo-sqlite-next.d.ts +5 -1
- package/lib/types/with-schemas/persisters/persister-expo-sqlite.d.ts +5 -1
- package/lib/types/with-schemas/persisters/persister-file.d.ts +9 -4
- package/lib/types/with-schemas/persisters/persister-indexed-db.d.ts +5 -1
- package/lib/types/with-schemas/persisters/persister-libsql.d.ts +155 -0
- package/lib/types/with-schemas/persisters/persister-partykit-client.d.ts +5 -1
- package/lib/types/with-schemas/persisters/persister-partykit-server.d.ts +15 -11
- package/lib/types/with-schemas/persisters/persister-powersync.d.ts +170 -0
- package/lib/types/with-schemas/persisters/persister-remote.d.ts +5 -1
- package/lib/types/with-schemas/persisters/persister-sqlite-wasm.d.ts +5 -1
- package/lib/types/with-schemas/persisters/persister-sqlite3.d.ts +5 -1
- package/lib/types/with-schemas/persisters/persister-yjs.d.ts +7 -3
- package/lib/types/with-schemas/persisters.d.ts +193 -121
- 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 +57 -0
- package/lib/types/with-schemas/synchronizers.d.ts +146 -0
- package/lib/types/with-schemas/tinybase.d.ts +9 -8
- package/lib/types/with-schemas/tools.d.ts +4 -4
- package/lib/types/with-schemas/ui-react.d.ts +177 -9
- package/lib/ui-react-dom.js +1 -1
- package/lib/ui-react-dom.js.gz +0 -0
- package/lib/ui-react.js +1 -1
- package/lib/ui-react.js.gz +0 -0
- package/lib/umd/checkpoints.js +1 -1
- package/lib/umd/checkpoints.js.gz +0 -0
- package/lib/umd/indexes.js +1 -1
- package/lib/umd/indexes.js.gz +0 -0
- package/lib/umd/mergeable-store.js +1 -0
- package/lib/umd/mergeable-store.js.gz +0 -0
- package/lib/umd/metrics.js +1 -1
- package/lib/umd/metrics.js.gz +0 -0
- package/lib/umd/persisters/persister-automerge.js +1 -1
- package/lib/umd/persisters/persister-automerge.js.gz +0 -0
- package/lib/umd/persisters/persister-browser.js +1 -1
- package/lib/umd/persisters/persister-browser.js.gz +0 -0
- package/lib/umd/persisters/persister-cr-sqlite-wasm.js +1 -1
- package/lib/umd/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
- package/lib/umd/persisters/persister-electric-sql.js +1 -1
- package/lib/umd/persisters/persister-electric-sql.js.gz +0 -0
- package/lib/umd/persisters/persister-expo-sqlite-next.js +1 -1
- package/lib/umd/persisters/persister-expo-sqlite-next.js.gz +0 -0
- package/lib/umd/persisters/persister-expo-sqlite.js +1 -1
- package/lib/umd/persisters/persister-expo-sqlite.js.gz +0 -0
- package/lib/umd/persisters/persister-file.js +1 -1
- package/lib/umd/persisters/persister-file.js.gz +0 -0
- package/lib/umd/persisters/persister-indexed-db.js +1 -1
- package/lib/umd/persisters/persister-indexed-db.js.gz +0 -0
- package/lib/umd/persisters/persister-libsql.js +1 -0
- package/lib/umd/persisters/persister-libsql.js.gz +0 -0
- package/lib/umd/persisters/persister-partykit-client.js +1 -1
- package/lib/umd/persisters/persister-partykit-client.js.gz +0 -0
- package/lib/umd/persisters/persister-partykit-server.js +1 -1
- package/lib/umd/persisters/persister-partykit-server.js.gz +0 -0
- package/lib/umd/persisters/persister-powersync.js +1 -0
- package/lib/umd/persisters/persister-powersync.js.gz +0 -0
- package/lib/umd/persisters/persister-remote.js +1 -1
- package/lib/umd/persisters/persister-remote.js.gz +0 -0
- package/lib/umd/persisters/persister-sqlite-wasm.js +1 -1
- package/lib/umd/persisters/persister-sqlite-wasm.js.gz +0 -0
- package/lib/umd/persisters/persister-sqlite3.js +1 -1
- package/lib/umd/persisters/persister-sqlite3.js.gz +0 -0
- package/lib/umd/persisters/persister-yjs.js +1 -1
- package/lib/umd/persisters/persister-yjs.js.gz +0 -0
- package/lib/umd/persisters.js +1 -1
- package/lib/umd/persisters.js.gz +0 -0
- package/lib/umd/queries.js +1 -1
- package/lib/umd/queries.js.gz +0 -0
- package/lib/umd/relationships.js +1 -1
- package/lib/umd/relationships.js.gz +0 -0
- package/lib/umd/store.js +1 -1
- package/lib/umd/store.js.gz +0 -0
- package/lib/umd/synchronizers/synchronizer-local.js +1 -0
- package/lib/umd/synchronizers/synchronizer-local.js.gz +0 -0
- package/lib/umd/synchronizers/synchronizer-ws-client.js +1 -0
- package/lib/umd/synchronizers/synchronizer-ws-client.js.gz +0 -0
- package/lib/umd/synchronizers/synchronizer-ws-server.js +1 -0
- package/lib/umd/synchronizers/synchronizer-ws-server.js.gz +0 -0
- package/lib/umd/synchronizers.js +1 -0
- package/lib/umd/synchronizers.js.gz +0 -0
- package/lib/umd/tinybase.js +1 -1
- package/lib/umd/tinybase.js.gz +0 -0
- package/lib/umd/tools.js +1 -1
- package/lib/umd/tools.js.gz +0 -0
- package/lib/umd/ui-react-dom-debug.js +1 -1
- package/lib/umd/ui-react-dom-debug.js.gz +0 -0
- package/lib/umd/ui-react-dom.js +1 -1
- package/lib/umd/ui-react-dom.js.gz +0 -0
- package/lib/umd/ui-react.js +1 -1
- package/lib/umd/ui-react.js.gz +0 -0
- package/lib/umd-es6/checkpoints.js +1 -1
- package/lib/umd-es6/checkpoints.js.gz +0 -0
- package/lib/umd-es6/indexes.js +1 -1
- package/lib/umd-es6/indexes.js.gz +0 -0
- package/lib/umd-es6/mergeable-store.js +1 -0
- package/lib/umd-es6/mergeable-store.js.gz +0 -0
- package/lib/umd-es6/metrics.js +1 -1
- package/lib/umd-es6/metrics.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-automerge.js +1 -1
- package/lib/umd-es6/persisters/persister-automerge.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-browser.js +1 -1
- package/lib/umd-es6/persisters/persister-browser.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js +1 -1
- package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-electric-sql.js +1 -1
- package/lib/umd-es6/persisters/persister-electric-sql.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-expo-sqlite-next.js +1 -1
- package/lib/umd-es6/persisters/persister-expo-sqlite-next.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-expo-sqlite.js +1 -1
- package/lib/umd-es6/persisters/persister-expo-sqlite.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-file.js +1 -1
- package/lib/umd-es6/persisters/persister-file.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-indexed-db.js +1 -1
- package/lib/umd-es6/persisters/persister-indexed-db.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-libsql.js +1 -0
- package/lib/umd-es6/persisters/persister-libsql.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-partykit-client.js +1 -1
- package/lib/umd-es6/persisters/persister-partykit-client.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-partykit-server.js +1 -1
- package/lib/umd-es6/persisters/persister-partykit-server.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-powersync.js +1 -0
- package/lib/umd-es6/persisters/persister-powersync.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-remote.js +1 -1
- package/lib/umd-es6/persisters/persister-remote.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-sqlite-wasm.js +1 -1
- package/lib/umd-es6/persisters/persister-sqlite-wasm.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-sqlite3.js +1 -1
- package/lib/umd-es6/persisters/persister-sqlite3.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-yjs.js +1 -1
- package/lib/umd-es6/persisters/persister-yjs.js.gz +0 -0
- package/lib/umd-es6/persisters.js +1 -1
- package/lib/umd-es6/persisters.js.gz +0 -0
- package/lib/umd-es6/queries.js +1 -1
- package/lib/umd-es6/queries.js.gz +0 -0
- package/lib/umd-es6/relationships.js +1 -1
- package/lib/umd-es6/relationships.js.gz +0 -0
- package/lib/umd-es6/store.js +1 -1
- package/lib/umd-es6/store.js.gz +0 -0
- package/lib/umd-es6/synchronizers/synchronizer-local.js +1 -0
- package/lib/umd-es6/synchronizers/synchronizer-local.js.gz +0 -0
- package/lib/umd-es6/synchronizers/synchronizer-ws-client.js +1 -0
- package/lib/umd-es6/synchronizers/synchronizer-ws-client.js.gz +0 -0
- package/lib/umd-es6/synchronizers/synchronizer-ws-server.js +1 -0
- package/lib/umd-es6/synchronizers/synchronizer-ws-server.js.gz +0 -0
- package/lib/umd-es6/synchronizers.js +1 -0
- package/lib/umd-es6/synchronizers.js.gz +0 -0
- package/lib/umd-es6/tinybase.js +1 -1
- package/lib/umd-es6/tinybase.js.gz +0 -0
- package/lib/umd-es6/tools.js +1 -1
- package/lib/umd-es6/tools.js.gz +0 -0
- package/lib/umd-es6/ui-react-dom-debug.js +1 -1
- package/lib/umd-es6/ui-react-dom-debug.js.gz +0 -0
- package/lib/umd-es6/ui-react-dom.js +1 -1
- package/lib/umd-es6/ui-react-dom.js.gz +0 -0
- package/lib/umd-es6/ui-react.js +1 -1
- package/lib/umd-es6/ui-react.js.gz +0 -0
- package/package.json +65 -45
- package/readme.md +2 -2
|
@@ -42,8 +42,6 @@ const collDel = (coll, keyOrValue) => coll?.delete(keyOrValue);
|
|
|
42
42
|
const object = Object;
|
|
43
43
|
const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
|
|
44
44
|
const objEntries = object.entries;
|
|
45
|
-
const objIds = object.keys;
|
|
46
|
-
const objFreeze = object.freeze;
|
|
47
45
|
const isObject = (obj) =>
|
|
48
46
|
!isUndefined(obj) &&
|
|
49
47
|
ifNotUndefined(
|
|
@@ -54,15 +52,16 @@ const isObject = (obj) =>
|
|
|
54
52
|
/* istanbul ignore next */
|
|
55
53
|
() => true,
|
|
56
54
|
);
|
|
55
|
+
const objIds = object.keys;
|
|
56
|
+
const objFreeze = object.freeze;
|
|
57
57
|
const objNew = (entries = []) => object.fromEntries(entries);
|
|
58
58
|
const objMerge = (...objs) => object.assign({}, ...objs);
|
|
59
|
-
const
|
|
60
|
-
const objHas = (obj, id) => !isUndefined(objGet(obj, id));
|
|
59
|
+
const objHas = (obj, id) => id in obj;
|
|
61
60
|
const objDel = (obj, id) => {
|
|
62
61
|
delete obj[id];
|
|
63
62
|
return obj;
|
|
64
63
|
};
|
|
65
|
-
const
|
|
64
|
+
const objToArray = (obj, cb) =>
|
|
66
65
|
arrayMap(objEntries(obj), ([id, value]) => cb(value, id));
|
|
67
66
|
const objValues = (obj) => object.values(obj);
|
|
68
67
|
const objSize = (obj) => size(objIds(obj));
|
|
@@ -77,14 +76,16 @@ const mapMap = (coll, cb) =>
|
|
|
77
76
|
arrayMap([...(coll?.entries() ?? [])], ([key, value]) => cb(value, key));
|
|
78
77
|
const mapSet = (map, key, value) =>
|
|
79
78
|
isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
|
|
80
|
-
const mapEnsure = (map, key, getDefaultValue) => {
|
|
79
|
+
const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
|
|
81
80
|
if (!collHas(map, key)) {
|
|
82
81
|
mapSet(map, key, getDefaultValue());
|
|
82
|
+
} else {
|
|
83
|
+
hadExistingValue?.(mapGet(map, key));
|
|
83
84
|
}
|
|
84
85
|
return mapGet(map, key);
|
|
85
86
|
};
|
|
86
87
|
const mapMatch = (map, obj, set, del = mapSet) => {
|
|
87
|
-
|
|
88
|
+
objToArray(obj, (value, id) => set(map, id, value));
|
|
88
89
|
mapForEach(map, (id) => (objHas(obj, id) ? 0 : del(map, id)));
|
|
89
90
|
return map;
|
|
90
91
|
};
|
|
@@ -97,10 +98,18 @@ const setNew = (entryOrEntries) =>
|
|
|
97
98
|
);
|
|
98
99
|
const setAdd = (set, value) => set?.add(value);
|
|
99
100
|
|
|
101
|
+
const TABLE = 'TABLE';
|
|
102
|
+
const ALTER_TABLE = 'ALTER ' + TABLE;
|
|
103
|
+
const DELETE_FROM = 'DELETE FROM';
|
|
100
104
|
const SELECT_STAR_FROM = SELECT + '*FROM';
|
|
101
105
|
const FROM_PRAGMA_TABLE = 'FROM pragma_table_';
|
|
102
106
|
const WHERE = 'WHERE';
|
|
103
|
-
const getCommandFunctions = (
|
|
107
|
+
const getCommandFunctions = (
|
|
108
|
+
cmd,
|
|
109
|
+
managedTableNames,
|
|
110
|
+
onIgnoredError,
|
|
111
|
+
useOnConflict,
|
|
112
|
+
) => {
|
|
104
113
|
const schemaMap = mapNew();
|
|
105
114
|
const canSelect = (tableName, rowIdColumnName) =>
|
|
106
115
|
!isUndefined(mapGet(mapGet(schemaMap, tableName), rowIdColumnName));
|
|
@@ -113,7 +122,7 @@ const getCommandFunctions = (cmd, managedTableNames, onIgnoredError) => {
|
|
|
113
122
|
await cmd(
|
|
114
123
|
'SELECT name ' +
|
|
115
124
|
FROM_PRAGMA_TABLE +
|
|
116
|
-
`list WHERE schema='main'AND
|
|
125
|
+
`list WHERE schema='main'AND(type='table'OR type='view')AND name IN(` +
|
|
117
126
|
getPlaceholders(managedTableNames) +
|
|
118
127
|
`)ORDER BY name`,
|
|
119
128
|
managedTableNames,
|
|
@@ -168,31 +177,38 @@ const getCommandFunctions = (cmd, managedTableNames, onIgnoredError) => {
|
|
|
168
177
|
const saveTable = async (
|
|
169
178
|
tableName,
|
|
170
179
|
rowIdColumnName,
|
|
171
|
-
|
|
180
|
+
content,
|
|
172
181
|
deleteEmptyColumns,
|
|
173
182
|
deleteEmptyTable,
|
|
174
183
|
partial = false,
|
|
175
184
|
) => {
|
|
176
|
-
const
|
|
177
|
-
|
|
178
|
-
arrayMap(objIds(
|
|
185
|
+
const tableCellOrValueIds = setNew();
|
|
186
|
+
objToArray(content ?? {}, (contentRow) =>
|
|
187
|
+
arrayMap(objIds(contentRow ?? {}), (cellOrValueId) =>
|
|
188
|
+
setAdd(tableCellOrValueIds, cellOrValueId),
|
|
189
|
+
),
|
|
179
190
|
);
|
|
180
|
-
const tableColumnNames = collValues(
|
|
191
|
+
const tableColumnNames = collValues(tableCellOrValueIds);
|
|
181
192
|
if (
|
|
182
193
|
!partial &&
|
|
183
194
|
deleteEmptyTable &&
|
|
184
195
|
arrayIsEmpty(tableColumnNames) &&
|
|
185
196
|
collHas(schemaMap, tableName)
|
|
186
197
|
) {
|
|
187
|
-
await cmd('DROP
|
|
198
|
+
await cmd('DROP ' + TABLE + escapeId(tableName));
|
|
188
199
|
mapSet(schemaMap, tableName);
|
|
189
200
|
return;
|
|
190
201
|
}
|
|
191
202
|
if (!arrayIsEmpty(tableColumnNames) && !collHas(schemaMap, tableName)) {
|
|
192
203
|
await cmd(
|
|
193
|
-
`CREATE
|
|
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,27 @@ const jsonParse = JSON.parse;
|
|
|
362
389
|
|
|
363
390
|
const scheduleRunning = mapNew();
|
|
364
391
|
const scheduleActions = mapNew();
|
|
392
|
+
const getStoreFunctions = (supportedStoreType = 1, store) =>
|
|
393
|
+
supportedStoreType > 1 && 'getMergeableContent' in store
|
|
394
|
+
? [
|
|
395
|
+
1,
|
|
396
|
+
store.getMergeableContent,
|
|
397
|
+
store.getTransactionMergeableChanges,
|
|
398
|
+
([[changedTables], [changedValues]]) =>
|
|
399
|
+
!objIsEmpty(changedTables) || !objIsEmpty(changedValues),
|
|
400
|
+
store.setDefaultContent,
|
|
401
|
+
]
|
|
402
|
+
: supportedStoreType != 2
|
|
403
|
+
? [
|
|
404
|
+
0,
|
|
405
|
+
store.getContent,
|
|
406
|
+
store.getTransactionChanges,
|
|
407
|
+
([changedTables, changedValues]) =>
|
|
408
|
+
!objIsEmpty(changedTables) || !objIsEmpty(changedValues),
|
|
409
|
+
store.setContent,
|
|
410
|
+
]
|
|
411
|
+
: /* istanbul ignore next */
|
|
412
|
+
0;
|
|
365
413
|
const createCustomPersister = (
|
|
366
414
|
store,
|
|
367
415
|
getPersisted,
|
|
@@ -369,18 +417,25 @@ const createCustomPersister = (
|
|
|
369
417
|
addPersisterListener,
|
|
370
418
|
delPersisterListener,
|
|
371
419
|
onIgnoredError,
|
|
372
|
-
|
|
420
|
+
supportedStoreType,
|
|
421
|
+
extra = {},
|
|
373
422
|
scheduleId = [],
|
|
374
423
|
) => {
|
|
375
|
-
let listenerId;
|
|
376
424
|
let loadSave = 0;
|
|
377
425
|
let loads = 0;
|
|
378
426
|
let saves = 0;
|
|
379
|
-
let listening = 0;
|
|
380
427
|
let action;
|
|
381
|
-
let
|
|
428
|
+
let autoLoadHandle;
|
|
429
|
+
let autoSaveListenerId;
|
|
382
430
|
mapEnsure(scheduleRunning, scheduleId, () => 0);
|
|
383
431
|
mapEnsure(scheduleActions, scheduleId, () => []);
|
|
432
|
+
const [
|
|
433
|
+
isMergeableStore,
|
|
434
|
+
getContent,
|
|
435
|
+
getChanges,
|
|
436
|
+
hasChanges,
|
|
437
|
+
setDefaultContent,
|
|
438
|
+
] = getStoreFunctions(supportedStoreType, store);
|
|
384
439
|
const run = async () => {
|
|
385
440
|
/* istanbul ignore else */
|
|
386
441
|
if (!mapGet(scheduleRunning, scheduleId)) {
|
|
@@ -398,109 +453,121 @@ const createCustomPersister = (
|
|
|
398
453
|
mapSet(scheduleRunning, scheduleId, 0);
|
|
399
454
|
}
|
|
400
455
|
};
|
|
401
|
-
const
|
|
456
|
+
const setContentOrChanges = (contentOrChanges) => {
|
|
457
|
+
(isMergeableStore && isArray(contentOrChanges?.[0])
|
|
458
|
+
? contentOrChanges?.[2] === 1
|
|
459
|
+
? store.applyMergeableChanges
|
|
460
|
+
: store.setMergeableContent
|
|
461
|
+
: contentOrChanges?.[2] === 1
|
|
462
|
+
? store.applyChanges
|
|
463
|
+
: store.setContent)(contentOrChanges);
|
|
464
|
+
};
|
|
465
|
+
const load = async (initialContent) => {
|
|
402
466
|
/* istanbul ignore else */
|
|
403
467
|
if (loadSave != 2) {
|
|
404
468
|
loadSave = 1;
|
|
405
469
|
{
|
|
406
470
|
loads++;
|
|
407
471
|
}
|
|
408
|
-
await
|
|
409
|
-
|
|
472
|
+
await schedule(async () => {
|
|
473
|
+
try {
|
|
474
|
+
setContentOrChanges(await getPersisted());
|
|
475
|
+
} catch (error) {
|
|
476
|
+
onIgnoredError?.(error);
|
|
477
|
+
if (initialContent) {
|
|
478
|
+
setDefaultContent(initialContent);
|
|
479
|
+
}
|
|
480
|
+
}
|
|
410
481
|
loadSave = 0;
|
|
411
482
|
});
|
|
412
483
|
}
|
|
413
484
|
return persister;
|
|
414
485
|
};
|
|
415
|
-
const
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
startAutoLoad: async (initialTables = {}, initialValues = {}) => {
|
|
425
|
-
persister.stopAutoLoad();
|
|
426
|
-
await persister.load(initialTables, initialValues);
|
|
427
|
-
listening = 1;
|
|
428
|
-
listeningHandle = addPersisterListener(
|
|
429
|
-
async (getContent, getTransactionChanges) => {
|
|
430
|
-
if (getTransactionChanges) {
|
|
431
|
-
const transactionChanges = getTransactionChanges();
|
|
432
|
-
await loadLock(async () =>
|
|
433
|
-
store.setTransactionChanges(transactionChanges),
|
|
434
|
-
);
|
|
435
|
-
} else {
|
|
436
|
-
await loadLock(async () => {
|
|
437
|
-
try {
|
|
438
|
-
store.setContent(getContent?.() ?? (await getPersisted()));
|
|
439
|
-
} catch (error) {
|
|
440
|
-
onIgnoredError?.(error);
|
|
441
|
-
}
|
|
442
|
-
});
|
|
486
|
+
const startAutoLoad = async (initialContent) => {
|
|
487
|
+
await stopAutoLoad().load(initialContent);
|
|
488
|
+
autoLoadHandle = addPersisterListener(async (content, changes) => {
|
|
489
|
+
if (changes || content) {
|
|
490
|
+
/* istanbul ignore else */
|
|
491
|
+
if (loadSave != 2) {
|
|
492
|
+
loadSave = 1;
|
|
493
|
+
{
|
|
494
|
+
loads++;
|
|
443
495
|
}
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
if (listening) {
|
|
450
|
-
delPersisterListener(listeningHandle);
|
|
451
|
-
listeningHandle = void 0;
|
|
452
|
-
listening = 0;
|
|
496
|
+
setContentOrChanges(changes ?? content);
|
|
497
|
+
loadSave = 0;
|
|
498
|
+
}
|
|
499
|
+
} else {
|
|
500
|
+
await load();
|
|
453
501
|
}
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
502
|
+
});
|
|
503
|
+
return persister;
|
|
504
|
+
};
|
|
505
|
+
const stopAutoLoad = () => {
|
|
506
|
+
if (autoLoadHandle) {
|
|
507
|
+
delPersisterListener(autoLoadHandle);
|
|
508
|
+
autoLoadHandle = void 0;
|
|
509
|
+
}
|
|
510
|
+
return persister;
|
|
511
|
+
};
|
|
512
|
+
const isAutoLoading = () => !isUndefined(autoLoadHandle);
|
|
513
|
+
const save = async (changes) => {
|
|
514
|
+
/* istanbul ignore else */
|
|
515
|
+
if (loadSave != 1) {
|
|
516
|
+
loadSave = 2;
|
|
517
|
+
{
|
|
518
|
+
saves++;
|
|
519
|
+
}
|
|
520
|
+
await schedule(async () => {
|
|
521
|
+
try {
|
|
522
|
+
await setPersisted(getContent, changes);
|
|
523
|
+
} catch (error) {
|
|
524
|
+
/* istanbul ignore next */
|
|
525
|
+
onIgnoredError?.(error);
|
|
462
526
|
}
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
527
|
+
loadSave = 0;
|
|
528
|
+
});
|
|
529
|
+
}
|
|
530
|
+
return persister;
|
|
531
|
+
};
|
|
532
|
+
const startAutoSave = async () => {
|
|
533
|
+
await stopAutoSave().save();
|
|
534
|
+
autoSaveListenerId = store.addDidFinishTransactionListener(() => {
|
|
535
|
+
const changes = getChanges();
|
|
536
|
+
if (hasChanges(changes)) {
|
|
537
|
+
save(changes);
|
|
472
538
|
}
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
539
|
+
});
|
|
540
|
+
return persister;
|
|
541
|
+
};
|
|
542
|
+
const stopAutoSave = () => {
|
|
543
|
+
ifNotUndefined(autoSaveListenerId, store.delListener);
|
|
544
|
+
autoSaveListenerId = void 0;
|
|
545
|
+
return persister;
|
|
546
|
+
};
|
|
547
|
+
const isAutoSaving = () => !isUndefined(autoSaveListenerId);
|
|
548
|
+
const schedule = async (...actions) => {
|
|
549
|
+
arrayPush(mapGet(scheduleActions, scheduleId), ...actions);
|
|
550
|
+
await run();
|
|
551
|
+
return persister;
|
|
552
|
+
};
|
|
553
|
+
const getStore = () => store;
|
|
554
|
+
const destroy = () => stopAutoLoad().stopAutoSave();
|
|
555
|
+
const getStats = () => ({loads, saves});
|
|
556
|
+
const persister = {
|
|
557
|
+
load,
|
|
558
|
+
startAutoLoad,
|
|
559
|
+
stopAutoLoad,
|
|
560
|
+
isAutoLoading,
|
|
561
|
+
save,
|
|
562
|
+
startAutoSave,
|
|
563
|
+
stopAutoSave,
|
|
564
|
+
isAutoSaving,
|
|
565
|
+
schedule,
|
|
566
|
+
getStore,
|
|
567
|
+
destroy,
|
|
568
|
+
getStats,
|
|
569
|
+
...extra,
|
|
500
570
|
};
|
|
501
|
-
if (getThing) {
|
|
502
|
-
persister[getThing] = () => thing;
|
|
503
|
-
}
|
|
504
571
|
return objFreeze(persister);
|
|
505
572
|
};
|
|
506
573
|
|
|
@@ -515,9 +582,10 @@ const createJsonSqlitePersister = (
|
|
|
515
582
|
managedTableNames,
|
|
516
583
|
db,
|
|
517
584
|
getThing,
|
|
585
|
+
useOnConflict,
|
|
518
586
|
) => {
|
|
519
587
|
const [refreshSchema, loadTable, saveTable, transaction] =
|
|
520
|
-
getCommandFunctions(cmd, managedTableNames, onIgnoredError);
|
|
588
|
+
getCommandFunctions(cmd, managedTableNames, onIgnoredError, useOnConflict);
|
|
521
589
|
const getPersisted = async () =>
|
|
522
590
|
await transaction(async () => {
|
|
523
591
|
await refreshSchema();
|
|
@@ -534,7 +602,9 @@ const createJsonSqlitePersister = (
|
|
|
534
602
|
storeTableName,
|
|
535
603
|
DEFAULT_ROW_ID_COLUMN_NAME,
|
|
536
604
|
{
|
|
537
|
-
[SINGLE_ROW_ID]: {
|
|
605
|
+
[SINGLE_ROW_ID]: {
|
|
606
|
+
[STORE_COLUMN]: jsonStringWithMap(getContent() ?? null),
|
|
607
|
+
},
|
|
538
608
|
},
|
|
539
609
|
true,
|
|
540
610
|
true,
|
|
@@ -547,7 +617,8 @@ const createJsonSqlitePersister = (
|
|
|
547
617
|
addPersisterListener,
|
|
548
618
|
delPersisterListener,
|
|
549
619
|
onIgnoredError,
|
|
550
|
-
|
|
620
|
+
1,
|
|
621
|
+
{[getThing]: () => db},
|
|
551
622
|
db,
|
|
552
623
|
);
|
|
553
624
|
return persister;
|
|
@@ -567,9 +638,10 @@ const createTabularSqlitePersister = (
|
|
|
567
638
|
managedTableNames,
|
|
568
639
|
db,
|
|
569
640
|
getThing,
|
|
641
|
+
useOnConflict,
|
|
570
642
|
) => {
|
|
571
643
|
const [refreshSchema, loadTable, saveTable, transaction] =
|
|
572
|
-
getCommandFunctions(cmd, managedTableNames, onIgnoredError);
|
|
644
|
+
getCommandFunctions(cmd, managedTableNames, onIgnoredError, useOnConflict);
|
|
573
645
|
const saveTables = async (tables, partial) =>
|
|
574
646
|
await promiseAll(
|
|
575
647
|
mapMap(
|
|
@@ -578,12 +650,11 @@ const createTabularSqlitePersister = (
|
|
|
578
650
|
[tableName, rowIdColumnName, deleteEmptyColumns, deleteEmptyTable],
|
|
579
651
|
tableId,
|
|
580
652
|
) => {
|
|
581
|
-
|
|
582
|
-
if (!partial || table !== void 0) {
|
|
653
|
+
if (!partial || objHas(tables, tableId)) {
|
|
583
654
|
await saveTable(
|
|
584
655
|
tableName,
|
|
585
656
|
rowIdColumnName,
|
|
586
|
-
|
|
657
|
+
tables[tableId],
|
|
587
658
|
deleteEmptyColumns,
|
|
588
659
|
deleteEmptyTable,
|
|
589
660
|
partial,
|
|
@@ -633,13 +704,12 @@ const createTabularSqlitePersister = (
|
|
|
633
704
|
? [tables, values]
|
|
634
705
|
: void 0;
|
|
635
706
|
});
|
|
636
|
-
const setPersisted = async (getContent,
|
|
707
|
+
const setPersisted = async (getContent, changes) =>
|
|
637
708
|
await transaction(async () => {
|
|
638
709
|
await refreshSchema();
|
|
639
|
-
if (!isUndefined(
|
|
640
|
-
|
|
641
|
-
await
|
|
642
|
-
await saveValues(valueChanges, true);
|
|
710
|
+
if (!isUndefined(changes)) {
|
|
711
|
+
await saveTables(changes[0], true);
|
|
712
|
+
await saveValues(changes[1], true);
|
|
643
713
|
} else {
|
|
644
714
|
const [tables, values] = getContent();
|
|
645
715
|
await saveTables(tables);
|
|
@@ -653,7 +723,8 @@ const createTabularSqlitePersister = (
|
|
|
653
723
|
addPersisterListener,
|
|
654
724
|
delPersisterListener,
|
|
655
725
|
onIgnoredError,
|
|
656
|
-
|
|
726
|
+
1,
|
|
727
|
+
{[getThing]: () => db},
|
|
657
728
|
db,
|
|
658
729
|
);
|
|
659
730
|
return persister;
|
|
@@ -690,7 +761,7 @@ const getDefaultedTabularConfigMap = (
|
|
|
690
761
|
filter,
|
|
691
762
|
) => {
|
|
692
763
|
const configMap = mapNew();
|
|
693
|
-
|
|
764
|
+
objToArray(configsObj, (configObj, id) => {
|
|
694
765
|
const defaultedConfig = slice(
|
|
695
766
|
objValues(
|
|
696
767
|
objMerge(
|
|
@@ -765,6 +836,7 @@ const createSqlitePersister = (
|
|
|
765
836
|
onIgnoredError,
|
|
766
837
|
db,
|
|
767
838
|
getThing = 'getDb',
|
|
839
|
+
useOnConflict,
|
|
768
840
|
) => {
|
|
769
841
|
let dataVersion;
|
|
770
842
|
let schemaVersion;
|
|
@@ -827,6 +899,7 @@ const createSqlitePersister = (
|
|
|
827
899
|
collValues(managedTableNamesSet),
|
|
828
900
|
db,
|
|
829
901
|
getThing,
|
|
902
|
+
useOnConflict,
|
|
830
903
|
);
|
|
831
904
|
};
|
|
832
905
|
|