tinybase 6.2.1 → 6.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/@types/mergeable-store/index.d.ts +1 -0
- package/@types/mergeable-store/with-schemas/index.d.ts +1 -0
- package/@types/omni/index.d.ts +1 -0
- package/@types/omni/with-schemas/index.d.ts +1 -0
- package/@types/persisters/index.d.ts +5 -2
- package/@types/persisters/persister-browser/index.d.ts +2 -0
- package/@types/persisters/persister-browser/with-schemas/index.d.ts +2 -0
- package/@types/persisters/persister-durable-object-sql-storage/index.d.ts +349 -0
- package/@types/persisters/persister-durable-object-sql-storage/with-schemas/index.d.ts +382 -0
- package/@types/persisters/persister-pglite/index.d.ts +1 -0
- package/@types/persisters/persister-pglite/with-schemas/index.d.ts +1 -0
- package/@types/persisters/persister-sqlite-wasm/index.d.ts +1 -0
- package/@types/persisters/persister-sqlite-wasm/with-schemas/index.d.ts +1 -0
- package/@types/persisters/with-schemas/index.d.ts +5 -2
- package/@types/queries/index.d.ts +1 -1
- package/@types/queries/with-schemas/index.d.ts +1 -1
- package/@types/store/index.d.ts +13 -0
- package/@types/store/with-schemas/index.d.ts +13 -0
- package/@types/synchronizers/index.d.ts +1 -0
- package/@types/synchronizers/synchronizer-ws-client/index.d.ts +1 -0
- package/@types/synchronizers/synchronizer-ws-client/with-schemas/index.d.ts +1 -0
- package/@types/synchronizers/synchronizer-ws-server-durable-object/index.d.ts +1 -0
- package/@types/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.d.ts +1 -0
- package/@types/synchronizers/with-schemas/index.d.ts +1 -0
- package/@types/ui-react/index.d.ts +5 -0
- package/@types/ui-react/with-schemas/index.d.ts +5 -0
- package/@types/ui-react-inspector/index.d.ts +1 -0
- package/@types/ui-react-inspector/with-schemas/index.d.ts +1 -0
- package/LICENSE +1 -1
- package/min/checkpoints/index.js +1 -1
- package/min/checkpoints/index.js.gz +0 -0
- package/min/checkpoints/with-schemas/index.js +1 -1
- package/min/checkpoints/with-schemas/index.js.gz +0 -0
- package/min/common/index.js +1 -1
- package/min/common/index.js.gz +0 -0
- package/min/common/with-schemas/index.js +1 -1
- package/min/common/with-schemas/index.js.gz +0 -0
- package/min/index.js +1 -1
- package/min/index.js.gz +0 -0
- package/min/indexes/index.js +1 -1
- package/min/indexes/index.js.gz +0 -0
- package/min/indexes/with-schemas/index.js +1 -1
- package/min/indexes/with-schemas/index.js.gz +0 -0
- package/min/mergeable-store/index.js +1 -1
- package/min/mergeable-store/index.js.gz +0 -0
- package/min/mergeable-store/with-schemas/index.js +1 -1
- package/min/mergeable-store/with-schemas/index.js.gz +0 -0
- package/min/metrics/index.js +1 -1
- package/min/metrics/index.js.gz +0 -0
- package/min/metrics/with-schemas/index.js +1 -1
- package/min/metrics/with-schemas/index.js.gz +0 -0
- package/min/omni/index.js +1 -1
- package/min/omni/index.js.gz +0 -0
- package/min/omni/with-schemas/index.js +1 -1
- package/min/omni/with-schemas/index.js.gz +0 -0
- package/min/persisters/index.js +1 -1
- package/min/persisters/index.js.gz +0 -0
- package/min/persisters/persister-automerge/index.js +1 -1
- package/min/persisters/persister-automerge/index.js.gz +0 -0
- package/min/persisters/persister-automerge/with-schemas/index.js +1 -1
- package/min/persisters/persister-automerge/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-browser/index.js +1 -1
- package/min/persisters/persister-browser/index.js.gz +0 -0
- package/min/persisters/persister-browser/with-schemas/index.js +1 -1
- package/min/persisters/persister-browser/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-cr-sqlite-wasm/index.js +1 -1
- package/min/persisters/persister-cr-sqlite-wasm/index.js.gz +0 -0
- package/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +1 -1
- package/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-durable-object-sql-storage/index.js +1 -0
- package/min/persisters/persister-durable-object-sql-storage/index.js.gz +0 -0
- package/min/persisters/persister-durable-object-sql-storage/with-schemas/index.js +1 -0
- package/min/persisters/persister-durable-object-sql-storage/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-durable-object-storage/index.js +1 -1
- package/min/persisters/persister-durable-object-storage/index.js.gz +0 -0
- package/min/persisters/persister-durable-object-storage/with-schemas/index.js +1 -1
- package/min/persisters/persister-durable-object-storage/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-electric-sql/index.js +1 -1
- package/min/persisters/persister-electric-sql/index.js.gz +0 -0
- package/min/persisters/persister-electric-sql/with-schemas/index.js +1 -1
- package/min/persisters/persister-electric-sql/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-expo-sqlite/index.js +1 -1
- package/min/persisters/persister-expo-sqlite/index.js.gz +0 -0
- package/min/persisters/persister-expo-sqlite/with-schemas/index.js +1 -1
- package/min/persisters/persister-expo-sqlite/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-file/index.js +1 -1
- package/min/persisters/persister-file/index.js.gz +0 -0
- package/min/persisters/persister-file/with-schemas/index.js +1 -1
- package/min/persisters/persister-file/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-indexed-db/index.js +1 -1
- package/min/persisters/persister-indexed-db/index.js.gz +0 -0
- package/min/persisters/persister-indexed-db/with-schemas/index.js +1 -1
- package/min/persisters/persister-indexed-db/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-libsql/index.js +1 -1
- package/min/persisters/persister-libsql/index.js.gz +0 -0
- package/min/persisters/persister-libsql/with-schemas/index.js +1 -1
- package/min/persisters/persister-libsql/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-partykit-client/index.js +1 -1
- package/min/persisters/persister-partykit-client/index.js.gz +0 -0
- package/min/persisters/persister-partykit-client/with-schemas/index.js +1 -1
- package/min/persisters/persister-partykit-client/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-partykit-server/index.js +1 -1
- package/min/persisters/persister-partykit-server/index.js.gz +0 -0
- package/min/persisters/persister-partykit-server/with-schemas/index.js +1 -1
- package/min/persisters/persister-partykit-server/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-pglite/index.js +1 -1
- package/min/persisters/persister-pglite/index.js.gz +0 -0
- package/min/persisters/persister-pglite/with-schemas/index.js +1 -1
- package/min/persisters/persister-pglite/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-postgres/index.js +1 -1
- package/min/persisters/persister-postgres/index.js.gz +0 -0
- package/min/persisters/persister-postgres/with-schemas/index.js +1 -1
- package/min/persisters/persister-postgres/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-powersync/index.js +1 -1
- package/min/persisters/persister-powersync/index.js.gz +0 -0
- package/min/persisters/persister-powersync/with-schemas/index.js +1 -1
- package/min/persisters/persister-powersync/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-remote/index.js +1 -1
- package/min/persisters/persister-remote/index.js.gz +0 -0
- package/min/persisters/persister-remote/with-schemas/index.js +1 -1
- package/min/persisters/persister-remote/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-sqlite-bun/index.js +1 -1
- package/min/persisters/persister-sqlite-bun/index.js.gz +0 -0
- package/min/persisters/persister-sqlite-bun/with-schemas/index.js +1 -1
- package/min/persisters/persister-sqlite-bun/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-sqlite-wasm/index.js +1 -1
- package/min/persisters/persister-sqlite-wasm/index.js.gz +0 -0
- package/min/persisters/persister-sqlite-wasm/with-schemas/index.js +1 -1
- package/min/persisters/persister-sqlite-wasm/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-sqlite3/index.js +1 -1
- package/min/persisters/persister-sqlite3/index.js.gz +0 -0
- package/min/persisters/persister-sqlite3/with-schemas/index.js +1 -1
- package/min/persisters/persister-sqlite3/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-yjs/index.js +1 -1
- package/min/persisters/persister-yjs/index.js.gz +0 -0
- package/min/persisters/persister-yjs/with-schemas/index.js +1 -1
- package/min/persisters/persister-yjs/with-schemas/index.js.gz +0 -0
- package/min/persisters/with-schemas/index.js +1 -1
- package/min/persisters/with-schemas/index.js.gz +0 -0
- package/min/queries/index.js +1 -1
- package/min/queries/index.js.gz +0 -0
- package/min/queries/with-schemas/index.js +1 -1
- package/min/queries/with-schemas/index.js.gz +0 -0
- package/min/relationships/index.js +1 -1
- package/min/relationships/index.js.gz +0 -0
- package/min/relationships/with-schemas/index.js +1 -1
- package/min/relationships/with-schemas/index.js.gz +0 -0
- package/min/store/index.js +1 -1
- package/min/store/index.js.gz +0 -0
- package/min/store/with-schemas/index.js +1 -1
- package/min/store/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/index.js +1 -1
- package/min/synchronizers/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-broadcast-channel/index.js +1 -1
- package/min/synchronizers/synchronizer-broadcast-channel/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +1 -1
- package/min/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-local/index.js +1 -1
- package/min/synchronizers/synchronizer-local/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-local/with-schemas/index.js +1 -1
- package/min/synchronizers/synchronizer-local/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-client/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-client/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-client/with-schemas/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-client/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-server/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-server/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-server/with-schemas/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-server/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-server-durable-object/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-server-durable-object/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-server-simple/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-server-simple/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-server-simple/with-schemas/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-server-simple/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/with-schemas/index.js +1 -1
- package/min/synchronizers/with-schemas/index.js.gz +0 -0
- package/min/ui-react/index.js +1 -1
- package/min/ui-react/index.js.gz +0 -0
- package/min/ui-react/with-schemas/index.js +1 -1
- package/min/ui-react/with-schemas/index.js.gz +0 -0
- package/min/ui-react-dom/index.js +1 -1
- package/min/ui-react-dom/index.js.gz +0 -0
- package/min/ui-react-dom/with-schemas/index.js +1 -1
- package/min/ui-react-dom/with-schemas/index.js.gz +0 -0
- package/min/ui-react-inspector/index.js +1 -1
- package/min/ui-react-inspector/index.js.gz +0 -0
- package/min/ui-react-inspector/with-schemas/index.js +1 -1
- package/min/ui-react-inspector/with-schemas/index.js.gz +0 -0
- package/min/with-schemas/index.js +1 -1
- package/min/with-schemas/index.js.gz +0 -0
- package/omni/index.js +4 -1
- package/omni/with-schemas/index.js +4 -1
- package/package.json +44 -8
- package/persisters/persister-browser/index.js +4 -1
- package/persisters/persister-browser/with-schemas/index.js +4 -1
- package/persisters/persister-durable-object-sql-storage/index.js +1391 -0
- package/persisters/persister-durable-object-sql-storage/with-schemas/index.js +1391 -0
- package/readme.md +8 -8
- package/releases.md +50 -25
- package/ui-react-inspector/index.js +4 -1
- package/ui-react-inspector/with-schemas/index.js +4 -1
|
@@ -0,0 +1,382 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The persister-durable-object-sql-storage module of the TinyBase project lets
|
|
3
|
+
* you save and load Store data to and from Cloudflare Durable Object SQLite
|
|
4
|
+
* storage (in an appropriate environment).
|
|
5
|
+
*
|
|
6
|
+
* Cloudflare's SQLite storage backend for Durable Objects offers significantly
|
|
7
|
+
* better pricing compared to the key-value storage backend. The SQLite storage
|
|
8
|
+
* backend is Cloudflare's recommended storage option for new Durable Object
|
|
9
|
+
* namespaces.
|
|
10
|
+
*
|
|
11
|
+
* **Important:** Before using this persister, you must configure your Durable
|
|
12
|
+
* Object class to use SQLite storage by adding a migration to your
|
|
13
|
+
* `wrangler.toml` or `wrangler.json` configuration file. Use
|
|
14
|
+
* `new_sqlite_classes` in your migration configuration to enable SQLite storage
|
|
15
|
+
* for your Durable Object class.
|
|
16
|
+
*
|
|
17
|
+
* See [Cloudflare's
|
|
18
|
+
* documentation](https://developers.cloudflare.com/durable-objects/reference/durable-objects-migrations/)
|
|
19
|
+
* for more details.
|
|
20
|
+
* @see Cloudflare Durable Objects guide
|
|
21
|
+
* @see Persistence guides
|
|
22
|
+
* @packageDocumentation
|
|
23
|
+
* @module persister-durable-object-sql-storage
|
|
24
|
+
* @since v6.3.0
|
|
25
|
+
*/
|
|
26
|
+
import type {MergeableStore} from '../../../mergeable-store/with-schemas/index.d.ts';
|
|
27
|
+
import type {
|
|
28
|
+
OptionalSchemas,
|
|
29
|
+
Store,
|
|
30
|
+
} from '../../../store/with-schemas/index.d.ts';
|
|
31
|
+
import type {
|
|
32
|
+
DatabasePersisterConfig,
|
|
33
|
+
Persister,
|
|
34
|
+
Persists,
|
|
35
|
+
} from '../../with-schemas/index.d.ts';
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* The DpcFragmented type represents the configuration for fragmented
|
|
39
|
+
* persistence mode in a DurableObjectSqlStoragePersister.
|
|
40
|
+
*
|
|
41
|
+
* This mode stores each table, row, cell, and value as separate database rows,
|
|
42
|
+
* avoiding Cloudflare's 2MB row limit that can be hit with large stores in JSON
|
|
43
|
+
* mode. While this creates more database writes, it provides better scalability
|
|
44
|
+
* for larger datasets.
|
|
45
|
+
* @example
|
|
46
|
+
* This example shows how to configure a DurableObjectSqlStoragePersister to use
|
|
47
|
+
* fragmented mode with a custom storage prefix.
|
|
48
|
+
*
|
|
49
|
+
* ```js yolo
|
|
50
|
+
* import {createMergeableStore} from 'tinybase';
|
|
51
|
+
* import {createDurableObjectSqlStoragePersister} from 'tinybase/persisters/persister-durable-object-sql-storage';
|
|
52
|
+
* import {WsServerDurableObject} from 'tinybase/synchronizers/synchronizer-ws-server-durable-object';
|
|
53
|
+
*
|
|
54
|
+
* const config = {
|
|
55
|
+
* mode: 'fragmented',
|
|
56
|
+
* storagePrefix: 'my_app_',
|
|
57
|
+
* };
|
|
58
|
+
*
|
|
59
|
+
* export class MyDurableObject extends WsServerDurableObject {
|
|
60
|
+
* createPersister() {
|
|
61
|
+
* const store = createMergeableStore();
|
|
62
|
+
* const persister = createDurableObjectSqlStoragePersister(
|
|
63
|
+
* store,
|
|
64
|
+
* this.ctx.storage.sql,
|
|
65
|
+
* config,
|
|
66
|
+
* );
|
|
67
|
+
* return persister;
|
|
68
|
+
* }
|
|
69
|
+
* }
|
|
70
|
+
* ```
|
|
71
|
+
* @category Configuration
|
|
72
|
+
* @since v6.3.0
|
|
73
|
+
*/
|
|
74
|
+
export type DpcFragmented = {
|
|
75
|
+
/**
|
|
76
|
+
* The mode property must be set to 'fragmented' to enable fragmented
|
|
77
|
+
* persistence mode.
|
|
78
|
+
* @category Configuration
|
|
79
|
+
* @since v6.3.0
|
|
80
|
+
*/
|
|
81
|
+
mode: 'fragmented';
|
|
82
|
+
/**
|
|
83
|
+
* The storagePrefix property lets you specify an optional prefix for the
|
|
84
|
+
* database table names used in fragmented mode.
|
|
85
|
+
*
|
|
86
|
+
* This is useful when you have multiple stores or applications sharing the
|
|
87
|
+
* same Durable Object SQL storage and want to avoid table name conflicts.
|
|
88
|
+
*
|
|
89
|
+
* The prefix will be sanitized to only include alphanumeric characters and
|
|
90
|
+
* underscores. For example, a prefix of 'my-app!' becomes 'my_app_'.
|
|
91
|
+
* @example
|
|
92
|
+
* This example shows a configuration using the storagePrefix setting. With a
|
|
93
|
+
* `storagePrefix` of 'user_data_', it creates `user_data_tinybase_tables` and
|
|
94
|
+
* `user_data_tinybase_values` tables.
|
|
95
|
+
* ```json
|
|
96
|
+
* {
|
|
97
|
+
* mode: 'fragmented',
|
|
98
|
+
* storagePrefix: 'user_data_',
|
|
99
|
+
* };
|
|
100
|
+
* ```
|
|
101
|
+
* @category Configuration
|
|
102
|
+
* @since v6.3.0
|
|
103
|
+
*/
|
|
104
|
+
storagePrefix?: string;
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* The DurableObjectSqlDatabasePersisterConfig type represents the union of all
|
|
109
|
+
* possible configuration types for a DurableObjectSqlStoragePersister.
|
|
110
|
+
*
|
|
111
|
+
* This has schema-based typing. The following is a simplified representation:
|
|
112
|
+
*
|
|
113
|
+
* ```ts override
|
|
114
|
+
* DpcJson | DpcFragmented;
|
|
115
|
+
* ```
|
|
116
|
+
*
|
|
117
|
+
* This allows the persister to support multiple persistence modes.
|
|
118
|
+
* - JSON mode (via DpcJson): Stores the entire Store as JSON in a single row.
|
|
119
|
+
* - Fragmented mode (via DpcFragmented): Stores each piece of data as separate
|
|
120
|
+
* rows.
|
|
121
|
+
* @example
|
|
122
|
+
* These examples show some different configuration options.
|
|
123
|
+
* ```json
|
|
124
|
+
* // JSON mode (default)
|
|
125
|
+
* {
|
|
126
|
+
* mode: 'json',
|
|
127
|
+
* storeTableName: 'my_store',
|
|
128
|
+
* };
|
|
129
|
+
*
|
|
130
|
+
* // Fragmented mode
|
|
131
|
+
* {
|
|
132
|
+
* mode: 'fragmented',
|
|
133
|
+
* storagePrefix: 'app_',
|
|
134
|
+
* };
|
|
135
|
+
* ```
|
|
136
|
+
* @category Configuration
|
|
137
|
+
* @since v6.3.0
|
|
138
|
+
*/
|
|
139
|
+
export type DurableObjectSqlDatabasePersisterConfig<
|
|
140
|
+
Schemas extends OptionalSchemas,
|
|
141
|
+
> = DatabasePersisterConfig<Schemas> | DpcFragmented;
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* The DurableObjectSqlStoragePersister interface represents a Persister that
|
|
145
|
+
* lets you save and load Store data to and from Cloudflare Durable Object SQL
|
|
146
|
+
* storage.
|
|
147
|
+
*
|
|
148
|
+
* You should use the createDurableObjectSqlStoragePersister function to create
|
|
149
|
+
* a DurableObjectSqlStoragePersister object, most likely within the
|
|
150
|
+
* createPersister method of a WsServerDurableObject.
|
|
151
|
+
*
|
|
152
|
+
* It is a minor extension to the Persister interface and simply provides an
|
|
153
|
+
* extra getSqlStorage method for accessing a reference to the SQL storage that
|
|
154
|
+
* the Store is being persisted to.
|
|
155
|
+
* @category Persister
|
|
156
|
+
* @since v6.3.0
|
|
157
|
+
*/
|
|
158
|
+
export interface DurableObjectSqlStoragePersister<
|
|
159
|
+
Schemas extends OptionalSchemas,
|
|
160
|
+
> extends Persister<Schemas, Persists.MergeableStoreOnly> {
|
|
161
|
+
/**
|
|
162
|
+
* The getSqlStorage method returns a reference to the SQL storage that the
|
|
163
|
+
* Store is being persisted to.
|
|
164
|
+
* @returns The reference to the SQL storage.
|
|
165
|
+
* @example
|
|
166
|
+
* This example creates a Persister object against a newly-created Store
|
|
167
|
+
* (within the createPersister method of a WsServerDurableObject instance) and
|
|
168
|
+
* then gets the SQL storage reference back out again.
|
|
169
|
+
*
|
|
170
|
+
* ```js yolo
|
|
171
|
+
* import {createMergeableStore} from 'tinybase';
|
|
172
|
+
* import {createDurableObjectSqlStoragePersister} from 'tinybase/persisters/persister-durable-object-sql-storage';
|
|
173
|
+
* import {WsServerDurableObject} from 'tinybase/synchronizers/synchronizer-ws-server-durable-object';
|
|
174
|
+
*
|
|
175
|
+
* export class MyDurableObject extends WsServerDurableObject {
|
|
176
|
+
* createPersister() {
|
|
177
|
+
* const store = createMergeableStore();
|
|
178
|
+
* const persister = createDurableObjectSqlStoragePersister(
|
|
179
|
+
* store,
|
|
180
|
+
* this.ctx.storage.sql,
|
|
181
|
+
* );
|
|
182
|
+
* console.log(persister.getSqlStorage() == this.ctx.storage.sql);
|
|
183
|
+
* // -> true
|
|
184
|
+
*
|
|
185
|
+
* return persister;
|
|
186
|
+
* }
|
|
187
|
+
* }
|
|
188
|
+
* ```
|
|
189
|
+
* @category Getter
|
|
190
|
+
* @since v6.3.0
|
|
191
|
+
*/
|
|
192
|
+
getSqlStorage(): SqlStorage;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* The createDurableObjectSqlStoragePersister function creates a
|
|
197
|
+
* DurableObjectSqlStoragePersister object that can persist the Store to and
|
|
198
|
+
* from Cloudflare Durable Object SQLite storage.
|
|
199
|
+
*
|
|
200
|
+
* This has schema-based typing. The following is a simplified representation:
|
|
201
|
+
*
|
|
202
|
+
* ```ts override
|
|
203
|
+
* createDurableObjectSqlStoragePersister(
|
|
204
|
+
* store: MergeableStore,
|
|
205
|
+
* sqlStorage: SqlStorage,
|
|
206
|
+
* configOrStoreTableName?: DurableObjectSqlDatabasePersisterConfig | string,
|
|
207
|
+
* onSqlCommand?: (sql: string, params?: any[]) => void,
|
|
208
|
+
* onIgnoredError?: (error: any) => void,
|
|
209
|
+
* ): DurableObjectSqlStoragePersister;
|
|
210
|
+
* ```
|
|
211
|
+
*
|
|
212
|
+
* You will mostly use this within the createPersister method of a
|
|
213
|
+
* WsServerDurableObject.
|
|
214
|
+
*
|
|
215
|
+
* This persister uses Cloudflare's SQLite storage backend, which provides
|
|
216
|
+
* better pricing and performance compared to the legacy Key-value storage
|
|
217
|
+
* backend.
|
|
218
|
+
*
|
|
219
|
+
* **Important Prerequisites:** Before using this persister, you must configure
|
|
220
|
+
* your Durable Object class to use SQLite storage by adding a migration to your
|
|
221
|
+
* Wrangler configuration file. In your `wrangler.toml`, add the following.
|
|
222
|
+
* ```toml
|
|
223
|
+
* [[migrations]]
|
|
224
|
+
* tag = "v1"
|
|
225
|
+
* new_sqlite_classes = ["YourDurableObjectClass"]
|
|
226
|
+
* ```
|
|
227
|
+
*
|
|
228
|
+
* Or in your `wrangler.json`, add:
|
|
229
|
+
*
|
|
230
|
+
* ```json
|
|
231
|
+
* {
|
|
232
|
+
* "migrations": [
|
|
233
|
+
* {
|
|
234
|
+
* "tag": "v1",
|
|
235
|
+
* "new_sqlite_classes": ["YourDurableObjectClass"]
|
|
236
|
+
* }
|
|
237
|
+
* ]
|
|
238
|
+
* }
|
|
239
|
+
* ```
|
|
240
|
+
*
|
|
241
|
+
* For more details on Durable Object migrations, see the [Cloudflare
|
|
242
|
+
* documentation](https://developers.cloudflare.com/durable-objects/reference/durable-objects-migrations/).
|
|
243
|
+
*
|
|
244
|
+
* A database Persister uses one of two modes: either a JSON serialization of
|
|
245
|
+
* the whole Store stored in a single row of a table (the default), a fragmented
|
|
246
|
+
* mode that stores each piece of data separately to avoid Cloudflare's 2MB row
|
|
247
|
+
* limit.
|
|
248
|
+
*
|
|
249
|
+
* - **JSON Mode (Default)**: Stores the entire Store as JSON in a single
|
|
250
|
+
* database row. This is efficient for smaller stores but may hit Cloudflare's
|
|
251
|
+
* 2MB row limit for very large stores and uses fewer database writes.
|
|
252
|
+
*
|
|
253
|
+
* - **Fragmented Mode**: Stores each table, row, cell, and value as separate
|
|
254
|
+
* database rows. Use this mode if you're concerned about hitting Cloudflare's
|
|
255
|
+
* 2MB row limit with large stores in JSON mode. This mode creates more
|
|
256
|
+
* database writes but avoids row size limitations.
|
|
257
|
+
*
|
|
258
|
+
* The third argument is a DatabasePersisterConfig object that configures which
|
|
259
|
+
* of those modes to use, and settings for each. If the third argument is simply
|
|
260
|
+
* a string, it is used as the `storeTableName` property of the JSON
|
|
261
|
+
* serialization. If it is the string 'fragmented', it enables fragmented mode.
|
|
262
|
+
*
|
|
263
|
+
* See the documentation for the DpcJson, DpcFragmented, and DpcTabular types
|
|
264
|
+
* for more information on how all of those modes can be configured.
|
|
265
|
+
*
|
|
266
|
+
* As well as providing a reference to the Store or MergeableStore to persist,
|
|
267
|
+
* you must provide a `sqlStorage` parameter which identifies the Durable Object
|
|
268
|
+
* SQLite storage to persist it to.
|
|
269
|
+
* @param store The Store or MergeableStore to persist.
|
|
270
|
+
* @param sqlStorage The Durable Object SQL storage to persist the Store to.
|
|
271
|
+
* @param configOrStoreTableName A DatabasePersisterConfig to configure the
|
|
272
|
+
* persistence mode (or a string to set the `storeTableName` property of the
|
|
273
|
+
* JSON serialization).
|
|
274
|
+
* @param onSqlCommand An optional handler called every time the Persister
|
|
275
|
+
* executes a SQL command or query. This is suitable for logging persistence
|
|
276
|
+
* behavior in a development environment.
|
|
277
|
+
* @param onIgnoredError An optional handler for the errors that the Persister
|
|
278
|
+
* would otherwise ignore when trying to save or load data. This is suitable for
|
|
279
|
+
* debugging persistence issues in a development environment.
|
|
280
|
+
* @returns A reference to the new DurableObjectSqlStoragePersister object.
|
|
281
|
+
* @example
|
|
282
|
+
* This example creates a DurableObjectSqlStoragePersister object and persists
|
|
283
|
+
* the Store to Durable Object SQLite storage as a JSON serialization into the
|
|
284
|
+
* default `tinybase` table. It uses this within the createPersister method of a
|
|
285
|
+
* WsServerDurableObject instance.
|
|
286
|
+
*
|
|
287
|
+
* ```js yolo
|
|
288
|
+
* import {createMergeableStore} from 'tinybase';
|
|
289
|
+
* import {createDurableObjectSqlStoragePersister} from 'tinybase/persisters/persister-durable-object-sql-storage';
|
|
290
|
+
* import {WsServerDurableObject} from 'tinybase/synchronizers/synchronizer-ws-server-durable-object';
|
|
291
|
+
*
|
|
292
|
+
* export class MyDurableObject extends WsServerDurableObject {
|
|
293
|
+
* createPersister() {
|
|
294
|
+
* const store = createMergeableStore();
|
|
295
|
+
* const persister = createDurableObjectSqlStoragePersister(
|
|
296
|
+
* store,
|
|
297
|
+
* this.ctx.storage.sql,
|
|
298
|
+
* );
|
|
299
|
+
* return persister;
|
|
300
|
+
* }
|
|
301
|
+
* }
|
|
302
|
+
* ```
|
|
303
|
+
* @example
|
|
304
|
+
* This example creates a DurableObjectSqlStoragePersister object with a custom
|
|
305
|
+
* table name and SQL command logging for debugging.
|
|
306
|
+
*
|
|
307
|
+
* ```js yolo
|
|
308
|
+
* import {createMergeableStore} from 'tinybase';
|
|
309
|
+
* import {createDurableObjectSqlStoragePersister} from 'tinybase/persisters/persister-durable-object-sql-storage';
|
|
310
|
+
* import {WsServerDurableObject} from 'tinybase/synchronizers/synchronizer-ws-server-durable-object';
|
|
311
|
+
*
|
|
312
|
+
* export class MyDurableObject extends WsServerDurableObject {
|
|
313
|
+
* createPersister() {
|
|
314
|
+
* const store = createMergeableStore();
|
|
315
|
+
* const persister = createDurableObjectSqlStoragePersister(
|
|
316
|
+
* store,
|
|
317
|
+
* this.ctx.storage.sql,
|
|
318
|
+
* 'my_app_store',
|
|
319
|
+
* (sql, params) => console.log('SQL:', sql, params),
|
|
320
|
+
* (error) => console.error('Persistence error:', error),
|
|
321
|
+
* );
|
|
322
|
+
* return persister;
|
|
323
|
+
* }
|
|
324
|
+
* }
|
|
325
|
+
* ```
|
|
326
|
+
* @example
|
|
327
|
+
* This example creates a DurableObjectSqlStoragePersister object using
|
|
328
|
+
* fragmented mode to avoid Cloudflare's 2MB row limit for large stores.
|
|
329
|
+
*
|
|
330
|
+
* ```js yolo
|
|
331
|
+
* import {createMergeableStore} from 'tinybase';
|
|
332
|
+
* import {createDurableObjectSqlStoragePersister} from 'tinybase/persisters/persister-durable-object-sql-storage';
|
|
333
|
+
* import {WsServerDurableObject} from 'tinybase/synchronizers/synchronizer-ws-server-durable-object';
|
|
334
|
+
*
|
|
335
|
+
* export class MyDurableObject extends WsServerDurableObject {
|
|
336
|
+
* createPersister() {
|
|
337
|
+
* const store = createMergeableStore();
|
|
338
|
+
* const persister = createDurableObjectSqlStoragePersister(
|
|
339
|
+
* store,
|
|
340
|
+
* this.ctx.storage.sql,
|
|
341
|
+
* {mode: 'fragmented'},
|
|
342
|
+
* );
|
|
343
|
+
* return persister;
|
|
344
|
+
* }
|
|
345
|
+
* }
|
|
346
|
+
* ```
|
|
347
|
+
* @example
|
|
348
|
+
* This example creates a DurableObjectSqlStoragePersister object using
|
|
349
|
+
* fragmented mode with a custom storage prefix.
|
|
350
|
+
*
|
|
351
|
+
* ```js yolo
|
|
352
|
+
* import {createMergeableStore} from 'tinybase';
|
|
353
|
+
* import {createDurableObjectSqlStoragePersister} from 'tinybase/persisters/persister-durable-object-sql-storage';
|
|
354
|
+
* import {WsServerDurableObject} from 'tinybase/synchronizers/synchronizer-ws-server-durable-object';
|
|
355
|
+
*
|
|
356
|
+
* export class MyDurableObject extends WsServerDurableObject {
|
|
357
|
+
* createPersister() {
|
|
358
|
+
* const store = createMergeableStore();
|
|
359
|
+
* const persister = createDurableObjectSqlStoragePersister(
|
|
360
|
+
* store,
|
|
361
|
+
* this.ctx.storage.sql,
|
|
362
|
+
* {mode: 'fragmented', storagePrefix: 'my_app_'},
|
|
363
|
+
* );
|
|
364
|
+
* return persister;
|
|
365
|
+
* }
|
|
366
|
+
* }
|
|
367
|
+
* ```
|
|
368
|
+
* @category Creation
|
|
369
|
+
* @essential Persisting stores
|
|
370
|
+
* @since v6.3.0
|
|
371
|
+
*/
|
|
372
|
+
export function createDurableObjectSqlStoragePersister<
|
|
373
|
+
Schemas extends OptionalSchemas,
|
|
374
|
+
>(
|
|
375
|
+
store: Store<Schemas> | MergeableStore<Schemas>,
|
|
376
|
+
sqlStorage: SqlStorage,
|
|
377
|
+
configOrStoreTableName?:
|
|
378
|
+
| DurableObjectSqlDatabasePersisterConfig<Schemas>
|
|
379
|
+
| string,
|
|
380
|
+
onSqlCommand?: (sql: string, params?: any[]) => void,
|
|
381
|
+
onIgnoredError?: (error: any) => void,
|
|
382
|
+
): DurableObjectSqlStoragePersister<Schemas>;
|
|
@@ -185,6 +185,7 @@ export interface PglitePersister<Schemas extends OptionalSchemas>
|
|
|
185
185
|
* await pglite.close();
|
|
186
186
|
* ```
|
|
187
187
|
* @category Creation
|
|
188
|
+
* @essential Persisting stores
|
|
188
189
|
* @since 5.2.0
|
|
189
190
|
*/
|
|
190
191
|
export function createPglitePersister<Schemas extends OptionalSchemas>(
|
|
@@ -183,6 +183,7 @@ export interface SqliteWasmPersister<Schemas extends OptionalSchemas>
|
|
|
183
183
|
* await persister.destroy();
|
|
184
184
|
* ```
|
|
185
185
|
* @category Creation
|
|
186
|
+
* @essential Persisting stores
|
|
186
187
|
* @since v4.0.0
|
|
187
188
|
*/
|
|
188
189
|
export function createSqliteWasmPersister<Schemas extends OptionalSchemas>(
|
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
* Many entry points are provided (in separately installed modules), each of
|
|
7
7
|
* which returns different types of Persister that can load and save a Store.
|
|
8
8
|
* Between them, these allow you to store your TinyBase data locally, remotely,
|
|
9
|
-
* to SQLite and PostgreSQL databases, and across
|
|
10
|
-
* with CRDT frameworks.
|
|
9
|
+
* to a Durable Object, to SQLite and PostgreSQL databases, and across
|
|
10
|
+
* synchronization boundaries with CRDT frameworks.
|
|
11
11
|
*
|
|
12
12
|
* |Persister|Storage|Store|MergeableStore
|
|
13
13
|
* |-|-|-|-|
|
|
@@ -16,6 +16,8 @@
|
|
|
16
16
|
* |FilePersister|Local file (where possible)|Yes|Yes
|
|
17
17
|
* |IndexedDbPersister|Browser IndexedDB|Yes|No
|
|
18
18
|
* |RemotePersister|Remote server|Yes|No
|
|
19
|
+
* |DurableObjectStoragePersister|Cloudflare Durable Object (KV)|No|Yes
|
|
20
|
+
* |DurableObjectSqlStoragePersister|Cloudflare Durable Object (SQLite)|No|Yes
|
|
19
21
|
* |Sqlite3Persister|SQLite in Node, via [sqlite3](https://github.com/TryGhost/node-sqlite3)|Yes|Yes*
|
|
20
22
|
* |SqliteBunPersister| SQLite in Bun, via [bun:sqlite](https://bun.sh/docs/api/sqlite)|Yes|Yes*
|
|
21
23
|
* |SqliteWasmPersister|SQLite in a browser, via [sqlite-wasm](https://github.com/tomayac/sqlite-wasm)|Yes|Yes*
|
|
@@ -1029,6 +1031,7 @@ export type DpcTabularValues = {
|
|
|
1029
1031
|
* sessionStorage.clear();
|
|
1030
1032
|
* ```
|
|
1031
1033
|
* @category Persister
|
|
1034
|
+
* @essential Persisting stores
|
|
1032
1035
|
* @since v1.0.0
|
|
1033
1036
|
*/
|
|
1034
1037
|
export interface Persister<
|
|
@@ -1331,7 +1331,7 @@ export type Where = {
|
|
|
1331
1331
|
* If you provide a Group for every Select, the result will be a single Row with
|
|
1332
1332
|
* every Cell having been aggregated. If you provide a Group for only one, or
|
|
1333
1333
|
* some, of the Select clauses, the _others_ will be automatically used as
|
|
1334
|
-
* dimensional values (analogous to the
|
|
1334
|
+
* dimensional values (analogous to the `group by` semantics in SQL), within
|
|
1335
1335
|
* which the aggregations of Group Cells will be performed.
|
|
1336
1336
|
*
|
|
1337
1337
|
* You can join the same underlying Cell multiple times, but in that case you
|
|
@@ -1518,7 +1518,7 @@ export type Where<
|
|
|
1518
1518
|
* If you provide a Group for every Select, the result will be a single Row with
|
|
1519
1519
|
* every Cell having been aggregated. If you provide a Group for only one, or
|
|
1520
1520
|
* some, of the Select clauses, the _others_ will be automatically used as
|
|
1521
|
-
* dimensional values (analogous to the
|
|
1521
|
+
* dimensional values (analogous to the `group by` semantics in SQL), within
|
|
1522
1522
|
* which the aggregations of Group Cells will be performed.
|
|
1523
1523
|
*
|
|
1524
1524
|
* You can join the same underlying Cell multiple times, but in that case you
|
package/@types/store/index.d.ts
CHANGED
|
@@ -1872,6 +1872,7 @@ export type StoreListenerStats = {
|
|
|
1872
1872
|
* @see Hello World demos
|
|
1873
1873
|
* @see Todo App demos
|
|
1874
1874
|
* @category Store
|
|
1875
|
+
* @essential Creating stores
|
|
1875
1876
|
* @since v1.0.0
|
|
1876
1877
|
*/
|
|
1877
1878
|
export interface Store {
|
|
@@ -2321,6 +2322,7 @@ export interface Store {
|
|
|
2321
2322
|
* // -> {}
|
|
2322
2323
|
* ```
|
|
2323
2324
|
* @category Getter
|
|
2325
|
+
* @essential Getting data
|
|
2324
2326
|
* @since v1.0.0
|
|
2325
2327
|
*/
|
|
2326
2328
|
getRow(tableId: Id, rowId: Id): Row;
|
|
@@ -2394,6 +2396,7 @@ export interface Store {
|
|
|
2394
2396
|
* // -> undefined
|
|
2395
2397
|
* ```
|
|
2396
2398
|
* @category Getter
|
|
2399
|
+
* @essential Getting data
|
|
2397
2400
|
* @since v1.0.0
|
|
2398
2401
|
*/
|
|
2399
2402
|
getCell(tableId: Id, rowId: Id, cellId: Id): CellOrUndefined;
|
|
@@ -2489,6 +2492,7 @@ export interface Store {
|
|
|
2489
2492
|
* // -> undefined
|
|
2490
2493
|
* ```
|
|
2491
2494
|
* @category Getter
|
|
2495
|
+
* @essential Getting data
|
|
2492
2496
|
* @since v3.0.0
|
|
2493
2497
|
*/
|
|
2494
2498
|
getValue(valueId: Id): ValueOrUndefined;
|
|
@@ -3157,6 +3161,7 @@ export interface Store {
|
|
|
3157
3161
|
* // -> {pets: {fido: {color: 'brown'}}}
|
|
3158
3162
|
* ```
|
|
3159
3163
|
* @category Setter
|
|
3164
|
+
* @essential Setting data
|
|
3160
3165
|
* @since v1.0.0
|
|
3161
3166
|
*/
|
|
3162
3167
|
setRow(tableId: Id, rowId: Id, row: Row): this;
|
|
@@ -3223,6 +3228,7 @@ export interface Store {
|
|
|
3223
3228
|
* // -> {pets: {'0': {species: 'dog'}, '1': {species: 'cat'}}}
|
|
3224
3229
|
* ```
|
|
3225
3230
|
* @category Setter
|
|
3231
|
+
* @essential Setting data
|
|
3226
3232
|
* @since v1.0.0
|
|
3227
3233
|
*/
|
|
3228
3234
|
addRow(tableId: Id, row: Row, reuseRowIds?: boolean): Id | undefined;
|
|
@@ -3343,6 +3349,7 @@ export interface Store {
|
|
|
3343
3349
|
* // -> {pets: {fido: {species: 'dog'}}}
|
|
3344
3350
|
* ```
|
|
3345
3351
|
* @category Setter
|
|
3352
|
+
* @essential Setting data
|
|
3346
3353
|
* @since v1.0.0
|
|
3347
3354
|
*/
|
|
3348
3355
|
setCell(tableId: Id, rowId: Id, cellId: Id, cell: Cell | MapCell): this;
|
|
@@ -3506,6 +3513,7 @@ export interface Store {
|
|
|
3506
3513
|
* // -> {employees: 3}
|
|
3507
3514
|
* ```
|
|
3508
3515
|
* @category Setter
|
|
3516
|
+
* @essential Setting data
|
|
3509
3517
|
* @since v3.0.0
|
|
3510
3518
|
*/
|
|
3511
3519
|
setValue(valueId: Id, value: Value | MapValue): this;
|
|
@@ -4263,6 +4271,7 @@ export interface Store {
|
|
|
4263
4271
|
* // -> {open: true}
|
|
4264
4272
|
* ```
|
|
4265
4273
|
* @category Transaction
|
|
4274
|
+
* @essential Setting data
|
|
4266
4275
|
* @since v1.0.0
|
|
4267
4276
|
*/
|
|
4268
4277
|
transaction<Return>(actions: () => Return, doRollback?: DoRollback): Return;
|
|
@@ -6025,6 +6034,7 @@ export interface Store {
|
|
|
6025
6034
|
* store.delListener(listenerId);
|
|
6026
6035
|
* ```
|
|
6027
6036
|
* @category Listener
|
|
6037
|
+
* @essential Listening for changes
|
|
6028
6038
|
* @since v1.0.0
|
|
6029
6039
|
*/
|
|
6030
6040
|
addRowListener(
|
|
@@ -6392,6 +6402,7 @@ export interface Store {
|
|
|
6392
6402
|
* store.delListener(listenerId);
|
|
6393
6403
|
* ```
|
|
6394
6404
|
* @category Listener
|
|
6405
|
+
* @essential Listening for changes
|
|
6395
6406
|
* @since v1.0.0
|
|
6396
6407
|
*/
|
|
6397
6408
|
addCellListener(
|
|
@@ -6794,6 +6805,7 @@ export interface Store {
|
|
|
6794
6805
|
* store.delListener(listenerId);
|
|
6795
6806
|
* ```
|
|
6796
6807
|
* @category Listener
|
|
6808
|
+
* @essential Listening for changes
|
|
6797
6809
|
* @since v3.0.0
|
|
6798
6810
|
*/
|
|
6799
6811
|
addValueListener(
|
|
@@ -7715,6 +7727,7 @@ export interface Store {
|
|
|
7715
7727
|
* ```
|
|
7716
7728
|
* @see The Basics guides
|
|
7717
7729
|
* @category Creation
|
|
7730
|
+
* @essential Creating stores
|
|
7718
7731
|
* @since v1.0.0
|
|
7719
7732
|
*/
|
|
7720
7733
|
export function createStore(): Store;
|
|
@@ -2843,6 +2843,7 @@ export type StoreListenerStats = {
|
|
|
2843
2843
|
* @see Hello World demos
|
|
2844
2844
|
* @see Todo App demos
|
|
2845
2845
|
* @category Store
|
|
2846
|
+
* @essential Creating stores
|
|
2846
2847
|
* @since v1.0.0
|
|
2847
2848
|
*/
|
|
2848
2849
|
export interface Store<in out Schemas extends OptionalSchemas> {
|
|
@@ -3363,6 +3364,7 @@ export interface Store<in out Schemas extends OptionalSchemas> {
|
|
|
3363
3364
|
* // -> {}
|
|
3364
3365
|
* ```
|
|
3365
3366
|
* @category Getter
|
|
3367
|
+
* @essential Getting data
|
|
3366
3368
|
* @since v1.0.0
|
|
3367
3369
|
*/
|
|
3368
3370
|
getRow<TableId extends TableIdFromSchema<Schemas[0]>>(
|
|
@@ -3454,6 +3456,7 @@ export interface Store<in out Schemas extends OptionalSchemas> {
|
|
|
3454
3456
|
* // -> undefined
|
|
3455
3457
|
* ```
|
|
3456
3458
|
* @category Getter
|
|
3459
|
+
* @essential Getting data
|
|
3457
3460
|
* @since v1.0.0
|
|
3458
3461
|
*/
|
|
3459
3462
|
getCell<
|
|
@@ -3574,6 +3577,7 @@ export interface Store<in out Schemas extends OptionalSchemas> {
|
|
|
3574
3577
|
* // -> undefined
|
|
3575
3578
|
* ```
|
|
3576
3579
|
* @category Getter
|
|
3580
|
+
* @essential Getting data
|
|
3577
3581
|
* @since v3.0.0
|
|
3578
3582
|
*/
|
|
3579
3583
|
getValue<ValueId extends ValueIdFromSchema<Schemas[1]>>(
|
|
@@ -4310,6 +4314,7 @@ export interface Store<in out Schemas extends OptionalSchemas> {
|
|
|
4310
4314
|
* // -> {pets: {fido: {color: 'brown'}}}
|
|
4311
4315
|
* ```
|
|
4312
4316
|
* @category Setter
|
|
4317
|
+
* @essential Setting data
|
|
4313
4318
|
* @since v1.0.0
|
|
4314
4319
|
*/
|
|
4315
4320
|
setRow<TableId extends TableIdFromSchema<Schemas[0]>>(
|
|
@@ -4386,6 +4391,7 @@ export interface Store<in out Schemas extends OptionalSchemas> {
|
|
|
4386
4391
|
* // -> {pets: {'0': {species: 'dog'}, '1': {species: 'cat'}}}
|
|
4387
4392
|
* ```
|
|
4388
4393
|
* @category Setter
|
|
4394
|
+
* @essential Setting data
|
|
4389
4395
|
* @since v1.0.0
|
|
4390
4396
|
*/
|
|
4391
4397
|
addRow<TableId extends TableIdFromSchema<Schemas[0]>>(
|
|
@@ -4526,6 +4532,7 @@ export interface Store<in out Schemas extends OptionalSchemas> {
|
|
|
4526
4532
|
* // -> {pets: {fido: {species: 'dog'}}}
|
|
4527
4533
|
* ```
|
|
4528
4534
|
* @category Setter
|
|
4535
|
+
* @essential Setting data
|
|
4529
4536
|
* @since v1.0.0
|
|
4530
4537
|
*/
|
|
4531
4538
|
setCell<
|
|
@@ -4717,6 +4724,7 @@ export interface Store<in out Schemas extends OptionalSchemas> {
|
|
|
4717
4724
|
* // -> {employees: 3}
|
|
4718
4725
|
* ```
|
|
4719
4726
|
* @category Setter
|
|
4727
|
+
* @essential Setting data
|
|
4720
4728
|
* @since v3.0.0
|
|
4721
4729
|
*/
|
|
4722
4730
|
setValue<ValueId extends ValueIdFromSchema<Schemas[1]>>(
|
|
@@ -5572,6 +5580,7 @@ export interface Store<in out Schemas extends OptionalSchemas> {
|
|
|
5572
5580
|
* // -> {open: true}
|
|
5573
5581
|
* ```
|
|
5574
5582
|
* @category Transaction
|
|
5583
|
+
* @essential Setting data
|
|
5575
5584
|
* @since v1.0.0
|
|
5576
5585
|
*/
|
|
5577
5586
|
transaction<Return>(
|
|
@@ -7551,6 +7560,7 @@ export interface Store<in out Schemas extends OptionalSchemas> {
|
|
|
7551
7560
|
* store.delListener(listenerId);
|
|
7552
7561
|
* ```
|
|
7553
7562
|
* @category Listener
|
|
7563
|
+
* @essential Listening for changes
|
|
7554
7564
|
* @since v1.0.0
|
|
7555
7565
|
*/
|
|
7556
7566
|
addRowListener<
|
|
@@ -7973,6 +7983,7 @@ export interface Store<in out Schemas extends OptionalSchemas> {
|
|
|
7973
7983
|
* store.delListener(listenerId);
|
|
7974
7984
|
* ```
|
|
7975
7985
|
* @category Listener
|
|
7986
|
+
* @essential Listening for changes
|
|
7976
7987
|
* @since v1.0.0
|
|
7977
7988
|
*/
|
|
7978
7989
|
addCellListener<
|
|
@@ -8438,6 +8449,7 @@ export interface Store<in out Schemas extends OptionalSchemas> {
|
|
|
8438
8449
|
* store.delListener(listenerId);
|
|
8439
8450
|
* ```
|
|
8440
8451
|
* @category Listener
|
|
8452
|
+
* @essential Listening for changes
|
|
8441
8453
|
* @since v3.0.0
|
|
8442
8454
|
*/
|
|
8443
8455
|
addValueListener<ValueIdOrNull extends ValueIdFromSchema<Schemas[1]> | null>(
|
|
@@ -9408,6 +9420,7 @@ export interface Store<in out Schemas extends OptionalSchemas> {
|
|
|
9408
9420
|
* ```
|
|
9409
9421
|
* @see The Basics guides
|
|
9410
9422
|
* @category Creation
|
|
9423
|
+
* @essential Creating stores
|
|
9411
9424
|
* @since v1.0.0
|
|
9412
9425
|
*/
|
|
9413
9426
|
export function createStore(): Store<NoSchemas>;
|
|
@@ -198,6 +198,7 @@ export type SynchronizerStats = {
|
|
|
198
198
|
* await synchronizer2.destroy();
|
|
199
199
|
* ```
|
|
200
200
|
* @category Synchronizer
|
|
201
|
+
* @essential Synchronizing stores
|
|
201
202
|
* @since v5.0.0
|
|
202
203
|
*/
|
|
203
204
|
export interface Synchronizer extends Persister<Persists.MergeableStoreOnly> {
|
|
@@ -148,6 +148,7 @@ export interface WsSynchronizer<WebSocketType extends WebSocketTypes>
|
|
|
148
148
|
* await server.destroy();
|
|
149
149
|
* ```
|
|
150
150
|
* @category Creation
|
|
151
|
+
* @essential Synchronizing stores
|
|
151
152
|
* @since v5.0.0
|
|
152
153
|
*/
|
|
153
154
|
export function createWsSynchronizer<WebSocketType extends WebSocketTypes>(
|