tinybase 4.0.0-beta.3 → 4.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/cjs/persisters/persister-automerge.cjs +1 -0
- package/lib/cjs/persisters/persister-automerge.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-browser.cjs +1 -0
- package/lib/cjs/persisters/persister-browser.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-cr-sqlite-wasm.cjs +1 -0
- package/lib/cjs/persisters/persister-cr-sqlite-wasm.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-file.cjs +1 -0
- package/lib/cjs/persisters/persister-file.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-remote.cjs +1 -0
- package/lib/cjs/persisters/persister-remote.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-sqlite-wasm.cjs +1 -0
- package/lib/cjs/persisters/persister-sqlite-wasm.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-sqlite3.cjs +1 -0
- package/lib/cjs/persisters/persister-sqlite3.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-yjs.cjs +1 -0
- 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/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.cjs +1 -1
- package/lib/cjs/ui-react.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-automerge.cjs +1 -0
- package/lib/cjs-es6/persisters/persister-automerge.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-browser.cjs +1 -0
- package/lib/cjs-es6/persisters/persister-browser.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs +1 -0
- package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-file.cjs +1 -0
- package/lib/cjs-es6/persisters/persister-file.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-remote.cjs +1 -0
- package/lib/cjs-es6/persisters/persister-remote.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs +1 -0
- package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-sqlite3.cjs +1 -0
- package/lib/cjs-es6/persisters/persister-sqlite3.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-yjs.cjs +1 -0
- 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/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.cjs +1 -1
- package/lib/cjs-es6/ui-react.cjs.gz +0 -0
- package/lib/debug/{persister-automerge.js → persisters/persister-automerge.js} +57 -30
- package/lib/debug/{persister-browser.js → persisters/persister-browser.js} +48 -19
- package/lib/debug/persisters/persister-cr-sqlite-wasm.js +665 -0
- package/lib/debug/{persister-file.js → persisters/persister-file.js} +50 -24
- package/lib/debug/{persister-remote.js → persisters/persister-remote.js} +47 -18
- package/lib/debug/persisters/persister-sqlite-wasm.js +673 -0
- package/lib/debug/persisters/persister-sqlite3.js +676 -0
- package/lib/debug/{persister-yjs.js → persisters/persister-yjs.js} +48 -19
- package/lib/debug/persisters.js +46 -17
- package/lib/debug/queries.js +1 -1
- package/lib/debug/store.js +104 -40
- package/lib/debug/tinybase.js +148 -57
- package/lib/debug/tools.js +129 -27
- package/lib/debug/ui-react.js +24 -0
- package/lib/es6/persisters/persister-automerge.js +1 -0
- package/lib/es6/persisters/persister-automerge.js.gz +0 -0
- package/lib/es6/persisters/persister-browser.js +1 -0
- package/lib/es6/persisters/persister-browser.js.gz +0 -0
- package/lib/es6/persisters/persister-cr-sqlite-wasm.js +1 -0
- package/lib/es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
- package/lib/es6/persisters/persister-file.js +1 -0
- package/lib/es6/persisters/persister-file.js.gz +0 -0
- package/lib/es6/persisters/persister-remote.js +1 -0
- package/lib/es6/persisters/persister-remote.js.gz +0 -0
- package/lib/es6/persisters/persister-sqlite-wasm.js +1 -0
- package/lib/es6/persisters/persister-sqlite-wasm.js.gz +0 -0
- package/lib/es6/persisters/persister-sqlite3.js +1 -0
- package/lib/es6/persisters/persister-sqlite3.js.gz +0 -0
- package/lib/es6/persisters/persister-yjs.js +1 -0
- 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/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.js +1 -1
- package/lib/es6/ui-react.js.gz +0 -0
- package/lib/persisters/persister-automerge.js +1 -0
- package/lib/persisters/persister-automerge.js.gz +0 -0
- package/lib/persisters/persister-browser.js +1 -0
- package/lib/persisters/persister-browser.js.gz +0 -0
- package/lib/persisters/persister-cr-sqlite-wasm.js +1 -0
- package/lib/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
- package/lib/persisters/persister-file.js +1 -0
- package/lib/persisters/persister-file.js.gz +0 -0
- package/lib/persisters/persister-remote.js +1 -0
- package/lib/persisters/persister-remote.js.gz +0 -0
- package/lib/persisters/persister-sqlite-wasm.js +1 -0
- package/lib/persisters/persister-sqlite-wasm.js.gz +0 -0
- package/lib/persisters/persister-sqlite3.js +1 -0
- package/lib/persisters/persister-sqlite3.js.gz +0 -0
- package/lib/persisters/persister-yjs.js +1 -0
- 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/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/checkpoints.d.ts +0 -27
- package/lib/types/common.d.ts +0 -9
- package/lib/types/indexes.d.ts +0 -26
- package/lib/types/metrics.d.ts +0 -23
- package/lib/types/{persister-automerge.d.ts → persisters/persister-automerge.d.ts} +4 -6
- package/lib/types/{persister-browser.d.ts → persisters/persister-browser.d.ts} +2 -5
- package/lib/types/persisters/persister-cr-sqlite-wasm.d.ts +95 -0
- package/lib/types/{persister-file.d.ts → persisters/persister-file.d.ts} +3 -5
- package/lib/types/{persister-remote.d.ts → persisters/persister-remote.d.ts} +2 -4
- package/lib/types/persisters/persister-sqlite-wasm.d.ts +102 -0
- package/lib/types/persisters/persister-sqlite3.d.ts +109 -0
- package/lib/types/{persister-yjs.d.ts → persisters/persister-yjs.d.ts} +4 -6
- package/lib/types/persisters.d.ts +517 -27
- package/lib/types/queries.d.ts +52 -127
- package/lib/types/relationships.d.ts +0 -26
- package/lib/types/store.d.ts +397 -193
- package/lib/types/tinybase.d.ts +0 -1
- package/lib/types/tools.d.ts +15 -28
- package/lib/types/ui-react.d.ts +196 -181
- package/lib/types/with-schemas/checkpoints.d.ts +5 -32
- package/lib/types/with-schemas/common.d.ts +0 -9
- package/lib/types/with-schemas/indexes.d.ts +9 -35
- package/lib/types/with-schemas/metrics.d.ts +9 -32
- package/lib/types/with-schemas/{persister-automerge.d.ts → persisters/persister-automerge.d.ts} +4 -6
- package/lib/types/with-schemas/{persister-browser.d.ts → persisters/persister-browser.d.ts} +2 -5
- package/lib/types/with-schemas/persisters/persister-cr-sqlite-wasm.d.ts +105 -0
- package/lib/types/with-schemas/{persister-file.d.ts → persisters/persister-file.d.ts} +3 -5
- package/lib/types/with-schemas/{persister-remote.d.ts → persisters/persister-remote.d.ts} +2 -4
- package/lib/types/with-schemas/persisters/persister-sqlite-wasm.d.ts +113 -0
- package/lib/types/with-schemas/persisters/persister-sqlite3.d.ts +119 -0
- package/lib/types/with-schemas/{persister-yjs.d.ts → persisters/persister-yjs.d.ts} +4 -6
- package/lib/types/with-schemas/persisters.d.ts +534 -29
- package/lib/types/with-schemas/queries.d.ts +61 -224
- package/lib/types/with-schemas/relationships.d.ts +9 -35
- package/lib/types/with-schemas/store.d.ts +544 -236
- package/lib/types/with-schemas/tinybase.d.ts +0 -1
- package/lib/types/with-schemas/tools.d.ts +19 -32
- package/lib/types/with-schemas/ui-react.d.ts +221 -186
- package/lib/ui-react.js +1 -1
- package/lib/ui-react.js.gz +0 -0
- package/lib/umd/persisters/persister-automerge.js +1 -0
- package/lib/umd/persisters/persister-automerge.js.gz +0 -0
- package/lib/umd/persisters/persister-browser.js +1 -0
- package/lib/umd/persisters/persister-browser.js.gz +0 -0
- package/lib/umd/persisters/persister-cr-sqlite-wasm.js +1 -0
- package/lib/umd/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
- package/lib/umd/persisters/persister-file.js +1 -0
- package/lib/umd/persisters/persister-file.js.gz +0 -0
- package/lib/umd/persisters/persister-remote.js +1 -0
- package/lib/umd/persisters/persister-remote.js.gz +0 -0
- package/lib/umd/persisters/persister-sqlite-wasm.js +1 -0
- package/lib/umd/persisters/persister-sqlite-wasm.js.gz +0 -0
- package/lib/umd/persisters/persister-sqlite3.js +1 -0
- package/lib/umd/persisters/persister-sqlite3.js.gz +0 -0
- package/lib/umd/persisters/persister-yjs.js +1 -0
- 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/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.js +1 -1
- package/lib/umd/ui-react.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-automerge.js +1 -0
- package/lib/umd-es6/persisters/persister-automerge.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-browser.js +1 -0
- package/lib/umd-es6/persisters/persister-browser.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js +1 -0
- package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-file.js +1 -0
- package/lib/umd-es6/persisters/persister-file.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-remote.js +1 -0
- package/lib/umd-es6/persisters/persister-remote.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-sqlite-wasm.js +1 -0
- package/lib/umd-es6/persisters/persister-sqlite-wasm.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-sqlite3.js +1 -0
- package/lib/umd-es6/persisters/persister-sqlite3.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-yjs.js +1 -0
- 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/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.js +1 -1
- package/lib/umd-es6/ui-react.js.gz +0 -0
- package/package.json +39 -22
- package/readme.md +3 -3
- package/lib/cjs/persister-automerge.cjs +0 -1
- package/lib/cjs/persister-automerge.cjs.gz +0 -0
- package/lib/cjs/persister-browser.cjs +0 -1
- package/lib/cjs/persister-browser.cjs.gz +0 -0
- package/lib/cjs/persister-file.cjs +0 -1
- package/lib/cjs/persister-file.cjs.gz +0 -0
- package/lib/cjs/persister-remote.cjs +0 -1
- package/lib/cjs/persister-remote.cjs.gz +0 -0
- package/lib/cjs/persister-yjs.cjs +0 -1
- package/lib/cjs/persister-yjs.cjs.gz +0 -0
- package/lib/cjs-es6/persister-automerge.cjs +0 -1
- package/lib/cjs-es6/persister-automerge.cjs.gz +0 -0
- package/lib/cjs-es6/persister-browser.cjs +0 -1
- package/lib/cjs-es6/persister-browser.cjs.gz +0 -0
- package/lib/cjs-es6/persister-file.cjs +0 -1
- package/lib/cjs-es6/persister-file.cjs.gz +0 -0
- package/lib/cjs-es6/persister-remote.cjs +0 -1
- package/lib/cjs-es6/persister-remote.cjs.gz +0 -0
- package/lib/cjs-es6/persister-yjs.cjs +0 -1
- package/lib/cjs-es6/persister-yjs.cjs.gz +0 -0
- package/lib/es6/persister-automerge.js +0 -1
- package/lib/es6/persister-automerge.js.gz +0 -0
- package/lib/es6/persister-browser.js +0 -1
- package/lib/es6/persister-browser.js.gz +0 -0
- package/lib/es6/persister-file.js +0 -1
- package/lib/es6/persister-file.js.gz +0 -0
- package/lib/es6/persister-remote.js +0 -1
- package/lib/es6/persister-remote.js.gz +0 -0
- package/lib/es6/persister-yjs.js +0 -1
- package/lib/es6/persister-yjs.js.gz +0 -0
- package/lib/persister-automerge.js +0 -1
- package/lib/persister-automerge.js.gz +0 -0
- package/lib/persister-browser.js +0 -1
- package/lib/persister-browser.js.gz +0 -0
- package/lib/persister-file.js +0 -1
- package/lib/persister-file.js.gz +0 -0
- package/lib/persister-remote.js +0 -1
- package/lib/persister-remote.js.gz +0 -0
- package/lib/persister-yjs.js +0 -1
- package/lib/persister-yjs.js.gz +0 -0
- package/lib/umd/persister-automerge.js +0 -1
- package/lib/umd/persister-automerge.js.gz +0 -0
- package/lib/umd/persister-browser.js +0 -1
- package/lib/umd/persister-browser.js.gz +0 -0
- package/lib/umd/persister-file.js +0 -1
- package/lib/umd/persister-file.js.gz +0 -0
- package/lib/umd/persister-remote.js +0 -1
- package/lib/umd/persister-remote.js.gz +0 -0
- package/lib/umd/persister-yjs.js +0 -1
- package/lib/umd/persister-yjs.js.gz +0 -0
- package/lib/umd-es6/persister-automerge.js +0 -1
- package/lib/umd-es6/persister-automerge.js.gz +0 -0
- package/lib/umd-es6/persister-browser.js +0 -1
- package/lib/umd-es6/persister-browser.js.gz +0 -0
- package/lib/umd-es6/persister-file.js +0 -1
- package/lib/umd-es6/persister-file.js.gz +0 -0
- package/lib/umd-es6/persister-remote.js +0 -1
- package/lib/umd-es6/persister-remote.js.gz +0 -0
- package/lib/umd-es6/persister-yjs.js +0 -1
- package/lib/umd-es6/persister-yjs.js.gz +0 -0
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The persister-sqlite-wasm module of the TinyBase project lets you save and
|
|
3
|
+
* load Store data to and from a local SQLite database (in an appropriate
|
|
4
|
+
* environment).
|
|
5
|
+
* @see Persisting Data guide
|
|
6
|
+
* @packageDocumentation
|
|
7
|
+
* @module persister-sqlite-wasm
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import {DatabasePersisterConfig, Persister} from '../persisters';
|
|
11
|
+
import {Store} from '../store';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* The createSqliteWasmPersister function creates a Persister object that can
|
|
15
|
+
* persist the Store to a local SQLite database (in an appropriate environment).
|
|
16
|
+
*
|
|
17
|
+
* As well as providing a reference to the Store to persist, you must provide
|
|
18
|
+
* `sqlite3` and `db` parameters which identify the WASM module and database
|
|
19
|
+
* instance respectively.
|
|
20
|
+
*
|
|
21
|
+
* A database Persister uses one of two modes: either a JSON serialization of
|
|
22
|
+
* the whole Store stored in a single row of a table (the default), or a tabular
|
|
23
|
+
* mapping of Table Ids to database table names and vice-versa).
|
|
24
|
+
*
|
|
25
|
+
* The fourth argument is a DatabasePersisterConfig object that configures which
|
|
26
|
+
* of those modes to use, and settings for each. If the fourth argument is
|
|
27
|
+
* simply a string, it is used as the `storeTableName` property of the JSON
|
|
28
|
+
* serialization.
|
|
29
|
+
*
|
|
30
|
+
* See the documentation for the DpcJson and DpcTabular types for more
|
|
31
|
+
* information on how both of those modes can be configured.
|
|
32
|
+
* @param store The Store to persist.
|
|
33
|
+
* @param sqlite3 The WASM module that was returned from `sqlite3InitModule`.
|
|
34
|
+
* @param db The database instance that was returned from `new
|
|
35
|
+
* sqlite3.oo1.DB(...)`.
|
|
36
|
+
* @param configOrStoreTableName A DatabasePersisterConfig to configure the
|
|
37
|
+
* persistence mode (or a string to set the `storeTableName` property of the
|
|
38
|
+
* JSON serialization).
|
|
39
|
+
* @returns A reference to the new Persister object.
|
|
40
|
+
* @example
|
|
41
|
+
* This example creates a Persister object and persists the Store to a local
|
|
42
|
+
* SQLite database as a JSON serialization into the `my_tinybase` table. It
|
|
43
|
+
* makes a change to the database directly and then reloads it back into the
|
|
44
|
+
* Store.
|
|
45
|
+
*
|
|
46
|
+
* ```js
|
|
47
|
+
* const sqlite3 = await sqlite3InitModule();
|
|
48
|
+
* const db = new sqlite3.oo1.DB(':memory:', 'c');
|
|
49
|
+
* const store = createStore().setTables({pets: {fido: {species: 'dog'}}});
|
|
50
|
+
* const persister = createSqliteWasmPersister(
|
|
51
|
+
* store,
|
|
52
|
+
* sqlite3,
|
|
53
|
+
* db,
|
|
54
|
+
* 'my_tinybase',
|
|
55
|
+
* );
|
|
56
|
+
*
|
|
57
|
+
* await persister.save();
|
|
58
|
+
* console.log(db.exec('SELECT * FROM my_tinybase;', {rowMode: 'object'}));
|
|
59
|
+
* // -> [{_id: '_', store: '[{"pets":{"fido":{"species":"dog"}}},{}]'}]
|
|
60
|
+
*
|
|
61
|
+
* db.exec(
|
|
62
|
+
* 'UPDATE my_tinybase SET store = ' +
|
|
63
|
+
* `'[{"pets":{"felix":{"species":"cat"}}},{}]' WHERE _id = '_';`,
|
|
64
|
+
* );
|
|
65
|
+
* await persister.load();
|
|
66
|
+
* console.log(store.getTables());
|
|
67
|
+
* // -> {pets: {felix: {species: 'cat'}}}
|
|
68
|
+
*
|
|
69
|
+
* persister.destroy();
|
|
70
|
+
* ```
|
|
71
|
+
* @example
|
|
72
|
+
* This example creates a Persister object and persists the Store to a local
|
|
73
|
+
* SQLite database with tabular mapping.
|
|
74
|
+
*
|
|
75
|
+
* ```js
|
|
76
|
+
* const sqlite3 = await sqlite3InitModule();
|
|
77
|
+
* const db = new sqlite3.oo1.DB(':memory:', 'c');
|
|
78
|
+
* const store = createStore().setTables({pets: {fido: {species: 'dog'}}});
|
|
79
|
+
* const persister = createSqliteWasmPersister(store, sqlite3, db, {
|
|
80
|
+
* mode: 'tabular',
|
|
81
|
+
* tables: {load: {pets: 'pets'}, save: {pets: 'pets'}},
|
|
82
|
+
* });
|
|
83
|
+
*
|
|
84
|
+
* await persister.save();
|
|
85
|
+
* console.log(db.exec('SELECT * FROM pets;', {rowMode: 'object'}));
|
|
86
|
+
* // -> [{_id: 'fido', species: 'dog'}]
|
|
87
|
+
*
|
|
88
|
+
* db.exec(`INSERT INTO pets (_id, species) VALUES ('felix', 'cat')`);
|
|
89
|
+
* await persister.load();
|
|
90
|
+
* console.log(store.getTables());
|
|
91
|
+
* // -> {pets: {fido: {species: 'dog'}, felix: {species: 'cat'}}}
|
|
92
|
+
*
|
|
93
|
+
* persister.destroy();
|
|
94
|
+
* ```
|
|
95
|
+
* @category Creation
|
|
96
|
+
*/
|
|
97
|
+
export function createSqliteWasmPersister(
|
|
98
|
+
store: Store,
|
|
99
|
+
sqlite3: any,
|
|
100
|
+
db: any,
|
|
101
|
+
configOrStoreTableName?: DatabasePersisterConfig | string,
|
|
102
|
+
): Persister;
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The persister-sqlite3 module of the TinyBase project lets you save and load
|
|
3
|
+
* Store data to and from a local SQLite database (in an appropriate
|
|
4
|
+
* environment).
|
|
5
|
+
* @see Persisting Data guide
|
|
6
|
+
* @packageDocumentation
|
|
7
|
+
* @module persister-sqlite3
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import {DatabasePersisterConfig, Persister} from '../persisters';
|
|
11
|
+
import {Database} from 'sqlite3';
|
|
12
|
+
import {Store} from '../store';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* The createSqlite3Persister function creates a Persister object that can
|
|
16
|
+
* persist the Store to a local SQLite database (in an appropriate environment).
|
|
17
|
+
*
|
|
18
|
+
* As well as providing a reference to the Store to persist, you must provide a
|
|
19
|
+
* `db` parameter which identifies the database instance.
|
|
20
|
+
*
|
|
21
|
+
* A database Persister uses one of two modes: either a JSON serialization of
|
|
22
|
+
* the whole Store stored in a single row of a table (the default), or a tabular
|
|
23
|
+
* mapping of Table Ids to database table names and vice-versa).
|
|
24
|
+
*
|
|
25
|
+
* The third argument is a DatabasePersisterConfig object that configures which
|
|
26
|
+
* of those modes to use, and settings for each. If the third argument is simply
|
|
27
|
+
* a string, it is used as the `storeTableName` property of the JSON
|
|
28
|
+
* serialization.
|
|
29
|
+
*
|
|
30
|
+
* See the documentation for the DpcJson and DpcTabular types for more
|
|
31
|
+
* information on how both of those modes can be configured.
|
|
32
|
+
* @param store The Store to persist.
|
|
33
|
+
* @param db The database instance that was returned from `new
|
|
34
|
+
* sqlite3.Database(...)`.
|
|
35
|
+
* @param configOrStoreTableName A DatabasePersisterConfig to configure the
|
|
36
|
+
* persistence mode (or a string to set the `storeTableName` property of the
|
|
37
|
+
* JSON serialization).
|
|
38
|
+
* @returns A reference to the new Persister object.
|
|
39
|
+
* @example
|
|
40
|
+
* This example creates a Persister object and persists the Store to a local
|
|
41
|
+
* SQLite database as a JSON serialization into the `my_tinybase` table. It
|
|
42
|
+
* makes a change to the database directly and then reloads it back into the
|
|
43
|
+
* Store.
|
|
44
|
+
*
|
|
45
|
+
* ```js
|
|
46
|
+
* const db = new sqlite3.Database(':memory:');
|
|
47
|
+
* const store = createStore().setTables({pets: {fido: {species: 'dog'}}});
|
|
48
|
+
* const persister = createSqlite3Persister(store, db, 'my_tinybase');
|
|
49
|
+
*
|
|
50
|
+
* await persister.save();
|
|
51
|
+
* console.log(
|
|
52
|
+
* await new Promise((resolve) =>
|
|
53
|
+
* db.all('SELECT * FROM my_tinybase;', (_, rows) => resolve(rows)),
|
|
54
|
+
* ),
|
|
55
|
+
* );
|
|
56
|
+
* // -> [{_id: '_', store: '[{"pets":{"fido":{"species":"dog"}}},{}]'}]
|
|
57
|
+
*
|
|
58
|
+
* await new Promise((resolve) =>
|
|
59
|
+
* db.all(
|
|
60
|
+
* 'UPDATE my_tinybase SET store = ' +
|
|
61
|
+
* `'[{"pets":{"felix":{"species":"cat"}}},{}]' WHERE _id = '_';`,
|
|
62
|
+
* resolve,
|
|
63
|
+
* ),
|
|
64
|
+
* );
|
|
65
|
+
* await persister.load();
|
|
66
|
+
* console.log(store.getTables());
|
|
67
|
+
* // -> {pets: {felix: {species: 'cat'}}}
|
|
68
|
+
*
|
|
69
|
+
* persister.destroy();
|
|
70
|
+
* ```
|
|
71
|
+
* @example
|
|
72
|
+
* This example creates a Persister object and persists the Store to a local
|
|
73
|
+
* SQLite database with tabular mapping.
|
|
74
|
+
*
|
|
75
|
+
* ```js
|
|
76
|
+
* const db = new sqlite3.Database(':memory:');
|
|
77
|
+
* const store = createStore().setTables({pets: {fido: {species: 'dog'}}});
|
|
78
|
+
* const persister = createSqlite3Persister(store, db, {
|
|
79
|
+
* mode: 'tabular',
|
|
80
|
+
* tables: {load: {pets: 'pets'}, save: {pets: 'pets'}},
|
|
81
|
+
* });
|
|
82
|
+
*
|
|
83
|
+
* await persister.save();
|
|
84
|
+
* console.log(
|
|
85
|
+
* await new Promise((resolve) =>
|
|
86
|
+
* db.all('SELECT * FROM pets;', (_, rows) => resolve(rows)),
|
|
87
|
+
* ),
|
|
88
|
+
* );
|
|
89
|
+
* // -> [{_id: 'fido', species: 'dog'}]
|
|
90
|
+
*
|
|
91
|
+
* await new Promise((resolve) =>
|
|
92
|
+
* db.all(
|
|
93
|
+
* `INSERT INTO pets (_id, species) VALUES ('felix', 'cat')`,
|
|
94
|
+
* resolve,
|
|
95
|
+
* ),
|
|
96
|
+
* );
|
|
97
|
+
* await persister.load();
|
|
98
|
+
* console.log(store.getTables());
|
|
99
|
+
* // -> {pets: {fido: {species: 'dog'}, felix: {species: 'cat'}}}
|
|
100
|
+
*
|
|
101
|
+
* persister.destroy();
|
|
102
|
+
* ```
|
|
103
|
+
* @category Creation
|
|
104
|
+
*/
|
|
105
|
+
export function createSqlite3Persister(
|
|
106
|
+
store: Store,
|
|
107
|
+
db: Database,
|
|
108
|
+
configOrStoreTableName?: DatabasePersisterConfig | string,
|
|
109
|
+
): Persister;
|
|
@@ -5,15 +5,14 @@
|
|
|
5
5
|
* A single entry point, the createYjsPersister function, is provided, which
|
|
6
6
|
* returns a new Persister object that can bind a Store to a provided Yjs
|
|
7
7
|
* document.
|
|
8
|
-
*
|
|
9
8
|
* @see Synchronizing Data guide
|
|
10
9
|
* @packageDocumentation
|
|
11
10
|
* @module persister-yjs
|
|
12
|
-
* @since v4.0
|
|
11
|
+
* @since v4.0.0
|
|
13
12
|
*/
|
|
14
13
|
|
|
15
|
-
import {Persister} from '
|
|
16
|
-
import {Store} from '
|
|
14
|
+
import {Persister} from '../persisters.d';
|
|
15
|
+
import {Store} from '../store.d';
|
|
17
16
|
import {Doc as YDoc} from 'yjs';
|
|
18
17
|
|
|
19
18
|
/**
|
|
@@ -22,7 +21,6 @@ import {Doc as YDoc} from 'yjs';
|
|
|
22
21
|
*
|
|
23
22
|
* As well as providing a reference to the Store to persist, you must provide
|
|
24
23
|
* the Yjs document to persist it to.
|
|
25
|
-
*
|
|
26
24
|
* @param store The Store to persist.
|
|
27
25
|
* @param yDoc The Yjs document to persist the Store to.
|
|
28
26
|
* @param yMapName The name of the Y.Map used inside the Yjs document to sync
|
|
@@ -98,7 +96,7 @@ import {Doc as YDoc} from 'yjs';
|
|
|
98
96
|
* persister2.destroy();
|
|
99
97
|
* ```
|
|
100
98
|
* @category Creation
|
|
101
|
-
* @since v4.0
|
|
99
|
+
* @since v4.0.0
|
|
102
100
|
*/
|
|
103
101
|
export function createYjsPersister(
|
|
104
102
|
store: Store,
|