tinybase 5.0.0-beta.3 → 5.0.0-beta.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/checkpoints.js +1 -1
- package/lib/checkpoints.js.gz +0 -0
- package/lib/cjs/checkpoints.cjs +1 -1
- package/lib/cjs/checkpoints.cjs.gz +0 -0
- package/lib/cjs/indexes.cjs +1 -1
- package/lib/cjs/indexes.cjs.gz +0 -0
- package/lib/cjs/mergeable-store.cjs +1 -1
- package/lib/cjs/mergeable-store.cjs.gz +0 -0
- package/lib/cjs/metrics.cjs +1 -1
- package/lib/cjs/metrics.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-automerge.cjs +1 -1
- package/lib/cjs/persisters/persister-automerge.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-browser.cjs +1 -1
- package/lib/cjs/persisters/persister-browser.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-cr-sqlite-wasm.cjs +1 -1
- package/lib/cjs/persisters/persister-cr-sqlite-wasm.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-electric-sql.cjs +1 -1
- package/lib/cjs/persisters/persister-electric-sql.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-expo-sqlite-next.cjs +1 -1
- package/lib/cjs/persisters/persister-expo-sqlite-next.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-expo-sqlite.cjs +1 -1
- package/lib/cjs/persisters/persister-expo-sqlite.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-file.cjs +1 -1
- package/lib/cjs/persisters/persister-file.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-indexed-db.cjs +1 -1
- package/lib/cjs/persisters/persister-indexed-db.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-libsql.cjs +1 -0
- package/lib/cjs/persisters/persister-libsql.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-partykit-client.cjs +1 -1
- package/lib/cjs/persisters/persister-partykit-client.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-remote.cjs +1 -1
- package/lib/cjs/persisters/persister-remote.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-sqlite-wasm.cjs +1 -1
- package/lib/cjs/persisters/persister-sqlite-wasm.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-sqlite3.cjs +1 -1
- package/lib/cjs/persisters/persister-sqlite3.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-yjs.cjs +1 -1
- package/lib/cjs/persisters/persister-yjs.cjs.gz +0 -0
- package/lib/cjs/persisters.cjs +1 -1
- package/lib/cjs/persisters.cjs.gz +0 -0
- package/lib/cjs/queries.cjs +1 -1
- package/lib/cjs/queries.cjs.gz +0 -0
- package/lib/cjs/relationships.cjs +1 -1
- package/lib/cjs/relationships.cjs.gz +0 -0
- package/lib/cjs/store.cjs +1 -1
- package/lib/cjs/store.cjs.gz +0 -0
- package/lib/cjs/tinybase.cjs +1 -1
- package/lib/cjs/tinybase.cjs.gz +0 -0
- package/lib/cjs/tools.cjs +1 -1
- package/lib/cjs/tools.cjs.gz +0 -0
- package/lib/cjs/ui-react-dom-debug.cjs +1 -1
- package/lib/cjs/ui-react-dom-debug.cjs.gz +0 -0
- package/lib/cjs-es6/checkpoints.cjs +1 -1
- package/lib/cjs-es6/checkpoints.cjs.gz +0 -0
- package/lib/cjs-es6/indexes.cjs +1 -1
- package/lib/cjs-es6/indexes.cjs.gz +0 -0
- package/lib/cjs-es6/mergeable-store.cjs +1 -1
- package/lib/cjs-es6/mergeable-store.cjs.gz +0 -0
- package/lib/cjs-es6/metrics.cjs +1 -1
- package/lib/cjs-es6/metrics.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-automerge.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-automerge.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-browser.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-browser.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-electric-sql.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-electric-sql.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-expo-sqlite-next.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-expo-sqlite-next.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-expo-sqlite.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-expo-sqlite.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-file.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-file.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-indexed-db.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-indexed-db.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-libsql.cjs +1 -0
- package/lib/cjs-es6/persisters/persister-libsql.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-partykit-client.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-partykit-client.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-remote.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-remote.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-sqlite3.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-sqlite3.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-yjs.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-yjs.cjs.gz +0 -0
- package/lib/cjs-es6/persisters.cjs +1 -1
- package/lib/cjs-es6/persisters.cjs.gz +0 -0
- package/lib/cjs-es6/queries.cjs +1 -1
- package/lib/cjs-es6/queries.cjs.gz +0 -0
- package/lib/cjs-es6/relationships.cjs +1 -1
- package/lib/cjs-es6/relationships.cjs.gz +0 -0
- package/lib/cjs-es6/store.cjs +1 -1
- package/lib/cjs-es6/store.cjs.gz +0 -0
- package/lib/cjs-es6/tinybase.cjs +1 -1
- package/lib/cjs-es6/tinybase.cjs.gz +0 -0
- package/lib/cjs-es6/tools.cjs +1 -1
- package/lib/cjs-es6/tools.cjs.gz +0 -0
- package/lib/cjs-es6/ui-react-dom-debug.cjs +1 -1
- package/lib/cjs-es6/ui-react-dom-debug.cjs.gz +0 -0
- package/lib/debug/checkpoints.js +3 -1
- package/lib/debug/indexes.js +3 -1
- package/lib/debug/mergeable-store.js +247 -139
- package/lib/debug/metrics.js +3 -1
- package/lib/debug/persisters/persister-automerge.js +36 -12
- package/lib/debug/persisters/persister-browser.js +37 -13
- package/lib/debug/persisters/persister-cr-sqlite-wasm.js +36 -12
- package/lib/debug/persisters/persister-electric-sql.js +36 -12
- package/lib/debug/persisters/persister-expo-sqlite-next.js +36 -12
- package/lib/debug/persisters/persister-expo-sqlite.js +36 -12
- package/lib/debug/persisters/persister-file.js +37 -13
- package/lib/debug/persisters/persister-indexed-db.js +36 -12
- package/lib/debug/persisters/persister-libsql.js +898 -0
- package/lib/debug/persisters/persister-partykit-client.js +36 -12
- package/lib/debug/persisters/persister-remote.js +36 -12
- package/lib/debug/persisters/persister-sqlite-wasm.js +36 -12
- package/lib/debug/persisters/persister-sqlite3.js +36 -12
- package/lib/debug/persisters/persister-yjs.js +36 -12
- package/lib/debug/persisters.js +36 -12
- package/lib/debug/queries.js +7 -4
- package/lib/debug/relationships.js +3 -1
- package/lib/debug/store.js +21 -22
- package/lib/debug/tinybase.js +279 -150
- package/lib/debug/tools.js +7 -4
- package/lib/debug/ui-react-dom.js +55 -34
- package/lib/es6/checkpoints.js +1 -1
- package/lib/es6/checkpoints.js.gz +0 -0
- package/lib/es6/indexes.js +1 -1
- package/lib/es6/indexes.js.gz +0 -0
- package/lib/es6/mergeable-store.js +1 -1
- package/lib/es6/mergeable-store.js.gz +0 -0
- package/lib/es6/metrics.js +1 -1
- package/lib/es6/metrics.js.gz +0 -0
- package/lib/es6/persisters/persister-automerge.js +1 -1
- package/lib/es6/persisters/persister-automerge.js.gz +0 -0
- package/lib/es6/persisters/persister-browser.js +1 -1
- package/lib/es6/persisters/persister-browser.js.gz +0 -0
- package/lib/es6/persisters/persister-cr-sqlite-wasm.js +1 -1
- package/lib/es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
- package/lib/es6/persisters/persister-electric-sql.js +1 -1
- package/lib/es6/persisters/persister-electric-sql.js.gz +0 -0
- package/lib/es6/persisters/persister-expo-sqlite-next.js +1 -1
- package/lib/es6/persisters/persister-expo-sqlite-next.js.gz +0 -0
- package/lib/es6/persisters/persister-expo-sqlite.js +1 -1
- package/lib/es6/persisters/persister-expo-sqlite.js.gz +0 -0
- package/lib/es6/persisters/persister-file.js +1 -1
- package/lib/es6/persisters/persister-file.js.gz +0 -0
- package/lib/es6/persisters/persister-indexed-db.js +1 -1
- package/lib/es6/persisters/persister-indexed-db.js.gz +0 -0
- package/lib/es6/persisters/persister-libsql.js +1 -0
- package/lib/es6/persisters/persister-libsql.js.gz +0 -0
- package/lib/es6/persisters/persister-partykit-client.js +1 -1
- package/lib/es6/persisters/persister-partykit-client.js.gz +0 -0
- package/lib/es6/persisters/persister-remote.js +1 -1
- package/lib/es6/persisters/persister-remote.js.gz +0 -0
- package/lib/es6/persisters/persister-sqlite-wasm.js +1 -1
- package/lib/es6/persisters/persister-sqlite-wasm.js.gz +0 -0
- package/lib/es6/persisters/persister-sqlite3.js +1 -1
- package/lib/es6/persisters/persister-sqlite3.js.gz +0 -0
- package/lib/es6/persisters/persister-yjs.js +1 -1
- package/lib/es6/persisters/persister-yjs.js.gz +0 -0
- package/lib/es6/persisters.js +1 -1
- package/lib/es6/persisters.js.gz +0 -0
- package/lib/es6/queries.js +1 -1
- package/lib/es6/queries.js.gz +0 -0
- package/lib/es6/relationships.js +1 -1
- package/lib/es6/relationships.js.gz +0 -0
- package/lib/es6/store.js +1 -1
- package/lib/es6/store.js.gz +0 -0
- package/lib/es6/tinybase.js +1 -1
- package/lib/es6/tinybase.js.gz +0 -0
- package/lib/es6/tools.js +1 -1
- package/lib/es6/tools.js.gz +0 -0
- package/lib/es6/ui-react-dom-debug.js +1 -1
- package/lib/es6/ui-react-dom-debug.js.gz +0 -0
- package/lib/indexes.js +1 -1
- package/lib/indexes.js.gz +0 -0
- package/lib/mergeable-store.js +1 -1
- package/lib/mergeable-store.js.gz +0 -0
- package/lib/metrics.js +1 -1
- package/lib/metrics.js.gz +0 -0
- package/lib/persisters/persister-automerge.js +1 -1
- package/lib/persisters/persister-automerge.js.gz +0 -0
- package/lib/persisters/persister-browser.js +1 -1
- package/lib/persisters/persister-browser.js.gz +0 -0
- package/lib/persisters/persister-cr-sqlite-wasm.js +1 -1
- package/lib/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
- package/lib/persisters/persister-electric-sql.js +1 -1
- package/lib/persisters/persister-electric-sql.js.gz +0 -0
- package/lib/persisters/persister-expo-sqlite-next.js +1 -1
- package/lib/persisters/persister-expo-sqlite-next.js.gz +0 -0
- package/lib/persisters/persister-expo-sqlite.js +1 -1
- package/lib/persisters/persister-expo-sqlite.js.gz +0 -0
- package/lib/persisters/persister-file.js +1 -1
- package/lib/persisters/persister-file.js.gz +0 -0
- package/lib/persisters/persister-indexed-db.js +1 -1
- package/lib/persisters/persister-indexed-db.js.gz +0 -0
- package/lib/persisters/persister-libsql.js +1 -0
- package/lib/persisters/persister-libsql.js.gz +0 -0
- package/lib/persisters/persister-partykit-client.js +1 -1
- package/lib/persisters/persister-partykit-client.js.gz +0 -0
- package/lib/persisters/persister-remote.js +1 -1
- package/lib/persisters/persister-remote.js.gz +0 -0
- package/lib/persisters/persister-sqlite-wasm.js +1 -1
- package/lib/persisters/persister-sqlite-wasm.js.gz +0 -0
- package/lib/persisters/persister-sqlite3.js +1 -1
- package/lib/persisters/persister-sqlite3.js.gz +0 -0
- package/lib/persisters/persister-yjs.js +1 -1
- package/lib/persisters/persister-yjs.js.gz +0 -0
- package/lib/persisters.js +1 -1
- package/lib/persisters.js.gz +0 -0
- package/lib/queries.js +1 -1
- package/lib/queries.js.gz +0 -0
- package/lib/relationships.js +1 -1
- package/lib/relationships.js.gz +0 -0
- package/lib/store.js +1 -1
- package/lib/store.js.gz +0 -0
- package/lib/tinybase.js +1 -1
- package/lib/tinybase.js.gz +0 -0
- package/lib/tools.js +1 -1
- package/lib/tools.js.gz +0 -0
- package/lib/types/mergeable-store.d.ts +78 -11
- package/lib/types/persisters/persister-browser.d.ts +2 -2
- package/lib/types/persisters/persister-file.d.ts +1 -1
- package/lib/types/persisters/persister-libsql.d.ts +139 -0
- package/lib/types/persisters.d.ts +19 -7
- package/lib/types/with-schemas/mergeable-store.d.ts +314 -31
- package/lib/types/with-schemas/persisters/persister-browser.d.ts +2 -2
- package/lib/types/with-schemas/persisters/persister-file.d.ts +1 -1
- package/lib/types/with-schemas/persisters/persister-libsql.d.ts +152 -0
- package/lib/types/with-schemas/persisters.d.ts +14 -6
- package/lib/types/with-schemas/store.d.ts +37 -87
- package/lib/umd/checkpoints.js +1 -1
- package/lib/umd/checkpoints.js.gz +0 -0
- package/lib/umd/indexes.js +1 -1
- package/lib/umd/indexes.js.gz +0 -0
- package/lib/umd/mergeable-store.js +1 -1
- package/lib/umd/mergeable-store.js.gz +0 -0
- package/lib/umd/metrics.js +1 -1
- package/lib/umd/metrics.js.gz +0 -0
- package/lib/umd/persisters/persister-automerge.js +1 -1
- package/lib/umd/persisters/persister-automerge.js.gz +0 -0
- package/lib/umd/persisters/persister-browser.js +1 -1
- package/lib/umd/persisters/persister-browser.js.gz +0 -0
- package/lib/umd/persisters/persister-cr-sqlite-wasm.js +1 -1
- package/lib/umd/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
- package/lib/umd/persisters/persister-electric-sql.js +1 -1
- package/lib/umd/persisters/persister-electric-sql.js.gz +0 -0
- package/lib/umd/persisters/persister-expo-sqlite-next.js +1 -1
- package/lib/umd/persisters/persister-expo-sqlite-next.js.gz +0 -0
- package/lib/umd/persisters/persister-expo-sqlite.js +1 -1
- package/lib/umd/persisters/persister-expo-sqlite.js.gz +0 -0
- package/lib/umd/persisters/persister-file.js +1 -1
- package/lib/umd/persisters/persister-file.js.gz +0 -0
- package/lib/umd/persisters/persister-indexed-db.js +1 -1
- package/lib/umd/persisters/persister-indexed-db.js.gz +0 -0
- package/lib/umd/persisters/persister-libsql.js +1 -0
- package/lib/umd/persisters/persister-libsql.js.gz +0 -0
- package/lib/umd/persisters/persister-partykit-client.js +1 -1
- package/lib/umd/persisters/persister-partykit-client.js.gz +0 -0
- package/lib/umd/persisters/persister-remote.js +1 -1
- package/lib/umd/persisters/persister-remote.js.gz +0 -0
- package/lib/umd/persisters/persister-sqlite-wasm.js +1 -1
- package/lib/umd/persisters/persister-sqlite-wasm.js.gz +0 -0
- package/lib/umd/persisters/persister-sqlite3.js +1 -1
- package/lib/umd/persisters/persister-sqlite3.js.gz +0 -0
- package/lib/umd/persisters/persister-yjs.js +1 -1
- package/lib/umd/persisters/persister-yjs.js.gz +0 -0
- package/lib/umd/persisters.js +1 -1
- package/lib/umd/persisters.js.gz +0 -0
- package/lib/umd/queries.js +1 -1
- package/lib/umd/queries.js.gz +0 -0
- package/lib/umd/relationships.js +1 -1
- package/lib/umd/relationships.js.gz +0 -0
- package/lib/umd/store.js +1 -1
- package/lib/umd/store.js.gz +0 -0
- package/lib/umd/tinybase.js +1 -1
- package/lib/umd/tinybase.js.gz +0 -0
- package/lib/umd/tools.js +1 -1
- package/lib/umd/tools.js.gz +0 -0
- package/lib/umd/ui-react-dom-debug.js +1 -1
- package/lib/umd/ui-react-dom-debug.js.gz +0 -0
- package/lib/umd-es6/checkpoints.js +1 -1
- package/lib/umd-es6/checkpoints.js.gz +0 -0
- package/lib/umd-es6/indexes.js +1 -1
- package/lib/umd-es6/indexes.js.gz +0 -0
- package/lib/umd-es6/mergeable-store.js +1 -1
- package/lib/umd-es6/mergeable-store.js.gz +0 -0
- package/lib/umd-es6/metrics.js +1 -1
- package/lib/umd-es6/metrics.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-automerge.js +1 -1
- package/lib/umd-es6/persisters/persister-automerge.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-browser.js +1 -1
- package/lib/umd-es6/persisters/persister-browser.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js +1 -1
- package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-electric-sql.js +1 -1
- package/lib/umd-es6/persisters/persister-electric-sql.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-expo-sqlite-next.js +1 -1
- package/lib/umd-es6/persisters/persister-expo-sqlite-next.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-expo-sqlite.js +1 -1
- package/lib/umd-es6/persisters/persister-expo-sqlite.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-file.js +1 -1
- package/lib/umd-es6/persisters/persister-file.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-indexed-db.js +1 -1
- package/lib/umd-es6/persisters/persister-indexed-db.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-libsql.js +1 -0
- package/lib/umd-es6/persisters/persister-libsql.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-partykit-client.js +1 -1
- package/lib/umd-es6/persisters/persister-partykit-client.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-remote.js +1 -1
- package/lib/umd-es6/persisters/persister-remote.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-sqlite-wasm.js +1 -1
- package/lib/umd-es6/persisters/persister-sqlite-wasm.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-sqlite3.js +1 -1
- package/lib/umd-es6/persisters/persister-sqlite3.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-yjs.js +1 -1
- package/lib/umd-es6/persisters/persister-yjs.js.gz +0 -0
- package/lib/umd-es6/persisters.js +1 -1
- package/lib/umd-es6/persisters.js.gz +0 -0
- package/lib/umd-es6/queries.js +1 -1
- package/lib/umd-es6/queries.js.gz +0 -0
- package/lib/umd-es6/relationships.js +1 -1
- package/lib/umd-es6/relationships.js.gz +0 -0
- package/lib/umd-es6/store.js +1 -1
- package/lib/umd-es6/store.js.gz +0 -0
- package/lib/umd-es6/tinybase.js +1 -1
- package/lib/umd-es6/tinybase.js.gz +0 -0
- package/lib/umd-es6/tools.js +1 -1
- package/lib/umd-es6/tools.js.gz +0 -0
- package/lib/umd-es6/ui-react-dom-debug.js +1 -1
- package/lib/umd-es6/ui-react-dom-debug.js.gz +0 -0
- package/package.json +35 -30
- package/readme.md +2 -2
|
@@ -5,60 +5,70 @@
|
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
import {
|
|
8
|
-
|
|
8
|
+
CellIdFromSchema,
|
|
9
|
+
TableIdFromSchema,
|
|
10
|
+
ValueIdFromSchema,
|
|
11
|
+
} from './internal/store';
|
|
12
|
+
import {
|
|
13
|
+
CellOrUndefined,
|
|
9
14
|
NoSchemas,
|
|
15
|
+
NoTablesSchema,
|
|
16
|
+
NoValuesSchema,
|
|
10
17
|
OptionalSchemas,
|
|
11
18
|
OptionalTablesSchema,
|
|
12
19
|
OptionalValuesSchema,
|
|
13
20
|
Store,
|
|
14
|
-
|
|
21
|
+
TablesSchema,
|
|
22
|
+
ValueOrUndefined,
|
|
23
|
+
ValuesSchema,
|
|
15
24
|
} from './store.d';
|
|
16
25
|
import {Id} from './common';
|
|
17
26
|
import {IdObj} from '../../common/obj';
|
|
18
27
|
|
|
28
|
+
/**
|
|
29
|
+
* The Hash type
|
|
30
|
+
* @category Stamps
|
|
31
|
+
*/
|
|
32
|
+
export type Hash = number;
|
|
33
|
+
|
|
19
34
|
/**
|
|
20
35
|
* The Time type
|
|
21
36
|
* @category Stamps
|
|
22
37
|
*/
|
|
23
38
|
export type Time = string;
|
|
24
39
|
|
|
40
|
+
/**
|
|
41
|
+
* The HashStamp type
|
|
42
|
+
* @category Stamps
|
|
43
|
+
*/
|
|
44
|
+
export type HashStamp<Thing> = [time: Time, thing: Thing, hash: Hash];
|
|
45
|
+
|
|
25
46
|
/**
|
|
26
47
|
* The Stamp type
|
|
27
48
|
* @category Stamps
|
|
28
49
|
*/
|
|
29
50
|
export type Stamp<Thing> = [time: Time, thing: Thing];
|
|
30
51
|
|
|
31
|
-
type MergeableCell<Schema extends OptionalTablesSchema> = Stamp<Cell<
|
|
32
|
-
Schema,
|
|
33
|
-
any,
|
|
34
|
-
any
|
|
35
|
-
> | null>;
|
|
36
|
-
type MergeableRow<Schema extends OptionalTablesSchema> = Stamp<IdObj<
|
|
37
|
-
MergeableCell<Schema>
|
|
38
|
-
> | null>;
|
|
39
|
-
type MergeableTable<Schema extends OptionalTablesSchema> = Stamp<IdObj<
|
|
40
|
-
MergeableRow<Schema>
|
|
41
|
-
> | null>;
|
|
42
|
-
type MergeableTables<Schema extends OptionalTablesSchema> = Stamp<
|
|
43
|
-
IdObj<MergeableTable<Schema>>
|
|
44
|
-
>;
|
|
45
|
-
type MergeableValue<Schema extends OptionalValuesSchema> = Stamp<Value<
|
|
46
|
-
Schema,
|
|
47
|
-
any,
|
|
48
|
-
any
|
|
49
|
-
> | null>;
|
|
50
|
-
type MergeableValues<Schema extends OptionalValuesSchema> = Stamp<
|
|
51
|
-
IdObj<MergeableValue<Schema>>
|
|
52
|
-
>;
|
|
53
|
-
|
|
54
52
|
/**
|
|
55
53
|
* The MergeableContent type
|
|
56
54
|
* @category Mergeable
|
|
57
55
|
*/
|
|
58
|
-
export type MergeableContent<Schemas extends OptionalSchemas> =
|
|
56
|
+
export type MergeableContent<Schemas extends OptionalSchemas> = HashStamp<
|
|
59
57
|
[
|
|
60
|
-
mergeableTables:
|
|
61
|
-
|
|
58
|
+
mergeableTables: HashStamp<{
|
|
59
|
+
[TableId in TableIdFromSchema<Schemas[0]>]?: HashStamp<{
|
|
60
|
+
[rowId: Id]: HashStamp<{
|
|
61
|
+
[CellId in CellIdFromSchema<Schemas[0], TableId>]?: HashStamp<
|
|
62
|
+
CellOrUndefined<Schemas[0], TableId, CellId>
|
|
63
|
+
>;
|
|
64
|
+
}>;
|
|
65
|
+
}>;
|
|
66
|
+
}>,
|
|
67
|
+
mergeableValues: HashStamp<{
|
|
68
|
+
[ValueId in ValueIdFromSchema<Schemas[1]>]?: HashStamp<
|
|
69
|
+
ValueOrUndefined<Schemas[1], ValueId>
|
|
70
|
+
>;
|
|
71
|
+
}>,
|
|
62
72
|
]
|
|
63
73
|
>;
|
|
64
74
|
|
|
@@ -66,8 +76,26 @@ export type MergeableContent<Schemas extends OptionalSchemas> = Stamp<
|
|
|
66
76
|
* The MergeableChanges type
|
|
67
77
|
* @category Mergeable
|
|
68
78
|
*/
|
|
69
|
-
export type MergeableChanges<Schemas extends OptionalSchemas> =
|
|
70
|
-
|
|
79
|
+
export type MergeableChanges<Schemas extends OptionalSchemas> = Stamp<
|
|
80
|
+
[
|
|
81
|
+
mergeableTables: Stamp<{
|
|
82
|
+
[TableId in TableIdFromSchema<Schemas[0]>]?: Stamp<
|
|
83
|
+
IdObj<
|
|
84
|
+
Stamp<{
|
|
85
|
+
[CellId in CellIdFromSchema<Schemas[0], TableId>]?: Stamp<
|
|
86
|
+
CellOrUndefined<Schemas[0], TableId, CellId>
|
|
87
|
+
>;
|
|
88
|
+
}>
|
|
89
|
+
>
|
|
90
|
+
>;
|
|
91
|
+
}>,
|
|
92
|
+
mergeableValues: Stamp<{
|
|
93
|
+
[ValueId in ValueIdFromSchema<Schemas[1]>]?: Stamp<
|
|
94
|
+
ValueOrUndefined<Schemas[1], ValueId>
|
|
95
|
+
>;
|
|
96
|
+
}>,
|
|
97
|
+
]
|
|
98
|
+
>;
|
|
71
99
|
|
|
72
100
|
/**
|
|
73
101
|
* The MergeableStore type
|
|
@@ -96,13 +124,268 @@ export interface MergeableStore<Schemas extends OptionalSchemas>
|
|
|
96
124
|
mergeableContent: MergeableContent<Schemas>,
|
|
97
125
|
): MergeableStore<Schemas>;
|
|
98
126
|
|
|
127
|
+
/**
|
|
128
|
+
* The getTransactionMergeableChanges method
|
|
129
|
+
* @category Merging
|
|
130
|
+
*/
|
|
131
|
+
getTransactionMergeableChanges(): MergeableChanges<Schemas>;
|
|
132
|
+
|
|
99
133
|
/**
|
|
100
134
|
* The applyMergeableChanges method
|
|
101
135
|
* @category Merging
|
|
102
136
|
*/
|
|
103
137
|
applyMergeableChanges(
|
|
104
|
-
mergeableChanges: MergeableChanges<Schemas>,
|
|
138
|
+
mergeableChanges: MergeableChanges<Schemas> | MergeableContent<Schemas>,
|
|
105
139
|
): MergeableStore<Schemas>;
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* The getContentHash method
|
|
143
|
+
* @category Hashes
|
|
144
|
+
*/
|
|
145
|
+
getContentHash(): Hash;
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* The getTablesHash method
|
|
149
|
+
* @category Hashes
|
|
150
|
+
*/
|
|
151
|
+
getTablesHash(): Hash;
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* The getTableHash method
|
|
155
|
+
* @category Hashes
|
|
156
|
+
*/
|
|
157
|
+
getTableHash(tableId: TableIdFromSchema<Schemas[0]>): Hash;
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* The getRowHash method
|
|
161
|
+
* @category Hashes
|
|
162
|
+
*/
|
|
163
|
+
getRowHash<TableId extends TableIdFromSchema<Schemas[0]>>(
|
|
164
|
+
tableId: TableId,
|
|
165
|
+
rowId: Id,
|
|
166
|
+
): Hash;
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* The getCellHash method
|
|
170
|
+
* @category Hashes
|
|
171
|
+
*/
|
|
172
|
+
getCellHash<TableId extends TableIdFromSchema<Schemas[0]>>(
|
|
173
|
+
tableId: TableId,
|
|
174
|
+
rowId: Id,
|
|
175
|
+
cellId: CellIdFromSchema<Schemas[0], TableId>,
|
|
176
|
+
): Hash;
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* The getValuesHash method
|
|
180
|
+
* @category Hashes
|
|
181
|
+
*/
|
|
182
|
+
getValuesHash(): Hash;
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* The getValueHash method
|
|
186
|
+
* @category Hashes
|
|
187
|
+
*/
|
|
188
|
+
getValueHash(valueId: ValueIdFromSchema<Schemas[1]>): Hash;
|
|
189
|
+
|
|
190
|
+
/**
|
|
191
|
+
* The setTablesSchema method lets you specify the TablesSchema of the tabular
|
|
192
|
+
* part of the Store.
|
|
193
|
+
*
|
|
194
|
+
* Note that this may result in a change to data in the Store, as defaults are
|
|
195
|
+
* applied or as invalid Table, Row, or Cell objects are removed. These
|
|
196
|
+
* changes will fire any listeners to that data, as expected.
|
|
197
|
+
*
|
|
198
|
+
* When no longer needed, you can also completely remove an existing
|
|
199
|
+
* TablesSchema with the delTablesSchema method.
|
|
200
|
+
* @param tablesSchema The TablesSchema to be set for the Store.
|
|
201
|
+
* @returns A reference to the Store.
|
|
202
|
+
* @example
|
|
203
|
+
* This example sets the TablesSchema of a Store after it has been created.
|
|
204
|
+
*
|
|
205
|
+
* ```js
|
|
206
|
+
* const store = createStore().setTablesSchema({
|
|
207
|
+
* pets: {
|
|
208
|
+
* species: {type: 'string'},
|
|
209
|
+
* sold: {type: 'boolean', default: false},
|
|
210
|
+
* },
|
|
211
|
+
* });
|
|
212
|
+
* store.addRow('pets', {species: 'dog', color: 'brown', sold: 'maybe'});
|
|
213
|
+
*
|
|
214
|
+
* console.log(store.getTables());
|
|
215
|
+
* // -> {pets: {0: {species: 'dog', sold: false}}}
|
|
216
|
+
* ```
|
|
217
|
+
* @category Setter
|
|
218
|
+
* @since v3.0.0
|
|
219
|
+
*/
|
|
220
|
+
setTablesSchema<TS extends TablesSchema>(
|
|
221
|
+
tablesSchema: TS,
|
|
222
|
+
): MergeableStore<[typeof tablesSchema, Schemas[1]]>;
|
|
223
|
+
|
|
224
|
+
/**
|
|
225
|
+
* The setValuesSchema method lets you specify the ValuesSchema of the keyed
|
|
226
|
+
* Values part of the Store.
|
|
227
|
+
*
|
|
228
|
+
* Note that this may result in a change to data in the Store, as defaults are
|
|
229
|
+
* applied or as invalid Values are removed. These changes will fire any
|
|
230
|
+
* listeners to that data, as expected.
|
|
231
|
+
*
|
|
232
|
+
* When no longer needed, you can also completely remove an existing
|
|
233
|
+
* ValuesSchema with the delValuesSchema method.
|
|
234
|
+
* @param valuesSchema The ValuesSchema to be set for the Store.
|
|
235
|
+
* @returns A reference to the Store.
|
|
236
|
+
* @example
|
|
237
|
+
* This example sets the ValuesSchema of a Store after it has been created.
|
|
238
|
+
*
|
|
239
|
+
* ```js
|
|
240
|
+
* const store = createStore().setValuesSchema({
|
|
241
|
+
* open: {type: 'boolean', default: false},
|
|
242
|
+
* });
|
|
243
|
+
* store.setValue('open', 'maybe');
|
|
244
|
+
*
|
|
245
|
+
* console.log(store.getValues());
|
|
246
|
+
* // -> {open: false}
|
|
247
|
+
* ```
|
|
248
|
+
* @category Setter
|
|
249
|
+
* @since v3.0.0
|
|
250
|
+
*/
|
|
251
|
+
setValuesSchema<VS extends ValuesSchema>(
|
|
252
|
+
valuesSchema: VS,
|
|
253
|
+
): MergeableStore<[Schemas[0], typeof valuesSchema]>;
|
|
254
|
+
|
|
255
|
+
/**
|
|
256
|
+
* The setSchema method lets you specify the TablesSchema and ValuesSchema of
|
|
257
|
+
* the Store.
|
|
258
|
+
*
|
|
259
|
+
* Note that this may result in a change to data in the Store, as defaults are
|
|
260
|
+
* applied or as invalid Table, Row, Cell, or Value objects are removed. These
|
|
261
|
+
* changes will fire any listeners to that data, as expected.
|
|
262
|
+
*
|
|
263
|
+
* From v3.0 onwards, this method takes two arguments. The first is the
|
|
264
|
+
* TablesSchema object, the second the ValuesSchema. In previous versions
|
|
265
|
+
* (before the existence of the ValuesSchema data structure), only the first
|
|
266
|
+
* was present. For backwards compatibility the new second parameter is
|
|
267
|
+
* optional.
|
|
268
|
+
* @param tablesSchema The TablesSchema to be set for the Store.
|
|
269
|
+
* @param valuesSchema The ValuesSchema to be set for the Store.
|
|
270
|
+
* @returns A reference to the Store.
|
|
271
|
+
* @example
|
|
272
|
+
* This example sets the TablesSchema and ValuesSchema of a Store after it has
|
|
273
|
+
* been created.
|
|
274
|
+
*
|
|
275
|
+
* ```js
|
|
276
|
+
* const store = createStore().setSchema(
|
|
277
|
+
* {
|
|
278
|
+
* pets: {
|
|
279
|
+
* species: {type: 'string'},
|
|
280
|
+
* sold: {type: 'boolean', default: false},
|
|
281
|
+
* },
|
|
282
|
+
* },
|
|
283
|
+
* {open: {type: 'boolean', default: false}},
|
|
284
|
+
* );
|
|
285
|
+
* store.addRow('pets', {species: 'dog', color: 'brown', sold: 'maybe'});
|
|
286
|
+
* store.setValue('open', 'maybe');
|
|
287
|
+
*
|
|
288
|
+
* console.log(store.getTables());
|
|
289
|
+
* // -> {pets: {0: {species: 'dog', sold: false}}}
|
|
290
|
+
* console.log(store.getValues());
|
|
291
|
+
* // -> {open: false}
|
|
292
|
+
* ```
|
|
293
|
+
* @example
|
|
294
|
+
* This example sets just the TablesSchema of a Store after it has been
|
|
295
|
+
* created.
|
|
296
|
+
*
|
|
297
|
+
* ```js
|
|
298
|
+
* const store = createStore().setSchema({
|
|
299
|
+
* pets: {
|
|
300
|
+
* species: {type: 'string'},
|
|
301
|
+
* sold: {type: 'boolean', default: false},
|
|
302
|
+
* },
|
|
303
|
+
* });
|
|
304
|
+
* store.addRow('pets', {species: 'dog', color: 'brown', sold: 'maybe'});
|
|
305
|
+
*
|
|
306
|
+
* console.log(store.getTables());
|
|
307
|
+
* // -> {pets: {0: {species: 'dog', sold: false}}}
|
|
308
|
+
* ```
|
|
309
|
+
* @category Setter
|
|
310
|
+
*/
|
|
311
|
+
setSchema<TS extends TablesSchema, VS extends ValuesSchema>(
|
|
312
|
+
tablesSchema: TS,
|
|
313
|
+
valuesSchema?: VS,
|
|
314
|
+
): MergeableStore<
|
|
315
|
+
[
|
|
316
|
+
typeof tablesSchema,
|
|
317
|
+
Exclude<ValuesSchema, typeof valuesSchema> extends never
|
|
318
|
+
? NoValuesSchema
|
|
319
|
+
: NonNullable<typeof valuesSchema>,
|
|
320
|
+
]
|
|
321
|
+
>;
|
|
322
|
+
|
|
323
|
+
/**
|
|
324
|
+
* The delTablesSchema method lets you remove the TablesSchema of the Store.
|
|
325
|
+
* @returns A reference to the Store.
|
|
326
|
+
* @example
|
|
327
|
+
* This example removes the TablesSchema of a Store.
|
|
328
|
+
*
|
|
329
|
+
* ```js
|
|
330
|
+
* const store = createStore().setTablesSchema({
|
|
331
|
+
* pets: {species: {type: 'string'}},
|
|
332
|
+
* });
|
|
333
|
+
* store.delTablesSchema();
|
|
334
|
+
* console.log(store.getTablesSchemaJson());
|
|
335
|
+
* // -> '{}'
|
|
336
|
+
* ```
|
|
337
|
+
* @category Deleter
|
|
338
|
+
*/
|
|
339
|
+
delTablesSchema<
|
|
340
|
+
ValuesSchema extends OptionalValuesSchema = Schemas[1],
|
|
341
|
+
>(): MergeableStore<[NoTablesSchema, ValuesSchema]>;
|
|
342
|
+
|
|
343
|
+
/**
|
|
344
|
+
* The delValuesSchema method lets you remove the ValuesSchema of the Store.
|
|
345
|
+
* @returns A reference to the Store.
|
|
346
|
+
* @example
|
|
347
|
+
* This example removes the ValuesSchema of a Store.
|
|
348
|
+
*
|
|
349
|
+
* ```js
|
|
350
|
+
* const store = createStore().setValuesSchema({
|
|
351
|
+
* sold: {type: 'boolean', default: false},
|
|
352
|
+
* });
|
|
353
|
+
* store.delValuesSchema();
|
|
354
|
+
* console.log(store.getValuesSchemaJson());
|
|
355
|
+
* // -> '{}'
|
|
356
|
+
* ```
|
|
357
|
+
* @category Deleter
|
|
358
|
+
* @since v3.0.0
|
|
359
|
+
*/
|
|
360
|
+
delValuesSchema<
|
|
361
|
+
TablesSchema extends OptionalTablesSchema = Schemas[0],
|
|
362
|
+
>(): MergeableStore<[TablesSchema, NoValuesSchema]>;
|
|
363
|
+
|
|
364
|
+
/**
|
|
365
|
+
* The delSchema method lets you remove both the TablesSchema and ValuesSchema
|
|
366
|
+
* of the Store.
|
|
367
|
+
*
|
|
368
|
+
* Prior to v3.0, this method removed the TablesSchema only.
|
|
369
|
+
* @returns A reference to the Store.
|
|
370
|
+
* @example
|
|
371
|
+
* This example removes the TablesSchema and ValuesSchema of a Store.
|
|
372
|
+
*
|
|
373
|
+
* ```js
|
|
374
|
+
* const store = createStore()
|
|
375
|
+
* .setTablesSchema({
|
|
376
|
+
* pets: {species: {type: 'string'}},
|
|
377
|
+
* })
|
|
378
|
+
* .setValuesSchema({
|
|
379
|
+
* sold: {type: 'boolean', default: false},
|
|
380
|
+
* });
|
|
381
|
+
* store.delSchema();
|
|
382
|
+
* console.log(store.getSchemaJson());
|
|
383
|
+
* // -> '[{},{}]'
|
|
384
|
+
* ```
|
|
385
|
+
* @category Deleter
|
|
386
|
+
* @since v3.0.0
|
|
387
|
+
*/
|
|
388
|
+
delSchema(): MergeableStore<NoSchemas>;
|
|
106
389
|
}
|
|
107
390
|
|
|
108
391
|
/**
|
|
@@ -27,7 +27,7 @@ import {Persister} from '../persisters';
|
|
|
27
27
|
* @since v4.3.14
|
|
28
28
|
*/
|
|
29
29
|
export interface SessionPersister<Schemas extends OptionalSchemas>
|
|
30
|
-
extends Persister<Schemas> {
|
|
30
|
+
extends Persister<Schemas, true> {
|
|
31
31
|
/**
|
|
32
32
|
* The getStorageName method returns the unique key of the storage location
|
|
33
33
|
* the Store is being persisted to.
|
|
@@ -60,7 +60,7 @@ export interface SessionPersister<Schemas extends OptionalSchemas>
|
|
|
60
60
|
* @since v4.3.14
|
|
61
61
|
*/
|
|
62
62
|
export interface LocalPersister<Schemas extends OptionalSchemas>
|
|
63
|
-
extends Persister<Schemas> {
|
|
63
|
+
extends Persister<Schemas, true> {
|
|
64
64
|
/**
|
|
65
65
|
* The getStorageName method returns the unique key of the storage location
|
|
66
66
|
* the Store is being persisted to.
|
|
@@ -18,7 +18,7 @@ import {Persister} from '../persisters';
|
|
|
18
18
|
* @since v4.3.14
|
|
19
19
|
*/
|
|
20
20
|
export interface FilePersister<Schemas extends OptionalSchemas>
|
|
21
|
-
extends Persister<Schemas> {
|
|
21
|
+
extends Persister<Schemas, true> {
|
|
22
22
|
/**
|
|
23
23
|
* The getFilePath method returns the location of the local file the Store is
|
|
24
24
|
* being persisted to.
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The persister-libsql module of the TinyBase project lets you save and load
|
|
3
|
+
* Store data to and from a local LibSQL database (in an appropriate
|
|
4
|
+
* environment).
|
|
5
|
+
* @see Persisting Data guide
|
|
6
|
+
* @packageDocumentation
|
|
7
|
+
* @module persister-libsql
|
|
8
|
+
* @since v4.7.0
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import {DatabasePersisterConfig, Persister} from '../persisters';
|
|
12
|
+
import {OptionalSchemas, Store} from '../store';
|
|
13
|
+
import {Client} from '@libsql/client';
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* The LibSqlPersister interface is a minor extension to the Persister
|
|
17
|
+
* interface.
|
|
18
|
+
*
|
|
19
|
+
* It simply provides an extra getClient method for accessing a reference to the
|
|
20
|
+
* database client the Store is being persisted to.
|
|
21
|
+
* @since v4.7.0
|
|
22
|
+
*/
|
|
23
|
+
export interface LibSqlPersister<Schemas extends OptionalSchemas>
|
|
24
|
+
extends Persister<Schemas> {
|
|
25
|
+
/**
|
|
26
|
+
* The getClient method returns a reference to the database client the Store
|
|
27
|
+
* is being persisted to.
|
|
28
|
+
* @returns A reference to the database client.
|
|
29
|
+
* @example
|
|
30
|
+
* This example creates a Persister object against a newly-created Store and
|
|
31
|
+
* then gets the database client back out again.
|
|
32
|
+
*
|
|
33
|
+
* ```js yolo
|
|
34
|
+
* const client = createClient({url: 'file:my.db'});
|
|
35
|
+
* const store = createStore().setTables({pets: {fido: {species: 'dog'}}});
|
|
36
|
+
* const persister = createLibSqlPersister(store, client, 'my_tinybase');
|
|
37
|
+
*
|
|
38
|
+
* console.log(persister.getClient() == client);
|
|
39
|
+
* // -> true
|
|
40
|
+
*
|
|
41
|
+
* persister.destroy();
|
|
42
|
+
* ```
|
|
43
|
+
* @category Getter
|
|
44
|
+
* @since v4.7.0
|
|
45
|
+
*/
|
|
46
|
+
getClient: () => Client;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* The createLibSqlPersister function creates a Persister object that can
|
|
51
|
+
* persist the Store to a local LibSQL database (in an appropriate environment).
|
|
52
|
+
*
|
|
53
|
+
* This has schema-based typing. The following is a simplified representation:
|
|
54
|
+
*
|
|
55
|
+
* ```ts override
|
|
56
|
+
* createLibSqlPersister(
|
|
57
|
+
* store: Store,
|
|
58
|
+
* client: Client,
|
|
59
|
+
* configOrStoreTableName?: DatabasePersisterConfig | string,
|
|
60
|
+
* onSqlCommand?: (sql: string, args?: any[]) => void,
|
|
61
|
+
* onIgnoredError?: (error: any) => void,
|
|
62
|
+
* ): LibSqlPersister;
|
|
63
|
+
* ```
|
|
64
|
+
*
|
|
65
|
+
* As well as providing a reference to the Store to persist, you must provide a
|
|
66
|
+
* `client` parameter which identifies the database client.
|
|
67
|
+
*
|
|
68
|
+
* A database Persister uses one of two modes: either a JSON serialization of
|
|
69
|
+
* the whole Store stored in a single row of a table (the default), or a tabular
|
|
70
|
+
* mapping of Table Ids to database table names and vice-versa).
|
|
71
|
+
*
|
|
72
|
+
* The third argument is a DatabasePersisterConfig object that configures which
|
|
73
|
+
* of those modes to use, and settings for each. If the third argument is simply
|
|
74
|
+
* a string, it is used as the `storeTableName` property of the JSON
|
|
75
|
+
* serialization.
|
|
76
|
+
*
|
|
77
|
+
* See the documentation for the DpcJson and DpcTabular types for more
|
|
78
|
+
* information on how both of those modes can be configured.
|
|
79
|
+
* @param store The Store to persist.
|
|
80
|
+
* @param db The database client that was returned from `createClient(...)`.
|
|
81
|
+
* @param configOrStoreTableName A DatabasePersisterConfig to configure the
|
|
82
|
+
* persistence mode (or a string to set the `storeTableName` property of the
|
|
83
|
+
* JSON serialization).
|
|
84
|
+
* @param onSqlCommand An optional handler called every time the Persister
|
|
85
|
+
* executes a SQL command or query. This is suitable for logging persistence
|
|
86
|
+
* behavior in a development environment.
|
|
87
|
+
* @param onIgnoredError An optional handler for the errors that the Persister
|
|
88
|
+
* would otherwise ignore when trying to save or load data. This is suitable for
|
|
89
|
+
* debugging persistence issues in a development environment.
|
|
90
|
+
* @returns A reference to the new LibSqlPersister object.
|
|
91
|
+
* @example
|
|
92
|
+
* This example creates a LibSqlPersister object and persists the Store to a
|
|
93
|
+
* local SQLite database as a JSON serialization into the `my_tinybase` table.
|
|
94
|
+
* It makes a change to the database directly and then reloads it back into the
|
|
95
|
+
* Store.
|
|
96
|
+
*
|
|
97
|
+
* ```js yolo
|
|
98
|
+
* const client = createClient({url: 'file:my.db'});
|
|
99
|
+
* const store = createStore().setTables({pets: {fido: {species: 'dog'}}});
|
|
100
|
+
* const persister = createLibSqlPersister(store, client, 'my_tinybase');
|
|
101
|
+
*
|
|
102
|
+
* await persister.save();
|
|
103
|
+
* // Store will be saved to the database.
|
|
104
|
+
*
|
|
105
|
+
* console.log((await client.execute('SELECT * FROM my_tinybase;')).rows);
|
|
106
|
+
* // -> [{_id: '_', store: '[{"pets":{"fido":{"species":"dog"}}},{}]'}]
|
|
107
|
+
*
|
|
108
|
+
* await client.execute(
|
|
109
|
+
* 'UPDATE my_tinybase SET store = ' +
|
|
110
|
+
* `'[{"pets":{"felix":{"species":"cat"}}},{}]' WHERE _id = '_';`,
|
|
111
|
+
* );
|
|
112
|
+
* await persister.load();
|
|
113
|
+
* console.log(store.getTables());
|
|
114
|
+
* // -> {pets: {felix: {species: 'cat'}}}
|
|
115
|
+
*
|
|
116
|
+
* persister.destroy();
|
|
117
|
+
* ```
|
|
118
|
+
* @example
|
|
119
|
+
* This example creates a LibSqlPersister object and persists the Store to a
|
|
120
|
+
* local SQLite database with tabular mapping.
|
|
121
|
+
*
|
|
122
|
+
* ```js yolo
|
|
123
|
+
* const client = createClient({url: 'file:my.db'});
|
|
124
|
+
* const store = createStore().setTables({pets: {fido: {species: 'dog'}}});
|
|
125
|
+
* const persister = createLibSqlPersister(store, client, {
|
|
126
|
+
* mode: 'tabular',
|
|
127
|
+
* tables: {load: {pets: 'pets'}, save: {pets: 'pets'}},
|
|
128
|
+
* });
|
|
129
|
+
*
|
|
130
|
+
* await persister.save();
|
|
131
|
+
* console.log((await client.execute('SELECT * FROM pets;')).rows);
|
|
132
|
+
* // -> [{_id: 'fido', species: 'dog'}]
|
|
133
|
+
*
|
|
134
|
+
* await client.execute(
|
|
135
|
+
* `INSERT INTO pets (_id, species) VALUES ('felix', 'cat')`,
|
|
136
|
+
* );
|
|
137
|
+
* await persister.load();
|
|
138
|
+
* console.log(store.getTables());
|
|
139
|
+
* // -> {pets: {fido: {species: 'dog'}, felix: {species: 'cat'}}}
|
|
140
|
+
*
|
|
141
|
+
* persister.destroy();
|
|
142
|
+
* ```
|
|
143
|
+
* @category Creation
|
|
144
|
+
* @since v4.7.0
|
|
145
|
+
*/
|
|
146
|
+
export function createLibSqlPersister<Schemas extends OptionalSchemas>(
|
|
147
|
+
store: Store<Schemas>,
|
|
148
|
+
client: Client,
|
|
149
|
+
configOrStoreTableName?: DatabasePersisterConfig<Schemas> | string,
|
|
150
|
+
onSqlCommand?: (sql: string, args?: any[]) => void,
|
|
151
|
+
onIgnoredError?: (error: any) => void,
|
|
152
|
+
): LibSqlPersister<Schemas>;
|
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
* |persister-expo-sqlite|createExpoSqlitePersister|SQLite in React Native, via [expo-sqlite](https://github.com/expo/expo/tree/main/packages/expo-sqlite)|
|
|
23
23
|
* |persister-expo-sqlite-next|createExpoSqliteNextPersister|SQLite in React Native, via [expo-sqlite/next](https://github.com/expo/expo/tree/main/packages/expo-sqlite/next)|
|
|
24
24
|
* |persister-electric-sql|createElectricSqlPersister|Electric SQL, via [electric-sql](https://github.com/electric-sql/electric)|
|
|
25
|
+
* |persister-libsql|createLibSqlPersister|LibSQL for Turso, via [libsql-client](https://github.com/tursodatabase/libsql-client-ts)|
|
|
25
26
|
* |persister-yjs|createYjsPersister|Yjs CRDTs, via [yjs](https://github.com/yjs/yjs)|
|
|
26
27
|
* |persister-automerge|createSqliteWasmPersister|Automerge CRDTs, via [automerge-repo](https://github.com/automerge/automerge-repo)|
|
|
27
28
|
*
|
|
@@ -76,10 +77,15 @@ export type PersisterStats = {
|
|
|
76
77
|
* This has schema-based typing. The following is a simplified representation:
|
|
77
78
|
*
|
|
78
79
|
* ```ts override
|
|
79
|
-
*
|
|
80
|
-
*
|
|
81
|
-
*
|
|
82
|
-
*
|
|
80
|
+
* export type PersisterListener<SupportsMergeableStore extends boolean = false> =
|
|
81
|
+
* (
|
|
82
|
+
* getContent?: () =>
|
|
83
|
+
* | Content
|
|
84
|
+
* | (SupportsMergeableStore extends true ? MergeableContent : never),
|
|
85
|
+
* getChanges?: () =>
|
|
86
|
+
* | Changes
|
|
87
|
+
* | (SupportsMergeableStore extends true ? MergeableChanges : never),
|
|
88
|
+
* ) => void;
|
|
83
89
|
* ```
|
|
84
90
|
*
|
|
85
91
|
* If the listener has the `getChanges` parameter, it will be used to make an
|
|
@@ -1153,7 +1159,7 @@ export interface Persister<
|
|
|
1153
1159
|
* ```ts override
|
|
1154
1160
|
* createCustomPersister<
|
|
1155
1161
|
* ListeningHandle,
|
|
1156
|
-
* SupportsMergeableStore extends boolean,
|
|
1162
|
+
* SupportsMergeableStore extends boolean = false,
|
|
1157
1163
|
* >(
|
|
1158
1164
|
* store: Store | (SupportsMergeableStore extends true ? MergeableStore : never),
|
|
1159
1165
|
* getPersisted: () => Promise<
|
|
@@ -1167,7 +1173,9 @@ export interface Persister<
|
|
|
1167
1173
|
* | (SupportsMergeableStore extends true ? MergeableContent : never),
|
|
1168
1174
|
* getChanges?: () => Changes,
|
|
1169
1175
|
* ) => Promise<void>,
|
|
1170
|
-
* addPersisterListener: (
|
|
1176
|
+
* addPersisterListener: (
|
|
1177
|
+
* listener: PersisterListener<SupportsMergeableStore>,
|
|
1178
|
+
* ) => ListeningHandle,
|
|
1171
1179
|
* delPersisterListener: (listeningHandle: ListeningHandle) => void,
|
|
1172
1180
|
* onIgnoredError?: (error: any) => void,
|
|
1173
1181
|
* supportsMergeableStore?: SupportsMergeableStore,
|