tinybase 4.4.0-beta.0 → 4.4.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/checkpoints.js +1 -1
- package/lib/checkpoints.js.gz +0 -0
- package/lib/cjs/checkpoints.cjs +1 -1
- package/lib/cjs/checkpoints.cjs.gz +0 -0
- package/lib/cjs/indexes.cjs +1 -1
- package/lib/cjs/indexes.cjs.gz +0 -0
- package/lib/cjs/metrics.cjs +1 -1
- package/lib/cjs/metrics.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-automerge.cjs +1 -1
- package/lib/cjs/persisters/persister-automerge.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-browser.cjs +1 -1
- package/lib/cjs/persisters/persister-browser.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-cr-sqlite-wasm.cjs +1 -1
- package/lib/cjs/persisters/persister-cr-sqlite-wasm.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-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-partykit-client.cjs +1 -1
- package/lib/cjs/persisters/persister-partykit-client.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-partykit-server.cjs +1 -1
- package/lib/cjs/persisters/persister-partykit-server.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-remote.cjs +1 -1
- package/lib/cjs/persisters/persister-remote.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-sqlite-wasm.cjs +1 -1
- package/lib/cjs/persisters/persister-sqlite-wasm.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-sqlite3.cjs +1 -1
- package/lib/cjs/persisters/persister-sqlite3.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-yjs.cjs +1 -1
- package/lib/cjs/persisters/persister-yjs.cjs.gz +0 -0
- package/lib/cjs/persisters.cjs +1 -1
- package/lib/cjs/persisters.cjs.gz +0 -0
- package/lib/cjs/queries.cjs +1 -1
- package/lib/cjs/queries.cjs.gz +0 -0
- package/lib/cjs/relationships.cjs +1 -1
- package/lib/cjs/relationships.cjs.gz +0 -0
- package/lib/cjs/store.cjs +1 -1
- package/lib/cjs/store.cjs.gz +0 -0
- package/lib/cjs/tinybase.cjs +1 -1
- package/lib/cjs/tinybase.cjs.gz +0 -0
- package/lib/cjs/tools.cjs +1 -1
- package/lib/cjs/tools.cjs.gz +0 -0
- package/lib/cjs/ui-react-dom-debug.cjs +1 -1
- package/lib/cjs/ui-react-dom-debug.cjs.gz +0 -0
- package/lib/cjs/ui-react-dom.cjs +1 -1
- package/lib/cjs/ui-react-dom.cjs.gz +0 -0
- package/lib/cjs/ui-react.cjs +1 -1
- package/lib/cjs/ui-react.cjs.gz +0 -0
- package/lib/cjs-es6/checkpoints.cjs +1 -1
- package/lib/cjs-es6/checkpoints.cjs.gz +0 -0
- package/lib/cjs-es6/indexes.cjs +1 -1
- package/lib/cjs-es6/indexes.cjs.gz +0 -0
- package/lib/cjs-es6/metrics.cjs +1 -1
- package/lib/cjs-es6/metrics.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-automerge.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-automerge.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-browser.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-browser.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-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-partykit-client.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-partykit-client.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-partykit-server.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-partykit-server.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-remote.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-remote.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-sqlite3.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-sqlite3.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-yjs.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-yjs.cjs.gz +0 -0
- package/lib/cjs-es6/persisters.cjs +1 -1
- package/lib/cjs-es6/persisters.cjs.gz +0 -0
- package/lib/cjs-es6/queries.cjs +1 -1
- package/lib/cjs-es6/queries.cjs.gz +0 -0
- package/lib/cjs-es6/relationships.cjs +1 -1
- package/lib/cjs-es6/relationships.cjs.gz +0 -0
- package/lib/cjs-es6/store.cjs +1 -1
- package/lib/cjs-es6/store.cjs.gz +0 -0
- package/lib/cjs-es6/tinybase.cjs +1 -1
- package/lib/cjs-es6/tinybase.cjs.gz +0 -0
- package/lib/cjs-es6/tools.cjs +1 -1
- package/lib/cjs-es6/tools.cjs.gz +0 -0
- package/lib/cjs-es6/ui-react-dom-debug.cjs +1 -1
- package/lib/cjs-es6/ui-react-dom-debug.cjs.gz +0 -0
- package/lib/cjs-es6/ui-react-dom.cjs +1 -1
- package/lib/cjs-es6/ui-react-dom.cjs.gz +0 -0
- package/lib/cjs-es6/ui-react.cjs +1 -1
- package/lib/cjs-es6/ui-react.cjs.gz +0 -0
- package/lib/debug/checkpoints.js +12 -12
- package/lib/debug/indexes.js +9 -9
- package/lib/debug/metrics.js +9 -9
- package/lib/debug/persisters/persister-automerge.js +21 -8
- package/lib/debug/persisters/persister-browser.js +17 -3
- package/lib/debug/persisters/persister-cr-sqlite-wasm.js +27 -12
- package/lib/debug/persisters/persister-expo-sqlite.js +27 -12
- package/lib/debug/persisters/persister-file.js +17 -3
- package/lib/debug/persisters/persister-indexed-db.js +21 -8
- package/lib/debug/persisters/persister-partykit-client.js +54 -20
- package/lib/debug/persisters/persister-partykit-server.js +173 -77
- package/lib/debug/persisters/persister-remote.js +17 -3
- package/lib/debug/persisters/persister-sqlite-wasm.js +27 -12
- package/lib/debug/persisters/persister-sqlite3.js +28 -13
- package/lib/debug/persisters/persister-yjs.js +23 -10
- package/lib/debug/persisters.js +16 -4
- package/lib/debug/queries.js +16 -15
- package/lib/debug/relationships.js +9 -9
- package/lib/debug/store.js +130 -35
- package/lib/debug/tinybase.js +142 -41
- package/lib/debug/tools.js +17 -9
- package/lib/debug/ui-react-dom.js +262 -150
- package/lib/debug/ui-react.js +288 -67
- package/lib/es6/checkpoints.js +1 -1
- package/lib/es6/checkpoints.js.gz +0 -0
- package/lib/es6/indexes.js +1 -1
- package/lib/es6/indexes.js.gz +0 -0
- package/lib/es6/metrics.js +1 -1
- package/lib/es6/metrics.js.gz +0 -0
- package/lib/es6/persisters/persister-automerge.js +1 -1
- package/lib/es6/persisters/persister-automerge.js.gz +0 -0
- package/lib/es6/persisters/persister-browser.js +1 -1
- package/lib/es6/persisters/persister-browser.js.gz +0 -0
- package/lib/es6/persisters/persister-cr-sqlite-wasm.js +1 -1
- package/lib/es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
- package/lib/es6/persisters/persister-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-partykit-client.js +1 -1
- package/lib/es6/persisters/persister-partykit-client.js.gz +0 -0
- package/lib/es6/persisters/persister-partykit-server.js +1 -1
- package/lib/es6/persisters/persister-partykit-server.js.gz +0 -0
- package/lib/es6/persisters/persister-remote.js +1 -1
- package/lib/es6/persisters/persister-remote.js.gz +0 -0
- package/lib/es6/persisters/persister-sqlite-wasm.js +1 -1
- package/lib/es6/persisters/persister-sqlite-wasm.js.gz +0 -0
- package/lib/es6/persisters/persister-sqlite3.js +1 -1
- package/lib/es6/persisters/persister-sqlite3.js.gz +0 -0
- package/lib/es6/persisters/persister-yjs.js +1 -1
- package/lib/es6/persisters/persister-yjs.js.gz +0 -0
- package/lib/es6/persisters.js +1 -1
- package/lib/es6/persisters.js.gz +0 -0
- package/lib/es6/queries.js +1 -1
- package/lib/es6/queries.js.gz +0 -0
- package/lib/es6/relationships.js +1 -1
- package/lib/es6/relationships.js.gz +0 -0
- package/lib/es6/store.js +1 -1
- package/lib/es6/store.js.gz +0 -0
- package/lib/es6/tinybase.js +1 -1
- package/lib/es6/tinybase.js.gz +0 -0
- package/lib/es6/tools.js +1 -1
- package/lib/es6/tools.js.gz +0 -0
- package/lib/es6/ui-react-dom-debug.js +1 -1
- package/lib/es6/ui-react-dom-debug.js.gz +0 -0
- package/lib/es6/ui-react-dom.js +1 -1
- package/lib/es6/ui-react-dom.js.gz +0 -0
- package/lib/es6/ui-react.js +1 -1
- package/lib/es6/ui-react.js.gz +0 -0
- package/lib/indexes.js +1 -1
- package/lib/indexes.js.gz +0 -0
- package/lib/metrics.js +1 -1
- package/lib/metrics.js.gz +0 -0
- package/lib/persisters/persister-automerge.js +1 -1
- package/lib/persisters/persister-automerge.js.gz +0 -0
- package/lib/persisters/persister-browser.js +1 -1
- package/lib/persisters/persister-browser.js.gz +0 -0
- package/lib/persisters/persister-cr-sqlite-wasm.js +1 -1
- package/lib/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
- package/lib/persisters/persister-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-partykit-client.js +1 -1
- package/lib/persisters/persister-partykit-client.js.gz +0 -0
- package/lib/persisters/persister-partykit-server.js +1 -1
- package/lib/persisters/persister-partykit-server.js.gz +0 -0
- package/lib/persisters/persister-remote.js +1 -1
- package/lib/persisters/persister-remote.js.gz +0 -0
- package/lib/persisters/persister-sqlite-wasm.js +1 -1
- package/lib/persisters/persister-sqlite-wasm.js.gz +0 -0
- package/lib/persisters/persister-sqlite3.js +1 -1
- package/lib/persisters/persister-sqlite3.js.gz +0 -0
- package/lib/persisters/persister-yjs.js +1 -1
- package/lib/persisters/persister-yjs.js.gz +0 -0
- package/lib/persisters.js +1 -1
- package/lib/persisters.js.gz +0 -0
- package/lib/queries.js +1 -1
- package/lib/queries.js.gz +0 -0
- package/lib/relationships.js +1 -1
- package/lib/relationships.js.gz +0 -0
- package/lib/store.js +1 -1
- package/lib/store.js.gz +0 -0
- package/lib/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/persisters/persister-automerge.d.ts +36 -3
- package/lib/types/persisters/persister-browser.d.ts +71 -8
- package/lib/types/persisters/persister-cr-sqlite-wasm.d.ts +42 -8
- package/lib/types/persisters/persister-expo-sqlite.d.ts +40 -7
- package/lib/types/persisters/persister-file.d.ts +34 -3
- package/lib/types/persisters/persister-indexed-db.d.ts +40 -9
- package/lib/types/persisters/persister-partykit-client.d.ts +99 -13
- package/lib/types/persisters/persister-partykit-server.d.ts +414 -9
- package/lib/types/persisters/persister-remote.d.ts +40 -4
- package/lib/types/persisters/persister-sqlite-wasm.d.ts +46 -7
- package/lib/types/persisters/persister-sqlite3.d.ts +40 -7
- package/lib/types/persisters/persister-yjs.d.ts +37 -5
- package/lib/types/persisters.d.ts +10 -10
- package/lib/types/queries.d.ts +24 -0
- package/lib/types/store.d.ts +912 -32
- package/lib/types/tools.d.ts +4 -6
- package/lib/types/ui-react-dom.d.ts +13 -2
- package/lib/types/ui-react.d.ts +1176 -44
- package/lib/types/with-schemas/persisters/persister-automerge.d.ts +38 -4
- package/lib/types/with-schemas/persisters/persister-browser.d.ts +75 -10
- package/lib/types/with-schemas/persisters/persister-cr-sqlite-wasm.d.ts +44 -9
- package/lib/types/with-schemas/persisters/persister-expo-sqlite.d.ts +42 -8
- package/lib/types/with-schemas/persisters/persister-file.d.ts +36 -4
- package/lib/types/with-schemas/persisters/persister-indexed-db.d.ts +42 -10
- package/lib/types/with-schemas/persisters/persister-partykit-client.d.ts +102 -15
- package/lib/types/with-schemas/persisters/persister-partykit-server.d.ts +447 -9
- package/lib/types/with-schemas/persisters/persister-remote.d.ts +42 -5
- package/lib/types/with-schemas/persisters/persister-sqlite-wasm.d.ts +48 -8
- package/lib/types/with-schemas/persisters/persister-sqlite3.d.ts +41 -7
- package/lib/types/with-schemas/persisters/persister-yjs.d.ts +39 -6
- package/lib/types/with-schemas/persisters.d.ts +10 -10
- package/lib/types/with-schemas/queries.d.ts +24 -0
- package/lib/types/with-schemas/store.d.ts +1180 -36
- package/lib/types/with-schemas/tools.d.ts +4 -6
- package/lib/types/with-schemas/ui-react-dom.d.ts +21 -4
- package/lib/types/with-schemas/ui-react.d.ts +1382 -71
- package/lib/ui-react-dom.js +1 -1
- package/lib/ui-react-dom.js.gz +0 -0
- package/lib/ui-react.js +1 -1
- package/lib/ui-react.js.gz +0 -0
- package/lib/umd/checkpoints.js +1 -1
- package/lib/umd/checkpoints.js.gz +0 -0
- package/lib/umd/indexes.js +1 -1
- package/lib/umd/indexes.js.gz +0 -0
- package/lib/umd/metrics.js +1 -1
- package/lib/umd/metrics.js.gz +0 -0
- package/lib/umd/persisters/persister-automerge.js +1 -1
- package/lib/umd/persisters/persister-automerge.js.gz +0 -0
- package/lib/umd/persisters/persister-browser.js +1 -1
- package/lib/umd/persisters/persister-browser.js.gz +0 -0
- package/lib/umd/persisters/persister-cr-sqlite-wasm.js +1 -1
- package/lib/umd/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
- package/lib/umd/persisters/persister-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-partykit-client.js +1 -1
- package/lib/umd/persisters/persister-partykit-client.js.gz +0 -0
- package/lib/umd/persisters/persister-partykit-server.js +1 -1
- package/lib/umd/persisters/persister-partykit-server.js.gz +0 -0
- package/lib/umd/persisters/persister-remote.js +1 -1
- package/lib/umd/persisters/persister-remote.js.gz +0 -0
- package/lib/umd/persisters/persister-sqlite-wasm.js +1 -1
- package/lib/umd/persisters/persister-sqlite-wasm.js.gz +0 -0
- package/lib/umd/persisters/persister-sqlite3.js +1 -1
- package/lib/umd/persisters/persister-sqlite3.js.gz +0 -0
- package/lib/umd/persisters/persister-yjs.js +1 -1
- package/lib/umd/persisters/persister-yjs.js.gz +0 -0
- package/lib/umd/persisters.js +1 -1
- package/lib/umd/persisters.js.gz +0 -0
- package/lib/umd/queries.js +1 -1
- package/lib/umd/queries.js.gz +0 -0
- package/lib/umd/relationships.js +1 -1
- package/lib/umd/relationships.js.gz +0 -0
- package/lib/umd/store.js +1 -1
- package/lib/umd/store.js.gz +0 -0
- package/lib/umd/tinybase.js +1 -1
- package/lib/umd/tinybase.js.gz +0 -0
- package/lib/umd/tools.js +1 -1
- package/lib/umd/tools.js.gz +0 -0
- package/lib/umd/ui-react-dom-debug.js +1 -1
- package/lib/umd/ui-react-dom-debug.js.gz +0 -0
- package/lib/umd/ui-react-dom.js +1 -1
- package/lib/umd/ui-react-dom.js.gz +0 -0
- package/lib/umd/ui-react.js +1 -1
- package/lib/umd/ui-react.js.gz +0 -0
- package/lib/umd-es6/checkpoints.js +1 -1
- package/lib/umd-es6/checkpoints.js.gz +0 -0
- package/lib/umd-es6/indexes.js +1 -1
- package/lib/umd-es6/indexes.js.gz +0 -0
- package/lib/umd-es6/metrics.js +1 -1
- package/lib/umd-es6/metrics.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-automerge.js +1 -1
- package/lib/umd-es6/persisters/persister-automerge.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-browser.js +1 -1
- package/lib/umd-es6/persisters/persister-browser.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js +1 -1
- package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-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-partykit-client.js +1 -1
- package/lib/umd-es6/persisters/persister-partykit-client.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-partykit-server.js +1 -1
- package/lib/umd-es6/persisters/persister-partykit-server.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-remote.js +1 -1
- package/lib/umd-es6/persisters/persister-remote.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-sqlite-wasm.js +1 -1
- package/lib/umd-es6/persisters/persister-sqlite-wasm.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-sqlite3.js +1 -1
- package/lib/umd-es6/persisters/persister-sqlite3.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-yjs.js +1 -1
- package/lib/umd-es6/persisters/persister-yjs.js.gz +0 -0
- package/lib/umd-es6/persisters.js +1 -1
- package/lib/umd-es6/persisters.js.gz +0 -0
- package/lib/umd-es6/queries.js +1 -1
- package/lib/umd-es6/queries.js.gz +0 -0
- package/lib/umd-es6/relationships.js +1 -1
- package/lib/umd-es6/relationships.js.gz +0 -0
- package/lib/umd-es6/store.js +1 -1
- package/lib/umd-es6/store.js.gz +0 -0
- package/lib/umd-es6/tinybase.js +1 -1
- package/lib/umd-es6/tinybase.js.gz +0 -0
- package/lib/umd-es6/tools.js +1 -1
- package/lib/umd-es6/tools.js.gz +0 -0
- package/lib/umd-es6/ui-react-dom-debug.js +1 -1
- package/lib/umd-es6/ui-react-dom-debug.js.gz +0 -0
- package/lib/umd-es6/ui-react-dom.js +1 -1
- package/lib/umd-es6/ui-react-dom.js.gz +0 -0
- package/lib/umd-es6/ui-react.js +1 -1
- package/lib/umd-es6/ui-react.js.gz +0 -0
- package/package.json +42 -40
- package/readme.md +2 -2
|
@@ -53,6 +53,7 @@ const TYPE = 'type';
|
|
|
53
53
|
const DEFAULT = 'default';
|
|
54
54
|
const LISTENER = 'Listener';
|
|
55
55
|
const ADD = 'add';
|
|
56
|
+
const HAS = 'Has';
|
|
56
57
|
const IDS = 'Ids';
|
|
57
58
|
const TABLE = 'Table';
|
|
58
59
|
const TABLES = TABLE + 's';
|
|
@@ -80,6 +81,7 @@ const isString = (thing) => getTypeOf(thing) == STRING;
|
|
|
80
81
|
const isFunction = (thing) => getTypeOf(thing) == FUNCTION;
|
|
81
82
|
const isArray = (thing) => Array.isArray(thing);
|
|
82
83
|
const slice = (arrayOrString, start, end) => arrayOrString.slice(start, end);
|
|
84
|
+
const size = (arrayOrString) => arrayOrString.length;
|
|
83
85
|
const test = (regex, subject) => regex.test(subject);
|
|
84
86
|
|
|
85
87
|
const {
|
|
@@ -108,24 +110,31 @@ const getIndexStoreTableId = (indexes, indexId) => [
|
|
|
108
110
|
const arrayHas = (array, value) => array.includes(value);
|
|
109
111
|
const arrayEvery = (array, cb) => array.every(cb);
|
|
110
112
|
const arrayIsEqual = (array1, array2) =>
|
|
111
|
-
|
|
113
|
+
size(array1) === size(array2) &&
|
|
112
114
|
arrayEvery(array1, (value1, index) => array2[index] === value1);
|
|
113
115
|
const arraySort = (array, sorter) => array.sort(sorter);
|
|
114
116
|
const arrayForEach = (array, cb) => array.forEach(cb);
|
|
115
117
|
const arrayJoin = (array, sep = EMPTY_STRING) => array.join(sep);
|
|
116
118
|
const arrayMap = (array, cb) => array.map(cb);
|
|
117
|
-
const
|
|
118
|
-
const arrayIsEmpty = (array) => arrayLength(array) == 0;
|
|
119
|
+
const arrayIsEmpty = (array) => size(array) == 0;
|
|
119
120
|
const arrayReduce = (array, cb, initial) => array.reduce(cb, initial);
|
|
120
121
|
const arrayPush = (array, ...values) => array.push(...values);
|
|
121
122
|
const arrayShift = (array) => array.shift();
|
|
122
123
|
|
|
123
124
|
const object = Object;
|
|
125
|
+
const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
|
|
124
126
|
const objIds = object.keys;
|
|
125
127
|
const objFrozen = object.isFrozen;
|
|
126
128
|
const objFreeze = object.freeze;
|
|
127
129
|
const isObject = (obj) =>
|
|
128
|
-
|
|
130
|
+
!isUndefined(obj) &&
|
|
131
|
+
ifNotUndefined(
|
|
132
|
+
getPrototypeOf(obj),
|
|
133
|
+
(objPrototype) =>
|
|
134
|
+
objPrototype == object.prototype ||
|
|
135
|
+
isUndefined(getPrototypeOf(objPrototype)),
|
|
136
|
+
() => true,
|
|
137
|
+
);
|
|
129
138
|
const objNew = (entries = []) => object.fromEntries(entries);
|
|
130
139
|
const objGet = (obj, id) => ifNotUndefined(obj, (obj2) => obj2[id]);
|
|
131
140
|
const objHas = (obj, id) => !isUndefined(objGet(obj, id));
|
|
@@ -135,7 +144,7 @@ const objDel = (obj, id) => {
|
|
|
135
144
|
};
|
|
136
145
|
const objMap = (obj, cb) =>
|
|
137
146
|
arrayMap(object.entries(obj), ([id, value]) => cb(value, id));
|
|
138
|
-
const objSize = (obj) =>
|
|
147
|
+
const objSize = (obj) => size(objIds(obj));
|
|
139
148
|
const objIsEmpty = (obj) => isObject(obj) && objSize(obj) == 0;
|
|
140
149
|
|
|
141
150
|
const jsonString = (obj) =>
|
|
@@ -195,89 +204,85 @@ const EDIT_SVG = PRE + `<path d='${PENCIL}' />` + POST;
|
|
|
195
204
|
const DONE_SVG = PRE + `<path d='${PENCIL}M20 20l60 60' />` + POST;
|
|
196
205
|
|
|
197
206
|
const SCROLLBAR = '*::-webkit-scrollbar';
|
|
198
|
-
const APP_STYLESHEET =
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
(css, p) => [`main[data-position='${p}']`, css],
|
|
232
|
-
),
|
|
233
|
-
),
|
|
234
|
-
// Header
|
|
235
|
-
header:
|
|
236
|
-
'display:flex;padding:0.25rem;background:#000;align-items:center',
|
|
237
|
-
'header>img:nth-of-type(1)': LOGO_SVG,
|
|
238
|
-
'header>img:nth-of-type(6)': CLOSE_SVG,
|
|
239
|
-
...objNew(
|
|
240
|
-
arrayMap(POSITIONS_SVG, (SVG, p) => [
|
|
241
|
-
`header>img[data-id='${p}']`,
|
|
242
|
-
SVG,
|
|
243
|
-
]),
|
|
207
|
+
const APP_STYLESHEET = arrayJoin(
|
|
208
|
+
objMap(
|
|
209
|
+
{
|
|
210
|
+
'': 'all:initial;font-family:sans-serif;font-size:0.75rem;position:fixed;z-index:999999',
|
|
211
|
+
'*': 'all:revert',
|
|
212
|
+
'*::before': 'all:revert',
|
|
213
|
+
'*::after': 'all:revert',
|
|
214
|
+
[SCROLLBAR]: 'width:0.5rem;height:0.5rem;',
|
|
215
|
+
[SCROLLBAR + '-track']: 'background:#111',
|
|
216
|
+
[SCROLLBAR + '-thumb']: 'background:#999;border:1px solid #111',
|
|
217
|
+
[SCROLLBAR + '-thumb:hover']: 'background:#fff',
|
|
218
|
+
[SCROLLBAR + '-corner']: 'background:#111',
|
|
219
|
+
img: 'width:1rem;height:1rem;background:#111;border:0;vertical-align:text-bottom',
|
|
220
|
+
// Nub
|
|
221
|
+
'>img': 'padding:0.25rem;bottom:0;right:0;position:fixed;' + LOGO_SVG,
|
|
222
|
+
...objNew(
|
|
223
|
+
arrayMap(['bottom:0;left:0', 'top:0;right:0'], (css, p) => [
|
|
224
|
+
`>img[data-position='${p}']`,
|
|
225
|
+
css,
|
|
226
|
+
]),
|
|
227
|
+
),
|
|
228
|
+
// Panel
|
|
229
|
+
main: 'display:flex;flex-direction:column;background:#111d;color:#fff;position:fixed;',
|
|
230
|
+
...objNew(
|
|
231
|
+
arrayMap(
|
|
232
|
+
[
|
|
233
|
+
'bottom:0;left:0;width:35vw;height:100vh',
|
|
234
|
+
'top:0;right:0;width:100vw;height:30vh',
|
|
235
|
+
'bottom:0;left:0;width:100vw;height:30vh',
|
|
236
|
+
'top:0;right:0;width:35vw;height:100vh',
|
|
237
|
+
'top:0;right:0;width:100vw;height:100vh',
|
|
238
|
+
],
|
|
239
|
+
(css, p) => [`main[data-position='${p}']`, css],
|
|
244
240
|
),
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
'
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
'
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
241
|
+
),
|
|
242
|
+
// Header
|
|
243
|
+
header: 'display:flex;padding:0.25rem;background:#000;align-items:center',
|
|
244
|
+
'header>img:nth-of-type(1)': LOGO_SVG,
|
|
245
|
+
'header>img:nth-of-type(6)': CLOSE_SVG,
|
|
246
|
+
...objNew(
|
|
247
|
+
arrayMap(POSITIONS_SVG, (SVG, p) => [
|
|
248
|
+
`header>img[data-id='${p}']`,
|
|
249
|
+
SVG,
|
|
250
|
+
]),
|
|
251
|
+
),
|
|
252
|
+
'header>span':
|
|
253
|
+
'flex:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;margin-left:0.25rem',
|
|
254
|
+
// Body
|
|
255
|
+
article: 'padding:0.25rem 0.25rem 0.25rem 0.5rem;overflow:auto;flex:1',
|
|
256
|
+
details: 'margin-left:0.75rem;width:fit-content;',
|
|
257
|
+
'details img': 'display:none',
|
|
258
|
+
'details[open]>summary img':
|
|
259
|
+
'display:unset;background:none;margin-left:0.25rem',
|
|
260
|
+
'details[open]>summary img.edit': EDIT_SVG,
|
|
261
|
+
'details[open]>summary img.done': DONE_SVG,
|
|
262
|
+
summary:
|
|
263
|
+
'margin-left:-0.75rem;line-height:1.25rem;user-select:none;width:fit-content',
|
|
264
|
+
// tables
|
|
265
|
+
table: 'border-collapse:collapse;table-layout:fixed;margin-bottom:0.5rem',
|
|
266
|
+
'table input':
|
|
267
|
+
'background:#111;color:unset;padding:0 0.25rem;border:0;font-size:unset;vertical-align:top;margin:0',
|
|
268
|
+
'table input[type="number"]': 'width:4rem',
|
|
269
|
+
'table tbody button':
|
|
270
|
+
'font-size:0;background:#fff;border-radius:50%;margin:0 0.125rem 0 0;width:0.85rem;color:#111',
|
|
271
|
+
'table button:first-letter': 'font-size:0.75rem',
|
|
272
|
+
thead: 'background:#222',
|
|
273
|
+
'th:nth-of-type(1)': 'min-width:2rem;',
|
|
274
|
+
'th.sorted': 'background:#000',
|
|
275
|
+
'table caption': 'text-align:left;white-space:nowrap;line-height:1.25rem',
|
|
276
|
+
button: 'width:1.5rem;border:none;background:none;color:#fff;padding:0',
|
|
277
|
+
'button[disabled]': 'color:#777',
|
|
278
|
+
'button.next': 'margin-right:0.5rem',
|
|
279
|
+
[`th,#${UNIQUE_ID} td`]:
|
|
280
|
+
'overflow:hidden;text-overflow:ellipsis;padding:0.25rem 0.5rem;max-width:12rem;white-space:nowrap;border-width:1px 0;border-style:solid;border-color:#777;text-align:left',
|
|
281
|
+
'span.warn': 'margin:0.25rem;color:#d81b60',
|
|
282
|
+
},
|
|
283
|
+
(style, selector) => (style ? `#${UNIQUE_ID} ${selector}{${style}}` : ''),
|
|
284
|
+
),
|
|
285
|
+
);
|
|
281
286
|
|
|
282
287
|
const Nub = ({s}) => {
|
|
283
288
|
const position = useValue(POSITION_VALUE, s) ?? 1;
|
|
@@ -589,7 +594,13 @@ const RelationshipInHtmlRow = ({
|
|
|
589
594
|
),
|
|
590
595
|
);
|
|
591
596
|
};
|
|
592
|
-
const EditableThing = ({
|
|
597
|
+
const EditableThing = ({
|
|
598
|
+
thing,
|
|
599
|
+
onThingChange,
|
|
600
|
+
className,
|
|
601
|
+
hasSchema,
|
|
602
|
+
showType = true,
|
|
603
|
+
}) => {
|
|
593
604
|
const [thingType, setThingType] = useState();
|
|
594
605
|
const [currentThing, setCurrentThing] = useState();
|
|
595
606
|
const [stringThing, setStringThing] = useState();
|
|
@@ -610,37 +621,37 @@ const EditableThing = ({thing, onThingChange, className, hasSchema}) => {
|
|
|
610
621
|
},
|
|
611
622
|
[onThingChange],
|
|
612
623
|
);
|
|
624
|
+
const handleTypeChange = useCallback(() => {
|
|
625
|
+
if (!hasSchema?.()) {
|
|
626
|
+
const nextType = getTypeCase(thingType, NUMBER, BOOLEAN, STRING);
|
|
627
|
+
const thing2 = getTypeCase(
|
|
628
|
+
nextType,
|
|
629
|
+
stringThing,
|
|
630
|
+
numberThing,
|
|
631
|
+
booleanThing,
|
|
632
|
+
);
|
|
633
|
+
setThingType(nextType);
|
|
634
|
+
setCurrentThing(thing2);
|
|
635
|
+
onThingChange(thing2);
|
|
636
|
+
}
|
|
637
|
+
}, [
|
|
638
|
+
hasSchema,
|
|
639
|
+
onThingChange,
|
|
640
|
+
stringThing,
|
|
641
|
+
numberThing,
|
|
642
|
+
booleanThing,
|
|
643
|
+
thingType,
|
|
644
|
+
]);
|
|
613
645
|
return /* @__PURE__ */ createElement(
|
|
614
646
|
'div',
|
|
615
647
|
{className},
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
onClick: useCallback(() => {
|
|
621
|
-
if (!hasSchema?.()) {
|
|
622
|
-
const nextType = getTypeCase(thingType, NUMBER, BOOLEAN, STRING);
|
|
623
|
-
const thing2 = getTypeCase(
|
|
624
|
-
nextType,
|
|
625
|
-
stringThing,
|
|
626
|
-
numberThing,
|
|
627
|
-
booleanThing,
|
|
628
|
-
);
|
|
629
|
-
setThingType(nextType);
|
|
630
|
-
setCurrentThing(thing2);
|
|
631
|
-
onThingChange(thing2);
|
|
632
|
-
}
|
|
633
|
-
}, [
|
|
634
|
-
hasSchema,
|
|
635
|
-
onThingChange,
|
|
636
|
-
stringThing,
|
|
637
|
-
numberThing,
|
|
638
|
-
booleanThing,
|
|
648
|
+
showType
|
|
649
|
+
? /* @__PURE__ */ createElement(
|
|
650
|
+
'button',
|
|
651
|
+
{className: thingType, onClick: handleTypeChange},
|
|
639
652
|
thingType,
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
thingType,
|
|
643
|
-
),
|
|
653
|
+
)
|
|
654
|
+
: null,
|
|
644
655
|
getTypeCase(
|
|
645
656
|
thingType,
|
|
646
657
|
/* @__PURE__ */ createElement('input', {
|
|
@@ -943,7 +954,14 @@ const ResultSortedTableInHtmlTable = ({
|
|
|
943
954
|
),
|
|
944
955
|
});
|
|
945
956
|
};
|
|
946
|
-
const EditableCellView = ({
|
|
957
|
+
const EditableCellView = ({
|
|
958
|
+
tableId,
|
|
959
|
+
rowId,
|
|
960
|
+
cellId,
|
|
961
|
+
store,
|
|
962
|
+
className,
|
|
963
|
+
showType,
|
|
964
|
+
}) =>
|
|
947
965
|
/* @__PURE__ */ createElement(EditableThing, {
|
|
948
966
|
thing: useCell(tableId, rowId, cellId, store),
|
|
949
967
|
onThingChange: useSetCellCallback(
|
|
@@ -955,13 +973,15 @@ const EditableCellView = ({tableId, rowId, cellId, store, className}) =>
|
|
|
955
973
|
store,
|
|
956
974
|
),
|
|
957
975
|
className: className ?? EDITABLE + CELL,
|
|
976
|
+
showType,
|
|
958
977
|
hasSchema: useStoreOrStoreById(store)?.hasTablesSchema,
|
|
959
978
|
});
|
|
960
|
-
const EditableValueView = ({valueId, store, className}) =>
|
|
979
|
+
const EditableValueView = ({valueId, store, className, showType}) =>
|
|
961
980
|
/* @__PURE__ */ createElement(EditableThing, {
|
|
962
981
|
thing: useValue(valueId, store),
|
|
963
982
|
onThingChange: useSetValueCallback(valueId, (value) => value, [], store),
|
|
964
983
|
className: className ?? EDITABLE + VALUE,
|
|
984
|
+
showType,
|
|
965
985
|
hasSchema: useStoreOrStoreById(store)?.hasValuesSchema,
|
|
966
986
|
});
|
|
967
987
|
const SortedTablePaginator = ({
|
|
@@ -1426,8 +1446,8 @@ class ErrorBoundary extends PureComponent {
|
|
|
1426
1446
|
console.error(error, info.componentStack);
|
|
1427
1447
|
this.state = {e: 0};
|
|
1428
1448
|
}
|
|
1429
|
-
static {
|
|
1430
|
-
|
|
1449
|
+
static getDerivedStateFromError() {
|
|
1450
|
+
return {e: 1};
|
|
1431
1451
|
}
|
|
1432
1452
|
render() {
|
|
1433
1453
|
return this.state.e
|
|
@@ -1552,10 +1572,10 @@ const visitTree = (node, path, ensureLeaf, pruneLeaf, p = 0) =>
|
|
|
1552
1572
|
(ensureLeaf ? mapEnsure : mapGet)(
|
|
1553
1573
|
node,
|
|
1554
1574
|
path[p],
|
|
1555
|
-
p >
|
|
1575
|
+
p > size(path) - 2 ? ensureLeaf : mapNew,
|
|
1556
1576
|
),
|
|
1557
1577
|
(nodeOrLeaf) => {
|
|
1558
|
-
if (p >
|
|
1578
|
+
if (p > size(path) - 2) {
|
|
1559
1579
|
if (pruneLeaf?.(nodeOrLeaf)) {
|
|
1560
1580
|
mapSet(node, path[p]);
|
|
1561
1581
|
}
|
|
@@ -1578,6 +1598,7 @@ const createCustomPersister = (
|
|
|
1578
1598
|
addPersisterListener,
|
|
1579
1599
|
delPersisterListener,
|
|
1580
1600
|
onIgnoredError,
|
|
1601
|
+
[getThing, thing] = [],
|
|
1581
1602
|
scheduleId = [],
|
|
1582
1603
|
) => {
|
|
1583
1604
|
let listenerId;
|
|
@@ -1694,6 +1715,7 @@ const createCustomPersister = (
|
|
|
1694
1715
|
},
|
|
1695
1716
|
stopAutoSave: () => {
|
|
1696
1717
|
ifNotUndefined(listenerId, store.delListener);
|
|
1718
|
+
listenerId = void 0;
|
|
1697
1719
|
return persister;
|
|
1698
1720
|
},
|
|
1699
1721
|
schedule: async (...actions) => {
|
|
@@ -1705,6 +1727,9 @@ const createCustomPersister = (
|
|
|
1705
1727
|
destroy: () => persister.stopAutoLoad().stopAutoSave(),
|
|
1706
1728
|
getStats: () => ({loads, saves}),
|
|
1707
1729
|
};
|
|
1730
|
+
if (getThing) {
|
|
1731
|
+
persister[getThing] = () => thing;
|
|
1732
|
+
}
|
|
1708
1733
|
return objFreeze(persister);
|
|
1709
1734
|
};
|
|
1710
1735
|
|
|
@@ -1737,6 +1762,7 @@ const createStoragePersister = (
|
|
|
1737
1762
|
addPersisterListener,
|
|
1738
1763
|
delPersisterListener,
|
|
1739
1764
|
onIgnoredError,
|
|
1765
|
+
['getStorageName', storageName],
|
|
1740
1766
|
);
|
|
1741
1767
|
};
|
|
1742
1768
|
const createSessionPersister = (store, storageName, onIgnoredError) =>
|
|
@@ -1757,7 +1783,7 @@ const getPoolFunctions = () => {
|
|
|
1757
1783
|
return [
|
|
1758
1784
|
(reuse) => (reuse ? arrayShift(pool) : null) ?? EMPTY_STRING + nextId++,
|
|
1759
1785
|
(id) => {
|
|
1760
|
-
if (test(INTEGER, id) &&
|
|
1786
|
+
if (test(INTEGER, id) && size(pool) < 1e3) {
|
|
1761
1787
|
arrayPush(pool, id);
|
|
1762
1788
|
}
|
|
1763
1789
|
},
|
|
@@ -1767,7 +1793,7 @@ const getPoolFunctions = () => {
|
|
|
1767
1793
|
const getWildcardedLeaves = (deepIdSet, path = [EMPTY_STRING]) => {
|
|
1768
1794
|
const leaves = [];
|
|
1769
1795
|
const deep = (node, p) =>
|
|
1770
|
-
p ==
|
|
1796
|
+
p == size(path)
|
|
1771
1797
|
? arrayPush(leaves, node)
|
|
1772
1798
|
: path[p] === null
|
|
1773
1799
|
? collForEach(node, (node2) => deep(node2, p + 1))
|
|
@@ -1819,8 +1845,8 @@ const getListenerFunctions = (getThing) => {
|
|
|
1819
1845
|
mapGet(allListeners, id),
|
|
1820
1846
|
([listener, , path = [], pathGetters, extraArgsGetter]) => {
|
|
1821
1847
|
const callWithIds = (...ids) => {
|
|
1822
|
-
const index =
|
|
1823
|
-
index ==
|
|
1848
|
+
const index = size(ids);
|
|
1849
|
+
index == size(path)
|
|
1824
1850
|
? listener(thing, ...ids, ...extraArgsGetter(ids))
|
|
1825
1851
|
: isUndefined(path[index])
|
|
1826
1852
|
? arrayForEach(pathGetters[index]?.(...ids) ?? [], (id2) =>
|
|
@@ -1866,6 +1892,8 @@ const createStore = () => {
|
|
|
1866
1892
|
let hasValuesSchema;
|
|
1867
1893
|
let cellsTouched = false;
|
|
1868
1894
|
let valuesTouched = false;
|
|
1895
|
+
let hadTables = false;
|
|
1896
|
+
let hadValues = false;
|
|
1869
1897
|
let transactions = 0;
|
|
1870
1898
|
const changedTableIds = mapNew();
|
|
1871
1899
|
const changedTableCellIds = mapNew();
|
|
@@ -1886,20 +1914,27 @@ const createStore = () => {
|
|
|
1886
1914
|
const tableCellIds = mapNew();
|
|
1887
1915
|
const tablesMap = mapNew();
|
|
1888
1916
|
const valuesMap = mapNew();
|
|
1917
|
+
const hasTablesListeners = pairNewMap();
|
|
1889
1918
|
const tablesListeners = pairNewMap();
|
|
1890
1919
|
const tableIdsListeners = pairNewMap();
|
|
1920
|
+
const hasTableListeners = pairNewMap();
|
|
1891
1921
|
const tableListeners = pairNewMap();
|
|
1892
1922
|
const tableCellIdsListeners = pairNewMap();
|
|
1923
|
+
const hasTableCellListeners = pairNewMap();
|
|
1893
1924
|
const rowCountListeners = pairNewMap();
|
|
1894
1925
|
const rowIdsListeners = pairNewMap();
|
|
1895
1926
|
const sortedRowIdsListeners = pairNewMap();
|
|
1927
|
+
const hasRowListeners = pairNewMap();
|
|
1896
1928
|
const rowListeners = pairNewMap();
|
|
1897
1929
|
const cellIdsListeners = pairNewMap();
|
|
1930
|
+
const hasCellListeners = pairNewMap();
|
|
1898
1931
|
const cellListeners = pairNewMap();
|
|
1899
1932
|
const invalidCellListeners = pairNewMap();
|
|
1900
1933
|
const invalidValueListeners = pairNewMap();
|
|
1934
|
+
const hasValuesListeners = pairNewMap();
|
|
1901
1935
|
const valuesListeners = pairNewMap();
|
|
1902
1936
|
const valueIdsListeners = pairNewMap();
|
|
1937
|
+
const hasValueListeners = pairNewMap();
|
|
1903
1938
|
const valueListeners = pairNewMap();
|
|
1904
1939
|
const startTransactionListeners = mapNew();
|
|
1905
1940
|
const finishTransactionListeners = pairNewMap();
|
|
@@ -2294,29 +2329,45 @@ const createStore = () => {
|
|
|
2294
2329
|
),
|
|
2295
2330
|
)
|
|
2296
2331
|
: 0;
|
|
2297
|
-
const
|
|
2332
|
+
const callIdsAndHasListenersIfChanged = (
|
|
2333
|
+
changedIds,
|
|
2334
|
+
idListeners,
|
|
2335
|
+
hasListeners,
|
|
2336
|
+
ids,
|
|
2337
|
+
) => {
|
|
2298
2338
|
if (!collIsEmpty(changedIds)) {
|
|
2299
|
-
callListeners(
|
|
2339
|
+
callListeners(idListeners, ids, () => mapToObj(changedIds));
|
|
2340
|
+
mapForEach(changedIds, (changedId, changed) =>
|
|
2341
|
+
callListeners(hasListeners, [...(ids ?? []), changedId], changed == 1),
|
|
2342
|
+
);
|
|
2300
2343
|
return 1;
|
|
2301
2344
|
}
|
|
2302
2345
|
};
|
|
2303
2346
|
const callTabularListenersForChanges = (mutator) => {
|
|
2347
|
+
const hasTablesNow = hasTables();
|
|
2348
|
+
if (hasTablesNow != hadTables) {
|
|
2349
|
+
callListeners(hasTablesListeners[mutator], void 0, hasTablesNow);
|
|
2350
|
+
}
|
|
2304
2351
|
const emptySortedRowIdListeners = collIsEmpty(
|
|
2305
2352
|
sortedRowIdsListeners[mutator],
|
|
2306
2353
|
);
|
|
2307
|
-
const
|
|
2354
|
+
const emptyIdAndHasListeners =
|
|
2308
2355
|
collIsEmpty(cellIdsListeners[mutator]) &&
|
|
2356
|
+
collIsEmpty(hasCellListeners[mutator]) &&
|
|
2357
|
+
collIsEmpty(rowIdsListeners[mutator]) &&
|
|
2358
|
+
collIsEmpty(hasRowListeners[mutator]) &&
|
|
2309
2359
|
collIsEmpty(tableCellIdsListeners[mutator]) &&
|
|
2360
|
+
collIsEmpty(hasTableCellListeners[mutator]) &&
|
|
2310
2361
|
collIsEmpty(rowCountListeners[mutator]) &&
|
|
2311
|
-
collIsEmpty(rowIdsListeners[mutator]) &&
|
|
2312
2362
|
emptySortedRowIdListeners &&
|
|
2313
|
-
collIsEmpty(tableIdsListeners[mutator])
|
|
2363
|
+
collIsEmpty(tableIdsListeners[mutator]) &&
|
|
2364
|
+
collIsEmpty(hasTableListeners[mutator]);
|
|
2314
2365
|
const emptyOtherListeners =
|
|
2315
2366
|
collIsEmpty(cellListeners[mutator]) &&
|
|
2316
2367
|
collIsEmpty(rowListeners[mutator]) &&
|
|
2317
2368
|
collIsEmpty(tableListeners[mutator]) &&
|
|
2318
2369
|
collIsEmpty(tablesListeners[mutator]);
|
|
2319
|
-
if (!
|
|
2370
|
+
if (!emptyIdAndHasListeners || !emptyOtherListeners) {
|
|
2320
2371
|
const changes = mutator
|
|
2321
2372
|
? [
|
|
2322
2373
|
mapClone(changedTableIds),
|
|
@@ -2334,12 +2385,17 @@ const createStore = () => {
|
|
|
2334
2385
|
changedCellIds,
|
|
2335
2386
|
changedCells,
|
|
2336
2387
|
];
|
|
2337
|
-
if (!
|
|
2338
|
-
|
|
2388
|
+
if (!emptyIdAndHasListeners) {
|
|
2389
|
+
callIdsAndHasListenersIfChanged(
|
|
2390
|
+
changes[0],
|
|
2391
|
+
tableIdsListeners[mutator],
|
|
2392
|
+
hasTableListeners[mutator],
|
|
2393
|
+
);
|
|
2339
2394
|
collForEach(changes[1], (changedIds, tableId) =>
|
|
2340
|
-
|
|
2341
|
-
tableCellIdsListeners[mutator],
|
|
2395
|
+
callIdsAndHasListenersIfChanged(
|
|
2342
2396
|
changedIds,
|
|
2397
|
+
tableCellIdsListeners[mutator],
|
|
2398
|
+
hasTableCellListeners[mutator],
|
|
2343
2399
|
[tableId],
|
|
2344
2400
|
),
|
|
2345
2401
|
);
|
|
@@ -2355,9 +2411,12 @@ const createStore = () => {
|
|
|
2355
2411
|
const calledSortableTableIds = setNew();
|
|
2356
2412
|
collForEach(changes[3], (changedIds, tableId) => {
|
|
2357
2413
|
if (
|
|
2358
|
-
|
|
2359
|
-
|
|
2360
|
-
|
|
2414
|
+
callIdsAndHasListenersIfChanged(
|
|
2415
|
+
changedIds,
|
|
2416
|
+
rowIdsListeners[mutator],
|
|
2417
|
+
hasRowListeners[mutator],
|
|
2418
|
+
[tableId],
|
|
2419
|
+
) &&
|
|
2361
2420
|
!emptySortedRowIdListeners
|
|
2362
2421
|
) {
|
|
2363
2422
|
callListeners(sortedRowIdsListeners[mutator], [tableId, null]);
|
|
@@ -2386,10 +2445,12 @@ const createStore = () => {
|
|
|
2386
2445
|
}
|
|
2387
2446
|
collForEach(changes[4], (rowCellIds, tableId) =>
|
|
2388
2447
|
collForEach(rowCellIds, (changedIds, rowId) =>
|
|
2389
|
-
|
|
2390
|
-
|
|
2391
|
-
|
|
2392
|
-
|
|
2448
|
+
callIdsAndHasListenersIfChanged(
|
|
2449
|
+
changedIds,
|
|
2450
|
+
cellIdsListeners[mutator],
|
|
2451
|
+
hasCellListeners[mutator],
|
|
2452
|
+
[tableId, rowId],
|
|
2453
|
+
),
|
|
2393
2454
|
),
|
|
2394
2455
|
);
|
|
2395
2456
|
}
|
|
@@ -2429,17 +2490,27 @@ const createStore = () => {
|
|
|
2429
2490
|
}
|
|
2430
2491
|
}
|
|
2431
2492
|
};
|
|
2432
|
-
const
|
|
2433
|
-
const
|
|
2493
|
+
const callValuesListenersForChanges = (mutator) => {
|
|
2494
|
+
const hasValuesNow = hasValues();
|
|
2495
|
+
if (hasValuesNow != hadValues) {
|
|
2496
|
+
callListeners(hasValuesListeners[mutator], void 0, hasValuesNow);
|
|
2497
|
+
}
|
|
2498
|
+
const emptyIdAndHasListeners =
|
|
2499
|
+
collIsEmpty(valueIdsListeners[mutator]) &&
|
|
2500
|
+
collIsEmpty(hasValueListeners[mutator]);
|
|
2434
2501
|
const emptyOtherListeners =
|
|
2435
2502
|
collIsEmpty(valueListeners[mutator]) &&
|
|
2436
2503
|
collIsEmpty(valuesListeners[mutator]);
|
|
2437
|
-
if (!
|
|
2504
|
+
if (!emptyIdAndHasListeners || !emptyOtherListeners) {
|
|
2438
2505
|
const changes = mutator
|
|
2439
2506
|
? [mapClone(changedValueIds), mapClone(changedValues)]
|
|
2440
2507
|
: [changedValueIds, changedValues];
|
|
2441
|
-
if (!
|
|
2442
|
-
|
|
2508
|
+
if (!emptyIdAndHasListeners) {
|
|
2509
|
+
callIdsAndHasListenersIfChanged(
|
|
2510
|
+
changes[0],
|
|
2511
|
+
valueIdsListeners[mutator],
|
|
2512
|
+
hasValueListeners[mutator],
|
|
2513
|
+
);
|
|
2443
2514
|
}
|
|
2444
2515
|
if (!emptyOtherListeners) {
|
|
2445
2516
|
let valuesChanged;
|
|
@@ -2812,7 +2883,7 @@ const createStore = () => {
|
|
|
2812
2883
|
}
|
|
2813
2884
|
callInvalidValueListeners(1);
|
|
2814
2885
|
if (valuesTouched) {
|
|
2815
|
-
|
|
2886
|
+
callValuesListenersForChanges(1);
|
|
2816
2887
|
}
|
|
2817
2888
|
if (doRollback?.(getTransactionChanges, getTransactionLog)) {
|
|
2818
2889
|
collForEach(changedCells, (table, tableId) =>
|
|
@@ -2840,7 +2911,7 @@ const createStore = () => {
|
|
|
2840
2911
|
}
|
|
2841
2912
|
callInvalidValueListeners(0);
|
|
2842
2913
|
if (valuesTouched) {
|
|
2843
|
-
|
|
2914
|
+
callValuesListenersForChanges(0);
|
|
2844
2915
|
}
|
|
2845
2916
|
callListeners(
|
|
2846
2917
|
finishTransactionListeners[1],
|
|
@@ -2850,6 +2921,8 @@ const createStore = () => {
|
|
|
2850
2921
|
);
|
|
2851
2922
|
transactions = 0;
|
|
2852
2923
|
cellsTouched = valuesTouched = false;
|
|
2924
|
+
hadTables = hasTables();
|
|
2925
|
+
hadValues = hasValues();
|
|
2853
2926
|
arrayForEach(
|
|
2854
2927
|
[
|
|
2855
2928
|
changedTableIds,
|
|
@@ -2946,19 +3019,26 @@ const createStore = () => {
|
|
|
2946
3019
|
return store;
|
|
2947
3020
|
};
|
|
2948
3021
|
const getListenerStats = () => ({
|
|
3022
|
+
hasTables: pairCollSize2(hasTablesListeners),
|
|
2949
3023
|
tables: pairCollSize2(tablesListeners),
|
|
2950
3024
|
tableIds: pairCollSize2(tableIdsListeners),
|
|
2951
|
-
|
|
3025
|
+
hasTable: pairCollSize2(hasTableListeners),
|
|
2952
3026
|
table: pairCollSize2(tableListeners),
|
|
3027
|
+
tableCellIds: pairCollSize2(tableCellIdsListeners),
|
|
3028
|
+
hasTableCell: pairCollSize2(hasTableCellListeners, collSize3),
|
|
2953
3029
|
rowCount: pairCollSize2(rowCountListeners),
|
|
2954
3030
|
rowIds: pairCollSize2(rowIdsListeners),
|
|
2955
3031
|
sortedRowIds: pairCollSize2(sortedRowIdsListeners),
|
|
3032
|
+
hasRow: pairCollSize2(hasRowListeners, collSize3),
|
|
2956
3033
|
row: pairCollSize2(rowListeners, collSize3),
|
|
2957
3034
|
cellIds: pairCollSize2(cellIdsListeners, collSize3),
|
|
3035
|
+
hasCell: pairCollSize2(hasCellListeners, collSize4),
|
|
2958
3036
|
cell: pairCollSize2(cellListeners, collSize4),
|
|
2959
3037
|
invalidCell: pairCollSize2(invalidCellListeners, collSize4),
|
|
3038
|
+
hasValues: pairCollSize2(hasValuesListeners),
|
|
2960
3039
|
values: pairCollSize2(valuesListeners),
|
|
2961
3040
|
valueIds: pairCollSize2(valueIdsListeners),
|
|
3041
|
+
hasValue: pairCollSize2(hasValueListeners),
|
|
2962
3042
|
value: pairCollSize2(valueListeners),
|
|
2963
3043
|
invalidValue: pairCollSize2(invalidValueListeners),
|
|
2964
3044
|
transaction:
|
|
@@ -3043,14 +3123,39 @@ const createStore = () => {
|
|
|
3043
3123
|
};
|
|
3044
3124
|
objMap(
|
|
3045
3125
|
{
|
|
3126
|
+
[HAS + TABLES]: [0, hasTablesListeners, [], () => [hasTables()]],
|
|
3046
3127
|
[TABLES]: [0, tablesListeners],
|
|
3047
3128
|
[TABLE_IDS]: [0, tableIdsListeners],
|
|
3129
|
+
[HAS + TABLE]: [
|
|
3130
|
+
1,
|
|
3131
|
+
hasTableListeners,
|
|
3132
|
+
[getTableIds],
|
|
3133
|
+
(ids) => [hasTable(...ids)],
|
|
3134
|
+
],
|
|
3048
3135
|
[TABLE]: [1, tableListeners, [getTableIds]],
|
|
3049
3136
|
[TABLE + CELL_IDS]: [1, tableCellIdsListeners, [getTableIds]],
|
|
3137
|
+
[HAS + TABLE + CELL]: [
|
|
3138
|
+
2,
|
|
3139
|
+
hasTableCellListeners,
|
|
3140
|
+
[getTableIds, getTableCellIds],
|
|
3141
|
+
(ids) => [hasTableCell(...ids)],
|
|
3142
|
+
],
|
|
3050
3143
|
[ROW_COUNT]: [1, rowCountListeners, [getTableIds]],
|
|
3051
3144
|
[ROW_IDS]: [1, rowIdsListeners, [getTableIds]],
|
|
3145
|
+
[HAS + ROW]: [
|
|
3146
|
+
2,
|
|
3147
|
+
hasRowListeners,
|
|
3148
|
+
[getTableIds, getRowIds],
|
|
3149
|
+
(ids) => [hasRow(...ids)],
|
|
3150
|
+
],
|
|
3052
3151
|
[ROW]: [2, rowListeners, [getTableIds, getRowIds]],
|
|
3053
3152
|
[CELL_IDS]: [2, cellIdsListeners, [getTableIds, getRowIds]],
|
|
3153
|
+
[HAS + CELL]: [
|
|
3154
|
+
3,
|
|
3155
|
+
hasCellListeners,
|
|
3156
|
+
[getTableIds, getRowIds, getCellIds],
|
|
3157
|
+
(ids) => [hasCell(...ids)],
|
|
3158
|
+
],
|
|
3054
3159
|
[CELL]: [
|
|
3055
3160
|
3,
|
|
3056
3161
|
cellListeners,
|
|
@@ -3058,8 +3163,15 @@ const createStore = () => {
|
|
|
3058
3163
|
(ids) => pairNew(getCell(...ids)),
|
|
3059
3164
|
],
|
|
3060
3165
|
InvalidCell: [3, invalidCellListeners],
|
|
3166
|
+
[HAS + VALUES]: [0, hasValuesListeners, [], () => [hasValues()]],
|
|
3061
3167
|
[VALUES]: [0, valuesListeners],
|
|
3062
3168
|
[VALUE_IDS]: [0, valueIdsListeners],
|
|
3169
|
+
[HAS + VALUE]: [
|
|
3170
|
+
1,
|
|
3171
|
+
hasValueListeners,
|
|
3172
|
+
[getValueIds],
|
|
3173
|
+
(ids) => [hasValue(...ids)],
|
|
3174
|
+
],
|
|
3063
3175
|
[VALUE]: [
|
|
3064
3176
|
1,
|
|
3065
3177
|
valueListeners,
|