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
|
@@ -42,9 +42,11 @@ const mapForEach = (map, cb) =>
|
|
|
42
42
|
collForEach(map, (value, key) => cb(key, value));
|
|
43
43
|
const mapSet = (map, key, value) =>
|
|
44
44
|
isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
|
|
45
|
-
const mapEnsure = (map, key, getDefaultValue) => {
|
|
45
|
+
const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
|
|
46
46
|
if (!collHas(map, key)) {
|
|
47
47
|
mapSet(map, key, getDefaultValue());
|
|
48
|
+
} else {
|
|
49
|
+
hadExistingValue?.(mapGet(map, key));
|
|
48
50
|
}
|
|
49
51
|
return mapGet(map, key);
|
|
50
52
|
};
|
|
@@ -238,13 +240,15 @@ const getRowCellFunction = (getRowCell, defaultCellValue) =>
|
|
|
238
240
|
isString(getRowCell)
|
|
239
241
|
? (getCell) => getCell(getRowCell)
|
|
240
242
|
: getRowCell ?? (() => defaultCellValue ?? EMPTY_STRING);
|
|
241
|
-
const getCreateFunction = (getFunction) => {
|
|
242
|
-
const
|
|
243
|
+
const getCreateFunction = (getFunction, initFunction) => {
|
|
244
|
+
const thingsByStore = /* @__PURE__ */ new WeakMap();
|
|
243
245
|
return (store) => {
|
|
244
|
-
if (!
|
|
245
|
-
|
|
246
|
+
if (!thingsByStore.has(store)) {
|
|
247
|
+
thingsByStore.set(store, getFunction(store));
|
|
246
248
|
}
|
|
247
|
-
|
|
249
|
+
const thing = thingsByStore.get(store);
|
|
250
|
+
initFunction?.(thing);
|
|
251
|
+
return thing;
|
|
248
252
|
};
|
|
249
253
|
};
|
|
250
254
|
|
package/lib/debug/store.js
CHANGED
|
@@ -49,9 +49,8 @@ const arrayShift = (array) => array.shift();
|
|
|
49
49
|
|
|
50
50
|
const object = Object;
|
|
51
51
|
const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
|
|
52
|
-
const
|
|
52
|
+
const objEntries = object.entries;
|
|
53
53
|
const objFrozen = object.isFrozen;
|
|
54
|
-
const objFreeze = object.freeze;
|
|
55
54
|
const isObject = (obj) =>
|
|
56
55
|
!isUndefined(obj) &&
|
|
57
56
|
ifNotUndefined(
|
|
@@ -59,18 +58,37 @@ const isObject = (obj) =>
|
|
|
59
58
|
(objPrototype) =>
|
|
60
59
|
objPrototype == object.prototype ||
|
|
61
60
|
isUndefined(getPrototypeOf(objPrototype)),
|
|
61
|
+
/* istanbul ignore next */
|
|
62
62
|
() => true,
|
|
63
63
|
);
|
|
64
|
-
const
|
|
65
|
-
const
|
|
64
|
+
const objIds = object.keys;
|
|
65
|
+
const objFreeze = object.freeze;
|
|
66
|
+
const objHas = (obj, id) => id in obj;
|
|
66
67
|
const objDel = (obj, id) => {
|
|
67
68
|
delete obj[id];
|
|
68
69
|
return obj;
|
|
69
70
|
};
|
|
70
|
-
const
|
|
71
|
-
arrayMap(
|
|
71
|
+
const objToArray = (obj, cb) =>
|
|
72
|
+
arrayMap(objEntries(obj), ([id, value]) => cb(value, id));
|
|
72
73
|
const objSize = (obj) => size(objIds(obj));
|
|
73
74
|
const objIsEmpty = (obj) => isObject(obj) && objSize(obj) == 0;
|
|
75
|
+
const objValidate = (obj, validateChild, onInvalidObj, emptyIsValid = 0) => {
|
|
76
|
+
if (
|
|
77
|
+
isUndefined(obj) ||
|
|
78
|
+
!isObject(obj) ||
|
|
79
|
+
(!emptyIsValid && objIsEmpty(obj)) ||
|
|
80
|
+
objFrozen(obj)
|
|
81
|
+
) {
|
|
82
|
+
onInvalidObj?.();
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
objToArray(obj, (child, id) => {
|
|
86
|
+
if (!validateChild(child, id)) {
|
|
87
|
+
objDel(obj, id);
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
return emptyIsValid ? true : !objIsEmpty(obj);
|
|
91
|
+
};
|
|
74
92
|
|
|
75
93
|
const collSizeN = (collSizer) => (coll) =>
|
|
76
94
|
arrayReduce(collValues(coll), (total, coll2) => total + collSizer(coll2), 0);
|
|
@@ -94,35 +112,41 @@ const mapMap = (coll, cb) =>
|
|
|
94
112
|
arrayMap([...(coll?.entries() ?? [])], ([key, value]) => cb(value, key));
|
|
95
113
|
const mapSet = (map, key, value) =>
|
|
96
114
|
isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
|
|
97
|
-
const mapEnsure = (map, key, getDefaultValue) => {
|
|
115
|
+
const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
|
|
98
116
|
if (!collHas(map, key)) {
|
|
99
117
|
mapSet(map, key, getDefaultValue());
|
|
118
|
+
} else {
|
|
119
|
+
hadExistingValue?.(mapGet(map, key));
|
|
100
120
|
}
|
|
101
121
|
return mapGet(map, key);
|
|
102
122
|
};
|
|
103
123
|
const mapMatch = (map, obj, set, del = mapSet) => {
|
|
104
|
-
|
|
124
|
+
objToArray(obj, (value, id) => set(map, id, value));
|
|
105
125
|
mapForEach(map, (id) => (objHas(obj, id) ? 0 : del(map, id)));
|
|
106
126
|
return map;
|
|
107
127
|
};
|
|
108
|
-
const mapToObj = (map,
|
|
128
|
+
const mapToObj = (map, valueMapper, excludeMapValue, excludeObjValue) => {
|
|
109
129
|
const obj = {};
|
|
110
|
-
collForEach(map, (
|
|
111
|
-
|
|
112
|
-
|
|
130
|
+
collForEach(map, (mapValue, id) => {
|
|
131
|
+
if (!excludeMapValue?.(mapValue, id)) {
|
|
132
|
+
const objValue = valueMapper ? valueMapper(mapValue, id) : mapValue;
|
|
133
|
+
excludeObjValue?.(objValue) ? 0 : (obj[id] = objValue);
|
|
134
|
+
}
|
|
113
135
|
});
|
|
114
136
|
return obj;
|
|
115
137
|
};
|
|
116
|
-
const mapToObj2 = (map,
|
|
138
|
+
const mapToObj2 = (map, valueMapper, excludeMapValue) =>
|
|
117
139
|
mapToObj(
|
|
118
140
|
map,
|
|
119
|
-
(childMap) => mapToObj(childMap,
|
|
141
|
+
(childMap) => mapToObj(childMap, valueMapper, excludeMapValue),
|
|
142
|
+
collIsEmpty,
|
|
120
143
|
objIsEmpty,
|
|
121
144
|
);
|
|
122
|
-
const mapToObj3 = (map,
|
|
145
|
+
const mapToObj3 = (map, valueMapper, excludeMapValue) =>
|
|
123
146
|
mapToObj(
|
|
124
147
|
map,
|
|
125
|
-
(childMap) => mapToObj2(childMap,
|
|
148
|
+
(childMap) => mapToObj2(childMap, valueMapper, excludeMapValue),
|
|
149
|
+
collIsEmpty,
|
|
126
150
|
objIsEmpty,
|
|
127
151
|
);
|
|
128
152
|
const mapClone = (map, mapValue) => {
|
|
@@ -252,9 +276,10 @@ const pairNewMap = () => [mapNew(), mapNew()];
|
|
|
252
276
|
const pairClone = (array) => [...array];
|
|
253
277
|
const pairIsEqual = ([entry1, entry2]) => entry1 === entry2;
|
|
254
278
|
|
|
255
|
-
const getCellOrValueType = (
|
|
256
|
-
const type = getTypeOf(
|
|
257
|
-
return isTypeStringOrBoolean(type) ||
|
|
279
|
+
const getCellOrValueType = (cellOrValue) => {
|
|
280
|
+
const type = getTypeOf(cellOrValue);
|
|
281
|
+
return isTypeStringOrBoolean(type) ||
|
|
282
|
+
(type == NUMBER && isFiniteNumber(cellOrValue))
|
|
258
283
|
? type
|
|
259
284
|
: void 0;
|
|
260
285
|
};
|
|
@@ -265,7 +290,7 @@ const setOrDelCell = (store, tableId, rowId, cellId, cell) =>
|
|
|
265
290
|
const setOrDelValue = (store, valueId, value) =>
|
|
266
291
|
isUndefined(value) ? store.delValue(valueId) : store.setValue(valueId, value);
|
|
267
292
|
|
|
268
|
-
const
|
|
293
|
+
const jsonStringWithMap = (obj) =>
|
|
269
294
|
JSON.stringify(obj, (_key, value) =>
|
|
270
295
|
isInstanceOf(value, Map) ? object.fromEntries([...value]) : value,
|
|
271
296
|
);
|
|
@@ -274,18 +299,6 @@ const jsonParse = JSON.parse;
|
|
|
274
299
|
const defaultSorter = (sortKey1, sortKey2) =>
|
|
275
300
|
(sortKey1 ?? 0) < (sortKey2 ?? 0) ? -1 : 1;
|
|
276
301
|
|
|
277
|
-
const validate = (obj, validateChild, onInvalidObj) => {
|
|
278
|
-
if (isUndefined(obj) || !isObject(obj) || objIsEmpty(obj) || objFrozen(obj)) {
|
|
279
|
-
onInvalidObj?.();
|
|
280
|
-
return false;
|
|
281
|
-
}
|
|
282
|
-
objMap(obj, (child, id2) => {
|
|
283
|
-
if (!validateChild(child, id2)) {
|
|
284
|
-
objDel(obj, id2);
|
|
285
|
-
}
|
|
286
|
-
});
|
|
287
|
-
return !objIsEmpty(obj);
|
|
288
|
-
};
|
|
289
302
|
const idsChanged = (changedIds, id2, addedOrRemoved) =>
|
|
290
303
|
mapSet(
|
|
291
304
|
changedIds,
|
|
@@ -295,11 +308,10 @@ const idsChanged = (changedIds, id2, addedOrRemoved) =>
|
|
|
295
308
|
const createStore = () => {
|
|
296
309
|
let hasTablesSchema;
|
|
297
310
|
let hasValuesSchema;
|
|
298
|
-
let cellsTouched = false;
|
|
299
|
-
let valuesTouched = false;
|
|
300
311
|
let hadTables = false;
|
|
301
312
|
let hadValues = false;
|
|
302
313
|
let transactions = 0;
|
|
314
|
+
let internalListeners = [];
|
|
303
315
|
const changedTableIds = mapNew();
|
|
304
316
|
const changedTableCellIds = mapNew();
|
|
305
317
|
const changedRowCount = mapNew();
|
|
@@ -346,13 +358,13 @@ const createStore = () => {
|
|
|
346
358
|
const [addListener, callListeners, delListenerImpl, callListenerImpl] =
|
|
347
359
|
getListenerFunctions(() => store);
|
|
348
360
|
const validateTablesSchema = (tableSchema) =>
|
|
349
|
-
|
|
350
|
-
|
|
361
|
+
objValidate(tableSchema, (tableSchema2) =>
|
|
362
|
+
objValidate(tableSchema2, validateCellOrValueSchema),
|
|
351
363
|
);
|
|
352
364
|
const validateValuesSchema = (valuesSchema) =>
|
|
353
|
-
|
|
365
|
+
objValidate(valuesSchema, validateCellOrValueSchema);
|
|
354
366
|
const validateCellOrValueSchema = (schema) => {
|
|
355
|
-
if (!
|
|
367
|
+
if (!objValidate(schema, (_child, id2) => arrayHas([TYPE, DEFAULT], id2))) {
|
|
356
368
|
return false;
|
|
357
369
|
}
|
|
358
370
|
const type = schema[TYPE];
|
|
@@ -365,18 +377,18 @@ const createStore = () => {
|
|
|
365
377
|
return true;
|
|
366
378
|
};
|
|
367
379
|
const validateTables = (tables) =>
|
|
368
|
-
|
|
380
|
+
objValidate(tables, validateTable, cellInvalid);
|
|
369
381
|
const validateTable = (table, tableId) =>
|
|
370
382
|
(!hasTablesSchema ||
|
|
371
383
|
collHas(tablesSchemaMap, tableId) ||
|
|
372
384
|
cellInvalid(tableId)) &&
|
|
373
|
-
|
|
385
|
+
objValidate(
|
|
374
386
|
table,
|
|
375
387
|
(row, rowId) => validateRow(tableId, rowId, row),
|
|
376
388
|
() => cellInvalid(tableId),
|
|
377
389
|
);
|
|
378
390
|
const validateRow = (tableId, rowId, row, skipDefaults) =>
|
|
379
|
-
|
|
391
|
+
objValidate(
|
|
380
392
|
skipDefaults ? row : addDefaultsToRow(row, tableId, rowId),
|
|
381
393
|
(cell, cellId) =>
|
|
382
394
|
ifNotUndefined(
|
|
@@ -403,7 +415,7 @@ const createStore = () => {
|
|
|
403
415
|
? cellInvalid(tableId, rowId, cellId, cell)
|
|
404
416
|
: cell;
|
|
405
417
|
const validateValues = (values, skipDefaults) =>
|
|
406
|
-
|
|
418
|
+
objValidate(
|
|
407
419
|
skipDefaults ? values : addDefaultsToValues(values),
|
|
408
420
|
(value, valueId) =>
|
|
409
421
|
ifNotUndefined(
|
|
@@ -666,16 +678,20 @@ const createStore = () => {
|
|
|
666
678
|
addedOrRemoved,
|
|
667
679
|
);
|
|
668
680
|
};
|
|
669
|
-
const cellChanged = (tableId, rowId, cellId, oldCell, newCell) =>
|
|
670
|
-
|
|
681
|
+
const cellChanged = (tableId, rowId, cellId, oldCell, newCell) => {
|
|
682
|
+
mapEnsure(
|
|
671
683
|
mapEnsure(mapEnsure(changedCells, tableId, mapNew), rowId, mapNew),
|
|
672
684
|
cellId,
|
|
673
685
|
() => [oldCell, 0],
|
|
674
|
-
)[1] = newCell
|
|
686
|
+
)[1] = newCell;
|
|
687
|
+
internalListeners[3]?.(tableId, rowId, cellId, newCell);
|
|
688
|
+
};
|
|
675
689
|
const valueIdsChanged = (valueId, addedOrRemoved) =>
|
|
676
690
|
idsChanged(changedValueIds, valueId, addedOrRemoved);
|
|
677
|
-
const valueChanged = (valueId, oldValue, newValue) =>
|
|
678
|
-
|
|
691
|
+
const valueChanged = (valueId, oldValue, newValue) => {
|
|
692
|
+
mapEnsure(changedValues, valueId, () => [oldValue, 0])[1] = newValue;
|
|
693
|
+
internalListeners[4]?.(valueId, newValue);
|
|
694
|
+
};
|
|
679
695
|
const cellInvalid = (tableId, rowId, cellId, invalidCell, defaultedCell) => {
|
|
680
696
|
arrayPush(
|
|
681
697
|
mapEnsure(
|
|
@@ -941,44 +957,6 @@ const createStore = () => {
|
|
|
941
957
|
transaction(() => actions(...arrayMap(args, id)));
|
|
942
958
|
return store;
|
|
943
959
|
};
|
|
944
|
-
const getTransactionChanges = () => [
|
|
945
|
-
mapToObj(
|
|
946
|
-
changedCells,
|
|
947
|
-
(table, tableId) =>
|
|
948
|
-
mapGet(changedTableIds, tableId) === -1
|
|
949
|
-
? null
|
|
950
|
-
: mapToObj(
|
|
951
|
-
table,
|
|
952
|
-
(row, rowId) =>
|
|
953
|
-
mapGet(mapGet(changedRowIds, tableId), rowId) === -1
|
|
954
|
-
? null
|
|
955
|
-
: mapToObj(
|
|
956
|
-
row,
|
|
957
|
-
([, newCell]) => newCell ?? null,
|
|
958
|
-
(_, changedCell) => pairIsEqual(changedCell),
|
|
959
|
-
),
|
|
960
|
-
objIsEmpty,
|
|
961
|
-
),
|
|
962
|
-
objIsEmpty,
|
|
963
|
-
),
|
|
964
|
-
mapToObj(
|
|
965
|
-
changedValues,
|
|
966
|
-
([, newValue]) => newValue ?? null,
|
|
967
|
-
(_, changedValue) => pairIsEqual(changedValue),
|
|
968
|
-
),
|
|
969
|
-
];
|
|
970
|
-
const getTransactionLog = () => ({
|
|
971
|
-
cellsTouched,
|
|
972
|
-
valuesTouched,
|
|
973
|
-
changedCells: mapToObj3(changedCells, pairClone, pairIsEqual),
|
|
974
|
-
invalidCells: mapToObj3(invalidCells),
|
|
975
|
-
changedValues: mapToObj(changedValues, pairClone, pairIsEqual),
|
|
976
|
-
invalidValues: mapToObj(invalidValues),
|
|
977
|
-
changedTableIds: mapToObj(changedTableIds),
|
|
978
|
-
changedRowIds: mapToObj2(changedRowIds),
|
|
979
|
-
changedCellIds: mapToObj3(changedCellIds),
|
|
980
|
-
changedValueIds: mapToObj(changedValueIds),
|
|
981
|
-
});
|
|
982
960
|
const getContent = () => [getTables(), getValues()];
|
|
983
961
|
const getTables = () => mapToObj3(tablesMap);
|
|
984
962
|
const getTableIds = () => mapKeys(tablesMap);
|
|
@@ -1022,12 +1000,13 @@ const createStore = () => {
|
|
|
1022
1000
|
collHas(mapGet(mapGet(tablesMap, id(tableId)), id(rowId)), id(cellId));
|
|
1023
1001
|
const hasValues = () => !collIsEmpty(valuesMap);
|
|
1024
1002
|
const hasValue = (valueId) => collHas(valuesMap, id(valueId));
|
|
1025
|
-
const getTablesJson = () =>
|
|
1026
|
-
const getValuesJson = () =>
|
|
1027
|
-
const getJson = () =>
|
|
1028
|
-
const getTablesSchemaJson = () =>
|
|
1029
|
-
const getValuesSchemaJson = () =>
|
|
1030
|
-
const getSchemaJson = () =>
|
|
1003
|
+
const getTablesJson = () => jsonStringWithMap(tablesMap);
|
|
1004
|
+
const getValuesJson = () => jsonStringWithMap(valuesMap);
|
|
1005
|
+
const getJson = () => jsonStringWithMap([tablesMap, valuesMap]);
|
|
1006
|
+
const getTablesSchemaJson = () => jsonStringWithMap(tablesSchemaMap);
|
|
1007
|
+
const getValuesSchemaJson = () => jsonStringWithMap(valuesSchemaMap);
|
|
1008
|
+
const getSchemaJson = () =>
|
|
1009
|
+
jsonStringWithMap([tablesSchemaMap, valuesSchemaMap]);
|
|
1031
1010
|
const setContent = ([tables, values]) =>
|
|
1032
1011
|
fluentTransaction(() => {
|
|
1033
1012
|
(objIsEmpty(tables) ? delTables : setTables)(tables);
|
|
@@ -1071,7 +1050,7 @@ const createStore = () => {
|
|
|
1071
1050
|
(tableId2, rowId2) => {
|
|
1072
1051
|
if (validateRow(tableId2, rowId2, partialRow, 1)) {
|
|
1073
1052
|
const table = getOrCreateTable(tableId2);
|
|
1074
|
-
|
|
1053
|
+
objToArray(partialRow, (cell, cellId) =>
|
|
1075
1054
|
setCellIntoDefaultRow(tableId2, table, rowId2, cellId, cell),
|
|
1076
1055
|
);
|
|
1077
1056
|
}
|
|
@@ -1109,7 +1088,7 @@ const createStore = () => {
|
|
|
1109
1088
|
const setPartialValues = (partialValues) =>
|
|
1110
1089
|
fluentTransaction(() =>
|
|
1111
1090
|
validateValues(partialValues, 1)
|
|
1112
|
-
?
|
|
1091
|
+
? objToArray(partialValues, (value, valueId) =>
|
|
1113
1092
|
setValidValue(valueId, value),
|
|
1114
1093
|
)
|
|
1115
1094
|
: 0,
|
|
@@ -1126,20 +1105,20 @@ const createStore = () => {
|
|
|
1126
1105
|
),
|
|
1127
1106
|
valueId,
|
|
1128
1107
|
);
|
|
1129
|
-
const
|
|
1108
|
+
const applyChanges = (changes) =>
|
|
1130
1109
|
fluentTransaction(() => {
|
|
1131
|
-
|
|
1110
|
+
objToArray(changes[0], (table, tableId) =>
|
|
1132
1111
|
isUndefined(table)
|
|
1133
1112
|
? delTable(tableId)
|
|
1134
|
-
:
|
|
1113
|
+
: objToArray(table, (row, rowId) =>
|
|
1135
1114
|
isUndefined(row)
|
|
1136
1115
|
? delRow(tableId, rowId)
|
|
1137
|
-
:
|
|
1116
|
+
: objToArray(row, (cell, cellId) =>
|
|
1138
1117
|
setOrDelCell(store, tableId, rowId, cellId, cell),
|
|
1139
1118
|
),
|
|
1140
1119
|
),
|
|
1141
1120
|
);
|
|
1142
|
-
|
|
1121
|
+
objToArray(changes[1], (value, valueId) =>
|
|
1143
1122
|
setOrDelValue(store, valueId, value),
|
|
1144
1123
|
);
|
|
1145
1124
|
});
|
|
@@ -1266,31 +1245,66 @@ const createStore = () => {
|
|
|
1266
1245
|
transactions++;
|
|
1267
1246
|
}
|
|
1268
1247
|
if (transactions == 1) {
|
|
1269
|
-
|
|
1270
|
-
|
|
1271
|
-
void 0,
|
|
1272
|
-
getTransactionChanges,
|
|
1273
|
-
getTransactionLog,
|
|
1274
|
-
);
|
|
1248
|
+
internalListeners[0]?.();
|
|
1249
|
+
callListeners(startTransactionListeners, void 0);
|
|
1275
1250
|
}
|
|
1276
1251
|
return store;
|
|
1277
1252
|
};
|
|
1253
|
+
const getTransactionChanges = () => [
|
|
1254
|
+
mapToObj(
|
|
1255
|
+
changedCells,
|
|
1256
|
+
(table, tableId) =>
|
|
1257
|
+
mapGet(changedTableIds, tableId) === -1
|
|
1258
|
+
? void 0
|
|
1259
|
+
: mapToObj(
|
|
1260
|
+
table,
|
|
1261
|
+
(row, rowId) =>
|
|
1262
|
+
mapGet(mapGet(changedRowIds, tableId), rowId) === -1
|
|
1263
|
+
? void 0
|
|
1264
|
+
: mapToObj(
|
|
1265
|
+
row,
|
|
1266
|
+
([, newCell]) => newCell,
|
|
1267
|
+
(changedCell) => pairIsEqual(changedCell),
|
|
1268
|
+
),
|
|
1269
|
+
collIsEmpty,
|
|
1270
|
+
objIsEmpty,
|
|
1271
|
+
),
|
|
1272
|
+
collIsEmpty,
|
|
1273
|
+
objIsEmpty,
|
|
1274
|
+
),
|
|
1275
|
+
mapToObj(
|
|
1276
|
+
changedValues,
|
|
1277
|
+
([, newValue]) => newValue,
|
|
1278
|
+
(changedValue) => pairIsEqual(changedValue),
|
|
1279
|
+
),
|
|
1280
|
+
1,
|
|
1281
|
+
];
|
|
1282
|
+
const getTransactionLog = () => [
|
|
1283
|
+
!collIsEmpty(changedCells),
|
|
1284
|
+
!collIsEmpty(changedValues),
|
|
1285
|
+
mapToObj3(changedCells, pairClone, pairIsEqual),
|
|
1286
|
+
mapToObj3(invalidCells),
|
|
1287
|
+
mapToObj(changedValues, pairClone, pairIsEqual),
|
|
1288
|
+
mapToObj(invalidValues),
|
|
1289
|
+
mapToObj(changedTableIds),
|
|
1290
|
+
mapToObj2(changedRowIds),
|
|
1291
|
+
mapToObj3(changedCellIds),
|
|
1292
|
+
mapToObj(changedValueIds),
|
|
1293
|
+
];
|
|
1278
1294
|
const finishTransaction = (doRollback) => {
|
|
1279
1295
|
if (transactions > 0) {
|
|
1280
1296
|
transactions--;
|
|
1281
1297
|
if (transactions == 0) {
|
|
1282
|
-
cellsTouched = !collIsEmpty(changedCells);
|
|
1283
|
-
valuesTouched = !collIsEmpty(changedValues);
|
|
1284
1298
|
transactions = 1;
|
|
1285
1299
|
callInvalidCellListeners(1);
|
|
1286
|
-
if (
|
|
1300
|
+
if (!collIsEmpty(changedCells)) {
|
|
1287
1301
|
callTabularListenersForChanges(1);
|
|
1288
1302
|
}
|
|
1289
1303
|
callInvalidValueListeners(1);
|
|
1290
|
-
if (
|
|
1304
|
+
if (!collIsEmpty(changedValues)) {
|
|
1291
1305
|
callValuesListenersForChanges(1);
|
|
1292
1306
|
}
|
|
1293
|
-
if (doRollback?.(
|
|
1307
|
+
if (doRollback?.(store)) {
|
|
1294
1308
|
collForEach(changedCells, (table, tableId) =>
|
|
1295
1309
|
collForEach(table, (row, rowId) =>
|
|
1296
1310
|
collForEach(row, ([oldCell], cellId) =>
|
|
@@ -1298,34 +1312,26 @@ const createStore = () => {
|
|
|
1298
1312
|
),
|
|
1299
1313
|
),
|
|
1300
1314
|
);
|
|
1315
|
+
collClear(changedCells);
|
|
1301
1316
|
collForEach(changedValues, ([oldValue], valueId) =>
|
|
1302
1317
|
setOrDelValue(store, valueId, oldValue),
|
|
1303
1318
|
);
|
|
1304
|
-
|
|
1319
|
+
collClear(changedValues);
|
|
1305
1320
|
}
|
|
1306
|
-
callListeners(
|
|
1307
|
-
finishTransactionListeners[0],
|
|
1308
|
-
void 0,
|
|
1309
|
-
getTransactionChanges,
|
|
1310
|
-
getTransactionLog,
|
|
1311
|
-
);
|
|
1321
|
+
callListeners(finishTransactionListeners[0], void 0);
|
|
1312
1322
|
transactions = -1;
|
|
1313
1323
|
callInvalidCellListeners(0);
|
|
1314
|
-
if (
|
|
1324
|
+
if (!collIsEmpty(changedCells)) {
|
|
1315
1325
|
callTabularListenersForChanges(0);
|
|
1316
1326
|
}
|
|
1317
1327
|
callInvalidValueListeners(0);
|
|
1318
|
-
if (
|
|
1328
|
+
if (!collIsEmpty(changedValues)) {
|
|
1319
1329
|
callValuesListenersForChanges(0);
|
|
1320
1330
|
}
|
|
1321
|
-
|
|
1322
|
-
|
|
1323
|
-
|
|
1324
|
-
getTransactionChanges,
|
|
1325
|
-
getTransactionLog,
|
|
1326
|
-
);
|
|
1331
|
+
internalListeners[1]?.();
|
|
1332
|
+
callListeners(finishTransactionListeners[1], void 0);
|
|
1333
|
+
internalListeners[2]?.();
|
|
1327
1334
|
transactions = 0;
|
|
1328
|
-
cellsTouched = valuesTouched = false;
|
|
1329
1335
|
hadTables = hasTables();
|
|
1330
1336
|
hadValues = hasValues();
|
|
1331
1337
|
arrayForEach(
|
|
@@ -1450,6 +1456,20 @@ const createStore = () => {
|
|
|
1450
1456
|
collSize2(startTransactionListeners) +
|
|
1451
1457
|
pairCollSize2(finishTransactionListeners),
|
|
1452
1458
|
});
|
|
1459
|
+
const setInternalListeners = (
|
|
1460
|
+
preStartTransaction,
|
|
1461
|
+
preFinishTransaction,
|
|
1462
|
+
postFinishTransaction,
|
|
1463
|
+
cellChanged2,
|
|
1464
|
+
valueChanged2,
|
|
1465
|
+
) =>
|
|
1466
|
+
(internalListeners = [
|
|
1467
|
+
preStartTransaction,
|
|
1468
|
+
preFinishTransaction,
|
|
1469
|
+
postFinishTransaction,
|
|
1470
|
+
cellChanged2,
|
|
1471
|
+
valueChanged2,
|
|
1472
|
+
]);
|
|
1453
1473
|
const store = {
|
|
1454
1474
|
getContent,
|
|
1455
1475
|
getTables,
|
|
@@ -1490,7 +1510,7 @@ const createStore = () => {
|
|
|
1490
1510
|
setValues,
|
|
1491
1511
|
setPartialValues,
|
|
1492
1512
|
setValue,
|
|
1493
|
-
|
|
1513
|
+
applyChanges,
|
|
1494
1514
|
setTablesJson,
|
|
1495
1515
|
setValuesJson,
|
|
1496
1516
|
setJson,
|
|
@@ -1508,6 +1528,8 @@ const createStore = () => {
|
|
|
1508
1528
|
delSchema,
|
|
1509
1529
|
transaction,
|
|
1510
1530
|
startTransaction,
|
|
1531
|
+
getTransactionChanges,
|
|
1532
|
+
getTransactionLog,
|
|
1511
1533
|
finishTransaction,
|
|
1512
1534
|
forEachTable,
|
|
1513
1535
|
forEachTableCell,
|
|
@@ -1525,8 +1547,9 @@ const createStore = () => {
|
|
|
1525
1547
|
createStore,
|
|
1526
1548
|
addListener,
|
|
1527
1549
|
callListeners,
|
|
1550
|
+
setInternalListeners,
|
|
1528
1551
|
};
|
|
1529
|
-
|
|
1552
|
+
objToArray(
|
|
1530
1553
|
{
|
|
1531
1554
|
[HAS + TABLES]: [0, hasTablesListeners, [], () => [hasTables()]],
|
|
1532
1555
|
[TABLES]: [0, tablesListeners],
|