tinybase 4.3.12 → 4.3.14

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.
Files changed (219) hide show
  1. package/lib/cjs/persisters/persister-automerge.cjs +1 -1
  2. package/lib/cjs/persisters/persister-automerge.cjs.gz +0 -0
  3. package/lib/cjs/persisters/persister-browser.cjs +1 -1
  4. package/lib/cjs/persisters/persister-browser.cjs.gz +0 -0
  5. package/lib/cjs/persisters/persister-cr-sqlite-wasm.cjs +1 -1
  6. package/lib/cjs/persisters/persister-cr-sqlite-wasm.cjs.gz +0 -0
  7. package/lib/cjs/persisters/persister-expo-sqlite.cjs +1 -1
  8. package/lib/cjs/persisters/persister-expo-sqlite.cjs.gz +0 -0
  9. package/lib/cjs/persisters/persister-file.cjs +1 -1
  10. package/lib/cjs/persisters/persister-file.cjs.gz +0 -0
  11. package/lib/cjs/persisters/persister-indexed-db.cjs +1 -1
  12. package/lib/cjs/persisters/persister-indexed-db.cjs.gz +0 -0
  13. package/lib/cjs/persisters/persister-partykit-client.cjs +1 -1
  14. package/lib/cjs/persisters/persister-partykit-client.cjs.gz +0 -0
  15. package/lib/cjs/persisters/persister-partykit-server.cjs +1 -1
  16. package/lib/cjs/persisters/persister-partykit-server.cjs.gz +0 -0
  17. package/lib/cjs/persisters/persister-remote.cjs +1 -1
  18. package/lib/cjs/persisters/persister-remote.cjs.gz +0 -0
  19. package/lib/cjs/persisters/persister-sqlite-wasm.cjs +1 -1
  20. package/lib/cjs/persisters/persister-sqlite-wasm.cjs.gz +0 -0
  21. package/lib/cjs/persisters/persister-sqlite3.cjs +1 -1
  22. package/lib/cjs/persisters/persister-sqlite3.cjs.gz +0 -0
  23. package/lib/cjs/persisters/persister-yjs.cjs +1 -1
  24. package/lib/cjs/persisters/persister-yjs.cjs.gz +0 -0
  25. package/lib/cjs/persisters.cjs +1 -1
  26. package/lib/cjs/persisters.cjs.gz +0 -0
  27. package/lib/cjs/tinybase.cjs +1 -1
  28. package/lib/cjs/tinybase.cjs.gz +0 -0
  29. package/lib/cjs/ui-react-dom-debug.cjs +1 -1
  30. package/lib/cjs/ui-react-dom-debug.cjs.gz +0 -0
  31. package/lib/cjs-es6/persisters/persister-automerge.cjs +1 -1
  32. package/lib/cjs-es6/persisters/persister-automerge.cjs.gz +0 -0
  33. package/lib/cjs-es6/persisters/persister-browser.cjs +1 -1
  34. package/lib/cjs-es6/persisters/persister-browser.cjs.gz +0 -0
  35. package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs +1 -1
  36. package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs.gz +0 -0
  37. package/lib/cjs-es6/persisters/persister-expo-sqlite.cjs +1 -1
  38. package/lib/cjs-es6/persisters/persister-expo-sqlite.cjs.gz +0 -0
  39. package/lib/cjs-es6/persisters/persister-file.cjs +1 -1
  40. package/lib/cjs-es6/persisters/persister-file.cjs.gz +0 -0
  41. package/lib/cjs-es6/persisters/persister-indexed-db.cjs +1 -1
  42. package/lib/cjs-es6/persisters/persister-indexed-db.cjs.gz +0 -0
  43. package/lib/cjs-es6/persisters/persister-partykit-client.cjs +1 -1
  44. package/lib/cjs-es6/persisters/persister-partykit-client.cjs.gz +0 -0
  45. package/lib/cjs-es6/persisters/persister-partykit-server.cjs +1 -1
  46. package/lib/cjs-es6/persisters/persister-partykit-server.cjs.gz +0 -0
  47. package/lib/cjs-es6/persisters/persister-remote.cjs +1 -1
  48. package/lib/cjs-es6/persisters/persister-remote.cjs.gz +0 -0
  49. package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs +1 -1
  50. package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs.gz +0 -0
  51. package/lib/cjs-es6/persisters/persister-sqlite3.cjs +1 -1
  52. package/lib/cjs-es6/persisters/persister-sqlite3.cjs.gz +0 -0
  53. package/lib/cjs-es6/persisters/persister-yjs.cjs +1 -1
  54. package/lib/cjs-es6/persisters/persister-yjs.cjs.gz +0 -0
  55. package/lib/cjs-es6/persisters.cjs +1 -1
  56. package/lib/cjs-es6/persisters.cjs.gz +0 -0
  57. package/lib/cjs-es6/tinybase.cjs +1 -1
  58. package/lib/cjs-es6/tinybase.cjs.gz +0 -0
  59. package/lib/cjs-es6/ui-react-dom-debug.cjs +1 -1
  60. package/lib/cjs-es6/ui-react-dom-debug.cjs.gz +0 -0
  61. package/lib/debug/persisters/persister-automerge.js +5 -0
  62. package/lib/debug/persisters/persister-browser.js +5 -0
  63. package/lib/debug/persisters/persister-cr-sqlite-wasm.js +12 -6
  64. package/lib/debug/persisters/persister-expo-sqlite.js +12 -6
  65. package/lib/debug/persisters/persister-file.js +5 -0
  66. package/lib/debug/persisters/persister-indexed-db.js +5 -0
  67. package/lib/debug/persisters/persister-partykit-client.js +6 -1
  68. package/lib/debug/persisters/persister-partykit-server.js +73 -82
  69. package/lib/debug/persisters/persister-remote.js +5 -0
  70. package/lib/debug/persisters/persister-sqlite-wasm.js +12 -6
  71. package/lib/debug/persisters/persister-sqlite3.js +12 -6
  72. package/lib/debug/persisters/persister-yjs.js +5 -0
  73. package/lib/debug/persisters.js +4 -0
  74. package/lib/debug/tinybase.js +4 -0
  75. package/lib/debug/ui-react-dom.js +5 -0
  76. package/lib/es6/persisters/persister-automerge.js +1 -1
  77. package/lib/es6/persisters/persister-automerge.js.gz +0 -0
  78. package/lib/es6/persisters/persister-browser.js +1 -1
  79. package/lib/es6/persisters/persister-browser.js.gz +0 -0
  80. package/lib/es6/persisters/persister-cr-sqlite-wasm.js +1 -1
  81. package/lib/es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  82. package/lib/es6/persisters/persister-expo-sqlite.js +1 -1
  83. package/lib/es6/persisters/persister-expo-sqlite.js.gz +0 -0
  84. package/lib/es6/persisters/persister-file.js +1 -1
  85. package/lib/es6/persisters/persister-file.js.gz +0 -0
  86. package/lib/es6/persisters/persister-indexed-db.js +1 -1
  87. package/lib/es6/persisters/persister-indexed-db.js.gz +0 -0
  88. package/lib/es6/persisters/persister-partykit-client.js +1 -1
  89. package/lib/es6/persisters/persister-partykit-client.js.gz +0 -0
  90. package/lib/es6/persisters/persister-partykit-server.js +1 -1
  91. package/lib/es6/persisters/persister-partykit-server.js.gz +0 -0
  92. package/lib/es6/persisters/persister-remote.js +1 -1
  93. package/lib/es6/persisters/persister-remote.js.gz +0 -0
  94. package/lib/es6/persisters/persister-sqlite-wasm.js +1 -1
  95. package/lib/es6/persisters/persister-sqlite-wasm.js.gz +0 -0
  96. package/lib/es6/persisters/persister-sqlite3.js +1 -1
  97. package/lib/es6/persisters/persister-sqlite3.js.gz +0 -0
  98. package/lib/es6/persisters/persister-yjs.js +1 -1
  99. package/lib/es6/persisters/persister-yjs.js.gz +0 -0
  100. package/lib/es6/persisters.js +1 -1
  101. package/lib/es6/persisters.js.gz +0 -0
  102. package/lib/es6/tinybase.js +1 -1
  103. package/lib/es6/tinybase.js.gz +0 -0
  104. package/lib/es6/ui-react-dom-debug.js +1 -1
  105. package/lib/es6/ui-react-dom-debug.js.gz +0 -0
  106. package/lib/persisters/persister-automerge.js +1 -1
  107. package/lib/persisters/persister-automerge.js.gz +0 -0
  108. package/lib/persisters/persister-browser.js +1 -1
  109. package/lib/persisters/persister-browser.js.gz +0 -0
  110. package/lib/persisters/persister-cr-sqlite-wasm.js +1 -1
  111. package/lib/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  112. package/lib/persisters/persister-expo-sqlite.js +1 -1
  113. package/lib/persisters/persister-expo-sqlite.js.gz +0 -0
  114. package/lib/persisters/persister-file.js +1 -1
  115. package/lib/persisters/persister-file.js.gz +0 -0
  116. package/lib/persisters/persister-indexed-db.js +1 -1
  117. package/lib/persisters/persister-indexed-db.js.gz +0 -0
  118. package/lib/persisters/persister-partykit-client.js +1 -1
  119. package/lib/persisters/persister-partykit-client.js.gz +0 -0
  120. package/lib/persisters/persister-partykit-server.js +1 -1
  121. package/lib/persisters/persister-partykit-server.js.gz +0 -0
  122. package/lib/persisters/persister-remote.js +1 -1
  123. package/lib/persisters/persister-remote.js.gz +0 -0
  124. package/lib/persisters/persister-sqlite-wasm.js +1 -1
  125. package/lib/persisters/persister-sqlite-wasm.js.gz +0 -0
  126. package/lib/persisters/persister-sqlite3.js +1 -1
  127. package/lib/persisters/persister-sqlite3.js.gz +0 -0
  128. package/lib/persisters/persister-yjs.js +1 -1
  129. package/lib/persisters/persister-yjs.js.gz +0 -0
  130. package/lib/persisters.js +1 -1
  131. package/lib/persisters.js.gz +0 -0
  132. package/lib/tinybase.js +1 -1
  133. package/lib/tinybase.js.gz +0 -0
  134. package/lib/types/persisters/persister-automerge.d.ts +36 -3
  135. package/lib/types/persisters/persister-browser.d.ts +71 -8
  136. package/lib/types/persisters/persister-cr-sqlite-wasm.d.ts +42 -8
  137. package/lib/types/persisters/persister-expo-sqlite.d.ts +40 -7
  138. package/lib/types/persisters/persister-file.d.ts +34 -3
  139. package/lib/types/persisters/persister-indexed-db.d.ts +36 -4
  140. package/lib/types/persisters/persister-partykit-client.d.ts +40 -4
  141. package/lib/types/persisters/persister-partykit-server.d.ts +23 -13
  142. package/lib/types/persisters/persister-remote.d.ts +40 -4
  143. package/lib/types/persisters/persister-sqlite-wasm.d.ts +46 -7
  144. package/lib/types/persisters/persister-sqlite3.d.ts +40 -7
  145. package/lib/types/persisters/persister-yjs.d.ts +37 -5
  146. package/lib/types/with-schemas/persisters/persister-automerge.d.ts +38 -4
  147. package/lib/types/with-schemas/persisters/persister-browser.d.ts +75 -10
  148. package/lib/types/with-schemas/persisters/persister-cr-sqlite-wasm.d.ts +44 -9
  149. package/lib/types/with-schemas/persisters/persister-expo-sqlite.d.ts +42 -8
  150. package/lib/types/with-schemas/persisters/persister-file.d.ts +36 -4
  151. package/lib/types/with-schemas/persisters/persister-indexed-db.d.ts +38 -5
  152. package/lib/types/with-schemas/persisters/persister-partykit-client.d.ts +42 -5
  153. package/lib/types/with-schemas/persisters/persister-partykit-server.d.ts +32 -13
  154. package/lib/types/with-schemas/persisters/persister-remote.d.ts +42 -5
  155. package/lib/types/with-schemas/persisters/persister-sqlite-wasm.d.ts +48 -8
  156. package/lib/types/with-schemas/persisters/persister-sqlite3.d.ts +41 -7
  157. package/lib/types/with-schemas/persisters/persister-yjs.d.ts +39 -6
  158. package/lib/umd/persisters/persister-automerge.js +1 -1
  159. package/lib/umd/persisters/persister-automerge.js.gz +0 -0
  160. package/lib/umd/persisters/persister-browser.js +1 -1
  161. package/lib/umd/persisters/persister-browser.js.gz +0 -0
  162. package/lib/umd/persisters/persister-cr-sqlite-wasm.js +1 -1
  163. package/lib/umd/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  164. package/lib/umd/persisters/persister-expo-sqlite.js +1 -1
  165. package/lib/umd/persisters/persister-expo-sqlite.js.gz +0 -0
  166. package/lib/umd/persisters/persister-file.js +1 -1
  167. package/lib/umd/persisters/persister-file.js.gz +0 -0
  168. package/lib/umd/persisters/persister-indexed-db.js +1 -1
  169. package/lib/umd/persisters/persister-indexed-db.js.gz +0 -0
  170. package/lib/umd/persisters/persister-partykit-client.js +1 -1
  171. package/lib/umd/persisters/persister-partykit-client.js.gz +0 -0
  172. package/lib/umd/persisters/persister-partykit-server.js +1 -1
  173. package/lib/umd/persisters/persister-partykit-server.js.gz +0 -0
  174. package/lib/umd/persisters/persister-remote.js +1 -1
  175. package/lib/umd/persisters/persister-remote.js.gz +0 -0
  176. package/lib/umd/persisters/persister-sqlite-wasm.js +1 -1
  177. package/lib/umd/persisters/persister-sqlite-wasm.js.gz +0 -0
  178. package/lib/umd/persisters/persister-sqlite3.js +1 -1
  179. package/lib/umd/persisters/persister-sqlite3.js.gz +0 -0
  180. package/lib/umd/persisters/persister-yjs.js +1 -1
  181. package/lib/umd/persisters/persister-yjs.js.gz +0 -0
  182. package/lib/umd/persisters.js +1 -1
  183. package/lib/umd/persisters.js.gz +0 -0
  184. package/lib/umd/tinybase.js +1 -1
  185. package/lib/umd/tinybase.js.gz +0 -0
  186. package/lib/umd/ui-react-dom-debug.js +1 -1
  187. package/lib/umd/ui-react-dom-debug.js.gz +0 -0
  188. package/lib/umd-es6/persisters/persister-automerge.js +1 -1
  189. package/lib/umd-es6/persisters/persister-automerge.js.gz +0 -0
  190. package/lib/umd-es6/persisters/persister-browser.js +1 -1
  191. package/lib/umd-es6/persisters/persister-browser.js.gz +0 -0
  192. package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js +1 -1
  193. package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  194. package/lib/umd-es6/persisters/persister-expo-sqlite.js +1 -1
  195. package/lib/umd-es6/persisters/persister-expo-sqlite.js.gz +0 -0
  196. package/lib/umd-es6/persisters/persister-file.js +1 -1
  197. package/lib/umd-es6/persisters/persister-file.js.gz +0 -0
  198. package/lib/umd-es6/persisters/persister-indexed-db.js +1 -1
  199. package/lib/umd-es6/persisters/persister-indexed-db.js.gz +0 -0
  200. package/lib/umd-es6/persisters/persister-partykit-client.js +1 -1
  201. package/lib/umd-es6/persisters/persister-partykit-client.js.gz +0 -0
  202. package/lib/umd-es6/persisters/persister-partykit-server.js +1 -1
  203. package/lib/umd-es6/persisters/persister-partykit-server.js.gz +0 -0
  204. package/lib/umd-es6/persisters/persister-remote.js +1 -1
  205. package/lib/umd-es6/persisters/persister-remote.js.gz +0 -0
  206. package/lib/umd-es6/persisters/persister-sqlite-wasm.js +1 -1
  207. package/lib/umd-es6/persisters/persister-sqlite-wasm.js.gz +0 -0
  208. package/lib/umd-es6/persisters/persister-sqlite3.js +1 -1
  209. package/lib/umd-es6/persisters/persister-sqlite3.js.gz +0 -0
  210. package/lib/umd-es6/persisters/persister-yjs.js +1 -1
  211. package/lib/umd-es6/persisters/persister-yjs.js.gz +0 -0
  212. package/lib/umd-es6/persisters.js +1 -1
  213. package/lib/umd-es6/persisters.js.gz +0 -0
  214. package/lib/umd-es6/tinybase.js +1 -1
  215. package/lib/umd-es6/tinybase.js.gz +0 -0
  216. package/lib/umd-es6/ui-react-dom-debug.js +1 -1
  217. package/lib/umd-es6/ui-react-dom-debug.js.gz +0 -0
  218. package/package.json +18 -18
  219. package/readme.md +2 -2
@@ -18,7 +18,7 @@
18
18
  * @since 4.3.0
19
19
  */
20
20
 
21
- import {Cell, Value} from '../store';
21
+ import {Cell, CellOrUndefined, Value, ValueOrUndefined} from '../store';
22
22
  import {Connection, Party, Request, Server} from 'partykit/server';
23
23
  import {Id} from '../common';
24
24
 
@@ -42,7 +42,7 @@ import {Id} from '../common';
42
42
  *
43
43
  * ```js
44
44
  * class MyServer extends TinyBasePartyKitServer {
45
- * readonly config: TinyBasePartyKitServerConfig = {
45
+ * readonly config = {
46
46
  * storePath: '/my_tinybase',
47
47
  * storagePrefix: 'tinybase_',
48
48
  * };
@@ -119,8 +119,8 @@ export type TinyBasePartyKitServerConfig = {
119
119
  * console.log('Server started');
120
120
  * }
121
121
  *
122
- * async onMessage(message, client) {
123
- * await super.onMessage(message, client);
122
+ * async onMessage(message, connection) {
123
+ * await super.onMessage(message, connection);
124
124
  * // custom onMessage code
125
125
  * }
126
126
  *
@@ -182,8 +182,8 @@ export class TinyBasePartyKitServer implements Server {
182
182
  *
183
183
  * ```js
184
184
  * class MyServer extends TinyBasePartyKitServer {
185
- * async onMessage(message, client) {
186
- * await super.onMessage(message, client);
185
+ * async onMessage(message, connection) {
186
+ * await super.onMessage(message, connection);
187
187
  * // custom onMessage code
188
188
  * }
189
189
  * }
@@ -195,7 +195,7 @@ export class TinyBasePartyKitServer implements Server {
195
195
  * @category Connection
196
196
  * @since v4.3.0
197
197
  */
198
- onMessage(message: string, client: Connection): Promise<void>;
198
+ onMessage(message: string, connection: Connection): Promise<void>;
199
199
  /**
200
200
  * The canSetTable method lets you allow or disallow any changes to a Table
201
201
  * stored on the server, as sent from a client.
@@ -211,9 +211,13 @@ export class TinyBasePartyKitServer implements Server {
211
211
  * Store to the PartyKit room over HTTP (`true`), and subsequent incremental
212
212
  * updates over a web sockets (`false`).
213
213
  *
214
- * The final `requestOrConnection` parameter will either be the HTTP(S)
215
- * request or the web socket connection, in those two cases respectively. You
216
- * can, for instance, use this to distinguish between different users.
214
+ * The `requestOrConnection` parameter will either be the HTTP(S) request or
215
+ * the web socket connection, in those two cases respectively. You can, for
216
+ * instance, use this to distinguish between different users.
217
+ *
218
+ * Since v4.3.13, the final parameter is the Cell previously stored on the
219
+ * server, if any. Use this to distinguish between the addition of a new Cell
220
+ * (in which case it will be undefined) and the updating of an existing one.
217
221
  *
218
222
  * Return `false` from this method to disallow changes to this Table on the
219
223
  * server, or `true` to allow them (subject to subsequent canSetRow method,
@@ -393,6 +397,7 @@ export class TinyBasePartyKitServer implements Server {
393
397
  cell: Cell,
394
398
  initialSave: boolean,
395
399
  requestOrConnection: Request | Connection,
400
+ oldCell: CellOrUndefined,
396
401
  ): boolean;
397
402
  /**
398
403
  * The canDelCell method lets you allow or disallow deletions of a Cell stored
@@ -447,9 +452,13 @@ export class TinyBasePartyKitServer implements Server {
447
452
  * the first bulk save of the Store to the PartyKit room over HTTP (`true`),
448
453
  * and subsequent incremental updates over a web sockets (`false`).
449
454
  *
450
- * The final `requestOrConnection` parameter will either be the HTTP(S)
451
- * request or the web socket connection, in those two cases respectively. You
452
- * can, for instance, use this to distinguish between different users.
455
+ * The `requestOrConnection` parameter will either be the HTTP(S) request or
456
+ * the web socket connection, in those two cases respectively. You can, for
457
+ * instance, use this to distinguish between different users.
458
+ *
459
+ * Since v4.3.13, the final parameter is the Value previously stored on the
460
+ * server, if any. Use this to distinguish between the addition of a new Value
461
+ * (in which case it will be undefined) and the updating of an existing one.
453
462
  *
454
463
  * Return `false` from this method to disallow changes to this Value on the
455
464
  * server, or `true` to allow them. The default implementation returns `true`
@@ -473,6 +482,7 @@ export class TinyBasePartyKitServer implements Server {
473
482
  value: Value,
474
483
  initialSave: boolean,
475
484
  requestOrConnection: Request | Connection,
485
+ oldValue: ValueOrUndefined,
476
486
  ): boolean;
477
487
  /**
478
488
  * The canDelValue method lets you allow or disallow deletions of a Value
@@ -9,6 +9,42 @@
9
9
  import {Persister} from '../persisters';
10
10
  import {Store} from '../store';
11
11
 
12
+ /**
13
+ * The RemotePersister interface is a minor extension to the Persister
14
+ * interface.
15
+ *
16
+ * It simply provides an extra getUrls method for accessing the URLs the Store
17
+ * is being persisted to.
18
+ * @since v4.3.14
19
+ */
20
+ export interface RemotePersister extends Persister {
21
+ /**
22
+ * The getUrls method returns the URLs the Store is being persisted to.
23
+ * @returns The load and save URLs as a two-item array.
24
+ * @example
25
+ * This example creates a RemotePersister object against a newly-created Store
26
+ * and then gets the URLs back out again.
27
+ *
28
+ * ```js
29
+ * const store = createStore().setTables({pets: {fido: {species: 'dog'}}});
30
+ * const persister = createRemotePersister(
31
+ * store,
32
+ * 'https://example.com/load',
33
+ * 'https://example.com/save',
34
+ * 5,
35
+ * );
36
+ *
37
+ * console.log(persister.getUrls());
38
+ * // -> ['https://example.com/load', 'https://example.com/save']
39
+ *
40
+ * persister.destroy();
41
+ * ```
42
+ * @category Getter
43
+ * @since v4.3.14
44
+ */
45
+ getUrls: () => [string, string];
46
+ }
47
+
12
48
  /**
13
49
  * The createRemotePersister function creates a Persister object that can
14
50
  * persist the Store to a remote server.
@@ -29,10 +65,10 @@ import {Store} from '../store';
29
65
  * @param onIgnoredError An optional handler for the errors that the Persister
30
66
  * would otherwise ignore when trying to save or load data. This is suitable for
31
67
  * debugging persistence issues in a development environment, since v4.0.4.
32
- * @returns A reference to the new Persister object.
68
+ * @returns A reference to the new RemotePersister object.
33
69
  * @example
34
- * This example creates a Persister object and persists the Store to a remote
35
- * server.
70
+ * This example creates a RemotePersister object and persists the Store to a
71
+ * remote server.
36
72
  *
37
73
  * ```js yolo
38
74
  * const store = createStore().setTables({pets: {fido: {species: 'dog'}}});
@@ -59,4 +95,4 @@ export function createRemotePersister(
59
95
  saveUrl: string,
60
96
  autoLoadIntervalSeconds?: number,
61
97
  onIgnoredError?: (error: any) => void,
62
- ): Persister;
98
+ ): RemotePersister;
@@ -11,6 +11,45 @@
11
11
  import {DatabasePersisterConfig, Persister} from '../persisters';
12
12
  import {Store} from '../store';
13
13
 
14
+ /**
15
+ * The SqliteWasmPersister interface is a minor extension to the Persister
16
+ * interface.
17
+ *
18
+ * It simply provides an extra getDb method for accessing a reference to the
19
+ * database instance the Store is being persisted to.
20
+ * @since v4.3.14
21
+ */
22
+ export interface SqliteWasmPersister extends Persister {
23
+ /**
24
+ * The getDb method returns a reference to the database instance the Store is
25
+ * being persisted to.
26
+ * @returns A reference to the database instance.
27
+ * @example
28
+ * This example creates a Persister object against a newly-created Store and
29
+ * then gets the database instance back out again.
30
+ *
31
+ * ```js
32
+ * const sqlite3 = await sqlite3InitModule();
33
+ * const db = new sqlite3.oo1.DB(':memory:', 'c');
34
+ * const store = createStore().setTables({pets: {fido: {species: 'dog'}}});
35
+ * const persister = createSqliteWasmPersister(
36
+ * store,
37
+ * sqlite3,
38
+ * db,
39
+ * 'my_tinybase',
40
+ * );
41
+ *
42
+ * console.log(persister.getDb() == db);
43
+ * // -> true
44
+ *
45
+ * persister.destroy();
46
+ * ```
47
+ * @category Getter
48
+ * @since v4.3.14
49
+ */
50
+ getDb: () => any;
51
+ }
52
+
14
53
  /**
15
54
  * The createSqliteWasmPersister function creates a Persister object that can
16
55
  * persist the Store to a local SQLite database (in an appropriate environment).
@@ -43,11 +82,11 @@ import {Store} from '../store';
43
82
  * @param onIgnoredError An optional handler for the errors that the Persister
44
83
  * would otherwise ignore when trying to save or load data. This is suitable for
45
84
  * debugging persistence issues in a development environment, since v4.0.4.
46
- * @returns A reference to the new Persister object.
85
+ * @returns A reference to the new SqliteWasmPersister object.
47
86
  * @example
48
- * This example creates a Persister object and persists the Store to a local
49
- * SQLite database as a JSON serialization into the `my_tinybase` table. It
50
- * makes a change to the database directly and then reloads it back into the
87
+ * This example creates a SqliteWasmPersister object and persists the Store to a
88
+ * local SQLite database as a JSON serialization into the `my_tinybase` table.
89
+ * It makes a change to the database directly and then reloads it back into the
51
90
  * Store.
52
91
  *
53
92
  * ```js
@@ -78,8 +117,8 @@ import {Store} from '../store';
78
117
  * persister.destroy();
79
118
  * ```
80
119
  * @example
81
- * This example creates a Persister object and persists the Store to a local
82
- * SQLite database with tabular mapping.
120
+ * This example creates a SqliteWasmPersister object and persists the Store to a
121
+ * local SQLite database with tabular mapping.
83
122
  *
84
123
  * ```js
85
124
  * const sqlite3 = await sqlite3InitModule();
@@ -111,4 +150,4 @@ export function createSqliteWasmPersister(
111
150
  configOrStoreTableName?: DatabasePersisterConfig | string,
112
151
  onSqlCommand?: (sql: string, args?: any[]) => void,
113
152
  onIgnoredError?: (error: any) => void,
114
- ): Persister;
153
+ ): SqliteWasmPersister;
@@ -12,6 +12,39 @@ import {DatabasePersisterConfig, Persister} from '../persisters';
12
12
  import {Database} from 'sqlite3';
13
13
  import {Store} from '../store';
14
14
 
15
+ /**
16
+ * The Sqlite3Persister interface is a minor extension to the Persister
17
+ * interface.
18
+ *
19
+ * It simply provides an extra getDb method for accessing a reference to the
20
+ * database instance the Store is being persisted to.
21
+ * @since v4.3.14
22
+ */
23
+ export interface Sqlite3Persister extends Persister {
24
+ /**
25
+ * The getDb method returns a reference to the database instance the Store is
26
+ * being persisted to.
27
+ * @returns A reference to the database instance.
28
+ * @example
29
+ * This example creates a Persister object against a newly-created Store and
30
+ * then gets the database instance back out again.
31
+ *
32
+ * ```js
33
+ * const db = new sqlite3.Database(':memory:');
34
+ * const store = createStore().setTables({pets: {fido: {species: 'dog'}}});
35
+ * const persister = createSqlite3Persister(store, db, 'my_tinybase');
36
+ *
37
+ * console.log(persister.getDb() == db);
38
+ * // -> true
39
+ *
40
+ * persister.destroy();
41
+ * ```
42
+ * @category Getter
43
+ * @since v4.3.14
44
+ */
45
+ getDb: () => Database;
46
+ }
47
+
15
48
  /**
16
49
  * The createSqlite3Persister function creates a Persister object that can
17
50
  * persist the Store to a local SQLite database (in an appropriate environment).
@@ -42,11 +75,11 @@ import {Store} from '../store';
42
75
  * @param onIgnoredError An optional handler for the errors that the Persister
43
76
  * would otherwise ignore when trying to save or load data. This is suitable for
44
77
  * debugging persistence issues in a development environment, since v4.0.4.
45
- * @returns A reference to the new Persister object.
78
+ * @returns A reference to the new Sqlite3Persister object.
46
79
  * @example
47
- * This example creates a Persister object and persists the Store to a local
48
- * SQLite database as a JSON serialization into the `my_tinybase` table. It
49
- * makes a change to the database directly and then reloads it back into the
80
+ * This example creates a Sqlite3Persister object and persists the Store to a
81
+ * local SQLite database as a JSON serialization into the `my_tinybase` table.
82
+ * It makes a change to the database directly and then reloads it back into the
50
83
  * Store.
51
84
  *
52
85
  * ```js
@@ -78,8 +111,8 @@ import {Store} from '../store';
78
111
  * persister.destroy();
79
112
  * ```
80
113
  * @example
81
- * This example creates a Persister object and persists the Store to a local
82
- * SQLite database with tabular mapping.
114
+ * This example creates a Sqlite3Persister object and persists the Store to a
115
+ * local SQLite database with tabular mapping.
83
116
  *
84
117
  * ```js
85
118
  * const db = new sqlite3.Database(':memory:');
@@ -118,4 +151,4 @@ export function createSqlite3Persister(
118
151
  configOrStoreTableName?: DatabasePersisterConfig | string,
119
152
  onSqlCommand?: (sql: string, args?: any[]) => void,
120
153
  onIgnoredError?: (error: any) => void,
121
- ): Persister;
154
+ ): Sqlite3Persister;
@@ -15,6 +15,38 @@ import {Persister} from '../persisters.d';
15
15
  import {Store} from '../store.d';
16
16
  import {Doc as YDoc} from 'yjs';
17
17
 
18
+ /**
19
+ * The YjsPersister interface is a minor extension to the Persister interface.
20
+ *
21
+ * It simply provides an extra getYDoc method for accessing the Yjs document the
22
+ * Store is being persisted to.
23
+ * @since v4.3.14
24
+ */
25
+ export interface YjsPersister extends Persister {
26
+ /**
27
+ * The getYDoc method returns the Yjs document the Store is being persisted
28
+ * to.
29
+ * @returns The Yjs document.
30
+ * @example
31
+ * This example creates a Persister object against a newly-created Store and
32
+ * then gets the Yjs document back out again.
33
+ *
34
+ * ```js
35
+ * const doc = new Y.Doc();
36
+ * const store = createStore().setTables({pets: {fido: {species: 'dog'}}});
37
+ * const persister = createYjsPersister(store, doc);
38
+ *
39
+ * console.log(persister.getYDoc() == doc);
40
+ * // -> true
41
+ *
42
+ * persister.destroy();
43
+ * ```
44
+ * @category Getter
45
+ * @since v4.3.14
46
+ */
47
+ getYDoc: () => YDoc;
48
+ }
49
+
18
50
  /**
19
51
  * The createYjsPersister function creates a Persister object that can persist
20
52
  * the Store to a Yjs document.
@@ -28,9 +60,9 @@ import {Doc as YDoc} from 'yjs';
28
60
  * @param onIgnoredError An optional handler for the errors that the Persister
29
61
  * would otherwise ignore when trying to save or load data. This is suitable for
30
62
  * debugging persistence issues in a development environment, since v4.0.4.
31
- * @returns A reference to the new Persister object.
63
+ * @returns A reference to the new YjsPersister object.
32
64
  * @example
33
- * This example creates a Persister object and persists the Store to a Yjs
65
+ * This example creates a YjsPersister object and persists the Store to a Yjs
34
66
  * document.
35
67
  *
36
68
  * ```js
@@ -48,8 +80,8 @@ import {Doc as YDoc} from 'yjs';
48
80
  * ```
49
81
  * @example
50
82
  * This more complex example uses Yjs updates to keep two Store objects (each
51
- * with their own Persister objects and Yjs documents) in sync with each other.
52
- * We use the `await` keyword extensively for the purpose of ensuring
83
+ * with their own YjsPersister objects and Yjs documents) in sync with each
84
+ * other. We use the `await` keyword extensively for the purpose of ensuring
53
85
  * sequentiality in this example.
54
86
  *
55
87
  * Typically, real-world synchronization would happen between two systems via a
@@ -106,4 +138,4 @@ export function createYjsPersister(
106
138
  yDoc: YDoc,
107
139
  yMapName?: string,
108
140
  onIgnoredError?: (error: any) => void,
109
- ): Persister;
141
+ ): YjsPersister;
@@ -15,6 +15,40 @@ import {OptionalSchemas, Store} from '../store';
15
15
  import {DocHandle} from 'automerge-repo';
16
16
  import {Persister} from '../persisters';
17
17
 
18
+ /**
19
+ * The AutomergePersister interface is a minor extension to the Persister
20
+ * interface.
21
+ *
22
+ * It simply provides an extra getDocHandle method for accessing the Automerge
23
+ * document handler the Store is being persisted to.
24
+ * @since v4.3.14
25
+ */
26
+ export interface AutomergePersister<Schemas extends OptionalSchemas>
27
+ extends Persister<Schemas> {
28
+ /**
29
+ * The getDocHandle method returns the Automerge document handler the Store is
30
+ * being persisted to.
31
+ * @returns The Automerge document handler.
32
+ * @example
33
+ * This example creates a Persister object against a newly-created Store and
34
+ * then gets the Automerge document handler back out again.
35
+ *
36
+ * ```js
37
+ * const docHandler = new AutomergeRepo.Repo({network: []}).create();
38
+ * const store = createStore().setTables({pets: {fido: {species: 'dog'}}});
39
+ * const persister = createAutomergePersister(store, docHandler);
40
+ *
41
+ * console.log(persister.getDocHandle() == docHandler);
42
+ * // -> true
43
+ *
44
+ * persister.destroy();
45
+ * ```
46
+ * @category Getter
47
+ * @since v4.3.14
48
+ */
49
+ getDocHandle: () => DocHandle<any>;
50
+ }
51
+
18
52
  /**
19
53
  * The createAutomergePersister function creates a Persister object that can
20
54
  * persist the Store to an Automerge document.
@@ -27,7 +61,7 @@ import {Persister} from '../persisters';
27
61
  * docHandle: DocHandle<any>,
28
62
  * docMapName?: string,
29
63
  * onIgnoredError?: (error: any) => void,
30
- * ): Persister;
64
+ * ): AutomergePersister;
31
65
  * ```
32
66
  *
33
67
  * As well as providing a reference to the Store to persist, you must provide
@@ -39,9 +73,9 @@ import {Persister} from '../persisters';
39
73
  * @param onIgnoredError An optional handler for the errors that the Persister
40
74
  * would otherwise ignore when trying to save or load data. This is suitable for
41
75
  * debugging persistence issues in a development environment, since v4.0.4.
42
- * @returns A reference to the new Persister object.
76
+ * @returns A reference to the new AutomergePersister object.
43
77
  * @example
44
- * This example creates a Persister object and persists the Store to an
78
+ * This example creates a AutomergePersister object and persists the Store to an
45
79
  * Automerge document.
46
80
  *
47
81
  * ```js
@@ -120,4 +154,4 @@ export function createAutomergePersister<Schemas extends OptionalSchemas>(
120
154
  docHandle: DocHandle<any>,
121
155
  docMapName?: string,
122
156
  onIgnoredError?: (error: any) => void,
123
- ): Persister<Schemas>;
157
+ ): AutomergePersister<Schemas>;
@@ -17,6 +17,71 @@
17
17
  import {OptionalSchemas, Store} from '../store';
18
18
  import {Persister} from '../persisters';
19
19
 
20
+ /**
21
+ * The SessionPersister interface is a minor extension to the Persister
22
+ * interface.
23
+ *
24
+ * It simply provides an extra getStorageName method for accessing the unique
25
+ * key of the storage location the Store is being persisted to.
26
+ * @since v4.3.14
27
+ */
28
+ export interface SessionPersister<Schemas extends OptionalSchemas>
29
+ extends Persister<Schemas> {
30
+ /**
31
+ * The getStorageName method returns the unique key of the storage location
32
+ * the Store is being persisted to.
33
+ * @returns The unique key of the storage location.
34
+ * @example
35
+ * This example creates a Persister object against a newly-created Store and
36
+ * then gets the unique key of the storage location back out again.
37
+ *
38
+ * ```js
39
+ * const store = createStore().setTables({pets: {fido: {species: 'dog'}}});
40
+ * const persister = createSessionPersister(store, 'pets');
41
+ *
42
+ * console.log(persister.getStorageName());
43
+ * // -> 'pets'
44
+ *
45
+ * persister.destroy();
46
+ * ```
47
+ * @category Getter
48
+ * @since v4.3.14
49
+ */
50
+ getStorageName: () => string;
51
+ }
52
+
53
+ /**
54
+ * The LocalPersister interface is a minor extension to the Persister interface.
55
+ *
56
+ * It simply provides an extra getStorageName method for accessing the unique
57
+ * key of the storage location the Store is being persisted to.
58
+ * @since v4.3.14
59
+ */
60
+ export interface LocalPersister<Schemas extends OptionalSchemas>
61
+ extends Persister<Schemas> {
62
+ /**
63
+ * The getStorageName method returns the unique key of the storage location
64
+ * the Store is being persisted to.
65
+ * @returns The unique key of the storage location.
66
+ * @example
67
+ * This example creates a Persister object against a newly-created Store and
68
+ * then gets the unique key of the storage location back out again.
69
+ *
70
+ * ```js
71
+ * const store = createStore().setTables({pets: {fido: {species: 'dog'}}});
72
+ * const persister = createLocalPersister(store, 'pets');
73
+ *
74
+ * console.log(persister.getStorageName());
75
+ * // -> 'pets'
76
+ *
77
+ * persister.destroy();
78
+ * ```
79
+ * @category Getter
80
+ * @since v4.3.14
81
+ */
82
+ getStorageName: () => string;
83
+ }
84
+
20
85
  /**
21
86
  * The createSessionPersister function creates a Persister object that can
22
87
  * persist the Store to the browser's session storage.
@@ -28,7 +93,7 @@ import {Persister} from '../persisters';
28
93
  * store: Store,
29
94
  * storageName: string,
30
95
  * onIgnoredError?: (error: any) => void,
31
- * ): Persister;
96
+ * ): SessionPersister;
32
97
  * ```
33
98
  *
34
99
  * As well as providing a reference to the Store to persist, you must provide a
@@ -39,9 +104,9 @@ import {Persister} from '../persisters';
39
104
  * @param onIgnoredError An optional handler for the errors that the Persister
40
105
  * would otherwise ignore when trying to save or load data. This is suitable for
41
106
  * debugging persistence issues in a development environment, since v4.0.4.
42
- * @returns A reference to the new Persister object.
107
+ * @returns A reference to the new SessionPersister object.
43
108
  * @example
44
- * This example creates a Persister object and persists the Store to the
109
+ * This example creates a SessionPersister object and persists the Store to the
45
110
  * browser's session storage.
46
111
  *
47
112
  * ```js
@@ -61,11 +126,11 @@ export function createSessionPersister<Schemas extends OptionalSchemas>(
61
126
  store: Store<Schemas>,
62
127
  storageName: string,
63
128
  onIgnoredError?: (error: any) => void,
64
- ): Persister<Schemas>;
129
+ ): SessionPersister<Schemas>;
65
130
 
66
131
  /**
67
- * The createLocalPersister function creates a Persister object that can
68
- * persist the Store to the browser's local storage.
132
+ * The createLocalPersister function creates a Persister object that can persist
133
+ * the Store to the browser's local storage.
69
134
  *
70
135
  * This has schema-based typing. The following is a simplified representation:
71
136
  *
@@ -74,7 +139,7 @@ export function createSessionPersister<Schemas extends OptionalSchemas>(
74
139
  * store: Store,
75
140
  * storageName: string,
76
141
  * onIgnoredError?: (error: any) => void,
77
- * ): Persister;
142
+ * ): LocalPersister;
78
143
  * ```
79
144
  *
80
145
  * As well as providing a reference to the Store to persist, you must provide a
@@ -85,9 +150,9 @@ export function createSessionPersister<Schemas extends OptionalSchemas>(
85
150
  * @param onIgnoredError An optional handler for the errors that the Persister
86
151
  * would otherwise ignore when trying to save or load data. This is suitable for
87
152
  * debugging persistence issues in a development environment, since v4.0.4.
88
- * @returns A reference to the new Persister object.
153
+ * @returns A reference to the new LocalPersister object.
89
154
  * @example
90
- * This example creates a Persister object and persists the Store to the
155
+ * This example creates a LocalPersister object and persists the Store to the
91
156
  * browser's local storage.
92
157
  *
93
158
  * ```js
@@ -107,4 +172,4 @@ export function createLocalPersister<Schemas extends OptionalSchemas>(
107
172
  store: Store<Schemas>,
108
173
  storageName: string,
109
174
  onIgnoredError?: (error: any) => void,
110
- ): Persister<Schemas>;
175
+ ): LocalPersister<Schemas>;
@@ -12,6 +12,41 @@ import {DatabasePersisterConfig, Persister} from '../persisters';
12
12
  import {OptionalSchemas, Store} from '../store';
13
13
  import {DB} from '@vlcn.io/crsqlite-wasm';
14
14
 
15
+ /**
16
+ * The CrSqliteWasmPersister interface is a minor extension to the Persister
17
+ * interface.
18
+ *
19
+ * It simply provides an extra getDb method for accessing a reference to the
20
+ * database instance the Store is being persisted to.
21
+ * @since v4.3.14
22
+ */
23
+ export interface CrSqliteWasmPersister<Schemas extends OptionalSchemas>
24
+ extends Persister<Schemas> {
25
+ /**
26
+ * The getDb method returns a reference to the database instance the Store is
27
+ * being persisted to.
28
+ * @returns A reference to the database instance.
29
+ * @example
30
+ * This example creates a Persister object against a newly-created Store and
31
+ * then gets the database instance back out again.
32
+ *
33
+ * ```js
34
+ * const crSqlite3 = await initWasm();
35
+ * const db = await crSqlite3.open();
36
+ * const store = createStore().setTables({pets: {fido: {species: 'dog'}}});
37
+ * const persister = createCrSqliteWasmPersister(store, db, 'my_tinybase');
38
+ *
39
+ * console.log(persister.getDb() == db);
40
+ * // -> true
41
+ *
42
+ * persister.destroy();
43
+ * ```
44
+ * @category Getter
45
+ * @since v4.3.14
46
+ */
47
+ getDb: () => DB;
48
+ }
49
+
15
50
  /**
16
51
  * The createCrSqliteWasmPersister function creates a Persister object that can
17
52
  * persist the Store to a local CR-SQLite database (in an appropriate
@@ -26,7 +61,7 @@ import {DB} from '@vlcn.io/crsqlite-wasm';
26
61
  * configOrStoreTableName?: DatabasePersisterConfig | string,
27
62
  * onSqlCommand?: (sql: string, args?: any[]) => void,
28
63
  * onIgnoredError?: (error: any) => void,
29
- * ): Persister;
64
+ * ): CrSqliteWasmPersister;
30
65
  * ```
31
66
  *
32
67
  * As well as providing a reference to the Store to persist, you must provide a
@@ -54,12 +89,12 @@ import {DB} from '@vlcn.io/crsqlite-wasm';
54
89
  * @param onIgnoredError An optional handler for the errors that the Persister
55
90
  * would otherwise ignore when trying to save or load data. This is suitable for
56
91
  * debugging persistence issues in a development environment, since v4.0.4.
57
- * @returns A reference to the new Persister object.
92
+ * @returns A reference to the new CrSqliteWasmPersister object.
58
93
  * @example
59
- * This example creates a Persister object and persists the Store to a local
60
- * CR-SQLite database as a JSON serialization into the `my_tinybase` table. It
61
- * makes a change to the database directly and then reloads it back into the
62
- * Store.
94
+ * This example creates a CrSqliteWasmPersister object and persists the Store to
95
+ * a local CR-SQLite database as a JSON serialization into the `my_tinybase`
96
+ * table. It makes a change to the database directly and then reloads it back
97
+ * into the Store.
63
98
  *
64
99
  * ```js
65
100
  * const crSqlite3 = await initWasm();
@@ -84,8 +119,8 @@ import {DB} from '@vlcn.io/crsqlite-wasm';
84
119
  * persister.destroy();
85
120
  * ```
86
121
  * @example
87
- * This example creates a Persister object and persists the Store to a local
88
- * SQLite database with tabular mapping.
122
+ * This example creates a CrSqliteWasmPersister object and persists the Store to
123
+ * a local SQLite database with tabular mapping.
89
124
  *
90
125
  * ```js
91
126
  * const crSqlite3 = await initWasm();
@@ -116,4 +151,4 @@ export function createCrSqliteWasmPersister<Schemas extends OptionalSchemas>(
116
151
  configOrStoreTableName?: DatabasePersisterConfig<Schemas> | string,
117
152
  onSqlCommand?: (sql: string, args?: any[]) => void,
118
153
  onIgnoredError?: (error: any) => void,
119
- ): Persister<Schemas>;
154
+ ): CrSqliteWasmPersister<Schemas>;