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
package/lib/debug/tinybase.js
CHANGED
|
@@ -74,9 +74,7 @@ const arrayShift = (array) => array.shift();
|
|
|
74
74
|
const object = Object;
|
|
75
75
|
const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
|
|
76
76
|
const objEntries = object.entries;
|
|
77
|
-
const objIds = object.keys;
|
|
78
77
|
const objFrozen = object.isFrozen;
|
|
79
|
-
const objFreeze = object.freeze;
|
|
80
78
|
const isObject = (obj) =>
|
|
81
79
|
!isUndefined(obj) &&
|
|
82
80
|
ifNotUndefined(
|
|
@@ -87,6 +85,8 @@ const isObject = (obj) =>
|
|
|
87
85
|
/* istanbul ignore next */
|
|
88
86
|
() => true,
|
|
89
87
|
);
|
|
88
|
+
const objIds = object.keys;
|
|
89
|
+
const objFreeze = object.freeze;
|
|
90
90
|
const objNew = (entries = []) => object.fromEntries(entries);
|
|
91
91
|
const objHas = (obj, id) => id in obj;
|
|
92
92
|
const objDel = (obj, id) => {
|
|
@@ -97,6 +97,8 @@ const objForEach = (obj, cb) =>
|
|
|
97
97
|
arrayForEach(objEntries(obj), ([id, value]) => cb(value, id));
|
|
98
98
|
const objToArray = (obj, cb) =>
|
|
99
99
|
arrayMap(objEntries(obj), ([id, value]) => cb(value, id));
|
|
100
|
+
const objMap = (obj, cb) =>
|
|
101
|
+
objNew(objToArray(obj, (value, id) => [id, cb(value, id)]));
|
|
100
102
|
const objSize = (obj) => size(objIds(obj));
|
|
101
103
|
const objIsEmpty = (obj) => isObject(obj) && objSize(obj) == 0;
|
|
102
104
|
const objEnsure = (obj, id, getDefaultValue) => {
|
|
@@ -105,6 +107,23 @@ const objEnsure = (obj, id, getDefaultValue) => {
|
|
|
105
107
|
}
|
|
106
108
|
return obj[id];
|
|
107
109
|
};
|
|
110
|
+
const objValidate = (obj, validateChild, onInvalidObj, emptyIsValid = 0) => {
|
|
111
|
+
if (
|
|
112
|
+
isUndefined(obj) ||
|
|
113
|
+
!isObject(obj) ||
|
|
114
|
+
(!emptyIsValid && objIsEmpty(obj)) ||
|
|
115
|
+
objFrozen(obj)
|
|
116
|
+
) {
|
|
117
|
+
onInvalidObj?.();
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
120
|
+
objToArray(obj, (child, id) => {
|
|
121
|
+
if (!validateChild(child, id)) {
|
|
122
|
+
objDel(obj, id);
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
return emptyIsValid ? true : !objIsEmpty(obj);
|
|
126
|
+
};
|
|
108
127
|
|
|
109
128
|
const collSizeN = (collSizer) => (coll) =>
|
|
110
129
|
arrayReduce(collValues(coll), (total, coll2) => total + collSizer(coll2), 0);
|
|
@@ -141,24 +160,28 @@ const mapMatch = (map, obj, set, del = mapSet) => {
|
|
|
141
160
|
mapForEach(map, (id) => (objHas(obj, id) ? 0 : del(map, id)));
|
|
142
161
|
return map;
|
|
143
162
|
};
|
|
144
|
-
const mapToObj = (map,
|
|
163
|
+
const mapToObj = (map, valueMapper, excludeMapValue, excludeObjValue) => {
|
|
145
164
|
const obj = {};
|
|
146
|
-
collForEach(map, (
|
|
147
|
-
|
|
148
|
-
|
|
165
|
+
collForEach(map, (mapValue, id) => {
|
|
166
|
+
if (!excludeMapValue?.(mapValue, id)) {
|
|
167
|
+
const objValue = valueMapper ? valueMapper(mapValue, id) : mapValue;
|
|
168
|
+
excludeObjValue?.(objValue) ? 0 : (obj[id] = objValue);
|
|
169
|
+
}
|
|
149
170
|
});
|
|
150
171
|
return obj;
|
|
151
172
|
};
|
|
152
|
-
const mapToObj2 = (map,
|
|
173
|
+
const mapToObj2 = (map, valueMapper, excludeMapValue) =>
|
|
153
174
|
mapToObj(
|
|
154
175
|
map,
|
|
155
|
-
(childMap) => mapToObj(childMap,
|
|
176
|
+
(childMap) => mapToObj(childMap, valueMapper, excludeMapValue),
|
|
177
|
+
collIsEmpty,
|
|
156
178
|
objIsEmpty,
|
|
157
179
|
);
|
|
158
|
-
const mapToObj3 = (map,
|
|
180
|
+
const mapToObj3 = (map, valueMapper, excludeMapValue) =>
|
|
159
181
|
mapToObj(
|
|
160
182
|
map,
|
|
161
|
-
(childMap) => mapToObj2(childMap,
|
|
183
|
+
(childMap) => mapToObj2(childMap, valueMapper, excludeMapValue),
|
|
184
|
+
collIsEmpty,
|
|
162
185
|
objIsEmpty,
|
|
163
186
|
);
|
|
164
187
|
const mapClone = (map, mapValue) => {
|
|
@@ -197,6 +220,8 @@ const getCellOrValueType = (cellOrValue) => {
|
|
|
197
220
|
? type
|
|
198
221
|
: void 0;
|
|
199
222
|
};
|
|
223
|
+
const isCellOrValueOrNull = (cellOrValue) =>
|
|
224
|
+
cellOrValue === null || !isUndefined(getCellOrValueType(cellOrValue));
|
|
200
225
|
const setOrDelCell = (store, tableId, rowId, cellId, cell) =>
|
|
201
226
|
isUndefined(cell)
|
|
202
227
|
? store.delCell(tableId, rowId, cellId, true)
|
|
@@ -1093,7 +1118,6 @@ const createMetrics = getCreateFunction((store) => {
|
|
|
1093
1118
|
|
|
1094
1119
|
const scheduleRunning = mapNew();
|
|
1095
1120
|
const scheduleActions = mapNew();
|
|
1096
|
-
const isMergeable = (contentOrChanges) => isString(contentOrChanges?.[0]);
|
|
1097
1121
|
const getStoreFunctions = (supportsMergeableStore, store) =>
|
|
1098
1122
|
!supportsMergeableStore || isUndefined(store.getMergeableContent)
|
|
1099
1123
|
? [
|
|
@@ -1118,16 +1142,15 @@ const createCustomPersister = (
|
|
|
1118
1142
|
delPersisterListener,
|
|
1119
1143
|
onIgnoredError,
|
|
1120
1144
|
supportsMergeableStore,
|
|
1121
|
-
|
|
1145
|
+
extra = {},
|
|
1122
1146
|
scheduleId = [],
|
|
1123
1147
|
) => {
|
|
1124
|
-
let listenerId;
|
|
1125
1148
|
let loadSave = 0;
|
|
1126
1149
|
let loads = 0;
|
|
1127
1150
|
let saves = 0;
|
|
1128
|
-
let listening = 0;
|
|
1129
1151
|
let action;
|
|
1130
|
-
let
|
|
1152
|
+
let autoLoadHandle;
|
|
1153
|
+
let autoSaveListenerId;
|
|
1131
1154
|
mapEnsure(scheduleRunning, scheduleId, () => 0);
|
|
1132
1155
|
mapEnsure(scheduleActions, scheduleId, () => []);
|
|
1133
1156
|
const [isMergeableStore, getContent, getChanges, hasChanges] =
|
|
@@ -1163,55 +1186,51 @@ const createCustomPersister = (
|
|
|
1163
1186
|
}
|
|
1164
1187
|
return persister;
|
|
1165
1188
|
};
|
|
1189
|
+
const setContentOrChanges = (contentOrChanges) => {
|
|
1190
|
+
(isMergeableStore && isString(contentOrChanges?.[0])
|
|
1191
|
+
? contentOrChanges?.[1][2] === 1
|
|
1192
|
+
? store.applyMergeableChanges
|
|
1193
|
+
: store.setMergeableContent
|
|
1194
|
+
: contentOrChanges?.[2] === 1
|
|
1195
|
+
? store.applyChanges
|
|
1196
|
+
: store.setContent)(contentOrChanges);
|
|
1197
|
+
};
|
|
1166
1198
|
const persister = {
|
|
1167
1199
|
load: async (initialTables, initialValues) =>
|
|
1168
1200
|
await loadLock(async () => {
|
|
1169
1201
|
try {
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
: store.setContent)(content);
|
|
1174
|
-
} catch {
|
|
1202
|
+
setContentOrChanges(await getPersisted());
|
|
1203
|
+
} catch (error) {
|
|
1204
|
+
onIgnoredError?.(error);
|
|
1175
1205
|
store.setContent([initialTables, initialValues]);
|
|
1176
1206
|
}
|
|
1177
1207
|
}),
|
|
1178
1208
|
startAutoLoad: async (initialTables = {}, initialValues = {}) => {
|
|
1179
|
-
persister.stopAutoLoad();
|
|
1180
|
-
|
|
1181
|
-
listening = 1;
|
|
1182
|
-
listeningHandle = addPersisterListener(
|
|
1209
|
+
await persister.stopAutoLoad().load(initialTables, initialValues);
|
|
1210
|
+
autoLoadHandle = addPersisterListener(
|
|
1183
1211
|
async (getContent2, getChanges2) => {
|
|
1184
|
-
|
|
1185
|
-
|
|
1186
|
-
|
|
1187
|
-
(
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
)
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
const content = getContent2?.() ?? (await getPersisted());
|
|
1195
|
-
(isMergeableStore && isMergeable(content)
|
|
1196
|
-
? store.setMergeableContent
|
|
1197
|
-
: store.setContent)(content);
|
|
1198
|
-
} catch (error) {
|
|
1199
|
-
onIgnoredError?.(error);
|
|
1200
|
-
}
|
|
1201
|
-
});
|
|
1202
|
-
}
|
|
1212
|
+
const changes = getChanges2?.();
|
|
1213
|
+
await loadLock(async () => {
|
|
1214
|
+
try {
|
|
1215
|
+
setContentOrChanges(
|
|
1216
|
+
changes ?? getContent2?.() ?? (await getPersisted()),
|
|
1217
|
+
);
|
|
1218
|
+
} catch (error) {
|
|
1219
|
+
onIgnoredError?.(error);
|
|
1220
|
+
}
|
|
1221
|
+
});
|
|
1203
1222
|
},
|
|
1204
1223
|
);
|
|
1205
1224
|
return persister;
|
|
1206
1225
|
},
|
|
1207
1226
|
stopAutoLoad: () => {
|
|
1208
|
-
if (
|
|
1209
|
-
delPersisterListener(
|
|
1210
|
-
|
|
1211
|
-
listening = 0;
|
|
1227
|
+
if (autoLoadHandle) {
|
|
1228
|
+
delPersisterListener(autoLoadHandle);
|
|
1229
|
+
autoLoadHandle = void 0;
|
|
1212
1230
|
}
|
|
1213
1231
|
return persister;
|
|
1214
1232
|
},
|
|
1233
|
+
isAutoLoading: () => !isUndefined(autoLoadHandle),
|
|
1215
1234
|
save: async (getChanges2) => {
|
|
1216
1235
|
/* istanbul ignore else */
|
|
1217
1236
|
if (loadSave != 1) {
|
|
@@ -1233,7 +1252,7 @@ const createCustomPersister = (
|
|
|
1233
1252
|
},
|
|
1234
1253
|
startAutoSave: async () => {
|
|
1235
1254
|
await persister.stopAutoSave().save();
|
|
1236
|
-
|
|
1255
|
+
autoSaveListenerId = store.addDidFinishTransactionListener(() => {
|
|
1237
1256
|
const changes = getChanges();
|
|
1238
1257
|
if (hasChanges(changes)) {
|
|
1239
1258
|
persister.save(() => changes);
|
|
@@ -1242,10 +1261,11 @@ const createCustomPersister = (
|
|
|
1242
1261
|
return persister;
|
|
1243
1262
|
},
|
|
1244
1263
|
stopAutoSave: () => {
|
|
1245
|
-
ifNotUndefined(
|
|
1246
|
-
|
|
1264
|
+
ifNotUndefined(autoSaveListenerId, store.delListener);
|
|
1265
|
+
autoSaveListenerId = void 0;
|
|
1247
1266
|
return persister;
|
|
1248
1267
|
},
|
|
1268
|
+
isAutoSaving: () => !isUndefined(autoSaveListenerId),
|
|
1249
1269
|
schedule: async (...actions) => {
|
|
1250
1270
|
arrayPush(mapGet(scheduleActions, scheduleId), ...actions);
|
|
1251
1271
|
await run();
|
|
@@ -1254,10 +1274,8 @@ const createCustomPersister = (
|
|
|
1254
1274
|
getStore: () => store,
|
|
1255
1275
|
destroy: () => persister.stopAutoLoad().stopAutoSave(),
|
|
1256
1276
|
getStats: () => ({loads, saves}),
|
|
1277
|
+
...extra,
|
|
1257
1278
|
};
|
|
1258
|
-
if (getThing) {
|
|
1259
|
-
persister[getThing] = () => thing;
|
|
1260
|
-
}
|
|
1261
1279
|
return objFreeze(persister);
|
|
1262
1280
|
};
|
|
1263
1281
|
|
|
@@ -1920,25 +1938,29 @@ const getHash = (value) => {
|
|
|
1920
1938
|
return hash >>> 0;
|
|
1921
1939
|
};
|
|
1922
1940
|
|
|
1923
|
-
const
|
|
1924
|
-
const
|
|
1941
|
+
const stampCloneWithHash = ([time, value, hash]) => [time, value, hash];
|
|
1942
|
+
const stampClone = ([time, value]) => [time, value];
|
|
1943
|
+
const getStampHash = (stamp) => stamp[2];
|
|
1925
1944
|
const hashIdAndHash = (id, hash) => getHash(id + ':' + hash);
|
|
1926
|
-
const
|
|
1927
|
-
|
|
1928
|
-
if (time >
|
|
1929
|
-
|
|
1945
|
+
const stampUpdate = (stamp, hash, time) => {
|
|
1946
|
+
stamp[2] = hash >>> 0;
|
|
1947
|
+
if (time > stamp[0]) {
|
|
1948
|
+
stamp[0] = time;
|
|
1930
1949
|
}
|
|
1931
1950
|
};
|
|
1932
|
-
const stampNewObj = (time) =>
|
|
1933
|
-
const
|
|
1934
|
-
const
|
|
1935
|
-
|
|
1936
|
-
|
|
1937
|
-
|
|
1938
|
-
|
|
1939
|
-
|
|
1940
|
-
|
|
1941
|
-
|
|
1951
|
+
const stampNewObj = (time) => [time, objNew()];
|
|
1952
|
+
const stampNewMap = (time = EMPTY_STRING) => [time, mapNew(), 0];
|
|
1953
|
+
const stampMapToObjWithHash = (
|
|
1954
|
+
[time, map, hash],
|
|
1955
|
+
mapper = stampCloneWithHash,
|
|
1956
|
+
) => [time, mapToObj(map, mapper), hash];
|
|
1957
|
+
const stampValidate = (stamp, validateThing) =>
|
|
1958
|
+
isArray(stamp) &&
|
|
1959
|
+
size(stamp) == 3 &&
|
|
1960
|
+
isString(stamp[0]) &&
|
|
1961
|
+
validateThing(stamp[1]) &&
|
|
1962
|
+
getTypeOf(stamp[2]) == NUMBER &&
|
|
1963
|
+
isFiniteNumber(stamp[2]);
|
|
1942
1964
|
|
|
1943
1965
|
const pairNew = (value) => [value, value];
|
|
1944
1966
|
const pairCollSize2 = (pair, func = collSize2) => func(pair[0]) + func(pair[1]);
|
|
@@ -1952,18 +1974,6 @@ const jsonString = (obj) =>
|
|
|
1952
1974
|
);
|
|
1953
1975
|
const jsonParse = JSON.parse;
|
|
1954
1976
|
|
|
1955
|
-
const validate = (obj, validateChild, onInvalidObj) => {
|
|
1956
|
-
if (isUndefined(obj) || !isObject(obj) || objIsEmpty(obj) || objFrozen(obj)) {
|
|
1957
|
-
onInvalidObj?.();
|
|
1958
|
-
return false;
|
|
1959
|
-
}
|
|
1960
|
-
objToArray(obj, (child, id2) => {
|
|
1961
|
-
if (!validateChild(child, id2)) {
|
|
1962
|
-
objDel(obj, id2);
|
|
1963
|
-
}
|
|
1964
|
-
});
|
|
1965
|
-
return !objIsEmpty(obj);
|
|
1966
|
-
};
|
|
1967
1977
|
const idsChanged = (changedIds, id2, addedOrRemoved) =>
|
|
1968
1978
|
mapSet(
|
|
1969
1979
|
changedIds,
|
|
@@ -2023,13 +2033,13 @@ const createStore = () => {
|
|
|
2023
2033
|
const [addListener, callListeners, delListenerImpl, callListenerImpl] =
|
|
2024
2034
|
getListenerFunctions(() => store);
|
|
2025
2035
|
const validateTablesSchema = (tableSchema) =>
|
|
2026
|
-
|
|
2027
|
-
|
|
2036
|
+
objValidate(tableSchema, (tableSchema2) =>
|
|
2037
|
+
objValidate(tableSchema2, validateCellOrValueSchema),
|
|
2028
2038
|
);
|
|
2029
2039
|
const validateValuesSchema = (valuesSchema) =>
|
|
2030
|
-
|
|
2040
|
+
objValidate(valuesSchema, validateCellOrValueSchema);
|
|
2031
2041
|
const validateCellOrValueSchema = (schema) => {
|
|
2032
|
-
if (!
|
|
2042
|
+
if (!objValidate(schema, (_child, id2) => arrayHas([TYPE, DEFAULT], id2))) {
|
|
2033
2043
|
return false;
|
|
2034
2044
|
}
|
|
2035
2045
|
const type = schema[TYPE];
|
|
@@ -2042,18 +2052,18 @@ const createStore = () => {
|
|
|
2042
2052
|
return true;
|
|
2043
2053
|
};
|
|
2044
2054
|
const validateTables = (tables) =>
|
|
2045
|
-
|
|
2055
|
+
objValidate(tables, validateTable, cellInvalid);
|
|
2046
2056
|
const validateTable = (table, tableId) =>
|
|
2047
2057
|
(!hasTablesSchema ||
|
|
2048
2058
|
collHas(tablesSchemaMap, tableId) ||
|
|
2049
2059
|
cellInvalid(tableId)) &&
|
|
2050
|
-
|
|
2060
|
+
objValidate(
|
|
2051
2061
|
table,
|
|
2052
2062
|
(row, rowId) => validateRow(tableId, rowId, row),
|
|
2053
2063
|
() => cellInvalid(tableId),
|
|
2054
2064
|
);
|
|
2055
2065
|
const validateRow = (tableId, rowId, row, skipDefaults) =>
|
|
2056
|
-
|
|
2066
|
+
objValidate(
|
|
2057
2067
|
skipDefaults ? row : addDefaultsToRow(row, tableId, rowId),
|
|
2058
2068
|
(cell, cellId) =>
|
|
2059
2069
|
ifNotUndefined(
|
|
@@ -2080,7 +2090,7 @@ const createStore = () => {
|
|
|
2080
2090
|
? cellInvalid(tableId, rowId, cellId, cell)
|
|
2081
2091
|
: cell;
|
|
2082
2092
|
const validateValues = (values, skipDefaults) =>
|
|
2083
|
-
|
|
2093
|
+
objValidate(
|
|
2084
2094
|
skipDefaults ? values : addDefaultsToValues(values),
|
|
2085
2095
|
(value, valueId) =>
|
|
2086
2096
|
ifNotUndefined(
|
|
@@ -2923,17 +2933,20 @@ const createStore = () => {
|
|
|
2923
2933
|
: mapToObj(
|
|
2924
2934
|
row,
|
|
2925
2935
|
([, newCell]) => newCell,
|
|
2926
|
-
(
|
|
2936
|
+
(changedCell) => pairIsEqual(changedCell),
|
|
2927
2937
|
),
|
|
2938
|
+
collIsEmpty,
|
|
2928
2939
|
objIsEmpty,
|
|
2929
2940
|
),
|
|
2941
|
+
collIsEmpty,
|
|
2930
2942
|
objIsEmpty,
|
|
2931
2943
|
),
|
|
2932
2944
|
mapToObj(
|
|
2933
2945
|
changedValues,
|
|
2934
2946
|
([, newValue]) => newValue,
|
|
2935
|
-
(
|
|
2947
|
+
(changedValue) => pairIsEqual(changedValue),
|
|
2936
2948
|
),
|
|
2949
|
+
1,
|
|
2937
2950
|
];
|
|
2938
2951
|
const getTransactionLog = () => [
|
|
2939
2952
|
!collIsEmpty(changedCells),
|
|
@@ -3320,10 +3333,13 @@ const getHlcFunctions = (uniqueId) => {
|
|
|
3320
3333
|
};
|
|
3321
3334
|
const seenHlc = (hlc) => {
|
|
3322
3335
|
const previousLogicalTime = logicalTime;
|
|
3323
|
-
const [remoteLogicalTime, remoteCounter] =
|
|
3324
|
-
? [0, 0]
|
|
3325
|
-
|
|
3326
|
-
|
|
3336
|
+
const [remoteLogicalTime, remoteCounter] =
|
|
3337
|
+
isUndefined(hlc) || hlc == '' ? [0, 0] : decodeHlc(hlc);
|
|
3338
|
+
logicalTime = mathMax(
|
|
3339
|
+
previousLogicalTime,
|
|
3340
|
+
remoteLogicalTime,
|
|
3341
|
+
globalThis.HLC_TIME ?? Date.now(),
|
|
3342
|
+
);
|
|
3327
3343
|
lastCounter =
|
|
3328
3344
|
logicalTime == previousLogicalTime
|
|
3329
3345
|
? logicalTime == remoteLogicalTime
|
|
@@ -3354,14 +3370,54 @@ const LISTENER_ARGS = {
|
|
|
3354
3370
|
InvalidCell: 3,
|
|
3355
3371
|
InvalidValue: 1,
|
|
3356
3372
|
};
|
|
3357
|
-
const
|
|
3373
|
+
const newContentStampMap = (time = EMPTY_STRING) => [
|
|
3358
3374
|
time,
|
|
3359
|
-
[
|
|
3375
|
+
[stampNewMap(time), stampNewMap(time)],
|
|
3360
3376
|
0,
|
|
3361
3377
|
];
|
|
3378
|
+
const validateMergeableContent = (mergeableContent) =>
|
|
3379
|
+
stampValidate(
|
|
3380
|
+
mergeableContent,
|
|
3381
|
+
(content) =>
|
|
3382
|
+
isArray(content) &&
|
|
3383
|
+
size(content) == 2 &&
|
|
3384
|
+
stampValidate(content[0], (tableStamps) =>
|
|
3385
|
+
objValidate(
|
|
3386
|
+
tableStamps,
|
|
3387
|
+
(tableStamp) =>
|
|
3388
|
+
stampValidate(tableStamp, (rowStamps) =>
|
|
3389
|
+
objValidate(
|
|
3390
|
+
rowStamps,
|
|
3391
|
+
(rowStamp) =>
|
|
3392
|
+
stampValidate(rowStamp, (cellStamps) =>
|
|
3393
|
+
objValidate(
|
|
3394
|
+
cellStamps,
|
|
3395
|
+
(cellStamp) =>
|
|
3396
|
+
stampValidate(cellStamp, isCellOrValueOrNull),
|
|
3397
|
+
void 0,
|
|
3398
|
+
1,
|
|
3399
|
+
),
|
|
3400
|
+
),
|
|
3401
|
+
void 0,
|
|
3402
|
+
1,
|
|
3403
|
+
),
|
|
3404
|
+
),
|
|
3405
|
+
void 0,
|
|
3406
|
+
1,
|
|
3407
|
+
),
|
|
3408
|
+
) &&
|
|
3409
|
+
stampValidate(content[1], (values) =>
|
|
3410
|
+
objValidate(
|
|
3411
|
+
values,
|
|
3412
|
+
(value) => stampValidate(value, isCellOrValueOrNull),
|
|
3413
|
+
void 0,
|
|
3414
|
+
1,
|
|
3415
|
+
),
|
|
3416
|
+
),
|
|
3417
|
+
);
|
|
3362
3418
|
const createMergeableStore = (id) => {
|
|
3363
3419
|
let listening = 1;
|
|
3364
|
-
let
|
|
3420
|
+
let contentStampMap = newContentStampMap();
|
|
3365
3421
|
let transactionTime;
|
|
3366
3422
|
let transactionMergeableChanges;
|
|
3367
3423
|
const [getHlc, seenHlc] = getHlcFunctions(id);
|
|
@@ -3371,6 +3427,7 @@ const createMergeableStore = (id) => {
|
|
|
3371
3427
|
listening = 0;
|
|
3372
3428
|
actions();
|
|
3373
3429
|
listening = wasListening;
|
|
3430
|
+
return mergeableStore;
|
|
3374
3431
|
};
|
|
3375
3432
|
const mergeContentOrChanges = (contentOrChanges, hasHashes = 0) => {
|
|
3376
3433
|
const tablesChanges = {};
|
|
@@ -3380,8 +3437,8 @@ const createMergeableStore = (id) => {
|
|
|
3380
3437
|
[[tablesTime, tablesObj, incomingTablesHash], values],
|
|
3381
3438
|
incomingContentOrChangesHash,
|
|
3382
3439
|
] = contentOrChanges;
|
|
3383
|
-
const [, [
|
|
3384
|
-
const [oldTablesTime,
|
|
3440
|
+
const [, [tablesStampMap, valuesStampMap]] = contentStampMap;
|
|
3441
|
+
const [oldTablesTime, tableStampMaps, oldTablesHash] = tablesStampMap;
|
|
3385
3442
|
if (tablesTime) {
|
|
3386
3443
|
let tablesHash = hasHashes
|
|
3387
3444
|
? incomingTablesHash
|
|
@@ -3392,8 +3449,8 @@ const createMergeableStore = (id) => {
|
|
|
3392
3449
|
objForEach(
|
|
3393
3450
|
tablesObj,
|
|
3394
3451
|
([tableTime, rowsObj, incomingTableHash], tableId) => {
|
|
3395
|
-
const
|
|
3396
|
-
const [oldTableTime,
|
|
3452
|
+
const tableStampMap = mapEnsure(tableStampMaps, tableId, stampNewMap);
|
|
3453
|
+
const [oldTableTime, rowStampMaps, oldTableHash] = tableStampMap;
|
|
3397
3454
|
let tableHash = hasHashes
|
|
3398
3455
|
? incomingTableHash
|
|
3399
3456
|
: oldTableHash ^
|
|
@@ -3404,7 +3461,7 @@ const createMergeableStore = (id) => {
|
|
|
3404
3461
|
objForEach(rowsObj, (row, rowId) => {
|
|
3405
3462
|
const [oldRowHash, rowHash] = mergeCellsOrValues(
|
|
3406
3463
|
row,
|
|
3407
|
-
mapEnsure(
|
|
3464
|
+
mapEnsure(rowStampMaps, rowId, stampNewMap),
|
|
3408
3465
|
objEnsure(
|
|
3409
3466
|
objEnsure(tablesChanges, tableId, objNew),
|
|
3410
3467
|
rowId,
|
|
@@ -3417,26 +3474,33 @@ const createMergeableStore = (id) => {
|
|
|
3417
3474
|
: (oldRowHash ? hashIdAndHash(rowId, oldRowHash) : 0) ^
|
|
3418
3475
|
hashIdAndHash(rowId, rowHash);
|
|
3419
3476
|
});
|
|
3420
|
-
|
|
3477
|
+
stampUpdate(tableStampMap, tableHash, tableTime);
|
|
3421
3478
|
tablesHash ^= hasHashes
|
|
3422
3479
|
? 0
|
|
3423
3480
|
: (oldTableHash ? hashIdAndHash(tableId, oldTableHash) : 0) ^
|
|
3424
|
-
hashIdAndHash(tableId,
|
|
3481
|
+
hashIdAndHash(tableId, tableStampMap[2]);
|
|
3425
3482
|
},
|
|
3426
3483
|
);
|
|
3427
|
-
|
|
3484
|
+
stampUpdate(tablesStampMap, tablesHash, tablesTime);
|
|
3428
3485
|
}
|
|
3429
|
-
mergeCellsOrValues(values,
|
|
3430
|
-
|
|
3431
|
-
|
|
3432
|
-
hasHashes
|
|
3486
|
+
mergeCellsOrValues(values, valuesStampMap, valuesChanges, hasHashes);
|
|
3487
|
+
stampUpdate(
|
|
3488
|
+
contentStampMap,
|
|
3489
|
+
hasHashes
|
|
3490
|
+
? incomingContentOrChangesHash
|
|
3491
|
+
: tablesStampMap[2] ^ valuesStampMap[2],
|
|
3433
3492
|
contentOrChangesTime,
|
|
3434
3493
|
);
|
|
3435
|
-
return [tablesChanges, valuesChanges];
|
|
3494
|
+
return [tablesChanges, valuesChanges, 1];
|
|
3436
3495
|
};
|
|
3437
|
-
const mergeCellsOrValues = (
|
|
3496
|
+
const mergeCellsOrValues = (
|
|
3497
|
+
things,
|
|
3498
|
+
thingsStampMap,
|
|
3499
|
+
thingsChanges,
|
|
3500
|
+
hasHashes,
|
|
3501
|
+
) => {
|
|
3438
3502
|
const [thingsTime, thingsObj, incomingThingsHash] = things;
|
|
3439
|
-
const [oldThingsTime,
|
|
3503
|
+
const [oldThingsTime, thingStampMaps, oldThingsHash] = thingsStampMap;
|
|
3440
3504
|
if (thingsTime) {
|
|
3441
3505
|
let thingsHash = hasHashes
|
|
3442
3506
|
? incomingThingsHash
|
|
@@ -3447,28 +3511,32 @@ const createMergeableStore = (id) => {
|
|
|
3447
3511
|
objForEach(
|
|
3448
3512
|
thingsObj,
|
|
3449
3513
|
([thingTime, thing, incomingThingHash], thingId) => {
|
|
3450
|
-
const
|
|
3451
|
-
|
|
3514
|
+
const thingStampMap = mapEnsure(thingStampMaps, thingId, () => [
|
|
3515
|
+
EMPTY_STRING,
|
|
3516
|
+
void 0,
|
|
3517
|
+
0,
|
|
3518
|
+
]);
|
|
3519
|
+
const [oldThingTime, , oldThingHash] = thingStampMap;
|
|
3452
3520
|
if (thingTime > oldThingTime) {
|
|
3453
|
-
|
|
3454
|
-
|
|
3521
|
+
stampUpdate(
|
|
3522
|
+
thingStampMap,
|
|
3455
3523
|
hasHashes
|
|
3456
3524
|
? incomingThingHash
|
|
3457
3525
|
: getHash(jsonString(thing ?? null) + ':' + thingTime),
|
|
3458
3526
|
thingTime,
|
|
3459
3527
|
);
|
|
3460
|
-
|
|
3528
|
+
thingStampMap[1] = thing;
|
|
3461
3529
|
thingsChanges[thingId] = thing;
|
|
3462
3530
|
thingsHash ^= hasHashes
|
|
3463
3531
|
? 0
|
|
3464
3532
|
: hashIdAndHash(thingId, oldThingHash) ^
|
|
3465
|
-
hashIdAndHash(thingId,
|
|
3533
|
+
hashIdAndHash(thingId, thingStampMap[2]);
|
|
3466
3534
|
}
|
|
3467
3535
|
},
|
|
3468
3536
|
);
|
|
3469
|
-
|
|
3537
|
+
stampUpdate(thingsStampMap, thingsHash, thingsTime);
|
|
3470
3538
|
}
|
|
3471
|
-
return [oldThingsHash,
|
|
3539
|
+
return [oldThingsHash, thingsStampMap[2]];
|
|
3472
3540
|
};
|
|
3473
3541
|
const preFinishTransaction = () => {
|
|
3474
3542
|
if (listening) {
|
|
@@ -3478,26 +3546,118 @@ const createMergeableStore = (id) => {
|
|
|
3478
3546
|
};
|
|
3479
3547
|
const postFinishTransaction = () =>
|
|
3480
3548
|
(transactionTime = transactionMergeableChanges = void 0);
|
|
3481
|
-
const
|
|
3482
|
-
|
|
3483
|
-
|
|
3484
|
-
|
|
3549
|
+
const getId = () => id;
|
|
3550
|
+
const getMergeableContent = () => [
|
|
3551
|
+
contentStampMap[0],
|
|
3552
|
+
[
|
|
3553
|
+
stampMapToObjWithHash(contentStampMap[1][0], (tableStampMap) =>
|
|
3554
|
+
stampMapToObjWithHash(tableStampMap, (rowStampMap) =>
|
|
3555
|
+
stampMapToObjWithHash(rowStampMap),
|
|
3556
|
+
),
|
|
3485
3557
|
),
|
|
3486
|
-
|
|
3487
|
-
]
|
|
3488
|
-
|
|
3489
|
-
|
|
3490
|
-
|
|
3491
|
-
|
|
3492
|
-
|
|
3493
|
-
|
|
3558
|
+
stampMapToObjWithHash(contentStampMap[1][1]),
|
|
3559
|
+
],
|
|
3560
|
+
contentStampMap[2],
|
|
3561
|
+
];
|
|
3562
|
+
const getMergeableContentHashes = () => [
|
|
3563
|
+
contentStampMap[0],
|
|
3564
|
+
[contentStampMap[1][0][2], contentStampMap[1][1][2]],
|
|
3565
|
+
];
|
|
3566
|
+
const getMergeableTableHashes = () =>
|
|
3567
|
+
mapToObj(contentStampMap[1][0][1], getStampHash);
|
|
3568
|
+
const getMergeableTableIdsDiff = (relativeTo) => {
|
|
3569
|
+
const tableIds = [];
|
|
3570
|
+
mapForEach(contentStampMap[1][0][1], (tableId, [, , hash]) => {
|
|
3571
|
+
if (hash !== relativeTo?.[tableId]) {
|
|
3572
|
+
arrayPush(tableIds, tableId);
|
|
3573
|
+
}
|
|
3574
|
+
});
|
|
3575
|
+
return tableIds;
|
|
3576
|
+
};
|
|
3577
|
+
const getMergeableRowHashes = (tablesDelta) =>
|
|
3578
|
+
objNew(
|
|
3579
|
+
arrayMap(tablesDelta, (tableId) => [
|
|
3580
|
+
tableId,
|
|
3581
|
+
mapToObj(mapGet(contentStampMap[1][0][1], tableId)?.[1], getStampHash),
|
|
3582
|
+
]),
|
|
3494
3583
|
);
|
|
3495
|
-
|
|
3496
|
-
|
|
3497
|
-
|
|
3584
|
+
const getMergeableRowIdsDiff = (relativeTo) =>
|
|
3585
|
+
objMap(relativeTo, (rowHashes, tableId) => {
|
|
3586
|
+
const rowIds = [];
|
|
3587
|
+
mapForEach(
|
|
3588
|
+
mapGet(contentStampMap[1][0][1], tableId)?.[1],
|
|
3589
|
+
(rowId, [, , hash]) => {
|
|
3590
|
+
if (hash !== rowHashes?.[rowId]) {
|
|
3591
|
+
arrayPush(rowIds, rowId);
|
|
3592
|
+
}
|
|
3593
|
+
},
|
|
3594
|
+
);
|
|
3595
|
+
return rowIds;
|
|
3596
|
+
});
|
|
3597
|
+
const getMergeableCellHashes = (tableDelta) =>
|
|
3598
|
+
objMap(tableDelta, (rowIds, tableId) =>
|
|
3599
|
+
objNew(
|
|
3600
|
+
arrayMap(rowIds, (rowId) => [
|
|
3601
|
+
rowId,
|
|
3602
|
+
mapToObj(
|
|
3603
|
+
mapGet(mapGet(contentStampMap[1][0][1], tableId)?.[1], rowId)?.[1],
|
|
3604
|
+
getStampHash,
|
|
3605
|
+
),
|
|
3606
|
+
]),
|
|
3607
|
+
),
|
|
3498
3608
|
);
|
|
3499
|
-
|
|
3609
|
+
const getMergeableTablesChanges = (relativeTo) => {
|
|
3610
|
+
const [, [[tablesTime, tableStampMaps]]] = contentStampMap;
|
|
3611
|
+
const tables = {};
|
|
3612
|
+
objForEach(relativeTo, (rowCellHashes, tableId) =>
|
|
3613
|
+
ifNotUndefined(
|
|
3614
|
+
mapGet(tableStampMaps, tableId),
|
|
3615
|
+
([tableTime, rowStampMaps]) => {
|
|
3616
|
+
const table = {};
|
|
3617
|
+
objForEach(rowCellHashes, (cellHashes, rowId) =>
|
|
3618
|
+
ifNotUndefined(
|
|
3619
|
+
mapGet(rowStampMaps, rowId),
|
|
3620
|
+
([rowTime, cellStampMaps]) => {
|
|
3621
|
+
const row = mapToObj(
|
|
3622
|
+
cellStampMaps,
|
|
3623
|
+
stampClone,
|
|
3624
|
+
([, , hash], cellId) => hash == cellHashes?.[cellId],
|
|
3625
|
+
);
|
|
3626
|
+
if (!objIsEmpty(row)) {
|
|
3627
|
+
table[rowId] = [rowTime, row];
|
|
3628
|
+
}
|
|
3629
|
+
},
|
|
3630
|
+
),
|
|
3631
|
+
);
|
|
3632
|
+
if (!objIsEmpty(table)) {
|
|
3633
|
+
tables[tableId] = [tableTime, table];
|
|
3634
|
+
}
|
|
3635
|
+
},
|
|
3636
|
+
),
|
|
3637
|
+
);
|
|
3638
|
+
return [tablesTime, tables];
|
|
3500
3639
|
};
|
|
3640
|
+
const getMergeableValuesHashes = () =>
|
|
3641
|
+
mapToObj(contentStampMap[1][1][1], getStampHash);
|
|
3642
|
+
const getMergeableValuesChanges = (relativeTo) => [
|
|
3643
|
+
contentStampMap[1][1][0],
|
|
3644
|
+
mapToObj(
|
|
3645
|
+
contentStampMap[1][1][1],
|
|
3646
|
+
stampClone,
|
|
3647
|
+
([, , hash], valueId) => hash == relativeTo?.[valueId],
|
|
3648
|
+
),
|
|
3649
|
+
];
|
|
3650
|
+
const setMergeableContent = (mergeableContent) =>
|
|
3651
|
+
disableListening(() =>
|
|
3652
|
+
validateMergeableContent(mergeableContent)
|
|
3653
|
+
? store.transaction(() => {
|
|
3654
|
+
store.delTables().delValues();
|
|
3655
|
+
contentStampMap = newContentStampMap();
|
|
3656
|
+
seenHlc(mergeableContent[0]);
|
|
3657
|
+
store.applyChanges(mergeContentOrChanges(mergeableContent, 1));
|
|
3658
|
+
})
|
|
3659
|
+
: 0,
|
|
3660
|
+
);
|
|
3501
3661
|
const getTransactionMergeableChanges = () => {
|
|
3502
3662
|
if (isUndefined(transactionMergeableChanges)) {
|
|
3503
3663
|
const [, , changedCells, , changedValues] = store.getTransactionLog();
|
|
@@ -3505,10 +3665,14 @@ const createMergeableStore = (id) => {
|
|
|
3505
3665
|
!objIsEmpty(changedCells) || !objIsEmpty(changedValues)
|
|
3506
3666
|
? transactionTime ?? (transactionTime = getHlc())
|
|
3507
3667
|
: EMPTY_STRING;
|
|
3508
|
-
const mergeableChanges =
|
|
3509
|
-
|
|
3510
|
-
|
|
3511
|
-
|
|
3668
|
+
const mergeableChanges = [
|
|
3669
|
+
time,
|
|
3670
|
+
[
|
|
3671
|
+
stampNewObj(objIsEmpty(changedCells) ? EMPTY_STRING : time),
|
|
3672
|
+
stampNewObj(objIsEmpty(changedValues) ? EMPTY_STRING : time),
|
|
3673
|
+
1,
|
|
3674
|
+
],
|
|
3675
|
+
];
|
|
3512
3676
|
const [[, tablesObj], [, valuesObj]] = mergeableChanges[1];
|
|
3513
3677
|
objToArray(changedCells, (changedTable, tableId) => {
|
|
3514
3678
|
const [, rowsObj] = (tablesObj[tableId] = stampNewObj(time));
|
|
@@ -3516,60 +3680,45 @@ const createMergeableStore = (id) => {
|
|
|
3516
3680
|
const [, cellsObj] = (rowsObj[rowId] = stampNewObj(time));
|
|
3517
3681
|
objToArray(
|
|
3518
3682
|
changedRow,
|
|
3519
|
-
([, newCell], cellId) =>
|
|
3520
|
-
(cellsObj[cellId] = stampNew(time, newCell)),
|
|
3683
|
+
([, newCell], cellId) => (cellsObj[cellId] = [time, newCell]),
|
|
3521
3684
|
);
|
|
3522
3685
|
});
|
|
3523
3686
|
});
|
|
3524
3687
|
objToArray(
|
|
3525
3688
|
changedValues,
|
|
3526
|
-
([, newValue], valueId) =>
|
|
3527
|
-
(valuesObj[valueId] = stampNew(time, newValue)),
|
|
3689
|
+
([, newValue], valueId) => (valuesObj[valueId] = [time, newValue]),
|
|
3528
3690
|
);
|
|
3529
3691
|
return mergeableChanges;
|
|
3530
3692
|
}
|
|
3531
3693
|
return transactionMergeableChanges;
|
|
3532
3694
|
};
|
|
3533
|
-
const applyMergeableChanges = (mergeableChanges) =>
|
|
3534
|
-
|
|
3535
|
-
|
|
3536
|
-
store.applyChanges(mergeContentOrChanges(mergeableChanges))
|
|
3537
|
-
);
|
|
3538
|
-
return mergeableStore;
|
|
3539
|
-
};
|
|
3695
|
+
const applyMergeableChanges = (mergeableChanges) =>
|
|
3696
|
+
disableListening(() => {
|
|
3697
|
+
seenHlc(mergeableChanges[0]);
|
|
3698
|
+
store.applyChanges(mergeContentOrChanges(mergeableChanges));
|
|
3699
|
+
});
|
|
3540
3700
|
const merge = (mergeableStore2) => {
|
|
3541
3701
|
const mergeableChanges = getMergeableContent();
|
|
3542
3702
|
const mergeableChanges2 = mergeableStore2.getMergeableContent();
|
|
3543
3703
|
mergeableStore2.applyMergeableChanges(mergeableChanges);
|
|
3544
3704
|
return applyMergeableChanges(mergeableChanges2);
|
|
3545
3705
|
};
|
|
3546
|
-
const getContentHash = () => contentHsm[2];
|
|
3547
|
-
const getTablesHash = () => contentHsm[1][0][2];
|
|
3548
|
-
const getTableHash = (tableId) =>
|
|
3549
|
-
mapGet(contentHsm[1][0][1], tableId)?.[2] ?? 0;
|
|
3550
|
-
const getRowHash = (tableId, rowId) =>
|
|
3551
|
-
mapGet(mapGet(contentHsm[1][0][1], tableId)?.[1], rowId)?.[2] ?? 0;
|
|
3552
|
-
const getCellHash = (tableId, rowId, cellId) =>
|
|
3553
|
-
mapGet(
|
|
3554
|
-
mapGet(mapGet(contentHsm[1][0][1], tableId)?.[1], rowId)?.[1],
|
|
3555
|
-
cellId,
|
|
3556
|
-
)?.[2] ?? 0;
|
|
3557
|
-
const getValuesHash = () => contentHsm[1][1][2];
|
|
3558
|
-
const getValueHash = (valueId) =>
|
|
3559
|
-
mapGet(contentHsm[1][1][1], valueId)?.[2] ?? 0;
|
|
3560
3706
|
const mergeableStore = {
|
|
3707
|
+
getId,
|
|
3561
3708
|
getMergeableContent,
|
|
3709
|
+
getMergeableContentHashes,
|
|
3710
|
+
getMergeableTableHashes,
|
|
3711
|
+
getMergeableTableIdsDiff,
|
|
3712
|
+
getMergeableRowHashes,
|
|
3713
|
+
getMergeableRowIdsDiff,
|
|
3714
|
+
getMergeableCellHashes,
|
|
3715
|
+
getMergeableTablesChanges,
|
|
3716
|
+
getMergeableValuesHashes,
|
|
3717
|
+
getMergeableValuesChanges,
|
|
3562
3718
|
setMergeableContent,
|
|
3563
3719
|
getTransactionMergeableChanges,
|
|
3564
3720
|
applyMergeableChanges,
|
|
3565
3721
|
merge,
|
|
3566
|
-
getContentHash,
|
|
3567
|
-
getTablesHash,
|
|
3568
|
-
getTableHash,
|
|
3569
|
-
getRowHash,
|
|
3570
|
-
getCellHash,
|
|
3571
|
-
getValuesHash,
|
|
3572
|
-
getValueHash,
|
|
3573
3722
|
};
|
|
3574
3723
|
store.setInternalListeners(preFinishTransaction, postFinishTransaction);
|
|
3575
3724
|
objToArray(
|