tinybase 5.0.0-beta.1 → 5.0.0-beta.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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 +110 -86
- package/lib/debug/persisters/persister-browser.js +94 -57
- package/lib/debug/persisters/persister-cr-sqlite-wasm.js +168 -106
- package/lib/debug/persisters/persister-electric-sql.js +168 -106
- package/lib/debug/persisters/persister-expo-sqlite-next.js +168 -106
- package/lib/debug/persisters/persister-expo-sqlite.js +168 -106
- package/lib/debug/persisters/persister-file.js +93 -57
- package/lib/debug/persisters/persister-indexed-db.js +90 -56
- package/lib/debug/persisters/persister-libsql.js +913 -0
- package/lib/debug/persisters/persister-partykit-client.js +89 -59
- package/lib/debug/persisters/persister-partykit-server.js +17 -25
- package/lib/debug/persisters/persister-powersync.js +928 -0
- package/lib/debug/persisters/persister-remote.js +85 -53
- package/lib/debug/persisters/persister-sqlite-wasm.js +168 -106
- package/lib/debug/persisters/persister-sqlite3.js +168 -106
- package/lib/debug/persisters/persister-yjs.js +108 -83
- package/lib/debug/persisters.js +81 -50
- 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 +559 -0
- package/lib/debug/synchronizers/synchronizer-ws-client.js +586 -0
- package/lib/debug/synchronizers/synchronizer-ws-server.js +96 -0
- package/lib/debug/synchronizers.js +519 -0
- package/lib/debug/tinybase.js +1027 -174
- package/lib/debug/tools.js +22 -21
- package/lib/debug/ui-react-dom.js +275 -213
- 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 +125 -48
- package/lib/types/queries.d.ts +2 -2
- package/lib/types/relationships.d.ts +2 -2
- package/lib/types/store.d.ts +275 -187
- package/lib/types/synchronizers/synchronizer-local.d.ts +27 -0
- package/lib/types/synchronizers/synchronizer-ws-client.d.ts +35 -0
- package/lib/types/synchronizers/synchronizer-ws-server.d.ts +36 -0
- package/lib/types/synchronizers.d.ts +132 -0
- package/lib/types/tinybase.d.ts +10 -8
- package/lib/types/tools.d.ts +4 -4
- package/lib/types/ui-react.d.ts +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 +161 -101
- package/lib/types/with-schemas/queries.d.ts +3 -3
- package/lib/types/with-schemas/relationships.d.ts +2 -2
- package/lib/types/with-schemas/store.d.ts +483 -345
- package/lib/types/with-schemas/synchronizers/synchronizer-local.d.ts +29 -0
- package/lib/types/with-schemas/synchronizers/synchronizer-ws-client.d.ts +41 -0
- package/lib/types/with-schemas/synchronizers/synchronizer-ws-server.d.ts +36 -0
- package/lib/types/with-schemas/synchronizers.d.ts +146 -0
- package/lib/types/with-schemas/tinybase.d.ts +9 -8
- package/lib/types/with-schemas/tools.d.ts +4 -4
- package/lib/types/with-schemas/ui-react.d.ts +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,24 @@ const visitTree = (node, path, ensureLeaf, pruneLeaf, p = 0) =>
|
|
|
1593
1624
|
|
|
1594
1625
|
const scheduleRunning = mapNew();
|
|
1595
1626
|
const scheduleActions = mapNew();
|
|
1627
|
+
const getStoreFunctions = (supportsMergeableStore, store) =>
|
|
1628
|
+
!supportsMergeableStore || isUndefined(store.getMergeableContent)
|
|
1629
|
+
? [
|
|
1630
|
+
0,
|
|
1631
|
+
store.getContent,
|
|
1632
|
+
store.getTransactionChanges,
|
|
1633
|
+
([changedTables, changedValues]) =>
|
|
1634
|
+
!objIsEmpty(changedTables) || !objIsEmpty(changedValues),
|
|
1635
|
+
store.setContent,
|
|
1636
|
+
]
|
|
1637
|
+
: [
|
|
1638
|
+
1,
|
|
1639
|
+
store.getMergeableContent,
|
|
1640
|
+
store.getTransactionMergeableChanges,
|
|
1641
|
+
([[changedTables], [changedValues]]) =>
|
|
1642
|
+
!objIsEmpty(changedTables) || !objIsEmpty(changedValues),
|
|
1643
|
+
store.setDefaultContent,
|
|
1644
|
+
];
|
|
1596
1645
|
const createCustomPersister = (
|
|
1597
1646
|
store,
|
|
1598
1647
|
getPersisted,
|
|
@@ -1600,18 +1649,25 @@ const createCustomPersister = (
|
|
|
1600
1649
|
addPersisterListener,
|
|
1601
1650
|
delPersisterListener,
|
|
1602
1651
|
onIgnoredError,
|
|
1603
|
-
|
|
1652
|
+
supportsMergeableStore,
|
|
1653
|
+
extra = {},
|
|
1604
1654
|
scheduleId = [],
|
|
1605
1655
|
) => {
|
|
1606
|
-
let listenerId;
|
|
1607
1656
|
let loadSave = 0;
|
|
1608
1657
|
let loads = 0;
|
|
1609
1658
|
let saves = 0;
|
|
1610
|
-
let listening = 0;
|
|
1611
1659
|
let action;
|
|
1612
|
-
let
|
|
1660
|
+
let autoLoadHandle;
|
|
1661
|
+
let autoSaveListenerId;
|
|
1613
1662
|
mapEnsure(scheduleRunning, scheduleId, () => 0);
|
|
1614
1663
|
mapEnsure(scheduleActions, scheduleId, () => []);
|
|
1664
|
+
const [
|
|
1665
|
+
isMergeableStore,
|
|
1666
|
+
getContent,
|
|
1667
|
+
getChanges,
|
|
1668
|
+
hasChanges,
|
|
1669
|
+
setDefaultContent,
|
|
1670
|
+
] = getStoreFunctions(supportsMergeableStore, store);
|
|
1615
1671
|
const run = async () => {
|
|
1616
1672
|
/* istanbul ignore else */
|
|
1617
1673
|
if (!mapGet(scheduleRunning, scheduleId)) {
|
|
@@ -1643,48 +1699,54 @@ const createCustomPersister = (
|
|
|
1643
1699
|
}
|
|
1644
1700
|
return persister;
|
|
1645
1701
|
};
|
|
1702
|
+
const setContentOrChanges = (contentOrChanges) => {
|
|
1703
|
+
(isMergeableStore && isArray(contentOrChanges?.[0])
|
|
1704
|
+
? contentOrChanges?.[2] === 1
|
|
1705
|
+
? store.applyMergeableChanges
|
|
1706
|
+
: store.setMergeableContent
|
|
1707
|
+
: contentOrChanges?.[2] === 1
|
|
1708
|
+
? store.applyChanges
|
|
1709
|
+
: store.setContent)(contentOrChanges);
|
|
1710
|
+
};
|
|
1646
1711
|
const persister = {
|
|
1647
|
-
load: async (
|
|
1712
|
+
load: async (initialContent) =>
|
|
1648
1713
|
await loadLock(async () => {
|
|
1649
1714
|
try {
|
|
1650
|
-
|
|
1651
|
-
} catch {
|
|
1652
|
-
|
|
1715
|
+
setContentOrChanges(await getPersisted());
|
|
1716
|
+
} catch (error) {
|
|
1717
|
+
onIgnoredError?.(error);
|
|
1718
|
+
if (initialContent) {
|
|
1719
|
+
setDefaultContent(initialContent);
|
|
1720
|
+
}
|
|
1653
1721
|
}
|
|
1654
1722
|
}),
|
|
1655
|
-
startAutoLoad: async (
|
|
1656
|
-
persister.stopAutoLoad();
|
|
1657
|
-
|
|
1658
|
-
|
|
1659
|
-
|
|
1660
|
-
|
|
1661
|
-
|
|
1662
|
-
|
|
1663
|
-
|
|
1664
|
-
|
|
1665
|
-
)
|
|
1666
|
-
|
|
1667
|
-
|
|
1668
|
-
|
|
1669
|
-
store.setContent(getContent?.() ?? (await getPersisted()));
|
|
1670
|
-
} catch (error) {
|
|
1671
|
-
onIgnoredError?.(error);
|
|
1672
|
-
}
|
|
1673
|
-
});
|
|
1674
|
-
}
|
|
1723
|
+
startAutoLoad: async (initialContent) => {
|
|
1724
|
+
await persister.stopAutoLoad().load(initialContent);
|
|
1725
|
+
autoLoadHandle = addPersisterListener(
|
|
1726
|
+
async (getContent2, getChanges2) => {
|
|
1727
|
+
const changes = getChanges2?.();
|
|
1728
|
+
await loadLock(async () => {
|
|
1729
|
+
try {
|
|
1730
|
+
setContentOrChanges(
|
|
1731
|
+
changes ?? getContent2?.() ?? (await getPersisted()),
|
|
1732
|
+
);
|
|
1733
|
+
} catch (error) {
|
|
1734
|
+
onIgnoredError?.(error);
|
|
1735
|
+
}
|
|
1736
|
+
});
|
|
1675
1737
|
},
|
|
1676
1738
|
);
|
|
1677
1739
|
return persister;
|
|
1678
1740
|
},
|
|
1679
1741
|
stopAutoLoad: () => {
|
|
1680
|
-
if (
|
|
1681
|
-
delPersisterListener(
|
|
1682
|
-
|
|
1683
|
-
listening = 0;
|
|
1742
|
+
if (autoLoadHandle) {
|
|
1743
|
+
delPersisterListener(autoLoadHandle);
|
|
1744
|
+
autoLoadHandle = void 0;
|
|
1684
1745
|
}
|
|
1685
1746
|
return persister;
|
|
1686
1747
|
},
|
|
1687
|
-
|
|
1748
|
+
isAutoLoading: () => !isUndefined(autoLoadHandle),
|
|
1749
|
+
save: async (getChanges2) => {
|
|
1688
1750
|
/* istanbul ignore else */
|
|
1689
1751
|
if (loadSave != 1) {
|
|
1690
1752
|
loadSave = 2;
|
|
@@ -1693,7 +1755,7 @@ const createCustomPersister = (
|
|
|
1693
1755
|
}
|
|
1694
1756
|
await persister.schedule(async () => {
|
|
1695
1757
|
try {
|
|
1696
|
-
await setPersisted(
|
|
1758
|
+
await setPersisted(getContent, getChanges2);
|
|
1697
1759
|
} catch (error) {
|
|
1698
1760
|
/* istanbul ignore next */
|
|
1699
1761
|
onIgnoredError?.(error);
|
|
@@ -1705,21 +1767,20 @@ const createCustomPersister = (
|
|
|
1705
1767
|
},
|
|
1706
1768
|
startAutoSave: async () => {
|
|
1707
1769
|
await persister.stopAutoSave().save();
|
|
1708
|
-
|
|
1709
|
-
|
|
1710
|
-
|
|
1711
|
-
|
|
1712
|
-
|
|
1713
|
-
|
|
1714
|
-
},
|
|
1715
|
-
);
|
|
1770
|
+
autoSaveListenerId = store.addDidFinishTransactionListener(() => {
|
|
1771
|
+
const changes = getChanges();
|
|
1772
|
+
if (hasChanges(changes)) {
|
|
1773
|
+
persister.save(() => changes);
|
|
1774
|
+
}
|
|
1775
|
+
});
|
|
1716
1776
|
return persister;
|
|
1717
1777
|
},
|
|
1718
1778
|
stopAutoSave: () => {
|
|
1719
|
-
ifNotUndefined(
|
|
1720
|
-
|
|
1779
|
+
ifNotUndefined(autoSaveListenerId, store.delListener);
|
|
1780
|
+
autoSaveListenerId = void 0;
|
|
1721
1781
|
return persister;
|
|
1722
1782
|
},
|
|
1783
|
+
isAutoSaving: () => !isUndefined(autoSaveListenerId),
|
|
1723
1784
|
schedule: async (...actions) => {
|
|
1724
1785
|
arrayPush(mapGet(scheduleActions, scheduleId), ...actions);
|
|
1725
1786
|
await run();
|
|
@@ -1728,10 +1789,8 @@ const createCustomPersister = (
|
|
|
1728
1789
|
getStore: () => store,
|
|
1729
1790
|
destroy: () => persister.stopAutoLoad().stopAutoSave(),
|
|
1730
1791
|
getStats: () => ({loads, saves}),
|
|
1792
|
+
...extra,
|
|
1731
1793
|
};
|
|
1732
|
-
if (getThing) {
|
|
1733
|
-
persister[getThing] = () => thing;
|
|
1734
|
-
}
|
|
1735
1794
|
return objFreeze(persister);
|
|
1736
1795
|
};
|
|
1737
1796
|
|
|
@@ -1743,9 +1802,10 @@ const createStoragePersister = (
|
|
|
1743
1802
|
storage,
|
|
1744
1803
|
onIgnoredError,
|
|
1745
1804
|
) => {
|
|
1746
|
-
const getPersisted = async () =>
|
|
1805
|
+
const getPersisted = async () =>
|
|
1806
|
+
jsonParseWithUndefined(storage.getItem(storageName));
|
|
1747
1807
|
const setPersisted = async (getContent) =>
|
|
1748
|
-
storage.setItem(storageName,
|
|
1808
|
+
storage.setItem(storageName, jsonStringWithUndefined(getContent()));
|
|
1749
1809
|
const addPersisterListener = (listener) => {
|
|
1750
1810
|
const storageListener = (event) => {
|
|
1751
1811
|
if (event.storageArea === storage && event.key === storageName) {
|
|
@@ -1764,7 +1824,8 @@ const createStoragePersister = (
|
|
|
1764
1824
|
addPersisterListener,
|
|
1765
1825
|
delPersisterListener,
|
|
1766
1826
|
onIgnoredError,
|
|
1767
|
-
|
|
1827
|
+
true,
|
|
1828
|
+
{getStorageName: () => storageName},
|
|
1768
1829
|
);
|
|
1769
1830
|
};
|
|
1770
1831
|
const createSessionPersister = (store, storageName, onIgnoredError) =>
|
|
@@ -1871,18 +1932,6 @@ const pairIsEqual = ([entry1, entry2]) => entry1 === entry2;
|
|
|
1871
1932
|
const defaultSorter = (sortKey1, sortKey2) =>
|
|
1872
1933
|
(sortKey1 ?? 0) < (sortKey2 ?? 0) ? -1 : 1;
|
|
1873
1934
|
|
|
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
1935
|
const idsChanged = (changedIds, id2, addedOrRemoved) =>
|
|
1887
1936
|
mapSet(
|
|
1888
1937
|
changedIds,
|
|
@@ -1892,11 +1941,10 @@ const idsChanged = (changedIds, id2, addedOrRemoved) =>
|
|
|
1892
1941
|
const createStore = () => {
|
|
1893
1942
|
let hasTablesSchema;
|
|
1894
1943
|
let hasValuesSchema;
|
|
1895
|
-
let cellsTouched = false;
|
|
1896
|
-
let valuesTouched = false;
|
|
1897
1944
|
let hadTables = false;
|
|
1898
1945
|
let hadValues = false;
|
|
1899
1946
|
let transactions = 0;
|
|
1947
|
+
let internalListeners = [];
|
|
1900
1948
|
const changedTableIds = mapNew();
|
|
1901
1949
|
const changedTableCellIds = mapNew();
|
|
1902
1950
|
const changedRowCount = mapNew();
|
|
@@ -1943,13 +1991,13 @@ const createStore = () => {
|
|
|
1943
1991
|
const [addListener, callListeners, delListenerImpl, callListenerImpl] =
|
|
1944
1992
|
getListenerFunctions(() => store);
|
|
1945
1993
|
const validateTablesSchema = (tableSchema) =>
|
|
1946
|
-
|
|
1947
|
-
|
|
1994
|
+
objValidate(tableSchema, (tableSchema2) =>
|
|
1995
|
+
objValidate(tableSchema2, validateCellOrValueSchema),
|
|
1948
1996
|
);
|
|
1949
1997
|
const validateValuesSchema = (valuesSchema) =>
|
|
1950
|
-
|
|
1998
|
+
objValidate(valuesSchema, validateCellOrValueSchema);
|
|
1951
1999
|
const validateCellOrValueSchema = (schema) => {
|
|
1952
|
-
if (!
|
|
2000
|
+
if (!objValidate(schema, (_child, id2) => arrayHas([TYPE, DEFAULT], id2))) {
|
|
1953
2001
|
return false;
|
|
1954
2002
|
}
|
|
1955
2003
|
const type = schema[TYPE];
|
|
@@ -1962,18 +2010,18 @@ const createStore = () => {
|
|
|
1962
2010
|
return true;
|
|
1963
2011
|
};
|
|
1964
2012
|
const validateTables = (tables) =>
|
|
1965
|
-
|
|
2013
|
+
objValidate(tables, validateTable, cellInvalid);
|
|
1966
2014
|
const validateTable = (table, tableId) =>
|
|
1967
2015
|
(!hasTablesSchema ||
|
|
1968
2016
|
collHas(tablesSchemaMap, tableId) ||
|
|
1969
2017
|
cellInvalid(tableId)) &&
|
|
1970
|
-
|
|
2018
|
+
objValidate(
|
|
1971
2019
|
table,
|
|
1972
2020
|
(row, rowId) => validateRow(tableId, rowId, row),
|
|
1973
2021
|
() => cellInvalid(tableId),
|
|
1974
2022
|
);
|
|
1975
2023
|
const validateRow = (tableId, rowId, row, skipDefaults) =>
|
|
1976
|
-
|
|
2024
|
+
objValidate(
|
|
1977
2025
|
skipDefaults ? row : addDefaultsToRow(row, tableId, rowId),
|
|
1978
2026
|
(cell, cellId) =>
|
|
1979
2027
|
ifNotUndefined(
|
|
@@ -2000,7 +2048,7 @@ const createStore = () => {
|
|
|
2000
2048
|
? cellInvalid(tableId, rowId, cellId, cell)
|
|
2001
2049
|
: cell;
|
|
2002
2050
|
const validateValues = (values, skipDefaults) =>
|
|
2003
|
-
|
|
2051
|
+
objValidate(
|
|
2004
2052
|
skipDefaults ? values : addDefaultsToValues(values),
|
|
2005
2053
|
(value, valueId) =>
|
|
2006
2054
|
ifNotUndefined(
|
|
@@ -2263,16 +2311,20 @@ const createStore = () => {
|
|
|
2263
2311
|
addedOrRemoved,
|
|
2264
2312
|
);
|
|
2265
2313
|
};
|
|
2266
|
-
const cellChanged = (tableId, rowId, cellId, oldCell, newCell) =>
|
|
2267
|
-
|
|
2314
|
+
const cellChanged = (tableId, rowId, cellId, oldCell, newCell) => {
|
|
2315
|
+
mapEnsure(
|
|
2268
2316
|
mapEnsure(mapEnsure(changedCells, tableId, mapNew), rowId, mapNew),
|
|
2269
2317
|
cellId,
|
|
2270
2318
|
() => [oldCell, 0],
|
|
2271
|
-
)[1] = newCell
|
|
2319
|
+
)[1] = newCell;
|
|
2320
|
+
internalListeners[3]?.(tableId, rowId, cellId, newCell);
|
|
2321
|
+
};
|
|
2272
2322
|
const valueIdsChanged = (valueId, addedOrRemoved) =>
|
|
2273
2323
|
idsChanged(changedValueIds, valueId, addedOrRemoved);
|
|
2274
|
-
const valueChanged = (valueId, oldValue, newValue) =>
|
|
2275
|
-
|
|
2324
|
+
const valueChanged = (valueId, oldValue, newValue) => {
|
|
2325
|
+
mapEnsure(changedValues, valueId, () => [oldValue, 0])[1] = newValue;
|
|
2326
|
+
internalListeners[4]?.(valueId, newValue);
|
|
2327
|
+
};
|
|
2276
2328
|
const cellInvalid = (tableId, rowId, cellId, invalidCell, defaultedCell) => {
|
|
2277
2329
|
arrayPush(
|
|
2278
2330
|
mapEnsure(
|
|
@@ -2538,44 +2590,6 @@ const createStore = () => {
|
|
|
2538
2590
|
transaction(() => actions(...arrayMap(args, id)));
|
|
2539
2591
|
return store;
|
|
2540
2592
|
};
|
|
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
2593
|
const getContent = () => [getTables(), getValues()];
|
|
2580
2594
|
const getTables = () => mapToObj3(tablesMap);
|
|
2581
2595
|
const getTableIds = () => mapKeys(tablesMap);
|
|
@@ -2619,12 +2633,13 @@ const createStore = () => {
|
|
|
2619
2633
|
collHas(mapGet(mapGet(tablesMap, id(tableId)), id(rowId)), id(cellId));
|
|
2620
2634
|
const hasValues = () => !collIsEmpty(valuesMap);
|
|
2621
2635
|
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 = () =>
|
|
2636
|
+
const getTablesJson = () => jsonStringWithMap(tablesMap);
|
|
2637
|
+
const getValuesJson = () => jsonStringWithMap(valuesMap);
|
|
2638
|
+
const getJson = () => jsonStringWithMap([tablesMap, valuesMap]);
|
|
2639
|
+
const getTablesSchemaJson = () => jsonStringWithMap(tablesSchemaMap);
|
|
2640
|
+
const getValuesSchemaJson = () => jsonStringWithMap(valuesSchemaMap);
|
|
2641
|
+
const getSchemaJson = () =>
|
|
2642
|
+
jsonStringWithMap([tablesSchemaMap, valuesSchemaMap]);
|
|
2628
2643
|
const setContent = ([tables, values]) =>
|
|
2629
2644
|
fluentTransaction(() => {
|
|
2630
2645
|
(objIsEmpty(tables) ? delTables : setTables)(tables);
|
|
@@ -2668,7 +2683,7 @@ const createStore = () => {
|
|
|
2668
2683
|
(tableId2, rowId2) => {
|
|
2669
2684
|
if (validateRow(tableId2, rowId2, partialRow, 1)) {
|
|
2670
2685
|
const table = getOrCreateTable(tableId2);
|
|
2671
|
-
|
|
2686
|
+
objToArray(partialRow, (cell, cellId) =>
|
|
2672
2687
|
setCellIntoDefaultRow(tableId2, table, rowId2, cellId, cell),
|
|
2673
2688
|
);
|
|
2674
2689
|
}
|
|
@@ -2706,7 +2721,7 @@ const createStore = () => {
|
|
|
2706
2721
|
const setPartialValues = (partialValues) =>
|
|
2707
2722
|
fluentTransaction(() =>
|
|
2708
2723
|
validateValues(partialValues, 1)
|
|
2709
|
-
?
|
|
2724
|
+
? objToArray(partialValues, (value, valueId) =>
|
|
2710
2725
|
setValidValue(valueId, value),
|
|
2711
2726
|
)
|
|
2712
2727
|
: 0,
|
|
@@ -2723,20 +2738,20 @@ const createStore = () => {
|
|
|
2723
2738
|
),
|
|
2724
2739
|
valueId,
|
|
2725
2740
|
);
|
|
2726
|
-
const
|
|
2741
|
+
const applyChanges = (changes) =>
|
|
2727
2742
|
fluentTransaction(() => {
|
|
2728
|
-
|
|
2743
|
+
objToArray(changes[0], (table, tableId) =>
|
|
2729
2744
|
isUndefined(table)
|
|
2730
2745
|
? delTable(tableId)
|
|
2731
|
-
:
|
|
2746
|
+
: objToArray(table, (row, rowId) =>
|
|
2732
2747
|
isUndefined(row)
|
|
2733
2748
|
? delRow(tableId, rowId)
|
|
2734
|
-
:
|
|
2749
|
+
: objToArray(row, (cell, cellId) =>
|
|
2735
2750
|
setOrDelCell(store, tableId, rowId, cellId, cell),
|
|
2736
2751
|
),
|
|
2737
2752
|
),
|
|
2738
2753
|
);
|
|
2739
|
-
|
|
2754
|
+
objToArray(changes[1], (value, valueId) =>
|
|
2740
2755
|
setOrDelValue(store, valueId, value),
|
|
2741
2756
|
);
|
|
2742
2757
|
});
|
|
@@ -2863,31 +2878,66 @@ const createStore = () => {
|
|
|
2863
2878
|
transactions++;
|
|
2864
2879
|
}
|
|
2865
2880
|
if (transactions == 1) {
|
|
2866
|
-
|
|
2867
|
-
|
|
2868
|
-
void 0,
|
|
2869
|
-
getTransactionChanges,
|
|
2870
|
-
getTransactionLog,
|
|
2871
|
-
);
|
|
2881
|
+
internalListeners[0]?.();
|
|
2882
|
+
callListeners(startTransactionListeners, void 0);
|
|
2872
2883
|
}
|
|
2873
2884
|
return store;
|
|
2874
2885
|
};
|
|
2886
|
+
const getTransactionChanges = () => [
|
|
2887
|
+
mapToObj(
|
|
2888
|
+
changedCells,
|
|
2889
|
+
(table, tableId) =>
|
|
2890
|
+
mapGet(changedTableIds, tableId) === -1
|
|
2891
|
+
? void 0
|
|
2892
|
+
: mapToObj(
|
|
2893
|
+
table,
|
|
2894
|
+
(row, rowId) =>
|
|
2895
|
+
mapGet(mapGet(changedRowIds, tableId), rowId) === -1
|
|
2896
|
+
? void 0
|
|
2897
|
+
: mapToObj(
|
|
2898
|
+
row,
|
|
2899
|
+
([, newCell]) => newCell,
|
|
2900
|
+
(changedCell) => pairIsEqual(changedCell),
|
|
2901
|
+
),
|
|
2902
|
+
collIsEmpty,
|
|
2903
|
+
objIsEmpty,
|
|
2904
|
+
),
|
|
2905
|
+
collIsEmpty,
|
|
2906
|
+
objIsEmpty,
|
|
2907
|
+
),
|
|
2908
|
+
mapToObj(
|
|
2909
|
+
changedValues,
|
|
2910
|
+
([, newValue]) => newValue,
|
|
2911
|
+
(changedValue) => pairIsEqual(changedValue),
|
|
2912
|
+
),
|
|
2913
|
+
1,
|
|
2914
|
+
];
|
|
2915
|
+
const getTransactionLog = () => [
|
|
2916
|
+
!collIsEmpty(changedCells),
|
|
2917
|
+
!collIsEmpty(changedValues),
|
|
2918
|
+
mapToObj3(changedCells, pairClone, pairIsEqual),
|
|
2919
|
+
mapToObj3(invalidCells),
|
|
2920
|
+
mapToObj(changedValues, pairClone, pairIsEqual),
|
|
2921
|
+
mapToObj(invalidValues),
|
|
2922
|
+
mapToObj(changedTableIds),
|
|
2923
|
+
mapToObj2(changedRowIds),
|
|
2924
|
+
mapToObj3(changedCellIds),
|
|
2925
|
+
mapToObj(changedValueIds),
|
|
2926
|
+
];
|
|
2875
2927
|
const finishTransaction = (doRollback) => {
|
|
2876
2928
|
if (transactions > 0) {
|
|
2877
2929
|
transactions--;
|
|
2878
2930
|
if (transactions == 0) {
|
|
2879
|
-
cellsTouched = !collIsEmpty(changedCells);
|
|
2880
|
-
valuesTouched = !collIsEmpty(changedValues);
|
|
2881
2931
|
transactions = 1;
|
|
2882
2932
|
callInvalidCellListeners(1);
|
|
2883
|
-
if (
|
|
2933
|
+
if (!collIsEmpty(changedCells)) {
|
|
2884
2934
|
callTabularListenersForChanges(1);
|
|
2885
2935
|
}
|
|
2886
2936
|
callInvalidValueListeners(1);
|
|
2887
|
-
if (
|
|
2937
|
+
if (!collIsEmpty(changedValues)) {
|
|
2888
2938
|
callValuesListenersForChanges(1);
|
|
2889
2939
|
}
|
|
2890
|
-
if (doRollback?.(
|
|
2940
|
+
if (doRollback?.(store)) {
|
|
2891
2941
|
collForEach(changedCells, (table, tableId) =>
|
|
2892
2942
|
collForEach(table, (row, rowId) =>
|
|
2893
2943
|
collForEach(row, ([oldCell], cellId) =>
|
|
@@ -2895,34 +2945,26 @@ const createStore = () => {
|
|
|
2895
2945
|
),
|
|
2896
2946
|
),
|
|
2897
2947
|
);
|
|
2948
|
+
collClear(changedCells);
|
|
2898
2949
|
collForEach(changedValues, ([oldValue], valueId) =>
|
|
2899
2950
|
setOrDelValue(store, valueId, oldValue),
|
|
2900
2951
|
);
|
|
2901
|
-
|
|
2952
|
+
collClear(changedValues);
|
|
2902
2953
|
}
|
|
2903
|
-
callListeners(
|
|
2904
|
-
finishTransactionListeners[0],
|
|
2905
|
-
void 0,
|
|
2906
|
-
getTransactionChanges,
|
|
2907
|
-
getTransactionLog,
|
|
2908
|
-
);
|
|
2954
|
+
callListeners(finishTransactionListeners[0], void 0);
|
|
2909
2955
|
transactions = -1;
|
|
2910
2956
|
callInvalidCellListeners(0);
|
|
2911
|
-
if (
|
|
2957
|
+
if (!collIsEmpty(changedCells)) {
|
|
2912
2958
|
callTabularListenersForChanges(0);
|
|
2913
2959
|
}
|
|
2914
2960
|
callInvalidValueListeners(0);
|
|
2915
|
-
if (
|
|
2961
|
+
if (!collIsEmpty(changedValues)) {
|
|
2916
2962
|
callValuesListenersForChanges(0);
|
|
2917
2963
|
}
|
|
2918
|
-
|
|
2919
|
-
|
|
2920
|
-
|
|
2921
|
-
getTransactionChanges,
|
|
2922
|
-
getTransactionLog,
|
|
2923
|
-
);
|
|
2964
|
+
internalListeners[1]?.();
|
|
2965
|
+
callListeners(finishTransactionListeners[1], void 0);
|
|
2966
|
+
internalListeners[2]?.();
|
|
2924
2967
|
transactions = 0;
|
|
2925
|
-
cellsTouched = valuesTouched = false;
|
|
2926
2968
|
hadTables = hasTables();
|
|
2927
2969
|
hadValues = hasValues();
|
|
2928
2970
|
arrayForEach(
|
|
@@ -3047,6 +3089,20 @@ const createStore = () => {
|
|
|
3047
3089
|
collSize2(startTransactionListeners) +
|
|
3048
3090
|
pairCollSize2(finishTransactionListeners),
|
|
3049
3091
|
});
|
|
3092
|
+
const setInternalListeners = (
|
|
3093
|
+
preStartTransaction,
|
|
3094
|
+
preFinishTransaction,
|
|
3095
|
+
postFinishTransaction,
|
|
3096
|
+
cellChanged2,
|
|
3097
|
+
valueChanged2,
|
|
3098
|
+
) =>
|
|
3099
|
+
(internalListeners = [
|
|
3100
|
+
preStartTransaction,
|
|
3101
|
+
preFinishTransaction,
|
|
3102
|
+
postFinishTransaction,
|
|
3103
|
+
cellChanged2,
|
|
3104
|
+
valueChanged2,
|
|
3105
|
+
]);
|
|
3050
3106
|
const store = {
|
|
3051
3107
|
getContent,
|
|
3052
3108
|
getTables,
|
|
@@ -3087,7 +3143,7 @@ const createStore = () => {
|
|
|
3087
3143
|
setValues,
|
|
3088
3144
|
setPartialValues,
|
|
3089
3145
|
setValue,
|
|
3090
|
-
|
|
3146
|
+
applyChanges,
|
|
3091
3147
|
setTablesJson,
|
|
3092
3148
|
setValuesJson,
|
|
3093
3149
|
setJson,
|
|
@@ -3105,6 +3161,8 @@ const createStore = () => {
|
|
|
3105
3161
|
delSchema,
|
|
3106
3162
|
transaction,
|
|
3107
3163
|
startTransaction,
|
|
3164
|
+
getTransactionChanges,
|
|
3165
|
+
getTransactionLog,
|
|
3108
3166
|
finishTransaction,
|
|
3109
3167
|
forEachTable,
|
|
3110
3168
|
forEachTableCell,
|
|
@@ -3122,8 +3180,9 @@ const createStore = () => {
|
|
|
3122
3180
|
createStore,
|
|
3123
3181
|
addListener,
|
|
3124
3182
|
callListeners,
|
|
3183
|
+
setInternalListeners,
|
|
3125
3184
|
};
|
|
3126
|
-
|
|
3185
|
+
objToArray(
|
|
3127
3186
|
{
|
|
3128
3187
|
[HAS + TABLES]: [0, hasTablesListeners, [], () => [hasTables()]],
|
|
3129
3188
|
[TABLES]: [0, tablesListeners],
|
|
@@ -3204,10 +3263,13 @@ const App = ({position = 'right', open = false}) => {
|
|
|
3204
3263
|
(s2) => createSessionPersister(s2, UNIQUE_ID),
|
|
3205
3264
|
void 0,
|
|
3206
3265
|
async (persister) => {
|
|
3207
|
-
await persister.load(
|
|
3208
|
-
|
|
3209
|
-
|
|
3210
|
-
|
|
3266
|
+
await persister.load([
|
|
3267
|
+
{},
|
|
3268
|
+
{
|
|
3269
|
+
position: index == -1 ? 1 : index,
|
|
3270
|
+
open: !!open,
|
|
3271
|
+
},
|
|
3272
|
+
]);
|
|
3211
3273
|
await persister.startAutoSave();
|
|
3212
3274
|
},
|
|
3213
3275
|
);
|