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