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
|
@@ -124,9 +124,7 @@ const arrayShift = (array) => array.shift();
|
|
|
124
124
|
const object = Object;
|
|
125
125
|
const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
|
|
126
126
|
const objEntries = object.entries;
|
|
127
|
-
const objIds = object.keys;
|
|
128
127
|
const objFrozen = object.isFrozen;
|
|
129
|
-
const objFreeze = object.freeze;
|
|
130
128
|
const isObject = (obj) =>
|
|
131
129
|
!isUndefined(obj) &&
|
|
132
130
|
ifNotUndefined(
|
|
@@ -137,23 +135,52 @@ const isObject = (obj) =>
|
|
|
137
135
|
/* istanbul ignore next */
|
|
138
136
|
() => true,
|
|
139
137
|
);
|
|
138
|
+
const objIds = object.keys;
|
|
139
|
+
const objFreeze = object.freeze;
|
|
140
140
|
const objNew = (entries = []) => object.fromEntries(entries);
|
|
141
|
-
const
|
|
142
|
-
const objHas = (obj, id) => !isUndefined(objGet(obj, id));
|
|
141
|
+
const objHas = (obj, id) => id in obj;
|
|
143
142
|
const objDel = (obj, id) => {
|
|
144
143
|
delete obj[id];
|
|
145
144
|
return obj;
|
|
146
145
|
};
|
|
147
|
-
const
|
|
146
|
+
const objToArray = (obj, cb) =>
|
|
148
147
|
arrayMap(objEntries(obj), ([id, value]) => cb(value, id));
|
|
148
|
+
const objMap = (obj, cb) =>
|
|
149
|
+
objNew(objToArray(obj, (value, id) => [id, cb(value, id)]));
|
|
149
150
|
const objSize = (obj) => size(objIds(obj));
|
|
150
151
|
const objIsEmpty = (obj) => isObject(obj) && objSize(obj) == 0;
|
|
152
|
+
const objValidate = (obj, validateChild, onInvalidObj, emptyIsValid = 0) => {
|
|
153
|
+
if (
|
|
154
|
+
isUndefined(obj) ||
|
|
155
|
+
!isObject(obj) ||
|
|
156
|
+
(!emptyIsValid && objIsEmpty(obj)) ||
|
|
157
|
+
objFrozen(obj)
|
|
158
|
+
) {
|
|
159
|
+
onInvalidObj?.();
|
|
160
|
+
return false;
|
|
161
|
+
}
|
|
162
|
+
objToArray(obj, (child, id) => {
|
|
163
|
+
if (!validateChild(child, id)) {
|
|
164
|
+
objDel(obj, id);
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
return emptyIsValid ? true : !objIsEmpty(obj);
|
|
168
|
+
};
|
|
151
169
|
|
|
152
|
-
const
|
|
170
|
+
const UNDEFINED_MARKER = '\uFFFC';
|
|
171
|
+
const jsonStringWithMap = (obj) =>
|
|
153
172
|
JSON.stringify(obj, (_key, value) =>
|
|
154
173
|
isInstanceOf(value, Map) ? object.fromEntries([...value]) : value,
|
|
155
174
|
);
|
|
156
175
|
const jsonParse = JSON.parse;
|
|
176
|
+
const jsonStringWithUndefined = (obj) =>
|
|
177
|
+
JSON.stringify(obj, (_key, value) =>
|
|
178
|
+
value === void 0 ? UNDEFINED_MARKER : value,
|
|
179
|
+
);
|
|
180
|
+
const jsonParseWithUndefined = (str) =>
|
|
181
|
+
JSON.parse(str, (_key, value) =>
|
|
182
|
+
value === UNDEFINED_MARKER ? void 0 : value,
|
|
183
|
+
);
|
|
157
184
|
|
|
158
185
|
const UNIQUE_ID = 'tinybaseStoreInspector';
|
|
159
186
|
const TITLE = 'TinyBase Store Inspector';
|
|
@@ -164,7 +191,7 @@ const OPEN_CELL = 'open';
|
|
|
164
191
|
const POSITION_VALUE = 'position';
|
|
165
192
|
const OPEN_VALUE = OPEN_CELL;
|
|
166
193
|
const EDITABLE_CELL = 'editable';
|
|
167
|
-
const getUniqueId = (...args) =>
|
|
194
|
+
const getUniqueId = (...args) => jsonStringWithMap(args);
|
|
168
195
|
const sortedIdsMap = (ids, callback) => arrayMap(arraySort(ids), callback);
|
|
169
196
|
const useEditable = (uniqueId, s) => [
|
|
170
197
|
!!useCell(STATE_TABLE, uniqueId, EDITABLE_CELL, s),
|
|
@@ -207,7 +234,7 @@ const DONE_SVG = PRE + `<path d='${PENCIL}M20 20l60 60' />` + POST;
|
|
|
207
234
|
|
|
208
235
|
const SCROLLBAR = '*::-webkit-scrollbar';
|
|
209
236
|
const APP_STYLESHEET = arrayJoin(
|
|
210
|
-
|
|
237
|
+
objToArray(
|
|
211
238
|
{
|
|
212
239
|
'': 'all:initial;font-family:sans-serif;font-size:0.75rem;position:fixed;z-index:999999',
|
|
213
240
|
'*': 'all:revert',
|
|
@@ -333,9 +360,10 @@ const Details = ({
|
|
|
333
360
|
);
|
|
334
361
|
};
|
|
335
362
|
|
|
336
|
-
const getCellOrValueType = (
|
|
337
|
-
const type = getTypeOf(
|
|
338
|
-
return isTypeStringOrBoolean(type) ||
|
|
363
|
+
const getCellOrValueType = (cellOrValue) => {
|
|
364
|
+
const type = getTypeOf(cellOrValue);
|
|
365
|
+
return isTypeStringOrBoolean(type) ||
|
|
366
|
+
(type == NUMBER && isFiniteNumber(cellOrValue))
|
|
339
367
|
? type
|
|
340
368
|
: void 0;
|
|
341
369
|
};
|
|
@@ -433,21 +461,16 @@ const useSortingAndPagination = (
|
|
|
433
461
|
const useCells = (defaultCellIds, customCells, defaultCellComponent) =>
|
|
434
462
|
useMemo(() => {
|
|
435
463
|
const cellIds = customCells ?? defaultCellIds;
|
|
436
|
-
return
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
{
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
? {label: labelOrCustomCell}
|
|
447
|
-
: labelOrCustomCell),
|
|
448
|
-
},
|
|
449
|
-
],
|
|
450
|
-
),
|
|
464
|
+
return objMap(
|
|
465
|
+
isArray(cellIds)
|
|
466
|
+
? objNew(arrayMap(cellIds, (cellId) => [cellId, cellId]))
|
|
467
|
+
: cellIds,
|
|
468
|
+
(labelOrCustomCell, cellId) => ({
|
|
469
|
+
...{label: cellId, component: defaultCellComponent},
|
|
470
|
+
...(isString(labelOrCustomCell)
|
|
471
|
+
? {label: labelOrCustomCell}
|
|
472
|
+
: labelOrCustomCell),
|
|
473
|
+
}),
|
|
451
474
|
);
|
|
452
475
|
}, [customCells, defaultCellComponent, defaultCellIds]);
|
|
453
476
|
const HtmlTable = ({
|
|
@@ -484,7 +507,7 @@ const HtmlTable = ({
|
|
|
484
507
|
label: 'Id',
|
|
485
508
|
onClick: handleSort,
|
|
486
509
|
}),
|
|
487
|
-
|
|
510
|
+
objToArray(cells, ({label}, cellId) =>
|
|
488
511
|
/* @__PURE__ */ createElement(HtmlHeaderCell, {
|
|
489
512
|
key: cellId,
|
|
490
513
|
cellId,
|
|
@@ -505,17 +528,19 @@ const HtmlTable = ({
|
|
|
505
528
|
idColumn === false
|
|
506
529
|
? null
|
|
507
530
|
: /* @__PURE__ */ createElement('th', null, rowId),
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
531
|
+
objToArray(
|
|
532
|
+
cells,
|
|
533
|
+
({component: CellView2, getComponentProps}, cellId) =>
|
|
534
|
+
/* @__PURE__ */ createElement(
|
|
535
|
+
'td',
|
|
536
|
+
{key: cellId},
|
|
537
|
+
/* @__PURE__ */ createElement(CellView2, {
|
|
538
|
+
...getProps(getComponentProps, rowId, cellId),
|
|
539
|
+
...cellComponentProps,
|
|
540
|
+
rowId,
|
|
541
|
+
cellId,
|
|
542
|
+
}),
|
|
543
|
+
),
|
|
519
544
|
),
|
|
520
545
|
),
|
|
521
546
|
),
|
|
@@ -569,7 +594,7 @@ const RelationshipInHtmlRow = ({
|
|
|
569
594
|
/* @__PURE__ */ createElement('th', null, localRowId),
|
|
570
595
|
/* @__PURE__ */ createElement('th', null, remoteRowId),
|
|
571
596
|
),
|
|
572
|
-
|
|
597
|
+
objToArray(
|
|
573
598
|
cells,
|
|
574
599
|
({component: CellView2, getComponentProps}, compoundCellId) => {
|
|
575
600
|
const [tableId, cellId] = compoundCellId.split(DOT, 2);
|
|
@@ -885,7 +910,7 @@ const RelationshipInHtmlTable = ({
|
|
|
885
910
|
'.Id',
|
|
886
911
|
),
|
|
887
912
|
),
|
|
888
|
-
|
|
913
|
+
objToArray(cells, ({label}, cellId) =>
|
|
889
914
|
/* @__PURE__ */ createElement('th', {key: cellId}, label),
|
|
890
915
|
),
|
|
891
916
|
),
|
|
@@ -1165,7 +1190,7 @@ const QueryView = ({queries, queriesId, queryId, s}) => {
|
|
|
1165
1190
|
STATE_TABLE,
|
|
1166
1191
|
uniqueId,
|
|
1167
1192
|
SORT_CELL,
|
|
1168
|
-
|
|
1193
|
+
jsonStringWithMap,
|
|
1169
1194
|
[],
|
|
1170
1195
|
s,
|
|
1171
1196
|
);
|
|
@@ -1270,7 +1295,7 @@ const TableView = ({tableId, store, storeId, s}) => {
|
|
|
1270
1295
|
STATE_TABLE,
|
|
1271
1296
|
uniqueId,
|
|
1272
1297
|
SORT_CELL,
|
|
1273
|
-
|
|
1298
|
+
jsonStringWithMap,
|
|
1274
1299
|
[],
|
|
1275
1300
|
s,
|
|
1276
1301
|
);
|
|
@@ -1531,35 +1556,41 @@ const mapMap = (coll, cb) =>
|
|
|
1531
1556
|
arrayMap([...(coll?.entries() ?? [])], ([key, value]) => cb(value, key));
|
|
1532
1557
|
const mapSet = (map, key, value) =>
|
|
1533
1558
|
isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
|
|
1534
|
-
const mapEnsure = (map, key, getDefaultValue) => {
|
|
1559
|
+
const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
|
|
1535
1560
|
if (!collHas(map, key)) {
|
|
1536
1561
|
mapSet(map, key, getDefaultValue());
|
|
1562
|
+
} else {
|
|
1563
|
+
hadExistingValue?.(mapGet(map, key));
|
|
1537
1564
|
}
|
|
1538
1565
|
return mapGet(map, key);
|
|
1539
1566
|
};
|
|
1540
1567
|
const mapMatch = (map, obj, set, del = mapSet) => {
|
|
1541
|
-
|
|
1568
|
+
objToArray(obj, (value, id) => set(map, id, value));
|
|
1542
1569
|
mapForEach(map, (id) => (objHas(obj, id) ? 0 : del(map, id)));
|
|
1543
1570
|
return map;
|
|
1544
1571
|
};
|
|
1545
|
-
const mapToObj = (map,
|
|
1572
|
+
const mapToObj = (map, valueMapper, excludeMapValue, excludeObjValue) => {
|
|
1546
1573
|
const obj = {};
|
|
1547
|
-
collForEach(map, (
|
|
1548
|
-
|
|
1549
|
-
|
|
1574
|
+
collForEach(map, (mapValue, id) => {
|
|
1575
|
+
if (!excludeMapValue?.(mapValue, id)) {
|
|
1576
|
+
const objValue = valueMapper ? valueMapper(mapValue, id) : mapValue;
|
|
1577
|
+
excludeObjValue?.(objValue) ? 0 : (obj[id] = objValue);
|
|
1578
|
+
}
|
|
1550
1579
|
});
|
|
1551
1580
|
return obj;
|
|
1552
1581
|
};
|
|
1553
|
-
const mapToObj2 = (map,
|
|
1582
|
+
const mapToObj2 = (map, valueMapper, excludeMapValue) =>
|
|
1554
1583
|
mapToObj(
|
|
1555
1584
|
map,
|
|
1556
|
-
(childMap) => mapToObj(childMap,
|
|
1585
|
+
(childMap) => mapToObj(childMap, valueMapper, excludeMapValue),
|
|
1586
|
+
collIsEmpty,
|
|
1557
1587
|
objIsEmpty,
|
|
1558
1588
|
);
|
|
1559
|
-
const mapToObj3 = (map,
|
|
1589
|
+
const mapToObj3 = (map, valueMapper, excludeMapValue) =>
|
|
1560
1590
|
mapToObj(
|
|
1561
1591
|
map,
|
|
1562
|
-
(childMap) => mapToObj2(childMap,
|
|
1592
|
+
(childMap) => mapToObj2(childMap, valueMapper, excludeMapValue),
|
|
1593
|
+
collIsEmpty,
|
|
1563
1594
|
objIsEmpty,
|
|
1564
1595
|
);
|
|
1565
1596
|
const mapClone = (map, mapValue) => {
|
|
@@ -1593,6 +1624,27 @@ const visitTree = (node, path, ensureLeaf, pruneLeaf, p = 0) =>
|
|
|
1593
1624
|
|
|
1594
1625
|
const scheduleRunning = mapNew();
|
|
1595
1626
|
const scheduleActions = mapNew();
|
|
1627
|
+
const getStoreFunctions = (supportedStoreType = 1, store) =>
|
|
1628
|
+
supportedStoreType > 1 && 'getMergeableContent' in store
|
|
1629
|
+
? [
|
|
1630
|
+
1,
|
|
1631
|
+
store.getMergeableContent,
|
|
1632
|
+
store.getTransactionMergeableChanges,
|
|
1633
|
+
([[changedTables], [changedValues]]) =>
|
|
1634
|
+
!objIsEmpty(changedTables) || !objIsEmpty(changedValues),
|
|
1635
|
+
store.setDefaultContent,
|
|
1636
|
+
]
|
|
1637
|
+
: supportedStoreType != 2
|
|
1638
|
+
? [
|
|
1639
|
+
0,
|
|
1640
|
+
store.getContent,
|
|
1641
|
+
store.getTransactionChanges,
|
|
1642
|
+
([changedTables, changedValues]) =>
|
|
1643
|
+
!objIsEmpty(changedTables) || !objIsEmpty(changedValues),
|
|
1644
|
+
store.setContent,
|
|
1645
|
+
]
|
|
1646
|
+
: /* istanbul ignore next */
|
|
1647
|
+
0;
|
|
1596
1648
|
const createCustomPersister = (
|
|
1597
1649
|
store,
|
|
1598
1650
|
getPersisted,
|
|
@@ -1600,18 +1652,25 @@ const createCustomPersister = (
|
|
|
1600
1652
|
addPersisterListener,
|
|
1601
1653
|
delPersisterListener,
|
|
1602
1654
|
onIgnoredError,
|
|
1603
|
-
|
|
1655
|
+
supportedStoreType,
|
|
1656
|
+
extra = {},
|
|
1604
1657
|
scheduleId = [],
|
|
1605
1658
|
) => {
|
|
1606
|
-
let listenerId;
|
|
1607
1659
|
let loadSave = 0;
|
|
1608
1660
|
let loads = 0;
|
|
1609
1661
|
let saves = 0;
|
|
1610
|
-
let listening = 0;
|
|
1611
1662
|
let action;
|
|
1612
|
-
let
|
|
1663
|
+
let autoLoadHandle;
|
|
1664
|
+
let autoSaveListenerId;
|
|
1613
1665
|
mapEnsure(scheduleRunning, scheduleId, () => 0);
|
|
1614
1666
|
mapEnsure(scheduleActions, scheduleId, () => []);
|
|
1667
|
+
const [
|
|
1668
|
+
isMergeableStore,
|
|
1669
|
+
getContent,
|
|
1670
|
+
getChanges,
|
|
1671
|
+
hasChanges,
|
|
1672
|
+
setDefaultContent,
|
|
1673
|
+
] = getStoreFunctions(supportedStoreType, store);
|
|
1615
1674
|
const run = async () => {
|
|
1616
1675
|
/* istanbul ignore else */
|
|
1617
1676
|
if (!mapGet(scheduleRunning, scheduleId)) {
|
|
@@ -1629,109 +1688,121 @@ const createCustomPersister = (
|
|
|
1629
1688
|
mapSet(scheduleRunning, scheduleId, 0);
|
|
1630
1689
|
}
|
|
1631
1690
|
};
|
|
1632
|
-
const
|
|
1691
|
+
const setContentOrChanges = (contentOrChanges) => {
|
|
1692
|
+
(isMergeableStore && isArray(contentOrChanges?.[0])
|
|
1693
|
+
? contentOrChanges?.[2] === 1
|
|
1694
|
+
? store.applyMergeableChanges
|
|
1695
|
+
: store.setMergeableContent
|
|
1696
|
+
: contentOrChanges?.[2] === 1
|
|
1697
|
+
? store.applyChanges
|
|
1698
|
+
: store.setContent)(contentOrChanges);
|
|
1699
|
+
};
|
|
1700
|
+
const load = async (initialContent) => {
|
|
1633
1701
|
/* istanbul ignore else */
|
|
1634
1702
|
if (loadSave != 2) {
|
|
1635
1703
|
loadSave = 1;
|
|
1636
1704
|
{
|
|
1637
1705
|
loads++;
|
|
1638
1706
|
}
|
|
1639
|
-
await
|
|
1640
|
-
|
|
1707
|
+
await schedule(async () => {
|
|
1708
|
+
try {
|
|
1709
|
+
setContentOrChanges(await getPersisted());
|
|
1710
|
+
} catch (error) {
|
|
1711
|
+
onIgnoredError?.(error);
|
|
1712
|
+
if (initialContent) {
|
|
1713
|
+
setDefaultContent(initialContent);
|
|
1714
|
+
}
|
|
1715
|
+
}
|
|
1641
1716
|
loadSave = 0;
|
|
1642
1717
|
});
|
|
1643
1718
|
}
|
|
1644
1719
|
return persister;
|
|
1645
1720
|
};
|
|
1646
|
-
const
|
|
1647
|
-
|
|
1648
|
-
|
|
1649
|
-
|
|
1650
|
-
|
|
1651
|
-
|
|
1652
|
-
|
|
1653
|
-
|
|
1654
|
-
|
|
1655
|
-
startAutoLoad: async (initialTables = {}, initialValues = {}) => {
|
|
1656
|
-
persister.stopAutoLoad();
|
|
1657
|
-
await persister.load(initialTables, initialValues);
|
|
1658
|
-
listening = 1;
|
|
1659
|
-
listeningHandle = addPersisterListener(
|
|
1660
|
-
async (getContent, getTransactionChanges) => {
|
|
1661
|
-
if (getTransactionChanges) {
|
|
1662
|
-
const transactionChanges = getTransactionChanges();
|
|
1663
|
-
await loadLock(async () =>
|
|
1664
|
-
store.setTransactionChanges(transactionChanges),
|
|
1665
|
-
);
|
|
1666
|
-
} else {
|
|
1667
|
-
await loadLock(async () => {
|
|
1668
|
-
try {
|
|
1669
|
-
store.setContent(getContent?.() ?? (await getPersisted()));
|
|
1670
|
-
} catch (error) {
|
|
1671
|
-
onIgnoredError?.(error);
|
|
1672
|
-
}
|
|
1673
|
-
});
|
|
1721
|
+
const startAutoLoad = async (initialContent) => {
|
|
1722
|
+
await stopAutoLoad().load(initialContent);
|
|
1723
|
+
autoLoadHandle = addPersisterListener(async (content, changes) => {
|
|
1724
|
+
if (changes || content) {
|
|
1725
|
+
/* istanbul ignore else */
|
|
1726
|
+
if (loadSave != 2) {
|
|
1727
|
+
loadSave = 1;
|
|
1728
|
+
{
|
|
1729
|
+
loads++;
|
|
1674
1730
|
}
|
|
1675
|
-
|
|
1676
|
-
|
|
1677
|
-
|
|
1678
|
-
|
|
1679
|
-
|
|
1680
|
-
if (listening) {
|
|
1681
|
-
delPersisterListener(listeningHandle);
|
|
1682
|
-
listeningHandle = void 0;
|
|
1683
|
-
listening = 0;
|
|
1731
|
+
setContentOrChanges(changes ?? content);
|
|
1732
|
+
loadSave = 0;
|
|
1733
|
+
}
|
|
1734
|
+
} else {
|
|
1735
|
+
await load();
|
|
1684
1736
|
}
|
|
1685
|
-
|
|
1686
|
-
|
|
1687
|
-
|
|
1688
|
-
|
|
1689
|
-
|
|
1690
|
-
|
|
1691
|
-
|
|
1692
|
-
|
|
1737
|
+
});
|
|
1738
|
+
return persister;
|
|
1739
|
+
};
|
|
1740
|
+
const stopAutoLoad = () => {
|
|
1741
|
+
if (autoLoadHandle) {
|
|
1742
|
+
delPersisterListener(autoLoadHandle);
|
|
1743
|
+
autoLoadHandle = void 0;
|
|
1744
|
+
}
|
|
1745
|
+
return persister;
|
|
1746
|
+
};
|
|
1747
|
+
const isAutoLoading = () => !isUndefined(autoLoadHandle);
|
|
1748
|
+
const save = async (changes) => {
|
|
1749
|
+
/* istanbul ignore else */
|
|
1750
|
+
if (loadSave != 1) {
|
|
1751
|
+
loadSave = 2;
|
|
1752
|
+
{
|
|
1753
|
+
saves++;
|
|
1754
|
+
}
|
|
1755
|
+
await schedule(async () => {
|
|
1756
|
+
try {
|
|
1757
|
+
await setPersisted(getContent, changes);
|
|
1758
|
+
} catch (error) {
|
|
1759
|
+
/* istanbul ignore next */
|
|
1760
|
+
onIgnoredError?.(error);
|
|
1693
1761
|
}
|
|
1694
|
-
|
|
1695
|
-
|
|
1696
|
-
|
|
1697
|
-
|
|
1698
|
-
|
|
1699
|
-
|
|
1700
|
-
|
|
1701
|
-
|
|
1702
|
-
|
|
1762
|
+
loadSave = 0;
|
|
1763
|
+
});
|
|
1764
|
+
}
|
|
1765
|
+
return persister;
|
|
1766
|
+
};
|
|
1767
|
+
const startAutoSave = async () => {
|
|
1768
|
+
await stopAutoSave().save();
|
|
1769
|
+
autoSaveListenerId = store.addDidFinishTransactionListener(() => {
|
|
1770
|
+
const changes = getChanges();
|
|
1771
|
+
if (hasChanges(changes)) {
|
|
1772
|
+
save(changes);
|
|
1703
1773
|
}
|
|
1704
|
-
|
|
1705
|
-
|
|
1706
|
-
|
|
1707
|
-
|
|
1708
|
-
|
|
1709
|
-
|
|
1710
|
-
|
|
1711
|
-
|
|
1712
|
-
|
|
1713
|
-
|
|
1714
|
-
|
|
1715
|
-
|
|
1716
|
-
|
|
1717
|
-
|
|
1718
|
-
|
|
1719
|
-
|
|
1720
|
-
|
|
1721
|
-
|
|
1722
|
-
|
|
1723
|
-
|
|
1724
|
-
|
|
1725
|
-
|
|
1726
|
-
|
|
1727
|
-
|
|
1728
|
-
|
|
1729
|
-
|
|
1730
|
-
|
|
1774
|
+
});
|
|
1775
|
+
return persister;
|
|
1776
|
+
};
|
|
1777
|
+
const stopAutoSave = () => {
|
|
1778
|
+
ifNotUndefined(autoSaveListenerId, store.delListener);
|
|
1779
|
+
autoSaveListenerId = void 0;
|
|
1780
|
+
return persister;
|
|
1781
|
+
};
|
|
1782
|
+
const isAutoSaving = () => !isUndefined(autoSaveListenerId);
|
|
1783
|
+
const schedule = async (...actions) => {
|
|
1784
|
+
arrayPush(mapGet(scheduleActions, scheduleId), ...actions);
|
|
1785
|
+
await run();
|
|
1786
|
+
return persister;
|
|
1787
|
+
};
|
|
1788
|
+
const getStore = () => store;
|
|
1789
|
+
const destroy = () => stopAutoLoad().stopAutoSave();
|
|
1790
|
+
const getStats = () => ({loads, saves});
|
|
1791
|
+
const persister = {
|
|
1792
|
+
load,
|
|
1793
|
+
startAutoLoad,
|
|
1794
|
+
stopAutoLoad,
|
|
1795
|
+
isAutoLoading,
|
|
1796
|
+
save,
|
|
1797
|
+
startAutoSave,
|
|
1798
|
+
stopAutoSave,
|
|
1799
|
+
isAutoSaving,
|
|
1800
|
+
schedule,
|
|
1801
|
+
getStore,
|
|
1802
|
+
destroy,
|
|
1803
|
+
getStats,
|
|
1804
|
+
...extra,
|
|
1731
1805
|
};
|
|
1732
|
-
if (getThing) {
|
|
1733
|
-
persister[getThing] = () => thing;
|
|
1734
|
-
}
|
|
1735
1806
|
return objFreeze(persister);
|
|
1736
1807
|
};
|
|
1737
1808
|
|
|
@@ -1743,13 +1814,18 @@ const createStoragePersister = (
|
|
|
1743
1814
|
storage,
|
|
1744
1815
|
onIgnoredError,
|
|
1745
1816
|
) => {
|
|
1746
|
-
const getPersisted = async () =>
|
|
1817
|
+
const getPersisted = async () =>
|
|
1818
|
+
jsonParseWithUndefined(storage.getItem(storageName));
|
|
1747
1819
|
const setPersisted = async (getContent) =>
|
|
1748
|
-
storage.setItem(storageName,
|
|
1820
|
+
storage.setItem(storageName, jsonStringWithUndefined(getContent()));
|
|
1749
1821
|
const addPersisterListener = (listener) => {
|
|
1750
1822
|
const storageListener = (event) => {
|
|
1751
1823
|
if (event.storageArea === storage && event.key === storageName) {
|
|
1752
|
-
|
|
1824
|
+
try {
|
|
1825
|
+
listener(jsonParse(event.newValue));
|
|
1826
|
+
} catch {
|
|
1827
|
+
listener();
|
|
1828
|
+
}
|
|
1753
1829
|
}
|
|
1754
1830
|
};
|
|
1755
1831
|
WINDOW.addEventListener(STORAGE, storageListener);
|
|
@@ -1764,7 +1840,8 @@ const createStoragePersister = (
|
|
|
1764
1840
|
addPersisterListener,
|
|
1765
1841
|
delPersisterListener,
|
|
1766
1842
|
onIgnoredError,
|
|
1767
|
-
|
|
1843
|
+
3,
|
|
1844
|
+
{getStorageName: () => storageName},
|
|
1768
1845
|
);
|
|
1769
1846
|
};
|
|
1770
1847
|
const createSessionPersister = (store, storageName, onIgnoredError) =>
|
|
@@ -1871,18 +1948,6 @@ const pairIsEqual = ([entry1, entry2]) => entry1 === entry2;
|
|
|
1871
1948
|
const defaultSorter = (sortKey1, sortKey2) =>
|
|
1872
1949
|
(sortKey1 ?? 0) < (sortKey2 ?? 0) ? -1 : 1;
|
|
1873
1950
|
|
|
1874
|
-
const validate = (obj, validateChild, onInvalidObj) => {
|
|
1875
|
-
if (isUndefined(obj) || !isObject(obj) || objIsEmpty(obj) || objFrozen(obj)) {
|
|
1876
|
-
onInvalidObj?.();
|
|
1877
|
-
return false;
|
|
1878
|
-
}
|
|
1879
|
-
objMap(obj, (child, id2) => {
|
|
1880
|
-
if (!validateChild(child, id2)) {
|
|
1881
|
-
objDel(obj, id2);
|
|
1882
|
-
}
|
|
1883
|
-
});
|
|
1884
|
-
return !objIsEmpty(obj);
|
|
1885
|
-
};
|
|
1886
1951
|
const idsChanged = (changedIds, id2, addedOrRemoved) =>
|
|
1887
1952
|
mapSet(
|
|
1888
1953
|
changedIds,
|
|
@@ -1892,11 +1957,10 @@ const idsChanged = (changedIds, id2, addedOrRemoved) =>
|
|
|
1892
1957
|
const createStore = () => {
|
|
1893
1958
|
let hasTablesSchema;
|
|
1894
1959
|
let hasValuesSchema;
|
|
1895
|
-
let cellsTouched = false;
|
|
1896
|
-
let valuesTouched = false;
|
|
1897
1960
|
let hadTables = false;
|
|
1898
1961
|
let hadValues = false;
|
|
1899
1962
|
let transactions = 0;
|
|
1963
|
+
let internalListeners = [];
|
|
1900
1964
|
const changedTableIds = mapNew();
|
|
1901
1965
|
const changedTableCellIds = mapNew();
|
|
1902
1966
|
const changedRowCount = mapNew();
|
|
@@ -1943,13 +2007,13 @@ const createStore = () => {
|
|
|
1943
2007
|
const [addListener, callListeners, delListenerImpl, callListenerImpl] =
|
|
1944
2008
|
getListenerFunctions(() => store);
|
|
1945
2009
|
const validateTablesSchema = (tableSchema) =>
|
|
1946
|
-
|
|
1947
|
-
|
|
2010
|
+
objValidate(tableSchema, (tableSchema2) =>
|
|
2011
|
+
objValidate(tableSchema2, validateCellOrValueSchema),
|
|
1948
2012
|
);
|
|
1949
2013
|
const validateValuesSchema = (valuesSchema) =>
|
|
1950
|
-
|
|
2014
|
+
objValidate(valuesSchema, validateCellOrValueSchema);
|
|
1951
2015
|
const validateCellOrValueSchema = (schema) => {
|
|
1952
|
-
if (!
|
|
2016
|
+
if (!objValidate(schema, (_child, id2) => arrayHas([TYPE, DEFAULT], id2))) {
|
|
1953
2017
|
return false;
|
|
1954
2018
|
}
|
|
1955
2019
|
const type = schema[TYPE];
|
|
@@ -1962,18 +2026,18 @@ const createStore = () => {
|
|
|
1962
2026
|
return true;
|
|
1963
2027
|
};
|
|
1964
2028
|
const validateTables = (tables) =>
|
|
1965
|
-
|
|
2029
|
+
objValidate(tables, validateTable, cellInvalid);
|
|
1966
2030
|
const validateTable = (table, tableId) =>
|
|
1967
2031
|
(!hasTablesSchema ||
|
|
1968
2032
|
collHas(tablesSchemaMap, tableId) ||
|
|
1969
2033
|
cellInvalid(tableId)) &&
|
|
1970
|
-
|
|
2034
|
+
objValidate(
|
|
1971
2035
|
table,
|
|
1972
2036
|
(row, rowId) => validateRow(tableId, rowId, row),
|
|
1973
2037
|
() => cellInvalid(tableId),
|
|
1974
2038
|
);
|
|
1975
2039
|
const validateRow = (tableId, rowId, row, skipDefaults) =>
|
|
1976
|
-
|
|
2040
|
+
objValidate(
|
|
1977
2041
|
skipDefaults ? row : addDefaultsToRow(row, tableId, rowId),
|
|
1978
2042
|
(cell, cellId) =>
|
|
1979
2043
|
ifNotUndefined(
|
|
@@ -2000,7 +2064,7 @@ const createStore = () => {
|
|
|
2000
2064
|
? cellInvalid(tableId, rowId, cellId, cell)
|
|
2001
2065
|
: cell;
|
|
2002
2066
|
const validateValues = (values, skipDefaults) =>
|
|
2003
|
-
|
|
2067
|
+
objValidate(
|
|
2004
2068
|
skipDefaults ? values : addDefaultsToValues(values),
|
|
2005
2069
|
(value, valueId) =>
|
|
2006
2070
|
ifNotUndefined(
|
|
@@ -2263,16 +2327,20 @@ const createStore = () => {
|
|
|
2263
2327
|
addedOrRemoved,
|
|
2264
2328
|
);
|
|
2265
2329
|
};
|
|
2266
|
-
const cellChanged = (tableId, rowId, cellId, oldCell, newCell) =>
|
|
2267
|
-
|
|
2330
|
+
const cellChanged = (tableId, rowId, cellId, oldCell, newCell) => {
|
|
2331
|
+
mapEnsure(
|
|
2268
2332
|
mapEnsure(mapEnsure(changedCells, tableId, mapNew), rowId, mapNew),
|
|
2269
2333
|
cellId,
|
|
2270
2334
|
() => [oldCell, 0],
|
|
2271
|
-
)[1] = newCell
|
|
2335
|
+
)[1] = newCell;
|
|
2336
|
+
internalListeners[3]?.(tableId, rowId, cellId, newCell);
|
|
2337
|
+
};
|
|
2272
2338
|
const valueIdsChanged = (valueId, addedOrRemoved) =>
|
|
2273
2339
|
idsChanged(changedValueIds, valueId, addedOrRemoved);
|
|
2274
|
-
const valueChanged = (valueId, oldValue, newValue) =>
|
|
2275
|
-
|
|
2340
|
+
const valueChanged = (valueId, oldValue, newValue) => {
|
|
2341
|
+
mapEnsure(changedValues, valueId, () => [oldValue, 0])[1] = newValue;
|
|
2342
|
+
internalListeners[4]?.(valueId, newValue);
|
|
2343
|
+
};
|
|
2276
2344
|
const cellInvalid = (tableId, rowId, cellId, invalidCell, defaultedCell) => {
|
|
2277
2345
|
arrayPush(
|
|
2278
2346
|
mapEnsure(
|
|
@@ -2538,44 +2606,6 @@ const createStore = () => {
|
|
|
2538
2606
|
transaction(() => actions(...arrayMap(args, id)));
|
|
2539
2607
|
return store;
|
|
2540
2608
|
};
|
|
2541
|
-
const getTransactionChanges = () => [
|
|
2542
|
-
mapToObj(
|
|
2543
|
-
changedCells,
|
|
2544
|
-
(table, tableId) =>
|
|
2545
|
-
mapGet(changedTableIds, tableId) === -1
|
|
2546
|
-
? null
|
|
2547
|
-
: mapToObj(
|
|
2548
|
-
table,
|
|
2549
|
-
(row, rowId) =>
|
|
2550
|
-
mapGet(mapGet(changedRowIds, tableId), rowId) === -1
|
|
2551
|
-
? null
|
|
2552
|
-
: mapToObj(
|
|
2553
|
-
row,
|
|
2554
|
-
([, newCell]) => newCell ?? null,
|
|
2555
|
-
(_, changedCell) => pairIsEqual(changedCell),
|
|
2556
|
-
),
|
|
2557
|
-
objIsEmpty,
|
|
2558
|
-
),
|
|
2559
|
-
objIsEmpty,
|
|
2560
|
-
),
|
|
2561
|
-
mapToObj(
|
|
2562
|
-
changedValues,
|
|
2563
|
-
([, newValue]) => newValue ?? null,
|
|
2564
|
-
(_, changedValue) => pairIsEqual(changedValue),
|
|
2565
|
-
),
|
|
2566
|
-
];
|
|
2567
|
-
const getTransactionLog = () => ({
|
|
2568
|
-
cellsTouched,
|
|
2569
|
-
valuesTouched,
|
|
2570
|
-
changedCells: mapToObj3(changedCells, pairClone, pairIsEqual),
|
|
2571
|
-
invalidCells: mapToObj3(invalidCells),
|
|
2572
|
-
changedValues: mapToObj(changedValues, pairClone, pairIsEqual),
|
|
2573
|
-
invalidValues: mapToObj(invalidValues),
|
|
2574
|
-
changedTableIds: mapToObj(changedTableIds),
|
|
2575
|
-
changedRowIds: mapToObj2(changedRowIds),
|
|
2576
|
-
changedCellIds: mapToObj3(changedCellIds),
|
|
2577
|
-
changedValueIds: mapToObj(changedValueIds),
|
|
2578
|
-
});
|
|
2579
2609
|
const getContent = () => [getTables(), getValues()];
|
|
2580
2610
|
const getTables = () => mapToObj3(tablesMap);
|
|
2581
2611
|
const getTableIds = () => mapKeys(tablesMap);
|
|
@@ -2619,12 +2649,13 @@ const createStore = () => {
|
|
|
2619
2649
|
collHas(mapGet(mapGet(tablesMap, id(tableId)), id(rowId)), id(cellId));
|
|
2620
2650
|
const hasValues = () => !collIsEmpty(valuesMap);
|
|
2621
2651
|
const hasValue = (valueId) => collHas(valuesMap, id(valueId));
|
|
2622
|
-
const getTablesJson = () =>
|
|
2623
|
-
const getValuesJson = () =>
|
|
2624
|
-
const getJson = () =>
|
|
2625
|
-
const getTablesSchemaJson = () =>
|
|
2626
|
-
const getValuesSchemaJson = () =>
|
|
2627
|
-
const getSchemaJson = () =>
|
|
2652
|
+
const getTablesJson = () => jsonStringWithMap(tablesMap);
|
|
2653
|
+
const getValuesJson = () => jsonStringWithMap(valuesMap);
|
|
2654
|
+
const getJson = () => jsonStringWithMap([tablesMap, valuesMap]);
|
|
2655
|
+
const getTablesSchemaJson = () => jsonStringWithMap(tablesSchemaMap);
|
|
2656
|
+
const getValuesSchemaJson = () => jsonStringWithMap(valuesSchemaMap);
|
|
2657
|
+
const getSchemaJson = () =>
|
|
2658
|
+
jsonStringWithMap([tablesSchemaMap, valuesSchemaMap]);
|
|
2628
2659
|
const setContent = ([tables, values]) =>
|
|
2629
2660
|
fluentTransaction(() => {
|
|
2630
2661
|
(objIsEmpty(tables) ? delTables : setTables)(tables);
|
|
@@ -2668,7 +2699,7 @@ const createStore = () => {
|
|
|
2668
2699
|
(tableId2, rowId2) => {
|
|
2669
2700
|
if (validateRow(tableId2, rowId2, partialRow, 1)) {
|
|
2670
2701
|
const table = getOrCreateTable(tableId2);
|
|
2671
|
-
|
|
2702
|
+
objToArray(partialRow, (cell, cellId) =>
|
|
2672
2703
|
setCellIntoDefaultRow(tableId2, table, rowId2, cellId, cell),
|
|
2673
2704
|
);
|
|
2674
2705
|
}
|
|
@@ -2706,7 +2737,7 @@ const createStore = () => {
|
|
|
2706
2737
|
const setPartialValues = (partialValues) =>
|
|
2707
2738
|
fluentTransaction(() =>
|
|
2708
2739
|
validateValues(partialValues, 1)
|
|
2709
|
-
?
|
|
2740
|
+
? objToArray(partialValues, (value, valueId) =>
|
|
2710
2741
|
setValidValue(valueId, value),
|
|
2711
2742
|
)
|
|
2712
2743
|
: 0,
|
|
@@ -2723,20 +2754,20 @@ const createStore = () => {
|
|
|
2723
2754
|
),
|
|
2724
2755
|
valueId,
|
|
2725
2756
|
);
|
|
2726
|
-
const
|
|
2757
|
+
const applyChanges = (changes) =>
|
|
2727
2758
|
fluentTransaction(() => {
|
|
2728
|
-
|
|
2759
|
+
objToArray(changes[0], (table, tableId) =>
|
|
2729
2760
|
isUndefined(table)
|
|
2730
2761
|
? delTable(tableId)
|
|
2731
|
-
:
|
|
2762
|
+
: objToArray(table, (row, rowId) =>
|
|
2732
2763
|
isUndefined(row)
|
|
2733
2764
|
? delRow(tableId, rowId)
|
|
2734
|
-
:
|
|
2765
|
+
: objToArray(row, (cell, cellId) =>
|
|
2735
2766
|
setOrDelCell(store, tableId, rowId, cellId, cell),
|
|
2736
2767
|
),
|
|
2737
2768
|
),
|
|
2738
2769
|
);
|
|
2739
|
-
|
|
2770
|
+
objToArray(changes[1], (value, valueId) =>
|
|
2740
2771
|
setOrDelValue(store, valueId, value),
|
|
2741
2772
|
);
|
|
2742
2773
|
});
|
|
@@ -2863,31 +2894,66 @@ const createStore = () => {
|
|
|
2863
2894
|
transactions++;
|
|
2864
2895
|
}
|
|
2865
2896
|
if (transactions == 1) {
|
|
2866
|
-
|
|
2867
|
-
|
|
2868
|
-
void 0,
|
|
2869
|
-
getTransactionChanges,
|
|
2870
|
-
getTransactionLog,
|
|
2871
|
-
);
|
|
2897
|
+
internalListeners[0]?.();
|
|
2898
|
+
callListeners(startTransactionListeners);
|
|
2872
2899
|
}
|
|
2873
2900
|
return store;
|
|
2874
2901
|
};
|
|
2902
|
+
const getTransactionChanges = () => [
|
|
2903
|
+
mapToObj(
|
|
2904
|
+
changedCells,
|
|
2905
|
+
(table, tableId) =>
|
|
2906
|
+
mapGet(changedTableIds, tableId) === -1
|
|
2907
|
+
? void 0
|
|
2908
|
+
: mapToObj(
|
|
2909
|
+
table,
|
|
2910
|
+
(row, rowId) =>
|
|
2911
|
+
mapGet(mapGet(changedRowIds, tableId), rowId) === -1
|
|
2912
|
+
? void 0
|
|
2913
|
+
: mapToObj(
|
|
2914
|
+
row,
|
|
2915
|
+
([, newCell]) => newCell,
|
|
2916
|
+
(changedCell) => pairIsEqual(changedCell),
|
|
2917
|
+
),
|
|
2918
|
+
collIsEmpty,
|
|
2919
|
+
objIsEmpty,
|
|
2920
|
+
),
|
|
2921
|
+
collIsEmpty,
|
|
2922
|
+
objIsEmpty,
|
|
2923
|
+
),
|
|
2924
|
+
mapToObj(
|
|
2925
|
+
changedValues,
|
|
2926
|
+
([, newValue]) => newValue,
|
|
2927
|
+
(changedValue) => pairIsEqual(changedValue),
|
|
2928
|
+
),
|
|
2929
|
+
1,
|
|
2930
|
+
];
|
|
2931
|
+
const getTransactionLog = () => [
|
|
2932
|
+
!collIsEmpty(changedCells),
|
|
2933
|
+
!collIsEmpty(changedValues),
|
|
2934
|
+
mapToObj3(changedCells, pairClone, pairIsEqual),
|
|
2935
|
+
mapToObj3(invalidCells),
|
|
2936
|
+
mapToObj(changedValues, pairClone, pairIsEqual),
|
|
2937
|
+
mapToObj(invalidValues),
|
|
2938
|
+
mapToObj(changedTableIds),
|
|
2939
|
+
mapToObj2(changedRowIds),
|
|
2940
|
+
mapToObj3(changedCellIds),
|
|
2941
|
+
mapToObj(changedValueIds),
|
|
2942
|
+
];
|
|
2875
2943
|
const finishTransaction = (doRollback) => {
|
|
2876
2944
|
if (transactions > 0) {
|
|
2877
2945
|
transactions--;
|
|
2878
2946
|
if (transactions == 0) {
|
|
2879
|
-
cellsTouched = !collIsEmpty(changedCells);
|
|
2880
|
-
valuesTouched = !collIsEmpty(changedValues);
|
|
2881
2947
|
transactions = 1;
|
|
2882
2948
|
callInvalidCellListeners(1);
|
|
2883
|
-
if (
|
|
2949
|
+
if (!collIsEmpty(changedCells)) {
|
|
2884
2950
|
callTabularListenersForChanges(1);
|
|
2885
2951
|
}
|
|
2886
2952
|
callInvalidValueListeners(1);
|
|
2887
|
-
if (
|
|
2953
|
+
if (!collIsEmpty(changedValues)) {
|
|
2888
2954
|
callValuesListenersForChanges(1);
|
|
2889
2955
|
}
|
|
2890
|
-
if (doRollback?.(
|
|
2956
|
+
if (doRollback?.(store)) {
|
|
2891
2957
|
collForEach(changedCells, (table, tableId) =>
|
|
2892
2958
|
collForEach(table, (row, rowId) =>
|
|
2893
2959
|
collForEach(row, ([oldCell], cellId) =>
|
|
@@ -2895,34 +2961,26 @@ const createStore = () => {
|
|
|
2895
2961
|
),
|
|
2896
2962
|
),
|
|
2897
2963
|
);
|
|
2964
|
+
collClear(changedCells);
|
|
2898
2965
|
collForEach(changedValues, ([oldValue], valueId) =>
|
|
2899
2966
|
setOrDelValue(store, valueId, oldValue),
|
|
2900
2967
|
);
|
|
2901
|
-
|
|
2968
|
+
collClear(changedValues);
|
|
2902
2969
|
}
|
|
2903
|
-
callListeners(
|
|
2904
|
-
finishTransactionListeners[0],
|
|
2905
|
-
void 0,
|
|
2906
|
-
getTransactionChanges,
|
|
2907
|
-
getTransactionLog,
|
|
2908
|
-
);
|
|
2970
|
+
callListeners(finishTransactionListeners[0], void 0);
|
|
2909
2971
|
transactions = -1;
|
|
2910
2972
|
callInvalidCellListeners(0);
|
|
2911
|
-
if (
|
|
2973
|
+
if (!collIsEmpty(changedCells)) {
|
|
2912
2974
|
callTabularListenersForChanges(0);
|
|
2913
2975
|
}
|
|
2914
2976
|
callInvalidValueListeners(0);
|
|
2915
|
-
if (
|
|
2977
|
+
if (!collIsEmpty(changedValues)) {
|
|
2916
2978
|
callValuesListenersForChanges(0);
|
|
2917
2979
|
}
|
|
2918
|
-
|
|
2919
|
-
|
|
2920
|
-
|
|
2921
|
-
getTransactionChanges,
|
|
2922
|
-
getTransactionLog,
|
|
2923
|
-
);
|
|
2980
|
+
internalListeners[1]?.();
|
|
2981
|
+
callListeners(finishTransactionListeners[1], void 0);
|
|
2982
|
+
internalListeners[2]?.();
|
|
2924
2983
|
transactions = 0;
|
|
2925
|
-
cellsTouched = valuesTouched = false;
|
|
2926
2984
|
hadTables = hasTables();
|
|
2927
2985
|
hadValues = hasValues();
|
|
2928
2986
|
arrayForEach(
|
|
@@ -3047,6 +3105,20 @@ const createStore = () => {
|
|
|
3047
3105
|
collSize2(startTransactionListeners) +
|
|
3048
3106
|
pairCollSize2(finishTransactionListeners),
|
|
3049
3107
|
});
|
|
3108
|
+
const setInternalListeners = (
|
|
3109
|
+
preStartTransaction,
|
|
3110
|
+
preFinishTransaction,
|
|
3111
|
+
postFinishTransaction,
|
|
3112
|
+
cellChanged2,
|
|
3113
|
+
valueChanged2,
|
|
3114
|
+
) =>
|
|
3115
|
+
(internalListeners = [
|
|
3116
|
+
preStartTransaction,
|
|
3117
|
+
preFinishTransaction,
|
|
3118
|
+
postFinishTransaction,
|
|
3119
|
+
cellChanged2,
|
|
3120
|
+
valueChanged2,
|
|
3121
|
+
]);
|
|
3050
3122
|
const store = {
|
|
3051
3123
|
getContent,
|
|
3052
3124
|
getTables,
|
|
@@ -3087,7 +3159,7 @@ const createStore = () => {
|
|
|
3087
3159
|
setValues,
|
|
3088
3160
|
setPartialValues,
|
|
3089
3161
|
setValue,
|
|
3090
|
-
|
|
3162
|
+
applyChanges,
|
|
3091
3163
|
setTablesJson,
|
|
3092
3164
|
setValuesJson,
|
|
3093
3165
|
setJson,
|
|
@@ -3105,6 +3177,8 @@ const createStore = () => {
|
|
|
3105
3177
|
delSchema,
|
|
3106
3178
|
transaction,
|
|
3107
3179
|
startTransaction,
|
|
3180
|
+
getTransactionChanges,
|
|
3181
|
+
getTransactionLog,
|
|
3108
3182
|
finishTransaction,
|
|
3109
3183
|
forEachTable,
|
|
3110
3184
|
forEachTableCell,
|
|
@@ -3122,8 +3196,9 @@ const createStore = () => {
|
|
|
3122
3196
|
createStore,
|
|
3123
3197
|
addListener,
|
|
3124
3198
|
callListeners,
|
|
3199
|
+
setInternalListeners,
|
|
3125
3200
|
};
|
|
3126
|
-
|
|
3201
|
+
objToArray(
|
|
3127
3202
|
{
|
|
3128
3203
|
[HAS + TABLES]: [0, hasTablesListeners, [], () => [hasTables()]],
|
|
3129
3204
|
[TABLES]: [0, tablesListeners],
|
|
@@ -3204,10 +3279,13 @@ const App = ({position = 'right', open = false}) => {
|
|
|
3204
3279
|
(s2) => createSessionPersister(s2, UNIQUE_ID),
|
|
3205
3280
|
void 0,
|
|
3206
3281
|
async (persister) => {
|
|
3207
|
-
await persister.load(
|
|
3208
|
-
|
|
3209
|
-
|
|
3210
|
-
|
|
3282
|
+
await persister.load([
|
|
3283
|
+
{},
|
|
3284
|
+
{
|
|
3285
|
+
position: index == -1 ? 1 : index,
|
|
3286
|
+
open: !!open,
|
|
3287
|
+
},
|
|
3288
|
+
]);
|
|
3211
3289
|
await persister.startAutoSave();
|
|
3212
3290
|
},
|
|
3213
3291
|
);
|