tinybase 5.0.0-beta.0 → 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/bin/cli.js +1 -1
- 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 +254 -235
- package/lib/debug/indexes.js +10 -6
- package/lib/debug/mergeable-store.js +2230 -0
- package/lib/debug/metrics.js +10 -6
- package/lib/debug/persisters/persister-automerge.js +113 -87
- package/lib/debug/persisters/persister-browser.js +95 -57
- package/lib/debug/persisters/persister-cr-sqlite-wasm.js +175 -109
- package/lib/debug/persisters/persister-electric-sql.js +176 -109
- package/lib/debug/persisters/persister-expo-sqlite-next.js +176 -110
- package/lib/debug/persisters/persister-expo-sqlite.js +175 -109
- package/lib/debug/persisters/persister-file.js +94 -57
- package/lib/debug/persisters/persister-indexed-db.js +94 -57
- package/lib/debug/persisters/persister-libsql.js +913 -0
- package/lib/debug/persisters/persister-partykit-client.js +90 -59
- package/lib/debug/persisters/persister-partykit-server.js +19 -26
- package/lib/debug/persisters/persister-powersync.js +928 -0
- package/lib/debug/persisters/persister-remote.js +86 -53
- package/lib/debug/persisters/persister-sqlite-wasm.js +175 -109
- package/lib/debug/persisters/persister-sqlite3.js +175 -109
- package/lib/debug/persisters/persister-yjs.js +111 -84
- package/lib/debug/persisters.js +82 -50
- package/lib/debug/queries.js +18 -12
- package/lib/debug/relationships.js +10 -6
- package/lib/debug/store.js +150 -127
- 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 +1281 -409
- package/lib/debug/tools.js +41 -64
- package/lib/debug/ui-react-dom.js +277 -213
- package/lib/debug/ui-react.js +213 -198
- 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 +7 -3
- 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 +235 -95
- 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/queries.d.ts +4 -3
- package/lib/types/with-schemas/internal/store.d.ts +8 -3
- 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 +8 -4
- 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 +259 -102
- 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 +68 -48
- package/readme.md +2 -2
|
@@ -123,9 +123,8 @@ const arrayShift = (array) => array.shift();
|
|
|
123
123
|
|
|
124
124
|
const object = Object;
|
|
125
125
|
const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
|
|
126
|
-
const
|
|
126
|
+
const objEntries = object.entries;
|
|
127
127
|
const objFrozen = object.isFrozen;
|
|
128
|
-
const objFreeze = object.freeze;
|
|
129
128
|
const isObject = (obj) =>
|
|
130
129
|
!isUndefined(obj) &&
|
|
131
130
|
ifNotUndefined(
|
|
@@ -133,25 +132,55 @@ const isObject = (obj) =>
|
|
|
133
132
|
(objPrototype) =>
|
|
134
133
|
objPrototype == object.prototype ||
|
|
135
134
|
isUndefined(getPrototypeOf(objPrototype)),
|
|
135
|
+
/* istanbul ignore next */
|
|
136
136
|
() => true,
|
|
137
137
|
);
|
|
138
|
+
const objIds = object.keys;
|
|
139
|
+
const objFreeze = object.freeze;
|
|
138
140
|
const objNew = (entries = []) => object.fromEntries(entries);
|
|
139
|
-
const
|
|
140
|
-
const objHas = (obj, id) => !isUndefined(objGet(obj, id));
|
|
141
|
+
const objHas = (obj, id) => id in obj;
|
|
141
142
|
const objDel = (obj, id) => {
|
|
142
143
|
delete obj[id];
|
|
143
144
|
return obj;
|
|
144
145
|
};
|
|
146
|
+
const objToArray = (obj, cb) =>
|
|
147
|
+
arrayMap(objEntries(obj), ([id, value]) => cb(value, id));
|
|
145
148
|
const objMap = (obj, cb) =>
|
|
146
|
-
|
|
149
|
+
objNew(objToArray(obj, (value, id) => [id, cb(value, id)]));
|
|
147
150
|
const objSize = (obj) => size(objIds(obj));
|
|
148
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
|
+
};
|
|
149
169
|
|
|
150
|
-
const
|
|
170
|
+
const UNDEFINED_MARKER = '\uFFFC';
|
|
171
|
+
const jsonStringWithMap = (obj) =>
|
|
151
172
|
JSON.stringify(obj, (_key, value) =>
|
|
152
173
|
isInstanceOf(value, Map) ? object.fromEntries([...value]) : value,
|
|
153
174
|
);
|
|
154
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
|
+
);
|
|
155
184
|
|
|
156
185
|
const UNIQUE_ID = 'tinybaseStoreInspector';
|
|
157
186
|
const TITLE = 'TinyBase Store Inspector';
|
|
@@ -162,7 +191,7 @@ const OPEN_CELL = 'open';
|
|
|
162
191
|
const POSITION_VALUE = 'position';
|
|
163
192
|
const OPEN_VALUE = OPEN_CELL;
|
|
164
193
|
const EDITABLE_CELL = 'editable';
|
|
165
|
-
const getUniqueId = (...args) =>
|
|
194
|
+
const getUniqueId = (...args) => jsonStringWithMap(args);
|
|
166
195
|
const sortedIdsMap = (ids, callback) => arrayMap(arraySort(ids), callback);
|
|
167
196
|
const useEditable = (uniqueId, s) => [
|
|
168
197
|
!!useCell(STATE_TABLE, uniqueId, EDITABLE_CELL, s),
|
|
@@ -205,7 +234,7 @@ const DONE_SVG = PRE + `<path d='${PENCIL}M20 20l60 60' />` + POST;
|
|
|
205
234
|
|
|
206
235
|
const SCROLLBAR = '*::-webkit-scrollbar';
|
|
207
236
|
const APP_STYLESHEET = arrayJoin(
|
|
208
|
-
|
|
237
|
+
objToArray(
|
|
209
238
|
{
|
|
210
239
|
'': 'all:initial;font-family:sans-serif;font-size:0.75rem;position:fixed;z-index:999999',
|
|
211
240
|
'*': 'all:revert',
|
|
@@ -331,9 +360,10 @@ const Details = ({
|
|
|
331
360
|
);
|
|
332
361
|
};
|
|
333
362
|
|
|
334
|
-
const getCellOrValueType = (
|
|
335
|
-
const type = getTypeOf(
|
|
336
|
-
return isTypeStringOrBoolean(type) ||
|
|
363
|
+
const getCellOrValueType = (cellOrValue) => {
|
|
364
|
+
const type = getTypeOf(cellOrValue);
|
|
365
|
+
return isTypeStringOrBoolean(type) ||
|
|
366
|
+
(type == NUMBER && isFiniteNumber(cellOrValue))
|
|
337
367
|
? type
|
|
338
368
|
: void 0;
|
|
339
369
|
};
|
|
@@ -431,21 +461,16 @@ const useSortingAndPagination = (
|
|
|
431
461
|
const useCells = (defaultCellIds, customCells, defaultCellComponent) =>
|
|
432
462
|
useMemo(() => {
|
|
433
463
|
const cellIds = customCells ?? defaultCellIds;
|
|
434
|
-
return
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
{
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
? {label: labelOrCustomCell}
|
|
445
|
-
: labelOrCustomCell),
|
|
446
|
-
},
|
|
447
|
-
],
|
|
448
|
-
),
|
|
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
|
+
}),
|
|
449
474
|
);
|
|
450
475
|
}, [customCells, defaultCellComponent, defaultCellIds]);
|
|
451
476
|
const HtmlTable = ({
|
|
@@ -482,7 +507,7 @@ const HtmlTable = ({
|
|
|
482
507
|
label: 'Id',
|
|
483
508
|
onClick: handleSort,
|
|
484
509
|
}),
|
|
485
|
-
|
|
510
|
+
objToArray(cells, ({label}, cellId) =>
|
|
486
511
|
/* @__PURE__ */ createElement(HtmlHeaderCell, {
|
|
487
512
|
key: cellId,
|
|
488
513
|
cellId,
|
|
@@ -503,17 +528,19 @@ const HtmlTable = ({
|
|
|
503
528
|
idColumn === false
|
|
504
529
|
? null
|
|
505
530
|
: /* @__PURE__ */ createElement('th', null, rowId),
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
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
|
+
),
|
|
517
544
|
),
|
|
518
545
|
),
|
|
519
546
|
),
|
|
@@ -567,7 +594,7 @@ const RelationshipInHtmlRow = ({
|
|
|
567
594
|
/* @__PURE__ */ createElement('th', null, localRowId),
|
|
568
595
|
/* @__PURE__ */ createElement('th', null, remoteRowId),
|
|
569
596
|
),
|
|
570
|
-
|
|
597
|
+
objToArray(
|
|
571
598
|
cells,
|
|
572
599
|
({component: CellView2, getComponentProps}, compoundCellId) => {
|
|
573
600
|
const [tableId, cellId] = compoundCellId.split(DOT, 2);
|
|
@@ -883,7 +910,7 @@ const RelationshipInHtmlTable = ({
|
|
|
883
910
|
'.Id',
|
|
884
911
|
),
|
|
885
912
|
),
|
|
886
|
-
|
|
913
|
+
objToArray(cells, ({label}, cellId) =>
|
|
887
914
|
/* @__PURE__ */ createElement('th', {key: cellId}, label),
|
|
888
915
|
),
|
|
889
916
|
),
|
|
@@ -1163,7 +1190,7 @@ const QueryView = ({queries, queriesId, queryId, s}) => {
|
|
|
1163
1190
|
STATE_TABLE,
|
|
1164
1191
|
uniqueId,
|
|
1165
1192
|
SORT_CELL,
|
|
1166
|
-
|
|
1193
|
+
jsonStringWithMap,
|
|
1167
1194
|
[],
|
|
1168
1195
|
s,
|
|
1169
1196
|
);
|
|
@@ -1268,7 +1295,7 @@ const TableView = ({tableId, store, storeId, s}) => {
|
|
|
1268
1295
|
STATE_TABLE,
|
|
1269
1296
|
uniqueId,
|
|
1270
1297
|
SORT_CELL,
|
|
1271
|
-
|
|
1298
|
+
jsonStringWithMap,
|
|
1272
1299
|
[],
|
|
1273
1300
|
s,
|
|
1274
1301
|
);
|
|
@@ -1529,35 +1556,41 @@ const mapMap = (coll, cb) =>
|
|
|
1529
1556
|
arrayMap([...(coll?.entries() ?? [])], ([key, value]) => cb(value, key));
|
|
1530
1557
|
const mapSet = (map, key, value) =>
|
|
1531
1558
|
isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
|
|
1532
|
-
const mapEnsure = (map, key, getDefaultValue) => {
|
|
1559
|
+
const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
|
|
1533
1560
|
if (!collHas(map, key)) {
|
|
1534
1561
|
mapSet(map, key, getDefaultValue());
|
|
1562
|
+
} else {
|
|
1563
|
+
hadExistingValue?.(mapGet(map, key));
|
|
1535
1564
|
}
|
|
1536
1565
|
return mapGet(map, key);
|
|
1537
1566
|
};
|
|
1538
1567
|
const mapMatch = (map, obj, set, del = mapSet) => {
|
|
1539
|
-
|
|
1568
|
+
objToArray(obj, (value, id) => set(map, id, value));
|
|
1540
1569
|
mapForEach(map, (id) => (objHas(obj, id) ? 0 : del(map, id)));
|
|
1541
1570
|
return map;
|
|
1542
1571
|
};
|
|
1543
|
-
const mapToObj = (map,
|
|
1572
|
+
const mapToObj = (map, valueMapper, excludeMapValue, excludeObjValue) => {
|
|
1544
1573
|
const obj = {};
|
|
1545
|
-
collForEach(map, (
|
|
1546
|
-
|
|
1547
|
-
|
|
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
|
+
}
|
|
1548
1579
|
});
|
|
1549
1580
|
return obj;
|
|
1550
1581
|
};
|
|
1551
|
-
const mapToObj2 = (map,
|
|
1582
|
+
const mapToObj2 = (map, valueMapper, excludeMapValue) =>
|
|
1552
1583
|
mapToObj(
|
|
1553
1584
|
map,
|
|
1554
|
-
(childMap) => mapToObj(childMap,
|
|
1585
|
+
(childMap) => mapToObj(childMap, valueMapper, excludeMapValue),
|
|
1586
|
+
collIsEmpty,
|
|
1555
1587
|
objIsEmpty,
|
|
1556
1588
|
);
|
|
1557
|
-
const mapToObj3 = (map,
|
|
1589
|
+
const mapToObj3 = (map, valueMapper, excludeMapValue) =>
|
|
1558
1590
|
mapToObj(
|
|
1559
1591
|
map,
|
|
1560
|
-
(childMap) => mapToObj2(childMap,
|
|
1592
|
+
(childMap) => mapToObj2(childMap, valueMapper, excludeMapValue),
|
|
1593
|
+
collIsEmpty,
|
|
1561
1594
|
objIsEmpty,
|
|
1562
1595
|
);
|
|
1563
1596
|
const mapClone = (map, mapValue) => {
|
|
@@ -1591,6 +1624,24 @@ const visitTree = (node, path, ensureLeaf, pruneLeaf, p = 0) =>
|
|
|
1591
1624
|
|
|
1592
1625
|
const scheduleRunning = mapNew();
|
|
1593
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
|
+
];
|
|
1594
1645
|
const createCustomPersister = (
|
|
1595
1646
|
store,
|
|
1596
1647
|
getPersisted,
|
|
@@ -1598,18 +1649,25 @@ const createCustomPersister = (
|
|
|
1598
1649
|
addPersisterListener,
|
|
1599
1650
|
delPersisterListener,
|
|
1600
1651
|
onIgnoredError,
|
|
1601
|
-
|
|
1652
|
+
supportsMergeableStore,
|
|
1653
|
+
extra = {},
|
|
1602
1654
|
scheduleId = [],
|
|
1603
1655
|
) => {
|
|
1604
|
-
let listenerId;
|
|
1605
1656
|
let loadSave = 0;
|
|
1606
1657
|
let loads = 0;
|
|
1607
1658
|
let saves = 0;
|
|
1608
|
-
let listening = 0;
|
|
1609
1659
|
let action;
|
|
1610
|
-
let
|
|
1660
|
+
let autoLoadHandle;
|
|
1661
|
+
let autoSaveListenerId;
|
|
1611
1662
|
mapEnsure(scheduleRunning, scheduleId, () => 0);
|
|
1612
1663
|
mapEnsure(scheduleActions, scheduleId, () => []);
|
|
1664
|
+
const [
|
|
1665
|
+
isMergeableStore,
|
|
1666
|
+
getContent,
|
|
1667
|
+
getChanges,
|
|
1668
|
+
hasChanges,
|
|
1669
|
+
setDefaultContent,
|
|
1670
|
+
] = getStoreFunctions(supportsMergeableStore, store);
|
|
1613
1671
|
const run = async () => {
|
|
1614
1672
|
/* istanbul ignore else */
|
|
1615
1673
|
if (!mapGet(scheduleRunning, scheduleId)) {
|
|
@@ -1641,48 +1699,54 @@ const createCustomPersister = (
|
|
|
1641
1699
|
}
|
|
1642
1700
|
return persister;
|
|
1643
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
|
+
};
|
|
1644
1711
|
const persister = {
|
|
1645
|
-
load: async (
|
|
1712
|
+
load: async (initialContent) =>
|
|
1646
1713
|
await loadLock(async () => {
|
|
1647
1714
|
try {
|
|
1648
|
-
|
|
1649
|
-
} catch {
|
|
1650
|
-
|
|
1715
|
+
setContentOrChanges(await getPersisted());
|
|
1716
|
+
} catch (error) {
|
|
1717
|
+
onIgnoredError?.(error);
|
|
1718
|
+
if (initialContent) {
|
|
1719
|
+
setDefaultContent(initialContent);
|
|
1720
|
+
}
|
|
1651
1721
|
}
|
|
1652
1722
|
}),
|
|
1653
|
-
startAutoLoad: async (
|
|
1654
|
-
persister.stopAutoLoad();
|
|
1655
|
-
|
|
1656
|
-
|
|
1657
|
-
|
|
1658
|
-
|
|
1659
|
-
|
|
1660
|
-
|
|
1661
|
-
|
|
1662
|
-
|
|
1663
|
-
)
|
|
1664
|
-
|
|
1665
|
-
|
|
1666
|
-
|
|
1667
|
-
store.setContent(getContent?.() ?? (await getPersisted()));
|
|
1668
|
-
} catch (error) {
|
|
1669
|
-
onIgnoredError?.(error);
|
|
1670
|
-
}
|
|
1671
|
-
});
|
|
1672
|
-
}
|
|
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
|
+
});
|
|
1673
1737
|
},
|
|
1674
1738
|
);
|
|
1675
1739
|
return persister;
|
|
1676
1740
|
},
|
|
1677
1741
|
stopAutoLoad: () => {
|
|
1678
|
-
if (
|
|
1679
|
-
delPersisterListener(
|
|
1680
|
-
|
|
1681
|
-
listening = 0;
|
|
1742
|
+
if (autoLoadHandle) {
|
|
1743
|
+
delPersisterListener(autoLoadHandle);
|
|
1744
|
+
autoLoadHandle = void 0;
|
|
1682
1745
|
}
|
|
1683
1746
|
return persister;
|
|
1684
1747
|
},
|
|
1685
|
-
|
|
1748
|
+
isAutoLoading: () => !isUndefined(autoLoadHandle),
|
|
1749
|
+
save: async (getChanges2) => {
|
|
1686
1750
|
/* istanbul ignore else */
|
|
1687
1751
|
if (loadSave != 1) {
|
|
1688
1752
|
loadSave = 2;
|
|
@@ -1691,7 +1755,7 @@ const createCustomPersister = (
|
|
|
1691
1755
|
}
|
|
1692
1756
|
await persister.schedule(async () => {
|
|
1693
1757
|
try {
|
|
1694
|
-
await setPersisted(
|
|
1758
|
+
await setPersisted(getContent, getChanges2);
|
|
1695
1759
|
} catch (error) {
|
|
1696
1760
|
/* istanbul ignore next */
|
|
1697
1761
|
onIgnoredError?.(error);
|
|
@@ -1703,21 +1767,20 @@ const createCustomPersister = (
|
|
|
1703
1767
|
},
|
|
1704
1768
|
startAutoSave: async () => {
|
|
1705
1769
|
await persister.stopAutoSave().save();
|
|
1706
|
-
|
|
1707
|
-
|
|
1708
|
-
|
|
1709
|
-
|
|
1710
|
-
|
|
1711
|
-
|
|
1712
|
-
},
|
|
1713
|
-
);
|
|
1770
|
+
autoSaveListenerId = store.addDidFinishTransactionListener(() => {
|
|
1771
|
+
const changes = getChanges();
|
|
1772
|
+
if (hasChanges(changes)) {
|
|
1773
|
+
persister.save(() => changes);
|
|
1774
|
+
}
|
|
1775
|
+
});
|
|
1714
1776
|
return persister;
|
|
1715
1777
|
},
|
|
1716
1778
|
stopAutoSave: () => {
|
|
1717
|
-
ifNotUndefined(
|
|
1718
|
-
|
|
1779
|
+
ifNotUndefined(autoSaveListenerId, store.delListener);
|
|
1780
|
+
autoSaveListenerId = void 0;
|
|
1719
1781
|
return persister;
|
|
1720
1782
|
},
|
|
1783
|
+
isAutoSaving: () => !isUndefined(autoSaveListenerId),
|
|
1721
1784
|
schedule: async (...actions) => {
|
|
1722
1785
|
arrayPush(mapGet(scheduleActions, scheduleId), ...actions);
|
|
1723
1786
|
await run();
|
|
@@ -1726,10 +1789,8 @@ const createCustomPersister = (
|
|
|
1726
1789
|
getStore: () => store,
|
|
1727
1790
|
destroy: () => persister.stopAutoLoad().stopAutoSave(),
|
|
1728
1791
|
getStats: () => ({loads, saves}),
|
|
1792
|
+
...extra,
|
|
1729
1793
|
};
|
|
1730
|
-
if (getThing) {
|
|
1731
|
-
persister[getThing] = () => thing;
|
|
1732
|
-
}
|
|
1733
1794
|
return objFreeze(persister);
|
|
1734
1795
|
};
|
|
1735
1796
|
|
|
@@ -1741,9 +1802,10 @@ const createStoragePersister = (
|
|
|
1741
1802
|
storage,
|
|
1742
1803
|
onIgnoredError,
|
|
1743
1804
|
) => {
|
|
1744
|
-
const getPersisted = async () =>
|
|
1805
|
+
const getPersisted = async () =>
|
|
1806
|
+
jsonParseWithUndefined(storage.getItem(storageName));
|
|
1745
1807
|
const setPersisted = async (getContent) =>
|
|
1746
|
-
storage.setItem(storageName,
|
|
1808
|
+
storage.setItem(storageName, jsonStringWithUndefined(getContent()));
|
|
1747
1809
|
const addPersisterListener = (listener) => {
|
|
1748
1810
|
const storageListener = (event) => {
|
|
1749
1811
|
if (event.storageArea === storage && event.key === storageName) {
|
|
@@ -1762,7 +1824,8 @@ const createStoragePersister = (
|
|
|
1762
1824
|
addPersisterListener,
|
|
1763
1825
|
delPersisterListener,
|
|
1764
1826
|
onIgnoredError,
|
|
1765
|
-
|
|
1827
|
+
true,
|
|
1828
|
+
{getStorageName: () => storageName},
|
|
1766
1829
|
);
|
|
1767
1830
|
};
|
|
1768
1831
|
const createSessionPersister = (store, storageName, onIgnoredError) =>
|
|
@@ -1869,18 +1932,6 @@ const pairIsEqual = ([entry1, entry2]) => entry1 === entry2;
|
|
|
1869
1932
|
const defaultSorter = (sortKey1, sortKey2) =>
|
|
1870
1933
|
(sortKey1 ?? 0) < (sortKey2 ?? 0) ? -1 : 1;
|
|
1871
1934
|
|
|
1872
|
-
const validate = (obj, validateChild, onInvalidObj) => {
|
|
1873
|
-
if (isUndefined(obj) || !isObject(obj) || objIsEmpty(obj) || objFrozen(obj)) {
|
|
1874
|
-
onInvalidObj?.();
|
|
1875
|
-
return false;
|
|
1876
|
-
}
|
|
1877
|
-
objMap(obj, (child, id2) => {
|
|
1878
|
-
if (!validateChild(child, id2)) {
|
|
1879
|
-
objDel(obj, id2);
|
|
1880
|
-
}
|
|
1881
|
-
});
|
|
1882
|
-
return !objIsEmpty(obj);
|
|
1883
|
-
};
|
|
1884
1935
|
const idsChanged = (changedIds, id2, addedOrRemoved) =>
|
|
1885
1936
|
mapSet(
|
|
1886
1937
|
changedIds,
|
|
@@ -1890,11 +1941,10 @@ const idsChanged = (changedIds, id2, addedOrRemoved) =>
|
|
|
1890
1941
|
const createStore = () => {
|
|
1891
1942
|
let hasTablesSchema;
|
|
1892
1943
|
let hasValuesSchema;
|
|
1893
|
-
let cellsTouched = false;
|
|
1894
|
-
let valuesTouched = false;
|
|
1895
1944
|
let hadTables = false;
|
|
1896
1945
|
let hadValues = false;
|
|
1897
1946
|
let transactions = 0;
|
|
1947
|
+
let internalListeners = [];
|
|
1898
1948
|
const changedTableIds = mapNew();
|
|
1899
1949
|
const changedTableCellIds = mapNew();
|
|
1900
1950
|
const changedRowCount = mapNew();
|
|
@@ -1941,13 +1991,13 @@ const createStore = () => {
|
|
|
1941
1991
|
const [addListener, callListeners, delListenerImpl, callListenerImpl] =
|
|
1942
1992
|
getListenerFunctions(() => store);
|
|
1943
1993
|
const validateTablesSchema = (tableSchema) =>
|
|
1944
|
-
|
|
1945
|
-
|
|
1994
|
+
objValidate(tableSchema, (tableSchema2) =>
|
|
1995
|
+
objValidate(tableSchema2, validateCellOrValueSchema),
|
|
1946
1996
|
);
|
|
1947
1997
|
const validateValuesSchema = (valuesSchema) =>
|
|
1948
|
-
|
|
1998
|
+
objValidate(valuesSchema, validateCellOrValueSchema);
|
|
1949
1999
|
const validateCellOrValueSchema = (schema) => {
|
|
1950
|
-
if (!
|
|
2000
|
+
if (!objValidate(schema, (_child, id2) => arrayHas([TYPE, DEFAULT], id2))) {
|
|
1951
2001
|
return false;
|
|
1952
2002
|
}
|
|
1953
2003
|
const type = schema[TYPE];
|
|
@@ -1960,18 +2010,18 @@ const createStore = () => {
|
|
|
1960
2010
|
return true;
|
|
1961
2011
|
};
|
|
1962
2012
|
const validateTables = (tables) =>
|
|
1963
|
-
|
|
2013
|
+
objValidate(tables, validateTable, cellInvalid);
|
|
1964
2014
|
const validateTable = (table, tableId) =>
|
|
1965
2015
|
(!hasTablesSchema ||
|
|
1966
2016
|
collHas(tablesSchemaMap, tableId) ||
|
|
1967
2017
|
cellInvalid(tableId)) &&
|
|
1968
|
-
|
|
2018
|
+
objValidate(
|
|
1969
2019
|
table,
|
|
1970
2020
|
(row, rowId) => validateRow(tableId, rowId, row),
|
|
1971
2021
|
() => cellInvalid(tableId),
|
|
1972
2022
|
);
|
|
1973
2023
|
const validateRow = (tableId, rowId, row, skipDefaults) =>
|
|
1974
|
-
|
|
2024
|
+
objValidate(
|
|
1975
2025
|
skipDefaults ? row : addDefaultsToRow(row, tableId, rowId),
|
|
1976
2026
|
(cell, cellId) =>
|
|
1977
2027
|
ifNotUndefined(
|
|
@@ -1998,7 +2048,7 @@ const createStore = () => {
|
|
|
1998
2048
|
? cellInvalid(tableId, rowId, cellId, cell)
|
|
1999
2049
|
: cell;
|
|
2000
2050
|
const validateValues = (values, skipDefaults) =>
|
|
2001
|
-
|
|
2051
|
+
objValidate(
|
|
2002
2052
|
skipDefaults ? values : addDefaultsToValues(values),
|
|
2003
2053
|
(value, valueId) =>
|
|
2004
2054
|
ifNotUndefined(
|
|
@@ -2261,16 +2311,20 @@ const createStore = () => {
|
|
|
2261
2311
|
addedOrRemoved,
|
|
2262
2312
|
);
|
|
2263
2313
|
};
|
|
2264
|
-
const cellChanged = (tableId, rowId, cellId, oldCell, newCell) =>
|
|
2265
|
-
|
|
2314
|
+
const cellChanged = (tableId, rowId, cellId, oldCell, newCell) => {
|
|
2315
|
+
mapEnsure(
|
|
2266
2316
|
mapEnsure(mapEnsure(changedCells, tableId, mapNew), rowId, mapNew),
|
|
2267
2317
|
cellId,
|
|
2268
2318
|
() => [oldCell, 0],
|
|
2269
|
-
)[1] = newCell
|
|
2319
|
+
)[1] = newCell;
|
|
2320
|
+
internalListeners[3]?.(tableId, rowId, cellId, newCell);
|
|
2321
|
+
};
|
|
2270
2322
|
const valueIdsChanged = (valueId, addedOrRemoved) =>
|
|
2271
2323
|
idsChanged(changedValueIds, valueId, addedOrRemoved);
|
|
2272
|
-
const valueChanged = (valueId, oldValue, newValue) =>
|
|
2273
|
-
|
|
2324
|
+
const valueChanged = (valueId, oldValue, newValue) => {
|
|
2325
|
+
mapEnsure(changedValues, valueId, () => [oldValue, 0])[1] = newValue;
|
|
2326
|
+
internalListeners[4]?.(valueId, newValue);
|
|
2327
|
+
};
|
|
2274
2328
|
const cellInvalid = (tableId, rowId, cellId, invalidCell, defaultedCell) => {
|
|
2275
2329
|
arrayPush(
|
|
2276
2330
|
mapEnsure(
|
|
@@ -2536,44 +2590,6 @@ const createStore = () => {
|
|
|
2536
2590
|
transaction(() => actions(...arrayMap(args, id)));
|
|
2537
2591
|
return store;
|
|
2538
2592
|
};
|
|
2539
|
-
const getTransactionChanges = () => [
|
|
2540
|
-
mapToObj(
|
|
2541
|
-
changedCells,
|
|
2542
|
-
(table, tableId) =>
|
|
2543
|
-
mapGet(changedTableIds, tableId) === -1
|
|
2544
|
-
? null
|
|
2545
|
-
: mapToObj(
|
|
2546
|
-
table,
|
|
2547
|
-
(row, rowId) =>
|
|
2548
|
-
mapGet(mapGet(changedRowIds, tableId), rowId) === -1
|
|
2549
|
-
? null
|
|
2550
|
-
: mapToObj(
|
|
2551
|
-
row,
|
|
2552
|
-
([, newCell]) => newCell ?? null,
|
|
2553
|
-
(_, changedCell) => pairIsEqual(changedCell),
|
|
2554
|
-
),
|
|
2555
|
-
objIsEmpty,
|
|
2556
|
-
),
|
|
2557
|
-
objIsEmpty,
|
|
2558
|
-
),
|
|
2559
|
-
mapToObj(
|
|
2560
|
-
changedValues,
|
|
2561
|
-
([, newValue]) => newValue ?? null,
|
|
2562
|
-
(_, changedValue) => pairIsEqual(changedValue),
|
|
2563
|
-
),
|
|
2564
|
-
];
|
|
2565
|
-
const getTransactionLog = () => ({
|
|
2566
|
-
cellsTouched,
|
|
2567
|
-
valuesTouched,
|
|
2568
|
-
changedCells: mapToObj3(changedCells, pairClone, pairIsEqual),
|
|
2569
|
-
invalidCells: mapToObj3(invalidCells),
|
|
2570
|
-
changedValues: mapToObj(changedValues, pairClone, pairIsEqual),
|
|
2571
|
-
invalidValues: mapToObj(invalidValues),
|
|
2572
|
-
changedTableIds: mapToObj(changedTableIds),
|
|
2573
|
-
changedRowIds: mapToObj2(changedRowIds),
|
|
2574
|
-
changedCellIds: mapToObj3(changedCellIds),
|
|
2575
|
-
changedValueIds: mapToObj(changedValueIds),
|
|
2576
|
-
});
|
|
2577
2593
|
const getContent = () => [getTables(), getValues()];
|
|
2578
2594
|
const getTables = () => mapToObj3(tablesMap);
|
|
2579
2595
|
const getTableIds = () => mapKeys(tablesMap);
|
|
@@ -2617,12 +2633,13 @@ const createStore = () => {
|
|
|
2617
2633
|
collHas(mapGet(mapGet(tablesMap, id(tableId)), id(rowId)), id(cellId));
|
|
2618
2634
|
const hasValues = () => !collIsEmpty(valuesMap);
|
|
2619
2635
|
const hasValue = (valueId) => collHas(valuesMap, id(valueId));
|
|
2620
|
-
const getTablesJson = () =>
|
|
2621
|
-
const getValuesJson = () =>
|
|
2622
|
-
const getJson = () =>
|
|
2623
|
-
const getTablesSchemaJson = () =>
|
|
2624
|
-
const getValuesSchemaJson = () =>
|
|
2625
|
-
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]);
|
|
2626
2643
|
const setContent = ([tables, values]) =>
|
|
2627
2644
|
fluentTransaction(() => {
|
|
2628
2645
|
(objIsEmpty(tables) ? delTables : setTables)(tables);
|
|
@@ -2666,7 +2683,7 @@ const createStore = () => {
|
|
|
2666
2683
|
(tableId2, rowId2) => {
|
|
2667
2684
|
if (validateRow(tableId2, rowId2, partialRow, 1)) {
|
|
2668
2685
|
const table = getOrCreateTable(tableId2);
|
|
2669
|
-
|
|
2686
|
+
objToArray(partialRow, (cell, cellId) =>
|
|
2670
2687
|
setCellIntoDefaultRow(tableId2, table, rowId2, cellId, cell),
|
|
2671
2688
|
);
|
|
2672
2689
|
}
|
|
@@ -2704,7 +2721,7 @@ const createStore = () => {
|
|
|
2704
2721
|
const setPartialValues = (partialValues) =>
|
|
2705
2722
|
fluentTransaction(() =>
|
|
2706
2723
|
validateValues(partialValues, 1)
|
|
2707
|
-
?
|
|
2724
|
+
? objToArray(partialValues, (value, valueId) =>
|
|
2708
2725
|
setValidValue(valueId, value),
|
|
2709
2726
|
)
|
|
2710
2727
|
: 0,
|
|
@@ -2721,20 +2738,20 @@ const createStore = () => {
|
|
|
2721
2738
|
),
|
|
2722
2739
|
valueId,
|
|
2723
2740
|
);
|
|
2724
|
-
const
|
|
2741
|
+
const applyChanges = (changes) =>
|
|
2725
2742
|
fluentTransaction(() => {
|
|
2726
|
-
|
|
2743
|
+
objToArray(changes[0], (table, tableId) =>
|
|
2727
2744
|
isUndefined(table)
|
|
2728
2745
|
? delTable(tableId)
|
|
2729
|
-
:
|
|
2746
|
+
: objToArray(table, (row, rowId) =>
|
|
2730
2747
|
isUndefined(row)
|
|
2731
2748
|
? delRow(tableId, rowId)
|
|
2732
|
-
:
|
|
2749
|
+
: objToArray(row, (cell, cellId) =>
|
|
2733
2750
|
setOrDelCell(store, tableId, rowId, cellId, cell),
|
|
2734
2751
|
),
|
|
2735
2752
|
),
|
|
2736
2753
|
);
|
|
2737
|
-
|
|
2754
|
+
objToArray(changes[1], (value, valueId) =>
|
|
2738
2755
|
setOrDelValue(store, valueId, value),
|
|
2739
2756
|
);
|
|
2740
2757
|
});
|
|
@@ -2861,31 +2878,66 @@ const createStore = () => {
|
|
|
2861
2878
|
transactions++;
|
|
2862
2879
|
}
|
|
2863
2880
|
if (transactions == 1) {
|
|
2864
|
-
|
|
2865
|
-
|
|
2866
|
-
void 0,
|
|
2867
|
-
getTransactionChanges,
|
|
2868
|
-
getTransactionLog,
|
|
2869
|
-
);
|
|
2881
|
+
internalListeners[0]?.();
|
|
2882
|
+
callListeners(startTransactionListeners, void 0);
|
|
2870
2883
|
}
|
|
2871
2884
|
return store;
|
|
2872
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
|
+
];
|
|
2873
2927
|
const finishTransaction = (doRollback) => {
|
|
2874
2928
|
if (transactions > 0) {
|
|
2875
2929
|
transactions--;
|
|
2876
2930
|
if (transactions == 0) {
|
|
2877
|
-
cellsTouched = !collIsEmpty(changedCells);
|
|
2878
|
-
valuesTouched = !collIsEmpty(changedValues);
|
|
2879
2931
|
transactions = 1;
|
|
2880
2932
|
callInvalidCellListeners(1);
|
|
2881
|
-
if (
|
|
2933
|
+
if (!collIsEmpty(changedCells)) {
|
|
2882
2934
|
callTabularListenersForChanges(1);
|
|
2883
2935
|
}
|
|
2884
2936
|
callInvalidValueListeners(1);
|
|
2885
|
-
if (
|
|
2937
|
+
if (!collIsEmpty(changedValues)) {
|
|
2886
2938
|
callValuesListenersForChanges(1);
|
|
2887
2939
|
}
|
|
2888
|
-
if (doRollback?.(
|
|
2940
|
+
if (doRollback?.(store)) {
|
|
2889
2941
|
collForEach(changedCells, (table, tableId) =>
|
|
2890
2942
|
collForEach(table, (row, rowId) =>
|
|
2891
2943
|
collForEach(row, ([oldCell], cellId) =>
|
|
@@ -2893,34 +2945,26 @@ const createStore = () => {
|
|
|
2893
2945
|
),
|
|
2894
2946
|
),
|
|
2895
2947
|
);
|
|
2948
|
+
collClear(changedCells);
|
|
2896
2949
|
collForEach(changedValues, ([oldValue], valueId) =>
|
|
2897
2950
|
setOrDelValue(store, valueId, oldValue),
|
|
2898
2951
|
);
|
|
2899
|
-
|
|
2952
|
+
collClear(changedValues);
|
|
2900
2953
|
}
|
|
2901
|
-
callListeners(
|
|
2902
|
-
finishTransactionListeners[0],
|
|
2903
|
-
void 0,
|
|
2904
|
-
getTransactionChanges,
|
|
2905
|
-
getTransactionLog,
|
|
2906
|
-
);
|
|
2954
|
+
callListeners(finishTransactionListeners[0], void 0);
|
|
2907
2955
|
transactions = -1;
|
|
2908
2956
|
callInvalidCellListeners(0);
|
|
2909
|
-
if (
|
|
2957
|
+
if (!collIsEmpty(changedCells)) {
|
|
2910
2958
|
callTabularListenersForChanges(0);
|
|
2911
2959
|
}
|
|
2912
2960
|
callInvalidValueListeners(0);
|
|
2913
|
-
if (
|
|
2961
|
+
if (!collIsEmpty(changedValues)) {
|
|
2914
2962
|
callValuesListenersForChanges(0);
|
|
2915
2963
|
}
|
|
2916
|
-
|
|
2917
|
-
|
|
2918
|
-
|
|
2919
|
-
getTransactionChanges,
|
|
2920
|
-
getTransactionLog,
|
|
2921
|
-
);
|
|
2964
|
+
internalListeners[1]?.();
|
|
2965
|
+
callListeners(finishTransactionListeners[1], void 0);
|
|
2966
|
+
internalListeners[2]?.();
|
|
2922
2967
|
transactions = 0;
|
|
2923
|
-
cellsTouched = valuesTouched = false;
|
|
2924
2968
|
hadTables = hasTables();
|
|
2925
2969
|
hadValues = hasValues();
|
|
2926
2970
|
arrayForEach(
|
|
@@ -3045,6 +3089,20 @@ const createStore = () => {
|
|
|
3045
3089
|
collSize2(startTransactionListeners) +
|
|
3046
3090
|
pairCollSize2(finishTransactionListeners),
|
|
3047
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
|
+
]);
|
|
3048
3106
|
const store = {
|
|
3049
3107
|
getContent,
|
|
3050
3108
|
getTables,
|
|
@@ -3085,7 +3143,7 @@ const createStore = () => {
|
|
|
3085
3143
|
setValues,
|
|
3086
3144
|
setPartialValues,
|
|
3087
3145
|
setValue,
|
|
3088
|
-
|
|
3146
|
+
applyChanges,
|
|
3089
3147
|
setTablesJson,
|
|
3090
3148
|
setValuesJson,
|
|
3091
3149
|
setJson,
|
|
@@ -3103,6 +3161,8 @@ const createStore = () => {
|
|
|
3103
3161
|
delSchema,
|
|
3104
3162
|
transaction,
|
|
3105
3163
|
startTransaction,
|
|
3164
|
+
getTransactionChanges,
|
|
3165
|
+
getTransactionLog,
|
|
3106
3166
|
finishTransaction,
|
|
3107
3167
|
forEachTable,
|
|
3108
3168
|
forEachTableCell,
|
|
@@ -3120,8 +3180,9 @@ const createStore = () => {
|
|
|
3120
3180
|
createStore,
|
|
3121
3181
|
addListener,
|
|
3122
3182
|
callListeners,
|
|
3183
|
+
setInternalListeners,
|
|
3123
3184
|
};
|
|
3124
|
-
|
|
3185
|
+
objToArray(
|
|
3125
3186
|
{
|
|
3126
3187
|
[HAS + TABLES]: [0, hasTablesListeners, [], () => [hasTables()]],
|
|
3127
3188
|
[TABLES]: [0, tablesListeners],
|
|
@@ -3202,10 +3263,13 @@ const App = ({position = 'right', open = false}) => {
|
|
|
3202
3263
|
(s2) => createSessionPersister(s2, UNIQUE_ID),
|
|
3203
3264
|
void 0,
|
|
3204
3265
|
async (persister) => {
|
|
3205
|
-
await persister.load(
|
|
3206
|
-
|
|
3207
|
-
|
|
3208
|
-
|
|
3266
|
+
await persister.load([
|
|
3267
|
+
{},
|
|
3268
|
+
{
|
|
3269
|
+
position: index == -1 ? 1 : index,
|
|
3270
|
+
open: !!open,
|
|
3271
|
+
},
|
|
3272
|
+
]);
|
|
3209
3273
|
await persister.startAutoSave();
|
|
3210
3274
|
},
|
|
3211
3275
|
);
|