tinybase 5.4.7 → 5.4.8
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 +19 -21
- package/cjs/es6/checkpoints/with-schemas/index.cjs +19 -21
- package/cjs/es6/index.cjs +76 -90
- package/cjs/es6/indexes/index.cjs +18 -20
- package/cjs/es6/indexes/with-schemas/index.cjs +18 -20
- package/cjs/es6/mergeable-store/index.cjs +46 -61
- package/cjs/es6/mergeable-store/with-schemas/index.cjs +46 -61
- package/cjs/es6/metrics/index.cjs +28 -30
- package/cjs/es6/metrics/with-schemas/index.cjs +28 -30
- package/cjs/es6/min/checkpoints/index.cjs +1 -1
- package/cjs/es6/min/checkpoints/index.cjs.gz +0 -0
- package/cjs/es6/min/checkpoints/with-schemas/index.cjs +1 -1
- package/cjs/es6/min/checkpoints/with-schemas/index.cjs.gz +0 -0
- package/cjs/es6/min/index.cjs +1 -1
- package/cjs/es6/min/index.cjs.gz +0 -0
- package/cjs/es6/min/indexes/index.cjs +1 -1
- package/cjs/es6/min/indexes/index.cjs.gz +0 -0
- package/cjs/es6/min/indexes/with-schemas/index.cjs +1 -1
- package/cjs/es6/min/indexes/with-schemas/index.cjs.gz +0 -0
- package/cjs/es6/min/metrics/index.cjs +1 -1
- package/cjs/es6/min/metrics/index.cjs.gz +0 -0
- package/cjs/es6/min/metrics/with-schemas/index.cjs +1 -1
- package/cjs/es6/min/metrics/with-schemas/index.cjs.gz +0 -0
- package/cjs/es6/min/queries/index.cjs +1 -1
- package/cjs/es6/min/queries/index.cjs.gz +0 -0
- package/cjs/es6/min/queries/with-schemas/index.cjs +1 -1
- package/cjs/es6/min/queries/with-schemas/index.cjs.gz +0 -0
- package/cjs/es6/min/relationships/index.cjs +1 -1
- package/cjs/es6/min/relationships/index.cjs.gz +0 -0
- package/cjs/es6/min/relationships/with-schemas/index.cjs +1 -1
- package/cjs/es6/min/relationships/with-schemas/index.cjs.gz +0 -0
- package/cjs/es6/min/with-schemas/index.cjs +1 -1
- package/cjs/es6/min/with-schemas/index.cjs.gz +0 -0
- package/cjs/es6/persisters/index.cjs +75 -81
- package/cjs/es6/persisters/persister-automerge/index.cjs +37 -41
- package/cjs/es6/persisters/persister-automerge/with-schemas/index.cjs +37 -41
- package/cjs/es6/persisters/persister-browser/index.cjs +35 -39
- package/cjs/es6/persisters/persister-browser/with-schemas/index.cjs +35 -39
- package/cjs/es6/persisters/persister-cr-sqlite-wasm/index.cjs +68 -74
- package/cjs/es6/persisters/persister-cr-sqlite-wasm/with-schemas/index.cjs +68 -74
- package/cjs/es6/persisters/persister-durable-object-storage/index.cjs +36 -40
- package/cjs/es6/persisters/persister-durable-object-storage/with-schemas/index.cjs +36 -40
- package/cjs/es6/persisters/persister-electric-sql/index.cjs +68 -74
- package/cjs/es6/persisters/persister-electric-sql/with-schemas/index.cjs +68 -74
- package/cjs/es6/persisters/persister-expo-sqlite/index.cjs +68 -74
- package/cjs/es6/persisters/persister-expo-sqlite/with-schemas/index.cjs +68 -74
- package/cjs/es6/persisters/persister-file/index.cjs +36 -40
- package/cjs/es6/persisters/persister-file/with-schemas/index.cjs +36 -40
- package/cjs/es6/persisters/persister-indexed-db/index.cjs +41 -45
- package/cjs/es6/persisters/persister-indexed-db/with-schemas/index.cjs +41 -45
- package/cjs/es6/persisters/persister-libsql/index.cjs +68 -74
- package/cjs/es6/persisters/persister-libsql/with-schemas/index.cjs +68 -74
- package/cjs/es6/persisters/persister-partykit-client/index.cjs +41 -42
- package/cjs/es6/persisters/persister-partykit-client/with-schemas/index.cjs +41 -42
- package/cjs/es6/persisters/persister-partykit-server/index.cjs +14 -18
- package/cjs/es6/persisters/persister-partykit-server/with-schemas/index.cjs +14 -18
- package/cjs/es6/persisters/persister-pglite/index.cjs +77 -83
- package/cjs/es6/persisters/persister-pglite/with-schemas/index.cjs +77 -83
- package/cjs/es6/persisters/persister-postgres/index.cjs +80 -89
- package/cjs/es6/persisters/persister-postgres/with-schemas/index.cjs +80 -89
- package/cjs/es6/persisters/persister-powersync/index.cjs +74 -81
- package/cjs/es6/persisters/persister-powersync/with-schemas/index.cjs +74 -81
- package/cjs/es6/persisters/persister-remote/index.cjs +34 -38
- package/cjs/es6/persisters/persister-remote/with-schemas/index.cjs +34 -38
- package/cjs/es6/persisters/persister-sqlite-wasm/index.cjs +68 -74
- package/cjs/es6/persisters/persister-sqlite-wasm/with-schemas/index.cjs +68 -74
- package/cjs/es6/persisters/persister-sqlite3/index.cjs +68 -74
- package/cjs/es6/persisters/persister-sqlite3/with-schemas/index.cjs +68 -74
- package/cjs/es6/persisters/persister-yjs/index.cjs +39 -43
- package/cjs/es6/persisters/persister-yjs/with-schemas/index.cjs +39 -43
- package/cjs/es6/persisters/with-schemas/index.cjs +75 -81
- package/cjs/es6/queries/index.cjs +33 -34
- package/cjs/es6/queries/with-schemas/index.cjs +33 -34
- package/cjs/es6/relationships/index.cjs +20 -22
- package/cjs/es6/relationships/with-schemas/index.cjs +20 -22
- package/cjs/es6/store/index.cjs +39 -51
- package/cjs/es6/store/with-schemas/index.cjs +39 -51
- package/cjs/es6/synchronizers/index.cjs +46 -52
- package/cjs/es6/synchronizers/synchronizer-broadcast-channel/index.cjs +46 -52
- package/cjs/es6/synchronizers/synchronizer-broadcast-channel/with-schemas/index.cjs +46 -52
- package/cjs/es6/synchronizers/synchronizer-local/index.cjs +47 -53
- package/cjs/es6/synchronizers/synchronizer-local/with-schemas/index.cjs +47 -53
- package/cjs/es6/synchronizers/synchronizer-ws-client/index.cjs +50 -56
- package/cjs/es6/synchronizers/synchronizer-ws-client/with-schemas/index.cjs +50 -56
- package/cjs/es6/synchronizers/synchronizer-ws-server/index.cjs +62 -72
- package/cjs/es6/synchronizers/synchronizer-ws-server/with-schemas/index.cjs +62 -72
- package/cjs/es6/synchronizers/synchronizer-ws-server-durable-object/index.cjs +49 -55
- package/cjs/es6/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.cjs +49 -55
- package/cjs/es6/synchronizers/synchronizer-ws-server-simple/index.cjs +11 -15
- package/cjs/es6/synchronizers/synchronizer-ws-server-simple/with-schemas/index.cjs +11 -15
- package/cjs/es6/synchronizers/with-schemas/index.cjs +46 -52
- package/cjs/es6/tools/index.cjs +20 -27
- package/cjs/es6/tools/with-schemas/index.cjs +20 -27
- package/cjs/es6/ui-react/index.cjs +35 -49
- package/cjs/es6/ui-react/with-schemas/index.cjs +35 -49
- 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 +72 -84
- package/cjs/es6/ui-react-inspector/with-schemas/index.cjs +72 -84
- package/cjs/es6/with-schemas/index.cjs +76 -90
- 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 +12 -9
- package/cjs/persisters/persister-partykit-client/with-schemas/index.cjs +12 -9
- 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 +12 -19
- package/cjs/ui-react/with-schemas/index.cjs +12 -19
- 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/cli/index.js +1 -1
- package/es6/checkpoints/index.js +19 -21
- package/es6/checkpoints/with-schemas/index.js +19 -21
- package/es6/index.js +76 -90
- package/es6/indexes/index.js +18 -20
- package/es6/indexes/with-schemas/index.js +18 -20
- package/es6/mergeable-store/index.js +46 -61
- package/es6/mergeable-store/with-schemas/index.js +46 -61
- package/es6/metrics/index.js +28 -30
- package/es6/metrics/with-schemas/index.js +28 -30
- package/es6/min/checkpoints/index.js +1 -1
- package/es6/min/checkpoints/index.js.gz +0 -0
- package/es6/min/checkpoints/with-schemas/index.js +1 -1
- package/es6/min/checkpoints/with-schemas/index.js.gz +0 -0
- package/es6/min/index.js +1 -1
- package/es6/min/index.js.gz +0 -0
- package/es6/min/indexes/index.js +1 -1
- package/es6/min/indexes/index.js.gz +0 -0
- package/es6/min/indexes/with-schemas/index.js +1 -1
- package/es6/min/indexes/with-schemas/index.js.gz +0 -0
- package/es6/min/metrics/index.js +1 -1
- package/es6/min/metrics/index.js.gz +0 -0
- package/es6/min/metrics/with-schemas/index.js +1 -1
- package/es6/min/metrics/with-schemas/index.js.gz +0 -0
- package/es6/min/queries/index.js +1 -1
- package/es6/min/queries/index.js.gz +0 -0
- package/es6/min/queries/with-schemas/index.js +1 -1
- package/es6/min/queries/with-schemas/index.js.gz +0 -0
- package/es6/min/relationships/index.js +1 -1
- package/es6/min/relationships/index.js.gz +0 -0
- package/es6/min/relationships/with-schemas/index.js +1 -1
- package/es6/min/relationships/with-schemas/index.js.gz +0 -0
- package/es6/min/ui-react-dom/index.js +1 -1
- package/es6/min/ui-react-dom/index.js.gz +0 -0
- package/es6/min/ui-react-dom/with-schemas/index.js +1 -1
- package/es6/min/ui-react-dom/with-schemas/index.js.gz +0 -0
- package/es6/min/ui-react-inspector/index.js +1 -1
- package/es6/min/ui-react-inspector/index.js.gz +0 -0
- package/es6/min/ui-react-inspector/with-schemas/index.js +1 -1
- package/es6/min/ui-react-inspector/with-schemas/index.js.gz +0 -0
- package/es6/min/with-schemas/index.js +1 -1
- package/es6/min/with-schemas/index.js.gz +0 -0
- package/es6/persisters/index.js +75 -81
- package/es6/persisters/persister-automerge/index.js +37 -41
- package/es6/persisters/persister-automerge/with-schemas/index.js +37 -41
- package/es6/persisters/persister-browser/index.js +35 -39
- package/es6/persisters/persister-browser/with-schemas/index.js +35 -39
- package/es6/persisters/persister-cr-sqlite-wasm/index.js +68 -74
- package/es6/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +68 -74
- package/es6/persisters/persister-durable-object-storage/index.js +36 -40
- package/es6/persisters/persister-durable-object-storage/with-schemas/index.js +36 -40
- package/es6/persisters/persister-electric-sql/index.js +68 -74
- package/es6/persisters/persister-electric-sql/with-schemas/index.js +68 -74
- package/es6/persisters/persister-expo-sqlite/index.js +68 -74
- package/es6/persisters/persister-expo-sqlite/with-schemas/index.js +68 -74
- package/es6/persisters/persister-file/index.js +36 -40
- package/es6/persisters/persister-file/with-schemas/index.js +36 -40
- package/es6/persisters/persister-indexed-db/index.js +41 -45
- package/es6/persisters/persister-indexed-db/with-schemas/index.js +41 -45
- package/es6/persisters/persister-libsql/index.js +68 -74
- package/es6/persisters/persister-libsql/with-schemas/index.js +68 -74
- package/es6/persisters/persister-partykit-client/index.js +41 -42
- package/es6/persisters/persister-partykit-client/with-schemas/index.js +41 -42
- package/es6/persisters/persister-partykit-server/index.js +14 -18
- package/es6/persisters/persister-partykit-server/with-schemas/index.js +14 -18
- package/es6/persisters/persister-pglite/index.js +77 -83
- package/es6/persisters/persister-pglite/with-schemas/index.js +77 -83
- package/es6/persisters/persister-postgres/index.js +80 -89
- package/es6/persisters/persister-postgres/with-schemas/index.js +80 -89
- package/es6/persisters/persister-powersync/index.js +74 -81
- package/es6/persisters/persister-powersync/with-schemas/index.js +74 -81
- package/es6/persisters/persister-remote/index.js +34 -38
- package/es6/persisters/persister-remote/with-schemas/index.js +34 -38
- package/es6/persisters/persister-sqlite-wasm/index.js +68 -74
- package/es6/persisters/persister-sqlite-wasm/with-schemas/index.js +68 -74
- package/es6/persisters/persister-sqlite3/index.js +68 -74
- package/es6/persisters/persister-sqlite3/with-schemas/index.js +68 -74
- package/es6/persisters/persister-yjs/index.js +39 -43
- package/es6/persisters/persister-yjs/with-schemas/index.js +39 -43
- package/es6/persisters/with-schemas/index.js +75 -81
- package/es6/queries/index.js +33 -34
- package/es6/queries/with-schemas/index.js +33 -34
- package/es6/relationships/index.js +20 -22
- package/es6/relationships/with-schemas/index.js +20 -22
- package/es6/store/index.js +39 -51
- package/es6/store/with-schemas/index.js +39 -51
- package/es6/synchronizers/index.js +46 -52
- package/es6/synchronizers/synchronizer-broadcast-channel/index.js +46 -52
- package/es6/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +46 -52
- package/es6/synchronizers/synchronizer-local/index.js +47 -53
- package/es6/synchronizers/synchronizer-local/with-schemas/index.js +47 -53
- package/es6/synchronizers/synchronizer-ws-client/index.js +50 -56
- package/es6/synchronizers/synchronizer-ws-client/with-schemas/index.js +50 -56
- package/es6/synchronizers/synchronizer-ws-server/index.js +62 -72
- package/es6/synchronizers/synchronizer-ws-server/with-schemas/index.js +62 -72
- package/es6/synchronizers/synchronizer-ws-server-durable-object/index.js +49 -55
- package/es6/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js +49 -55
- package/es6/synchronizers/synchronizer-ws-server-simple/index.js +11 -15
- package/es6/synchronizers/synchronizer-ws-server-simple/with-schemas/index.js +11 -15
- package/es6/synchronizers/with-schemas/index.js +46 -52
- package/es6/tools/index.js +20 -27
- package/es6/tools/with-schemas/index.js +20 -27
- package/es6/ui-react/index.js +35 -49
- package/es6/ui-react/with-schemas/index.js +35 -49
- package/es6/ui-react-dom/index.js +16 -20
- package/es6/ui-react-dom/with-schemas/index.js +16 -20
- package/es6/ui-react-inspector/index.js +80 -96
- package/es6/ui-react-inspector/with-schemas/index.js +80 -96
- package/es6/with-schemas/index.js +76 -90
- 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/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/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/package.json +7 -7
- 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 +8 -8
- package/persisters/persister-file/with-schemas/index.js +8 -8
- 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 +12 -9
- package/persisters/persister-partykit-client/with-schemas/index.js +12 -9
- 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 +12 -19
- package/ui-react/with-schemas/index.js +12 -19
- package/ui-react-dom/index.js +7 -7
- package/ui-react-dom/with-schemas/index.js +7 -7
- package/ui-react-inspector/index.js +30 -30
- package/ui-react-inspector/with-schemas/index.js +30 -30
- package/umd/checkpoints/index.js +9 -14
- package/umd/checkpoints/with-schemas/index.js +9 -14
- package/umd/es6/checkpoints/index.js +23 -20
- package/umd/es6/checkpoints/with-schemas/index.js +23 -20
- package/umd/es6/index.js +76 -84
- package/umd/es6/indexes/index.js +22 -19
- package/umd/es6/indexes/with-schemas/index.js +22 -19
- package/umd/es6/mergeable-store/index.js +46 -55
- package/umd/es6/mergeable-store/with-schemas/index.js +46 -55
- package/umd/es6/metrics/index.js +32 -29
- package/umd/es6/metrics/with-schemas/index.js +32 -29
- package/umd/es6/min/checkpoints/index.js +1 -1
- package/umd/es6/min/checkpoints/index.js.gz +0 -0
- package/umd/es6/min/checkpoints/with-schemas/index.js +1 -1
- package/umd/es6/min/checkpoints/with-schemas/index.js.gz +0 -0
- package/umd/es6/min/index.js +1 -1
- package/umd/es6/min/index.js.gz +0 -0
- package/umd/es6/min/indexes/index.js +1 -1
- package/umd/es6/min/indexes/index.js.gz +0 -0
- package/umd/es6/min/indexes/with-schemas/index.js +1 -1
- package/umd/es6/min/indexes/with-schemas/index.js.gz +0 -0
- package/umd/es6/min/metrics/index.js +1 -1
- package/umd/es6/min/metrics/index.js.gz +0 -0
- package/umd/es6/min/metrics/with-schemas/index.js +1 -1
- package/umd/es6/min/metrics/with-schemas/index.js.gz +0 -0
- package/umd/es6/min/queries/index.js +1 -1
- package/umd/es6/min/queries/index.js.gz +0 -0
- package/umd/es6/min/queries/with-schemas/index.js +1 -1
- package/umd/es6/min/queries/with-schemas/index.js.gz +0 -0
- package/umd/es6/min/relationships/index.js +1 -1
- package/umd/es6/min/relationships/index.js.gz +0 -0
- package/umd/es6/min/relationships/with-schemas/index.js +1 -1
- package/umd/es6/min/relationships/with-schemas/index.js.gz +0 -0
- package/umd/es6/min/with-schemas/index.js +1 -1
- package/umd/es6/min/with-schemas/index.js.gz +0 -0
- package/umd/es6/persisters/index.js +75 -76
- package/umd/es6/persisters/persister-automerge/index.js +37 -38
- package/umd/es6/persisters/persister-automerge/with-schemas/index.js +37 -38
- package/umd/es6/persisters/persister-browser/index.js +35 -36
- package/umd/es6/persisters/persister-browser/with-schemas/index.js +35 -36
- package/umd/es6/persisters/persister-cr-sqlite-wasm/index.js +68 -69
- package/umd/es6/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +68 -69
- package/umd/es6/persisters/persister-durable-object-storage/index.js +36 -37
- package/umd/es6/persisters/persister-durable-object-storage/with-schemas/index.js +36 -37
- package/umd/es6/persisters/persister-electric-sql/index.js +68 -69
- package/umd/es6/persisters/persister-electric-sql/with-schemas/index.js +68 -69
- package/umd/es6/persisters/persister-expo-sqlite/index.js +68 -69
- package/umd/es6/persisters/persister-expo-sqlite/with-schemas/index.js +68 -69
- package/umd/es6/persisters/persister-file/index.js +36 -37
- package/umd/es6/persisters/persister-file/with-schemas/index.js +36 -37
- package/umd/es6/persisters/persister-indexed-db/index.js +41 -42
- package/umd/es6/persisters/persister-indexed-db/with-schemas/index.js +41 -42
- package/umd/es6/persisters/persister-libsql/index.js +68 -69
- package/umd/es6/persisters/persister-libsql/with-schemas/index.js +68 -69
- package/umd/es6/persisters/persister-partykit-client/index.js +41 -39
- package/umd/es6/persisters/persister-partykit-client/with-schemas/index.js +41 -39
- package/umd/es6/persisters/persister-partykit-server/index.js +14 -15
- package/umd/es6/persisters/persister-partykit-server/with-schemas/index.js +14 -15
- package/umd/es6/persisters/persister-pglite/index.js +83 -88
- package/umd/es6/persisters/persister-pglite/with-schemas/index.js +83 -88
- package/umd/es6/persisters/persister-postgres/index.js +86 -91
- package/umd/es6/persisters/persister-postgres/with-schemas/index.js +86 -91
- package/umd/es6/persisters/persister-powersync/index.js +74 -76
- package/umd/es6/persisters/persister-powersync/with-schemas/index.js +74 -76
- package/umd/es6/persisters/persister-remote/index.js +34 -35
- package/umd/es6/persisters/persister-remote/with-schemas/index.js +34 -35
- package/umd/es6/persisters/persister-sqlite-wasm/index.js +68 -69
- package/umd/es6/persisters/persister-sqlite-wasm/with-schemas/index.js +68 -69
- package/umd/es6/persisters/persister-sqlite3/index.js +68 -69
- package/umd/es6/persisters/persister-sqlite3/with-schemas/index.js +68 -69
- package/umd/es6/persisters/persister-yjs/index.js +39 -40
- package/umd/es6/persisters/persister-yjs/with-schemas/index.js +39 -40
- package/umd/es6/persisters/with-schemas/index.js +75 -76
- package/umd/es6/queries/index.js +37 -33
- package/umd/es6/queries/with-schemas/index.js +37 -33
- package/umd/es6/relationships/index.js +24 -21
- package/umd/es6/relationships/with-schemas/index.js +24 -21
- package/umd/es6/store/index.js +39 -48
- package/umd/es6/store/with-schemas/index.js +39 -48
- package/umd/es6/synchronizers/index.js +46 -49
- package/umd/es6/synchronizers/synchronizer-broadcast-channel/index.js +46 -49
- package/umd/es6/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +46 -49
- package/umd/es6/synchronizers/synchronizer-local/index.js +47 -50
- package/umd/es6/synchronizers/synchronizer-local/with-schemas/index.js +47 -50
- package/umd/es6/synchronizers/synchronizer-ws-client/index.js +50 -53
- package/umd/es6/synchronizers/synchronizer-ws-client/with-schemas/index.js +50 -53
- package/umd/es6/synchronizers/synchronizer-ws-server/index.js +62 -67
- package/umd/es6/synchronizers/synchronizer-ws-server/with-schemas/index.js +62 -67
- package/umd/es6/synchronizers/synchronizer-ws-server-durable-object/index.js +49 -52
- package/umd/es6/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js +49 -52
- package/umd/es6/synchronizers/synchronizer-ws-server-simple/index.js +11 -12
- package/umd/es6/synchronizers/synchronizer-ws-server-simple/with-schemas/index.js +11 -12
- package/umd/es6/synchronizers/with-schemas/index.js +46 -49
- package/umd/es6/tools/index.js +23 -27
- package/umd/es6/tools/with-schemas/index.js +23 -27
- package/umd/es6/ui-react/index.js +36 -39
- package/umd/es6/ui-react/with-schemas/index.js +36 -39
- 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 +72 -81
- package/umd/es6/ui-react-inspector/with-schemas/index.js +72 -81
- package/umd/es6/with-schemas/index.js +76 -84
- package/umd/index.js +41 -46
- package/umd/indexes/index.js +8 -13
- package/umd/indexes/with-schemas/index.js +8 -13
- package/umd/mergeable-store/index.js +22 -27
- package/umd/mergeable-store/with-schemas/index.js +22 -27
- package/umd/metrics/index.js +15 -20
- package/umd/metrics/with-schemas/index.js +15 -20
- package/umd/persisters/index.js +13 -18
- package/umd/persisters/persister-automerge/index.js +11 -16
- package/umd/persisters/persister-automerge/with-schemas/index.js +11 -16
- package/umd/persisters/persister-browser/index.js +10 -15
- package/umd/persisters/persister-browser/with-schemas/index.js +10 -15
- package/umd/persisters/persister-cr-sqlite-wasm/index.js +12 -17
- package/umd/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +12 -17
- package/umd/persisters/persister-durable-object-storage/index.js +10 -15
- package/umd/persisters/persister-durable-object-storage/with-schemas/index.js +10 -15
- package/umd/persisters/persister-electric-sql/index.js +12 -17
- package/umd/persisters/persister-electric-sql/with-schemas/index.js +12 -17
- package/umd/persisters/persister-expo-sqlite/index.js +12 -17
- package/umd/persisters/persister-expo-sqlite/with-schemas/index.js +12 -17
- package/umd/persisters/persister-file/index.js +10 -15
- package/umd/persisters/persister-file/with-schemas/index.js +10 -15
- package/umd/persisters/persister-indexed-db/index.js +9 -14
- package/umd/persisters/persister-indexed-db/with-schemas/index.js +9 -14
- package/umd/persisters/persister-libsql/index.js +12 -17
- package/umd/persisters/persister-libsql/with-schemas/index.js +12 -17
- package/umd/persisters/persister-partykit-client/index.js +15 -17
- package/umd/persisters/persister-partykit-client/with-schemas/index.js +15 -17
- 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 +12 -17
- package/umd/persisters/persister-pglite/with-schemas/index.js +12 -17
- package/umd/persisters/persister-postgres/index.js +12 -17
- package/umd/persisters/persister-postgres/with-schemas/index.js +12 -17
- package/umd/persisters/persister-powersync/index.js +13 -18
- package/umd/persisters/persister-powersync/with-schemas/index.js +13 -18
- package/umd/persisters/persister-remote/index.js +8 -13
- package/umd/persisters/persister-remote/with-schemas/index.js +8 -13
- package/umd/persisters/persister-sqlite-wasm/index.js +12 -17
- package/umd/persisters/persister-sqlite-wasm/with-schemas/index.js +12 -17
- package/umd/persisters/persister-sqlite3/index.js +12 -17
- package/umd/persisters/persister-sqlite3/with-schemas/index.js +12 -17
- package/umd/persisters/persister-yjs/index.js +12 -17
- package/umd/persisters/persister-yjs/with-schemas/index.js +12 -17
- package/umd/persisters/with-schemas/index.js +13 -18
- package/umd/queries/index.js +13 -13
- package/umd/queries/with-schemas/index.js +13 -13
- package/umd/relationships/index.js +8 -13
- package/umd/relationships/with-schemas/index.js +8 -13
- package/umd/store/index.js +17 -22
- package/umd/store/with-schemas/index.js +17 -22
- package/umd/synchronizers/index.js +14 -19
- package/umd/synchronizers/synchronizer-broadcast-channel/index.js +14 -19
- package/umd/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +14 -19
- package/umd/synchronizers/synchronizer-local/index.js +14 -19
- package/umd/synchronizers/synchronizer-local/with-schemas/index.js +14 -19
- package/umd/synchronizers/synchronizer-ws-client/index.js +16 -21
- package/umd/synchronizers/synchronizer-ws-client/with-schemas/index.js +16 -21
- package/umd/synchronizers/synchronizer-ws-server/index.js +20 -25
- package/umd/synchronizers/synchronizer-ws-server/with-schemas/index.js +20 -25
- package/umd/synchronizers/synchronizer-ws-server-durable-object/index.js +17 -22
- package/umd/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js +17 -22
- 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 +14 -19
- 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 +25 -30
- package/umd/ui-react-inspector/with-schemas/index.js +25 -30
- package/umd/with-schemas/index.js +41 -46
- package/with-schemas/index.js +38 -38
|
@@ -5,7 +5,7 @@ const EMPTY_STRING = '';
|
|
|
5
5
|
const T = 't';
|
|
6
6
|
const V = 'v';
|
|
7
7
|
|
|
8
|
-
const isUndefined = (thing) => thing ==
|
|
8
|
+
const isUndefined = (thing) => thing == void 0;
|
|
9
9
|
const ifNotUndefined = (value, then, otherwise) =>
|
|
10
10
|
isUndefined(value) ? otherwise?.() : then(value);
|
|
11
11
|
const isArray = (thing) => Array.isArray(thing);
|
|
@@ -159,7 +159,7 @@ const getListenerFunctions = (getThing) => {
|
|
|
159
159
|
);
|
|
160
160
|
const delListener = (id) =>
|
|
161
161
|
ifNotUndefined(mapGet(allListeners, id), ([, idSetNode, idOrNulls]) => {
|
|
162
|
-
visitTree(idSetNode, idOrNulls ?? [EMPTY_STRING],
|
|
162
|
+
visitTree(idSetNode, idOrNulls ?? [EMPTY_STRING], void 0, (idSet) => {
|
|
163
163
|
collDel(idSet, id);
|
|
164
164
|
return collIsEmpty(idSet) ? 1 : 0;
|
|
165
165
|
});
|
|
@@ -249,7 +249,7 @@ const createCustomPersister = (
|
|
|
249
249
|
const setStatus = (newStatus) => {
|
|
250
250
|
if (newStatus != status) {
|
|
251
251
|
status = newStatus;
|
|
252
|
-
callListeners(statusListeners,
|
|
252
|
+
callListeners(statusListeners, void 0, status);
|
|
253
253
|
}
|
|
254
254
|
};
|
|
255
255
|
const run = async () => {
|
|
@@ -330,7 +330,7 @@ const createCustomPersister = (
|
|
|
330
330
|
const stopAutoLoad = () => {
|
|
331
331
|
if (autoLoadHandle) {
|
|
332
332
|
delPersisterListener(autoLoadHandle);
|
|
333
|
-
autoLoadHandle =
|
|
333
|
+
autoLoadHandle = void 0;
|
|
334
334
|
}
|
|
335
335
|
return persister;
|
|
336
336
|
};
|
|
@@ -366,7 +366,7 @@ const createCustomPersister = (
|
|
|
366
366
|
const stopAutoSave = () => {
|
|
367
367
|
if (autoSaveListenerId) {
|
|
368
368
|
store.delListener(autoSaveListenerId);
|
|
369
|
-
autoSaveListenerId =
|
|
369
|
+
autoSaveListenerId = void 0;
|
|
370
370
|
}
|
|
371
371
|
return persister;
|
|
372
372
|
};
|
|
@@ -511,7 +511,7 @@ const applyChangesToYDoc = (yContent, getContent, changes) => {
|
|
|
511
511
|
});
|
|
512
512
|
if (changesFailed) {
|
|
513
513
|
const [tables, values] = getContent();
|
|
514
|
-
yMapMatch(yTables,
|
|
514
|
+
yMapMatch(yTables, void 0, tables, (_, tableId, table) =>
|
|
515
515
|
yMapMatch(yTables, tableId, table, (yTable, rowId, row) =>
|
|
516
516
|
yMapMatch(yTable, rowId, row, (yRow, cellId, cell) => {
|
|
517
517
|
if (yRow.get(cellId) !== cell) {
|
|
@@ -521,7 +521,7 @@ const applyChangesToYDoc = (yContent, getContent, changes) => {
|
|
|
521
521
|
}),
|
|
522
522
|
),
|
|
523
523
|
);
|
|
524
|
-
yMapMatch(yValues,
|
|
524
|
+
yMapMatch(yValues, void 0, values, (_, valueId, value) => {
|
|
525
525
|
if (yValues.get(valueId) !== value) {
|
|
526
526
|
yValues.set(valueId, value);
|
|
527
527
|
}
|
|
@@ -560,12 +560,12 @@ const createYjsPersister = (
|
|
|
560
560
|
const getPersisted = async () =>
|
|
561
561
|
yContent.size
|
|
562
562
|
? [yContent.get(T).toJSON(), yContent.get(V).toJSON()]
|
|
563
|
-
:
|
|
563
|
+
: void 0;
|
|
564
564
|
const setPersisted = async (getContent, changes) =>
|
|
565
565
|
yDoc.transact(() => applyChangesToYDoc(yContent, getContent, changes));
|
|
566
566
|
const addPersisterListener = (listener) => {
|
|
567
567
|
const observer = (events) =>
|
|
568
|
-
listener(
|
|
568
|
+
listener(void 0, getChangesFromYDoc(yContent, events));
|
|
569
569
|
yContent.observeDeep(observer);
|
|
570
570
|
return observer;
|
|
571
571
|
};
|
|
@@ -12,7 +12,7 @@ const startInterval = (callback, sec, immediate) => {
|
|
|
12
12
|
return setInterval(callback, sec * THOUSAND);
|
|
13
13
|
};
|
|
14
14
|
const stopInterval = clearInterval;
|
|
15
|
-
const isUndefined = (thing) => thing ==
|
|
15
|
+
const isUndefined = (thing) => thing == void 0;
|
|
16
16
|
const ifNotUndefined = (value, then, otherwise) =>
|
|
17
17
|
isUndefined(value) ? otherwise?.() : then(value);
|
|
18
18
|
const isString = (thing) => getTypeOf(thing) == STRING;
|
|
@@ -173,7 +173,7 @@ const getListenerFunctions = (getThing) => {
|
|
|
173
173
|
);
|
|
174
174
|
const delListener = (id) =>
|
|
175
175
|
ifNotUndefined(mapGet(allListeners, id), ([, idSetNode, idOrNulls]) => {
|
|
176
|
-
visitTree(idSetNode, idOrNulls ?? [EMPTY_STRING],
|
|
176
|
+
visitTree(idSetNode, idOrNulls ?? [EMPTY_STRING], void 0, (idSet) => {
|
|
177
177
|
collDel(idSet, id);
|
|
178
178
|
return collIsEmpty(idSet) ? 1 : 0;
|
|
179
179
|
});
|
|
@@ -273,7 +273,7 @@ const createCustomPersister = (
|
|
|
273
273
|
const setStatus = (newStatus) => {
|
|
274
274
|
if (newStatus != status) {
|
|
275
275
|
status = newStatus;
|
|
276
|
-
callListeners(statusListeners,
|
|
276
|
+
callListeners(statusListeners, void 0, status);
|
|
277
277
|
}
|
|
278
278
|
};
|
|
279
279
|
const run = async () => {
|
|
@@ -354,7 +354,7 @@ const createCustomPersister = (
|
|
|
354
354
|
const stopAutoLoad = () => {
|
|
355
355
|
if (autoLoadHandle) {
|
|
356
356
|
delPersisterListener(autoLoadHandle);
|
|
357
|
-
autoLoadHandle =
|
|
357
|
+
autoLoadHandle = void 0;
|
|
358
358
|
}
|
|
359
359
|
return persister;
|
|
360
360
|
};
|
|
@@ -390,7 +390,7 @@ const createCustomPersister = (
|
|
|
390
390
|
const stopAutoSave = () => {
|
|
391
391
|
if (autoSaveListenerId) {
|
|
392
392
|
store.delListener(autoSaveListenerId);
|
|
393
|
-
autoSaveListenerId =
|
|
393
|
+
autoSaveListenerId = void 0;
|
|
394
394
|
}
|
|
395
395
|
return persister;
|
|
396
396
|
};
|
|
@@ -466,9 +466,9 @@ const getPlaceholders = (array, offset = [1]) =>
|
|
|
466
466
|
const jsonString = JSON.stringify;
|
|
467
467
|
const jsonParse = JSON.parse;
|
|
468
468
|
const jsonStringWithUndefined = (obj) =>
|
|
469
|
-
jsonString(obj, (_key, value) => (value ===
|
|
469
|
+
jsonString(obj, (_key, value) => (value === void 0 ? UNDEFINED : value));
|
|
470
470
|
const jsonParseWithUndefined = (str) =>
|
|
471
|
-
jsonParse(str, (_key, value) => (value === UNDEFINED ?
|
|
471
|
+
jsonParse(str, (_key, value) => (value === UNDEFINED ? void 0 : value));
|
|
472
472
|
|
|
473
473
|
const getCommandFunctions = (
|
|
474
474
|
databaseExecuteCommand,
|
|
@@ -885,7 +885,7 @@ const createTabularPersister = (
|
|
|
885
885
|
const values = await loadValues();
|
|
886
886
|
return !objIsEmpty(tables) || !isUndefined(values)
|
|
887
887
|
? [tables, values]
|
|
888
|
-
:
|
|
888
|
+
: void 0;
|
|
889
889
|
});
|
|
890
890
|
const setPersisted = async (getContent, changes) =>
|
|
891
891
|
await transaction(async () => {
|
|
@@ -1107,7 +1107,7 @@ const createCustomSqlitePersister = (
|
|
|
1107
1107
|
upsert,
|
|
1108
1108
|
(cellOrValue) =>
|
|
1109
1109
|
cellOrValue === true ? 1 : cellOrValue === false ? 0 : cellOrValue,
|
|
1110
|
-
|
|
1110
|
+
void 0,
|
|
1111
1111
|
);
|
|
1112
1112
|
};
|
|
1113
1113
|
|
|
@@ -1198,7 +1198,7 @@ const createCustomPostgreSqlPersister = (
|
|
|
1198
1198
|
thing,
|
|
1199
1199
|
getThing,
|
|
1200
1200
|
'text',
|
|
1201
|
-
|
|
1201
|
+
void 0,
|
|
1202
1202
|
(cellOrValue) => jsonString(cellOrValue),
|
|
1203
1203
|
(field) => jsonParse(field),
|
|
1204
1204
|
);
|
package/queries/index.js
CHANGED
|
@@ -25,7 +25,7 @@ const math = Math;
|
|
|
25
25
|
const mathMax = math.max;
|
|
26
26
|
const mathMin = math.min;
|
|
27
27
|
const isFiniteNumber = isFinite;
|
|
28
|
-
const isUndefined = (thing) => thing ==
|
|
28
|
+
const isUndefined = (thing) => thing == void 0;
|
|
29
29
|
const ifNotUndefined = (value, then, otherwise) =>
|
|
30
30
|
isUndefined(value) ? otherwise?.() : then(value);
|
|
31
31
|
const isTypeStringOrBoolean = (type) => type == STRING || type == BOOLEAN;
|
|
@@ -33,7 +33,7 @@ const isFunction = (thing) => getTypeOf(thing) == FUNCTION;
|
|
|
33
33
|
const isArray = (thing) => Array.isArray(thing);
|
|
34
34
|
const slice = (arrayOrString, start, end) => arrayOrString.slice(start, end);
|
|
35
35
|
const size = (arrayOrString) => arrayOrString.length;
|
|
36
|
-
const getUndefined = () =>
|
|
36
|
+
const getUndefined = () => void 0;
|
|
37
37
|
|
|
38
38
|
const arrayEvery = (array, cb) => array.every(cb);
|
|
39
39
|
const arrayIsEqual = (array1, array2) =>
|
|
@@ -123,9 +123,9 @@ const numericAggregators = /* @__PURE__ */ mapNew([
|
|
|
123
123
|
[
|
|
124
124
|
(numbers) => mathMax(...numbers),
|
|
125
125
|
(metric, add) => mathMax(add, metric),
|
|
126
|
-
(metric, remove) => (remove == metric ?
|
|
126
|
+
(metric, remove) => (remove == metric ? void 0 : metric),
|
|
127
127
|
(metric, add, remove) =>
|
|
128
|
-
remove == metric ?
|
|
128
|
+
remove == metric ? void 0 : mathMax(add, metric),
|
|
129
129
|
],
|
|
130
130
|
],
|
|
131
131
|
[
|
|
@@ -133,9 +133,9 @@ const numericAggregators = /* @__PURE__ */ mapNew([
|
|
|
133
133
|
[
|
|
134
134
|
(numbers) => mathMin(...numbers),
|
|
135
135
|
(metric, add) => mathMin(add, metric),
|
|
136
|
-
(metric, remove) => (remove == metric ?
|
|
136
|
+
(metric, remove) => (remove == metric ? void 0 : metric),
|
|
137
137
|
(metric, add, remove) =>
|
|
138
|
-
remove == metric ?
|
|
138
|
+
remove == metric ? void 0 : mathMin(add, metric),
|
|
139
139
|
],
|
|
140
140
|
],
|
|
141
141
|
[
|
|
@@ -157,7 +157,7 @@ const getAggregateValue = (
|
|
|
157
157
|
force = false,
|
|
158
158
|
) => {
|
|
159
159
|
if (collIsEmpty(newValues)) {
|
|
160
|
-
return
|
|
160
|
+
return void 0;
|
|
161
161
|
}
|
|
162
162
|
const [aggregate, aggregateAdd, aggregateRemove, aggregateReplace] =
|
|
163
163
|
aggregators;
|
|
@@ -182,7 +182,7 @@ const getCellOrValueType = (cellOrValue) => {
|
|
|
182
182
|
return isTypeStringOrBoolean(type) ||
|
|
183
183
|
(type == NUMBER && isFiniteNumber(cellOrValue))
|
|
184
184
|
? type
|
|
185
|
-
:
|
|
185
|
+
: void 0;
|
|
186
186
|
};
|
|
187
187
|
const setOrDelCell = (store, tableId, rowId, cellId, cell) =>
|
|
188
188
|
isUndefined(cell)
|
|
@@ -258,7 +258,7 @@ const getDefinableFunctions = (
|
|
|
258
258
|
const oldRowValue = mapGet(rowValues, rowId);
|
|
259
259
|
const newRowValue = hasRow(tableId, rowId)
|
|
260
260
|
? validateRowValue(getRowValue(getCell, rowId))
|
|
261
|
-
:
|
|
261
|
+
: void 0;
|
|
262
262
|
if (
|
|
263
263
|
!(
|
|
264
264
|
oldRowValue === newRowValue ||
|
|
@@ -273,7 +273,7 @@ const getDefinableFunctions = (
|
|
|
273
273
|
const oldSortKey = mapGet(sortKeys, rowId);
|
|
274
274
|
const newSortKey = hasRow(tableId, rowId)
|
|
275
275
|
? getSortKey(getCell, rowId)
|
|
276
|
-
:
|
|
276
|
+
: void 0;
|
|
277
277
|
if (oldSortKey != newSortKey) {
|
|
278
278
|
mapSet(changedSortKeys, rowId, newSortKey);
|
|
279
279
|
}
|
|
@@ -544,7 +544,7 @@ const createQueries = getCreateFunction((store) => {
|
|
|
544
544
|
mapNew,
|
|
545
545
|
);
|
|
546
546
|
const oldLeafCell = mapGet(selectedCell, selectedRowId);
|
|
547
|
-
const newLeafCell = forceRemove ?
|
|
547
|
+
const newLeafCell = forceRemove ? void 0 : newCell;
|
|
548
548
|
if (oldLeafCell !== newLeafCell) {
|
|
549
549
|
const oldNewSet = setNew([[oldLeafCell, newLeafCell]]);
|
|
550
550
|
const oldLength = collSize(selectedCell);
|
|
@@ -620,7 +620,7 @@ const createQueries = getCreateFunction((store) => {
|
|
|
620
620
|
});
|
|
621
621
|
if (changedLeaf) {
|
|
622
622
|
writeGroupRow(
|
|
623
|
-
visitTree(tree, oldPath,
|
|
623
|
+
visitTree(tree, oldPath, void 0, ([, selectedRowIds]) => {
|
|
624
624
|
collDel(selectedRowIds, selectedRowId);
|
|
625
625
|
return collIsEmpty(selectedRowIds);
|
|
626
626
|
}),
|
|
@@ -646,7 +646,7 @@ const createQueries = getCreateFunction((store) => {
|
|
|
646
646
|
selectedCellId,
|
|
647
647
|
)),
|
|
648
648
|
);
|
|
649
|
-
return [mapNew(), setNew(),
|
|
649
|
+
return [mapNew(), setNew(), void 0, groupRow];
|
|
650
650
|
},
|
|
651
651
|
([, selectedRowIds]) => {
|
|
652
652
|
setAdd(selectedRowIds, selectedRowId);
|
|
@@ -25,7 +25,7 @@ const math = Math;
|
|
|
25
25
|
const mathMax = math.max;
|
|
26
26
|
const mathMin = math.min;
|
|
27
27
|
const isFiniteNumber = isFinite;
|
|
28
|
-
const isUndefined = (thing) => thing ==
|
|
28
|
+
const isUndefined = (thing) => thing == void 0;
|
|
29
29
|
const ifNotUndefined = (value, then, otherwise) =>
|
|
30
30
|
isUndefined(value) ? otherwise?.() : then(value);
|
|
31
31
|
const isTypeStringOrBoolean = (type) => type == STRING || type == BOOLEAN;
|
|
@@ -33,7 +33,7 @@ const isFunction = (thing) => getTypeOf(thing) == FUNCTION;
|
|
|
33
33
|
const isArray = (thing) => Array.isArray(thing);
|
|
34
34
|
const slice = (arrayOrString, start, end) => arrayOrString.slice(start, end);
|
|
35
35
|
const size = (arrayOrString) => arrayOrString.length;
|
|
36
|
-
const getUndefined = () =>
|
|
36
|
+
const getUndefined = () => void 0;
|
|
37
37
|
|
|
38
38
|
const arrayEvery = (array, cb) => array.every(cb);
|
|
39
39
|
const arrayIsEqual = (array1, array2) =>
|
|
@@ -123,9 +123,9 @@ const numericAggregators = /* @__PURE__ */ mapNew([
|
|
|
123
123
|
[
|
|
124
124
|
(numbers) => mathMax(...numbers),
|
|
125
125
|
(metric, add) => mathMax(add, metric),
|
|
126
|
-
(metric, remove) => (remove == metric ?
|
|
126
|
+
(metric, remove) => (remove == metric ? void 0 : metric),
|
|
127
127
|
(metric, add, remove) =>
|
|
128
|
-
remove == metric ?
|
|
128
|
+
remove == metric ? void 0 : mathMax(add, metric),
|
|
129
129
|
],
|
|
130
130
|
],
|
|
131
131
|
[
|
|
@@ -133,9 +133,9 @@ const numericAggregators = /* @__PURE__ */ mapNew([
|
|
|
133
133
|
[
|
|
134
134
|
(numbers) => mathMin(...numbers),
|
|
135
135
|
(metric, add) => mathMin(add, metric),
|
|
136
|
-
(metric, remove) => (remove == metric ?
|
|
136
|
+
(metric, remove) => (remove == metric ? void 0 : metric),
|
|
137
137
|
(metric, add, remove) =>
|
|
138
|
-
remove == metric ?
|
|
138
|
+
remove == metric ? void 0 : mathMin(add, metric),
|
|
139
139
|
],
|
|
140
140
|
],
|
|
141
141
|
[
|
|
@@ -157,7 +157,7 @@ const getAggregateValue = (
|
|
|
157
157
|
force = false,
|
|
158
158
|
) => {
|
|
159
159
|
if (collIsEmpty(newValues)) {
|
|
160
|
-
return
|
|
160
|
+
return void 0;
|
|
161
161
|
}
|
|
162
162
|
const [aggregate, aggregateAdd, aggregateRemove, aggregateReplace] =
|
|
163
163
|
aggregators;
|
|
@@ -182,7 +182,7 @@ const getCellOrValueType = (cellOrValue) => {
|
|
|
182
182
|
return isTypeStringOrBoolean(type) ||
|
|
183
183
|
(type == NUMBER && isFiniteNumber(cellOrValue))
|
|
184
184
|
? type
|
|
185
|
-
:
|
|
185
|
+
: void 0;
|
|
186
186
|
};
|
|
187
187
|
const setOrDelCell = (store, tableId, rowId, cellId, cell) =>
|
|
188
188
|
isUndefined(cell)
|
|
@@ -258,7 +258,7 @@ const getDefinableFunctions = (
|
|
|
258
258
|
const oldRowValue = mapGet(rowValues, rowId);
|
|
259
259
|
const newRowValue = hasRow(tableId, rowId)
|
|
260
260
|
? validateRowValue(getRowValue(getCell, rowId))
|
|
261
|
-
:
|
|
261
|
+
: void 0;
|
|
262
262
|
if (
|
|
263
263
|
!(
|
|
264
264
|
oldRowValue === newRowValue ||
|
|
@@ -273,7 +273,7 @@ const getDefinableFunctions = (
|
|
|
273
273
|
const oldSortKey = mapGet(sortKeys, rowId);
|
|
274
274
|
const newSortKey = hasRow(tableId, rowId)
|
|
275
275
|
? getSortKey(getCell, rowId)
|
|
276
|
-
:
|
|
276
|
+
: void 0;
|
|
277
277
|
if (oldSortKey != newSortKey) {
|
|
278
278
|
mapSet(changedSortKeys, rowId, newSortKey);
|
|
279
279
|
}
|
|
@@ -544,7 +544,7 @@ const createQueries = getCreateFunction((store) => {
|
|
|
544
544
|
mapNew,
|
|
545
545
|
);
|
|
546
546
|
const oldLeafCell = mapGet(selectedCell, selectedRowId);
|
|
547
|
-
const newLeafCell = forceRemove ?
|
|
547
|
+
const newLeafCell = forceRemove ? void 0 : newCell;
|
|
548
548
|
if (oldLeafCell !== newLeafCell) {
|
|
549
549
|
const oldNewSet = setNew([[oldLeafCell, newLeafCell]]);
|
|
550
550
|
const oldLength = collSize(selectedCell);
|
|
@@ -620,7 +620,7 @@ const createQueries = getCreateFunction((store) => {
|
|
|
620
620
|
});
|
|
621
621
|
if (changedLeaf) {
|
|
622
622
|
writeGroupRow(
|
|
623
|
-
visitTree(tree, oldPath,
|
|
623
|
+
visitTree(tree, oldPath, void 0, ([, selectedRowIds]) => {
|
|
624
624
|
collDel(selectedRowIds, selectedRowId);
|
|
625
625
|
return collIsEmpty(selectedRowIds);
|
|
626
626
|
}),
|
|
@@ -646,7 +646,7 @@ const createQueries = getCreateFunction((store) => {
|
|
|
646
646
|
selectedCellId,
|
|
647
647
|
)),
|
|
648
648
|
);
|
|
649
|
-
return [mapNew(), setNew(),
|
|
649
|
+
return [mapNew(), setNew(), void 0, groupRow];
|
|
650
650
|
},
|
|
651
651
|
([, selectedRowIds]) => {
|
|
652
652
|
setAdd(selectedRowIds, selectedRowId);
|
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"><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.
|
|
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.7" 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.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,210</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>
|
|
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.7kB</td></tr><tr><th class="right">tinybase (complete)</th><td>11.4kB</td><td>119.6kB</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,292</td><td>2,292</td><td>100.0%</td></tr><tr><th class="right">Statements</th><td>2,477</td><td>2,477</td><td>100.0%</td></tr><tr><th class="right">Functions</th><td>990</td><td>990</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,196</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 == void 0;
|
|
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
|
+
: void 0;
|
|
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
|
+
: void 0;
|
|
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], void 0, (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) ? void 0 : 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 == void 0;
|
|
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
|
+
: void 0;
|
|
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
|
+
: void 0;
|
|
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], void 0, (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) ? void 0 : value + EMPTY_STRING),
|
|
365
365
|
addListener,
|
|
366
366
|
callListeners,
|
|
367
367
|
);
|