tinybase 5.0.0-beta.5 → 5.0.0-beta.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/mergeable-store.cjs +1 -1
- package/lib/cjs/mergeable-store.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 -1
- 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-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-sync.cjs +1 -0
- package/lib/cjs/persisters/persister-sync.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/store.cjs +1 -1
- package/lib/cjs/store.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.cjs +1 -1
- package/lib/cjs/ui-react.cjs.gz +0 -0
- package/lib/cjs-es6/mergeable-store.cjs +1 -1
- package/lib/cjs-es6/mergeable-store.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 -1
- 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-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-sync.cjs +1 -0
- package/lib/cjs-es6/persisters/persister-sync.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/store.cjs +1 -1
- package/lib/cjs-es6/store.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.cjs +1 -1
- package/lib/cjs-es6/ui-react.cjs.gz +0 -0
- package/lib/debug/mergeable-store.js +287 -130
- package/lib/debug/persisters/persister-automerge.js +39 -46
- package/lib/debug/persisters/persister-browser.js +39 -46
- package/lib/debug/persisters/persister-cr-sqlite-wasm.js +64 -60
- package/lib/debug/persisters/persister-electric-sql.js +64 -60
- package/lib/debug/persisters/persister-expo-sqlite-next.js +64 -60
- package/lib/debug/persisters/persister-expo-sqlite.js +64 -60
- package/lib/debug/persisters/persister-file.js +39 -46
- package/lib/debug/persisters/persister-indexed-db.js +39 -46
- package/lib/debug/persisters/persister-libsql.js +64 -60
- package/lib/debug/persisters/persister-partykit-client.js +39 -46
- package/lib/debug/persisters/persister-powersync.js +917 -0
- package/lib/debug/persisters/persister-remote.js +39 -46
- package/lib/debug/persisters/persister-sqlite-wasm.js +64 -60
- package/lib/debug/persisters/persister-sqlite3.js +64 -60
- package/lib/debug/persisters/persister-sync.js +594 -0
- package/lib/debug/persisters/persister-yjs.js +41 -48
- package/lib/debug/persisters.js +38 -45
- package/lib/debug/store.js +44 -32
- package/lib/debug/tinybase.js +322 -173
- package/lib/debug/tools.js +2 -2
- package/lib/debug/ui-react-dom.js +81 -76
- package/lib/debug/ui-react.js +1 -1
- package/lib/es6/mergeable-store.js +1 -1
- package/lib/es6/mergeable-store.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 -1
- 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-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-sync.js +1 -0
- package/lib/es6/persisters/persister-sync.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/store.js +1 -1
- package/lib/es6/store.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.js +1 -1
- package/lib/es6/ui-react.js.gz +0 -0
- package/lib/mergeable-store.js +1 -1
- package/lib/mergeable-store.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 -1
- 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-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-sync.js +1 -0
- package/lib/persisters/persister-sync.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/store.js +1 -1
- package/lib/store.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 +121 -59
- package/lib/types/metrics.d.ts +2 -2
- package/lib/types/persisters/persister-automerge.d.ts +3 -0
- package/lib/types/persisters/persister-browser.d.ts +9 -2
- package/lib/types/persisters/persister-cr-sqlite-wasm.d.ts +3 -0
- package/lib/types/persisters/persister-electric-sql.d.ts +3 -0
- package/lib/types/persisters/persister-expo-sqlite-next.d.ts +3 -0
- package/lib/types/persisters/persister-expo-sqlite.d.ts +3 -0
- package/lib/types/persisters/persister-file.d.ts +5 -1
- package/lib/types/persisters/persister-indexed-db.d.ts +3 -0
- package/lib/types/persisters/persister-libsql.d.ts +3 -0
- package/lib/types/persisters/persister-partykit-client.d.ts +3 -0
- package/lib/types/persisters/persister-powersync.d.ts +157 -0
- package/lib/types/persisters/persister-remote.d.ts +3 -0
- package/lib/types/persisters/persister-sqlite-wasm.d.ts +3 -0
- package/lib/types/persisters/persister-sqlite3.d.ts +3 -0
- package/lib/types/persisters/persister-sync.d.ts +182 -0
- package/lib/types/persisters/persister-yjs.d.ts +5 -2
- package/lib/types/persisters.d.ts +60 -3
- package/lib/types/queries.d.ts +2 -2
- package/lib/types/relationships.d.ts +2 -2
- package/lib/types/store.d.ts +36 -3
- package/lib/types/tinybase.d.ts +9 -9
- package/lib/types/tools.d.ts +2 -2
- package/lib/types/ui-react.d.ts +8 -8
- 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/mergeable-store.d.ts +185 -87
- package/lib/types/with-schemas/metrics.d.ts +2 -2
- package/lib/types/with-schemas/persisters/persister-automerge.d.ts +4 -1
- package/lib/types/with-schemas/persisters/persister-browser.d.ts +13 -6
- package/lib/types/with-schemas/persisters/persister-cr-sqlite-wasm.d.ts +4 -1
- package/lib/types/with-schemas/persisters/persister-electric-sql.d.ts +4 -1
- package/lib/types/with-schemas/persisters/persister-expo-sqlite-next.d.ts +4 -1
- package/lib/types/with-schemas/persisters/persister-expo-sqlite.d.ts +4 -1
- package/lib/types/with-schemas/persisters/persister-file.d.ts +7 -3
- package/lib/types/with-schemas/persisters/persister-indexed-db.d.ts +4 -1
- package/lib/types/with-schemas/persisters/persister-libsql.d.ts +4 -1
- package/lib/types/with-schemas/persisters/persister-partykit-client.d.ts +4 -1
- package/lib/types/with-schemas/persisters/persister-powersync.d.ts +170 -0
- package/lib/types/with-schemas/persisters/persister-remote.d.ts +4 -1
- package/lib/types/with-schemas/persisters/persister-sqlite-wasm.d.ts +4 -1
- package/lib/types/with-schemas/persisters/persister-sqlite3.d.ts +4 -1
- package/lib/types/with-schemas/persisters/persister-sync.d.ts +195 -0
- package/lib/types/with-schemas/persisters/persister-yjs.d.ts +6 -3
- package/lib/types/with-schemas/persisters.d.ts +79 -7
- 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 +100 -3
- package/lib/types/with-schemas/tinybase.d.ts +9 -9
- package/lib/types/with-schemas/tools.d.ts +2 -2
- package/lib/types/with-schemas/ui-react.d.ts +8 -8
- package/lib/ui-react.js +1 -1
- package/lib/ui-react.js.gz +0 -0
- package/lib/umd/mergeable-store.js +1 -1
- package/lib/umd/mergeable-store.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 -1
- 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-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-sync.js +1 -0
- package/lib/umd/persisters/persister-sync.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/store.js +1 -1
- package/lib/umd/store.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.js +1 -1
- package/lib/umd/ui-react.js.gz +0 -0
- package/lib/umd-es6/mergeable-store.js +1 -1
- package/lib/umd-es6/mergeable-store.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 -1
- 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-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-sync.js +1 -0
- package/lib/umd-es6/persisters/persister-sync.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/store.js +1 -1
- package/lib/umd-es6/store.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.js +1 -1
- package/lib/umd-es6/ui-react.js.gz +0 -0
- package/package.json +37 -26
- package/readme.md +2 -2
|
@@ -33,6 +33,7 @@ const isUndefined = (thing) => thing == void 0;
|
|
|
33
33
|
const ifNotUndefined = (value, then, otherwise) =>
|
|
34
34
|
isUndefined(value) ? otherwise?.() : then(value);
|
|
35
35
|
const isTypeStringOrBoolean = (type) => type == STRING || type == BOOLEAN;
|
|
36
|
+
const isString = (thing) => getTypeOf(thing) == STRING;
|
|
36
37
|
const isFunction = (thing) => getTypeOf(thing) == FUNCTION;
|
|
37
38
|
const isArray = (thing) => Array.isArray(thing);
|
|
38
39
|
const slice = (arrayOrString, start, end) => arrayOrString.slice(start, end);
|
|
@@ -54,9 +55,7 @@ const arrayShift = (array) => array.shift();
|
|
|
54
55
|
const object = Object;
|
|
55
56
|
const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
|
|
56
57
|
const objEntries = object.entries;
|
|
57
|
-
const objIds = object.keys;
|
|
58
58
|
const objFrozen = object.isFrozen;
|
|
59
|
-
const objFreeze = object.freeze;
|
|
60
59
|
const isObject = (obj) =>
|
|
61
60
|
!isUndefined(obj) &&
|
|
62
61
|
ifNotUndefined(
|
|
@@ -67,6 +66,8 @@ const isObject = (obj) =>
|
|
|
67
66
|
/* istanbul ignore next */
|
|
68
67
|
() => true,
|
|
69
68
|
);
|
|
69
|
+
const objIds = object.keys;
|
|
70
|
+
const objFreeze = object.freeze;
|
|
70
71
|
const objNew = (entries = []) => object.fromEntries(entries);
|
|
71
72
|
const objHas = (obj, id) => id in obj;
|
|
72
73
|
const objDel = (obj, id) => {
|
|
@@ -77,6 +78,8 @@ const objForEach = (obj, cb) =>
|
|
|
77
78
|
arrayForEach(objEntries(obj), ([id, value]) => cb(value, id));
|
|
78
79
|
const objToArray = (obj, cb) =>
|
|
79
80
|
arrayMap(objEntries(obj), ([id, value]) => cb(value, id));
|
|
81
|
+
const objMap = (obj, cb) =>
|
|
82
|
+
objNew(objToArray(obj, (value, id) => [id, cb(value, id)]));
|
|
80
83
|
const objSize = (obj) => size(objIds(obj));
|
|
81
84
|
const objIsEmpty = (obj) => isObject(obj) && objSize(obj) == 0;
|
|
82
85
|
const objEnsure = (obj, id, getDefaultValue) => {
|
|
@@ -85,6 +88,23 @@ const objEnsure = (obj, id, getDefaultValue) => {
|
|
|
85
88
|
}
|
|
86
89
|
return obj[id];
|
|
87
90
|
};
|
|
91
|
+
const objValidate = (obj, validateChild, onInvalidObj, emptyIsValid = 0) => {
|
|
92
|
+
if (
|
|
93
|
+
isUndefined(obj) ||
|
|
94
|
+
!isObject(obj) ||
|
|
95
|
+
(!emptyIsValid && objIsEmpty(obj)) ||
|
|
96
|
+
objFrozen(obj)
|
|
97
|
+
) {
|
|
98
|
+
onInvalidObj?.();
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
objToArray(obj, (child, id) => {
|
|
102
|
+
if (!validateChild(child, id)) {
|
|
103
|
+
objDel(obj, id);
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
return emptyIsValid ? true : !objIsEmpty(obj);
|
|
107
|
+
};
|
|
88
108
|
|
|
89
109
|
const collSizeN = (collSizer) => (coll) =>
|
|
90
110
|
arrayReduce(collValues(coll), (total, coll2) => total + collSizer(coll2), 0);
|
|
@@ -121,24 +141,28 @@ const mapMatch = (map, obj, set, del = mapSet) => {
|
|
|
121
141
|
mapForEach(map, (id) => (objHas(obj, id) ? 0 : del(map, id)));
|
|
122
142
|
return map;
|
|
123
143
|
};
|
|
124
|
-
const mapToObj = (map,
|
|
144
|
+
const mapToObj = (map, valueMapper, excludeMapValue, excludeObjValue) => {
|
|
125
145
|
const obj = {};
|
|
126
|
-
collForEach(map, (
|
|
127
|
-
|
|
128
|
-
|
|
146
|
+
collForEach(map, (mapValue, id) => {
|
|
147
|
+
if (!excludeMapValue?.(mapValue, id)) {
|
|
148
|
+
const objValue = valueMapper ? valueMapper(mapValue, id) : mapValue;
|
|
149
|
+
excludeObjValue?.(objValue) ? 0 : (obj[id] = objValue);
|
|
150
|
+
}
|
|
129
151
|
});
|
|
130
152
|
return obj;
|
|
131
153
|
};
|
|
132
|
-
const mapToObj2 = (map,
|
|
154
|
+
const mapToObj2 = (map, valueMapper, excludeMapValue) =>
|
|
133
155
|
mapToObj(
|
|
134
156
|
map,
|
|
135
|
-
(childMap) => mapToObj(childMap,
|
|
157
|
+
(childMap) => mapToObj(childMap, valueMapper, excludeMapValue),
|
|
158
|
+
collIsEmpty,
|
|
136
159
|
objIsEmpty,
|
|
137
160
|
);
|
|
138
|
-
const mapToObj3 = (map,
|
|
161
|
+
const mapToObj3 = (map, valueMapper, excludeMapValue) =>
|
|
139
162
|
mapToObj(
|
|
140
163
|
map,
|
|
141
|
-
(childMap) => mapToObj2(childMap,
|
|
164
|
+
(childMap) => mapToObj2(childMap, valueMapper, excludeMapValue),
|
|
165
|
+
collIsEmpty,
|
|
142
166
|
objIsEmpty,
|
|
143
167
|
);
|
|
144
168
|
const mapClone = (map, mapValue) => {
|
|
@@ -181,25 +205,29 @@ const getHash = (value) => {
|
|
|
181
205
|
return hash >>> 0;
|
|
182
206
|
};
|
|
183
207
|
|
|
184
|
-
const
|
|
185
|
-
const
|
|
208
|
+
const stampCloneWithHash = ([time, value, hash]) => [time, value, hash];
|
|
209
|
+
const stampClone = ([time, value]) => [time, value];
|
|
210
|
+
const getStampHash = (stamp) => stamp[2];
|
|
186
211
|
const hashIdAndHash = (id, hash) => getHash(id + ':' + hash);
|
|
187
|
-
const
|
|
188
|
-
|
|
189
|
-
if (time >
|
|
190
|
-
|
|
212
|
+
const stampUpdate = (stamp, hash, time) => {
|
|
213
|
+
stamp[2] = hash >>> 0;
|
|
214
|
+
if (time > stamp[0]) {
|
|
215
|
+
stamp[0] = time;
|
|
191
216
|
}
|
|
192
217
|
};
|
|
193
|
-
const stampNewObj = (time) =>
|
|
194
|
-
const
|
|
195
|
-
const
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
218
|
+
const stampNewObj = (time) => [time, objNew()];
|
|
219
|
+
const stampNewMap = (time = EMPTY_STRING) => [time, mapNew(), 0];
|
|
220
|
+
const stampMapToObjWithHash = (
|
|
221
|
+
[time, map, hash],
|
|
222
|
+
mapper = stampCloneWithHash,
|
|
223
|
+
) => [time, mapToObj(map, mapper), hash];
|
|
224
|
+
const stampValidate = (stamp, validateThing) =>
|
|
225
|
+
isArray(stamp) &&
|
|
226
|
+
size(stamp) == 3 &&
|
|
227
|
+
isString(stamp[0]) &&
|
|
228
|
+
validateThing(stamp[1]) &&
|
|
229
|
+
getTypeOf(stamp[2]) == NUMBER &&
|
|
230
|
+
isFiniteNumber(stamp[2]);
|
|
203
231
|
|
|
204
232
|
const setNew = (entryOrEntries) =>
|
|
205
233
|
new Set(
|
|
@@ -306,6 +334,8 @@ const getCellOrValueType = (cellOrValue) => {
|
|
|
306
334
|
? type
|
|
307
335
|
: void 0;
|
|
308
336
|
};
|
|
337
|
+
const isCellOrValueOrNull = (cellOrValue) =>
|
|
338
|
+
cellOrValue === null || !isUndefined(getCellOrValueType(cellOrValue));
|
|
309
339
|
const setOrDelCell = (store, tableId, rowId, cellId, cell) =>
|
|
310
340
|
isUndefined(cell)
|
|
311
341
|
? store.delCell(tableId, rowId, cellId, true)
|
|
@@ -322,18 +352,6 @@ const jsonParse = JSON.parse;
|
|
|
322
352
|
const defaultSorter = (sortKey1, sortKey2) =>
|
|
323
353
|
(sortKey1 ?? 0) < (sortKey2 ?? 0) ? -1 : 1;
|
|
324
354
|
|
|
325
|
-
const validate = (obj, validateChild, onInvalidObj) => {
|
|
326
|
-
if (isUndefined(obj) || !isObject(obj) || objIsEmpty(obj) || objFrozen(obj)) {
|
|
327
|
-
onInvalidObj?.();
|
|
328
|
-
return false;
|
|
329
|
-
}
|
|
330
|
-
objToArray(obj, (child, id2) => {
|
|
331
|
-
if (!validateChild(child, id2)) {
|
|
332
|
-
objDel(obj, id2);
|
|
333
|
-
}
|
|
334
|
-
});
|
|
335
|
-
return !objIsEmpty(obj);
|
|
336
|
-
};
|
|
337
355
|
const idsChanged = (changedIds, id2, addedOrRemoved) =>
|
|
338
356
|
mapSet(
|
|
339
357
|
changedIds,
|
|
@@ -393,13 +411,13 @@ const createStore = () => {
|
|
|
393
411
|
const [addListener, callListeners, delListenerImpl, callListenerImpl] =
|
|
394
412
|
getListenerFunctions(() => store);
|
|
395
413
|
const validateTablesSchema = (tableSchema) =>
|
|
396
|
-
|
|
397
|
-
|
|
414
|
+
objValidate(tableSchema, (tableSchema2) =>
|
|
415
|
+
objValidate(tableSchema2, validateCellOrValueSchema),
|
|
398
416
|
);
|
|
399
417
|
const validateValuesSchema = (valuesSchema) =>
|
|
400
|
-
|
|
418
|
+
objValidate(valuesSchema, validateCellOrValueSchema);
|
|
401
419
|
const validateCellOrValueSchema = (schema) => {
|
|
402
|
-
if (!
|
|
420
|
+
if (!objValidate(schema, (_child, id2) => arrayHas([TYPE, DEFAULT], id2))) {
|
|
403
421
|
return false;
|
|
404
422
|
}
|
|
405
423
|
const type = schema[TYPE];
|
|
@@ -412,18 +430,18 @@ const createStore = () => {
|
|
|
412
430
|
return true;
|
|
413
431
|
};
|
|
414
432
|
const validateTables = (tables) =>
|
|
415
|
-
|
|
433
|
+
objValidate(tables, validateTable, cellInvalid);
|
|
416
434
|
const validateTable = (table, tableId) =>
|
|
417
435
|
(!hasTablesSchema ||
|
|
418
436
|
collHas(tablesSchemaMap, tableId) ||
|
|
419
437
|
cellInvalid(tableId)) &&
|
|
420
|
-
|
|
438
|
+
objValidate(
|
|
421
439
|
table,
|
|
422
440
|
(row, rowId) => validateRow(tableId, rowId, row),
|
|
423
441
|
() => cellInvalid(tableId),
|
|
424
442
|
);
|
|
425
443
|
const validateRow = (tableId, rowId, row, skipDefaults) =>
|
|
426
|
-
|
|
444
|
+
objValidate(
|
|
427
445
|
skipDefaults ? row : addDefaultsToRow(row, tableId, rowId),
|
|
428
446
|
(cell, cellId) =>
|
|
429
447
|
ifNotUndefined(
|
|
@@ -450,7 +468,7 @@ const createStore = () => {
|
|
|
450
468
|
? cellInvalid(tableId, rowId, cellId, cell)
|
|
451
469
|
: cell;
|
|
452
470
|
const validateValues = (values, skipDefaults) =>
|
|
453
|
-
|
|
471
|
+
objValidate(
|
|
454
472
|
skipDefaults ? values : addDefaultsToValues(values),
|
|
455
473
|
(value, valueId) =>
|
|
456
474
|
ifNotUndefined(
|
|
@@ -1293,17 +1311,20 @@ const createStore = () => {
|
|
|
1293
1311
|
: mapToObj(
|
|
1294
1312
|
row,
|
|
1295
1313
|
([, newCell]) => newCell,
|
|
1296
|
-
(
|
|
1314
|
+
(changedCell) => pairIsEqual(changedCell),
|
|
1297
1315
|
),
|
|
1316
|
+
collIsEmpty,
|
|
1298
1317
|
objIsEmpty,
|
|
1299
1318
|
),
|
|
1319
|
+
collIsEmpty,
|
|
1300
1320
|
objIsEmpty,
|
|
1301
1321
|
),
|
|
1302
1322
|
mapToObj(
|
|
1303
1323
|
changedValues,
|
|
1304
1324
|
([, newValue]) => newValue,
|
|
1305
|
-
(
|
|
1325
|
+
(changedValue) => pairIsEqual(changedValue),
|
|
1306
1326
|
),
|
|
1327
|
+
1,
|
|
1307
1328
|
];
|
|
1308
1329
|
const getTransactionLog = () => [
|
|
1309
1330
|
!collIsEmpty(changedCells),
|
|
@@ -1690,10 +1711,13 @@ const getHlcFunctions = (uniqueId) => {
|
|
|
1690
1711
|
};
|
|
1691
1712
|
const seenHlc = (hlc) => {
|
|
1692
1713
|
const previousLogicalTime = logicalTime;
|
|
1693
|
-
const [remoteLogicalTime, remoteCounter] =
|
|
1694
|
-
? [0, 0]
|
|
1695
|
-
|
|
1696
|
-
|
|
1714
|
+
const [remoteLogicalTime, remoteCounter] =
|
|
1715
|
+
isUndefined(hlc) || hlc == '' ? [0, 0] : decodeHlc(hlc);
|
|
1716
|
+
logicalTime = mathMax(
|
|
1717
|
+
previousLogicalTime,
|
|
1718
|
+
remoteLogicalTime,
|
|
1719
|
+
globalThis.HLC_TIME ?? Date.now(),
|
|
1720
|
+
);
|
|
1697
1721
|
lastCounter =
|
|
1698
1722
|
logicalTime == previousLogicalTime
|
|
1699
1723
|
? logicalTime == remoteLogicalTime
|
|
@@ -1724,14 +1748,54 @@ const LISTENER_ARGS = {
|
|
|
1724
1748
|
InvalidCell: 3,
|
|
1725
1749
|
InvalidValue: 1,
|
|
1726
1750
|
};
|
|
1727
|
-
const
|
|
1751
|
+
const newContentStampMap = (time = EMPTY_STRING) => [
|
|
1728
1752
|
time,
|
|
1729
|
-
[
|
|
1753
|
+
[stampNewMap(time), stampNewMap(time)],
|
|
1730
1754
|
0,
|
|
1731
1755
|
];
|
|
1756
|
+
const validateMergeableContent = (mergeableContent) =>
|
|
1757
|
+
stampValidate(
|
|
1758
|
+
mergeableContent,
|
|
1759
|
+
(content) =>
|
|
1760
|
+
isArray(content) &&
|
|
1761
|
+
size(content) == 2 &&
|
|
1762
|
+
stampValidate(content[0], (tableStamps) =>
|
|
1763
|
+
objValidate(
|
|
1764
|
+
tableStamps,
|
|
1765
|
+
(tableStamp) =>
|
|
1766
|
+
stampValidate(tableStamp, (rowStamps) =>
|
|
1767
|
+
objValidate(
|
|
1768
|
+
rowStamps,
|
|
1769
|
+
(rowStamp) =>
|
|
1770
|
+
stampValidate(rowStamp, (cellStamps) =>
|
|
1771
|
+
objValidate(
|
|
1772
|
+
cellStamps,
|
|
1773
|
+
(cellStamp) =>
|
|
1774
|
+
stampValidate(cellStamp, isCellOrValueOrNull),
|
|
1775
|
+
void 0,
|
|
1776
|
+
1,
|
|
1777
|
+
),
|
|
1778
|
+
),
|
|
1779
|
+
void 0,
|
|
1780
|
+
1,
|
|
1781
|
+
),
|
|
1782
|
+
),
|
|
1783
|
+
void 0,
|
|
1784
|
+
1,
|
|
1785
|
+
),
|
|
1786
|
+
) &&
|
|
1787
|
+
stampValidate(content[1], (values) =>
|
|
1788
|
+
objValidate(
|
|
1789
|
+
values,
|
|
1790
|
+
(value) => stampValidate(value, isCellOrValueOrNull),
|
|
1791
|
+
void 0,
|
|
1792
|
+
1,
|
|
1793
|
+
),
|
|
1794
|
+
),
|
|
1795
|
+
);
|
|
1732
1796
|
const createMergeableStore = (id) => {
|
|
1733
1797
|
let listening = 1;
|
|
1734
|
-
let
|
|
1798
|
+
let contentStampMap = newContentStampMap();
|
|
1735
1799
|
let transactionTime;
|
|
1736
1800
|
let transactionMergeableChanges;
|
|
1737
1801
|
const [getHlc, seenHlc] = getHlcFunctions(id);
|
|
@@ -1741,6 +1805,7 @@ const createMergeableStore = (id) => {
|
|
|
1741
1805
|
listening = 0;
|
|
1742
1806
|
actions();
|
|
1743
1807
|
listening = wasListening;
|
|
1808
|
+
return mergeableStore;
|
|
1744
1809
|
};
|
|
1745
1810
|
const mergeContentOrChanges = (contentOrChanges, hasHashes = 0) => {
|
|
1746
1811
|
const tablesChanges = {};
|
|
@@ -1750,8 +1815,8 @@ const createMergeableStore = (id) => {
|
|
|
1750
1815
|
[[tablesTime, tablesObj, incomingTablesHash], values],
|
|
1751
1816
|
incomingContentOrChangesHash,
|
|
1752
1817
|
] = contentOrChanges;
|
|
1753
|
-
const [, [
|
|
1754
|
-
const [oldTablesTime,
|
|
1818
|
+
const [, [tablesStampMap, valuesStampMap]] = contentStampMap;
|
|
1819
|
+
const [oldTablesTime, tableStampMaps, oldTablesHash] = tablesStampMap;
|
|
1755
1820
|
if (tablesTime) {
|
|
1756
1821
|
let tablesHash = hasHashes
|
|
1757
1822
|
? incomingTablesHash
|
|
@@ -1762,8 +1827,8 @@ const createMergeableStore = (id) => {
|
|
|
1762
1827
|
objForEach(
|
|
1763
1828
|
tablesObj,
|
|
1764
1829
|
([tableTime, rowsObj, incomingTableHash], tableId) => {
|
|
1765
|
-
const
|
|
1766
|
-
const [oldTableTime,
|
|
1830
|
+
const tableStampMap = mapEnsure(tableStampMaps, tableId, stampNewMap);
|
|
1831
|
+
const [oldTableTime, rowStampMaps, oldTableHash] = tableStampMap;
|
|
1767
1832
|
let tableHash = hasHashes
|
|
1768
1833
|
? incomingTableHash
|
|
1769
1834
|
: oldTableHash ^
|
|
@@ -1774,7 +1839,7 @@ const createMergeableStore = (id) => {
|
|
|
1774
1839
|
objForEach(rowsObj, (row, rowId) => {
|
|
1775
1840
|
const [oldRowHash, rowHash] = mergeCellsOrValues(
|
|
1776
1841
|
row,
|
|
1777
|
-
mapEnsure(
|
|
1842
|
+
mapEnsure(rowStampMaps, rowId, stampNewMap),
|
|
1778
1843
|
objEnsure(
|
|
1779
1844
|
objEnsure(tablesChanges, tableId, objNew),
|
|
1780
1845
|
rowId,
|
|
@@ -1787,26 +1852,33 @@ const createMergeableStore = (id) => {
|
|
|
1787
1852
|
: (oldRowHash ? hashIdAndHash(rowId, oldRowHash) : 0) ^
|
|
1788
1853
|
hashIdAndHash(rowId, rowHash);
|
|
1789
1854
|
});
|
|
1790
|
-
|
|
1855
|
+
stampUpdate(tableStampMap, tableHash, tableTime);
|
|
1791
1856
|
tablesHash ^= hasHashes
|
|
1792
1857
|
? 0
|
|
1793
1858
|
: (oldTableHash ? hashIdAndHash(tableId, oldTableHash) : 0) ^
|
|
1794
|
-
hashIdAndHash(tableId,
|
|
1859
|
+
hashIdAndHash(tableId, tableStampMap[2]);
|
|
1795
1860
|
},
|
|
1796
1861
|
);
|
|
1797
|
-
|
|
1862
|
+
stampUpdate(tablesStampMap, tablesHash, tablesTime);
|
|
1798
1863
|
}
|
|
1799
|
-
mergeCellsOrValues(values,
|
|
1800
|
-
|
|
1801
|
-
|
|
1802
|
-
hasHashes
|
|
1864
|
+
mergeCellsOrValues(values, valuesStampMap, valuesChanges, hasHashes);
|
|
1865
|
+
stampUpdate(
|
|
1866
|
+
contentStampMap,
|
|
1867
|
+
hasHashes
|
|
1868
|
+
? incomingContentOrChangesHash
|
|
1869
|
+
: tablesStampMap[2] ^ valuesStampMap[2],
|
|
1803
1870
|
contentOrChangesTime,
|
|
1804
1871
|
);
|
|
1805
|
-
return [tablesChanges, valuesChanges];
|
|
1872
|
+
return [tablesChanges, valuesChanges, 1];
|
|
1806
1873
|
};
|
|
1807
|
-
const mergeCellsOrValues = (
|
|
1874
|
+
const mergeCellsOrValues = (
|
|
1875
|
+
things,
|
|
1876
|
+
thingsStampMap,
|
|
1877
|
+
thingsChanges,
|
|
1878
|
+
hasHashes,
|
|
1879
|
+
) => {
|
|
1808
1880
|
const [thingsTime, thingsObj, incomingThingsHash] = things;
|
|
1809
|
-
const [oldThingsTime,
|
|
1881
|
+
const [oldThingsTime, thingStampMaps, oldThingsHash] = thingsStampMap;
|
|
1810
1882
|
if (thingsTime) {
|
|
1811
1883
|
let thingsHash = hasHashes
|
|
1812
1884
|
? incomingThingsHash
|
|
@@ -1817,28 +1889,32 @@ const createMergeableStore = (id) => {
|
|
|
1817
1889
|
objForEach(
|
|
1818
1890
|
thingsObj,
|
|
1819
1891
|
([thingTime, thing, incomingThingHash], thingId) => {
|
|
1820
|
-
const
|
|
1821
|
-
|
|
1892
|
+
const thingStampMap = mapEnsure(thingStampMaps, thingId, () => [
|
|
1893
|
+
EMPTY_STRING,
|
|
1894
|
+
void 0,
|
|
1895
|
+
0,
|
|
1896
|
+
]);
|
|
1897
|
+
const [oldThingTime, , oldThingHash] = thingStampMap;
|
|
1822
1898
|
if (thingTime > oldThingTime) {
|
|
1823
|
-
|
|
1824
|
-
|
|
1899
|
+
stampUpdate(
|
|
1900
|
+
thingStampMap,
|
|
1825
1901
|
hasHashes
|
|
1826
1902
|
? incomingThingHash
|
|
1827
1903
|
: getHash(jsonString(thing ?? null) + ':' + thingTime),
|
|
1828
1904
|
thingTime,
|
|
1829
1905
|
);
|
|
1830
|
-
|
|
1906
|
+
thingStampMap[1] = thing;
|
|
1831
1907
|
thingsChanges[thingId] = thing;
|
|
1832
1908
|
thingsHash ^= hasHashes
|
|
1833
1909
|
? 0
|
|
1834
1910
|
: hashIdAndHash(thingId, oldThingHash) ^
|
|
1835
|
-
hashIdAndHash(thingId,
|
|
1911
|
+
hashIdAndHash(thingId, thingStampMap[2]);
|
|
1836
1912
|
}
|
|
1837
1913
|
},
|
|
1838
1914
|
);
|
|
1839
|
-
|
|
1915
|
+
stampUpdate(thingsStampMap, thingsHash, thingsTime);
|
|
1840
1916
|
}
|
|
1841
|
-
return [oldThingsHash,
|
|
1917
|
+
return [oldThingsHash, thingsStampMap[2]];
|
|
1842
1918
|
};
|
|
1843
1919
|
const preFinishTransaction = () => {
|
|
1844
1920
|
if (listening) {
|
|
@@ -1848,26 +1924,118 @@ const createMergeableStore = (id) => {
|
|
|
1848
1924
|
};
|
|
1849
1925
|
const postFinishTransaction = () =>
|
|
1850
1926
|
(transactionTime = transactionMergeableChanges = void 0);
|
|
1851
|
-
const
|
|
1852
|
-
|
|
1853
|
-
|
|
1854
|
-
|
|
1927
|
+
const getId = () => id;
|
|
1928
|
+
const getMergeableContent = () => [
|
|
1929
|
+
contentStampMap[0],
|
|
1930
|
+
[
|
|
1931
|
+
stampMapToObjWithHash(contentStampMap[1][0], (tableStampMap) =>
|
|
1932
|
+
stampMapToObjWithHash(tableStampMap, (rowStampMap) =>
|
|
1933
|
+
stampMapToObjWithHash(rowStampMap),
|
|
1934
|
+
),
|
|
1855
1935
|
),
|
|
1856
|
-
|
|
1857
|
-
]
|
|
1858
|
-
|
|
1859
|
-
|
|
1860
|
-
|
|
1861
|
-
|
|
1862
|
-
|
|
1863
|
-
|
|
1936
|
+
stampMapToObjWithHash(contentStampMap[1][1]),
|
|
1937
|
+
],
|
|
1938
|
+
contentStampMap[2],
|
|
1939
|
+
];
|
|
1940
|
+
const getMergeableContentHashes = () => [
|
|
1941
|
+
contentStampMap[0],
|
|
1942
|
+
[contentStampMap[1][0][2], contentStampMap[1][1][2]],
|
|
1943
|
+
];
|
|
1944
|
+
const getMergeableTableHashes = () =>
|
|
1945
|
+
mapToObj(contentStampMap[1][0][1], getStampHash);
|
|
1946
|
+
const getMergeableTableIdsDiff = (relativeTo) => {
|
|
1947
|
+
const tableIds = [];
|
|
1948
|
+
mapForEach(contentStampMap[1][0][1], (tableId, [, , hash]) => {
|
|
1949
|
+
if (hash !== relativeTo?.[tableId]) {
|
|
1950
|
+
arrayPush(tableIds, tableId);
|
|
1951
|
+
}
|
|
1952
|
+
});
|
|
1953
|
+
return tableIds;
|
|
1954
|
+
};
|
|
1955
|
+
const getMergeableRowHashes = (tablesDelta) =>
|
|
1956
|
+
objNew(
|
|
1957
|
+
arrayMap(tablesDelta, (tableId) => [
|
|
1958
|
+
tableId,
|
|
1959
|
+
mapToObj(mapGet(contentStampMap[1][0][1], tableId)?.[1], getStampHash),
|
|
1960
|
+
]),
|
|
1864
1961
|
);
|
|
1865
|
-
|
|
1866
|
-
|
|
1867
|
-
|
|
1962
|
+
const getMergeableRowIdsDiff = (relativeTo) =>
|
|
1963
|
+
objMap(relativeTo, (rowHashes, tableId) => {
|
|
1964
|
+
const rowIds = [];
|
|
1965
|
+
mapForEach(
|
|
1966
|
+
mapGet(contentStampMap[1][0][1], tableId)?.[1],
|
|
1967
|
+
(rowId, [, , hash]) => {
|
|
1968
|
+
if (hash !== rowHashes?.[rowId]) {
|
|
1969
|
+
arrayPush(rowIds, rowId);
|
|
1970
|
+
}
|
|
1971
|
+
},
|
|
1972
|
+
);
|
|
1973
|
+
return rowIds;
|
|
1974
|
+
});
|
|
1975
|
+
const getMergeableCellHashes = (tableDelta) =>
|
|
1976
|
+
objMap(tableDelta, (rowIds, tableId) =>
|
|
1977
|
+
objNew(
|
|
1978
|
+
arrayMap(rowIds, (rowId) => [
|
|
1979
|
+
rowId,
|
|
1980
|
+
mapToObj(
|
|
1981
|
+
mapGet(mapGet(contentStampMap[1][0][1], tableId)?.[1], rowId)?.[1],
|
|
1982
|
+
getStampHash,
|
|
1983
|
+
),
|
|
1984
|
+
]),
|
|
1985
|
+
),
|
|
1868
1986
|
);
|
|
1869
|
-
|
|
1987
|
+
const getMergeableTablesChanges = (relativeTo) => {
|
|
1988
|
+
const [, [[tablesTime, tableStampMaps]]] = contentStampMap;
|
|
1989
|
+
const tables = {};
|
|
1990
|
+
objForEach(relativeTo, (rowCellHashes, tableId) =>
|
|
1991
|
+
ifNotUndefined(
|
|
1992
|
+
mapGet(tableStampMaps, tableId),
|
|
1993
|
+
([tableTime, rowStampMaps]) => {
|
|
1994
|
+
const table = {};
|
|
1995
|
+
objForEach(rowCellHashes, (cellHashes, rowId) =>
|
|
1996
|
+
ifNotUndefined(
|
|
1997
|
+
mapGet(rowStampMaps, rowId),
|
|
1998
|
+
([rowTime, cellStampMaps]) => {
|
|
1999
|
+
const row = mapToObj(
|
|
2000
|
+
cellStampMaps,
|
|
2001
|
+
stampClone,
|
|
2002
|
+
([, , hash], cellId) => hash == cellHashes?.[cellId],
|
|
2003
|
+
);
|
|
2004
|
+
if (!objIsEmpty(row)) {
|
|
2005
|
+
table[rowId] = [rowTime, row];
|
|
2006
|
+
}
|
|
2007
|
+
},
|
|
2008
|
+
),
|
|
2009
|
+
);
|
|
2010
|
+
if (!objIsEmpty(table)) {
|
|
2011
|
+
tables[tableId] = [tableTime, table];
|
|
2012
|
+
}
|
|
2013
|
+
},
|
|
2014
|
+
),
|
|
2015
|
+
);
|
|
2016
|
+
return [tablesTime, tables];
|
|
1870
2017
|
};
|
|
2018
|
+
const getMergeableValuesHashes = () =>
|
|
2019
|
+
mapToObj(contentStampMap[1][1][1], getStampHash);
|
|
2020
|
+
const getMergeableValuesChanges = (relativeTo) => [
|
|
2021
|
+
contentStampMap[1][1][0],
|
|
2022
|
+
mapToObj(
|
|
2023
|
+
contentStampMap[1][1][1],
|
|
2024
|
+
stampClone,
|
|
2025
|
+
([, , hash], valueId) => hash == relativeTo?.[valueId],
|
|
2026
|
+
),
|
|
2027
|
+
];
|
|
2028
|
+
const setMergeableContent = (mergeableContent) =>
|
|
2029
|
+
disableListening(() =>
|
|
2030
|
+
validateMergeableContent(mergeableContent)
|
|
2031
|
+
? store.transaction(() => {
|
|
2032
|
+
store.delTables().delValues();
|
|
2033
|
+
contentStampMap = newContentStampMap();
|
|
2034
|
+
seenHlc(mergeableContent[0]);
|
|
2035
|
+
store.applyChanges(mergeContentOrChanges(mergeableContent, 1));
|
|
2036
|
+
})
|
|
2037
|
+
: 0,
|
|
2038
|
+
);
|
|
1871
2039
|
const getTransactionMergeableChanges = () => {
|
|
1872
2040
|
if (isUndefined(transactionMergeableChanges)) {
|
|
1873
2041
|
const [, , changedCells, , changedValues] = store.getTransactionLog();
|
|
@@ -1875,10 +2043,14 @@ const createMergeableStore = (id) => {
|
|
|
1875
2043
|
!objIsEmpty(changedCells) || !objIsEmpty(changedValues)
|
|
1876
2044
|
? transactionTime ?? (transactionTime = getHlc())
|
|
1877
2045
|
: EMPTY_STRING;
|
|
1878
|
-
const mergeableChanges =
|
|
1879
|
-
|
|
1880
|
-
|
|
1881
|
-
|
|
2046
|
+
const mergeableChanges = [
|
|
2047
|
+
time,
|
|
2048
|
+
[
|
|
2049
|
+
stampNewObj(objIsEmpty(changedCells) ? EMPTY_STRING : time),
|
|
2050
|
+
stampNewObj(objIsEmpty(changedValues) ? EMPTY_STRING : time),
|
|
2051
|
+
1,
|
|
2052
|
+
],
|
|
2053
|
+
];
|
|
1882
2054
|
const [[, tablesObj], [, valuesObj]] = mergeableChanges[1];
|
|
1883
2055
|
objToArray(changedCells, (changedTable, tableId) => {
|
|
1884
2056
|
const [, rowsObj] = (tablesObj[tableId] = stampNewObj(time));
|
|
@@ -1886,60 +2058,45 @@ const createMergeableStore = (id) => {
|
|
|
1886
2058
|
const [, cellsObj] = (rowsObj[rowId] = stampNewObj(time));
|
|
1887
2059
|
objToArray(
|
|
1888
2060
|
changedRow,
|
|
1889
|
-
([, newCell], cellId) =>
|
|
1890
|
-
(cellsObj[cellId] = stampNew(time, newCell)),
|
|
2061
|
+
([, newCell], cellId) => (cellsObj[cellId] = [time, newCell]),
|
|
1891
2062
|
);
|
|
1892
2063
|
});
|
|
1893
2064
|
});
|
|
1894
2065
|
objToArray(
|
|
1895
2066
|
changedValues,
|
|
1896
|
-
([, newValue], valueId) =>
|
|
1897
|
-
(valuesObj[valueId] = stampNew(time, newValue)),
|
|
2067
|
+
([, newValue], valueId) => (valuesObj[valueId] = [time, newValue]),
|
|
1898
2068
|
);
|
|
1899
2069
|
return mergeableChanges;
|
|
1900
2070
|
}
|
|
1901
2071
|
return transactionMergeableChanges;
|
|
1902
2072
|
};
|
|
1903
|
-
const applyMergeableChanges = (mergeableChanges) =>
|
|
1904
|
-
|
|
1905
|
-
|
|
1906
|
-
store.applyChanges(mergeContentOrChanges(mergeableChanges))
|
|
1907
|
-
);
|
|
1908
|
-
return mergeableStore;
|
|
1909
|
-
};
|
|
2073
|
+
const applyMergeableChanges = (mergeableChanges) =>
|
|
2074
|
+
disableListening(() => {
|
|
2075
|
+
seenHlc(mergeableChanges[0]);
|
|
2076
|
+
store.applyChanges(mergeContentOrChanges(mergeableChanges));
|
|
2077
|
+
});
|
|
1910
2078
|
const merge = (mergeableStore2) => {
|
|
1911
2079
|
const mergeableChanges = getMergeableContent();
|
|
1912
2080
|
const mergeableChanges2 = mergeableStore2.getMergeableContent();
|
|
1913
2081
|
mergeableStore2.applyMergeableChanges(mergeableChanges);
|
|
1914
2082
|
return applyMergeableChanges(mergeableChanges2);
|
|
1915
2083
|
};
|
|
1916
|
-
const getContentHash = () => contentHsm[2];
|
|
1917
|
-
const getTablesHash = () => contentHsm[1][0][2];
|
|
1918
|
-
const getTableHash = (tableId) =>
|
|
1919
|
-
mapGet(contentHsm[1][0][1], tableId)?.[2] ?? 0;
|
|
1920
|
-
const getRowHash = (tableId, rowId) =>
|
|
1921
|
-
mapGet(mapGet(contentHsm[1][0][1], tableId)?.[1], rowId)?.[2] ?? 0;
|
|
1922
|
-
const getCellHash = (tableId, rowId, cellId) =>
|
|
1923
|
-
mapGet(
|
|
1924
|
-
mapGet(mapGet(contentHsm[1][0][1], tableId)?.[1], rowId)?.[1],
|
|
1925
|
-
cellId,
|
|
1926
|
-
)?.[2] ?? 0;
|
|
1927
|
-
const getValuesHash = () => contentHsm[1][1][2];
|
|
1928
|
-
const getValueHash = (valueId) =>
|
|
1929
|
-
mapGet(contentHsm[1][1][1], valueId)?.[2] ?? 0;
|
|
1930
2084
|
const mergeableStore = {
|
|
2085
|
+
getId,
|
|
1931
2086
|
getMergeableContent,
|
|
2087
|
+
getMergeableContentHashes,
|
|
2088
|
+
getMergeableTableHashes,
|
|
2089
|
+
getMergeableTableIdsDiff,
|
|
2090
|
+
getMergeableRowHashes,
|
|
2091
|
+
getMergeableRowIdsDiff,
|
|
2092
|
+
getMergeableCellHashes,
|
|
2093
|
+
getMergeableTablesChanges,
|
|
2094
|
+
getMergeableValuesHashes,
|
|
2095
|
+
getMergeableValuesChanges,
|
|
1932
2096
|
setMergeableContent,
|
|
1933
2097
|
getTransactionMergeableChanges,
|
|
1934
2098
|
applyMergeableChanges,
|
|
1935
2099
|
merge,
|
|
1936
|
-
getContentHash,
|
|
1937
|
-
getTablesHash,
|
|
1938
|
-
getTableHash,
|
|
1939
|
-
getRowHash,
|
|
1940
|
-
getCellHash,
|
|
1941
|
-
getValuesHash,
|
|
1942
|
-
getValueHash,
|
|
1943
2100
|
};
|
|
1944
2101
|
store.setInternalListeners(preFinishTransaction, postFinishTransaction);
|
|
1945
2102
|
objToArray(
|