tinybase 4.1.0-beta.1 → 4.1.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 (219) hide show
  1. package/bin/cli.js +1 -1
  2. package/lib/checkpoints.js +1 -1
  3. package/lib/checkpoints.js.gz +0 -0
  4. package/lib/cjs/checkpoints.cjs +1 -1
  5. package/lib/cjs/checkpoints.cjs.gz +0 -0
  6. package/lib/cjs/indexes.cjs +1 -1
  7. package/lib/cjs/indexes.cjs.gz +0 -0
  8. package/lib/cjs/metrics.cjs +1 -1
  9. package/lib/cjs/metrics.cjs.gz +0 -0
  10. package/lib/cjs/persisters/persister-browser.cjs +1 -1
  11. package/lib/cjs/persisters/persister-browser.cjs.gz +0 -0
  12. package/lib/cjs/persisters/persister-cr-sqlite-wasm.cjs +1 -1
  13. package/lib/cjs/persisters/persister-cr-sqlite-wasm.cjs.gz +0 -0
  14. package/lib/cjs/persisters/persister-file.cjs +1 -1
  15. package/lib/cjs/persisters/persister-file.cjs.gz +0 -0
  16. package/lib/cjs/persisters/persister-remote.cjs +1 -1
  17. package/lib/cjs/persisters/persister-remote.cjs.gz +0 -0
  18. package/lib/cjs/persisters/persister-sqlite-wasm.cjs +1 -1
  19. package/lib/cjs/persisters/persister-sqlite-wasm.cjs.gz +0 -0
  20. package/lib/cjs/persisters/persister-sqlite3.cjs +1 -1
  21. package/lib/cjs/persisters/persister-sqlite3.cjs.gz +0 -0
  22. package/lib/cjs/queries.cjs +1 -1
  23. package/lib/cjs/queries.cjs.gz +0 -0
  24. package/lib/cjs/relationships.cjs +1 -1
  25. package/lib/cjs/relationships.cjs.gz +0 -0
  26. package/lib/cjs/store.cjs +1 -1
  27. package/lib/cjs/store.cjs.gz +0 -0
  28. package/lib/cjs/tinybase.cjs +1 -1
  29. package/lib/cjs/tinybase.cjs.gz +0 -0
  30. package/lib/cjs/tools.cjs +1 -1
  31. package/lib/cjs/tools.cjs.gz +0 -0
  32. package/lib/cjs/ui-react-dom.cjs +1 -1
  33. package/lib/cjs/ui-react-dom.cjs.gz +0 -0
  34. package/lib/cjs/ui-react.cjs +1 -1
  35. package/lib/cjs/ui-react.cjs.gz +0 -0
  36. package/lib/cjs-es6/checkpoints.cjs +1 -1
  37. package/lib/cjs-es6/checkpoints.cjs.gz +0 -0
  38. package/lib/cjs-es6/indexes.cjs +1 -1
  39. package/lib/cjs-es6/indexes.cjs.gz +0 -0
  40. package/lib/cjs-es6/metrics.cjs +1 -1
  41. package/lib/cjs-es6/metrics.cjs.gz +0 -0
  42. package/lib/cjs-es6/persisters/persister-browser.cjs +1 -1
  43. package/lib/cjs-es6/persisters/persister-browser.cjs.gz +0 -0
  44. package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs +1 -1
  45. package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs.gz +0 -0
  46. package/lib/cjs-es6/persisters/persister-file.cjs +1 -1
  47. package/lib/cjs-es6/persisters/persister-file.cjs.gz +0 -0
  48. package/lib/cjs-es6/persisters/persister-remote.cjs +1 -1
  49. package/lib/cjs-es6/persisters/persister-remote.cjs.gz +0 -0
  50. package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs +1 -1
  51. package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs.gz +0 -0
  52. package/lib/cjs-es6/persisters/persister-sqlite3.cjs +1 -1
  53. package/lib/cjs-es6/persisters/persister-sqlite3.cjs.gz +0 -0
  54. package/lib/cjs-es6/queries.cjs +1 -1
  55. package/lib/cjs-es6/queries.cjs.gz +0 -0
  56. package/lib/cjs-es6/relationships.cjs +1 -1
  57. package/lib/cjs-es6/relationships.cjs.gz +0 -0
  58. package/lib/cjs-es6/store.cjs +1 -1
  59. package/lib/cjs-es6/store.cjs.gz +0 -0
  60. package/lib/cjs-es6/tinybase.cjs +1 -1
  61. package/lib/cjs-es6/tinybase.cjs.gz +0 -0
  62. package/lib/cjs-es6/tools.cjs +1 -1
  63. package/lib/cjs-es6/tools.cjs.gz +0 -0
  64. package/lib/cjs-es6/ui-react-dom.cjs +1 -1
  65. package/lib/cjs-es6/ui-react-dom.cjs.gz +0 -0
  66. package/lib/cjs-es6/ui-react.cjs +1 -1
  67. package/lib/cjs-es6/ui-react.cjs.gz +0 -0
  68. package/lib/debug/checkpoints.js +6 -6
  69. package/lib/debug/indexes.js +7 -7
  70. package/lib/debug/metrics.js +12 -12
  71. package/lib/debug/persisters/persister-browser.js +10 -19
  72. package/lib/debug/persisters/persister-cr-sqlite-wasm.js +6 -15
  73. package/lib/debug/persisters/persister-file.js +10 -19
  74. package/lib/debug/persisters/persister-remote.js +10 -19
  75. package/lib/debug/persisters/persister-sqlite-wasm.js +6 -15
  76. package/lib/debug/persisters/persister-sqlite3.js +6 -15
  77. package/lib/debug/persisters.js +4 -4
  78. package/lib/debug/queries.js +1 -0
  79. package/lib/debug/relationships.js +7 -7
  80. package/lib/debug/store.js +16 -24
  81. package/lib/debug/tinybase.js +21 -28
  82. package/lib/debug/tools.js +14 -13
  83. package/lib/debug/ui-react-dom.js +253 -33
  84. package/lib/debug/ui-react.js +26 -4
  85. package/lib/es6/checkpoints.js +1 -1
  86. package/lib/es6/checkpoints.js.gz +0 -0
  87. package/lib/es6/indexes.js +1 -1
  88. package/lib/es6/indexes.js.gz +0 -0
  89. package/lib/es6/metrics.js +1 -1
  90. package/lib/es6/metrics.js.gz +0 -0
  91. package/lib/es6/persisters/persister-browser.js +1 -1
  92. package/lib/es6/persisters/persister-browser.js.gz +0 -0
  93. package/lib/es6/persisters/persister-cr-sqlite-wasm.js +1 -1
  94. package/lib/es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  95. package/lib/es6/persisters/persister-file.js +1 -1
  96. package/lib/es6/persisters/persister-file.js.gz +0 -0
  97. package/lib/es6/persisters/persister-remote.js +1 -1
  98. package/lib/es6/persisters/persister-remote.js.gz +0 -0
  99. package/lib/es6/persisters/persister-sqlite-wasm.js +1 -1
  100. package/lib/es6/persisters/persister-sqlite-wasm.js.gz +0 -0
  101. package/lib/es6/persisters/persister-sqlite3.js +1 -1
  102. package/lib/es6/persisters/persister-sqlite3.js.gz +0 -0
  103. package/lib/es6/queries.js +1 -1
  104. package/lib/es6/queries.js.gz +0 -0
  105. package/lib/es6/relationships.js +1 -1
  106. package/lib/es6/relationships.js.gz +0 -0
  107. package/lib/es6/store.js +1 -1
  108. package/lib/es6/store.js.gz +0 -0
  109. package/lib/es6/tinybase.js +1 -1
  110. package/lib/es6/tinybase.js.gz +0 -0
  111. package/lib/es6/tools.js +1 -1
  112. package/lib/es6/tools.js.gz +0 -0
  113. package/lib/es6/ui-react-dom.js +1 -1
  114. package/lib/es6/ui-react-dom.js.gz +0 -0
  115. package/lib/es6/ui-react.js +1 -1
  116. package/lib/es6/ui-react.js.gz +0 -0
  117. package/lib/indexes.js +1 -1
  118. package/lib/indexes.js.gz +0 -0
  119. package/lib/metrics.js +1 -1
  120. package/lib/metrics.js.gz +0 -0
  121. package/lib/persisters/persister-browser.js +1 -1
  122. package/lib/persisters/persister-browser.js.gz +0 -0
  123. package/lib/persisters/persister-cr-sqlite-wasm.js +1 -1
  124. package/lib/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  125. package/lib/persisters/persister-file.js +1 -1
  126. package/lib/persisters/persister-file.js.gz +0 -0
  127. package/lib/persisters/persister-remote.js +1 -1
  128. package/lib/persisters/persister-remote.js.gz +0 -0
  129. package/lib/persisters/persister-sqlite-wasm.js +1 -1
  130. package/lib/persisters/persister-sqlite-wasm.js.gz +0 -0
  131. package/lib/persisters/persister-sqlite3.js +1 -1
  132. package/lib/persisters/persister-sqlite3.js.gz +0 -0
  133. package/lib/queries.js +1 -1
  134. package/lib/queries.js.gz +0 -0
  135. package/lib/relationships.js +1 -1
  136. package/lib/relationships.js.gz +0 -0
  137. package/lib/store.js +1 -1
  138. package/lib/store.js.gz +0 -0
  139. package/lib/tinybase.js +1 -1
  140. package/lib/tinybase.js.gz +0 -0
  141. package/lib/tools.js +1 -1
  142. package/lib/tools.js.gz +0 -0
  143. package/lib/types/queries.d.ts +167 -0
  144. package/lib/types/ui-react-dom.d.ts +568 -70
  145. package/lib/types/ui-react.d.ts +269 -58
  146. package/lib/types/with-schemas/internal/ui-react.d.ts +32 -22
  147. package/lib/types/with-schemas/queries.d.ts +185 -0
  148. package/lib/types/with-schemas/ui-react-dom.d.ts +647 -93
  149. package/lib/types/with-schemas/ui-react.d.ts +281 -50
  150. package/lib/ui-react-dom.js +1 -1
  151. package/lib/ui-react-dom.js.gz +0 -0
  152. package/lib/ui-react.js +1 -1
  153. package/lib/ui-react.js.gz +0 -0
  154. package/lib/umd/checkpoints.js +1 -1
  155. package/lib/umd/checkpoints.js.gz +0 -0
  156. package/lib/umd/indexes.js +1 -1
  157. package/lib/umd/indexes.js.gz +0 -0
  158. package/lib/umd/metrics.js +1 -1
  159. package/lib/umd/metrics.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-file.js +1 -1
  165. package/lib/umd/persisters/persister-file.js.gz +0 -0
  166. package/lib/umd/persisters/persister-remote.js +1 -1
  167. package/lib/umd/persisters/persister-remote.js.gz +0 -0
  168. package/lib/umd/persisters/persister-sqlite-wasm.js +1 -1
  169. package/lib/umd/persisters/persister-sqlite-wasm.js.gz +0 -0
  170. package/lib/umd/persisters/persister-sqlite3.js +1 -1
  171. package/lib/umd/persisters/persister-sqlite3.js.gz +0 -0
  172. package/lib/umd/queries.js +1 -1
  173. package/lib/umd/queries.js.gz +0 -0
  174. package/lib/umd/relationships.js +1 -1
  175. package/lib/umd/relationships.js.gz +0 -0
  176. package/lib/umd/store.js +1 -1
  177. package/lib/umd/store.js.gz +0 -0
  178. package/lib/umd/tinybase.js +1 -1
  179. package/lib/umd/tinybase.js.gz +0 -0
  180. package/lib/umd/tools.js +1 -1
  181. package/lib/umd/tools.js.gz +0 -0
  182. package/lib/umd/ui-react-dom.js +1 -1
  183. package/lib/umd/ui-react-dom.js.gz +0 -0
  184. package/lib/umd/ui-react.js +1 -1
  185. package/lib/umd/ui-react.js.gz +0 -0
  186. package/lib/umd-es6/checkpoints.js +1 -1
  187. package/lib/umd-es6/checkpoints.js.gz +0 -0
  188. package/lib/umd-es6/indexes.js +1 -1
  189. package/lib/umd-es6/indexes.js.gz +0 -0
  190. package/lib/umd-es6/metrics.js +1 -1
  191. package/lib/umd-es6/metrics.js.gz +0 -0
  192. package/lib/umd-es6/persisters/persister-browser.js +1 -1
  193. package/lib/umd-es6/persisters/persister-browser.js.gz +0 -0
  194. package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js +1 -1
  195. package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.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-remote.js +1 -1
  199. package/lib/umd-es6/persisters/persister-remote.js.gz +0 -0
  200. package/lib/umd-es6/persisters/persister-sqlite-wasm.js +1 -1
  201. package/lib/umd-es6/persisters/persister-sqlite-wasm.js.gz +0 -0
  202. package/lib/umd-es6/persisters/persister-sqlite3.js +1 -1
  203. package/lib/umd-es6/persisters/persister-sqlite3.js.gz +0 -0
  204. package/lib/umd-es6/queries.js +1 -1
  205. package/lib/umd-es6/queries.js.gz +0 -0
  206. package/lib/umd-es6/relationships.js +1 -1
  207. package/lib/umd-es6/relationships.js.gz +0 -0
  208. package/lib/umd-es6/store.js +1 -1
  209. package/lib/umd-es6/store.js.gz +0 -0
  210. package/lib/umd-es6/tinybase.js +1 -1
  211. package/lib/umd-es6/tinybase.js.gz +0 -0
  212. package/lib/umd-es6/tools.js +1 -1
  213. package/lib/umd-es6/tools.js.gz +0 -0
  214. package/lib/umd-es6/ui-react-dom.js +1 -1
  215. package/lib/umd-es6/ui-react-dom.js.gz +0 -0
  216. package/lib/umd-es6/ui-react.js +1 -1
  217. package/lib/umd-es6/ui-react.js.gz +0 -0
  218. package/package.json +17 -17
  219. package/readme.md +2 -2
@@ -284,6 +284,37 @@ export type ResultTableListener<Schemas extends OptionalSchemas> = (
284
284
  getCellChange: GetCellResultChange,
285
285
  ) => void;
286
286
 
287
+ /**
288
+ * The ResultTableCellIdsListener type describes a function that is used to
289
+ * listen to changes to the Cell Ids that appear anywhere in a query's
290
+ * ResultTable.
291
+ *
292
+ * This has schema-based typing. The following is a simplified representation:
293
+ *
294
+ * ```ts override
295
+ * (
296
+ * queries: Queries,
297
+ * tableId: Id,
298
+ * ) => void;
299
+ * ```
300
+ *
301
+ * A ResultTableCellIdsListener is provided when using the
302
+ * addResultTableCellIdsListener method. See that method for specific examples.
303
+ *
304
+ * When called, a ResultTableCellIdsListener is given a reference to the Queries
305
+ * object, and the Id of the ResultTable whose Cell Ids changed (which is the
306
+ * same as the query Id).
307
+ * @param queries A reference to the Queries object that changed.
308
+ * @param tableId The Id of the ResultTable that changed, which is also the
309
+ * query Id.
310
+ * @category Listener
311
+ * @since v4.1.0
312
+ */
313
+ export type ResultTableCellIdsListener<Schemas extends OptionalSchemas> = (
314
+ queries: Queries<Schemas>,
315
+ tableId: Id,
316
+ ) => void;
317
+
287
318
  /**
288
319
  * The ResultRowIdsListener type describes a function that is used to listen to
289
320
  * changes to the ResultRow Ids in a query's ResultTable.
@@ -2034,6 +2065,51 @@ export interface Queries<in out Schemas extends OptionalSchemas> {
2034
2065
  */
2035
2066
  getResultTable(queryId: Id): ResultTable;
2036
2067
 
2068
+ /**
2069
+ * The getResultTableCellIds method returns the Ids of every ResultCell used
2070
+ * across the ResultTable of the given query.
2071
+ *
2072
+ * This has the same behavior as a Store's getTableCellIds method. For
2073
+ * example, if the query Id is invalid, the method returns an empty array.
2074
+ * Similarly, it returns a copy of, rather than a reference to the list of
2075
+ * Ids, so changes made to the list object are not made to the query results
2076
+ * themselves.
2077
+ * @param queryId The Id of a query.
2078
+ * @returns An array of the Ids of every ResultCell used across the
2079
+ * ResultTable of the query.
2080
+ * @example
2081
+ * This example creates a Queries object, a single query definition, and then
2082
+ * calls this method on it (as well as a non-existent definition) to get the
2083
+ * ResultCell Ids.
2084
+ *
2085
+ * ```js
2086
+ * const store = createStore().setTable('pets', {
2087
+ * fido: {species: 'dog', color: 'brown'},
2088
+ * felix: {species: 'cat', color: 'black'},
2089
+ * cujo: {species: 'dog', color: 'black', legs: 4},
2090
+ * });
2091
+ *
2092
+ * const queries = createQueries(store).setQueryDefinition(
2093
+ * 'dogColors',
2094
+ * 'pets',
2095
+ * ({select, where}) => {
2096
+ * select('color');
2097
+ * select('legs');
2098
+ * where('species', 'dog');
2099
+ * },
2100
+ * );
2101
+ *
2102
+ * console.log(queries.getResultTableCellIds('dogColors'));
2103
+ * // -> ['color', 'legs']
2104
+ *
2105
+ * console.log(queries.getResultTableCellIds('catColors'));
2106
+ * // -> []
2107
+ * ```
2108
+ * @category Result
2109
+ * @since v4.1.0
2110
+ */
2111
+ getResultTableCellIds(queryId: Id): Ids;
2112
+
2037
2113
  /**
2038
2114
  * The getResultRowIds method returns the Ids of every ResultRow in the
2039
2115
  * ResultTable of the given query.
@@ -2616,6 +2692,115 @@ export interface Queries<in out Schemas extends OptionalSchemas> {
2616
2692
  listener: ResultTableListener<Schemas>,
2617
2693
  ): Id;
2618
2694
 
2695
+ /**
2696
+ * The addResultTableCellIdsListener method registers a listener function with
2697
+ * the Queries object that will be called whenever the Cell Ids that
2698
+ * appear anywhere in a ResultTable change.
2699
+ *
2700
+ * This has schema-based typing. The following is a simplified representation:
2701
+ *
2702
+ * ```ts override
2703
+ * addResultTableCellIdsListener(
2704
+ * queryId: IdOrNull,
2705
+ * listener: ResultTableCellIdsListener,
2706
+ * ): Id;
2707
+ * ```
2708
+ *
2709
+ * The provided listener is a ResultTableCellIdsListener function, and will be
2710
+ * called with a reference to the Queries object and the Id of the ResultTable
2711
+ * that changed (which is also the query Id).
2712
+ *
2713
+ * By default, such a listener is only called when a Cell Id is added
2714
+ * to, or removed from, the ResultTable. To listen to all changes in the
2715
+ * ResultTable, use the addResultTableListener method.
2716
+ *
2717
+ * You can either listen to a single ResultTable (by specifying a query Id as
2718
+ * the method's first parameter) or changes to any ResultTable (by providing a
2719
+ * `null` wildcard).
2720
+ * @param queryId The Id of the query to listen to, or `null` as a wildcard.
2721
+ * @param listener The function that will be called whenever the Cell
2722
+ * Ids that appear anywhere in the ResultTable change.
2723
+ * @returns A unique Id for the listener that can later be used to remove it.
2724
+ * @example
2725
+ * This example registers a listener that responds to any change to the
2726
+ * Cell Ids of a specific ResultTable.
2727
+ *
2728
+ * ```js
2729
+ * const store = createStore().setTable('pets', {
2730
+ * fido: {species: 'dog', color: 'brown'},
2731
+ * felix: {species: 'cat', color: 'black'},
2732
+ * cujo: {species: 'dog', color: 'black'},
2733
+ * });
2734
+ *
2735
+ * const queries = createQueries(store).setQueryDefinition(
2736
+ * 'dogColorsAndLegs',
2737
+ * 'pets',
2738
+ * ({select, where}) => {
2739
+ * select('color');
2740
+ * select('legs');
2741
+ * where('species', 'dog');
2742
+ * },
2743
+ * );
2744
+ *
2745
+ * const listenerId = queries.addResultTableCellIdsListener(
2746
+ * 'dogColorsAndLegs',
2747
+ * (queries, tableId) => {
2748
+ * console.log(`Cell Ids for dogColorsAndLegs result table changed`);
2749
+ * console.log(queries.getResultTableCellIds('dogColorsAndLegs'));
2750
+ * },
2751
+ * );
2752
+ *
2753
+ * store.setCell('pets', 'cujo', 'legs', 4);
2754
+ * // -> 'Cell Ids for dogColorsAndLegs result table changed'
2755
+ * // -> ['color', 'legs']
2756
+ *
2757
+ * store.delListener(listenerId);
2758
+ * ```
2759
+ * @example
2760
+ * This example registers a listener that responds to any change to the
2761
+ * ResultCell Ids of any ResultTable.
2762
+ *
2763
+ * ```js
2764
+ * const store = createStore().setTable('pets', {
2765
+ * fido: {species: 'dog', color: 'brown'},
2766
+ * felix: {species: 'cat', color: 'black', legs: 4},
2767
+ * cujo: {species: 'dog', color: 'black'},
2768
+ * });
2769
+ *
2770
+ * const queries = createQueries(store)
2771
+ * .setQueryDefinition('dogColorsAndLegs', 'pets', ({select, where}) => {
2772
+ * select('color');
2773
+ * select('legs');
2774
+ * where('species', 'dog');
2775
+ * })
2776
+ * .setQueryDefinition('catColorsAndLegs', 'pets', ({select, where}) => {
2777
+ * select('color');
2778
+ * select('legs');
2779
+ * where('species', 'cat');
2780
+ * });
2781
+ *
2782
+ * const listenerId = queries.addResultTableCellIdsListener(
2783
+ * null,
2784
+ * (queries, tableId) => {
2785
+ * console.log(`Cell Ids for ${tableId} result table changed`);
2786
+ * },
2787
+ * );
2788
+ *
2789
+ * store.setCell('pets', 'cujo', 'legs', 4);
2790
+ * // -> 'Cell Ids for dogColorsAndLegs result table changed'
2791
+ * store.delCell('pets', 'felix', 'legs');
2792
+ * // -> 'Cell Ids for catColorsAndLegs result table changed'
2793
+ *
2794
+ * store.delListener(listenerId);
2795
+ * ```
2796
+ * @category Listener
2797
+ * @since v2.0.0
2798
+ */
2799
+ addResultTableCellIdsListener(
2800
+ queryId: IdOrNull,
2801
+ listener: ResultTableCellIdsListener<Schemas>,
2802
+ ): Id;
2803
+
2619
2804
  /**
2620
2805
  * The addResultRowIdsListener method registers a listener function with the
2621
2806
  * Queries object that will be called whenever the ResultRow Ids in a