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