tinybase 8.0.0-beta.1 → 8.0.0-beta.3

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 (280) hide show
  1. package/@types/_internal/store/with-schemas/index.d.ts +2 -2
  2. package/@types/common/index.d.ts +22 -0
  3. package/@types/common/with-schemas/index.d.ts +22 -0
  4. package/@types/middleware/index.d.ts +151 -29
  5. package/@types/middleware/with-schemas/index.d.ts +174 -29
  6. package/@types/store/index.d.ts +132 -79
  7. package/@types/store/with-schemas/index.d.ts +137 -81
  8. package/checkpoints/index.js +2 -8
  9. package/checkpoints/with-schemas/index.js +2 -8
  10. package/index.js +272 -143
  11. package/mergeable-store/index.js +271 -156
  12. package/mergeable-store/with-schemas/index.js +271 -156
  13. package/middleware/index.js +40 -1
  14. package/middleware/with-schemas/index.js +40 -1
  15. package/min/checkpoints/index.js +1 -1
  16. package/min/checkpoints/index.js.gz +0 -0
  17. package/min/checkpoints/with-schemas/index.js +1 -1
  18. package/min/checkpoints/with-schemas/index.js.gz +0 -0
  19. package/min/index.js +1 -1
  20. package/min/index.js.gz +0 -0
  21. package/min/mergeable-store/index.js +1 -1
  22. package/min/mergeable-store/index.js.gz +0 -0
  23. package/min/mergeable-store/with-schemas/index.js +1 -1
  24. package/min/mergeable-store/with-schemas/index.js.gz +0 -0
  25. package/min/middleware/index.js +1 -1
  26. package/min/middleware/index.js.gz +0 -0
  27. package/min/middleware/with-schemas/index.js +1 -1
  28. package/min/middleware/with-schemas/index.js.gz +0 -0
  29. package/min/omni/index.js +1 -1
  30. package/min/omni/index.js.gz +0 -0
  31. package/min/omni/with-schemas/index.js +1 -1
  32. package/min/omni/with-schemas/index.js.gz +0 -0
  33. package/min/persisters/index.js +1 -1
  34. package/min/persisters/index.js.gz +0 -0
  35. package/min/persisters/persister-automerge/index.js +1 -1
  36. package/min/persisters/persister-automerge/index.js.gz +0 -0
  37. package/min/persisters/persister-automerge/with-schemas/index.js +1 -1
  38. package/min/persisters/persister-automerge/with-schemas/index.js.gz +0 -0
  39. package/min/persisters/persister-browser/index.js +1 -1
  40. package/min/persisters/persister-browser/index.js.gz +0 -0
  41. package/min/persisters/persister-browser/with-schemas/index.js +1 -1
  42. package/min/persisters/persister-browser/with-schemas/index.js.gz +0 -0
  43. package/min/persisters/persister-cr-sqlite-wasm/index.js +1 -1
  44. package/min/persisters/persister-cr-sqlite-wasm/index.js.gz +0 -0
  45. package/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +1 -1
  46. package/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js.gz +0 -0
  47. package/min/persisters/persister-durable-object-sql-storage/index.js +1 -1
  48. package/min/persisters/persister-durable-object-sql-storage/index.js.gz +0 -0
  49. package/min/persisters/persister-durable-object-sql-storage/with-schemas/index.js +1 -1
  50. package/min/persisters/persister-durable-object-sql-storage/with-schemas/index.js.gz +0 -0
  51. package/min/persisters/persister-durable-object-storage/index.js +1 -1
  52. package/min/persisters/persister-durable-object-storage/index.js.gz +0 -0
  53. package/min/persisters/persister-durable-object-storage/with-schemas/index.js +1 -1
  54. package/min/persisters/persister-durable-object-storage/with-schemas/index.js.gz +0 -0
  55. package/min/persisters/persister-electric-sql/index.js +1 -1
  56. package/min/persisters/persister-electric-sql/index.js.gz +0 -0
  57. package/min/persisters/persister-electric-sql/with-schemas/index.js +1 -1
  58. package/min/persisters/persister-electric-sql/with-schemas/index.js.gz +0 -0
  59. package/min/persisters/persister-expo-sqlite/index.js +1 -1
  60. package/min/persisters/persister-expo-sqlite/index.js.gz +0 -0
  61. package/min/persisters/persister-expo-sqlite/with-schemas/index.js +1 -1
  62. package/min/persisters/persister-expo-sqlite/with-schemas/index.js.gz +0 -0
  63. package/min/persisters/persister-file/index.js +1 -1
  64. package/min/persisters/persister-file/index.js.gz +0 -0
  65. package/min/persisters/persister-file/with-schemas/index.js +1 -1
  66. package/min/persisters/persister-file/with-schemas/index.js.gz +0 -0
  67. package/min/persisters/persister-indexed-db/index.js +1 -1
  68. package/min/persisters/persister-indexed-db/index.js.gz +0 -0
  69. package/min/persisters/persister-indexed-db/with-schemas/index.js +1 -1
  70. package/min/persisters/persister-indexed-db/with-schemas/index.js.gz +0 -0
  71. package/min/persisters/persister-libsql/index.js +1 -1
  72. package/min/persisters/persister-libsql/index.js.gz +0 -0
  73. package/min/persisters/persister-libsql/with-schemas/index.js +1 -1
  74. package/min/persisters/persister-libsql/with-schemas/index.js.gz +0 -0
  75. package/min/persisters/persister-partykit-client/index.js +1 -1
  76. package/min/persisters/persister-partykit-client/index.js.gz +0 -0
  77. package/min/persisters/persister-partykit-client/with-schemas/index.js +1 -1
  78. package/min/persisters/persister-partykit-client/with-schemas/index.js.gz +0 -0
  79. package/min/persisters/persister-pglite/index.js +1 -1
  80. package/min/persisters/persister-pglite/index.js.gz +0 -0
  81. package/min/persisters/persister-pglite/with-schemas/index.js +1 -1
  82. package/min/persisters/persister-pglite/with-schemas/index.js.gz +0 -0
  83. package/min/persisters/persister-postgres/index.js +1 -1
  84. package/min/persisters/persister-postgres/index.js.gz +0 -0
  85. package/min/persisters/persister-postgres/with-schemas/index.js +1 -1
  86. package/min/persisters/persister-postgres/with-schemas/index.js.gz +0 -0
  87. package/min/persisters/persister-powersync/index.js +1 -1
  88. package/min/persisters/persister-powersync/index.js.gz +0 -0
  89. package/min/persisters/persister-powersync/with-schemas/index.js +1 -1
  90. package/min/persisters/persister-powersync/with-schemas/index.js.gz +0 -0
  91. package/min/persisters/persister-react-native-mmkv/index.js +1 -1
  92. package/min/persisters/persister-react-native-mmkv/index.js.gz +0 -0
  93. package/min/persisters/persister-react-native-mmkv/with-schemas/index.js +1 -1
  94. package/min/persisters/persister-react-native-mmkv/with-schemas/index.js.gz +0 -0
  95. package/min/persisters/persister-react-native-sqlite/index.js +1 -1
  96. package/min/persisters/persister-react-native-sqlite/index.js.gz +0 -0
  97. package/min/persisters/persister-react-native-sqlite/with-schemas/index.js +1 -1
  98. package/min/persisters/persister-react-native-sqlite/with-schemas/index.js.gz +0 -0
  99. package/min/persisters/persister-remote/index.js +1 -1
  100. package/min/persisters/persister-remote/index.js.gz +0 -0
  101. package/min/persisters/persister-remote/with-schemas/index.js +1 -1
  102. package/min/persisters/persister-remote/with-schemas/index.js.gz +0 -0
  103. package/min/persisters/persister-sqlite-bun/index.js +1 -1
  104. package/min/persisters/persister-sqlite-bun/index.js.gz +0 -0
  105. package/min/persisters/persister-sqlite-bun/with-schemas/index.js +1 -1
  106. package/min/persisters/persister-sqlite-bun/with-schemas/index.js.gz +0 -0
  107. package/min/persisters/persister-sqlite-wasm/index.js +1 -1
  108. package/min/persisters/persister-sqlite-wasm/index.js.gz +0 -0
  109. package/min/persisters/persister-sqlite-wasm/with-schemas/index.js +1 -1
  110. package/min/persisters/persister-sqlite-wasm/with-schemas/index.js.gz +0 -0
  111. package/min/persisters/persister-sqlite3/index.js +1 -1
  112. package/min/persisters/persister-sqlite3/index.js.gz +0 -0
  113. package/min/persisters/persister-sqlite3/with-schemas/index.js +1 -1
  114. package/min/persisters/persister-sqlite3/with-schemas/index.js.gz +0 -0
  115. package/min/persisters/persister-yjs/index.js +1 -1
  116. package/min/persisters/persister-yjs/index.js.gz +0 -0
  117. package/min/persisters/persister-yjs/with-schemas/index.js +1 -1
  118. package/min/persisters/persister-yjs/with-schemas/index.js.gz +0 -0
  119. package/min/persisters/with-schemas/index.js +1 -1
  120. package/min/persisters/with-schemas/index.js.gz +0 -0
  121. package/min/queries/index.js +1 -1
  122. package/min/queries/index.js.gz +0 -0
  123. package/min/queries/with-schemas/index.js +1 -1
  124. package/min/queries/with-schemas/index.js.gz +0 -0
  125. package/min/schematizers/index.js +1 -1
  126. package/min/schematizers/index.js.gz +0 -0
  127. package/min/schematizers/schematizer-arktype/index.js +1 -1
  128. package/min/schematizers/schematizer-arktype/index.js.gz +0 -0
  129. package/min/schematizers/schematizer-arktype/with-schemas/index.js +1 -1
  130. package/min/schematizers/schematizer-arktype/with-schemas/index.js.gz +0 -0
  131. package/min/schematizers/schematizer-effect/index.js +1 -1
  132. package/min/schematizers/schematizer-effect/index.js.gz +0 -0
  133. package/min/schematizers/schematizer-effect/with-schemas/index.js +1 -1
  134. package/min/schematizers/schematizer-effect/with-schemas/index.js.gz +0 -0
  135. package/min/schematizers/schematizer-typebox/index.js +1 -1
  136. package/min/schematizers/schematizer-typebox/index.js.gz +0 -0
  137. package/min/schematizers/schematizer-typebox/with-schemas/index.js +1 -1
  138. package/min/schematizers/schematizer-typebox/with-schemas/index.js.gz +0 -0
  139. package/min/schematizers/schematizer-valibot/index.js +1 -1
  140. package/min/schematizers/schematizer-valibot/index.js.gz +0 -0
  141. package/min/schematizers/schematizer-valibot/with-schemas/index.js +1 -1
  142. package/min/schematizers/schematizer-valibot/with-schemas/index.js.gz +0 -0
  143. package/min/schematizers/schematizer-yup/index.js +1 -1
  144. package/min/schematizers/schematizer-yup/index.js.gz +0 -0
  145. package/min/schematizers/schematizer-yup/with-schemas/index.js +1 -1
  146. package/min/schematizers/schematizer-yup/with-schemas/index.js.gz +0 -0
  147. package/min/schematizers/schematizer-zod/index.js +1 -1
  148. package/min/schematizers/schematizer-zod/index.js.gz +0 -0
  149. package/min/schematizers/schematizer-zod/with-schemas/index.js +1 -1
  150. package/min/schematizers/schematizer-zod/with-schemas/index.js.gz +0 -0
  151. package/min/schematizers/with-schemas/index.js +1 -1
  152. package/min/schematizers/with-schemas/index.js.gz +0 -0
  153. package/min/store/index.js +1 -1
  154. package/min/store/index.js.gz +0 -0
  155. package/min/store/with-schemas/index.js +1 -1
  156. package/min/store/with-schemas/index.js.gz +0 -0
  157. package/min/synchronizers/index.js +1 -1
  158. package/min/synchronizers/index.js.gz +0 -0
  159. package/min/synchronizers/synchronizer-broadcast-channel/index.js +1 -1
  160. package/min/synchronizers/synchronizer-broadcast-channel/index.js.gz +0 -0
  161. package/min/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +1 -1
  162. package/min/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js.gz +0 -0
  163. package/min/synchronizers/synchronizer-local/index.js +1 -1
  164. package/min/synchronizers/synchronizer-local/index.js.gz +0 -0
  165. package/min/synchronizers/synchronizer-local/with-schemas/index.js +1 -1
  166. package/min/synchronizers/synchronizer-local/with-schemas/index.js.gz +0 -0
  167. package/min/synchronizers/synchronizer-ws-client/index.js +1 -1
  168. package/min/synchronizers/synchronizer-ws-client/index.js.gz +0 -0
  169. package/min/synchronizers/synchronizer-ws-client/with-schemas/index.js +1 -1
  170. package/min/synchronizers/synchronizer-ws-client/with-schemas/index.js.gz +0 -0
  171. package/min/synchronizers/synchronizer-ws-server/index.js +1 -1
  172. package/min/synchronizers/synchronizer-ws-server/index.js.gz +0 -0
  173. package/min/synchronizers/synchronizer-ws-server/with-schemas/index.js +1 -1
  174. package/min/synchronizers/synchronizer-ws-server/with-schemas/index.js.gz +0 -0
  175. package/min/synchronizers/synchronizer-ws-server-durable-object/index.js +1 -1
  176. package/min/synchronizers/synchronizer-ws-server-durable-object/index.js.gz +0 -0
  177. package/min/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js +1 -1
  178. package/min/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js.gz +0 -0
  179. package/min/synchronizers/with-schemas/index.js +1 -1
  180. package/min/synchronizers/with-schemas/index.js.gz +0 -0
  181. package/min/ui-react/index.js +1 -1
  182. package/min/ui-react/index.js.gz +0 -0
  183. package/min/ui-react/with-schemas/index.js +1 -1
  184. package/min/ui-react/with-schemas/index.js.gz +0 -0
  185. package/min/ui-react-dom/index.js +1 -1
  186. package/min/ui-react-dom/index.js.gz +0 -0
  187. package/min/ui-react-dom/with-schemas/index.js +1 -1
  188. package/min/ui-react-dom/with-schemas/index.js.gz +0 -0
  189. package/min/ui-react-inspector/index.js +1 -1
  190. package/min/ui-react-inspector/index.js.gz +0 -0
  191. package/min/ui-react-inspector/with-schemas/index.js +1 -1
  192. package/min/ui-react-inspector/with-schemas/index.js.gz +0 -0
  193. package/min/with-schemas/index.js +1 -1
  194. package/min/with-schemas/index.js.gz +0 -0
  195. package/omni/index.js +356 -154
  196. package/omni/with-schemas/index.js +356 -154
  197. package/package.json +7 -7
  198. package/persisters/index.js +5 -5
  199. package/persisters/persister-automerge/index.js +5 -5
  200. package/persisters/persister-automerge/with-schemas/index.js +5 -5
  201. package/persisters/persister-browser/index.js +5 -5
  202. package/persisters/persister-browser/with-schemas/index.js +5 -5
  203. package/persisters/persister-cr-sqlite-wasm/index.js +5 -5
  204. package/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +5 -5
  205. package/persisters/persister-durable-object-sql-storage/index.js +5 -5
  206. package/persisters/persister-durable-object-sql-storage/with-schemas/index.js +5 -5
  207. package/persisters/persister-durable-object-storage/index.js +5 -5
  208. package/persisters/persister-durable-object-storage/with-schemas/index.js +5 -5
  209. package/persisters/persister-electric-sql/index.js +5 -5
  210. package/persisters/persister-electric-sql/with-schemas/index.js +5 -5
  211. package/persisters/persister-expo-sqlite/index.js +5 -5
  212. package/persisters/persister-expo-sqlite/with-schemas/index.js +5 -5
  213. package/persisters/persister-file/index.js +5 -5
  214. package/persisters/persister-file/with-schemas/index.js +5 -5
  215. package/persisters/persister-indexed-db/index.js +5 -5
  216. package/persisters/persister-indexed-db/with-schemas/index.js +5 -5
  217. package/persisters/persister-libsql/index.js +5 -5
  218. package/persisters/persister-libsql/with-schemas/index.js +5 -5
  219. package/persisters/persister-partykit-client/index.js +5 -5
  220. package/persisters/persister-partykit-client/with-schemas/index.js +5 -5
  221. package/persisters/persister-pglite/index.js +5 -5
  222. package/persisters/persister-pglite/with-schemas/index.js +5 -5
  223. package/persisters/persister-postgres/index.js +5 -5
  224. package/persisters/persister-postgres/with-schemas/index.js +5 -5
  225. package/persisters/persister-powersync/index.js +5 -5
  226. package/persisters/persister-powersync/with-schemas/index.js +5 -5
  227. package/persisters/persister-react-native-mmkv/index.js +5 -5
  228. package/persisters/persister-react-native-mmkv/with-schemas/index.js +5 -5
  229. package/persisters/persister-react-native-sqlite/index.js +5 -5
  230. package/persisters/persister-react-native-sqlite/with-schemas/index.js +5 -5
  231. package/persisters/persister-remote/index.js +5 -5
  232. package/persisters/persister-remote/with-schemas/index.js +5 -5
  233. package/persisters/persister-sqlite-bun/index.js +5 -5
  234. package/persisters/persister-sqlite-bun/with-schemas/index.js +5 -5
  235. package/persisters/persister-sqlite-wasm/index.js +5 -5
  236. package/persisters/persister-sqlite-wasm/with-schemas/index.js +5 -5
  237. package/persisters/persister-sqlite3/index.js +5 -5
  238. package/persisters/persister-sqlite3/with-schemas/index.js +5 -5
  239. package/persisters/persister-yjs/index.js +5 -5
  240. package/persisters/persister-yjs/with-schemas/index.js +5 -5
  241. package/persisters/with-schemas/index.js +5 -5
  242. package/queries/index.js +11 -4
  243. package/queries/with-schemas/index.js +11 -4
  244. package/readme.md +3 -3
  245. package/releases.md +19 -3
  246. package/schematizers/index.js +9 -1
  247. package/schematizers/schematizer-arktype/index.js +16 -1
  248. package/schematizers/schematizer-arktype/with-schemas/index.js +16 -1
  249. package/schematizers/schematizer-effect/index.js +15 -2
  250. package/schematizers/schematizer-effect/with-schemas/index.js +15 -2
  251. package/schematizers/schematizer-typebox/index.js +9 -1
  252. package/schematizers/schematizer-typebox/with-schemas/index.js +9 -1
  253. package/schematizers/schematizer-valibot/index.js +17 -2
  254. package/schematizers/schematizer-valibot/with-schemas/index.js +17 -2
  255. package/schematizers/schematizer-yup/index.js +9 -1
  256. package/schematizers/schematizer-yup/with-schemas/index.js +9 -1
  257. package/schematizers/schematizer-zod/index.js +13 -2
  258. package/schematizers/schematizer-zod/with-schemas/index.js +13 -2
  259. package/schematizers/with-schemas/index.js +9 -1
  260. package/store/index.js +195 -104
  261. package/store/with-schemas/index.js +195 -104
  262. package/synchronizers/index.js +5 -5
  263. package/synchronizers/synchronizer-broadcast-channel/index.js +5 -5
  264. package/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +5 -5
  265. package/synchronizers/synchronizer-local/index.js +5 -5
  266. package/synchronizers/synchronizer-local/with-schemas/index.js +5 -5
  267. package/synchronizers/synchronizer-ws-client/index.js +5 -5
  268. package/synchronizers/synchronizer-ws-client/with-schemas/index.js +5 -5
  269. package/synchronizers/synchronizer-ws-server/index.js +5 -5
  270. package/synchronizers/synchronizer-ws-server/with-schemas/index.js +5 -5
  271. package/synchronizers/synchronizer-ws-server-durable-object/index.js +5 -5
  272. package/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js +5 -5
  273. package/synchronizers/with-schemas/index.js +5 -5
  274. package/ui-react/index.js +6 -0
  275. package/ui-react/with-schemas/index.js +6 -0
  276. package/ui-react-dom/index.js +91 -6
  277. package/ui-react-dom/with-schemas/index.js +91 -6
  278. package/ui-react-inspector/index.js +248 -84
  279. package/ui-react-inspector/with-schemas/index.js +248 -84
  280. package/with-schemas/index.js +272 -143
@@ -48,7 +48,7 @@ export type CellIsDefaultedFromSchema<
48
48
  Then,
49
49
  Else,
50
50
  > = Schema[TableId][CellId] extends {
51
- default: string | number | boolean;
51
+ default: infer _;
52
52
  }
53
53
  ? Then
54
54
  : Else;
@@ -83,7 +83,7 @@ export type ValueIsDefaultedFromSchema<
83
83
  Then,
84
84
  Else,
85
85
  > = Schema[ValueId] extends {
86
- default: string | number | boolean;
86
+ default: infer _;
87
87
  }
88
88
  ? Then
89
89
  : Else;
@@ -16,6 +16,28 @@ import type {CellOrUndefined, ValueOrUndefined} from '../store/index.d.ts';
16
16
  */
17
17
  export type Json = string;
18
18
 
19
+ /**
20
+ * The AnyObject type is a simple alias for a plain object with string keys and
21
+ * unknown values.
22
+ *
23
+ * It is used to indicate that the value should be considered to be a plain
24
+ * JavaScript object, as can be stored in a Cell or Value with the `object`
25
+ * schema type.
26
+ * @category General
27
+ * @since v8.0.0
28
+ */
29
+ export type AnyObject = {[key: string]: unknown};
30
+
31
+ /**
32
+ * The AnyArray type is a simple alias for an array with unknown values.
33
+ *
34
+ * It is used to indicate that the value should be considered to be a JavaScript
35
+ * array, as can be stored in a Cell or Value with the `array` schema type.
36
+ * @category General
37
+ * @since v8.0.0
38
+ */
39
+ export type AnyArray = unknown[] | readonly unknown[];
40
+
19
41
  /**
20
42
  * The Ids type is a simple alias for an array of strings, but is used to
21
43
  * indicate that the strings should be considered to be the keys of objects
@@ -28,6 +28,28 @@ import type {
28
28
  */
29
29
  export type Json = string;
30
30
 
31
+ /**
32
+ * The AnyObject type is a simple alias for a plain object with string keys and
33
+ * unknown values.
34
+ *
35
+ * It is used to indicate that the value should be considered to be a plain
36
+ * JavaScript object, as can be stored in a Cell or Value with the `object`
37
+ * schema type.
38
+ * @category General
39
+ * @since v8.0.0
40
+ */
41
+ export type AnyObject = {[key: string]: unknown};
42
+
43
+ /**
44
+ * The AnyArray type is a simple alias for an array with unknown values.
45
+ *
46
+ * It is used to indicate that the value should be considered to be a JavaScript
47
+ * array, as can be stored in a Cell or Value with the `array` schema type.
48
+ * @category General
49
+ * @since v8.0.0
50
+ */
51
+ export type AnyArray = unknown[] | readonly unknown[];
52
+
31
53
  /**
32
54
  * The Ids type is a simple alias for an array of strings, but is used to
33
55
  * indicate that the strings should be considered to be the keys of objects
@@ -28,17 +28,17 @@ import type {
28
28
  * The WillSetContentCallback type describes a function that is called before
29
29
  * Content is set in the Store.
30
30
  *
31
- * The callback receives the Content (a [Tables, Values] tuple) that is about
32
- * to be set. It can return the Content (possibly transformed) to allow the
33
- * write, or `undefined` to prevent the Content from being set.
31
+ * The callback receives the Content (a [Tables, Values] tuple) that is about to
32
+ * be set. It can return the Content (possibly transformed) to allow the write,
33
+ * or `undefined` to prevent the Content from being set.
34
34
  *
35
35
  * Multiple WillSetContentCallback functions can be registered and they will be
36
36
  * called sequentially, the Content being updated successively. If any callback
37
37
  * returns `undefined`, the chain short-circuits and the Content will not be
38
38
  * set.
39
39
  * @param content The Content about to be set.
40
- * @returns The Content to use (possibly transformed), or `undefined` to
41
- * prevent the write.
40
+ * @returns The Content to use (possibly transformed), or `undefined` to prevent
41
+ * the write.
42
42
  * @category Callback
43
43
  * @since v8.0.0
44
44
  */
@@ -54,8 +54,7 @@ export type WillSetContentCallback = (content: Content) => Content | undefined;
54
54
  *
55
55
  * Multiple WillSetTablesCallback functions can be registered and they will be
56
56
  * called sequentially, the Tables being updated successively. If any callback
57
- * returns `undefined`, the chain short-circuits and the Tables will not be
58
- * set.
57
+ * returns `undefined`, the chain short-circuits and the Tables will not be set.
59
58
  * @param tables The Tables object about to be set.
60
59
  * @returns The Tables to use (possibly transformed), or `undefined` to prevent
61
60
  * the write.
@@ -216,11 +215,11 @@ export type WillDelTablesCallback = () => boolean;
216
215
  export type WillDelTableCallback = (tableId: Id) => boolean;
217
216
 
218
217
  /**
219
- * The WillDelRowCallback type describes a function that is called before a
220
- * Row is deleted from the Store.
218
+ * The WillDelRowCallback type describes a function that is called before a Row
219
+ * is deleted from the Store.
221
220
  *
222
- * The callback receives the table Id and row Id of the Row about to be
223
- * deleted. It returns `true` to allow the deletion, or `false` to prevent it.
221
+ * The callback receives the table Id and row Id of the Row about to be deleted.
222
+ * It returns `true` to allow the deletion, or `false` to prevent it.
224
223
  *
225
224
  * Multiple WillDelRowCallback functions can be registered and they will be
226
225
  * called sequentially. If any callback returns `false`, the chain
@@ -303,8 +302,8 @@ export type WillDelValueCallback = (valueId: Id) => boolean;
303
302
  * callback returns `undefined`, the chain short-circuits and the Changes will
304
303
  * not be applied.
305
304
  * @param changes The Changes about to be applied.
306
- * @returns The Changes to use (possibly transformed), or `undefined` to
307
- * prevent the write.
305
+ * @returns The Changes to use (possibly transformed), or `undefined` to prevent
306
+ * the write.
308
307
  * @category Callback
309
308
  * @since v8.0.0
310
309
  */
@@ -312,6 +311,49 @@ export type WillApplyChangesCallback = (
312
311
  changes: Changes,
313
312
  ) => Changes | undefined;
314
313
 
314
+ /**
315
+ * The DidSetRowCallback type describes a function called after a Row is changed
316
+ * during a transaction, and after mutator listeners have fired.
317
+ *
318
+ * Unlike the `willSet*` callbacks, which intercept writes as they happen,
319
+ * `didSetRow` fires once per touched Row after all cell writes in the
320
+ * transaction have completed. This means multiple cell changes to the same Row
321
+ * within a single transaction result in just one `didSetRow` call, with the
322
+ * full before-transaction and after-transaction Row states.
323
+ *
324
+ * The callback receives the Table Id, Row Id, the Row as it was at the start of
325
+ * the transaction (`oldRow`), and the Row as it is now (`newRow`). It must
326
+ * return a Row:
327
+ *
328
+ * - `newRow` to accept the changes.
329
+ * - a different `Row` to replace the final state.
330
+ * - `oldRow` to revert all changes to the Row.
331
+ * - an empty object to delete the Row.
332
+ *
333
+ * Multiple DidSetRowCallback functions can be registered for the same table and
334
+ * they will be called sequentially, each receiving the Row returned by the
335
+ * previous callback. The chain never short-circuits: all registered callbacks
336
+ * always run.
337
+ *
338
+ * Note that `addDidSetRowCallback` is table-scoped: you must specify the table
339
+ * Id when registering. Callbacks are only invoked for rows in the specified
340
+ * table, keeping overhead to zero for other tables.
341
+ * @param tableId The Id of the Table containing the changed Row.
342
+ * @param rowId The Id of the Row that was changed.
343
+ * @param oldRow The Row as it was at the start of the transaction.
344
+ * @param newRow The Row as it is now, after all cell writes including those
345
+ * made by mutating listeners.
346
+ * @returns The Row to use as the final state.
347
+ * @category Callback
348
+ * @since v8.0.0
349
+ */
350
+ export type DidSetRowCallback = (
351
+ tableId: Id,
352
+ rowId: Id,
353
+ oldRow: Row,
354
+ newRow: Row,
355
+ ) => Row;
356
+
315
357
  /**
316
358
  * A Middleware object lets you intercept and validate writes to a Store.
317
359
  *
@@ -360,14 +402,13 @@ export interface Middleware {
360
402
  getStore(): Store;
361
403
 
362
404
  /**
363
- * The addWillSetContentCallback method registers a
364
- * WillSetContentCallback that will be called before Content is set in the
365
- * Store.
405
+ * The addWillSetContentCallback method registers a WillSetContentCallback
406
+ * that will be called before Content is set in the Store.
366
407
  *
367
- * The callback can transform the Content or return `undefined` to prevent
368
- * the write. Multiple callbacks can be registered and they are called
369
- * sequentially, each receiving the (possibly transformed) Content from
370
- * the previous callback.
408
+ * The callback can transform the Content or return `undefined` to prevent the
409
+ * write. Multiple callbacks can be registered and they are called
410
+ * sequentially, each receiving the (possibly transformed) Content from the
411
+ * previous callback.
371
412
  * @param callback The WillSetContentCallback to register.
372
413
  * @returns A reference to the Middleware object, for chaining.
373
414
  * @example
@@ -756,9 +797,9 @@ export interface Middleware {
756
797
  * The addWillDelTablesCallback method registers a WillDelTablesCallback that
757
798
  * will be called before all Tables are deleted from the Store.
758
799
  *
759
- * The callback returns `true` to allow the deletion or `false` to prevent
760
- * it. Multiple callbacks can be registered and they are called sequentially.
761
- * If any callback returns `false`, the deletion is prevented.
800
+ * The callback returns `true` to allow the deletion or `false` to prevent it.
801
+ * Multiple callbacks can be registered and they are called sequentially. If
802
+ * any callback returns `false`, the deletion is prevented.
762
803
  * @param callback The WillDelTablesCallback to register.
763
804
  * @returns A reference to the Middleware object, for chaining.
764
805
  * @example
@@ -790,9 +831,9 @@ export interface Middleware {
790
831
  * The addWillDelTableCallback method registers a WillDelTableCallback that
791
832
  * will be called before any Table is deleted from the Store.
792
833
  *
793
- * The callback returns `true` to allow the deletion or `false` to prevent
794
- * it. Multiple callbacks can be registered and they are called sequentially.
795
- * If any callback returns `false`, the deletion is prevented.
834
+ * The callback returns `true` to allow the deletion or `false` to prevent it.
835
+ * Multiple callbacks can be registered and they are called sequentially. If
836
+ * any callback returns `false`, the deletion is prevented.
796
837
  * @param callback The WillDelTableCallback to register.
797
838
  * @returns A reference to the Middleware object, for chaining.
798
839
  * @example
@@ -957,9 +998,9 @@ export interface Middleware {
957
998
  addWillDelValueCallback(callback: WillDelValueCallback): Middleware;
958
999
 
959
1000
  /**
960
- * The addWillApplyChangesCallback method registers a
961
- * WillApplyChangesCallback that will be called before Changes are applied to
962
- * the Store via the applyChanges method.
1001
+ * The addWillApplyChangesCallback method registers a WillApplyChangesCallback
1002
+ * that will be called before Changes are applied to the Store via the
1003
+ * applyChanges method.
963
1004
  *
964
1005
  * This callback receives the Changes object and can return it (to allow),
965
1006
  * return a modified Changes object (to transform), or return `undefined` (to
@@ -1003,6 +1044,87 @@ export interface Middleware {
1003
1044
  */
1004
1045
  addWillApplyChangesCallback(callback: WillApplyChangesCallback): Middleware;
1005
1046
 
1047
+ /**
1048
+ * The addDidSetRowCallback method registers a DidSetRowCallback for a
1049
+ * specific table that will be called after any Row in that table is changed
1050
+ * during a transaction, after mutator listeners have fired.
1051
+ *
1052
+ * Unlike `willSetRow`, which fires synchronously during each write, this
1053
+ * callback fires once per changed Row after all cell writes in the
1054
+ * transaction have landed. Multiple cell changes to the same Row within a
1055
+ * transaction produce a single callback with the full before/after Row
1056
+ * states.
1057
+ *
1058
+ * The callback receives `oldRow` (the Row at the start of the transaction)
1059
+ * and `newRow` (the Row after all writes). Return `newRow` to accept, a
1060
+ * different `Row` to replace, `oldRow` to revert, or an empty object to
1061
+ * delete.
1062
+ * @param tableId The Id of the Table to watch.
1063
+ * @param callback The DidSetRowCallback to register.
1064
+ * @returns A reference to the Middleware object, for chaining.
1065
+ * @example
1066
+ * This example registers a callback that validates the 'pets' table,
1067
+ * reverting any row that ends up without a required 'species' cell.
1068
+ *
1069
+ * ```js
1070
+ * import {createMiddleware, createStore} from 'tinybase';
1071
+ *
1072
+ * const store = createStore();
1073
+ * const middleware = createMiddleware(store);
1074
+ *
1075
+ * middleware.addDidSetRowCallback(
1076
+ * 'pets',
1077
+ * (_tableId, _rowId, oldRow, newRow) =>
1078
+ * 'species' in newRow ? newRow : oldRow,
1079
+ * );
1080
+ *
1081
+ * store.setRow('pets', 'fido', {species: 'dog', name: 'Fido'});
1082
+ * console.log(store.getRow('pets', 'fido'));
1083
+ * // -> {species: 'dog', name: 'Fido'}
1084
+ *
1085
+ * store.setRow('pets', 'nemo', {name: 'Nemo'});
1086
+ * console.log(store.getRow('pets', 'nemo'));
1087
+ * // -> {}
1088
+ *
1089
+ * middleware.destroy();
1090
+ * ```
1091
+ * @example
1092
+ * This example shows that multiple cell changes in one transaction result in
1093
+ * a single didSetRow callback with the full before/after row states.
1094
+ *
1095
+ * ```js
1096
+ * import {createMiddleware, createStore} from 'tinybase';
1097
+ *
1098
+ * const store = createStore();
1099
+ * const middleware = createMiddleware(store);
1100
+ *
1101
+ * const seen = [];
1102
+ * middleware.addDidSetRowCallback(
1103
+ * 'pets',
1104
+ * (_tableId, rowId, oldRow, newRow) => {
1105
+ * seen.push({rowId, oldRow: {...oldRow}, newRow: {...newRow}});
1106
+ * return newRow;
1107
+ * },
1108
+ * );
1109
+ *
1110
+ * store.transaction(() => {
1111
+ * store.setCell('pets', 'fido', 'name', 'Fido');
1112
+ * store.setCell('pets', 'fido', 'species', 'dog');
1113
+ * });
1114
+ * console.log(seen.length);
1115
+ * // -> 1
1116
+ * console.log(seen[0].rowId);
1117
+ * // -> 'fido'
1118
+ * console.log(seen[0].newRow);
1119
+ * // -> {name: 'Fido', species: 'dog'}
1120
+ *
1121
+ * middleware.destroy();
1122
+ * ```
1123
+ * @category Configuration
1124
+ * @since v8.0.0
1125
+ */
1126
+ addDidSetRowCallback(tableId: Id, callback: DidSetRowCallback): Middleware;
1127
+
1006
1128
  /**
1007
1129
  * The destroy method should be called when this Middleware object is no
1008
1130
  * longer used. It removes all hooks and listeners from the Store, and
@@ -40,17 +40,17 @@ import type {
40
40
  * (content: Content) => Content | undefined;
41
41
  * ```
42
42
  *
43
- * The callback receives the Content (a [Tables, Values] tuple) that is about
44
- * to be set. It can return the Content (possibly transformed) to allow the
45
- * write, or `undefined` to prevent the Content from being set.
43
+ * The callback receives the Content (a [Tables, Values] tuple) that is about to
44
+ * be set. It can return the Content (possibly transformed) to allow the write,
45
+ * or `undefined` to prevent the Content from being set.
46
46
  *
47
47
  * Multiple WillSetContentCallback functions can be registered and they will be
48
48
  * called sequentially, the Content being updated successively. If any callback
49
49
  * returns `undefined`, the chain short-circuits and the Content will not be
50
50
  * set.
51
51
  * @param content The Content about to be set.
52
- * @returns The Content to use (possibly transformed), or `undefined` to
53
- * prevent the write.
52
+ * @returns The Content to use (possibly transformed), or `undefined` to prevent
53
+ * the write.
54
54
  * @category Callback
55
55
  * @since v8.0.0
56
56
  */
@@ -74,8 +74,7 @@ export type WillSetContentCallback<Schemas extends OptionalSchemas> = (
74
74
  *
75
75
  * Multiple WillSetTablesCallback functions can be registered and they will be
76
76
  * called sequentially, the Tables being updated successively. If any callback
77
- * returns `undefined`, the chain short-circuits and the Tables will not be
78
- * set.
77
+ * returns `undefined`, the chain short-circuits and the Tables will not be set.
79
78
  * @param tables The Tables object about to be set.
80
79
  * @returns The Tables to use (possibly transformed), or `undefined` to prevent
81
80
  * the write.
@@ -328,8 +327,8 @@ export type WillDelTableCallback<
328
327
  > = (...params: Params | [tableId: never]) => boolean;
329
328
 
330
329
  /**
331
- * The WillDelRowCallback type describes a function that is called before a
332
- * Row is deleted from the Store.
330
+ * The WillDelRowCallback type describes a function that is called before a Row
331
+ * is deleted from the Store.
333
332
  *
334
333
  * This has schema-based typing. The following is a simplified representation:
335
334
  *
@@ -337,8 +336,8 @@ export type WillDelTableCallback<
337
336
  * (tableId: Id, rowId: Id) => boolean;
338
337
  * ```
339
338
  *
340
- * The callback receives the table Id and row Id of the Row about to be
341
- * deleted. It returns `true` to allow the deletion, or `false` to prevent it.
339
+ * The callback receives the table Id and row Id of the Row about to be deleted.
340
+ * It returns `true` to allow the deletion, or `false` to prevent it.
342
341
  *
343
342
  * Multiple WillDelRowCallback functions can be registered and they will be
344
343
  * called sequentially. If any callback returns `false`, the chain
@@ -468,8 +467,8 @@ export type WillDelValueCallback<
468
467
  * callback returns `undefined`, the chain short-circuits and the Changes will
469
468
  * not be applied.
470
469
  * @param changes The Changes about to be applied.
471
- * @returns The Changes to use (possibly transformed), or `undefined` to
472
- * prevent the write.
470
+ * @returns The Changes to use (possibly transformed), or `undefined` to prevent
471
+ * the write.
473
472
  * @category Callback
474
473
  * @since v8.0.0
475
474
  */
@@ -477,6 +476,63 @@ export type WillApplyChangesCallback<Schemas extends OptionalSchemas> = (
477
476
  changes: Changes<Schemas>,
478
477
  ) => Changes<Schemas> | undefined;
479
478
 
479
+ /**
480
+ * The DidSetRowCallback type describes a function called after a Row is changed
481
+ * during a transaction, and after mutator listeners have fired.
482
+ *
483
+ * This has schema-based typing. The following is a simplified representation:
484
+ *
485
+ * ```ts override
486
+ * (
487
+ * tableId: Id,
488
+ * rowId: Id,
489
+ * oldRow: Row,
490
+ * newRow: Row,
491
+ * ) => Row;
492
+ * ```
493
+ *
494
+ * Unlike the `willSet*` callbacks, which intercept writes as they happen,
495
+ * `didSetRow` fires once per touched Row after all cell writes in the
496
+ * transaction have completed. This means multiple cell changes to the same Row
497
+ * within a single transaction result in just one `didSetRow` call, with the
498
+ * full before-transaction and after-transaction Row states.
499
+ *
500
+ * The callback receives the Table Id, Row Id, the Row as it was at the start of
501
+ * the transaction (`oldRow`), and the Row as it is now (`newRow`). It must
502
+ * return a Row:
503
+ *
504
+ * - `newRow` to accept the changes.
505
+ * - a different `Row` to replace the final state.
506
+ * - `oldRow` to revert all changes to the Row.
507
+ * - an empty object to delete the Row.
508
+ *
509
+ * Multiple DidSetRowCallback functions can be registered for the same table and
510
+ * they will be called sequentially, each receiving the Row returned by the
511
+ * previous callback. The chain never short-circuits: all registered callbacks
512
+ * always run.
513
+ *
514
+ * Note that `addDidSetRowCallback` is table-scoped: you must specify the table
515
+ * Id when registering. Callbacks are only invoked for rows in the specified
516
+ * table, keeping overhead to zero for other tables.
517
+ * @param tableId The Id of the Table containing the changed Row.
518
+ * @param rowId The Id of the Row that was changed.
519
+ * @param oldRow The Row as it was at the start of the transaction.
520
+ * @param newRow The Row as it is now, after all cell writes including those
521
+ * made by mutating listeners.
522
+ * @returns The Row to use as the final state.
523
+ * @category Callback
524
+ * @since v8.0.0
525
+ */
526
+ export type DidSetRowCallback<
527
+ Schema extends OptionalTablesSchema,
528
+ TableId extends TableIdFromSchema<Schema>,
529
+ > = (
530
+ tableId: TableId,
531
+ rowId: Id,
532
+ oldRow: Row<Schema, TableId>,
533
+ newRow: Row<Schema, TableId>,
534
+ ) => Row<Schema, TableId>;
535
+
480
536
  /**
481
537
  * A Middleware object lets you intercept and validate writes to a Store.
482
538
  *
@@ -531,9 +587,8 @@ export interface Middleware<in out Schemas extends OptionalSchemas> {
531
587
  getStore(): Store<Schemas>;
532
588
 
533
589
  /**
534
- * The addWillSetContentCallback method registers a
535
- * WillSetContentCallback that will be called before Content is set in the
536
- * Store.
590
+ * The addWillSetContentCallback method registers a WillSetContentCallback
591
+ * that will be called before Content is set in the Store.
537
592
  *
538
593
  * This has schema-based typing. The following is a simplified representation:
539
594
  *
@@ -541,10 +596,10 @@ export interface Middleware<in out Schemas extends OptionalSchemas> {
541
596
  * addWillSetContentCallback(callback: WillSetContentCallback): Middleware;
542
597
  * ```
543
598
  *
544
- * The callback can transform the Content or return `undefined` to prevent
545
- * the write. Multiple callbacks can be registered and they are called
546
- * sequentially, each receiving the (possibly transformed) Content from
547
- * the previous callback.
599
+ * The callback can transform the Content or return `undefined` to prevent the
600
+ * write. Multiple callbacks can be registered and they are called
601
+ * sequentially, each receiving the (possibly transformed) Content from the
602
+ * previous callback.
548
603
  * @param callback The WillSetContentCallback to register.
549
604
  * @returns A reference to the Middleware object, for chaining.
550
605
  * @example
@@ -989,9 +1044,9 @@ export interface Middleware<in out Schemas extends OptionalSchemas> {
989
1044
  * addWillDelTablesCallback(callback: WillDelTablesCallback): Middleware;
990
1045
  * ```
991
1046
  *
992
- * The callback returns `true` to allow the deletion or `false` to prevent
993
- * it. Multiple callbacks can be registered and they are called sequentially.
994
- * If any callback returns `false`, the deletion is prevented.
1047
+ * The callback returns `true` to allow the deletion or `false` to prevent it.
1048
+ * Multiple callbacks can be registered and they are called sequentially. If
1049
+ * any callback returns `false`, the deletion is prevented.
995
1050
  * @param callback The WillDelTablesCallback to register.
996
1051
  * @returns A reference to the Middleware object, for chaining.
997
1052
  * @example
@@ -1031,9 +1086,9 @@ export interface Middleware<in out Schemas extends OptionalSchemas> {
1031
1086
  * addWillDelTableCallback(callback: WillDelTableCallback): Middleware;
1032
1087
  * ```
1033
1088
  *
1034
- * The callback returns `true` to allow the deletion or `false` to prevent
1035
- * it. Multiple callbacks can be registered and they are called sequentially.
1036
- * If any callback returns `false`, the deletion is prevented.
1089
+ * The callback returns `true` to allow the deletion or `false` to prevent it.
1090
+ * Multiple callbacks can be registered and they are called sequentially. If
1091
+ * any callback returns `false`, the deletion is prevented.
1037
1092
  * @param callback The WillDelTableCallback to register.
1038
1093
  * @returns A reference to the Middleware object, for chaining.
1039
1094
  * @example
@@ -1232,9 +1287,9 @@ export interface Middleware<in out Schemas extends OptionalSchemas> {
1232
1287
  ): Middleware<Schemas>;
1233
1288
 
1234
1289
  /**
1235
- * The addWillApplyChangesCallback method registers a
1236
- * WillApplyChangesCallback that will be called before Changes are applied to
1237
- * the Store via the applyChanges method.
1290
+ * The addWillApplyChangesCallback method registers a WillApplyChangesCallback
1291
+ * that will be called before Changes are applied to the Store via the
1292
+ * applyChanges method.
1238
1293
  *
1239
1294
  * This has schema-based typing. The following is a simplified representation:
1240
1295
  *
@@ -1286,6 +1341,96 @@ export interface Middleware<in out Schemas extends OptionalSchemas> {
1286
1341
  callback: WillApplyChangesCallback<Schemas>,
1287
1342
  ): Middleware<Schemas>;
1288
1343
 
1344
+ /**
1345
+ * The addDidSetRowCallback method registers a DidSetRowCallback for a
1346
+ * specific table that will be called after any Row in that table is changed
1347
+ * during a transaction, after mutator listeners have fired.
1348
+ *
1349
+ * This has schema-based typing. The following is a simplified representation:
1350
+ *
1351
+ * ```ts override
1352
+ * addDidSetRowCallback(tableId: Id, callback: DidSetRowCallback): Middleware;
1353
+ * ```
1354
+ *
1355
+ * Unlike `willSetRow`, which fires synchronously during each write, this
1356
+ * callback fires once per changed Row after all cell writes in the
1357
+ * transaction have landed. Multiple cell changes to the same Row within a
1358
+ * transaction produce a single callback with the full before/after Row
1359
+ * states.
1360
+ *
1361
+ * The callback receives `oldRow` (the Row at the start of the transaction)
1362
+ * and `newRow` (the Row after all writes). Return `newRow` to accept, a
1363
+ * different `Row` to replace, `oldRow` to revert, or an empty object to
1364
+ * delete.
1365
+ * @param tableId The Id of the Table to watch.
1366
+ * @param callback The DidSetRowCallback to register.
1367
+ * @returns A reference to the Middleware object, for chaining.
1368
+ * @example
1369
+ * This example registers a callback that validates the 'pets' table,
1370
+ * reverting any row that ends up without a required 'species' cell.
1371
+ *
1372
+ * ```js
1373
+ * import {createMiddleware, createStore} from 'tinybase';
1374
+ *
1375
+ * const store = createStore();
1376
+ * const middleware = createMiddleware(store);
1377
+ *
1378
+ * middleware.addDidSetRowCallback(
1379
+ * 'pets',
1380
+ * (_tableId, _rowId, oldRow, newRow) =>
1381
+ * 'species' in newRow ? newRow : oldRow,
1382
+ * );
1383
+ *
1384
+ * store.setRow('pets', 'fido', {species: 'dog', name: 'Fido'});
1385
+ * console.log(store.getRow('pets', 'fido'));
1386
+ * // -> {species: 'dog', name: 'Fido'}
1387
+ *
1388
+ * store.setRow('pets', 'nemo', {name: 'Nemo'});
1389
+ * console.log(store.getRow('pets', 'nemo'));
1390
+ * // -> {}
1391
+ *
1392
+ * middleware.destroy();
1393
+ * ```
1394
+ * @example
1395
+ * This example shows that multiple cell changes in one transaction result in
1396
+ * a single didSetRow callback with the full before/after row states.
1397
+ *
1398
+ * ```js
1399
+ * import {createMiddleware, createStore} from 'tinybase';
1400
+ *
1401
+ * const store = createStore();
1402
+ * const middleware = createMiddleware(store);
1403
+ *
1404
+ * const seen = [];
1405
+ * middleware.addDidSetRowCallback(
1406
+ * 'pets',
1407
+ * (_tableId, rowId, oldRow, newRow) => {
1408
+ * seen.push({rowId, oldRow: {...oldRow}, newRow: {...newRow}});
1409
+ * return newRow;
1410
+ * },
1411
+ * );
1412
+ *
1413
+ * store.transaction(() => {
1414
+ * store.setCell('pets', 'fido', 'name', 'Fido');
1415
+ * store.setCell('pets', 'fido', 'species', 'dog');
1416
+ * });
1417
+ * console.log(seen.length);
1418
+ * // -> 1
1419
+ * console.log(seen[0].rowId);
1420
+ * // -> 'fido'
1421
+ * console.log(seen[0].newRow);
1422
+ * // -> {name: 'Fido', species: 'dog'}
1423
+ *
1424
+ * middleware.destroy();
1425
+ * ```
1426
+ * @category Configuration
1427
+ * @since v8.0.0
1428
+ */
1429
+ addDidSetRowCallback<TableId extends TableIdFromSchema<Schemas[0]>>(
1430
+ tableId: TableId,
1431
+ callback: DidSetRowCallback<Schemas[0], TableId>,
1432
+ ): Middleware<Schemas>;
1433
+
1289
1434
  /**
1290
1435
  * The destroy method should be called when this Middleware object is no
1291
1436
  * longer used. It removes all hooks and listeners from the Store, and