tinybase 7.0.0-beta.1 → 7.0.0-beta.3
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/@types/common/index.d.ts +1 -1
- package/@types/mergeable-store/index.d.ts +2 -1
- package/@types/mergeable-store/with-schemas/index.d.ts +5 -3
- package/@types/omni/index.d.ts +2 -0
- package/@types/omni/with-schemas/index.d.ts +2 -0
- package/@types/persisters/index.d.ts +4 -0
- package/@types/persisters/persister-automerge/index.d.ts +4 -6
- package/@types/persisters/persister-automerge/with-schemas/index.d.ts +7 -8
- package/@types/persisters/persister-browser/index.d.ts +97 -6
- package/@types/persisters/persister-browser/with-schemas/index.d.ts +113 -6
- package/@types/persisters/persister-cr-sqlite-wasm/index.d.ts +4 -0
- package/@types/persisters/persister-cr-sqlite-wasm/with-schemas/index.d.ts +7 -2
- package/@types/persisters/persister-durable-object-sql-storage/index.d.ts +6 -2
- package/@types/persisters/persister-durable-object-sql-storage/with-schemas/index.d.ts +5 -0
- package/@types/persisters/persister-durable-object-storage/index.d.ts +1 -2
- package/@types/persisters/persister-durable-object-storage/with-schemas/index.d.ts +3 -2
- package/@types/persisters/persister-electric-sql/index.d.ts +4 -0
- package/@types/persisters/persister-electric-sql/with-schemas/index.d.ts +7 -2
- package/@types/persisters/persister-expo-sqlite/index.d.ts +5 -2
- package/@types/persisters/persister-expo-sqlite/with-schemas/index.d.ts +7 -2
- package/@types/persisters/persister-file/index.d.ts +1 -2
- package/@types/persisters/persister-file/with-schemas/index.d.ts +3 -2
- package/@types/persisters/persister-indexed-db/with-schemas/index.d.ts +3 -2
- package/@types/persisters/persister-libsql/index.d.ts +4 -0
- package/@types/persisters/persister-libsql/with-schemas/index.d.ts +7 -2
- package/@types/persisters/persister-partykit-client/with-schemas/index.d.ts +3 -2
- package/@types/persisters/persister-pglite/index.d.ts +7 -3
- package/@types/persisters/persister-pglite/with-schemas/index.d.ts +9 -3
- package/@types/persisters/persister-postgres/index.d.ts +5 -2
- package/@types/persisters/persister-postgres/with-schemas/index.d.ts +7 -2
- package/@types/persisters/persister-powersync/index.d.ts +4 -0
- package/@types/persisters/persister-powersync/with-schemas/index.d.ts +7 -2
- package/@types/persisters/persister-react-native-mmkv/index.d.ts +117 -0
- package/@types/persisters/persister-react-native-mmkv/with-schemas/index.d.ts +133 -0
- package/@types/persisters/persister-react-native-sqlite/index.d.ts +184 -0
- package/@types/persisters/persister-react-native-sqlite/with-schemas/index.d.ts +207 -0
- package/@types/persisters/persister-remote/with-schemas/index.d.ts +3 -2
- package/@types/persisters/persister-sqlite-bun/index.d.ts +5 -2
- package/@types/persisters/persister-sqlite-bun/with-schemas/index.d.ts +7 -2
- package/@types/persisters/persister-sqlite-wasm/index.d.ts +6 -2
- package/@types/persisters/persister-sqlite-wasm/with-schemas/index.d.ts +8 -2
- package/@types/persisters/persister-sqlite3/index.d.ts +5 -2
- package/@types/persisters/persister-sqlite3/with-schemas/index.d.ts +7 -2
- package/@types/persisters/persister-yjs/with-schemas/index.d.ts +3 -2
- package/@types/persisters/with-schemas/index.d.ts +4 -0
- package/@types/queries/index.d.ts +1 -1
- package/@types/queries/with-schemas/index.d.ts +4 -8
- package/@types/store/index.d.ts +34 -19
- package/@types/store/with-schemas/index.d.ts +28 -13
- package/@types/synchronizers/index.d.ts +1 -0
- package/@types/synchronizers/synchronizer-broadcast-channel/with-schemas/index.d.ts +3 -2
- package/@types/synchronizers/synchronizer-local/with-schemas/index.d.ts +3 -2
- package/@types/synchronizers/synchronizer-ws-client/index.d.ts +4 -2
- package/@types/synchronizers/synchronizer-ws-client/with-schemas/index.d.ts +1 -0
- package/@types/synchronizers/synchronizer-ws-server/index.d.ts +7 -7
- package/@types/synchronizers/synchronizer-ws-server/with-schemas/index.d.ts +7 -7
- package/@types/synchronizers/synchronizer-ws-server-durable-object/index.d.ts +1 -0
- package/@types/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.d.ts +1 -0
- package/@types/synchronizers/synchronizer-ws-server-simple/index.d.ts +1 -1
- package/@types/synchronizers/synchronizer-ws-server-simple/with-schemas/index.d.ts +1 -1
- package/@types/synchronizers/with-schemas/index.d.ts +4 -2
- package/@types/ui-react/index.d.ts +6 -1
- package/@types/ui-react/with-schemas/index.d.ts +6 -1
- package/@types/ui-react-dom/index.d.ts +153 -20
- package/@types/ui-react-dom/with-schemas/index.d.ts +72 -20
- package/@types/ui-react-inspector/index.d.ts +8 -0
- package/@types/ui-react-inspector/with-schemas/index.d.ts +27 -1925
- package/agents.md +343 -0
- package/checkpoints/index.js +11 -6
- package/checkpoints/with-schemas/index.js +11 -6
- package/common/index.js +8 -4
- package/common/with-schemas/index.js +8 -4
- package/index.js +63 -31
- package/indexes/index.js +10 -5
- package/indexes/with-schemas/index.js +10 -5
- package/mergeable-store/index.js +54 -22
- package/mergeable-store/with-schemas/index.js +54 -22
- package/metrics/index.js +10 -5
- package/metrics/with-schemas/index.js +10 -5
- package/min/checkpoints/index.js +1 -1
- package/min/checkpoints/index.js.gz +0 -0
- package/min/checkpoints/with-schemas/index.js +1 -1
- package/min/checkpoints/with-schemas/index.js.gz +0 -0
- package/min/common/index.js +1 -1
- package/min/common/index.js.gz +0 -0
- package/min/common/with-schemas/index.js +1 -1
- package/min/common/with-schemas/index.js.gz +0 -0
- package/min/index.js +1 -1
- package/min/index.js.gz +0 -0
- package/min/indexes/index.js +1 -1
- package/min/indexes/index.js.gz +0 -0
- package/min/indexes/with-schemas/index.js +1 -1
- package/min/indexes/with-schemas/index.js.gz +0 -0
- package/min/mergeable-store/index.js +1 -1
- package/min/mergeable-store/index.js.gz +0 -0
- package/min/mergeable-store/with-schemas/index.js +1 -1
- package/min/mergeable-store/with-schemas/index.js.gz +0 -0
- package/min/metrics/index.js +1 -1
- package/min/metrics/index.js.gz +0 -0
- package/min/metrics/with-schemas/index.js +1 -1
- package/min/metrics/with-schemas/index.js.gz +0 -0
- package/min/omni/index.js +1 -1
- package/min/omni/index.js.gz +0 -0
- package/min/omni/with-schemas/index.js +1 -1
- package/min/omni/with-schemas/index.js.gz +0 -0
- package/min/persisters/index.js +1 -1
- package/min/persisters/index.js.gz +0 -0
- package/min/persisters/persister-automerge/index.js +1 -1
- package/min/persisters/persister-automerge/index.js.gz +0 -0
- package/min/persisters/persister-automerge/with-schemas/index.js +1 -1
- package/min/persisters/persister-automerge/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-browser/index.js +1 -1
- package/min/persisters/persister-browser/index.js.gz +0 -0
- package/min/persisters/persister-browser/with-schemas/index.js +1 -1
- package/min/persisters/persister-browser/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-cr-sqlite-wasm/index.js +1 -1
- package/min/persisters/persister-cr-sqlite-wasm/index.js.gz +0 -0
- package/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +1 -1
- package/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-durable-object-sql-storage/index.js +1 -1
- package/min/persisters/persister-durable-object-sql-storage/index.js.gz +0 -0
- package/min/persisters/persister-durable-object-sql-storage/with-schemas/index.js +1 -1
- package/min/persisters/persister-durable-object-sql-storage/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-durable-object-storage/index.js +1 -1
- package/min/persisters/persister-durable-object-storage/index.js.gz +0 -0
- package/min/persisters/persister-durable-object-storage/with-schemas/index.js +1 -1
- package/min/persisters/persister-durable-object-storage/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-electric-sql/index.js +1 -1
- package/min/persisters/persister-electric-sql/index.js.gz +0 -0
- package/min/persisters/persister-electric-sql/with-schemas/index.js +1 -1
- package/min/persisters/persister-electric-sql/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-expo-sqlite/index.js +1 -1
- package/min/persisters/persister-expo-sqlite/index.js.gz +0 -0
- package/min/persisters/persister-expo-sqlite/with-schemas/index.js +1 -1
- package/min/persisters/persister-expo-sqlite/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-file/index.js +1 -1
- package/min/persisters/persister-file/index.js.gz +0 -0
- package/min/persisters/persister-file/with-schemas/index.js +1 -1
- package/min/persisters/persister-file/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-indexed-db/index.js +1 -1
- package/min/persisters/persister-indexed-db/index.js.gz +0 -0
- package/min/persisters/persister-indexed-db/with-schemas/index.js +1 -1
- package/min/persisters/persister-indexed-db/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-libsql/index.js +1 -1
- package/min/persisters/persister-libsql/index.js.gz +0 -0
- package/min/persisters/persister-libsql/with-schemas/index.js +1 -1
- package/min/persisters/persister-libsql/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-partykit-client/index.js +1 -1
- package/min/persisters/persister-partykit-client/index.js.gz +0 -0
- package/min/persisters/persister-partykit-client/with-schemas/index.js +1 -1
- package/min/persisters/persister-partykit-client/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-partykit-server/index.js +1 -1
- package/min/persisters/persister-partykit-server/index.js.gz +0 -0
- package/min/persisters/persister-partykit-server/with-schemas/index.js +1 -1
- package/min/persisters/persister-partykit-server/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-pglite/index.js +1 -1
- package/min/persisters/persister-pglite/index.js.gz +0 -0
- package/min/persisters/persister-pglite/with-schemas/index.js +1 -1
- package/min/persisters/persister-pglite/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-postgres/index.js +1 -1
- package/min/persisters/persister-postgres/index.js.gz +0 -0
- package/min/persisters/persister-postgres/with-schemas/index.js +1 -1
- package/min/persisters/persister-postgres/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-powersync/index.js +1 -1
- package/min/persisters/persister-powersync/index.js.gz +0 -0
- package/min/persisters/persister-powersync/with-schemas/index.js +1 -1
- package/min/persisters/persister-powersync/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-react-native-mmkv/index.js +1 -0
- package/min/persisters/persister-react-native-mmkv/index.js.gz +0 -0
- package/min/persisters/persister-react-native-mmkv/with-schemas/index.js +1 -0
- package/min/persisters/persister-react-native-mmkv/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-react-native-sqlite/index.js +1 -0
- package/min/persisters/persister-react-native-sqlite/index.js.gz +0 -0
- package/min/persisters/persister-react-native-sqlite/with-schemas/index.js +1 -0
- package/min/persisters/persister-react-native-sqlite/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-remote/index.js +1 -1
- package/min/persisters/persister-remote/index.js.gz +0 -0
- package/min/persisters/persister-remote/with-schemas/index.js +1 -1
- package/min/persisters/persister-remote/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-sqlite-bun/index.js +1 -1
- package/min/persisters/persister-sqlite-bun/index.js.gz +0 -0
- package/min/persisters/persister-sqlite-bun/with-schemas/index.js +1 -1
- package/min/persisters/persister-sqlite-bun/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-sqlite-wasm/index.js +1 -1
- package/min/persisters/persister-sqlite-wasm/index.js.gz +0 -0
- package/min/persisters/persister-sqlite-wasm/with-schemas/index.js +1 -1
- package/min/persisters/persister-sqlite-wasm/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-sqlite3/index.js +1 -1
- package/min/persisters/persister-sqlite3/index.js.gz +0 -0
- package/min/persisters/persister-sqlite3/with-schemas/index.js +1 -1
- package/min/persisters/persister-sqlite3/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-yjs/index.js +1 -1
- package/min/persisters/persister-yjs/index.js.gz +0 -0
- package/min/persisters/persister-yjs/with-schemas/index.js +1 -1
- package/min/persisters/persister-yjs/with-schemas/index.js.gz +0 -0
- package/min/persisters/with-schemas/index.js +1 -1
- package/min/persisters/with-schemas/index.js.gz +0 -0
- package/min/queries/index.js +1 -1
- package/min/queries/index.js.gz +0 -0
- package/min/queries/with-schemas/index.js +1 -1
- package/min/queries/with-schemas/index.js.gz +0 -0
- package/min/relationships/index.js +1 -1
- package/min/relationships/index.js.gz +0 -0
- package/min/relationships/with-schemas/index.js +1 -1
- package/min/relationships/with-schemas/index.js.gz +0 -0
- package/min/store/index.js +1 -1
- package/min/store/index.js.gz +0 -0
- package/min/store/with-schemas/index.js +1 -1
- package/min/store/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/index.js +1 -1
- package/min/synchronizers/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-broadcast-channel/index.js +1 -1
- package/min/synchronizers/synchronizer-broadcast-channel/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +1 -1
- package/min/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-local/index.js +1 -1
- package/min/synchronizers/synchronizer-local/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-local/with-schemas/index.js +1 -1
- package/min/synchronizers/synchronizer-local/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-client/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-client/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-client/with-schemas/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-client/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-server/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-server/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-server/with-schemas/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-server/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-server-durable-object/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-server-durable-object/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-server-simple/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-server-simple/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-server-simple/with-schemas/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-server-simple/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/with-schemas/index.js +1 -1
- package/min/synchronizers/with-schemas/index.js.gz +0 -0
- package/min/ui-react/index.js +1 -1
- package/min/ui-react/index.js.gz +0 -0
- package/min/ui-react/with-schemas/index.js +1 -1
- package/min/ui-react/with-schemas/index.js.gz +0 -0
- package/min/ui-react-dom/index.js +1 -1
- package/min/ui-react-dom/index.js.gz +0 -0
- package/min/ui-react-dom/with-schemas/index.js +1 -1
- package/min/ui-react-dom/with-schemas/index.js.gz +0 -0
- package/min/ui-react-inspector/index.js +1 -1
- package/min/ui-react-inspector/index.js.gz +0 -0
- package/min/ui-react-inspector/with-schemas/index.js +1 -1
- package/min/ui-react-inspector/with-schemas/index.js.gz +0 -0
- package/min/with-schemas/index.js +1 -1
- package/min/with-schemas/index.js.gz +0 -0
- package/omni/index.js +2178 -1203
- package/omni/with-schemas/index.js +2178 -1203
- package/package.json +91 -11
- package/persisters/index.js +16 -10
- package/persisters/persister-automerge/index.js +15 -9
- package/persisters/persister-automerge/with-schemas/index.js +15 -9
- package/persisters/persister-browser/index.js +41 -9
- package/persisters/persister-browser/with-schemas/index.js +41 -9
- package/persisters/persister-cr-sqlite-wasm/index.js +16 -10
- package/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +16 -10
- package/persisters/persister-durable-object-sql-storage/index.js +16 -10
- package/persisters/persister-durable-object-sql-storage/with-schemas/index.js +16 -10
- package/persisters/persister-durable-object-storage/index.js +14 -8
- package/persisters/persister-durable-object-storage/with-schemas/index.js +14 -8
- package/persisters/persister-electric-sql/index.js +16 -10
- package/persisters/persister-electric-sql/with-schemas/index.js +16 -10
- package/persisters/persister-expo-sqlite/index.js +16 -10
- package/persisters/persister-expo-sqlite/with-schemas/index.js +16 -10
- package/persisters/persister-file/index.js +14 -8
- package/persisters/persister-file/with-schemas/index.js +14 -8
- package/persisters/persister-indexed-db/index.js +14 -8
- package/persisters/persister-indexed-db/with-schemas/index.js +14 -8
- package/persisters/persister-libsql/index.js +16 -10
- package/persisters/persister-libsql/with-schemas/index.js +16 -10
- package/persisters/persister-partykit-client/index.js +14 -8
- package/persisters/persister-partykit-client/with-schemas/index.js +14 -8
- package/persisters/persister-partykit-server/index.js +7 -3
- package/persisters/persister-partykit-server/with-schemas/index.js +7 -3
- package/persisters/persister-pglite/index.js +15 -9
- package/persisters/persister-pglite/with-schemas/index.js +15 -9
- package/persisters/persister-postgres/index.js +15 -9
- package/persisters/persister-postgres/with-schemas/index.js +15 -9
- package/persisters/persister-powersync/index.js +16 -10
- package/persisters/persister-powersync/with-schemas/index.js +16 -10
- package/persisters/persister-react-native-mmkv/index.js +465 -0
- package/persisters/persister-react-native-mmkv/with-schemas/index.js +465 -0
- package/persisters/persister-react-native-sqlite/index.js +1195 -0
- package/persisters/persister-react-native-sqlite/with-schemas/index.js +1195 -0
- package/persisters/persister-remote/index.js +16 -10
- package/persisters/persister-remote/with-schemas/index.js +16 -10
- package/persisters/persister-sqlite-bun/index.js +16 -10
- package/persisters/persister-sqlite-bun/with-schemas/index.js +16 -10
- package/persisters/persister-sqlite-wasm/index.js +16 -10
- package/persisters/persister-sqlite-wasm/with-schemas/index.js +16 -10
- package/persisters/persister-sqlite3/index.js +16 -10
- package/persisters/persister-sqlite3/with-schemas/index.js +16 -10
- package/persisters/persister-yjs/index.js +20 -12
- package/persisters/persister-yjs/with-schemas/index.js +20 -12
- package/persisters/with-schemas/index.js +16 -10
- package/queries/index.js +20 -12
- package/queries/with-schemas/index.js +20 -12
- package/readme.md +13 -13
- package/relationships/index.js +10 -5
- package/relationships/with-schemas/index.js +10 -5
- package/releases.md +179 -41
- package/store/index.js +50 -18
- package/store/with-schemas/index.js +50 -18
- package/synchronizers/index.js +16 -10
- package/synchronizers/synchronizer-broadcast-channel/index.js +17 -11
- package/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +17 -11
- package/synchronizers/synchronizer-local/index.js +17 -11
- package/synchronizers/synchronizer-local/with-schemas/index.js +17 -11
- package/synchronizers/synchronizer-ws-client/index.js +16 -10
- package/synchronizers/synchronizer-ws-client/with-schemas/index.js +16 -10
- package/synchronizers/synchronizer-ws-server/index.js +16 -10
- package/synchronizers/synchronizer-ws-server/with-schemas/index.js +16 -10
- package/synchronizers/synchronizer-ws-server-durable-object/index.js +16 -10
- package/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js +16 -10
- package/synchronizers/synchronizer-ws-server-simple/index.js +8 -4
- package/synchronizers/synchronizer-ws-server-simple/with-schemas/index.js +8 -4
- package/synchronizers/with-schemas/index.js +16 -10
- package/ui-react/index.js +408 -374
- package/ui-react/with-schemas/index.js +408 -374
- package/ui-react-dom/index.js +883 -437
- package/ui-react-dom/with-schemas/index.js +883 -437
- package/ui-react-inspector/index.js +1761 -556
- package/ui-react-inspector/with-schemas/index.js +1761 -556
- package/with-schemas/index.js +63 -31
package/store/index.js
CHANGED
|
@@ -6,6 +6,7 @@ const NUMBER = getTypeOf(0);
|
|
|
6
6
|
const FUNCTION = getTypeOf(getTypeOf);
|
|
7
7
|
const TYPE = 'type';
|
|
8
8
|
const DEFAULT = 'default';
|
|
9
|
+
const ALLOW_NULL = 'allowNull';
|
|
9
10
|
const LISTENER = 'Listener';
|
|
10
11
|
const ADD = 'add';
|
|
11
12
|
const HAS = 'Has';
|
|
@@ -23,11 +24,17 @@ const VALUES = VALUE + 's';
|
|
|
23
24
|
const VALUE_IDS = VALUE + IDS;
|
|
24
25
|
const id = (key) => EMPTY_STRING + key;
|
|
25
26
|
|
|
27
|
+
const getIfNotFunction =
|
|
28
|
+
(predicate = isNullish) =>
|
|
29
|
+
(value, then, otherwise) =>
|
|
30
|
+
predicate(value) ? otherwise?.() : then(value);
|
|
26
31
|
const isFiniteNumber = isFinite;
|
|
27
32
|
const isInstanceOf = (thing, cls) => thing instanceof cls;
|
|
28
|
-
const
|
|
29
|
-
const
|
|
30
|
-
|
|
33
|
+
const isNullish = (thing) => thing == null;
|
|
34
|
+
const isUndefined = (thing) => thing === void 0;
|
|
35
|
+
const isNull = (thing) => thing === null;
|
|
36
|
+
const ifNotNullish = getIfNotFunction(isNullish);
|
|
37
|
+
const ifNotUndefined = getIfNotFunction(isUndefined);
|
|
31
38
|
const isTypeStringOrBoolean = (type) => type == STRING || type == BOOLEAN;
|
|
32
39
|
const isFunction = (thing) => getTypeOf(thing) == FUNCTION;
|
|
33
40
|
const isArray = (thing) => Array.isArray(thing);
|
|
@@ -56,6 +63,9 @@ const arrayPush = (array, ...values) => array.push(...values);
|
|
|
56
63
|
const arrayShift = (array) => array.shift();
|
|
57
64
|
|
|
58
65
|
const getCellOrValueType = (cellOrValue) => {
|
|
66
|
+
if (isNull(cellOrValue)) {
|
|
67
|
+
return 'null';
|
|
68
|
+
}
|
|
59
69
|
const type = getTypeOf(cellOrValue);
|
|
60
70
|
return isTypeStringOrBoolean(type) ||
|
|
61
71
|
(type == NUMBER && isFiniteNumber(cellOrValue))
|
|
@@ -87,12 +97,12 @@ const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
|
|
|
87
97
|
const objFrozen = object.isFrozen;
|
|
88
98
|
const objEntries = object.entries;
|
|
89
99
|
const isObject = (obj) =>
|
|
90
|
-
!
|
|
91
|
-
|
|
100
|
+
!isNullish(obj) &&
|
|
101
|
+
ifNotNullish(
|
|
92
102
|
getPrototypeOf(obj),
|
|
93
103
|
(objPrototype) =>
|
|
94
104
|
objPrototype == object.prototype ||
|
|
95
|
-
|
|
105
|
+
isNullish(getPrototypeOf(objPrototype)),
|
|
96
106
|
|
|
97
107
|
/* istanbul ignore next */
|
|
98
108
|
() => true,
|
|
@@ -115,7 +125,7 @@ const objSize = (obj) => size(objIds(obj));
|
|
|
115
125
|
const objIsEmpty = (obj) => isObject(obj) && objSize(obj) == 0;
|
|
116
126
|
const objValidate = (obj, validateChild, onInvalidObj, emptyIsValid = 0) => {
|
|
117
127
|
if (
|
|
118
|
-
|
|
128
|
+
isNullish(obj) ||
|
|
119
129
|
!isObject(obj) ||
|
|
120
130
|
(!emptyIsValid && objIsEmpty(obj)) ||
|
|
121
131
|
objFrozen(obj)
|
|
@@ -139,7 +149,7 @@ const mapForEach = (map, cb) =>
|
|
|
139
149
|
const mapMap = (coll, cb) =>
|
|
140
150
|
arrayMap([...(coll?.entries() ?? [])], ([key, value]) => cb(value, key));
|
|
141
151
|
const mapSet = (map, key, value) =>
|
|
142
|
-
|
|
152
|
+
value === void 0 ? (collDel(map, key), map) : map?.set(key, value);
|
|
143
153
|
const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
|
|
144
154
|
if (!collHas(map, key)) {
|
|
145
155
|
mapSet(map, key, getDefaultValue());
|
|
@@ -298,7 +308,7 @@ const getListenerFunctions = (getThing) => {
|
|
|
298
308
|
const index = size(ids);
|
|
299
309
|
if (index == size(path)) {
|
|
300
310
|
listener(thing, ...ids, ...extraArgsGetter(ids));
|
|
301
|
-
} else if (
|
|
311
|
+
} else if (isNull(path[index])) {
|
|
302
312
|
arrayForEach(pathGetters[index]?.(...ids) ?? [], (id2) =>
|
|
303
313
|
callWithIds(...ids, id2),
|
|
304
314
|
);
|
|
@@ -383,14 +393,22 @@ const createStore = () => {
|
|
|
383
393
|
const validateValuesSchema = (valuesSchema) =>
|
|
384
394
|
objValidate(valuesSchema, validateCellOrValueSchema);
|
|
385
395
|
const validateCellOrValueSchema = (schema) => {
|
|
386
|
-
if (
|
|
396
|
+
if (
|
|
397
|
+
!objValidate(schema, (_child, id2) =>
|
|
398
|
+
arrayHas([TYPE, DEFAULT, ALLOW_NULL], id2),
|
|
399
|
+
)
|
|
400
|
+
) {
|
|
387
401
|
return false;
|
|
388
402
|
}
|
|
389
403
|
const type = schema[TYPE];
|
|
390
404
|
if (!isTypeStringOrBoolean(type) && type != NUMBER) {
|
|
391
405
|
return false;
|
|
392
406
|
}
|
|
393
|
-
|
|
407
|
+
const defaultValue = schema[DEFAULT];
|
|
408
|
+
if (isNull(defaultValue) && !schema[ALLOW_NULL]) {
|
|
409
|
+
return false;
|
|
410
|
+
}
|
|
411
|
+
if (!isNull(defaultValue) && getCellOrValueType(defaultValue) != type) {
|
|
394
412
|
objDel(schema, DEFAULT);
|
|
395
413
|
}
|
|
396
414
|
return true;
|
|
@@ -427,9 +445,19 @@ const createStore = () => {
|
|
|
427
445
|
? ifNotUndefined(
|
|
428
446
|
mapGet(mapGet(tablesSchemaMap, tableId), cellId),
|
|
429
447
|
(cellSchema) =>
|
|
430
|
-
|
|
431
|
-
?
|
|
432
|
-
|
|
448
|
+
isNull(cell)
|
|
449
|
+
? cellSchema[ALLOW_NULL]
|
|
450
|
+
? cell
|
|
451
|
+
: cellInvalid(tableId, rowId, cellId, cell, cellSchema[DEFAULT])
|
|
452
|
+
: getCellOrValueType(cell) == cellSchema[TYPE]
|
|
453
|
+
? cell
|
|
454
|
+
: cellInvalid(
|
|
455
|
+
tableId,
|
|
456
|
+
rowId,
|
|
457
|
+
cellId,
|
|
458
|
+
cell,
|
|
459
|
+
cellSchema[DEFAULT],
|
|
460
|
+
),
|
|
433
461
|
() => cellInvalid(tableId, rowId, cellId, cell),
|
|
434
462
|
)
|
|
435
463
|
: isUndefined(getCellOrValueType(cell))
|
|
@@ -454,9 +482,13 @@ const createStore = () => {
|
|
|
454
482
|
? ifNotUndefined(
|
|
455
483
|
mapGet(valuesSchemaMap, valueId),
|
|
456
484
|
(valueSchema) =>
|
|
457
|
-
|
|
458
|
-
?
|
|
459
|
-
|
|
485
|
+
isNull(value)
|
|
486
|
+
? valueSchema[ALLOW_NULL]
|
|
487
|
+
? value
|
|
488
|
+
: valueInvalid(valueId, value, valueSchema[DEFAULT])
|
|
489
|
+
: getCellOrValueType(value) == valueSchema[TYPE]
|
|
490
|
+
? value
|
|
491
|
+
: valueInvalid(valueId, value, valueSchema[DEFAULT]),
|
|
460
492
|
() => valueInvalid(valueId, value),
|
|
461
493
|
)
|
|
462
494
|
: isUndefined(getCellOrValueType(value))
|
|
@@ -699,7 +731,7 @@ const createStore = () => {
|
|
|
699
731
|
mapSet(
|
|
700
732
|
cellIds,
|
|
701
733
|
cellId,
|
|
702
|
-
count != -addedOrRemoved ? count + addedOrRemoved :
|
|
734
|
+
count != -addedOrRemoved ? count + addedOrRemoved : void 0,
|
|
703
735
|
);
|
|
704
736
|
idsChanged(
|
|
705
737
|
mapEnsure(mapEnsure(changedCellIds, tableId, mapNew), rowId, mapNew),
|
|
@@ -6,6 +6,7 @@ const NUMBER = getTypeOf(0);
|
|
|
6
6
|
const FUNCTION = getTypeOf(getTypeOf);
|
|
7
7
|
const TYPE = 'type';
|
|
8
8
|
const DEFAULT = 'default';
|
|
9
|
+
const ALLOW_NULL = 'allowNull';
|
|
9
10
|
const LISTENER = 'Listener';
|
|
10
11
|
const ADD = 'add';
|
|
11
12
|
const HAS = 'Has';
|
|
@@ -23,11 +24,17 @@ const VALUES = VALUE + 's';
|
|
|
23
24
|
const VALUE_IDS = VALUE + IDS;
|
|
24
25
|
const id = (key) => EMPTY_STRING + key;
|
|
25
26
|
|
|
27
|
+
const getIfNotFunction =
|
|
28
|
+
(predicate = isNullish) =>
|
|
29
|
+
(value, then, otherwise) =>
|
|
30
|
+
predicate(value) ? otherwise?.() : then(value);
|
|
26
31
|
const isFiniteNumber = isFinite;
|
|
27
32
|
const isInstanceOf = (thing, cls) => thing instanceof cls;
|
|
28
|
-
const
|
|
29
|
-
const
|
|
30
|
-
|
|
33
|
+
const isNullish = (thing) => thing == null;
|
|
34
|
+
const isUndefined = (thing) => thing === void 0;
|
|
35
|
+
const isNull = (thing) => thing === null;
|
|
36
|
+
const ifNotNullish = getIfNotFunction(isNullish);
|
|
37
|
+
const ifNotUndefined = getIfNotFunction(isUndefined);
|
|
31
38
|
const isTypeStringOrBoolean = (type) => type == STRING || type == BOOLEAN;
|
|
32
39
|
const isFunction = (thing) => getTypeOf(thing) == FUNCTION;
|
|
33
40
|
const isArray = (thing) => Array.isArray(thing);
|
|
@@ -56,6 +63,9 @@ const arrayPush = (array, ...values) => array.push(...values);
|
|
|
56
63
|
const arrayShift = (array) => array.shift();
|
|
57
64
|
|
|
58
65
|
const getCellOrValueType = (cellOrValue) => {
|
|
66
|
+
if (isNull(cellOrValue)) {
|
|
67
|
+
return 'null';
|
|
68
|
+
}
|
|
59
69
|
const type = getTypeOf(cellOrValue);
|
|
60
70
|
return isTypeStringOrBoolean(type) ||
|
|
61
71
|
(type == NUMBER && isFiniteNumber(cellOrValue))
|
|
@@ -87,12 +97,12 @@ const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
|
|
|
87
97
|
const objFrozen = object.isFrozen;
|
|
88
98
|
const objEntries = object.entries;
|
|
89
99
|
const isObject = (obj) =>
|
|
90
|
-
!
|
|
91
|
-
|
|
100
|
+
!isNullish(obj) &&
|
|
101
|
+
ifNotNullish(
|
|
92
102
|
getPrototypeOf(obj),
|
|
93
103
|
(objPrototype) =>
|
|
94
104
|
objPrototype == object.prototype ||
|
|
95
|
-
|
|
105
|
+
isNullish(getPrototypeOf(objPrototype)),
|
|
96
106
|
|
|
97
107
|
/* istanbul ignore next */
|
|
98
108
|
() => true,
|
|
@@ -115,7 +125,7 @@ const objSize = (obj) => size(objIds(obj));
|
|
|
115
125
|
const objIsEmpty = (obj) => isObject(obj) && objSize(obj) == 0;
|
|
116
126
|
const objValidate = (obj, validateChild, onInvalidObj, emptyIsValid = 0) => {
|
|
117
127
|
if (
|
|
118
|
-
|
|
128
|
+
isNullish(obj) ||
|
|
119
129
|
!isObject(obj) ||
|
|
120
130
|
(!emptyIsValid && objIsEmpty(obj)) ||
|
|
121
131
|
objFrozen(obj)
|
|
@@ -139,7 +149,7 @@ const mapForEach = (map, cb) =>
|
|
|
139
149
|
const mapMap = (coll, cb) =>
|
|
140
150
|
arrayMap([...(coll?.entries() ?? [])], ([key, value]) => cb(value, key));
|
|
141
151
|
const mapSet = (map, key, value) =>
|
|
142
|
-
|
|
152
|
+
value === void 0 ? (collDel(map, key), map) : map?.set(key, value);
|
|
143
153
|
const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
|
|
144
154
|
if (!collHas(map, key)) {
|
|
145
155
|
mapSet(map, key, getDefaultValue());
|
|
@@ -298,7 +308,7 @@ const getListenerFunctions = (getThing) => {
|
|
|
298
308
|
const index = size(ids);
|
|
299
309
|
if (index == size(path)) {
|
|
300
310
|
listener(thing, ...ids, ...extraArgsGetter(ids));
|
|
301
|
-
} else if (
|
|
311
|
+
} else if (isNull(path[index])) {
|
|
302
312
|
arrayForEach(pathGetters[index]?.(...ids) ?? [], (id2) =>
|
|
303
313
|
callWithIds(...ids, id2),
|
|
304
314
|
);
|
|
@@ -383,14 +393,22 @@ const createStore = () => {
|
|
|
383
393
|
const validateValuesSchema = (valuesSchema) =>
|
|
384
394
|
objValidate(valuesSchema, validateCellOrValueSchema);
|
|
385
395
|
const validateCellOrValueSchema = (schema) => {
|
|
386
|
-
if (
|
|
396
|
+
if (
|
|
397
|
+
!objValidate(schema, (_child, id2) =>
|
|
398
|
+
arrayHas([TYPE, DEFAULT, ALLOW_NULL], id2),
|
|
399
|
+
)
|
|
400
|
+
) {
|
|
387
401
|
return false;
|
|
388
402
|
}
|
|
389
403
|
const type = schema[TYPE];
|
|
390
404
|
if (!isTypeStringOrBoolean(type) && type != NUMBER) {
|
|
391
405
|
return false;
|
|
392
406
|
}
|
|
393
|
-
|
|
407
|
+
const defaultValue = schema[DEFAULT];
|
|
408
|
+
if (isNull(defaultValue) && !schema[ALLOW_NULL]) {
|
|
409
|
+
return false;
|
|
410
|
+
}
|
|
411
|
+
if (!isNull(defaultValue) && getCellOrValueType(defaultValue) != type) {
|
|
394
412
|
objDel(schema, DEFAULT);
|
|
395
413
|
}
|
|
396
414
|
return true;
|
|
@@ -427,9 +445,19 @@ const createStore = () => {
|
|
|
427
445
|
? ifNotUndefined(
|
|
428
446
|
mapGet(mapGet(tablesSchemaMap, tableId), cellId),
|
|
429
447
|
(cellSchema) =>
|
|
430
|
-
|
|
431
|
-
?
|
|
432
|
-
|
|
448
|
+
isNull(cell)
|
|
449
|
+
? cellSchema[ALLOW_NULL]
|
|
450
|
+
? cell
|
|
451
|
+
: cellInvalid(tableId, rowId, cellId, cell, cellSchema[DEFAULT])
|
|
452
|
+
: getCellOrValueType(cell) == cellSchema[TYPE]
|
|
453
|
+
? cell
|
|
454
|
+
: cellInvalid(
|
|
455
|
+
tableId,
|
|
456
|
+
rowId,
|
|
457
|
+
cellId,
|
|
458
|
+
cell,
|
|
459
|
+
cellSchema[DEFAULT],
|
|
460
|
+
),
|
|
433
461
|
() => cellInvalid(tableId, rowId, cellId, cell),
|
|
434
462
|
)
|
|
435
463
|
: isUndefined(getCellOrValueType(cell))
|
|
@@ -454,9 +482,13 @@ const createStore = () => {
|
|
|
454
482
|
? ifNotUndefined(
|
|
455
483
|
mapGet(valuesSchemaMap, valueId),
|
|
456
484
|
(valueSchema) =>
|
|
457
|
-
|
|
458
|
-
?
|
|
459
|
-
|
|
485
|
+
isNull(value)
|
|
486
|
+
? valueSchema[ALLOW_NULL]
|
|
487
|
+
? value
|
|
488
|
+
: valueInvalid(valueId, value, valueSchema[DEFAULT])
|
|
489
|
+
: getCellOrValueType(value) == valueSchema[TYPE]
|
|
490
|
+
? value
|
|
491
|
+
: valueInvalid(valueId, value, valueSchema[DEFAULT]),
|
|
460
492
|
() => valueInvalid(valueId, value),
|
|
461
493
|
)
|
|
462
494
|
: isUndefined(getCellOrValueType(value))
|
|
@@ -699,7 +731,7 @@ const createStore = () => {
|
|
|
699
731
|
mapSet(
|
|
700
732
|
cellIds,
|
|
701
733
|
cellId,
|
|
702
|
-
count != -addedOrRemoved ? count + addedOrRemoved :
|
|
734
|
+
count != -addedOrRemoved ? count + addedOrRemoved : void 0,
|
|
703
735
|
);
|
|
704
736
|
idsChanged(
|
|
705
737
|
mapEnsure(mapEnsure(changedCellIds, tableId, mapNew), rowId, mapNew),
|
package/synchronizers/index.js
CHANGED
|
@@ -4,15 +4,21 @@ const strSplit = (str, separator = EMPTY_STRING, limit) =>
|
|
|
4
4
|
str.split(separator, limit);
|
|
5
5
|
|
|
6
6
|
const promise = Promise;
|
|
7
|
+
const getIfNotFunction =
|
|
8
|
+
(predicate = isNullish) =>
|
|
9
|
+
(value, then, otherwise) =>
|
|
10
|
+
predicate(value) ? otherwise?.() : then(value);
|
|
7
11
|
const GLOBAL = globalThis;
|
|
8
12
|
const THOUSAND = 1e3;
|
|
9
13
|
const startTimeout = (callback, sec = 0) =>
|
|
10
14
|
setTimeout(callback, sec * THOUSAND);
|
|
11
15
|
const math = Math;
|
|
12
16
|
const mathFloor = math.floor;
|
|
13
|
-
const
|
|
14
|
-
const
|
|
15
|
-
|
|
17
|
+
const isNullish = (thing) => thing == null;
|
|
18
|
+
const isUndefined = (thing) => thing === void 0;
|
|
19
|
+
const isNull = (thing) => thing === null;
|
|
20
|
+
const ifNotNullish = getIfNotFunction(isNullish);
|
|
21
|
+
const ifNotUndefined = getIfNotFunction(isUndefined);
|
|
16
22
|
const isArray = (thing) => Array.isArray(thing);
|
|
17
23
|
const size = (arrayOrString) => arrayOrString.length;
|
|
18
24
|
const test = (regex, subject) => regex.test(subject);
|
|
@@ -46,12 +52,12 @@ const object = Object;
|
|
|
46
52
|
const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
|
|
47
53
|
const objEntries = object.entries;
|
|
48
54
|
const isObject = (obj) =>
|
|
49
|
-
!
|
|
50
|
-
|
|
55
|
+
!isNullish(obj) &&
|
|
56
|
+
ifNotNullish(
|
|
51
57
|
getPrototypeOf(obj),
|
|
52
58
|
(objPrototype) =>
|
|
53
59
|
objPrototype == object.prototype ||
|
|
54
|
-
|
|
60
|
+
isNullish(getPrototypeOf(objPrototype)),
|
|
55
61
|
|
|
56
62
|
/* istanbul ignore next */
|
|
57
63
|
() => true,
|
|
@@ -74,7 +80,7 @@ const objEnsure = (obj, id, getDefaultValue) => {
|
|
|
74
80
|
const mapNew = (entries) => new Map(entries);
|
|
75
81
|
const mapGet = (map, key) => map?.get(key);
|
|
76
82
|
const mapSet = (map, key, value) =>
|
|
77
|
-
|
|
83
|
+
value === void 0 ? (collDel(map, key), map) : map?.set(key, value);
|
|
78
84
|
const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
|
|
79
85
|
if (!collHas(map, key)) {
|
|
80
86
|
mapSet(map, key, getDefaultValue());
|
|
@@ -118,7 +124,7 @@ const getUniqueId = (length = 16) =>
|
|
|
118
124
|
arrayReduce(
|
|
119
125
|
getRandomValues(new Uint8Array(length)),
|
|
120
126
|
(uniqueId, number) => uniqueId + encode(number),
|
|
121
|
-
|
|
127
|
+
EMPTY_STRING,
|
|
122
128
|
);
|
|
123
129
|
|
|
124
130
|
const stampNew = (value, hlc) => (hlc ? [value, hlc] : [value]);
|
|
@@ -207,7 +213,7 @@ const getListenerFunctions = (getThing) => {
|
|
|
207
213
|
const index = size(ids);
|
|
208
214
|
if (index == size(path)) {
|
|
209
215
|
listener(thing, ...ids, ...extraArgsGetter(ids));
|
|
210
|
-
} else if (
|
|
216
|
+
} else if (isNull(path[index])) {
|
|
211
217
|
arrayForEach(pathGetters[index]?.(...ids) ?? [], (id2) =>
|
|
212
218
|
callWithIds(...ids, id2),
|
|
213
219
|
);
|
|
@@ -644,7 +650,7 @@ const createCustomSynchronizer = (
|
|
|
644
650
|
ifNotUndefined(
|
|
645
651
|
mapGet(pendingRequests, transactionOrRequestId),
|
|
646
652
|
([toClientId, handleResponse]) =>
|
|
647
|
-
|
|
653
|
+
isNull(toClientId) || toClientId == fromClientId
|
|
648
654
|
? handleResponse(body, fromClientId)
|
|
649
655
|
: /* istanbul ignore next */
|
|
650
656
|
0,
|
|
@@ -4,15 +4,21 @@ const strSplit = (str, separator = EMPTY_STRING, limit) =>
|
|
|
4
4
|
str.split(separator, limit);
|
|
5
5
|
|
|
6
6
|
const promise = Promise;
|
|
7
|
+
const getIfNotFunction =
|
|
8
|
+
(predicate = isNullish) =>
|
|
9
|
+
(value, then, otherwise) =>
|
|
10
|
+
predicate(value) ? otherwise?.() : then(value);
|
|
7
11
|
const GLOBAL = globalThis;
|
|
8
12
|
const THOUSAND = 1e3;
|
|
9
13
|
const startTimeout = (callback, sec = 0) =>
|
|
10
14
|
setTimeout(callback, sec * THOUSAND);
|
|
11
15
|
const math = Math;
|
|
12
16
|
const mathFloor = math.floor;
|
|
13
|
-
const
|
|
14
|
-
const
|
|
15
|
-
|
|
17
|
+
const isNullish = (thing) => thing == null;
|
|
18
|
+
const isUndefined = (thing) => thing === void 0;
|
|
19
|
+
const isNull = (thing) => thing === null;
|
|
20
|
+
const ifNotNullish = getIfNotFunction(isNullish);
|
|
21
|
+
const ifNotUndefined = getIfNotFunction(isUndefined);
|
|
16
22
|
const isArray = (thing) => Array.isArray(thing);
|
|
17
23
|
const size = (arrayOrString) => arrayOrString.length;
|
|
18
24
|
const test = (regex, subject) => regex.test(subject);
|
|
@@ -46,12 +52,12 @@ const object = Object;
|
|
|
46
52
|
const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
|
|
47
53
|
const objEntries = object.entries;
|
|
48
54
|
const isObject = (obj) =>
|
|
49
|
-
!
|
|
50
|
-
|
|
55
|
+
!isNullish(obj) &&
|
|
56
|
+
ifNotNullish(
|
|
51
57
|
getPrototypeOf(obj),
|
|
52
58
|
(objPrototype) =>
|
|
53
59
|
objPrototype == object.prototype ||
|
|
54
|
-
|
|
60
|
+
isNullish(getPrototypeOf(objPrototype)),
|
|
55
61
|
|
|
56
62
|
/* istanbul ignore next */
|
|
57
63
|
() => true,
|
|
@@ -74,7 +80,7 @@ const objEnsure = (obj, id, getDefaultValue) => {
|
|
|
74
80
|
const mapNew = (entries) => new Map(entries);
|
|
75
81
|
const mapGet = (map, key) => map?.get(key);
|
|
76
82
|
const mapSet = (map, key, value) =>
|
|
77
|
-
|
|
83
|
+
value === void 0 ? (collDel(map, key), map) : map?.set(key, value);
|
|
78
84
|
const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
|
|
79
85
|
if (!collHas(map, key)) {
|
|
80
86
|
mapSet(map, key, getDefaultValue());
|
|
@@ -118,7 +124,7 @@ const getUniqueId = (length = 16) =>
|
|
|
118
124
|
arrayReduce(
|
|
119
125
|
getRandomValues(new Uint8Array(length)),
|
|
120
126
|
(uniqueId, number) => uniqueId + encode(number),
|
|
121
|
-
|
|
127
|
+
EMPTY_STRING,
|
|
122
128
|
);
|
|
123
129
|
|
|
124
130
|
const stampNew = (value, hlc) => (hlc ? [value, hlc] : [value]);
|
|
@@ -207,7 +213,7 @@ const getListenerFunctions = (getThing) => {
|
|
|
207
213
|
const index = size(ids);
|
|
208
214
|
if (index == size(path)) {
|
|
209
215
|
listener(thing, ...ids, ...extraArgsGetter(ids));
|
|
210
|
-
} else if (
|
|
216
|
+
} else if (isNull(path[index])) {
|
|
211
217
|
arrayForEach(pathGetters[index]?.(...ids) ?? [], (id2) =>
|
|
212
218
|
callWithIds(...ids, id2),
|
|
213
219
|
);
|
|
@@ -634,7 +640,7 @@ const createCustomSynchronizer = (
|
|
|
634
640
|
ifNotUndefined(
|
|
635
641
|
mapGet(pendingRequests, transactionOrRequestId),
|
|
636
642
|
([toClientId, handleResponse]) =>
|
|
637
|
-
|
|
643
|
+
isNull(toClientId) || toClientId == fromClientId
|
|
638
644
|
? handleResponse(body, fromClientId)
|
|
639
645
|
: /* istanbul ignore next */
|
|
640
646
|
0,
|
|
@@ -694,7 +700,7 @@ const createBroadcastChannelSynchronizer = (
|
|
|
694
700
|
channel.onmessage = ({
|
|
695
701
|
data: [fromClientId, toClientId, requestId, message, body],
|
|
696
702
|
}) =>
|
|
697
|
-
|
|
703
|
+
isNull(toClientId) || toClientId == clientId
|
|
698
704
|
? receive(fromClientId, requestId, message, body)
|
|
699
705
|
: 0;
|
|
700
706
|
};
|
|
@@ -4,15 +4,21 @@ const strSplit = (str, separator = EMPTY_STRING, limit) =>
|
|
|
4
4
|
str.split(separator, limit);
|
|
5
5
|
|
|
6
6
|
const promise = Promise;
|
|
7
|
+
const getIfNotFunction =
|
|
8
|
+
(predicate = isNullish) =>
|
|
9
|
+
(value, then, otherwise) =>
|
|
10
|
+
predicate(value) ? otherwise?.() : then(value);
|
|
7
11
|
const GLOBAL = globalThis;
|
|
8
12
|
const THOUSAND = 1e3;
|
|
9
13
|
const startTimeout = (callback, sec = 0) =>
|
|
10
14
|
setTimeout(callback, sec * THOUSAND);
|
|
11
15
|
const math = Math;
|
|
12
16
|
const mathFloor = math.floor;
|
|
13
|
-
const
|
|
14
|
-
const
|
|
15
|
-
|
|
17
|
+
const isNullish = (thing) => thing == null;
|
|
18
|
+
const isUndefined = (thing) => thing === void 0;
|
|
19
|
+
const isNull = (thing) => thing === null;
|
|
20
|
+
const ifNotNullish = getIfNotFunction(isNullish);
|
|
21
|
+
const ifNotUndefined = getIfNotFunction(isUndefined);
|
|
16
22
|
const isArray = (thing) => Array.isArray(thing);
|
|
17
23
|
const size = (arrayOrString) => arrayOrString.length;
|
|
18
24
|
const test = (regex, subject) => regex.test(subject);
|
|
@@ -46,12 +52,12 @@ const object = Object;
|
|
|
46
52
|
const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
|
|
47
53
|
const objEntries = object.entries;
|
|
48
54
|
const isObject = (obj) =>
|
|
49
|
-
!
|
|
50
|
-
|
|
55
|
+
!isNullish(obj) &&
|
|
56
|
+
ifNotNullish(
|
|
51
57
|
getPrototypeOf(obj),
|
|
52
58
|
(objPrototype) =>
|
|
53
59
|
objPrototype == object.prototype ||
|
|
54
|
-
|
|
60
|
+
isNullish(getPrototypeOf(objPrototype)),
|
|
55
61
|
|
|
56
62
|
/* istanbul ignore next */
|
|
57
63
|
() => true,
|
|
@@ -74,7 +80,7 @@ const objEnsure = (obj, id, getDefaultValue) => {
|
|
|
74
80
|
const mapNew = (entries) => new Map(entries);
|
|
75
81
|
const mapGet = (map, key) => map?.get(key);
|
|
76
82
|
const mapSet = (map, key, value) =>
|
|
77
|
-
|
|
83
|
+
value === void 0 ? (collDel(map, key), map) : map?.set(key, value);
|
|
78
84
|
const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
|
|
79
85
|
if (!collHas(map, key)) {
|
|
80
86
|
mapSet(map, key, getDefaultValue());
|
|
@@ -118,7 +124,7 @@ const getUniqueId = (length = 16) =>
|
|
|
118
124
|
arrayReduce(
|
|
119
125
|
getRandomValues(new Uint8Array(length)),
|
|
120
126
|
(uniqueId, number) => uniqueId + encode(number),
|
|
121
|
-
|
|
127
|
+
EMPTY_STRING,
|
|
122
128
|
);
|
|
123
129
|
|
|
124
130
|
const stampNew = (value, hlc) => (hlc ? [value, hlc] : [value]);
|
|
@@ -207,7 +213,7 @@ const getListenerFunctions = (getThing) => {
|
|
|
207
213
|
const index = size(ids);
|
|
208
214
|
if (index == size(path)) {
|
|
209
215
|
listener(thing, ...ids, ...extraArgsGetter(ids));
|
|
210
|
-
} else if (
|
|
216
|
+
} else if (isNull(path[index])) {
|
|
211
217
|
arrayForEach(pathGetters[index]?.(...ids) ?? [], (id2) =>
|
|
212
218
|
callWithIds(...ids, id2),
|
|
213
219
|
);
|
|
@@ -634,7 +640,7 @@ const createCustomSynchronizer = (
|
|
|
634
640
|
ifNotUndefined(
|
|
635
641
|
mapGet(pendingRequests, transactionOrRequestId),
|
|
636
642
|
([toClientId, handleResponse]) =>
|
|
637
|
-
|
|
643
|
+
isNull(toClientId) || toClientId == fromClientId
|
|
638
644
|
? handleResponse(body, fromClientId)
|
|
639
645
|
: /* istanbul ignore next */
|
|
640
646
|
0,
|
|
@@ -694,7 +700,7 @@ const createBroadcastChannelSynchronizer = (
|
|
|
694
700
|
channel.onmessage = ({
|
|
695
701
|
data: [fromClientId, toClientId, requestId, message, body],
|
|
696
702
|
}) =>
|
|
697
|
-
|
|
703
|
+
isNull(toClientId) || toClientId == clientId
|
|
698
704
|
? receive(fromClientId, requestId, message, body)
|
|
699
705
|
: 0;
|
|
700
706
|
};
|
|
@@ -4,15 +4,21 @@ const strSplit = (str, separator = EMPTY_STRING, limit) =>
|
|
|
4
4
|
str.split(separator, limit);
|
|
5
5
|
|
|
6
6
|
const promise = Promise;
|
|
7
|
+
const getIfNotFunction =
|
|
8
|
+
(predicate = isNullish) =>
|
|
9
|
+
(value, then, otherwise) =>
|
|
10
|
+
predicate(value) ? otherwise?.() : then(value);
|
|
7
11
|
const GLOBAL = globalThis;
|
|
8
12
|
const THOUSAND = 1e3;
|
|
9
13
|
const startTimeout = (callback, sec = 0) =>
|
|
10
14
|
setTimeout(callback, sec * THOUSAND);
|
|
11
15
|
const math = Math;
|
|
12
16
|
const mathFloor = math.floor;
|
|
13
|
-
const
|
|
14
|
-
const
|
|
15
|
-
|
|
17
|
+
const isNullish = (thing) => thing == null;
|
|
18
|
+
const isUndefined = (thing) => thing === void 0;
|
|
19
|
+
const isNull = (thing) => thing === null;
|
|
20
|
+
const ifNotNullish = getIfNotFunction(isNullish);
|
|
21
|
+
const ifNotUndefined = getIfNotFunction(isUndefined);
|
|
16
22
|
const isArray = (thing) => Array.isArray(thing);
|
|
17
23
|
const size = (arrayOrString) => arrayOrString.length;
|
|
18
24
|
const test = (regex, subject) => regex.test(subject);
|
|
@@ -46,12 +52,12 @@ const object = Object;
|
|
|
46
52
|
const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
|
|
47
53
|
const objEntries = object.entries;
|
|
48
54
|
const isObject = (obj) =>
|
|
49
|
-
!
|
|
50
|
-
|
|
55
|
+
!isNullish(obj) &&
|
|
56
|
+
ifNotNullish(
|
|
51
57
|
getPrototypeOf(obj),
|
|
52
58
|
(objPrototype) =>
|
|
53
59
|
objPrototype == object.prototype ||
|
|
54
|
-
|
|
60
|
+
isNullish(getPrototypeOf(objPrototype)),
|
|
55
61
|
|
|
56
62
|
/* istanbul ignore next */
|
|
57
63
|
() => true,
|
|
@@ -76,7 +82,7 @@ const mapGet = (map, key) => map?.get(key);
|
|
|
76
82
|
const mapForEach = (map, cb) =>
|
|
77
83
|
collForEach(map, (value, key) => cb(key, value));
|
|
78
84
|
const mapSet = (map, key, value) =>
|
|
79
|
-
|
|
85
|
+
value === void 0 ? (collDel(map, key), map) : map?.set(key, value);
|
|
80
86
|
const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
|
|
81
87
|
if (!collHas(map, key)) {
|
|
82
88
|
mapSet(map, key, getDefaultValue());
|
|
@@ -120,7 +126,7 @@ const getUniqueId = (length = 16) =>
|
|
|
120
126
|
arrayReduce(
|
|
121
127
|
getRandomValues(new Uint8Array(length)),
|
|
122
128
|
(uniqueId, number) => uniqueId + encode(number),
|
|
123
|
-
|
|
129
|
+
EMPTY_STRING,
|
|
124
130
|
);
|
|
125
131
|
|
|
126
132
|
const stampNew = (value, hlc) => (hlc ? [value, hlc] : [value]);
|
|
@@ -209,7 +215,7 @@ const getListenerFunctions = (getThing) => {
|
|
|
209
215
|
const index = size(ids);
|
|
210
216
|
if (index == size(path)) {
|
|
211
217
|
listener(thing, ...ids, ...extraArgsGetter(ids));
|
|
212
|
-
} else if (
|
|
218
|
+
} else if (isNull(path[index])) {
|
|
213
219
|
arrayForEach(pathGetters[index]?.(...ids) ?? [], (id2) =>
|
|
214
220
|
callWithIds(...ids, id2),
|
|
215
221
|
);
|
|
@@ -636,7 +642,7 @@ const createCustomSynchronizer = (
|
|
|
636
642
|
ifNotUndefined(
|
|
637
643
|
mapGet(pendingRequests, transactionOrRequestId),
|
|
638
644
|
([toClientId, handleResponse]) =>
|
|
639
|
-
|
|
645
|
+
isNull(toClientId) || toClientId == fromClientId
|
|
640
646
|
? handleResponse(body, fromClientId)
|
|
641
647
|
: /* istanbul ignore next */
|
|
642
648
|
0,
|
|
@@ -686,7 +692,7 @@ const createLocalSynchronizer = (store, onSend, onReceive, onIgnoredError) => {
|
|
|
686
692
|
const clientId = getUniqueId();
|
|
687
693
|
const send = (toClientId, requestId, message, body) =>
|
|
688
694
|
startTimeout(() =>
|
|
689
|
-
|
|
695
|
+
isNull(toClientId)
|
|
690
696
|
? mapForEach(clients, (otherClientId, receive) =>
|
|
691
697
|
otherClientId != clientId
|
|
692
698
|
? receive(clientId, requestId, message, body)
|