tinybase 5.4.4 → 5.4.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/checkpoints/index.js +6 -6
- package/checkpoints/with-schemas/index.js +6 -6
- package/cjs/checkpoints/index.cjs +6 -6
- package/cjs/checkpoints/with-schemas/index.cjs +6 -6
- package/cjs/es6/checkpoints/index.cjs +21 -19
- package/cjs/es6/checkpoints/with-schemas/index.cjs +21 -19
- package/cjs/es6/index.cjs +90 -75
- package/cjs/es6/indexes/index.cjs +20 -18
- package/cjs/es6/indexes/with-schemas/index.cjs +20 -18
- package/cjs/es6/mergeable-store/index.cjs +61 -46
- package/cjs/es6/mergeable-store/with-schemas/index.cjs +61 -46
- package/cjs/es6/metrics/index.cjs +30 -28
- package/cjs/es6/metrics/with-schemas/index.cjs +30 -28
- package/cjs/es6/persisters/index.cjs +81 -75
- package/cjs/es6/persisters/persister-automerge/index.cjs +41 -37
- package/cjs/es6/persisters/persister-automerge/with-schemas/index.cjs +41 -37
- package/cjs/es6/persisters/persister-browser/index.cjs +39 -35
- package/cjs/es6/persisters/persister-browser/with-schemas/index.cjs +39 -35
- package/cjs/es6/persisters/persister-cr-sqlite-wasm/index.cjs +74 -68
- package/cjs/es6/persisters/persister-cr-sqlite-wasm/with-schemas/index.cjs +74 -68
- package/cjs/es6/persisters/persister-durable-object-storage/index.cjs +40 -36
- package/cjs/es6/persisters/persister-durable-object-storage/with-schemas/index.cjs +40 -36
- package/cjs/es6/persisters/persister-electric-sql/index.cjs +74 -68
- package/cjs/es6/persisters/persister-electric-sql/with-schemas/index.cjs +74 -68
- package/cjs/es6/persisters/persister-expo-sqlite/index.cjs +74 -68
- package/cjs/es6/persisters/persister-expo-sqlite/with-schemas/index.cjs +74 -68
- package/cjs/es6/persisters/persister-file/index.cjs +40 -36
- package/cjs/es6/persisters/persister-file/with-schemas/index.cjs +40 -36
- package/cjs/es6/persisters/persister-indexed-db/index.cjs +45 -41
- package/cjs/es6/persisters/persister-indexed-db/with-schemas/index.cjs +45 -41
- package/cjs/es6/persisters/persister-libsql/index.cjs +74 -68
- package/cjs/es6/persisters/persister-libsql/with-schemas/index.cjs +74 -68
- package/cjs/es6/persisters/persister-partykit-client/index.cjs +40 -36
- package/cjs/es6/persisters/persister-partykit-client/with-schemas/index.cjs +40 -36
- package/cjs/es6/persisters/persister-partykit-server/index.cjs +18 -14
- package/cjs/es6/persisters/persister-partykit-server/with-schemas/index.cjs +18 -14
- package/cjs/es6/persisters/persister-pglite/index.cjs +83 -77
- package/cjs/es6/persisters/persister-pglite/with-schemas/index.cjs +83 -77
- package/cjs/es6/persisters/persister-postgres/index.cjs +89 -80
- package/cjs/es6/persisters/persister-postgres/with-schemas/index.cjs +89 -80
- package/cjs/es6/persisters/persister-powersync/index.cjs +81 -74
- package/cjs/es6/persisters/persister-powersync/with-schemas/index.cjs +81 -74
- package/cjs/es6/persisters/persister-remote/index.cjs +38 -34
- package/cjs/es6/persisters/persister-remote/with-schemas/index.cjs +38 -34
- package/cjs/es6/persisters/persister-sqlite-wasm/index.cjs +74 -68
- package/cjs/es6/persisters/persister-sqlite-wasm/with-schemas/index.cjs +74 -68
- package/cjs/es6/persisters/persister-sqlite3/index.cjs +74 -68
- package/cjs/es6/persisters/persister-sqlite3/with-schemas/index.cjs +74 -68
- package/cjs/es6/persisters/persister-yjs/index.cjs +43 -39
- package/cjs/es6/persisters/persister-yjs/with-schemas/index.cjs +43 -39
- package/cjs/es6/persisters/with-schemas/index.cjs +81 -75
- package/cjs/es6/queries/index.cjs +34 -32
- package/cjs/es6/queries/with-schemas/index.cjs +34 -32
- package/cjs/es6/relationships/index.cjs +22 -20
- package/cjs/es6/relationships/with-schemas/index.cjs +22 -20
- package/cjs/es6/store/index.cjs +51 -39
- package/cjs/es6/store/with-schemas/index.cjs +51 -39
- package/cjs/es6/synchronizers/index.cjs +52 -46
- package/cjs/es6/synchronizers/synchronizer-broadcast-channel/index.cjs +52 -46
- package/cjs/es6/synchronizers/synchronizer-broadcast-channel/with-schemas/index.cjs +52 -46
- package/cjs/es6/synchronizers/synchronizer-local/index.cjs +53 -47
- package/cjs/es6/synchronizers/synchronizer-local/with-schemas/index.cjs +53 -47
- package/cjs/es6/synchronizers/synchronizer-ws-client/index.cjs +56 -50
- package/cjs/es6/synchronizers/synchronizer-ws-client/with-schemas/index.cjs +56 -50
- package/cjs/es6/synchronizers/synchronizer-ws-server/index.cjs +72 -62
- package/cjs/es6/synchronizers/synchronizer-ws-server/with-schemas/index.cjs +72 -62
- package/cjs/es6/synchronizers/synchronizer-ws-server-durable-object/index.cjs +55 -49
- package/cjs/es6/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.cjs +55 -49
- package/cjs/es6/synchronizers/synchronizer-ws-server-simple/index.cjs +15 -11
- package/cjs/es6/synchronizers/synchronizer-ws-server-simple/with-schemas/index.cjs +15 -11
- package/cjs/es6/synchronizers/with-schemas/index.cjs +52 -46
- package/cjs/es6/tools/index.cjs +27 -20
- package/cjs/es6/tools/with-schemas/index.cjs +27 -20
- package/cjs/es6/ui-react/index.cjs +49 -35
- package/cjs/es6/ui-react/with-schemas/index.cjs +49 -35
- package/cjs/es6/ui-react-dom/index.cjs +14 -14
- package/cjs/es6/ui-react-dom/with-schemas/index.cjs +14 -14
- package/cjs/es6/ui-react-inspector/index.cjs +84 -72
- package/cjs/es6/ui-react-inspector/with-schemas/index.cjs +84 -72
- package/cjs/es6/with-schemas/index.cjs +90 -75
- package/cjs/index.cjs +38 -38
- package/cjs/indexes/index.cjs +5 -5
- package/cjs/indexes/with-schemas/index.cjs +5 -5
- package/cjs/mergeable-store/index.cjs +19 -19
- package/cjs/mergeable-store/with-schemas/index.cjs +19 -19
- package/cjs/metrics/index.cjs +12 -12
- package/cjs/metrics/with-schemas/index.cjs +12 -12
- package/cjs/persisters/index.cjs +10 -10
- package/cjs/persisters/persister-automerge/index.cjs +8 -8
- package/cjs/persisters/persister-automerge/with-schemas/index.cjs +8 -8
- package/cjs/persisters/persister-browser/index.cjs +7 -7
- package/cjs/persisters/persister-browser/with-schemas/index.cjs +7 -7
- package/cjs/persisters/persister-cr-sqlite-wasm/index.cjs +9 -9
- package/cjs/persisters/persister-cr-sqlite-wasm/with-schemas/index.cjs +9 -9
- package/cjs/persisters/persister-durable-object-storage/index.cjs +7 -7
- package/cjs/persisters/persister-durable-object-storage/with-schemas/index.cjs +7 -7
- package/cjs/persisters/persister-electric-sql/index.cjs +9 -9
- package/cjs/persisters/persister-electric-sql/with-schemas/index.cjs +9 -9
- package/cjs/persisters/persister-expo-sqlite/index.cjs +9 -9
- package/cjs/persisters/persister-expo-sqlite/with-schemas/index.cjs +9 -9
- package/cjs/persisters/persister-file/index.cjs +7 -7
- package/cjs/persisters/persister-file/with-schemas/index.cjs +7 -7
- package/cjs/persisters/persister-indexed-db/index.cjs +6 -6
- package/cjs/persisters/persister-indexed-db/with-schemas/index.cjs +6 -6
- package/cjs/persisters/persister-libsql/index.cjs +9 -9
- package/cjs/persisters/persister-libsql/with-schemas/index.cjs +9 -9
- package/cjs/persisters/persister-partykit-client/index.cjs +7 -7
- package/cjs/persisters/persister-partykit-client/with-schemas/index.cjs +7 -7
- package/cjs/persisters/persister-partykit-server/index.cjs +2 -2
- package/cjs/persisters/persister-partykit-server/with-schemas/index.cjs +2 -2
- package/cjs/persisters/persister-pglite/index.cjs +9 -9
- package/cjs/persisters/persister-pglite/with-schemas/index.cjs +9 -9
- package/cjs/persisters/persister-postgres/index.cjs +9 -9
- package/cjs/persisters/persister-postgres/with-schemas/index.cjs +9 -9
- package/cjs/persisters/persister-powersync/index.cjs +10 -10
- package/cjs/persisters/persister-powersync/with-schemas/index.cjs +10 -10
- package/cjs/persisters/persister-remote/index.cjs +5 -5
- package/cjs/persisters/persister-remote/with-schemas/index.cjs +5 -5
- package/cjs/persisters/persister-sqlite-wasm/index.cjs +9 -9
- package/cjs/persisters/persister-sqlite-wasm/with-schemas/index.cjs +9 -9
- package/cjs/persisters/persister-sqlite3/index.cjs +9 -9
- package/cjs/persisters/persister-sqlite3/with-schemas/index.cjs +9 -9
- package/cjs/persisters/persister-yjs/index.cjs +9 -9
- package/cjs/persisters/persister-yjs/with-schemas/index.cjs +9 -9
- package/cjs/persisters/with-schemas/index.cjs +10 -10
- package/cjs/queries/index.cjs +13 -13
- package/cjs/queries/with-schemas/index.cjs +13 -13
- package/cjs/relationships/index.cjs +5 -5
- package/cjs/relationships/with-schemas/index.cjs +5 -5
- package/cjs/store/index.cjs +14 -14
- package/cjs/store/with-schemas/index.cjs +14 -14
- package/cjs/synchronizers/index.cjs +11 -11
- package/cjs/synchronizers/synchronizer-broadcast-channel/index.cjs +11 -11
- package/cjs/synchronizers/synchronizer-broadcast-channel/with-schemas/index.cjs +11 -11
- package/cjs/synchronizers/synchronizer-local/index.cjs +11 -11
- package/cjs/synchronizers/synchronizer-local/with-schemas/index.cjs +11 -11
- package/cjs/synchronizers/synchronizer-ws-client/index.cjs +13 -13
- package/cjs/synchronizers/synchronizer-ws-client/with-schemas/index.cjs +13 -13
- package/cjs/synchronizers/synchronizer-ws-server/index.cjs +17 -17
- package/cjs/synchronizers/synchronizer-ws-server/with-schemas/index.cjs +17 -17
- package/cjs/synchronizers/synchronizer-ws-server-durable-object/index.cjs +14 -14
- package/cjs/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.cjs +14 -14
- package/cjs/synchronizers/synchronizer-ws-server-simple/index.cjs +1 -1
- package/cjs/synchronizers/synchronizer-ws-server-simple/with-schemas/index.cjs +1 -1
- package/cjs/synchronizers/with-schemas/index.cjs +11 -11
- package/cjs/tools/index.cjs +3 -3
- package/cjs/tools/with-schemas/index.cjs +3 -3
- package/cjs/ui-react/index.cjs +19 -12
- package/cjs/ui-react/with-schemas/index.cjs +19 -12
- package/cjs/ui-react-dom/index.cjs +4 -4
- package/cjs/ui-react-dom/with-schemas/index.cjs +4 -4
- package/cjs/ui-react-inspector/index.cjs +22 -22
- package/cjs/ui-react-inspector/with-schemas/index.cjs +22 -22
- package/cjs/with-schemas/index.cjs +38 -38
- package/es6/checkpoints/index.js +21 -19
- package/es6/checkpoints/with-schemas/index.js +21 -19
- package/es6/index.js +90 -75
- package/es6/indexes/index.js +20 -18
- package/es6/indexes/with-schemas/index.js +20 -18
- package/es6/mergeable-store/index.js +61 -46
- package/es6/mergeable-store/with-schemas/index.js +61 -46
- package/es6/metrics/index.js +30 -28
- package/es6/metrics/with-schemas/index.js +30 -28
- package/es6/persisters/index.js +81 -75
- package/es6/persisters/persister-automerge/index.js +41 -37
- package/es6/persisters/persister-automerge/with-schemas/index.js +41 -37
- package/es6/persisters/persister-browser/index.js +39 -35
- package/es6/persisters/persister-browser/with-schemas/index.js +39 -35
- package/es6/persisters/persister-cr-sqlite-wasm/index.js +74 -68
- package/es6/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +74 -68
- package/es6/persisters/persister-durable-object-storage/index.js +40 -36
- package/es6/persisters/persister-durable-object-storage/with-schemas/index.js +40 -36
- package/es6/persisters/persister-electric-sql/index.js +74 -68
- package/es6/persisters/persister-electric-sql/with-schemas/index.js +74 -68
- package/es6/persisters/persister-expo-sqlite/index.js +74 -68
- package/es6/persisters/persister-expo-sqlite/with-schemas/index.js +74 -68
- package/es6/persisters/persister-file/index.js +40 -36
- package/es6/persisters/persister-file/with-schemas/index.js +40 -36
- package/es6/persisters/persister-indexed-db/index.js +45 -41
- package/es6/persisters/persister-indexed-db/with-schemas/index.js +45 -41
- package/es6/persisters/persister-libsql/index.js +74 -68
- package/es6/persisters/persister-libsql/with-schemas/index.js +74 -68
- package/es6/persisters/persister-partykit-client/index.js +40 -36
- package/es6/persisters/persister-partykit-client/with-schemas/index.js +40 -36
- package/es6/persisters/persister-partykit-server/index.js +18 -14
- package/es6/persisters/persister-partykit-server/with-schemas/index.js +18 -14
- package/es6/persisters/persister-pglite/index.js +83 -77
- package/es6/persisters/persister-pglite/with-schemas/index.js +83 -77
- package/es6/persisters/persister-postgres/index.js +89 -80
- package/es6/persisters/persister-postgres/with-schemas/index.js +89 -80
- package/es6/persisters/persister-powersync/index.js +81 -74
- package/es6/persisters/persister-powersync/with-schemas/index.js +81 -74
- package/es6/persisters/persister-remote/index.js +38 -34
- package/es6/persisters/persister-remote/with-schemas/index.js +38 -34
- package/es6/persisters/persister-sqlite-wasm/index.js +74 -68
- package/es6/persisters/persister-sqlite-wasm/with-schemas/index.js +74 -68
- package/es6/persisters/persister-sqlite3/index.js +74 -68
- package/es6/persisters/persister-sqlite3/with-schemas/index.js +74 -68
- package/es6/persisters/persister-yjs/index.js +43 -39
- package/es6/persisters/persister-yjs/with-schemas/index.js +43 -39
- package/es6/persisters/with-schemas/index.js +81 -75
- package/es6/queries/index.js +34 -32
- package/es6/queries/with-schemas/index.js +34 -32
- package/es6/relationships/index.js +22 -20
- package/es6/relationships/with-schemas/index.js +22 -20
- package/es6/store/index.js +51 -39
- package/es6/store/with-schemas/index.js +51 -39
- package/es6/synchronizers/index.js +52 -46
- package/es6/synchronizers/synchronizer-broadcast-channel/index.js +52 -46
- package/es6/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +52 -46
- package/es6/synchronizers/synchronizer-local/index.js +53 -47
- package/es6/synchronizers/synchronizer-local/with-schemas/index.js +53 -47
- package/es6/synchronizers/synchronizer-ws-client/index.js +56 -50
- package/es6/synchronizers/synchronizer-ws-client/with-schemas/index.js +56 -50
- package/es6/synchronizers/synchronizer-ws-server/index.js +72 -62
- package/es6/synchronizers/synchronizer-ws-server/with-schemas/index.js +72 -62
- package/es6/synchronizers/synchronizer-ws-server-durable-object/index.js +55 -49
- package/es6/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js +55 -49
- package/es6/synchronizers/synchronizer-ws-server-simple/index.js +15 -11
- package/es6/synchronizers/synchronizer-ws-server-simple/with-schemas/index.js +15 -11
- package/es6/synchronizers/with-schemas/index.js +52 -46
- package/es6/tools/index.js +27 -20
- package/es6/tools/with-schemas/index.js +27 -20
- package/es6/ui-react/index.js +49 -35
- package/es6/ui-react/with-schemas/index.js +49 -35
- package/es6/ui-react-dom/index.js +18 -14
- package/es6/ui-react-dom/with-schemas/index.js +18 -14
- package/es6/ui-react-inspector/index.js +88 -72
- package/es6/ui-react-inspector/with-schemas/index.js +88 -72
- package/es6/with-schemas/index.js +90 -75
- package/index.js +38 -38
- package/indexes/index.js +5 -5
- package/indexes/with-schemas/index.js +5 -5
- package/mergeable-store/index.js +19 -19
- package/mergeable-store/with-schemas/index.js +19 -19
- package/metrics/index.js +12 -12
- package/metrics/with-schemas/index.js +12 -12
- package/package.json +3 -3
- package/persisters/index.js +10 -10
- package/persisters/persister-automerge/index.js +8 -8
- package/persisters/persister-automerge/with-schemas/index.js +8 -8
- package/persisters/persister-browser/index.js +7 -7
- package/persisters/persister-browser/with-schemas/index.js +7 -7
- package/persisters/persister-cr-sqlite-wasm/index.js +9 -9
- package/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +9 -9
- package/persisters/persister-durable-object-storage/index.js +7 -7
- package/persisters/persister-durable-object-storage/with-schemas/index.js +7 -7
- package/persisters/persister-electric-sql/index.js +9 -9
- package/persisters/persister-electric-sql/with-schemas/index.js +9 -9
- package/persisters/persister-expo-sqlite/index.js +9 -9
- package/persisters/persister-expo-sqlite/with-schemas/index.js +9 -9
- package/persisters/persister-file/index.js +7 -7
- package/persisters/persister-file/with-schemas/index.js +7 -7
- package/persisters/persister-indexed-db/index.js +6 -6
- package/persisters/persister-indexed-db/with-schemas/index.js +6 -6
- package/persisters/persister-libsql/index.js +9 -9
- package/persisters/persister-libsql/with-schemas/index.js +9 -9
- package/persisters/persister-partykit-client/index.js +7 -7
- package/persisters/persister-partykit-client/with-schemas/index.js +7 -7
- package/persisters/persister-partykit-server/index.js +2 -2
- package/persisters/persister-partykit-server/with-schemas/index.js +2 -2
- package/persisters/persister-pglite/index.js +9 -9
- package/persisters/persister-pglite/with-schemas/index.js +9 -9
- package/persisters/persister-postgres/index.js +9 -9
- package/persisters/persister-postgres/with-schemas/index.js +9 -9
- package/persisters/persister-powersync/index.js +10 -10
- package/persisters/persister-powersync/with-schemas/index.js +10 -10
- package/persisters/persister-remote/index.js +5 -5
- package/persisters/persister-remote/with-schemas/index.js +5 -5
- package/persisters/persister-sqlite-wasm/index.js +9 -9
- package/persisters/persister-sqlite-wasm/with-schemas/index.js +9 -9
- package/persisters/persister-sqlite3/index.js +9 -9
- package/persisters/persister-sqlite3/with-schemas/index.js +9 -9
- package/persisters/persister-yjs/index.js +9 -9
- package/persisters/persister-yjs/with-schemas/index.js +9 -9
- package/persisters/with-schemas/index.js +10 -10
- package/queries/index.js +13 -13
- package/queries/with-schemas/index.js +13 -13
- package/readme.md +2 -2
- package/relationships/index.js +5 -5
- package/relationships/with-schemas/index.js +5 -5
- package/store/index.js +14 -14
- package/store/with-schemas/index.js +14 -14
- package/synchronizers/index.js +11 -11
- package/synchronizers/synchronizer-broadcast-channel/index.js +11 -11
- package/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +11 -11
- package/synchronizers/synchronizer-local/index.js +11 -11
- package/synchronizers/synchronizer-local/with-schemas/index.js +11 -11
- package/synchronizers/synchronizer-ws-client/index.js +13 -13
- package/synchronizers/synchronizer-ws-client/with-schemas/index.js +13 -13
- package/synchronizers/synchronizer-ws-server/index.js +17 -17
- package/synchronizers/synchronizer-ws-server/with-schemas/index.js +17 -17
- package/synchronizers/synchronizer-ws-server-durable-object/index.js +14 -14
- package/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js +14 -14
- package/synchronizers/synchronizer-ws-server-simple/index.js +1 -1
- package/synchronizers/synchronizer-ws-server-simple/with-schemas/index.js +1 -1
- package/synchronizers/with-schemas/index.js +11 -11
- package/tools/index.js +3 -3
- package/tools/with-schemas/index.js +3 -3
- package/ui-react/index.js +19 -12
- package/ui-react/with-schemas/index.js +19 -12
- package/ui-react-dom/index.js +4 -4
- package/ui-react-dom/with-schemas/index.js +4 -4
- package/ui-react-inspector/index.js +22 -22
- package/ui-react-inspector/with-schemas/index.js +22 -22
- package/umd/checkpoints/index.js +14 -9
- package/umd/checkpoints/with-schemas/index.js +14 -9
- package/umd/es6/checkpoints/index.js +20 -19
- package/umd/es6/checkpoints/with-schemas/index.js +20 -19
- package/umd/es6/index.js +84 -75
- package/umd/es6/indexes/index.js +19 -18
- package/umd/es6/indexes/with-schemas/index.js +19 -18
- package/umd/es6/mergeable-store/index.js +55 -46
- package/umd/es6/mergeable-store/with-schemas/index.js +55 -46
- package/umd/es6/metrics/index.js +29 -28
- package/umd/es6/metrics/with-schemas/index.js +29 -28
- package/umd/es6/persisters/index.js +76 -75
- package/umd/es6/persisters/persister-automerge/index.js +38 -37
- package/umd/es6/persisters/persister-automerge/with-schemas/index.js +38 -37
- package/umd/es6/persisters/persister-browser/index.js +36 -35
- package/umd/es6/persisters/persister-browser/with-schemas/index.js +36 -35
- package/umd/es6/persisters/persister-cr-sqlite-wasm/index.js +69 -68
- package/umd/es6/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +69 -68
- package/umd/es6/persisters/persister-durable-object-storage/index.js +37 -36
- package/umd/es6/persisters/persister-durable-object-storage/with-schemas/index.js +37 -36
- package/umd/es6/persisters/persister-electric-sql/index.js +69 -68
- package/umd/es6/persisters/persister-electric-sql/with-schemas/index.js +69 -68
- package/umd/es6/persisters/persister-expo-sqlite/index.js +69 -68
- package/umd/es6/persisters/persister-expo-sqlite/with-schemas/index.js +69 -68
- package/umd/es6/persisters/persister-file/index.js +37 -36
- package/umd/es6/persisters/persister-file/with-schemas/index.js +37 -36
- package/umd/es6/persisters/persister-indexed-db/index.js +42 -41
- package/umd/es6/persisters/persister-indexed-db/with-schemas/index.js +42 -41
- package/umd/es6/persisters/persister-libsql/index.js +69 -68
- package/umd/es6/persisters/persister-libsql/with-schemas/index.js +69 -68
- package/umd/es6/persisters/persister-partykit-client/index.js +37 -36
- package/umd/es6/persisters/persister-partykit-client/with-schemas/index.js +37 -36
- package/umd/es6/persisters/persister-partykit-server/index.js +15 -14
- package/umd/es6/persisters/persister-partykit-server/with-schemas/index.js +15 -14
- package/umd/es6/persisters/persister-pglite/index.js +88 -83
- package/umd/es6/persisters/persister-pglite/with-schemas/index.js +88 -83
- package/umd/es6/persisters/persister-postgres/index.js +91 -86
- package/umd/es6/persisters/persister-postgres/with-schemas/index.js +91 -86
- package/umd/es6/persisters/persister-powersync/index.js +76 -74
- package/umd/es6/persisters/persister-powersync/with-schemas/index.js +76 -74
- package/umd/es6/persisters/persister-remote/index.js +35 -34
- package/umd/es6/persisters/persister-remote/with-schemas/index.js +35 -34
- package/umd/es6/persisters/persister-sqlite-wasm/index.js +69 -68
- package/umd/es6/persisters/persister-sqlite-wasm/with-schemas/index.js +69 -68
- package/umd/es6/persisters/persister-sqlite3/index.js +69 -68
- package/umd/es6/persisters/persister-sqlite3/with-schemas/index.js +69 -68
- package/umd/es6/persisters/persister-yjs/index.js +40 -39
- package/umd/es6/persisters/persister-yjs/with-schemas/index.js +40 -39
- package/umd/es6/persisters/with-schemas/index.js +76 -75
- package/umd/es6/queries/index.js +33 -32
- package/umd/es6/queries/with-schemas/index.js +33 -32
- package/umd/es6/relationships/index.js +21 -20
- package/umd/es6/relationships/with-schemas/index.js +21 -20
- package/umd/es6/store/index.js +48 -39
- package/umd/es6/store/with-schemas/index.js +48 -39
- package/umd/es6/synchronizers/index.js +49 -46
- package/umd/es6/synchronizers/synchronizer-broadcast-channel/index.js +49 -46
- package/umd/es6/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +49 -46
- package/umd/es6/synchronizers/synchronizer-local/index.js +50 -47
- package/umd/es6/synchronizers/synchronizer-local/with-schemas/index.js +50 -47
- package/umd/es6/synchronizers/synchronizer-ws-client/index.js +53 -50
- package/umd/es6/synchronizers/synchronizer-ws-client/with-schemas/index.js +53 -50
- package/umd/es6/synchronizers/synchronizer-ws-server/index.js +67 -62
- package/umd/es6/synchronizers/synchronizer-ws-server/with-schemas/index.js +67 -62
- package/umd/es6/synchronizers/synchronizer-ws-server-durable-object/index.js +52 -49
- package/umd/es6/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js +52 -49
- package/umd/es6/synchronizers/synchronizer-ws-server-simple/index.js +12 -11
- package/umd/es6/synchronizers/synchronizer-ws-server-simple/with-schemas/index.js +12 -11
- package/umd/es6/synchronizers/with-schemas/index.js +49 -46
- package/umd/es6/tools/index.js +27 -23
- package/umd/es6/tools/with-schemas/index.js +27 -23
- package/umd/es6/ui-react/index.js +39 -36
- package/umd/es6/ui-react/with-schemas/index.js +39 -36
- package/umd/es6/ui-react-dom/index.js +14 -14
- package/umd/es6/ui-react-dom/with-schemas/index.js +14 -14
- package/umd/es6/ui-react-inspector/index.js +81 -72
- package/umd/es6/ui-react-inspector/with-schemas/index.js +81 -72
- package/umd/es6/with-schemas/index.js +84 -75
- package/umd/index.js +46 -41
- package/umd/indexes/index.js +13 -8
- package/umd/indexes/with-schemas/index.js +13 -8
- package/umd/mergeable-store/index.js +27 -22
- package/umd/mergeable-store/with-schemas/index.js +27 -22
- package/umd/metrics/index.js +20 -15
- package/umd/metrics/with-schemas/index.js +20 -15
- package/umd/persisters/index.js +18 -13
- package/umd/persisters/persister-automerge/index.js +16 -11
- package/umd/persisters/persister-automerge/with-schemas/index.js +16 -11
- package/umd/persisters/persister-browser/index.js +15 -10
- package/umd/persisters/persister-browser/with-schemas/index.js +15 -10
- package/umd/persisters/persister-cr-sqlite-wasm/index.js +17 -12
- package/umd/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +17 -12
- package/umd/persisters/persister-durable-object-storage/index.js +15 -10
- package/umd/persisters/persister-durable-object-storage/with-schemas/index.js +15 -10
- package/umd/persisters/persister-electric-sql/index.js +17 -12
- package/umd/persisters/persister-electric-sql/with-schemas/index.js +17 -12
- package/umd/persisters/persister-expo-sqlite/index.js +17 -12
- package/umd/persisters/persister-expo-sqlite/with-schemas/index.js +17 -12
- package/umd/persisters/persister-file/index.js +15 -10
- package/umd/persisters/persister-file/with-schemas/index.js +15 -10
- package/umd/persisters/persister-indexed-db/index.js +14 -9
- package/umd/persisters/persister-indexed-db/with-schemas/index.js +14 -9
- package/umd/persisters/persister-libsql/index.js +17 -12
- package/umd/persisters/persister-libsql/with-schemas/index.js +17 -12
- package/umd/persisters/persister-partykit-client/index.js +15 -10
- package/umd/persisters/persister-partykit-client/with-schemas/index.js +15 -10
- package/umd/persisters/persister-partykit-server/index.js +2 -2
- package/umd/persisters/persister-partykit-server/with-schemas/index.js +2 -2
- package/umd/persisters/persister-pglite/index.js +17 -12
- package/umd/persisters/persister-pglite/with-schemas/index.js +17 -12
- package/umd/persisters/persister-postgres/index.js +17 -12
- package/umd/persisters/persister-postgres/with-schemas/index.js +17 -12
- package/umd/persisters/persister-powersync/index.js +18 -13
- package/umd/persisters/persister-powersync/with-schemas/index.js +18 -13
- package/umd/persisters/persister-remote/index.js +13 -8
- package/umd/persisters/persister-remote/with-schemas/index.js +13 -8
- package/umd/persisters/persister-sqlite-wasm/index.js +17 -12
- package/umd/persisters/persister-sqlite-wasm/with-schemas/index.js +17 -12
- package/umd/persisters/persister-sqlite3/index.js +17 -12
- package/umd/persisters/persister-sqlite3/with-schemas/index.js +17 -12
- package/umd/persisters/persister-yjs/index.js +17 -12
- package/umd/persisters/persister-yjs/with-schemas/index.js +17 -12
- package/umd/persisters/with-schemas/index.js +18 -13
- package/umd/queries/index.js +13 -13
- package/umd/queries/with-schemas/index.js +13 -13
- package/umd/relationships/index.js +13 -8
- package/umd/relationships/with-schemas/index.js +13 -8
- package/umd/store/index.js +22 -17
- package/umd/store/with-schemas/index.js +22 -17
- package/umd/synchronizers/index.js +19 -14
- package/umd/synchronizers/synchronizer-broadcast-channel/index.js +19 -14
- package/umd/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +19 -14
- package/umd/synchronizers/synchronizer-local/index.js +19 -14
- package/umd/synchronizers/synchronizer-local/with-schemas/index.js +19 -14
- package/umd/synchronizers/synchronizer-ws-client/index.js +21 -16
- package/umd/synchronizers/synchronizer-ws-client/with-schemas/index.js +21 -16
- package/umd/synchronizers/synchronizer-ws-server/index.js +25 -20
- package/umd/synchronizers/synchronizer-ws-server/with-schemas/index.js +25 -20
- package/umd/synchronizers/synchronizer-ws-server-durable-object/index.js +22 -17
- package/umd/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js +22 -17
- package/umd/synchronizers/synchronizer-ws-server-simple/index.js +1 -1
- package/umd/synchronizers/synchronizer-ws-server-simple/with-schemas/index.js +1 -1
- package/umd/synchronizers/with-schemas/index.js +19 -14
- package/umd/tools/index.js +3 -3
- package/umd/tools/with-schemas/index.js +3 -3
- package/umd/ui-react/index.js +13 -13
- package/umd/ui-react/with-schemas/index.js +13 -13
- package/umd/ui-react-dom/index.js +4 -4
- package/umd/ui-react-dom/with-schemas/index.js +4 -4
- package/umd/ui-react-inspector/index.js +30 -25
- package/umd/ui-react-inspector/with-schemas/index.js +30 -25
- package/umd/with-schemas/index.js +46 -41
- package/with-schemas/index.js +38 -38
package/readme.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<section id="hero"><h2 id="the-reactive-data-store-for-local-first-apps">The <em>reactive</em> data store for <span>local-first apps</span>.</h2></section><p><a href="https://tinybase.org/guides/releases/#v5-4"><em>NEW!</em> v5.4 release</a></p><p><span id="one-with">"The One With Durable Objects!"</span></p><p><a class="start" href="https://tinybase.org/guides/the-basics/getting-started/">Get started</a></p><p><a href="https://tinybase.org/demos/">Try the demos</a></p><p><a href="https://tinybase.org/api/store/interfaces/store/store/">Read the docs</a></p><hr><section><h2 id="it-s-reactive">It's <em>Reactive</em></h2><p>TinyBase lets you <a href="#register-granular-listeners">listen to changes</a> made to any part of your data. This means your app will be fast, since you only spend rendering cycles on things that change. The optional <a href="#call-hooks-to-bind-to-data">bindings to React</a> and <a href="#pre-built-reactive-components">pre-built components</a> let you easily build fully reactive UIs on top of TinyBase. You even get a built-in <a href="#set-checkpoints-for-an-undo-stack">undo stack</a>, and <a href="#an-inspector-for-your-data">developer tools</a>!</p></section><section><h2 id="it-s-database-like">It's <em>Database-Like</em></h2><p>Consumer app? Enterprise app? Or even a game? Model <a href="#start-with-a-simple-key-value-store">key-value data</a> and <a href="#level-up-to-use-tabular-data">tabular data</a> with optional typed <a href="#apply-schemas-to-tables-values">schematization</a>, whatever its data structures. There are built-in <a href="#create-indexes-for-fast-lookups">indexing</a>, <a href="#define-metrics-and-aggregations">metric aggregation</a>, and tabular <a href="#model-table-relationships">relationships</a> APIs - and a powerful <a href="#build-complex-queries-with-tinyql">query engine</a> to select, join, filter, and group data (reactively!) without SQL.</p></section><section><h2 id="it-synchronizes">It <em>Synchronizes</em></h2><p>TinyBase has <a href="#synchronize-between-devices">native CRDT</a> support, meaning that you can deterministically <a href="https://tinybase.org/guides/synchronization/">synchronize</a> and merge data across multiple sources, clients, and servers. And although TinyBase is an in-memory data store, you can easily <a href="#persist-to-storage-databases-more">persist</a> your data to file, <a href="https://tinybase.org/api/persister-browser">browser storage</a>, <a href="https://tinybase.org/api/persister-indexed-db">IndexedDB</a>, <a href="https://tinybase.org/guides/persistence/database-persistence/">SQLite or PostgreSQL databases</a>, and <a href="https://tinybase.org/guides/persistence/third-party-crdt-persistence/">more</a>.</p></section><section><h2 id="it-s-built-for-a-local-first-world">It's Built For A <em>Local-First</em> World</h2><p>TinyBase works anywhere that JavaScript does, but it's especially great for local-first apps: where data is stored locally on the user's device and that can be run offline. It's tiny by name, tiny by nature: just <a href="#did-we-say-tiny">5.3kB - 11.4kB</a> and with no dependencies - yet <a href="#well-tested-and-documented">100% tested</a>, <a href="https://tinybase.org/guides/the-basics/getting-started/">fully documented</a>, and of course, <a href="https://github.com/tinyplex/tinybase">open source</a>!</p></section><hr><section id="friends"><h2 id="tinybase-works-great-on-its-own-but-also-plays-well-with-friends">TinyBase works great on its own, but also plays well with friends.</h2><div><a href="https://tinybase.org/guides/building-uis/getting-started-with-ui-react"><
|
|
1
|
+
<section id="hero"><h2 id="the-reactive-data-store-for-local-first-apps">The <em>reactive</em> data store for <span>local-first apps</span>.</h2></section><p><a href="https://tinybase.org/guides/releases/#v5-4"><em>NEW!</em> v5.4 release</a></p><p><span id="one-with">"The One With Durable Objects!"</span></p><p><a class="start" href="https://tinybase.org/guides/the-basics/getting-started/">Get started</a></p><p><a href="https://tinybase.org/demos/">Try the demos</a></p><p><a href="https://tinybase.org/api/store/interfaces/store/store/">Read the docs</a></p><hr><section><h2 id="it-s-reactive">It's <em>Reactive</em></h2><p>TinyBase lets you <a href="#register-granular-listeners">listen to changes</a> made to any part of your data. This means your app will be fast, since you only spend rendering cycles on things that change. The optional <a href="#call-hooks-to-bind-to-data">bindings to React</a> and <a href="#pre-built-reactive-components">pre-built components</a> let you easily build fully reactive UIs on top of TinyBase. You even get a built-in <a href="#set-checkpoints-for-an-undo-stack">undo stack</a>, and <a href="#an-inspector-for-your-data">developer tools</a>!</p></section><section><h2 id="it-s-database-like">It's <em>Database-Like</em></h2><p>Consumer app? Enterprise app? Or even a game? Model <a href="#start-with-a-simple-key-value-store">key-value data</a> and <a href="#level-up-to-use-tabular-data">tabular data</a> with optional typed <a href="#apply-schemas-to-tables-values">schematization</a>, whatever its data structures. There are built-in <a href="#create-indexes-for-fast-lookups">indexing</a>, <a href="#define-metrics-and-aggregations">metric aggregation</a>, and tabular <a href="#model-table-relationships">relationships</a> APIs - and a powerful <a href="#build-complex-queries-with-tinyql">query engine</a> to select, join, filter, and group data (reactively!) without SQL.</p></section><section><h2 id="it-synchronizes">It <em>Synchronizes</em></h2><p>TinyBase has <a href="#synchronize-between-devices">native CRDT</a> support, meaning that you can deterministically <a href="https://tinybase.org/guides/synchronization/">synchronize</a> and merge data across multiple sources, clients, and servers. And although TinyBase is an in-memory data store, you can easily <a href="#persist-to-storage-databases-more">persist</a> your data to file, <a href="https://tinybase.org/api/persister-browser">browser storage</a>, <a href="https://tinybase.org/api/persister-indexed-db">IndexedDB</a>, <a href="https://tinybase.org/guides/persistence/database-persistence/">SQLite or PostgreSQL databases</a>, and <a href="https://tinybase.org/guides/persistence/third-party-crdt-persistence/">more</a>.</p></section><section><h2 id="it-s-built-for-a-local-first-world">It's Built For A <em>Local-First</em> World</h2><p>TinyBase works anywhere that JavaScript does, but it's especially great for local-first apps: where data is stored locally on the user's device and that can be run offline. It's tiny by name, tiny by nature: just <a href="#did-we-say-tiny">5.3kB - 11.4kB</a> and with no dependencies - yet <a href="#well-tested-and-documented">100% tested</a>, <a href="https://tinybase.org/guides/the-basics/getting-started/">fully documented</a>, and of course, <a href="https://github.com/tinyplex/tinybase">open source</a>!</p></section><hr><section id="friends"><h2 id="tinybase-works-great-on-its-own-but-also-plays-well-with-friends">TinyBase works great on its own, but also plays well with friends.</h2><div><a href="https://tinybase.org/guides/building-uis/getting-started-with-ui-react"><img src="https://tinybase.org/react.svg?asImg" width="48"> React</a></div><div><a href="https://tinybase.org/api/persister-indexed-db/functions/creation/createindexeddbpersister"><img src="https://tinybase.org/indexeddb.svg?asImg" width="48"> IndexedDB</a></div><div><a href="https://tinybase.org/guides/schemas-and-persistence/database-persistence"><img src="https://tinybase.org/postgresql.svg?asImg" width="48"> PostgreSQL</a></div><div><a href="https://tinybase.org/guides/schemas-and-persistence/database-persistence"><img src="https://tinybase.org/pglite.svg?asImg" width="48"> PGlite</a></div><div><a href="https://tinybase.org/guides/schemas-and-persistence/database-persistence"><img src="https://tinybase.org/sqlite.svg?asImg" width="48"> SQLite</a></div><div><a href="https://tinybase.org/guides/schemas-and-persistence/database-persistence"><img src="https://tinybase.org/expo.svg?asImg" width="48"> Expo SQLite</a></div><div><a href="https://tinybase.org/guides/integrations/cloudflare-durable-objects"><img src="https://tinybase.org/cloudflare.svg?asImg" width="48"> Cloudflare</a></div><div><a href="https://tinybase.org/guides/schemas-and-persistence/database-persistence"><img src="https://tinybase.org/electric.svg?asImg" width="48"> ElectricSQL</a></div><div><a href="https://tinybase.org/guides/schemas-and-persistence/database-persistence"><img src="https://tinybase.org/turso.svg?asImg" width="48"> Turso</a></div><div><a href="https://tinybase.org/guides/schemas-and-persistence/database-persistence"><img src="https://tinybase.org/powersync.svg?asImg" width="48"> PowerSync</a></div><div><a href="https://tinybase.org/api/persister-partykit-client"><img src="https://tinybase.org/partykit.svg?asImg" width="48"> PartyKit</a></div><div><a href="https://tinybase.org/api/persister-yjs/functions/creation/createyjspersister"><img src="https://tinybase.org/yjs.svg?asImg" width="48"> YJS</a></div><div><a href="https://tinybase.org/api/persister-cr-sqlite-wasm"><img src="https://tinybase.org/crsqlite.png" width="48"> CR-SQLite</a></div><div><a href="https://tinybase.org/api/persister-automerge"><img src="https://tinybase.org/automerge.svg?asImg" width="48"> Automerge</a></div><p>(Baffled by all these logos? Check out our <a href="https://tinybase.org/guides/the-basics/architectural-options">architectural options</a> guide to make sense of it all!)</p></section><hr><section id="follow"><a href="https://github.com/tinyplex/tinybase" target="_blank"><img src="https://img.shields.io/github/stars/tinyplex/tinybase?style=for-the-badge&logo=GitHub&logoColor=%23fff&label=GitHub&labelColor=%23d81b60&color=%23333"> </a><a href="https://bsky.app/profile/tinybase.bsky.social"><img src="https://img.shields.io/badge/Bluesky-Follow-blue?style=for-the-badge&logo=bluesky&logoColor=%23fff&color=%23333&labelColor=%230285FF"> </a><a href="https://x.com/tinybasejs" target="_blank"><img src="https://img.shields.io/badge/%2F%20Twitter-Follow-blue?style=for-the-badge&logo=x&logoColor=%23fff&color=%23333&labelColor=%23000"> </a><a href="https://discord.com/invite/mGz3mevwP8" target="_blank"><img src="https://img.shields.io/discord/1027918215323590676?style=for-the-badge&logo=discord&logoColor=%23fff&label=Discord&labelColor=%233131e8&color=%23333"></a><br><a href="https://github.com/tinyplex/tinybase/discussions" target="_blank"><img src="https://img.shields.io/github/discussions/tinyplex/tinybase?style=for-the-badge&logo=GitHub&logoColor=%23fff&label=Ideas&labelColor=%23d81b60&color=%23333"> </a><a href="https://github.com/tinyplex/tinybase/issues" target="_blank"><img src="https://img.shields.io/github/issues/tinyplex/tinybase?style=for-the-badge&logo=GitHub&logoColor=%23fff&label=Issues&labelColor=%23d81b60&color=%23333"> </a><a href="#well-tested-and-documented"><img src="https://img.shields.io/badge/Tests-100%25-green?style=for-the-badge&logo=jest&logoColor=%23fff&color=%23333&labelColor=%2387c305"> </a><a href="https://www.npmjs.com/package/tinybase/v/5.4.5" target="_blank"><img src="https://img.shields.io/npm/v/tinybase?style=for-the-badge&logo=npm&logoColor=%23fff&labelColor=%23bd0005&color=%23333"></a></section><hr><section><h2 id="start-with-a-simple-key-value-store">Start with a simple key-value store.</h2><p>Creating a <a href="https://tinybase.org/api/store/interfaces/store/store/"><code>Store</code></a> requires just a simple call to the <a href="https://tinybase.org/api/store/functions/creation/createstore/"><code>createStore</code></a> function. Once you have one, you can easily set <a href="https://tinybase.org/api/store/type-aliases/store/values/"><code>Values</code></a> in it by unique <a href="https://tinybase.org/api/common/type-aliases/identity/id/"><code>Id</code></a>. And of course you can easily get them back out again.</p><p>Read more about using keyed value data in <a href="https://tinybase.org/guides/the-basics/">The Basics</a> guide.</p></section>
|
|
2
2
|
|
|
3
3
|
```js
|
|
4
4
|
import {createStore} from 'tinybase';
|
|
@@ -294,4 +294,4 @@ export const createShop: typeof createShopDecl = () => {
|
|
|
294
294
|
};
|
|
295
295
|
```
|
|
296
296
|
|
|
297
|
-
<section><h2 id="did-we-say-tiny">Did we say tiny?</h2><p>If you use the basic <a href="https://tinybase.org/api/store/"><code>store</code></a> module alone, you'll only add a gzipped <em>5.3kB</em> to your app. Incrementally add the other modules as you need more functionality, or get it all for <em>11.4kB</em>.</p><p>The optional <a href="https://tinybase.org/api/ui-react/"><code>ui-react</code></a> module is just <em>4.9kB</em>, the ui-react-dom components are another <em>2.6kB</em>, and everything is super fast. Life is easy when you have zero dependencies!</p><p>Read more about how TinyBase is structured and packaged in the <a href="https://tinybase.org/guides/how-tinybase-is-built/architecture/">Architecture</a> guide.</p></section><div class="table"><table class="fixed"><tbody><tr><th> </th><th>Minified .js.gz</th><th>Source .js</th></tr><tr><th class="right"><a href="https://tinybase.org/api/store/">tinybase/store</a> (minimal)</th><td>5.3kB</td><td>52.5kB</td></tr><tr><th class="right">tinybase (complete)</th><td>11.4kB</td><td>119.4kB</td></tr><tr><th class="right"><a href="https://tinybase.org/api/ui-react/">ui-react</a></th><td>4.9kB</td><td>53.6kB</td></tr><tr><th class="right"><a href="https://tinybase.org/api/ui-react-dom/">ui-react-dom</a></th><td>2.6kB</td><td>20.4kB</td></tr></tbody></table></div><section><h2 id="well-tested-and-documented">Well tested and documented.</h2><p>TinyBase has <em>100.0%</em> test coverage, including the code throughout the documentation - even on this page! The guides, demos, and API examples are designed to make it as easy as possible for you to get your TinyBase-powered app up and running.</p><p>Read more about how TinyBase is tested in the Unit <a href="https://tinybase.org/guides/how-tinybase-is-built/testing/">Testing</a> guide.</p></section><div class="table"><table class="fixed"><tbody><tr><th width="30%"> </th><th>Total</th><th>Tested</th><th>Coverage</th></tr><tr><th class="right">Lines</th><td>2,290</td><td>2,290</td><td>100.0%</td></tr><tr><th class="right">Statements</th><td>2,474</td><td>2,474</td><td>100.0%</td></tr><tr><th class="right">Functions</th><td>988</td><td>988</td><td>100.0%</td></tr><tr><th class="right">Branches</th><td>856</td><td>856</td><td>100.0%</td></tr><tr><th class="right">Tests</th><td colspan="3">7,464</td></tr><tr><th class="right">Assertions</th><td colspan="3">33,197</td></tr></tbody></table></div><hr><section id="sponsors"><h2 id="proud-to-be-sponsored-by">Proud to be sponsored by:</h2><a href="https://github.com/cpojer" target="_blank"><img src="https://github.com/cpojer.png?size=48" title="cpojer"></a><a href="https://github.com/expo" target="_blank"><img src="https://github.com/expo.png?size=48" title="expo"></a><a href="https://github.com/beekeeb" target="_blank"><img src="https://github.com/beekeeb.png?size=48" title="beekeeb"></a><a href="https://github.com/cancelself" target="_blank"><img src="https://github.com/cancelself.png?size=48" title="cancelself"></a><a href="https://github.com/WonderPanda" target="_blank"><img src="https://github.com/WonderPanda.png?size=48" title="WonderPanda"></a><a href="https://github.com/arpitBhalla" target="_blank"><img src="https://github.com/arpitBhalla.png?size=48" title="arpitBhalla"></a></section><section id="users"><h2 id="excited-to-be-used-by">Excited to be used by:</h2><a href="https://github.com/Apocalypsor" target="_blank"><img src="https://github.com/Apocalypsor.png?size=48" title="Apocalypsor"></a><a href="https://github.com/brentvatne" target="_blank"><img src="https://github.com/brentvatne.png?size=48" title="brentvatne"></a><a href="https://github.com/byCedric" target="_blank"><img src="https://github.com/byCedric.png?size=48" title="byCedric"></a><a href="https://github.com/circadian-risk" target="_blank"><img src="https://github.com/circadian-risk.png?size=48" title="circadian-risk"></a><a href="https://github.com/cpojer" target="_blank"><img src="https://github.com/cpojer.png?size=48" title="cpojer"></a><a href="https://github.com/cubecull" target="_blank"><img src="https://github.com/cubecull.png?size=48" title="cubecull"></a><a href="https://github.com/erwinkn" target="_blank"><img src="https://github.com/erwinkn.png?size=48" title="erwinkn"></a><a href="https://github.com/expo" target="_blank"><img src="https://github.com/expo.png?size=48" title="expo"></a><a href="https://github.com/ezra-en" target="_blank"><img src="https://github.com/ezra-en.png?size=48" title="ezra-en"></a><a href="https://github.com/fdfontes" target="_blank"><img src="https://github.com/fdfontes.png?size=48" title="fdfontes"></a><a href="https://github.com/feychenie" target="_blank"><img src="https://github.com/feychenie.png?size=48" title="feychenie"></a><a href="https://github.com/flaming-codes" target="_blank"><img src="https://github.com/flaming-codes.png?size=48" title="flaming-codes"></a><a href="https://github.com/fostertheweb" target="_blank"><img src="https://github.com/fostertheweb.png?size=48" title="fostertheweb"></a><a href="https://github.com/generates" target="_blank"><img src="https://github.com/generates.png?size=48" title="generates"></a><a href="https://github.com/Giulio987" target="_blank"><img src="https://github.com/Giulio987.png?size=48" title="Giulio987"></a><a href="https://github.com/itsdevcoffee" target="_blank"><img src="https://github.com/itsdevcoffee.png?size=48" title="itsdevcoffee"></a><a href="https://github.com/jaysc" target="_blank"><img src="https://github.com/jaysc.png?size=48" title="jaysc"></a><a href="https://github.com/jbolda" target="_blank"><img src="https://github.com/jbolda.png?size=48" title="jbolda"></a><a href="https://github.com/Kayoo-asso" target="_blank"><img src="https://github.com/Kayoo-asso.png?size=48" title="Kayoo-asso"></a><a href="https://github.com/kotofurumiya" target="_blank"><img src="https://github.com/kotofurumiya.png?size=48" title="kotofurumiya"></a><a href="https://github.com/Kudo" target="_blank"><img src="https://github.com/Kudo.png?size=48" title="Kudo"></a><a href="https://github.com/learn-anything" target="_blank"><img src="https://github.com/learn-anything.png?size=48" title="learn-anything"></a><a href="https://github.com/lluc" target="_blank"><img src="https://github.com/lluc.png?size=48" title="lluc"></a><a href="https://github.com/marksteve" target="_blank"><img src="https://github.com/marksteve.png?size=48" title="marksteve"></a><a href="https://github.com/miking-the-viking" target="_blank"><img src="https://github.com/miking-the-viking.png?size=48" title="miking-the-viking"></a><a href="https://github.com/mjamesderocher" target="_blank"><img src="https://github.com/mjamesderocher.png?size=48" title="mjamesderocher"></a><a href="https://github.com/mouktardev" target="_blank"><img src="https://github.com/mouktardev.png?size=48" title="mouktardev"></a><a href="https://github.com/nickmessing" target="_blank"><img src="https://github.com/nickmessing.png?size=48" title="nickmessing"></a><a href="https://github.com/nikitavoloboev" target="_blank"><img src="https://github.com/nikitavoloboev.png?size=48" title="nikitavoloboev"></a><a href="https://github.com/nkzw-tech" target="_blank"><img src="https://github.com/nkzw-tech.png?size=48" title="nkzw-tech"></a><a href="https://github.com/palerdot" target="_blank"><img src="https://github.com/palerdot.png?size=48" title="palerdot"></a><a href="https://github.com/PorcoRosso85" target="_blank"><img src="https://github.com/PorcoRosso85.png?size=48" title="PorcoRosso85"></a><a href="https://github.com/primodiumxyz" target="_blank"><img src="https://github.com/primodiumxyz.png?size=48" title="primodiumxyz"></a><a href="https://github.com/shaneosullivan" target="_blank"><img src="https://github.com/shaneosullivan.png?size=48" title="shaneosullivan"></a><a href="https://github.com/sudo-self" target="_blank"><img src="https://github.com/sudo-self.png?size=48" title="sudo-self"></a><a href="https://github.com/SuperSonicHub1" target="_blank"><img src="https://github.com/SuperSonicHub1.png?size=48" title="SuperSonicHub1"></a><a href="https://github.com/threepointone" target="_blank"><img src="https://github.com/threepointone.png?size=48" title="threepointone"></a><a href="https://github.com/uptonking" target="_blank"><img src="https://github.com/uptonking.png?size=48" title="uptonking"></a><a href="https://github.com/ViktorZhurbin" target="_blank"><img src="https://github.com/ViktorZhurbin.png?size=48" title="ViktorZhurbin"></a><a href="https://github.com/WonderPanda" target="_blank"><img src="https://github.com/WonderPanda.png?size=48" title="WonderPanda"></a></section><hr><p><a class="start" href="https://tinybase.org/guides/the-basics/getting-started/">Get started</a></p><p><a href="https://tinybase.org/demos/">Try the demos</a></p><p><a href="https://tinybase.org/api/store/interfaces/store/store/">Read the docs</a></p><hr><section id="about"><h2 id="about">About</h2><p>Modern apps deserve better. Why trade reactive user experiences to be able to use relational data? Or sacrifice features for bundle size? And why does the cloud do all the work <a href="https://localfirstweb.dev/" target="_blank">anyway</a>?</p><p>Building TinyBase was originally an interesting exercise for <a rel="me" href="https://tripleodeon.com">me</a> in API design, minification, and documentation. But now it has taken on a life of its own, and has grown beyond my wildest expectations.</p><p>It could not have been built without these great <a href="https://tinybase.org/guides/how-tinybase-is-built/credits/#giants">projects</a> and <a href="https://tinybase.org/guides/how-tinybase-is-built/credits/#and-friends">friends</a>, and I hope you enjoy using it as much as I do building it!</p></section><section id="story"><h2 id="the-story">The story</h2><a href="https://youtu.be/hXL7OkW-Prk?t=1232" target="_blank"><img src="https://tinybase.org/youtube.webp"></a></section>
|
|
297
|
+
<section><h2 id="did-we-say-tiny">Did we say tiny?</h2><p>If you use the basic <a href="https://tinybase.org/api/store/"><code>store</code></a> module alone, you'll only add a gzipped <em>5.3kB</em> to your app. Incrementally add the other modules as you need more functionality, or get it all for <em>11.4kB</em>.</p><p>The optional <a href="https://tinybase.org/api/ui-react/"><code>ui-react</code></a> module is just <em>4.9kB</em>, the ui-react-dom components are another <em>2.6kB</em>, and everything is super fast. Life is easy when you have zero dependencies!</p><p>Read more about how TinyBase is structured and packaged in the <a href="https://tinybase.org/guides/how-tinybase-is-built/architecture/">Architecture</a> guide.</p></section><div class="table"><table class="fixed"><tbody><tr><th> </th><th>Minified .js.gz</th><th>Source .js</th></tr><tr><th class="right"><a href="https://tinybase.org/api/store/">tinybase/store</a> (minimal)</th><td>5.3kB</td><td>52.5kB</td></tr><tr><th class="right">tinybase (complete)</th><td>11.4kB</td><td>119.5kB</td></tr><tr><th class="right"><a href="https://tinybase.org/api/ui-react/">ui-react</a></th><td>4.9kB</td><td>53.7kB</td></tr><tr><th class="right"><a href="https://tinybase.org/api/ui-react-dom/">ui-react-dom</a></th><td>2.6kB</td><td>20.4kB</td></tr></tbody></table></div><section><h2 id="well-tested-and-documented">Well tested and documented.</h2><p>TinyBase has <em>100.0%</em> test coverage, including the code throughout the documentation - even on this page! The guides, demos, and API examples are designed to make it as easy as possible for you to get your TinyBase-powered app up and running.</p><p>Read more about how TinyBase is tested in the Unit <a href="https://tinybase.org/guides/how-tinybase-is-built/testing/">Testing</a> guide.</p></section><div class="table"><table class="fixed"><tbody><tr><th width="30%"> </th><th>Total</th><th>Tested</th><th>Coverage</th></tr><tr><th class="right">Lines</th><td>2,290</td><td>2,290</td><td>100.0%</td></tr><tr><th class="right">Statements</th><td>2,474</td><td>2,474</td><td>100.0%</td></tr><tr><th class="right">Functions</th><td>988</td><td>988</td><td>100.0%</td></tr><tr><th class="right">Branches</th><td>856</td><td>856</td><td>100.0%</td></tr><tr><th class="right">Tests</th><td colspan="3">7,464</td></tr><tr><th class="right">Assertions</th><td colspan="3">33,206</td></tr></tbody></table></div><hr><section id="sponsors"><h2 id="proud-to-be-sponsored-by">Proud to be sponsored by:</h2><a href="https://github.com/cpojer" target="_blank"><img src="https://github.com/cpojer.png?size=48" title="cpojer" width="48" height="48"></a><a href="https://github.com/expo" target="_blank"><img src="https://github.com/expo.png?size=48" title="expo" width="48" height="48"></a><a href="https://github.com/beekeeb" target="_blank"><img src="https://github.com/beekeeb.png?size=48" title="beekeeb" width="48" height="48"></a><a href="https://github.com/cancelself" target="_blank"><img src="https://github.com/cancelself.png?size=48" title="cancelself" width="48" height="48"></a><a href="https://github.com/WonderPanda" target="_blank"><img src="https://github.com/WonderPanda.png?size=48" title="WonderPanda" width="48" height="48"></a><a href="https://github.com/arpitBhalla" target="_blank"><img src="https://github.com/arpitBhalla.png?size=48" title="arpitBhalla" width="48" height="48"></a></section><section id="users"><h2 id="excited-to-be-used-by">Excited to be used by:</h2><a href="https://github.com/behrends" target="_blank"><img src="https://github.com/behrends.png?size=48" title="behrends" width="48" height="48"></a><a href="https://github.com/betomoedano" target="_blank"><img src="https://github.com/betomoedano.png?size=48" title="betomoedano" width="48" height="48"></a><a href="https://github.com/brentvatne" target="_blank"><img src="https://github.com/brentvatne.png?size=48" title="brentvatne" width="48" height="48"></a><a href="https://github.com/byCedric" target="_blank"><img src="https://github.com/byCedric.png?size=48" title="byCedric" width="48" height="48"></a><a href="https://github.com/circadian-risk" target="_blank"><img src="https://github.com/circadian-risk.png?size=48" title="circadian-risk" width="48" height="48"></a><a href="https://github.com/cpojer" target="_blank"><img src="https://github.com/cpojer.png?size=48" title="cpojer" width="48" height="48"></a><a href="https://github.com/cubecull" target="_blank"><img src="https://github.com/cubecull.png?size=48" title="cubecull" width="48" height="48"></a><a href="https://github.com/erwinkn" target="_blank"><img src="https://github.com/erwinkn.png?size=48" title="erwinkn" width="48" height="48"></a><a href="https://github.com/expo" target="_blank"><img src="https://github.com/expo.png?size=48" title="expo" width="48" height="48"></a><a href="https://github.com/ezra-en" target="_blank"><img src="https://github.com/ezra-en.png?size=48" title="ezra-en" width="48" height="48"></a><a href="https://github.com/feychenie" target="_blank"><img src="https://github.com/feychenie.png?size=48" title="feychenie" width="48" height="48"></a><a href="https://github.com/flaming-codes" target="_blank"><img src="https://github.com/flaming-codes.png?size=48" title="flaming-codes" width="48" height="48"></a><a href="https://github.com/fostertheweb" target="_blank"><img src="https://github.com/fostertheweb.png?size=48" title="fostertheweb" width="48" height="48"></a><a href="https://github.com/Giulio987" target="_blank"><img src="https://github.com/Giulio987.png?size=48" title="Giulio987" width="48" height="48"></a><a href="https://github.com/hi-ogawa" target="_blank"><img src="https://github.com/hi-ogawa.png?size=48" title="hi-ogawa" width="48" height="48"></a><a href="https://github.com/itsdevcoffee" target="_blank"><img src="https://github.com/itsdevcoffee.png?size=48" title="itsdevcoffee" width="48" height="48"></a><a href="https://github.com/jbolda" target="_blank"><img src="https://github.com/jbolda.png?size=48" title="jbolda" width="48" height="48"></a><a href="https://github.com/Kayoo-asso" target="_blank"><img src="https://github.com/Kayoo-asso.png?size=48" title="Kayoo-asso" width="48" height="48"></a><a href="https://github.com/kotofurumiya" target="_blank"><img src="https://github.com/kotofurumiya.png?size=48" title="kotofurumiya" width="48" height="48"></a><a href="https://github.com/Kudo" target="_blank"><img src="https://github.com/Kudo.png?size=48" title="Kudo" width="48" height="48"></a><a href="https://github.com/learn-anything" target="_blank"><img src="https://github.com/learn-anything.png?size=48" title="learn-anything" width="48" height="48"></a><a href="https://github.com/lluc" target="_blank"><img src="https://github.com/lluc.png?size=48" title="lluc" width="48" height="48"></a><a href="https://github.com/marksteve" target="_blank"><img src="https://github.com/marksteve.png?size=48" title="marksteve" width="48" height="48"></a><a href="https://github.com/miking-the-viking" target="_blank"><img src="https://github.com/miking-the-viking.png?size=48" title="miking-the-viking" width="48" height="48"></a><a href="https://github.com/mjamesderocher" target="_blank"><img src="https://github.com/mjamesderocher.png?size=48" title="mjamesderocher" width="48" height="48"></a><a href="https://github.com/mouktardev" target="_blank"><img src="https://github.com/mouktardev.png?size=48" title="mouktardev" width="48" height="48"></a><a href="https://github.com/nickmessing" target="_blank"><img src="https://github.com/nickmessing.png?size=48" title="nickmessing" width="48" height="48"></a><a href="https://github.com/nikitavoloboev" target="_blank"><img src="https://github.com/nikitavoloboev.png?size=48" title="nikitavoloboev" width="48" height="48"></a><a href="https://github.com/nkzw-tech" target="_blank"><img src="https://github.com/nkzw-tech.png?size=48" title="nkzw-tech" width="48" height="48"></a><a href="https://github.com/palerdot" target="_blank"><img src="https://github.com/palerdot.png?size=48" title="palerdot" width="48" height="48"></a><a href="https://github.com/PorcoRosso85" target="_blank"><img src="https://github.com/PorcoRosso85.png?size=48" title="PorcoRosso85" width="48" height="48"></a><a href="https://github.com/primodiumxyz" target="_blank"><img src="https://github.com/primodiumxyz.png?size=48" title="primodiumxyz" width="48" height="48"></a><a href="https://github.com/shaneosullivan" target="_blank"><img src="https://github.com/shaneosullivan.png?size=48" title="shaneosullivan" width="48" height="48"></a><a href="https://github.com/sudo-self" target="_blank"><img src="https://github.com/sudo-self.png?size=48" title="sudo-self" width="48" height="48"></a><a href="https://github.com/SuperSonicHub1" target="_blank"><img src="https://github.com/SuperSonicHub1.png?size=48" title="SuperSonicHub1" width="48" height="48"></a><a href="https://github.com/threepointone" target="_blank"><img src="https://github.com/threepointone.png?size=48" title="threepointone" width="48" height="48"></a><a href="https://github.com/uptonking" target="_blank"><img src="https://github.com/uptonking.png?size=48" title="uptonking" width="48" height="48"></a><a href="https://github.com/ViktorZhurbin" target="_blank"><img src="https://github.com/ViktorZhurbin.png?size=48" title="ViktorZhurbin" width="48" height="48"></a><a href="https://github.com/wilkerlucio" target="_blank"><img src="https://github.com/wilkerlucio.png?size=48" title="wilkerlucio" width="48" height="48"></a><a href="https://github.com/WonderPanda" target="_blank"><img src="https://github.com/WonderPanda.png?size=48" title="WonderPanda" width="48" height="48"></a></section><hr><p><a class="start" href="https://tinybase.org/guides/the-basics/getting-started/">Get started</a></p><p><a href="https://tinybase.org/demos/">Try the demos</a></p><p><a href="https://tinybase.org/api/store/interfaces/store/store/">Read the docs</a></p><hr><section id="about"><h2 id="about">About</h2><p>Modern apps deserve better. Why trade reactive user experiences to be able to use relational data? Or sacrifice features for bundle size? And why does the cloud do all the work <a href="https://localfirstweb.dev/" target="_blank">anyway</a>?</p><p>Building TinyBase was originally an interesting exercise for <a rel="me" href="https://tripleodeon.com">me</a> in API design, minification, and documentation. But now it has taken on a life of its own, and has grown beyond my wildest expectations.</p><p>It could not have been built without these great <a href="https://tinybase.org/guides/how-tinybase-is-built/credits/#giants">projects</a> and <a href="https://tinybase.org/guides/how-tinybase-is-built/credits/#and-friends">friends</a>, and I hope you enjoy using it as much as I do building it!</p></section><section id="story"><h2 id="the-story">The story</h2><a href="https://youtu.be/hXL7OkW-Prk?t=1232" target="_blank"><img src="https://tinybase.org/youtube.webp"></a></section>
|
package/relationships/index.js
CHANGED
|
@@ -2,7 +2,7 @@ const getTypeOf = (thing) => typeof thing;
|
|
|
2
2
|
const EMPTY_STRING = '';
|
|
3
3
|
const STRING = getTypeOf(EMPTY_STRING);
|
|
4
4
|
|
|
5
|
-
const isUndefined = (thing) => thing ==
|
|
5
|
+
const isUndefined = (thing) => thing == undefined;
|
|
6
6
|
const ifNotUndefined = (value, then, otherwise) =>
|
|
7
7
|
isUndefined(value) ? otherwise?.() : then(value);
|
|
8
8
|
const isString = (thing) => getTypeOf(thing) == STRING;
|
|
@@ -149,7 +149,7 @@ const getDefinableFunctions = (
|
|
|
149
149
|
const oldRowValue = mapGet(rowValues, rowId);
|
|
150
150
|
const newRowValue = hasRow(tableId, rowId)
|
|
151
151
|
? validateRowValue(getRowValue(getCell, rowId))
|
|
152
|
-
:
|
|
152
|
+
: undefined;
|
|
153
153
|
if (
|
|
154
154
|
!(
|
|
155
155
|
oldRowValue === newRowValue ||
|
|
@@ -164,7 +164,7 @@ const getDefinableFunctions = (
|
|
|
164
164
|
const oldSortKey = mapGet(sortKeys, rowId);
|
|
165
165
|
const newSortKey = hasRow(tableId, rowId)
|
|
166
166
|
? getSortKey(getCell, rowId)
|
|
167
|
-
:
|
|
167
|
+
: undefined;
|
|
168
168
|
if (oldSortKey != newSortKey) {
|
|
169
169
|
mapSet(changedSortKeys, rowId, newSortKey);
|
|
170
170
|
}
|
|
@@ -307,7 +307,7 @@ const getListenerFunctions = (getThing) => {
|
|
|
307
307
|
);
|
|
308
308
|
const delListener = (id) =>
|
|
309
309
|
ifNotUndefined(mapGet(allListeners, id), ([, idSetNode, idOrNulls]) => {
|
|
310
|
-
visitTree(idSetNode, idOrNulls ?? [EMPTY_STRING],
|
|
310
|
+
visitTree(idSetNode, idOrNulls ?? [EMPTY_STRING], undefined, (idSet) => {
|
|
311
311
|
collDel(idSet, id);
|
|
312
312
|
return collIsEmpty(idSet) ? 1 : 0;
|
|
313
313
|
});
|
|
@@ -361,7 +361,7 @@ const createRelationships = getCreateFunction((store) => {
|
|
|
361
361
|
] = getDefinableFunctions(
|
|
362
362
|
store,
|
|
363
363
|
() => [mapNew(), mapNew(), mapNew(), mapNew()],
|
|
364
|
-
(value) => (isUndefined(value) ?
|
|
364
|
+
(value) => (isUndefined(value) ? undefined : value + EMPTY_STRING),
|
|
365
365
|
addListener,
|
|
366
366
|
callListeners,
|
|
367
367
|
);
|
|
@@ -2,7 +2,7 @@ const getTypeOf = (thing) => typeof thing;
|
|
|
2
2
|
const EMPTY_STRING = '';
|
|
3
3
|
const STRING = getTypeOf(EMPTY_STRING);
|
|
4
4
|
|
|
5
|
-
const isUndefined = (thing) => thing ==
|
|
5
|
+
const isUndefined = (thing) => thing == undefined;
|
|
6
6
|
const ifNotUndefined = (value, then, otherwise) =>
|
|
7
7
|
isUndefined(value) ? otherwise?.() : then(value);
|
|
8
8
|
const isString = (thing) => getTypeOf(thing) == STRING;
|
|
@@ -149,7 +149,7 @@ const getDefinableFunctions = (
|
|
|
149
149
|
const oldRowValue = mapGet(rowValues, rowId);
|
|
150
150
|
const newRowValue = hasRow(tableId, rowId)
|
|
151
151
|
? validateRowValue(getRowValue(getCell, rowId))
|
|
152
|
-
:
|
|
152
|
+
: undefined;
|
|
153
153
|
if (
|
|
154
154
|
!(
|
|
155
155
|
oldRowValue === newRowValue ||
|
|
@@ -164,7 +164,7 @@ const getDefinableFunctions = (
|
|
|
164
164
|
const oldSortKey = mapGet(sortKeys, rowId);
|
|
165
165
|
const newSortKey = hasRow(tableId, rowId)
|
|
166
166
|
? getSortKey(getCell, rowId)
|
|
167
|
-
:
|
|
167
|
+
: undefined;
|
|
168
168
|
if (oldSortKey != newSortKey) {
|
|
169
169
|
mapSet(changedSortKeys, rowId, newSortKey);
|
|
170
170
|
}
|
|
@@ -307,7 +307,7 @@ const getListenerFunctions = (getThing) => {
|
|
|
307
307
|
);
|
|
308
308
|
const delListener = (id) =>
|
|
309
309
|
ifNotUndefined(mapGet(allListeners, id), ([, idSetNode, idOrNulls]) => {
|
|
310
|
-
visitTree(idSetNode, idOrNulls ?? [EMPTY_STRING],
|
|
310
|
+
visitTree(idSetNode, idOrNulls ?? [EMPTY_STRING], undefined, (idSet) => {
|
|
311
311
|
collDel(idSet, id);
|
|
312
312
|
return collIsEmpty(idSet) ? 1 : 0;
|
|
313
313
|
});
|
|
@@ -361,7 +361,7 @@ const createRelationships = getCreateFunction((store) => {
|
|
|
361
361
|
] = getDefinableFunctions(
|
|
362
362
|
store,
|
|
363
363
|
() => [mapNew(), mapNew(), mapNew(), mapNew()],
|
|
364
|
-
(value) => (isUndefined(value) ?
|
|
364
|
+
(value) => (isUndefined(value) ? undefined : value + EMPTY_STRING),
|
|
365
365
|
addListener,
|
|
366
366
|
callListeners,
|
|
367
367
|
);
|
package/store/index.js
CHANGED
|
@@ -25,7 +25,7 @@ const id = (key) => EMPTY_STRING + key;
|
|
|
25
25
|
|
|
26
26
|
const isFiniteNumber = isFinite;
|
|
27
27
|
const isInstanceOf = (thing, cls) => thing instanceof cls;
|
|
28
|
-
const isUndefined = (thing) => thing ==
|
|
28
|
+
const isUndefined = (thing) => thing == undefined;
|
|
29
29
|
const ifNotUndefined = (value, then, otherwise) =>
|
|
30
30
|
isUndefined(value) ? otherwise?.() : then(value);
|
|
31
31
|
const isTypeStringOrBoolean = (type) => type == STRING || type == BOOLEAN;
|
|
@@ -245,7 +245,7 @@ const getListenerFunctions = (getThing) => {
|
|
|
245
245
|
);
|
|
246
246
|
const delListener = (id) =>
|
|
247
247
|
ifNotUndefined(mapGet(allListeners, id), ([, idSetNode, idOrNulls]) => {
|
|
248
|
-
visitTree(idSetNode, idOrNulls ?? [EMPTY_STRING],
|
|
248
|
+
visitTree(idSetNode, idOrNulls ?? [EMPTY_STRING], undefined, (idSet) => {
|
|
249
249
|
collDel(idSet, id);
|
|
250
250
|
return collIsEmpty(idSet) ? 1 : 0;
|
|
251
251
|
});
|
|
@@ -286,7 +286,7 @@ const getCellOrValueType = (cellOrValue) => {
|
|
|
286
286
|
return isTypeStringOrBoolean(type) ||
|
|
287
287
|
(type == NUMBER && isFiniteNumber(cellOrValue))
|
|
288
288
|
? type
|
|
289
|
-
:
|
|
289
|
+
: undefined;
|
|
290
290
|
};
|
|
291
291
|
const setOrDelCell = (store, tableId, rowId, cellId, cell) =>
|
|
292
292
|
isUndefined(cell)
|
|
@@ -309,7 +309,7 @@ const idsChanged = (changedIds, id2, addedOrRemoved) =>
|
|
|
309
309
|
mapSet(
|
|
310
310
|
changedIds,
|
|
311
311
|
id2,
|
|
312
|
-
mapGet(changedIds, id2) == -addedOrRemoved ?
|
|
312
|
+
mapGet(changedIds, id2) == -addedOrRemoved ? undefined : addedOrRemoved,
|
|
313
313
|
);
|
|
314
314
|
const createStore = () => {
|
|
315
315
|
let hasTablesSchema;
|
|
@@ -783,7 +783,7 @@ const createStore = () => {
|
|
|
783
783
|
const callTabularListenersForChanges = (mutator) => {
|
|
784
784
|
const hasTablesNow = hasTables();
|
|
785
785
|
if (hasTablesNow != hadTables) {
|
|
786
|
-
callListeners(hasTablesListeners[mutator],
|
|
786
|
+
callListeners(hasTablesListeners[mutator], undefined, hasTablesNow);
|
|
787
787
|
}
|
|
788
788
|
const emptySortedRowIdListeners = collIsEmpty(
|
|
789
789
|
sortedRowIdsListeners[mutator],
|
|
@@ -922,7 +922,7 @@ const createStore = () => {
|
|
|
922
922
|
}
|
|
923
923
|
});
|
|
924
924
|
if (tablesChanged) {
|
|
925
|
-
callListeners(tablesListeners[mutator],
|
|
925
|
+
callListeners(tablesListeners[mutator], undefined, getCellChange);
|
|
926
926
|
}
|
|
927
927
|
}
|
|
928
928
|
}
|
|
@@ -930,7 +930,7 @@ const createStore = () => {
|
|
|
930
930
|
const callValuesListenersForChanges = (mutator) => {
|
|
931
931
|
const hasValuesNow = hasValues();
|
|
932
932
|
if (hasValuesNow != hadValues) {
|
|
933
|
-
callListeners(hasValuesListeners[mutator],
|
|
933
|
+
callListeners(hasValuesListeners[mutator], undefined, hasValuesNow);
|
|
934
934
|
}
|
|
935
935
|
const emptyIdAndHasListeners =
|
|
936
936
|
collIsEmpty(valueIdsListeners[mutator]) &&
|
|
@@ -964,7 +964,7 @@ const createStore = () => {
|
|
|
964
964
|
}
|
|
965
965
|
});
|
|
966
966
|
if (valuesChanged) {
|
|
967
|
-
callListeners(valuesListeners[mutator],
|
|
967
|
+
callListeners(valuesListeners[mutator], undefined, getValueChange);
|
|
968
968
|
}
|
|
969
969
|
}
|
|
970
970
|
}
|
|
@@ -1051,7 +1051,7 @@ const createStore = () => {
|
|
|
1051
1051
|
);
|
|
1052
1052
|
const addRow = (tableId, row, reuseRowIds = true) =>
|
|
1053
1053
|
transaction(() => {
|
|
1054
|
-
let rowId =
|
|
1054
|
+
let rowId = undefined;
|
|
1055
1055
|
if (validateRow(tableId, rowId, row)) {
|
|
1056
1056
|
tableId = id(tableId);
|
|
1057
1057
|
setValidRow(
|
|
@@ -1273,12 +1273,12 @@ const createStore = () => {
|
|
|
1273
1273
|
changedCells,
|
|
1274
1274
|
(table, tableId) =>
|
|
1275
1275
|
mapGet(changedTableIds, tableId) === -1
|
|
1276
|
-
?
|
|
1276
|
+
? undefined
|
|
1277
1277
|
: mapToObj(
|
|
1278
1278
|
table,
|
|
1279
1279
|
(row, rowId) =>
|
|
1280
1280
|
mapGet(mapGet(changedRowIds, tableId), rowId) === -1
|
|
1281
|
-
?
|
|
1281
|
+
? undefined
|
|
1282
1282
|
: mapToObj(
|
|
1283
1283
|
row,
|
|
1284
1284
|
([, newCell]) => newCell,
|
|
@@ -1336,7 +1336,7 @@ const createStore = () => {
|
|
|
1336
1336
|
);
|
|
1337
1337
|
collClear(changedValues);
|
|
1338
1338
|
}
|
|
1339
|
-
callListeners(finishTransactionListeners[0],
|
|
1339
|
+
callListeners(finishTransactionListeners[0], undefined);
|
|
1340
1340
|
transactions = -1;
|
|
1341
1341
|
callInvalidCellListeners(0);
|
|
1342
1342
|
if (!collIsEmpty(changedCells)) {
|
|
@@ -1347,7 +1347,7 @@ const createStore = () => {
|
|
|
1347
1347
|
callValuesListenersForChanges(0);
|
|
1348
1348
|
}
|
|
1349
1349
|
internalListeners[1]?.();
|
|
1350
|
-
callListeners(finishTransactionListeners[1],
|
|
1350
|
+
callListeners(finishTransactionListeners[1], undefined);
|
|
1351
1351
|
internalListeners[2]?.();
|
|
1352
1352
|
transactions = 0;
|
|
1353
1353
|
hadTables = hasTables();
|
|
@@ -1632,7 +1632,7 @@ const createStore = () => {
|
|
|
1632
1632
|
addListener(
|
|
1633
1633
|
args[argumentCount],
|
|
1634
1634
|
idSetNode[args[argumentCount + 1] ? 1 : 0],
|
|
1635
|
-
argumentCount > 0 ? slice(args, 0, argumentCount) :
|
|
1635
|
+
argumentCount > 0 ? slice(args, 0, argumentCount) : undefined,
|
|
1636
1636
|
pathGetters,
|
|
1637
1637
|
extraArgsGetter,
|
|
1638
1638
|
);
|
|
@@ -25,7 +25,7 @@ const id = (key) => EMPTY_STRING + key;
|
|
|
25
25
|
|
|
26
26
|
const isFiniteNumber = isFinite;
|
|
27
27
|
const isInstanceOf = (thing, cls) => thing instanceof cls;
|
|
28
|
-
const isUndefined = (thing) => thing ==
|
|
28
|
+
const isUndefined = (thing) => thing == undefined;
|
|
29
29
|
const ifNotUndefined = (value, then, otherwise) =>
|
|
30
30
|
isUndefined(value) ? otherwise?.() : then(value);
|
|
31
31
|
const isTypeStringOrBoolean = (type) => type == STRING || type == BOOLEAN;
|
|
@@ -245,7 +245,7 @@ const getListenerFunctions = (getThing) => {
|
|
|
245
245
|
);
|
|
246
246
|
const delListener = (id) =>
|
|
247
247
|
ifNotUndefined(mapGet(allListeners, id), ([, idSetNode, idOrNulls]) => {
|
|
248
|
-
visitTree(idSetNode, idOrNulls ?? [EMPTY_STRING],
|
|
248
|
+
visitTree(idSetNode, idOrNulls ?? [EMPTY_STRING], undefined, (idSet) => {
|
|
249
249
|
collDel(idSet, id);
|
|
250
250
|
return collIsEmpty(idSet) ? 1 : 0;
|
|
251
251
|
});
|
|
@@ -286,7 +286,7 @@ const getCellOrValueType = (cellOrValue) => {
|
|
|
286
286
|
return isTypeStringOrBoolean(type) ||
|
|
287
287
|
(type == NUMBER && isFiniteNumber(cellOrValue))
|
|
288
288
|
? type
|
|
289
|
-
:
|
|
289
|
+
: undefined;
|
|
290
290
|
};
|
|
291
291
|
const setOrDelCell = (store, tableId, rowId, cellId, cell) =>
|
|
292
292
|
isUndefined(cell)
|
|
@@ -309,7 +309,7 @@ const idsChanged = (changedIds, id2, addedOrRemoved) =>
|
|
|
309
309
|
mapSet(
|
|
310
310
|
changedIds,
|
|
311
311
|
id2,
|
|
312
|
-
mapGet(changedIds, id2) == -addedOrRemoved ?
|
|
312
|
+
mapGet(changedIds, id2) == -addedOrRemoved ? undefined : addedOrRemoved,
|
|
313
313
|
);
|
|
314
314
|
const createStore = () => {
|
|
315
315
|
let hasTablesSchema;
|
|
@@ -783,7 +783,7 @@ const createStore = () => {
|
|
|
783
783
|
const callTabularListenersForChanges = (mutator) => {
|
|
784
784
|
const hasTablesNow = hasTables();
|
|
785
785
|
if (hasTablesNow != hadTables) {
|
|
786
|
-
callListeners(hasTablesListeners[mutator],
|
|
786
|
+
callListeners(hasTablesListeners[mutator], undefined, hasTablesNow);
|
|
787
787
|
}
|
|
788
788
|
const emptySortedRowIdListeners = collIsEmpty(
|
|
789
789
|
sortedRowIdsListeners[mutator],
|
|
@@ -922,7 +922,7 @@ const createStore = () => {
|
|
|
922
922
|
}
|
|
923
923
|
});
|
|
924
924
|
if (tablesChanged) {
|
|
925
|
-
callListeners(tablesListeners[mutator],
|
|
925
|
+
callListeners(tablesListeners[mutator], undefined, getCellChange);
|
|
926
926
|
}
|
|
927
927
|
}
|
|
928
928
|
}
|
|
@@ -930,7 +930,7 @@ const createStore = () => {
|
|
|
930
930
|
const callValuesListenersForChanges = (mutator) => {
|
|
931
931
|
const hasValuesNow = hasValues();
|
|
932
932
|
if (hasValuesNow != hadValues) {
|
|
933
|
-
callListeners(hasValuesListeners[mutator],
|
|
933
|
+
callListeners(hasValuesListeners[mutator], undefined, hasValuesNow);
|
|
934
934
|
}
|
|
935
935
|
const emptyIdAndHasListeners =
|
|
936
936
|
collIsEmpty(valueIdsListeners[mutator]) &&
|
|
@@ -964,7 +964,7 @@ const createStore = () => {
|
|
|
964
964
|
}
|
|
965
965
|
});
|
|
966
966
|
if (valuesChanged) {
|
|
967
|
-
callListeners(valuesListeners[mutator],
|
|
967
|
+
callListeners(valuesListeners[mutator], undefined, getValueChange);
|
|
968
968
|
}
|
|
969
969
|
}
|
|
970
970
|
}
|
|
@@ -1051,7 +1051,7 @@ const createStore = () => {
|
|
|
1051
1051
|
);
|
|
1052
1052
|
const addRow = (tableId, row, reuseRowIds = true) =>
|
|
1053
1053
|
transaction(() => {
|
|
1054
|
-
let rowId =
|
|
1054
|
+
let rowId = undefined;
|
|
1055
1055
|
if (validateRow(tableId, rowId, row)) {
|
|
1056
1056
|
tableId = id(tableId);
|
|
1057
1057
|
setValidRow(
|
|
@@ -1273,12 +1273,12 @@ const createStore = () => {
|
|
|
1273
1273
|
changedCells,
|
|
1274
1274
|
(table, tableId) =>
|
|
1275
1275
|
mapGet(changedTableIds, tableId) === -1
|
|
1276
|
-
?
|
|
1276
|
+
? undefined
|
|
1277
1277
|
: mapToObj(
|
|
1278
1278
|
table,
|
|
1279
1279
|
(row, rowId) =>
|
|
1280
1280
|
mapGet(mapGet(changedRowIds, tableId), rowId) === -1
|
|
1281
|
-
?
|
|
1281
|
+
? undefined
|
|
1282
1282
|
: mapToObj(
|
|
1283
1283
|
row,
|
|
1284
1284
|
([, newCell]) => newCell,
|
|
@@ -1336,7 +1336,7 @@ const createStore = () => {
|
|
|
1336
1336
|
);
|
|
1337
1337
|
collClear(changedValues);
|
|
1338
1338
|
}
|
|
1339
|
-
callListeners(finishTransactionListeners[0],
|
|
1339
|
+
callListeners(finishTransactionListeners[0], undefined);
|
|
1340
1340
|
transactions = -1;
|
|
1341
1341
|
callInvalidCellListeners(0);
|
|
1342
1342
|
if (!collIsEmpty(changedCells)) {
|
|
@@ -1347,7 +1347,7 @@ const createStore = () => {
|
|
|
1347
1347
|
callValuesListenersForChanges(0);
|
|
1348
1348
|
}
|
|
1349
1349
|
internalListeners[1]?.();
|
|
1350
|
-
callListeners(finishTransactionListeners[1],
|
|
1350
|
+
callListeners(finishTransactionListeners[1], undefined);
|
|
1351
1351
|
internalListeners[2]?.();
|
|
1352
1352
|
transactions = 0;
|
|
1353
1353
|
hadTables = hasTables();
|
|
@@ -1632,7 +1632,7 @@ const createStore = () => {
|
|
|
1632
1632
|
addListener(
|
|
1633
1633
|
args[argumentCount],
|
|
1634
1634
|
idSetNode[args[argumentCount + 1] ? 1 : 0],
|
|
1635
|
-
argumentCount > 0 ? slice(args, 0, argumentCount) :
|
|
1635
|
+
argumentCount > 0 ? slice(args, 0, argumentCount) : undefined,
|
|
1636
1636
|
pathGetters,
|
|
1637
1637
|
extraArgsGetter,
|
|
1638
1638
|
);
|
package/synchronizers/index.js
CHANGED
|
@@ -9,7 +9,7 @@ const startTimeout = (callback, sec = 0) =>
|
|
|
9
9
|
setTimeout(callback, sec * THOUSAND);
|
|
10
10
|
const math = Math;
|
|
11
11
|
const mathFloor = math.floor;
|
|
12
|
-
const isUndefined = (thing) => thing ==
|
|
12
|
+
const isUndefined = (thing) => thing == undefined;
|
|
13
13
|
const ifNotUndefined = (value, then, otherwise) =>
|
|
14
14
|
isUndefined(value) ? otherwise?.() : then(value);
|
|
15
15
|
const isArray = (thing) => Array.isArray(thing);
|
|
@@ -166,7 +166,7 @@ const getListenerFunctions = (getThing) => {
|
|
|
166
166
|
);
|
|
167
167
|
const delListener = (id) =>
|
|
168
168
|
ifNotUndefined(mapGet(allListeners, id), ([, idSetNode, idOrNulls]) => {
|
|
169
|
-
visitTree(idSetNode, idOrNulls ?? [EMPTY_STRING],
|
|
169
|
+
visitTree(idSetNode, idOrNulls ?? [EMPTY_STRING], undefined, (idSet) => {
|
|
170
170
|
collDel(idSet, id);
|
|
171
171
|
return collIsEmpty(idSet) ? 1 : 0;
|
|
172
172
|
});
|
|
@@ -256,7 +256,7 @@ const createCustomPersister = (
|
|
|
256
256
|
const setStatus = (newStatus) => {
|
|
257
257
|
if (newStatus != status) {
|
|
258
258
|
status = newStatus;
|
|
259
|
-
callListeners(statusListeners,
|
|
259
|
+
callListeners(statusListeners, undefined, status);
|
|
260
260
|
}
|
|
261
261
|
};
|
|
262
262
|
const run = async () => {
|
|
@@ -337,7 +337,7 @@ const createCustomPersister = (
|
|
|
337
337
|
const stopAutoLoad = () => {
|
|
338
338
|
if (autoLoadHandle) {
|
|
339
339
|
delPersisterListener(autoLoadHandle);
|
|
340
|
-
autoLoadHandle =
|
|
340
|
+
autoLoadHandle = undefined;
|
|
341
341
|
}
|
|
342
342
|
return persister;
|
|
343
343
|
};
|
|
@@ -373,7 +373,7 @@ const createCustomPersister = (
|
|
|
373
373
|
const stopAutoSave = () => {
|
|
374
374
|
if (autoSaveListenerId) {
|
|
375
375
|
store.delListener(autoSaveListenerId);
|
|
376
|
-
autoSaveListenerId =
|
|
376
|
+
autoSaveListenerId = undefined;
|
|
377
377
|
}
|
|
378
378
|
return persister;
|
|
379
379
|
};
|
|
@@ -574,7 +574,7 @@ const createCustomSynchronizer = (
|
|
|
574
574
|
const changes = await getChangesFromOtherStore();
|
|
575
575
|
return changes && (!objIsEmpty(changes[0][0]) || !objIsEmpty(changes[1][0]))
|
|
576
576
|
? changes
|
|
577
|
-
:
|
|
577
|
+
: undefined;
|
|
578
578
|
};
|
|
579
579
|
const setPersisted = async (_getContent, changes) =>
|
|
580
580
|
changes
|
|
@@ -586,7 +586,7 @@ const createCustomSynchronizer = (
|
|
|
586
586
|
store.getMergeableContentHashes(),
|
|
587
587
|
);
|
|
588
588
|
const addPersisterListener = (listener) => (persisterListener = listener);
|
|
589
|
-
const delPersisterListener = () => (persisterListener =
|
|
589
|
+
const delPersisterListener = () => (persisterListener = undefined);
|
|
590
590
|
const startSync = async (initialContent) => {
|
|
591
591
|
syncing = 1;
|
|
592
592
|
return await (
|
|
@@ -631,14 +631,14 @@ const createCustomSynchronizer = (
|
|
|
631
631
|
getChangesFromOtherStore(
|
|
632
632
|
fromClientId,
|
|
633
633
|
body,
|
|
634
|
-
transactionOrRequestId ??
|
|
634
|
+
transactionOrRequestId ?? undefined,
|
|
635
635
|
)
|
|
636
636
|
.then((changes) => {
|
|
637
|
-
persisterListener?.(
|
|
637
|
+
persisterListener?.(undefined, changes);
|
|
638
638
|
})
|
|
639
639
|
.catch(onIgnoredError);
|
|
640
640
|
} else if (message == 3 /* ContentDiff */ && isAutoLoading) {
|
|
641
|
-
persisterListener?.(
|
|
641
|
+
persisterListener?.(undefined, body);
|
|
642
642
|
} else {
|
|
643
643
|
ifNotUndefined(
|
|
644
644
|
message == 1 /* GetContentHashes */ &&
|
|
@@ -652,7 +652,7 @@ const createCustomSynchronizer = (
|
|
|
652
652
|
? store.getMergeableCellDiff(body)
|
|
653
653
|
: message == 7 /* GetValueDiff */
|
|
654
654
|
? store.getMergeableValueDiff(body)
|
|
655
|
-
:
|
|
655
|
+
: undefined,
|
|
656
656
|
(response) => {
|
|
657
657
|
sendImpl(
|
|
658
658
|
fromClientId,
|
|
@@ -9,7 +9,7 @@ const startTimeout = (callback, sec = 0) =>
|
|
|
9
9
|
setTimeout(callback, sec * THOUSAND);
|
|
10
10
|
const math = Math;
|
|
11
11
|
const mathFloor = math.floor;
|
|
12
|
-
const isUndefined = (thing) => thing ==
|
|
12
|
+
const isUndefined = (thing) => thing == undefined;
|
|
13
13
|
const ifNotUndefined = (value, then, otherwise) =>
|
|
14
14
|
isUndefined(value) ? otherwise?.() : then(value);
|
|
15
15
|
const isArray = (thing) => Array.isArray(thing);
|
|
@@ -166,7 +166,7 @@ const getListenerFunctions = (getThing) => {
|
|
|
166
166
|
);
|
|
167
167
|
const delListener = (id) =>
|
|
168
168
|
ifNotUndefined(mapGet(allListeners, id), ([, idSetNode, idOrNulls]) => {
|
|
169
|
-
visitTree(idSetNode, idOrNulls ?? [EMPTY_STRING],
|
|
169
|
+
visitTree(idSetNode, idOrNulls ?? [EMPTY_STRING], undefined, (idSet) => {
|
|
170
170
|
collDel(idSet, id);
|
|
171
171
|
return collIsEmpty(idSet) ? 1 : 0;
|
|
172
172
|
});
|
|
@@ -256,7 +256,7 @@ const createCustomPersister = (
|
|
|
256
256
|
const setStatus = (newStatus) => {
|
|
257
257
|
if (newStatus != status) {
|
|
258
258
|
status = newStatus;
|
|
259
|
-
callListeners(statusListeners,
|
|
259
|
+
callListeners(statusListeners, undefined, status);
|
|
260
260
|
}
|
|
261
261
|
};
|
|
262
262
|
const run = async () => {
|
|
@@ -337,7 +337,7 @@ const createCustomPersister = (
|
|
|
337
337
|
const stopAutoLoad = () => {
|
|
338
338
|
if (autoLoadHandle) {
|
|
339
339
|
delPersisterListener(autoLoadHandle);
|
|
340
|
-
autoLoadHandle =
|
|
340
|
+
autoLoadHandle = undefined;
|
|
341
341
|
}
|
|
342
342
|
return persister;
|
|
343
343
|
};
|
|
@@ -373,7 +373,7 @@ const createCustomPersister = (
|
|
|
373
373
|
const stopAutoSave = () => {
|
|
374
374
|
if (autoSaveListenerId) {
|
|
375
375
|
store.delListener(autoSaveListenerId);
|
|
376
|
-
autoSaveListenerId =
|
|
376
|
+
autoSaveListenerId = undefined;
|
|
377
377
|
}
|
|
378
378
|
return persister;
|
|
379
379
|
};
|
|
@@ -564,7 +564,7 @@ const createCustomSynchronizer = (
|
|
|
564
564
|
const changes = await getChangesFromOtherStore();
|
|
565
565
|
return changes && (!objIsEmpty(changes[0][0]) || !objIsEmpty(changes[1][0]))
|
|
566
566
|
? changes
|
|
567
|
-
:
|
|
567
|
+
: undefined;
|
|
568
568
|
};
|
|
569
569
|
const setPersisted = async (_getContent, changes) =>
|
|
570
570
|
changes
|
|
@@ -576,7 +576,7 @@ const createCustomSynchronizer = (
|
|
|
576
576
|
store.getMergeableContentHashes(),
|
|
577
577
|
);
|
|
578
578
|
const addPersisterListener = (listener) => (persisterListener = listener);
|
|
579
|
-
const delPersisterListener = () => (persisterListener =
|
|
579
|
+
const delPersisterListener = () => (persisterListener = undefined);
|
|
580
580
|
const startSync = async (initialContent) => {
|
|
581
581
|
syncing = 1;
|
|
582
582
|
return await (
|
|
@@ -621,14 +621,14 @@ const createCustomSynchronizer = (
|
|
|
621
621
|
getChangesFromOtherStore(
|
|
622
622
|
fromClientId,
|
|
623
623
|
body,
|
|
624
|
-
transactionOrRequestId ??
|
|
624
|
+
transactionOrRequestId ?? undefined,
|
|
625
625
|
)
|
|
626
626
|
.then((changes) => {
|
|
627
|
-
persisterListener?.(
|
|
627
|
+
persisterListener?.(undefined, changes);
|
|
628
628
|
})
|
|
629
629
|
.catch(onIgnoredError);
|
|
630
630
|
} else if (message == 3 /* ContentDiff */ && isAutoLoading) {
|
|
631
|
-
persisterListener?.(
|
|
631
|
+
persisterListener?.(undefined, body);
|
|
632
632
|
} else {
|
|
633
633
|
ifNotUndefined(
|
|
634
634
|
message == 1 /* GetContentHashes */ &&
|
|
@@ -642,7 +642,7 @@ const createCustomSynchronizer = (
|
|
|
642
642
|
? store.getMergeableCellDiff(body)
|
|
643
643
|
: message == 7 /* GetValueDiff */
|
|
644
644
|
? store.getMergeableValueDiff(body)
|
|
645
|
-
:
|
|
645
|
+
: undefined,
|
|
646
646
|
(response) => {
|
|
647
647
|
sendImpl(
|
|
648
648
|
fromClientId,
|