tinybase 4.1.0-beta.2 → 4.1.0-beta.4

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 (244) 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/common.cjs +1 -1
  7. package/lib/cjs/common.cjs.gz +0 -0
  8. package/lib/cjs/indexes.cjs +1 -1
  9. package/lib/cjs/indexes.cjs.gz +0 -0
  10. package/lib/cjs/metrics.cjs +1 -1
  11. package/lib/cjs/metrics.cjs.gz +0 -0
  12. package/lib/cjs/persisters/persister-browser.cjs +1 -1
  13. package/lib/cjs/persisters/persister-browser.cjs.gz +0 -0
  14. package/lib/cjs/persisters/persister-cr-sqlite-wasm.cjs +1 -1
  15. package/lib/cjs/persisters/persister-cr-sqlite-wasm.cjs.gz +0 -0
  16. package/lib/cjs/persisters/persister-file.cjs +1 -1
  17. package/lib/cjs/persisters/persister-file.cjs.gz +0 -0
  18. package/lib/cjs/persisters/persister-remote.cjs +1 -1
  19. package/lib/cjs/persisters/persister-remote.cjs.gz +0 -0
  20. package/lib/cjs/persisters/persister-sqlite-wasm.cjs +1 -1
  21. package/lib/cjs/persisters/persister-sqlite-wasm.cjs.gz +0 -0
  22. package/lib/cjs/persisters/persister-sqlite3.cjs +1 -1
  23. package/lib/cjs/persisters/persister-sqlite3.cjs.gz +0 -0
  24. package/lib/cjs/queries.cjs +1 -1
  25. package/lib/cjs/queries.cjs.gz +0 -0
  26. package/lib/cjs/relationships.cjs +1 -1
  27. package/lib/cjs/relationships.cjs.gz +0 -0
  28. package/lib/cjs/store.cjs +1 -1
  29. package/lib/cjs/store.cjs.gz +0 -0
  30. package/lib/cjs/tinybase.cjs +1 -1
  31. package/lib/cjs/tinybase.cjs.gz +0 -0
  32. package/lib/cjs/tools.cjs +1 -1
  33. package/lib/cjs/tools.cjs.gz +0 -0
  34. package/lib/cjs/ui-react-dom-debug.cjs +1 -0
  35. package/lib/cjs/ui-react-dom-debug.cjs.gz +0 -0
  36. package/lib/cjs/ui-react-dom.cjs +1 -1
  37. package/lib/cjs/ui-react-dom.cjs.gz +0 -0
  38. package/lib/cjs/ui-react.cjs +1 -1
  39. package/lib/cjs/ui-react.cjs.gz +0 -0
  40. package/lib/cjs-es6/checkpoints.cjs +1 -1
  41. package/lib/cjs-es6/checkpoints.cjs.gz +0 -0
  42. package/lib/cjs-es6/common.cjs +1 -1
  43. package/lib/cjs-es6/common.cjs.gz +0 -0
  44. package/lib/cjs-es6/indexes.cjs +1 -1
  45. package/lib/cjs-es6/indexes.cjs.gz +0 -0
  46. package/lib/cjs-es6/metrics.cjs +1 -1
  47. package/lib/cjs-es6/metrics.cjs.gz +0 -0
  48. package/lib/cjs-es6/persisters/persister-browser.cjs +1 -1
  49. package/lib/cjs-es6/persisters/persister-browser.cjs.gz +0 -0
  50. package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs +1 -1
  51. package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs.gz +0 -0
  52. package/lib/cjs-es6/persisters/persister-file.cjs +1 -1
  53. package/lib/cjs-es6/persisters/persister-file.cjs.gz +0 -0
  54. package/lib/cjs-es6/persisters/persister-remote.cjs +1 -1
  55. package/lib/cjs-es6/persisters/persister-remote.cjs.gz +0 -0
  56. package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs +1 -1
  57. package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs.gz +0 -0
  58. package/lib/cjs-es6/persisters/persister-sqlite3.cjs +1 -1
  59. package/lib/cjs-es6/persisters/persister-sqlite3.cjs.gz +0 -0
  60. package/lib/cjs-es6/queries.cjs +1 -1
  61. package/lib/cjs-es6/queries.cjs.gz +0 -0
  62. package/lib/cjs-es6/relationships.cjs +1 -1
  63. package/lib/cjs-es6/relationships.cjs.gz +0 -0
  64. package/lib/cjs-es6/store.cjs +1 -1
  65. package/lib/cjs-es6/store.cjs.gz +0 -0
  66. package/lib/cjs-es6/tinybase.cjs +1 -1
  67. package/lib/cjs-es6/tinybase.cjs.gz +0 -0
  68. package/lib/cjs-es6/tools.cjs +1 -1
  69. package/lib/cjs-es6/tools.cjs.gz +0 -0
  70. package/lib/cjs-es6/ui-react-dom-debug.cjs +1 -0
  71. package/lib/cjs-es6/ui-react-dom-debug.cjs.gz +0 -0
  72. package/lib/cjs-es6/ui-react-dom.cjs +1 -1
  73. package/lib/cjs-es6/ui-react-dom.cjs.gz +0 -0
  74. package/lib/cjs-es6/ui-react.cjs +1 -1
  75. package/lib/cjs-es6/ui-react.cjs.gz +0 -0
  76. package/lib/common.js +1 -1
  77. package/lib/common.js.gz +0 -0
  78. package/lib/debug/checkpoints.js +7 -7
  79. package/lib/debug/common.js +2 -1
  80. package/lib/debug/indexes.js +10 -9
  81. package/lib/debug/metrics.js +13 -13
  82. package/lib/debug/persisters/persister-browser.js +10 -19
  83. package/lib/debug/persisters/persister-cr-sqlite-wasm.js +6 -15
  84. package/lib/debug/persisters/persister-file.js +10 -19
  85. package/lib/debug/persisters/persister-remote.js +10 -19
  86. package/lib/debug/persisters/persister-sqlite-wasm.js +6 -15
  87. package/lib/debug/persisters/persister-sqlite3.js +6 -15
  88. package/lib/debug/persisters.js +4 -4
  89. package/lib/debug/queries.js +3 -1
  90. package/lib/debug/relationships.js +8 -8
  91. package/lib/debug/store.js +48 -30
  92. package/lib/debug/tinybase.js +53 -34
  93. package/lib/debug/tools.js +14 -13
  94. package/lib/debug/ui-react-dom.js +2269 -72
  95. package/lib/debug/ui-react.js +89 -29
  96. package/lib/es6/checkpoints.js +1 -1
  97. package/lib/es6/checkpoints.js.gz +0 -0
  98. package/lib/es6/common.js +1 -1
  99. package/lib/es6/common.js.gz +0 -0
  100. package/lib/es6/indexes.js +1 -1
  101. package/lib/es6/indexes.js.gz +0 -0
  102. package/lib/es6/metrics.js +1 -1
  103. package/lib/es6/metrics.js.gz +0 -0
  104. package/lib/es6/persisters/persister-browser.js +1 -1
  105. package/lib/es6/persisters/persister-browser.js.gz +0 -0
  106. package/lib/es6/persisters/persister-cr-sqlite-wasm.js +1 -1
  107. package/lib/es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  108. package/lib/es6/persisters/persister-file.js +1 -1
  109. package/lib/es6/persisters/persister-file.js.gz +0 -0
  110. package/lib/es6/persisters/persister-remote.js +1 -1
  111. package/lib/es6/persisters/persister-remote.js.gz +0 -0
  112. package/lib/es6/persisters/persister-sqlite-wasm.js +1 -1
  113. package/lib/es6/persisters/persister-sqlite-wasm.js.gz +0 -0
  114. package/lib/es6/persisters/persister-sqlite3.js +1 -1
  115. package/lib/es6/persisters/persister-sqlite3.js.gz +0 -0
  116. package/lib/es6/queries.js +1 -1
  117. package/lib/es6/queries.js.gz +0 -0
  118. package/lib/es6/relationships.js +1 -1
  119. package/lib/es6/relationships.js.gz +0 -0
  120. package/lib/es6/store.js +1 -1
  121. package/lib/es6/store.js.gz +0 -0
  122. package/lib/es6/tinybase.js +1 -1
  123. package/lib/es6/tinybase.js.gz +0 -0
  124. package/lib/es6/tools.js +1 -1
  125. package/lib/es6/tools.js.gz +0 -0
  126. package/lib/es6/ui-react-dom-debug.js +1 -0
  127. package/lib/es6/ui-react-dom-debug.js.gz +0 -0
  128. package/lib/es6/ui-react-dom.js +1 -1
  129. package/lib/es6/ui-react-dom.js.gz +0 -0
  130. package/lib/es6/ui-react.js +1 -1
  131. package/lib/es6/ui-react.js.gz +0 -0
  132. package/lib/indexes.js +1 -1
  133. package/lib/indexes.js.gz +0 -0
  134. package/lib/metrics.js +1 -1
  135. package/lib/metrics.js.gz +0 -0
  136. package/lib/persisters/persister-browser.js +1 -1
  137. package/lib/persisters/persister-browser.js.gz +0 -0
  138. package/lib/persisters/persister-cr-sqlite-wasm.js +1 -1
  139. package/lib/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  140. package/lib/persisters/persister-file.js +1 -1
  141. package/lib/persisters/persister-file.js.gz +0 -0
  142. package/lib/persisters/persister-remote.js +1 -1
  143. package/lib/persisters/persister-remote.js.gz +0 -0
  144. package/lib/persisters/persister-sqlite-wasm.js +1 -1
  145. package/lib/persisters/persister-sqlite-wasm.js.gz +0 -0
  146. package/lib/persisters/persister-sqlite3.js +1 -1
  147. package/lib/persisters/persister-sqlite3.js.gz +0 -0
  148. package/lib/queries.js +1 -1
  149. package/lib/queries.js.gz +0 -0
  150. package/lib/relationships.js +1 -1
  151. package/lib/relationships.js.gz +0 -0
  152. package/lib/store.js +1 -1
  153. package/lib/store.js.gz +0 -0
  154. package/lib/tinybase.js +1 -1
  155. package/lib/tinybase.js.gz +0 -0
  156. package/lib/tools.js +1 -1
  157. package/lib/tools.js.gz +0 -0
  158. package/lib/types/queries.d.ts +304 -19
  159. package/lib/types/store.d.ts +155 -0
  160. package/lib/types/ui-react-dom.d.ts +402 -16
  161. package/lib/types/ui-react.d.ts +532 -1
  162. package/lib/types/with-schemas/internal/ui-react.d.ts +24 -14
  163. package/lib/types/with-schemas/queries.d.ts +338 -21
  164. package/lib/types/with-schemas/store.d.ts +188 -0
  165. package/lib/types/with-schemas/ui-react-dom.d.ts +435 -24
  166. package/lib/types/with-schemas/ui-react.d.ts +576 -2
  167. package/lib/ui-react-dom.js +1 -1
  168. package/lib/ui-react-dom.js.gz +0 -0
  169. package/lib/ui-react.js +1 -1
  170. package/lib/ui-react.js.gz +0 -0
  171. package/lib/umd/checkpoints.js +1 -1
  172. package/lib/umd/checkpoints.js.gz +0 -0
  173. package/lib/umd/common.js +1 -1
  174. package/lib/umd/common.js.gz +0 -0
  175. package/lib/umd/indexes.js +1 -1
  176. package/lib/umd/indexes.js.gz +0 -0
  177. package/lib/umd/metrics.js +1 -1
  178. package/lib/umd/metrics.js.gz +0 -0
  179. package/lib/umd/persisters/persister-browser.js +1 -1
  180. package/lib/umd/persisters/persister-browser.js.gz +0 -0
  181. package/lib/umd/persisters/persister-cr-sqlite-wasm.js +1 -1
  182. package/lib/umd/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  183. package/lib/umd/persisters/persister-file.js +1 -1
  184. package/lib/umd/persisters/persister-file.js.gz +0 -0
  185. package/lib/umd/persisters/persister-remote.js +1 -1
  186. package/lib/umd/persisters/persister-remote.js.gz +0 -0
  187. package/lib/umd/persisters/persister-sqlite-wasm.js +1 -1
  188. package/lib/umd/persisters/persister-sqlite-wasm.js.gz +0 -0
  189. package/lib/umd/persisters/persister-sqlite3.js +1 -1
  190. package/lib/umd/persisters/persister-sqlite3.js.gz +0 -0
  191. package/lib/umd/queries.js +1 -1
  192. package/lib/umd/queries.js.gz +0 -0
  193. package/lib/umd/relationships.js +1 -1
  194. package/lib/umd/relationships.js.gz +0 -0
  195. package/lib/umd/store.js +1 -1
  196. package/lib/umd/store.js.gz +0 -0
  197. package/lib/umd/tinybase.js +1 -1
  198. package/lib/umd/tinybase.js.gz +0 -0
  199. package/lib/umd/tools.js +1 -1
  200. package/lib/umd/tools.js.gz +0 -0
  201. package/lib/umd/ui-react-dom-debug.js +1 -0
  202. package/lib/umd/ui-react-dom-debug.js.gz +0 -0
  203. package/lib/umd/ui-react-dom.js +1 -1
  204. package/lib/umd/ui-react-dom.js.gz +0 -0
  205. package/lib/umd/ui-react.js +1 -1
  206. package/lib/umd/ui-react.js.gz +0 -0
  207. package/lib/umd-es6/checkpoints.js +1 -1
  208. package/lib/umd-es6/checkpoints.js.gz +0 -0
  209. package/lib/umd-es6/common.js +1 -1
  210. package/lib/umd-es6/common.js.gz +0 -0
  211. package/lib/umd-es6/indexes.js +1 -1
  212. package/lib/umd-es6/indexes.js.gz +0 -0
  213. package/lib/umd-es6/metrics.js +1 -1
  214. package/lib/umd-es6/metrics.js.gz +0 -0
  215. package/lib/umd-es6/persisters/persister-browser.js +1 -1
  216. package/lib/umd-es6/persisters/persister-browser.js.gz +0 -0
  217. package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js +1 -1
  218. package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  219. package/lib/umd-es6/persisters/persister-file.js +1 -1
  220. package/lib/umd-es6/persisters/persister-file.js.gz +0 -0
  221. package/lib/umd-es6/persisters/persister-remote.js +1 -1
  222. package/lib/umd-es6/persisters/persister-remote.js.gz +0 -0
  223. package/lib/umd-es6/persisters/persister-sqlite-wasm.js +1 -1
  224. package/lib/umd-es6/persisters/persister-sqlite-wasm.js.gz +0 -0
  225. package/lib/umd-es6/persisters/persister-sqlite3.js +1 -1
  226. package/lib/umd-es6/persisters/persister-sqlite3.js.gz +0 -0
  227. package/lib/umd-es6/queries.js +1 -1
  228. package/lib/umd-es6/queries.js.gz +0 -0
  229. package/lib/umd-es6/relationships.js +1 -1
  230. package/lib/umd-es6/relationships.js.gz +0 -0
  231. package/lib/umd-es6/store.js +1 -1
  232. package/lib/umd-es6/store.js.gz +0 -0
  233. package/lib/umd-es6/tinybase.js +1 -1
  234. package/lib/umd-es6/tinybase.js.gz +0 -0
  235. package/lib/umd-es6/tools.js +1 -1
  236. package/lib/umd-es6/tools.js.gz +0 -0
  237. package/lib/umd-es6/ui-react-dom-debug.js +1 -0
  238. package/lib/umd-es6/ui-react-dom-debug.js.gz +0 -0
  239. package/lib/umd-es6/ui-react-dom.js +1 -1
  240. package/lib/umd-es6/ui-react-dom.js.gz +0 -0
  241. package/lib/umd-es6/ui-react.js +1 -1
  242. package/lib/umd-es6/ui-react.js.gz +0 -0
  243. package/package.json +18 -17
  244. package/readme.md +3 -3
@@ -19,6 +19,7 @@ const TABLE = 'Table';
19
19
  const TABLES = TABLE + 's';
20
20
  const TABLE_IDS = TABLE + IDS;
21
21
  const ROW = 'Row';
22
+ const ROW_COUNT = ROW + 'Count';
22
23
  const ROW_IDS = ROW + IDS;
23
24
  const SORTED_ROW_IDS = 'Sorted' + ROW + IDS;
24
25
  const CELL = 'Cell';
@@ -28,6 +29,20 @@ const VALUES = VALUE + 's';
28
29
  const VALUE_IDS = VALUE + IDS;
29
30
  const id = (key) => EMPTY_STRING + key;
30
31
 
32
+ const mathMax = Math.max;
33
+ const mathMin = Math.min;
34
+ const isFiniteNumber = isFinite;
35
+ const isInstanceOf = (thing, cls) => thing instanceof cls;
36
+ const isUndefined = (thing) => thing == void 0;
37
+ const ifNotUndefined = (value, then, otherwise) =>
38
+ isUndefined(value) ? otherwise?.() : then(value);
39
+ const isTypeStringOrBoolean = (type) => type == STRING || type == BOOLEAN;
40
+ const isString = (thing) => getTypeOf(thing) == STRING;
41
+ const isFunction = (thing) => getTypeOf(thing) == FUNCTION;
42
+ const isArray = (thing) => Array.isArray(thing);
43
+ const test = (regex, subject) => regex.test(subject);
44
+ const getUndefined = () => void 0;
45
+
31
46
  const arrayHas = (array, value) => array.includes(value);
32
47
  const arrayEvery = (array, cb) => array.every(cb);
33
48
  const arrayIsEqual = (array1, array2) =>
@@ -52,34 +67,6 @@ const arrayPop = (array) => array.pop();
52
67
  const arrayUnshift = (array, ...values) => array.unshift(...values);
53
68
  const arrayShift = (array) => array.shift();
54
69
 
55
- const jsonString = (obj) =>
56
- JSON.stringify(obj, (_key, value) =>
57
- isInstanceOf(value, Map)
58
- ? arrayReduce(
59
- [...value],
60
- (obj2, [key, value2]) => {
61
- obj2[key] = value2;
62
- return obj2;
63
- },
64
- {},
65
- )
66
- : value,
67
- );
68
- const jsonParse = JSON.parse;
69
- const mathMax = Math.max;
70
- const mathMin = Math.min;
71
- const isFiniteNumber = isFinite;
72
- const isInstanceOf = (thing, cls) => thing instanceof cls;
73
- const isUndefined = (thing) => thing == void 0;
74
- const ifNotUndefined = (value, then, otherwise) =>
75
- isUndefined(value) ? otherwise?.() : then(value);
76
- const isTypeStringOrBoolean = (type) => type == STRING || type == BOOLEAN;
77
- const isString = (thing) => getTypeOf(thing) == STRING;
78
- const isFunction = (thing) => getTypeOf(thing) == FUNCTION;
79
- const isArray = (thing) => Array.isArray(thing);
80
- const test = (regex, subject) => regex.test(subject);
81
- const getUndefined = () => void 0;
82
-
83
70
  const object = Object;
84
71
  const objIds = object.keys;
85
72
  const objFrozen = object.isFrozen;
@@ -99,7 +86,7 @@ const objIsEmpty = (obj) => isObject(obj) && objSize(obj) == 0;
99
86
 
100
87
  const collSizeN = (collSizer) => (coll) =>
101
88
  arrayReduce(collValues(coll), (total, coll2) => total + collSizer(coll2), 0);
102
- const collSize = (coll) => coll.size;
89
+ const collSize = (coll) => coll?.size ?? 0;
103
90
  const collSize2 = collSizeN(collSize);
104
91
  const collSize3 = collSizeN(collSize2);
105
92
  const collSize4 = collSizeN(collSize3);
@@ -670,7 +657,8 @@ const createCheckpoints = getCreateFunction((store) => {
670
657
  return objFreeze(checkpoints.clear());
671
658
  });
672
659
 
673
- const defaultSorter = (sortKey1, sortKey2) => (sortKey1 < sortKey2 ? -1 : 1);
660
+ const defaultSorter = (sortKey1, sortKey2) =>
661
+ (sortKey1 ?? 0) < (sortKey2 ?? 0) ? -1 : 1;
674
662
 
675
663
  const createIndexes = getCreateFunction((store) => {
676
664
  const sliceIdsListeners = mapNew();
@@ -1564,6 +1552,7 @@ const createQueries = getCreateFunction((store) => {
1564
1552
  {
1565
1553
  [TABLE]: [1, 1],
1566
1554
  [TABLE + CELL_IDS]: [0, 1],
1555
+ [ROW_COUNT]: [0, 1],
1567
1556
  [ROW_IDS]: [0, 1],
1568
1557
  [SORTED_ROW_IDS]: [0, 5],
1569
1558
  [ROW]: [1, 2],
@@ -1781,6 +1770,12 @@ const pairNewMap = () => [mapNew(), mapNew()];
1781
1770
  const pairClone = (array) => [...array];
1782
1771
  const pairIsEqual = ([entry1, entry2]) => entry1 === entry2;
1783
1772
 
1773
+ const jsonString = (obj) =>
1774
+ JSON.stringify(obj, (_key, value) =>
1775
+ isInstanceOf(value, Map) ? object.fromEntries([...value]) : value,
1776
+ );
1777
+ const jsonParse = JSON.parse;
1778
+
1784
1779
  const validate = (obj, validateChild, onInvalidObj) => {
1785
1780
  if (isUndefined(obj) || !isObject(obj) || objIsEmpty(obj) || objFrozen(obj)) {
1786
1781
  onInvalidObj?.();
@@ -1807,6 +1802,7 @@ const createStore = () => {
1807
1802
  let transactions = 0;
1808
1803
  const changedTableIds = mapNew();
1809
1804
  const changedTableCellIds = mapNew();
1805
+ const changedRowCount = mapNew();
1810
1806
  const changedRowIds = mapNew();
1811
1807
  const changedCellIds = mapNew();
1812
1808
  const changedCells = mapNew();
@@ -1827,6 +1823,7 @@ const createStore = () => {
1827
1823
  const tableIdsListeners = pairNewMap();
1828
1824
  const tableListeners = pairNewMap();
1829
1825
  const tableCellIdsListeners = pairNewMap();
1826
+ const rowCountListeners = pairNewMap();
1830
1827
  const rowIdsListeners = pairNewMap();
1831
1828
  const sortedRowIdsListeners = pairNewMap();
1832
1829
  const rowListeners = pairNewMap();
@@ -2132,6 +2129,11 @@ const createStore = () => {
2132
2129
  mapEnsure(changedRowIds, tableId, mapNew),
2133
2130
  rowId,
2134
2131
  addedOrRemoved,
2132
+ ) &&
2133
+ mapSet(
2134
+ changedRowCount,
2135
+ tableId,
2136
+ mapEnsure(changedRowCount, tableId, () => 0) + addedOrRemoved,
2135
2137
  );
2136
2138
  const cellIdsChanged = (tableId, rowId, cellId, addedOrRemoved) => {
2137
2139
  const cellIds = mapGet(tableCellIds, tableId);
@@ -2238,6 +2240,7 @@ const createStore = () => {
2238
2240
  const emptyIdListeners =
2239
2241
  collIsEmpty(cellIdsListeners[mutator]) &&
2240
2242
  collIsEmpty(tableCellIdsListeners[mutator]) &&
2243
+ collIsEmpty(rowCountListeners[mutator]) &&
2241
2244
  collIsEmpty(rowIdsListeners[mutator]) &&
2242
2245
  emptySortedRowIdListeners &&
2243
2246
  collIsEmpty(tableIdsListeners[mutator]);
@@ -2251,6 +2254,7 @@ const createStore = () => {
2251
2254
  ? [
2252
2255
  mapClone(changedTableIds),
2253
2256
  mapClone2(changedTableCellIds),
2257
+ mapClone(changedRowCount),
2254
2258
  mapClone2(changedRowIds),
2255
2259
  mapClone3(changedCellIds),
2256
2260
  mapClone3(changedCells),
@@ -2258,6 +2262,7 @@ const createStore = () => {
2258
2262
  : [
2259
2263
  changedTableIds,
2260
2264
  changedTableCellIds,
2265
+ changedRowCount,
2261
2266
  changedRowIds,
2262
2267
  changedCellIds,
2263
2268
  changedCells,
@@ -2271,8 +2276,17 @@ const createStore = () => {
2271
2276
  [tableId],
2272
2277
  ),
2273
2278
  );
2279
+ collForEach(changes[2], (changedCount, tableId) => {
2280
+ if (changedCount != 0) {
2281
+ callListeners(
2282
+ rowCountListeners[mutator],
2283
+ [tableId],
2284
+ getRowCount(tableId),
2285
+ );
2286
+ }
2287
+ });
2274
2288
  const calledSortableTableIds = setNew();
2275
- collForEach(changes[2], (changedIds, tableId) => {
2289
+ collForEach(changes[3], (changedIds, tableId) => {
2276
2290
  if (
2277
2291
  callIdsListenersIfChanged(rowIdsListeners[mutator], changedIds, [
2278
2292
  tableId,
@@ -2284,7 +2298,7 @@ const createStore = () => {
2284
2298
  }
2285
2299
  });
2286
2300
  if (!emptySortedRowIdListeners) {
2287
- collForEach(changes[4], (rows, tableId) => {
2301
+ collForEach(changes[5], (rows, tableId) => {
2288
2302
  if (!collHas(calledSortableTableIds, tableId)) {
2289
2303
  const sortableCellIds = setNew();
2290
2304
  collForEach(rows, (cells) =>
@@ -2303,7 +2317,7 @@ const createStore = () => {
2303
2317
  }
2304
2318
  });
2305
2319
  }
2306
- collForEach(changes[3], (rowCellIds, tableId) =>
2320
+ collForEach(changes[4], (rowCellIds, tableId) =>
2307
2321
  collForEach(rowCellIds, (changedIds, rowId) =>
2308
2322
  callIdsListenersIfChanged(cellIdsListeners[mutator], changedIds, [
2309
2323
  tableId,
@@ -2314,7 +2328,7 @@ const createStore = () => {
2314
2328
  }
2315
2329
  if (!emptyOtherListeners) {
2316
2330
  let tablesChanged;
2317
- collForEach(changes[4], (rows, tableId) => {
2331
+ collForEach(changes[5], (rows, tableId) => {
2318
2332
  let tableChanged;
2319
2333
  collForEach(rows, (cells, rowId) => {
2320
2334
  let rowChanged;
@@ -2428,6 +2442,7 @@ const createStore = () => {
2428
2442
  const getTable = (tableId) => mapToObj2(mapGet(tablesMap, id(tableId)));
2429
2443
  const getTableCellIds = (tableId) =>
2430
2444
  mapKeys(mapGet(tableCellIds, id(tableId)));
2445
+ const getRowCount = (tableId) => collSize(mapGet(tablesMap, id(tableId)));
2431
2446
  const getRowIds = (tableId) => mapKeys(mapGet(tablesMap, id(tableId)));
2432
2447
  const getSortedRowIds = (tableId, cellId, descending, offset = 0, limit) =>
2433
2448
  arrayMap(
@@ -2772,6 +2787,7 @@ const createStore = () => {
2772
2787
  [
2773
2788
  changedTableIds,
2774
2789
  changedTableCellIds,
2790
+ changedRowCount,
2775
2791
  changedRowIds,
2776
2792
  changedCellIds,
2777
2793
  changedCells,
@@ -2867,6 +2883,7 @@ const createStore = () => {
2867
2883
  tableIds: pairCollSize2(tableIdsListeners),
2868
2884
  tableCellIds: pairCollSize2(tableCellIdsListeners),
2869
2885
  table: pairCollSize2(tableListeners),
2886
+ rowCount: pairCollSize2(rowCountListeners),
2870
2887
  rowIds: pairCollSize2(rowIdsListeners),
2871
2888
  sortedRowIds: pairCollSize2(sortedRowIdsListeners),
2872
2889
  row: pairCollSize2(rowListeners, collSize3),
@@ -2887,6 +2904,7 @@ const createStore = () => {
2887
2904
  getTableIds,
2888
2905
  getTable,
2889
2906
  getTableCellIds,
2907
+ getRowCount,
2890
2908
  getRowIds,
2891
2909
  getSortedRowIds,
2892
2910
  getRow,
@@ -2957,6 +2975,7 @@ const createStore = () => {
2957
2975
  [TABLE_IDS]: [0, tableIdsListeners],
2958
2976
  [TABLE]: [1, tableListeners, [getTableIds]],
2959
2977
  [TABLE + CELL_IDS]: [1, tableCellIdsListeners, [getTableIds]],
2978
+ [ROW_COUNT]: [1, rowCountListeners, [getTableIds]],
2960
2979
  [ROW_IDS]: [1, rowIdsListeners, [getTableIds]],
2961
2980
  [ROW]: [2, rowListeners, [getTableIds, getRowIds]],
2962
2981
  [CELL_IDS]: [2, cellIdsListeners, [getTableIds, getRowIds]],
@@ -23,19 +23,6 @@ const VALUE = 'Value';
23
23
  const VALUES = VALUE + 's';
24
24
  const VALUE_IDS = VALUE + IDS;
25
25
 
26
- const arrayEvery = (array, cb) => array.every(cb);
27
- const arraySort = (array, sorter) => array.sort(sorter);
28
- const arrayForEach = (array, cb) => array.forEach(cb);
29
- const arrayJoin = (array, sep = EMPTY_STRING) => array.join(sep);
30
- const arrayMap = (array, cb) => array.map(cb);
31
- const arrayLength = (array) => array.length;
32
- const arrayFilter = (array, cb) => array.filter(cb);
33
- const arrayPush = (array, ...values) => array.push(...values);
34
- const arrayPop = (array) => array.pop();
35
- const arrayUnshift = (array, ...values) => array.unshift(...values);
36
- const arrayShift = (array) => array.shift();
37
-
38
- const jsonParse = JSON.parse;
39
26
  const isFiniteNumber = isFinite;
40
27
  const isInstanceOf = (thing, cls) => thing instanceof cls;
41
28
  const isUndefined = (thing) => thing == void 0;
@@ -50,6 +37,18 @@ const getCellOrValueType = (cell) => {
50
37
  : void 0;
51
38
  };
52
39
 
40
+ const arrayEvery = (array, cb) => array.every(cb);
41
+ const arraySort = (array, sorter) => array.sort(sorter);
42
+ const arrayForEach = (array, cb) => array.forEach(cb);
43
+ const arrayJoin = (array, sep = EMPTY_STRING) => array.join(sep);
44
+ const arrayMap = (array, cb) => array.map(cb);
45
+ const arrayLength = (array) => array.length;
46
+ const arrayFilter = (array, cb) => array.filter(cb);
47
+ const arrayPush = (array, ...values) => array.push(...values);
48
+ const arrayPop = (array) => array.pop();
49
+ const arrayUnshift = (array, ...values) => array.unshift(...values);
50
+ const arrayShift = (array) => array.shift();
51
+
53
52
  const object = Object;
54
53
  const objIds = object.keys;
55
54
  const objFreeze = object.freeze;
@@ -2803,6 +2802,8 @@ const getStoreApi = (tablesSchema, valuesSchema, module) => {
2803
2802
  ];
2804
2803
  };
2805
2804
 
2805
+ const jsonParse = JSON.parse;
2806
+
2806
2807
  const prettierConfig = {
2807
2808
  parser: 'typescript',
2808
2809
  singleQuote: true,