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
@@ -749,6 +749,7 @@ const createQueries = getCreateFunction((store) => {
749
749
  objMap(
750
750
  {
751
751
  [TABLE]: [1, 1],
752
+ [TABLE + CELL_IDS]: [0, 1],
752
753
  [ROW_IDS]: [0, 1],
753
754
  [SORTED_ROW_IDS]: [0, 5],
754
755
  [ROW]: [1, 2],
@@ -2,6 +2,13 @@ const getTypeOf = (thing) => typeof thing;
2
2
  const EMPTY_STRING = '';
3
3
  const STRING = getTypeOf(EMPTY_STRING);
4
4
 
5
+ const isUndefined = (thing) => thing == void 0;
6
+ const ifNotUndefined = (value, then, otherwise) =>
7
+ isUndefined(value) ? otherwise?.() : then(value);
8
+ const isString = (thing) => getTypeOf(thing) == STRING;
9
+ const isArray = (thing) => Array.isArray(thing);
10
+ const test = (regex, subject) => regex.test(subject);
11
+
5
12
  const arrayEvery = (array, cb) => array.every(cb);
6
13
  const arrayIsEqual = (array1, array2) =>
7
14
  arrayLength(array1) === arrayLength(array2) &&
@@ -13,13 +20,6 @@ const arrayReduce = (array, cb, initial) => array.reduce(cb, initial);
13
20
  const arrayPush = (array, ...values) => array.push(...values);
14
21
  const arrayShift = (array) => array.shift();
15
22
 
16
- const isUndefined = (thing) => thing == void 0;
17
- const ifNotUndefined = (value, then, otherwise) =>
18
- isUndefined(value) ? otherwise?.() : then(value);
19
- const isString = (thing) => getTypeOf(thing) == STRING;
20
- const isArray = (thing) => Array.isArray(thing);
21
- const test = (regex, subject) => regex.test(subject);
22
-
23
23
  const object = Object;
24
24
  const objFreeze = object.freeze;
25
25
 
@@ -21,6 +21,16 @@ const VALUES = VALUE + 's';
21
21
  const VALUE_IDS = VALUE + IDS;
22
22
  const id = (key) => EMPTY_STRING + key;
23
23
 
24
+ const isFiniteNumber = isFinite;
25
+ const isInstanceOf = (thing, cls) => thing instanceof cls;
26
+ const isUndefined = (thing) => thing == void 0;
27
+ const ifNotUndefined = (value, then, otherwise) =>
28
+ isUndefined(value) ? otherwise?.() : then(value);
29
+ const isTypeStringOrBoolean = (type) => type == STRING || type == BOOLEAN;
30
+ const isFunction = (thing) => getTypeOf(thing) == FUNCTION;
31
+ const isArray = (thing) => Array.isArray(thing);
32
+ const test = (regex, subject) => regex.test(subject);
33
+
24
34
  const arrayHas = (array, value) => array.includes(value);
25
35
  const arrayEvery = (array, cb) => array.every(cb);
26
36
  const arrayIsEqual = (array1, array2) =>
@@ -35,30 +45,6 @@ const arraySlice = (array, start, end) => array.slice(start, end);
35
45
  const arrayPush = (array, ...values) => array.push(...values);
36
46
  const arrayShift = (array) => array.shift();
37
47
 
38
- const jsonString = (obj) =>
39
- JSON.stringify(obj, (_key, value) =>
40
- isInstanceOf(value, Map)
41
- ? arrayReduce(
42
- [...value],
43
- (obj2, [key, value2]) => {
44
- obj2[key] = value2;
45
- return obj2;
46
- },
47
- {},
48
- )
49
- : value,
50
- );
51
- const jsonParse = JSON.parse;
52
- const isFiniteNumber = isFinite;
53
- const isInstanceOf = (thing, cls) => thing instanceof cls;
54
- const isUndefined = (thing) => thing == void 0;
55
- const ifNotUndefined = (value, then, otherwise) =>
56
- isUndefined(value) ? otherwise?.() : then(value);
57
- const isTypeStringOrBoolean = (type) => type == STRING || type == BOOLEAN;
58
- const isFunction = (thing) => getTypeOf(thing) == FUNCTION;
59
- const isArray = (thing) => Array.isArray(thing);
60
- const test = (regex, subject) => regex.test(subject);
61
-
62
48
  const object = Object;
63
49
  const objIds = object.keys;
64
50
  const objFrozen = object.isFrozen;
@@ -269,6 +255,12 @@ const setOrDelCell = (store, tableId, rowId, cellId, cell) =>
269
255
  const setOrDelValue = (store, valueId, value) =>
270
256
  isUndefined(value) ? store.delValue(valueId) : store.setValue(valueId, value);
271
257
 
258
+ const jsonString = (obj) =>
259
+ JSON.stringify(obj, (_key, value) =>
260
+ isInstanceOf(value, Map) ? object.fromEntries([...value]) : value,
261
+ );
262
+ const jsonParse = JSON.parse;
263
+
272
264
  const defaultSorter = (sortKey1, sortKey2) => (sortKey1 < sortKey2 ? -1 : 1);
273
265
 
274
266
  const validate = (obj, validateChild, onInvalidObj) => {
@@ -28,6 +28,20 @@ const VALUES = VALUE + 's';
28
28
  const VALUE_IDS = VALUE + IDS;
29
29
  const id = (key) => EMPTY_STRING + key;
30
30
 
31
+ const mathMax = Math.max;
32
+ const mathMin = Math.min;
33
+ const isFiniteNumber = isFinite;
34
+ const isInstanceOf = (thing, cls) => thing instanceof cls;
35
+ const isUndefined = (thing) => thing == void 0;
36
+ const ifNotUndefined = (value, then, otherwise) =>
37
+ isUndefined(value) ? otherwise?.() : then(value);
38
+ const isTypeStringOrBoolean = (type) => type == STRING || type == BOOLEAN;
39
+ const isString = (thing) => getTypeOf(thing) == STRING;
40
+ const isFunction = (thing) => getTypeOf(thing) == FUNCTION;
41
+ const isArray = (thing) => Array.isArray(thing);
42
+ const test = (regex, subject) => regex.test(subject);
43
+ const getUndefined = () => void 0;
44
+
31
45
  const arrayHas = (array, value) => array.includes(value);
32
46
  const arrayEvery = (array, cb) => array.every(cb);
33
47
  const arrayIsEqual = (array1, array2) =>
@@ -52,34 +66,6 @@ const arrayPop = (array) => array.pop();
52
66
  const arrayUnshift = (array, ...values) => array.unshift(...values);
53
67
  const arrayShift = (array) => array.shift();
54
68
 
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
69
  const object = Object;
84
70
  const objIds = object.keys;
85
71
  const objFrozen = object.isFrozen;
@@ -1563,6 +1549,7 @@ const createQueries = getCreateFunction((store) => {
1563
1549
  objMap(
1564
1550
  {
1565
1551
  [TABLE]: [1, 1],
1552
+ [TABLE + CELL_IDS]: [0, 1],
1566
1553
  [ROW_IDS]: [0, 1],
1567
1554
  [SORTED_ROW_IDS]: [0, 5],
1568
1555
  [ROW]: [1, 2],
@@ -1780,6 +1767,12 @@ const pairNewMap = () => [mapNew(), mapNew()];
1780
1767
  const pairClone = (array) => [...array];
1781
1768
  const pairIsEqual = ([entry1, entry2]) => entry1 === entry2;
1782
1769
 
1770
+ const jsonString = (obj) =>
1771
+ JSON.stringify(obj, (_key, value) =>
1772
+ isInstanceOf(value, Map) ? object.fromEntries([...value]) : value,
1773
+ );
1774
+ const jsonParse = JSON.parse;
1775
+
1783
1776
  const validate = (obj, validateChild, onInvalidObj) => {
1784
1777
  if (isUndefined(obj) || !isObject(obj) || objIsEmpty(obj) || objFrozen(obj)) {
1785
1778
  onInvalidObj?.();
@@ -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,
@@ -1,26 +1,60 @@
1
1
  import {
2
+ CellView,
2
3
  useRowIds,
4
+ useTableCellIds,
3
5
  useSortedRowIds,
4
6
  useValueIds,
5
7
  ValueView,
6
- useTableCellIds,
7
- CellView,
8
+ ResultCellView,
9
+ useResultRowIds,
10
+ useResultTableCellIds,
11
+ useResultSortedRowIds,
12
+ useCell,
13
+ useSetCellCallback,
14
+ useValue,
15
+ useSetValueCallback,
8
16
  } from './ui-react';
9
17
  import React from 'react';
10
18
 
19
+ const getTypeOf = (thing) => typeof thing;
11
20
  const EMPTY_STRING = '';
21
+ const STRING = getTypeOf(EMPTY_STRING);
22
+ const BOOLEAN = getTypeOf(true);
23
+ const NUMBER = getTypeOf(0);
24
+ const CELL = 'Cell';
12
25
  const VALUE = 'Value';
26
+ const CURRENT_TARGET = 'currentTarget';
27
+ const _VALUE = 'value';
28
+
29
+ const isFiniteNumber = isFinite;
30
+ const isUndefined = (thing) => thing == void 0;
31
+ const isTypeStringOrBoolean = (type) => type == STRING || type == BOOLEAN;
32
+ const isString = (thing) => getTypeOf(thing) == STRING;
33
+ const isArray = (thing) => Array.isArray(thing);
34
+
35
+ const getCellOrValueType = (cell) => {
36
+ const type = getTypeOf(cell);
37
+ return isTypeStringOrBoolean(type) || (type == NUMBER && isFiniteNumber(cell))
38
+ ? type
39
+ : void 0;
40
+ };
41
+ const getTypeCase = (type, stringCase, numberCase, booleanCase) =>
42
+ type == STRING ? stringCase : type == NUMBER ? numberCase : booleanCase;
13
43
 
14
44
  const arrayMap = (array, cb) => array.map(cb);
15
45
 
16
- const isUndefined = (thing) => thing == void 0;
46
+ const object = Object;
47
+ const objNew = (entries = []) => object.fromEntries(entries);
48
+ const objMap = (obj, cb) =>
49
+ arrayMap(object.entries(obj), ([id, value]) => cb(value, id));
17
50
 
18
51
  const {createContext, useContext} = React;
19
52
  createContext([]);
20
53
  const getProps = (getProps2, ...ids) =>
21
54
  isUndefined(getProps2) ? {} : getProps2(...ids);
22
55
 
23
- const {createElement, useCallback, useState} = React;
56
+ const {createElement, useCallback, useMemo, useState} = React;
57
+ const EDITABLE = 'editable';
24
58
  const useCallbackOrUndefined = (callback, deps, test) => {
25
59
  const returnCallback = useCallback(callback, deps);
26
60
  return test ? returnCallback : void 0;
@@ -50,20 +84,36 @@ const HtmlHeaderTh = ({
50
84
  label,
51
85
  );
52
86
  const HtmlTable = ({
53
- tableId,
54
- rowIds,
55
- store,
56
- cellComponent: Cell = CellView,
57
- getCellComponentProps,
58
87
  className,
59
88
  headerRow,
60
89
  idColumn,
61
- customCellIds,
90
+ customCells,
91
+ storeTableIdOrQueriesQueryId,
92
+ defaultCellComponent,
93
+ rowIds,
94
+ defaultCellIds,
62
95
  sorting,
63
96
  onHeaderThClick,
64
97
  }) => {
65
- const defaultCellIds = useTableCellIds(tableId, store);
66
- const cellIds = customCellIds ?? defaultCellIds;
98
+ const customCellConfigurations = useMemo(() => {
99
+ const cellIds = customCells ?? defaultCellIds;
100
+ return objNew(
101
+ objMap(
102
+ isArray(cellIds)
103
+ ? objNew(arrayMap(cellIds, (cellId) => [cellId, cellId]))
104
+ : cellIds,
105
+ (labelOrCustomCell, cellId) => [
106
+ cellId,
107
+ {
108
+ ...{label: cellId},
109
+ ...(isString(labelOrCustomCell)
110
+ ? {label: labelOrCustomCell}
111
+ : labelOrCustomCell),
112
+ },
113
+ ],
114
+ ),
115
+ );
116
+ }, [customCells, defaultCellIds]);
67
117
  return /* @__PURE__ */ createElement(
68
118
  'table',
69
119
  {className},
@@ -82,10 +132,11 @@ const HtmlTable = ({
82
132
  label: 'Id',
83
133
  onClick: onHeaderThClick,
84
134
  }),
85
- arrayMap(cellIds, (cellId) =>
135
+ objMap(customCellConfigurations, ({label}, cellId) =>
86
136
  /* @__PURE__ */ createElement(HtmlHeaderTh, {
87
137
  key: cellId,
88
138
  cellId,
139
+ label,
89
140
  sorting,
90
141
  onClick: onHeaderThClick,
91
142
  }),
@@ -102,30 +153,125 @@ const HtmlTable = ({
102
153
  idColumn === false
103
154
  ? null
104
155
  : /* @__PURE__ */ createElement('th', null, rowId),
105
- arrayMap(cellIds, (cellId) =>
106
- /* @__PURE__ */ createElement(
107
- 'td',
108
- {key: cellId},
109
- /* @__PURE__ */ createElement(Cell, {
110
- ...getProps(getCellComponentProps, rowId, cellId),
111
- tableId,
112
- rowId,
113
- cellId,
114
- store,
115
- }),
116
- ),
156
+ objMap(
157
+ customCellConfigurations,
158
+ (
159
+ {component: CellView2 = defaultCellComponent, getComponentProps},
160
+ cellId,
161
+ ) =>
162
+ /* @__PURE__ */ createElement(
163
+ 'td',
164
+ {key: cellId},
165
+ /* @__PURE__ */ createElement(CellView2, {
166
+ ...getProps(getComponentProps, rowId, cellId),
167
+ ...storeTableIdOrQueriesQueryId,
168
+ rowId,
169
+ cellId,
170
+ }),
171
+ ),
117
172
  ),
118
173
  ),
119
174
  ),
120
175
  ),
121
176
  );
122
177
  };
123
- const TableInHtmlTable = ({tableId, store, ...props}) =>
178
+ const EditableThing = ({thing, onThingChange, className}) => {
179
+ const [thingType, setThingType] = useState();
180
+ const [currentThing, setCurrentThing] = useState();
181
+ const [stringThing, setStringThing] = useState();
182
+ const [numberThing, setNumberThing] = useState();
183
+ const [booleanThing, setBooleanThing] = useState();
184
+ if (currentThing !== thing) {
185
+ setThingType(getCellOrValueType(thing));
186
+ setCurrentThing(thing);
187
+ setStringThing(String(thing));
188
+ setNumberThing(Number(thing) || 0);
189
+ setBooleanThing(Boolean(thing));
190
+ }
191
+ const handleThingChange = useCallback(
192
+ (thing2, setTypedThing) => {
193
+ setTypedThing(thing2);
194
+ setCurrentThing(thing2);
195
+ onThingChange(thing2);
196
+ },
197
+ [onThingChange],
198
+ );
199
+ return /* @__PURE__ */ createElement(
200
+ 'div',
201
+ {className},
202
+ /* @__PURE__ */ createElement(
203
+ 'button',
204
+ {
205
+ type: 'button',
206
+ className: thingType,
207
+ onClick: useCallback(() => {
208
+ const nextType = getTypeCase(thingType, NUMBER, BOOLEAN, STRING);
209
+ const thing2 = getTypeCase(
210
+ nextType,
211
+ stringThing,
212
+ numberThing,
213
+ booleanThing,
214
+ );
215
+ setThingType(nextType);
216
+ setCurrentThing(thing2);
217
+ onThingChange(thing2);
218
+ }, [onThingChange, stringThing, numberThing, booleanThing, thingType]),
219
+ },
220
+ thingType,
221
+ ),
222
+ getTypeCase(
223
+ thingType,
224
+ /* @__PURE__ */ createElement('input', {
225
+ key: thingType,
226
+ value: stringThing,
227
+ onChange: useCallback(
228
+ (event) =>
229
+ handleThingChange(
230
+ String(event[CURRENT_TARGET][_VALUE]),
231
+ setStringThing,
232
+ ),
233
+ [handleThingChange],
234
+ ),
235
+ }),
236
+ /* @__PURE__ */ createElement('input', {
237
+ key: thingType,
238
+ type: 'number',
239
+ value: numberThing,
240
+ onChange: useCallback(
241
+ (event) =>
242
+ handleThingChange(
243
+ Number(event[CURRENT_TARGET][_VALUE] || 0),
244
+ setNumberThing,
245
+ ),
246
+ [handleThingChange],
247
+ ),
248
+ }),
249
+ /* @__PURE__ */ createElement('input', {
250
+ key: thingType,
251
+ type: 'checkbox',
252
+ checked: booleanThing,
253
+ onChange: useCallback(
254
+ (event) =>
255
+ handleThingChange(
256
+ Boolean(event[CURRENT_TARGET].checked),
257
+ setBooleanThing,
258
+ ),
259
+ [handleThingChange],
260
+ ),
261
+ }),
262
+ ),
263
+ );
264
+ };
265
+ const TableInHtmlTable = ({tableId, store, editable, ...props}) =>
124
266
  /* @__PURE__ */ createElement(HtmlTable, {
125
267
  ...props,
126
- tableId,
127
- store,
268
+ storeTableIdOrQueriesQueryId: useMemo(
269
+ () => ({store, tableId}),
270
+ [store, tableId],
271
+ ),
272
+ defaultCellComponent: editable ? EditableCellView : CellView,
128
273
  rowIds: useRowIds(tableId, store),
274
+ defaultCellIds: useTableCellIds(tableId, store),
129
275
  });
130
276
  const SortedTableInHtmlTable = ({
131
277
  tableId,
@@ -134,6 +280,7 @@ const SortedTableInHtmlTable = ({
134
280
  offset,
135
281
  limit,
136
282
  store,
283
+ editable,
137
284
  sortOnClick,
138
285
  ...props
139
286
  }) => {
@@ -146,16 +293,21 @@ const SortedTableInHtmlTable = ({
146
293
  );
147
294
  return /* @__PURE__ */ createElement(HtmlTable, {
148
295
  ...props,
149
- tableId,
150
- store,
296
+ storeTableIdOrQueriesQueryId: useMemo(
297
+ () => ({store, tableId}),
298
+ [store, tableId],
299
+ ),
300
+ defaultCellComponent: editable ? EditableCellView : CellView,
151
301
  rowIds: useSortedRowIds(tableId, ...sorting, offset, limit, store),
302
+ defaultCellIds: useTableCellIds(tableId, store),
152
303
  sorting,
153
304
  onHeaderThClick: handleHeaderThClick,
154
305
  });
155
306
  };
156
307
  const ValuesInHtmlTable = ({
157
308
  store,
158
- valueComponent: Value = ValueView,
309
+ editable = false,
310
+ valueComponent: Value2 = editable ? EditableValueView : ValueView,
159
311
  getValueComponentProps,
160
312
  className,
161
313
  headerRow,
@@ -191,7 +343,7 @@ const ValuesInHtmlTable = ({
191
343
  /* @__PURE__ */ createElement(
192
344
  'td',
193
345
  null,
194
- /* @__PURE__ */ createElement(Value, {
346
+ /* @__PURE__ */ createElement(Value2, {
195
347
  ...getProps(getValueComponentProps, valueId),
196
348
  valueId,
197
349
  store,
@@ -201,5 +353,73 @@ const ValuesInHtmlTable = ({
201
353
  ),
202
354
  ),
203
355
  );
356
+ const ResultTableInHtmlTable = ({queryId, queries, ...props}) =>
357
+ /* @__PURE__ */ createElement(HtmlTable, {
358
+ ...props,
359
+ storeTableIdOrQueriesQueryId: useMemo(
360
+ () => ({queries, queryId}),
361
+ [queries, queryId],
362
+ ),
363
+ defaultCellComponent: ResultCellView,
364
+ rowIds: useResultRowIds(queryId, queries),
365
+ defaultCellIds: useResultTableCellIds(queryId, queries),
366
+ });
367
+ const ResultSortedTableInHtmlTable = ({
368
+ queryId,
369
+ cellId,
370
+ descending,
371
+ offset,
372
+ limit,
373
+ queries,
374
+ sortOnClick,
375
+ ...props
376
+ }) => {
377
+ const [sorting, setSorting] = useState([cellId, descending ? true : false]);
378
+ const handleHeaderThClick = useCallbackOrUndefined(
379
+ (cellId2) =>
380
+ setSorting([cellId2, cellId2 == sorting[0] ? !sorting[1] : false]),
381
+ [sorting],
382
+ sortOnClick,
383
+ );
384
+ return /* @__PURE__ */ createElement(HtmlTable, {
385
+ ...props,
386
+ storeTableIdOrQueriesQueryId: useMemo(
387
+ () => ({queries, queryId}),
388
+ [queries, queryId],
389
+ ),
390
+ defaultCellComponent: ResultCellView,
391
+ rowIds: useResultSortedRowIds(queryId, ...sorting, offset, limit, queries),
392
+ defaultCellIds: useResultTableCellIds(queryId, queries),
393
+ sorting,
394
+ onHeaderThClick: handleHeaderThClick,
395
+ });
396
+ };
397
+ const EditableCellView = ({tableId, rowId, cellId, store, className}) =>
398
+ /* @__PURE__ */ createElement(EditableThing, {
399
+ thing: useCell(tableId, rowId, cellId, store),
400
+ onThingChange: useSetCellCallback(
401
+ tableId,
402
+ rowId,
403
+ cellId,
404
+ (cell) => cell,
405
+ [],
406
+ store,
407
+ ),
408
+ className: className ?? EDITABLE + CELL,
409
+ });
410
+ const EditableValueView = ({valueId, store, className}) =>
411
+ /* @__PURE__ */ createElement(EditableThing, {
412
+ thing: useValue(valueId, store),
413
+ onThingChange: useSetValueCallback(valueId, (value) => value, [], store),
414
+ className: className ?? EDITABLE + VALUE,
415
+ });
204
416
 
205
- export {SortedTableInHtmlTable, TableInHtmlTable, ValuesInHtmlTable};
417
+ export {
418
+ EditableCellView,
419
+ EditableValueView,
420
+ ResultSortedTableInHtmlTable,
421
+ ResultTableInHtmlTable,
422
+ SortedTableInHtmlTable,
423
+ TableInHtmlTable,
424
+ ValuesInHtmlTable,
425
+ };
@@ -19,10 +19,6 @@ const VALUE = 'Value';
19
19
  const VALUES = VALUE + 's';
20
20
  const VALUE_IDS = VALUE + IDS;
21
21
 
22
- const arrayMap = (array, cb) => array.map(cb);
23
- const arrayLength = (array) => array.length;
24
- const arrayIsEmpty = (array) => arrayLength(array) == 0;
25
-
26
22
  const isUndefined = (thing) => thing == void 0;
27
23
  const ifNotUndefined = (value, then, otherwise) =>
28
24
  isUndefined(value) ? otherwise?.() : then(value);
@@ -30,6 +26,10 @@ const isString = (thing) => getTypeOf(thing) == STRING;
30
26
  const isArray = (thing) => Array.isArray(thing);
31
27
  const getUndefined = () => void 0;
32
28
 
29
+ const arrayMap = (array, cb) => array.map(cb);
30
+ const arrayLength = (array) => array.length;
31
+ const arrayIsEmpty = (array) => arrayLength(array) == 0;
32
+
33
33
  const objGet = (obj, id) => ifNotUndefined(obj, (obj2) => obj2[id]);
34
34
 
35
35
  const {createContext, useContext} = React;
@@ -727,6 +727,13 @@ const useResultRowIds = (queryId, queriesOrQueriesId) =>
727
727
  [],
728
728
  [queryId],
729
729
  );
730
+ const useResultTableCellIds = (queryId, queriesOrQueriesId) =>
731
+ useListenable(
732
+ 'ResultTableCellIds',
733
+ useQueriesOrQueriesId(queriesOrQueriesId),
734
+ [],
735
+ [queryId],
736
+ );
730
737
  const useResultSortedRowIds = (
731
738
  queryId,
732
739
  cellId,
@@ -774,6 +781,19 @@ const useResultTableListener = (
774
781
  listenerDeps,
775
782
  [queryId],
776
783
  );
784
+ const useResultTableCellIdsListener = (
785
+ queryId,
786
+ listener,
787
+ listenerDeps,
788
+ queriesOrQueriesId,
789
+ ) =>
790
+ useListener(
791
+ 'ResultTableCellIds',
792
+ useQueriesOrQueriesId(queriesOrQueriesId),
793
+ listener,
794
+ listenerDeps,
795
+ [queryId],
796
+ );
777
797
  const useResultRowIdsListener = (
778
798
  queryId,
779
799
  listener,
@@ -1487,6 +1507,8 @@ export {
1487
1507
  useResultSortedRowIds,
1488
1508
  useResultSortedRowIdsListener,
1489
1509
  useResultTable,
1510
+ useResultTableCellIds,
1511
+ useResultTableCellIdsListener,
1490
1512
  useResultTableListener,
1491
1513
  useRow,
1492
1514
  useRowIds,
@@ -1 +1 @@
1
- const e=(e,n)=>e.includes(n),n=(e,n)=>e.forEach(n),l=e=>e.length,t=e=>0==l(e),r=(e,...n)=>e.push(...n),o=e=>e.pop(),s=e=>e.shift(),u=e=>null==e,i=(e,n,l)=>u(e)?null==l?void 0:l():n(e),d=Object.freeze,a=(e,n)=>{var l;return null!=(l=null==e?void 0:e.has(n))&&l},c=e=>u(e)||0==(e=>e.size)(e),h=(e,n)=>null==e?void 0:e.forEach(n),v=(e,n)=>null==e?void 0:e.delete(n),p=e=>new Map(e),C=(e,n)=>null==e?void 0:e.get(n),f=(e,n,l)=>u(l)?(v(e,n),e):null==e?void 0:e.set(n,l),g=(e,n,l)=>(a(e,n)||f(e,n,l()),C(e,n)),k=(e,n,t,r,o=0)=>i((t?g:C)(e,n[o],o>l(n)-2?t:p),(s=>{if(o>l(n)-2)return(null==r?void 0:r(s))&&f(e,n[o]),s;const u=k(s,n,t,r,o+1);return c(s)&&f(e,n[o]),u})),L=e=>new Set(Array.isArray(e)||u(e)?e:[e]),w=/^\d+$/,S=(S=>{const y=new WeakMap;return S=>(y.has(S)||y.set(S,(S=>{let y,z,E,V=100,A=p(),I=p(),M=1;const b=p(),j=p(),[x,B,F]=(e=>{let t;const[o,d]=(()=>{const e=[];let n=0;return[l=>{var t;return null!=(t=l?s(e):null)?t:""+n++},n=>{w.test(n)&&l(e)<1e3&&r(e,n)}]})(),a=p();return[(e,n,l,r=[],s=(()=>[]))=>{null!=t||(t=_);const u=o(1);var i,d;return f(a,u,[e,n,l,r,s]),d=u,null==(i=k(n,null!=l?l:[""],L))||i.add(d),u},(e,o,...s)=>n(((e,t=[""])=>{const o=[],s=(e,u)=>u==l(t)?r(o,e):null===t[u]?h(e,(e=>s(e,u+1))):n([t[u],null],(n=>s(C(e,n),u+1)));return s(e,0),o})(e,o),(e=>h(e,(e=>C(a,e)[0](t,...null!=o?o:[],...s))))),e=>i(C(a,e),(([,n,l])=>(k(n,null!=l?l:[""],void 0,(n=>(v(n,e),c(n)?1:0))),f(a,e),d(e),l))),e=>i(C(a,e),(([e,,r=[],o,s])=>{const i=(...d)=>{var a,c;const h=l(d);h==l(r)?e(t,...d,...s(d)):u(r[h])?n(null!=(c=null==(a=o[h])?void 0:a.call(o,...d))?c:[],(e=>i(...d,e))):i(...d,r[h])};i()}))]})(),O=p(),T=p(),W=[],$=[],m=(e,n)=>{M=0,S.transaction((()=>{const[l,t]=C(O,n);h(l,((n,l)=>h(n,((n,t)=>h(n,((n,r)=>((e,n,l,t,r)=>u(r)?e.delCell(n,l,t,!0):e.setCell(n,l,t,r))(S,l,t,r,n[e]))))))),h(t,((n,l)=>((e,n,l)=>u(l)?e.delValue(n):e.setValue(n,l))(S,l,n[e])))})),M=1},q=e=>{f(O,e),f(T,e),B(j,[e])},D=(e,t)=>n(((e,n)=>e.splice(0,n))(e,null!=t?t:l(e)),q),G=()=>D(W,l(W)-V),H=()=>i(y,(()=>{r(W,y),G(),D($),y=void 0,E=1})),J=()=>{y=o(W),E=1},K=S.addCellListener(null,null,null,((e,n,l,t,r,o)=>{if(M){H();const e=g(A,n,p),s=g(e,l,p),u=g(s,t,(()=>[o,void 0]));u[1]=r,u[0]===r&&c(f(s,t))&&c(f(e,l))&&c(f(A,n))&&J(),U()}})),N=S.addValueListener(null,((e,n,l,t)=>{if(M){H();const e=g(I,n,(()=>[t,void 0]));e[1]=l,e[0]===l&&c(f(I,n))&&J(),U()}})),P=(e="")=>(u(y)&&(y=""+z++,f(O,y,[A,I]),Y(y,e),A=p(),I=p(),E=1),y),Q=()=>{t(W)||(((e,...n)=>{e.unshift(...n)})($,P()),m(0,y),y=o(W),E=1)},R=()=>{t($)||(r(W,y),y=s($),m(1,y),E=1)},U=()=>{E&&(B(b),E=0)},X=e=>{const n=P(e);return U(),n},Y=(e,n)=>(Z(e)&&C(T,e)!==n&&(f(T,e,n),B(j,[e])),_),Z=e=>a(O,e),_={setSize:e=>(V=e,G(),_),addCheckpoint:X,setCheckpoint:Y,getStore:()=>S,getCheckpointIds:()=>[[...W],y,[...$]],forEachCheckpoint:e=>{return n=e,h(T,((e,l)=>n(l,e)));var n},hasCheckpoint:Z,getCheckpoint:e=>C(T,e),goBackward:()=>(Q(),U(),_),goForward:()=>(R(),U(),_),goTo:n=>{const l=e(W,n)?Q:e($,n)?R:null;for(;!u(l)&&n!=y;)l();return U(),_},addCheckpointIdsListener:e=>x(e,b),addCheckpointListener:(e,n)=>x(n,j,[e]),delListener:e=>(F(e),_),clear:()=>(D(W),D($),u(y)||q(y),y=void 0,z=0,X(),_),destroy:()=>{S.delListener(K),S.delListener(N)},getListenerStats:()=>({})};return d(_.clear())})(S)),y.get(S))})();export{S as createCheckpoints};
1
+ const e=e=>null==e,n=(n,l,t)=>e(n)?null==t?void 0:t():l(n),l=(e,n)=>e.includes(n),t=(e,n)=>e.forEach(n),r=e=>e.length,o=e=>0==r(e),s=(e,...n)=>e.push(...n),u=e=>e.pop(),i=e=>e.shift(),d=Object.freeze,a=(e,n)=>{var l;return null!=(l=null==e?void 0:e.has(n))&&l},c=n=>e(n)||0==(e=>e.size)(n),h=(e,n)=>null==e?void 0:e.forEach(n),v=(e,n)=>null==e?void 0:e.delete(n),p=e=>new Map(e),C=(e,n)=>null==e?void 0:e.get(n),f=(n,l,t)=>e(t)?(v(n,l),n):null==n?void 0:n.set(l,t),g=(e,n,l)=>(a(e,n)||f(e,n,l()),C(e,n)),k=(e,l,t,o,s=0)=>n((t?g:C)(e,l[s],s>r(l)-2?t:p),(n=>{if(s>r(l)-2)return(null==o?void 0:o(n))&&f(e,l[s]),n;const u=k(n,l,t,o,s+1);return c(n)&&f(e,l[s]),u})),L=n=>new Set(Array.isArray(n)||e(n)?n:[n]),w=/^\d+$/,S=(S=>{const y=new WeakMap;return S=>(y.has(S)||y.set(S,(S=>{let y,z,E,V=100,A=p(),I=p(),M=1;const b=p(),j=p(),[x,B,F]=(l=>{let o;const[u,d]=(()=>{const e=[];let n=0;return[l=>{var t;return null!=(t=l?i(e):null)?t:""+n++},n=>{w.test(n)&&r(e)<1e3&&s(e,n)}]})(),a=p();return[(e,n,l,t=[],r=(()=>[]))=>{null!=o||(o=_);const s=u(1);var i,d;return f(a,s,[e,n,l,t,r]),d=s,null==(i=k(n,null!=l?l:[""],L))||i.add(d),s},(e,n,...l)=>t(((e,n=[""])=>{const l=[],o=(e,u)=>u==r(n)?s(l,e):null===n[u]?h(e,(e=>o(e,u+1))):t([n[u],null],(n=>o(C(e,n),u+1)));return o(e,0),l})(e,n),(e=>h(e,(e=>C(a,e)[0](o,...null!=n?n:[],...l))))),e=>n(C(a,e),(([,n,l])=>(k(n,null!=l?l:[""],void 0,(n=>(v(n,e),c(n)?1:0))),f(a,e),d(e),l))),l=>n(C(a,l),(([n,,l=[],s,u])=>{const i=(...d)=>{var a,c;const h=r(d);h==r(l)?n(o,...d,...u(d)):e(l[h])?t(null!=(c=null==(a=s[h])?void 0:a.call(s,...d))?c:[],(e=>i(...d,e))):i(...d,l[h])};i()}))]})(),O=p(),T=p(),W=[],$=[],m=(n,l)=>{M=0,S.transaction((()=>{const[t,r]=C(O,l);h(t,((l,t)=>h(l,((l,r)=>h(l,((l,o)=>((n,l,t,r,o)=>e(o)?n.delCell(l,t,r,!0):n.setCell(l,t,r,o))(S,t,r,o,l[n]))))))),h(r,((l,t)=>((n,l,t)=>e(t)?n.delValue(l):n.setValue(l,t))(S,t,l[n])))})),M=1},q=e=>{f(O,e),f(T,e),B(j,[e])},D=(e,n)=>t(((e,n)=>e.splice(0,n))(e,null!=n?n:r(e)),q),G=()=>D(W,r(W)-V),H=()=>n(y,(()=>{s(W,y),G(),D($),y=void 0,E=1})),J=()=>{y=u(W),E=1},K=S.addCellListener(null,null,null,((e,n,l,t,r,o)=>{if(M){H();const e=g(A,n,p),s=g(e,l,p),u=g(s,t,(()=>[o,void 0]));u[1]=r,u[0]===r&&c(f(s,t))&&c(f(e,l))&&c(f(A,n))&&J(),U()}})),N=S.addValueListener(null,((e,n,l,t)=>{if(M){H();const e=g(I,n,(()=>[t,void 0]));e[1]=l,e[0]===l&&c(f(I,n))&&J(),U()}})),P=(n="")=>(e(y)&&(y=""+z++,f(O,y,[A,I]),Y(y,n),A=p(),I=p(),E=1),y),Q=()=>{o(W)||(((e,...n)=>{e.unshift(...n)})($,P()),m(0,y),y=u(W),E=1)},R=()=>{o($)||(s(W,y),y=i($),m(1,y),E=1)},U=()=>{E&&(B(b),E=0)},X=e=>{const n=P(e);return U(),n},Y=(e,n)=>(Z(e)&&C(T,e)!==n&&(f(T,e,n),B(j,[e])),_),Z=e=>a(O,e),_={setSize:e=>(V=e,G(),_),addCheckpoint:X,setCheckpoint:Y,getStore:()=>S,getCheckpointIds:()=>[[...W],y,[...$]],forEachCheckpoint:e=>{return n=e,h(T,((e,l)=>n(l,e)));var n},hasCheckpoint:Z,getCheckpoint:e=>C(T,e),goBackward:()=>(Q(),U(),_),goForward:()=>(R(),U(),_),goTo:n=>{const t=l(W,n)?Q:l($,n)?R:null;for(;!e(t)&&n!=y;)t();return U(),_},addCheckpointIdsListener:e=>x(e,b),addCheckpointListener:(e,n)=>x(n,j,[e]),delListener:e=>(F(e),_),clear:()=>(D(W),D($),e(y)||q(y),y=void 0,z=0,X(),_),destroy:()=>{S.delListener(K),S.delListener(N)},getListenerStats:()=>({})};return d(_.clear())})(S)),y.get(S))})();export{S as createCheckpoints};
Binary file