tinybase 8.0.0-beta.2 → 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 +11 -6
  5. package/@types/middleware/with-schemas/index.d.ts +11 -6
  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 +211 -140
  11. package/mergeable-store/index.js +231 -153
  12. package/mergeable-store/with-schemas/index.js +231 -153
  13. package/middleware/index.js +1 -1
  14. package/middleware/with-schemas/index.js +1 -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 +296 -151
  196. package/omni/with-schemas/index.js +296 -151
  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 +1 -1
  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 +155 -101
  261. package/store/with-schemas/index.js +155 -101
  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 +208 -81
  279. package/ui-react-inspector/with-schemas/index.js +208 -81
  280. package/with-schemas/index.js +211 -140
@@ -4,6 +4,8 @@ const STRING = getTypeOf(EMPTY_STRING);
4
4
  const BOOLEAN = getTypeOf(true);
5
5
  const NUMBER = getTypeOf(0);
6
6
  const FUNCTION = getTypeOf(getTypeOf);
7
+ const OBJECT = 'object';
8
+ const ARRAY = 'array';
7
9
  const TYPE = 'type';
8
10
  const DEFAULT = 'default';
9
11
  const ALLOW_NULL = 'allowNull';
@@ -26,6 +28,7 @@ const VALUE = 'Value';
26
28
  const VALUES = VALUE + 's';
27
29
  const VALUE_IDS = VALUE + IDS;
28
30
  const TRANSACTION = 'Transaction';
31
+ const JSON_PREFIX = '\uFFFD';
29
32
  const id = (key) => EMPTY_STRING + key;
30
33
  const strStartsWith = (str, prefix) => str.startsWith(prefix);
31
34
  const strEndsWith = (str, suffix) => str.endsWith(suffix);
@@ -63,19 +66,6 @@ const tryCatch = async (action, then1, then2) => {
63
66
  }
64
67
  };
65
68
 
66
- const getCellOrValueType = (cellOrValue) => {
67
- if (isNull(cellOrValue)) {
68
- return NULL;
69
- }
70
- const type = getTypeOf(cellOrValue);
71
- return isTypeStringOrBoolean(type) ||
72
- (type == NUMBER && isFiniteNumber(cellOrValue))
73
- ? type
74
- : void 0;
75
- };
76
- const isCellOrValueOrUndefined = (cellOrValue) =>
77
- isUndefined(cellOrValue) || !isUndefined(getCellOrValueType(cellOrValue));
78
-
79
69
  const arrayHas = (array, value) => array.includes(value);
80
70
  const arrayEvery = (array, cb) => array.every(cb);
81
71
  const arrayIsEqual = (array1, array2) =>
@@ -88,19 +78,6 @@ const arrayReduce = (array, cb, initial) => array.reduce(cb, initial);
88
78
  const arrayPush = (array, ...values) => array.push(...values);
89
79
  const arrayShift = (array) => array.shift();
90
80
 
91
- const collSizeN = (collSizer) => (coll) =>
92
- arrayReduce(collValues(coll), (total, coll2) => total + collSizer(coll2), 0);
93
- const collSize = (coll) => coll?.size ?? 0;
94
- const collSize2 = collSizeN(collSize);
95
- const collSize3 = collSizeN(collSize2);
96
- const collSize4 = collSizeN(collSize3);
97
- const collHas = (coll, keyOrValue) => coll?.has(keyOrValue) ?? false;
98
- const collIsEmpty = (coll) => isUndefined(coll) || collSize(coll) == 0;
99
- const collValues = (coll) => [...(coll?.values() ?? [])];
100
- const collClear = (coll) => coll.clear();
101
- const collForEach = (coll, cb) => coll?.forEach(cb);
102
- const collDel = (coll, keyOrValue) => coll?.delete(keyOrValue);
103
-
104
81
  const object = Object;
105
82
  const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
106
83
  const objFrozen = object.isFrozen;
@@ -184,6 +161,44 @@ const jsonStringWithMap = (obj) =>
184
161
  isInstanceOf(value, Map) ? object.fromEntries([...value]) : value,
185
162
  );
186
163
 
164
+ const getCellOrValueType = (cellOrValue) => {
165
+ if (isNull(cellOrValue)) {
166
+ return NULL;
167
+ }
168
+ if (isArray(cellOrValue)) {
169
+ return ARRAY;
170
+ }
171
+ if (isObject(cellOrValue)) {
172
+ return OBJECT;
173
+ }
174
+ const type = getTypeOf(cellOrValue);
175
+ return isTypeStringOrBoolean(type) ||
176
+ (type == NUMBER && isFiniteNumber(cellOrValue))
177
+ ? type
178
+ : void 0;
179
+ };
180
+ const isCellOrValueOrUndefined = (cellOrValue) =>
181
+ isUndefined(cellOrValue) || !isUndefined(getCellOrValueType(cellOrValue));
182
+ const isJsonType = (type) => type == OBJECT || type == ARRAY;
183
+ const encodeIfJson = (value) =>
184
+ isObject(value) || isArray(value) ? JSON_PREFIX + jsonString(value) : value;
185
+ const isEncodedJson = (value) => isString(value) && value[0] == JSON_PREFIX;
186
+ const decodeIfJson = (raw, _id, encoded) =>
187
+ !encoded && isEncodedJson(raw) ? jsonParse(slice(raw, 1)) : raw;
188
+
189
+ const collSizeN = (collSizer) => (coll) =>
190
+ arrayReduce(collValues(coll), (total, coll2) => total + collSizer(coll2), 0);
191
+ const collSize = (coll) => coll?.size ?? 0;
192
+ const collSize2 = collSizeN(collSize);
193
+ const collSize3 = collSizeN(collSize2);
194
+ const collSize4 = collSizeN(collSize3);
195
+ const collHas = (coll, keyOrValue) => coll?.has(keyOrValue) ?? false;
196
+ const collIsEmpty = (coll) => isUndefined(coll) || collSize(coll) == 0;
197
+ const collValues = (coll) => [...(coll?.values() ?? [])];
198
+ const collClear = (coll) => coll.clear();
199
+ const collForEach = (coll, cb) => coll?.forEach(cb);
200
+ const collDel = (coll, keyOrValue) => coll?.delete(keyOrValue);
201
+
187
202
  const textEncoder = /* @__PURE__ */ new GLOBAL.TextEncoder();
188
203
  const getHash = (string) => {
189
204
  let hash = 2166136261;
@@ -388,7 +403,6 @@ const setNew = (entryOrEntries) =>
388
403
  const setAdd = (set, value) => set?.add(value);
389
404
 
390
405
  const stampClone = ([value, hlc]) => stampNew(value, hlc);
391
- const stampCloneWithHash = ([value, hlc, hash]) => [value, hlc, hash];
392
406
  const stampNew = (value, hlc) => (hlc ? [value, hlc] : [value]);
393
407
  const stampNewWithHash = (value, hlc, hash) => [value, hlc, hash];
394
408
  const getStampHash = (stamp) => stamp[2];
@@ -405,10 +419,11 @@ const stampUpdate = (stamp, hlc, hash) => {
405
419
  };
406
420
  const stampNewObj = (hlc = EMPTY_STRING) => stampNew(objNew(), hlc);
407
421
  const stampNewMap = (hlc = EMPTY_STRING) => [mapNew(), hlc, 0];
408
- const stampMapToObjWithHash = (
409
- [map, hlc, hash],
410
- mapper = stampCloneWithHash,
411
- ) => [mapToObj(map, mapper), hlc, hash];
422
+ const stampMapToObjWithHash = ([map, hlc, hash], mapper) => [
423
+ mapToObj(map, mapper),
424
+ hlc,
425
+ hash,
426
+ ];
412
427
  const stampMapToObjWithoutHash = ([map, hlc], mapper = stampClone) =>
413
428
  stampNew(mapToObj(map, mapper), hlc);
414
429
  const stampValidate = (stamp, validateThing) =>
@@ -604,15 +619,19 @@ const createStore = () => {
604
619
  return false;
605
620
  }
606
621
  const type = schema[TYPE];
607
- if (!isTypeStringOrBoolean(type) && type != NUMBER) {
622
+ if (!isTypeStringOrBoolean(type) && type != NUMBER && !isJsonType(type)) {
608
623
  return false;
609
624
  }
610
625
  const defaultValue = schema[DEFAULT];
611
626
  if (isNull(defaultValue) && !schema[ALLOW_NULL]) {
612
627
  return false;
613
628
  }
614
- if (!isNull(defaultValue) && getCellOrValueType(defaultValue) != type) {
615
- objDel(schema, DEFAULT);
629
+ if (!isNull(defaultValue)) {
630
+ if (getCellOrValueType(defaultValue) != type) {
631
+ objDel(schema, DEFAULT);
632
+ } else {
633
+ schema[DEFAULT] = encodeIfJson(defaultValue);
634
+ }
616
635
  }
617
636
  return true;
618
637
  };
@@ -652,20 +671,22 @@ const createStore = () => {
652
671
  ? cellSchema[ALLOW_NULL]
653
672
  ? cell
654
673
  : cellInvalid(tableId, rowId, cellId, cell, cellSchema[DEFAULT])
655
- : getCellOrValueType(cell) == cellSchema[TYPE]
656
- ? cell
657
- : cellInvalid(
658
- tableId,
659
- rowId,
660
- cellId,
661
- cell,
662
- cellSchema[DEFAULT],
663
- ),
674
+ : getCellOrValueType(cell) === cellSchema[TYPE]
675
+ ? encodeIfJson(cell)
676
+ : isJsonType(cellSchema[TYPE]) && isEncodedJson(cell)
677
+ ? cell
678
+ : cellInvalid(
679
+ tableId,
680
+ rowId,
681
+ cellId,
682
+ cell,
683
+ cellSchema[DEFAULT],
684
+ ),
664
685
  () => cellInvalid(tableId, rowId, cellId, cell),
665
686
  )
666
687
  : isUndefined(getCellOrValueType(cell))
667
688
  ? cellInvalid(tableId, rowId, cellId, cell)
668
- : cell;
689
+ : encodeIfJson(cell);
669
690
  const validateValues = (values, skipDefaults) =>
670
691
  objValidate(
671
692
  skipDefaults ? values : addDefaultsToValues(values),
@@ -689,14 +710,16 @@ const createStore = () => {
689
710
  ? valueSchema[ALLOW_NULL]
690
711
  ? value
691
712
  : valueInvalid(valueId, value, valueSchema[DEFAULT])
692
- : getCellOrValueType(value) == valueSchema[TYPE]
693
- ? value
694
- : valueInvalid(valueId, value, valueSchema[DEFAULT]),
713
+ : getCellOrValueType(value) === valueSchema[TYPE]
714
+ ? encodeIfJson(value)
715
+ : isJsonType(valueSchema[TYPE]) && isEncodedJson(value)
716
+ ? value
717
+ : valueInvalid(valueId, value, valueSchema[DEFAULT]),
695
718
  () => valueInvalid(valueId, value),
696
719
  )
697
720
  : isUndefined(getCellOrValueType(value))
698
721
  ? valueInvalid(valueId, value)
699
- : value;
722
+ : encodeIfJson(value);
700
723
  const addDefaultsToRow = (row, tableId, rowId) => {
701
724
  ifNotUndefined(
702
725
  mapGet(tablesSchemaRowCache, tableId),
@@ -1119,13 +1142,21 @@ const createStore = () => {
1119
1142
  const getCellChange = (tableId, rowId, cellId) =>
1120
1143
  ifNotUndefined(
1121
1144
  mapGet(mapGet(mapGet(changedCells, tableId), rowId), cellId),
1122
- ([oldCell, newCell]) => [true, oldCell, newCell],
1145
+ ([oldCell, newCell]) => [
1146
+ true,
1147
+ decodeIfJson(oldCell),
1148
+ decodeIfJson(newCell),
1149
+ ],
1123
1150
  () => [false, ...pairNew(getCell(tableId, rowId, cellId))],
1124
1151
  );
1125
1152
  const getValueChange = (valueId) =>
1126
1153
  ifNotUndefined(
1127
1154
  mapGet(changedValues, valueId),
1128
- ([oldValue, newValue]) => [true, oldValue, newValue],
1155
+ ([oldValue, newValue]) => [
1156
+ true,
1157
+ decodeIfJson(oldValue),
1158
+ decodeIfJson(newValue),
1159
+ ],
1129
1160
  () => [false, ...pairNew(getValue(valueId))],
1130
1161
  );
1131
1162
  const callInvalidCellListeners = (mutator) =>
@@ -1301,8 +1332,8 @@ const createStore = () => {
1301
1332
  callListeners(
1302
1333
  cellListeners[mutator],
1303
1334
  [tableId, rowId, cellId],
1304
- newCell,
1305
- oldCell,
1335
+ decodeIfJson(newCell),
1336
+ decodeIfJson(oldCell),
1306
1337
  getCellChange,
1307
1338
  );
1308
1339
  tablesChanged = tableChanged = rowChanged = 1;
@@ -1358,8 +1389,8 @@ const createStore = () => {
1358
1389
  callListeners(
1359
1390
  valueListeners[mutator],
1360
1391
  [valueId],
1361
- newValue,
1362
- oldValue,
1392
+ decodeIfJson(newValue),
1393
+ decodeIfJson(oldValue),
1363
1394
  getValueChange,
1364
1395
  );
1365
1396
  valuesChanged = 1;
@@ -1396,10 +1427,42 @@ const createStore = () => {
1396
1427
  [getTableIds],
1397
1428
  );
1398
1429
  };
1430
+ const getTransactionChangesImpl = (encoded = false) => [
1431
+ mapToObj(
1432
+ changedCells,
1433
+ (table, tableId) =>
1434
+ mapGet(changedTableIds, tableId) === -1
1435
+ ? void 0
1436
+ : mapToObj(
1437
+ table,
1438
+ (row, rowId) =>
1439
+ mapGet(mapGet(changedRowIds, tableId), rowId) === -1
1440
+ ? void 0
1441
+ : mapToObj(
1442
+ row,
1443
+ ([, newCell]) =>
1444
+ decodeIfJson(newCell, EMPTY_STRING, encoded),
1445
+ (changedCell) => pairIsEqual(changedCell),
1446
+ ),
1447
+ collIsEmpty,
1448
+ objIsEmpty,
1449
+ ),
1450
+ collIsEmpty,
1451
+ objIsEmpty,
1452
+ ),
1453
+ mapToObj(
1454
+ changedValues,
1455
+ ([, newValue]) => decodeIfJson(newValue, EMPTY_STRING, encoded),
1456
+ (changedValue) => pairIsEqual(changedValue),
1457
+ ),
1458
+ 1,
1459
+ ];
1399
1460
  const getContent = () => [getTables(), getValues()];
1400
- const getTables = () => mapToObj3(tablesMap);
1461
+ const getEncodedContent = () => [mapToObj3(tablesMap), mapToObj(valuesMap)];
1462
+ const getTables = () => mapToObj3(tablesMap, decodeIfJson);
1401
1463
  const getTableIds = () => mapKeys(tablesMap);
1402
- const getTable = (tableId) => mapToObj2(mapGet(tablesMap, id(tableId)));
1464
+ const getTable = (tableId) =>
1465
+ mapToObj2(mapGet(tablesMap, id(tableId)), decodeIfJson);
1403
1466
  const getTableCellIds = (tableId) =>
1404
1467
  mapKeys(mapGet(tableCellIds, id(tableId)));
1405
1468
  const getRowCount = (tableId) => collSize(mapGet(tablesMap, id(tableId)));
@@ -1435,14 +1498,16 @@ const createStore = () => {
1435
1498
  ([, rowId]) => rowId,
1436
1499
  );
1437
1500
  const getRow = (tableId, rowId) =>
1438
- mapToObj(mapGet(mapGet(tablesMap, id(tableId)), id(rowId)));
1501
+ mapToObj(mapGet(mapGet(tablesMap, id(tableId)), id(rowId)), decodeIfJson);
1439
1502
  const getCellIds = (tableId, rowId) =>
1440
1503
  mapKeys(mapGet(mapGet(tablesMap, id(tableId)), id(rowId)));
1441
1504
  const getCell = (tableId, rowId, cellId) =>
1442
- mapGet(mapGet(mapGet(tablesMap, id(tableId)), id(rowId)), id(cellId));
1443
- const getValues = () => mapToObj(valuesMap);
1505
+ decodeIfJson(
1506
+ mapGet(mapGet(mapGet(tablesMap, id(tableId)), id(rowId)), id(cellId)),
1507
+ );
1508
+ const getValues = () => mapToObj(valuesMap, decodeIfJson);
1444
1509
  const getValueIds = () => mapKeys(valuesMap);
1445
- const getValue = (valueId) => mapGet(valuesMap, id(valueId));
1510
+ const getValue = (valueId) => decodeIfJson(mapGet(valuesMap, id(valueId)));
1446
1511
  const hasTables = () => !collIsEmpty(tablesMap);
1447
1512
  const hasTable = (tableId) => collHas(tablesMap, id(tableId));
1448
1513
  const hasTableCell = (tableId, cellId) =>
@@ -1729,35 +1794,8 @@ const createStore = () => {
1729
1794
  }
1730
1795
  return store;
1731
1796
  };
1732
- const getTransactionChanges = () => [
1733
- mapToObj(
1734
- changedCells,
1735
- (table, tableId) =>
1736
- mapGet(changedTableIds, tableId) === -1
1737
- ? void 0
1738
- : mapToObj(
1739
- table,
1740
- (row, rowId) =>
1741
- mapGet(mapGet(changedRowIds, tableId), rowId) === -1
1742
- ? void 0
1743
- : mapToObj(
1744
- row,
1745
- ([, newCell]) => newCell,
1746
- (changedCell) => pairIsEqual(changedCell),
1747
- ),
1748
- collIsEmpty,
1749
- objIsEmpty,
1750
- ),
1751
- collIsEmpty,
1752
- objIsEmpty,
1753
- ),
1754
- mapToObj(
1755
- changedValues,
1756
- ([, newValue]) => newValue,
1757
- (changedValue) => pairIsEqual(changedValue),
1758
- ),
1759
- 1,
1760
- ];
1797
+ const getTransactionChanges = () => getTransactionChangesImpl();
1798
+ const getEncodedTransactionChanges = () => getTransactionChangesImpl(true);
1761
1799
  const getTransactionLog = () => [
1762
1800
  !collIsEmpty(changedCells),
1763
1801
  !collIsEmpty(changedValues),
@@ -1871,7 +1909,9 @@ const createStore = () => {
1871
1909
  tableCallback(tableId, (rowCallback) =>
1872
1910
  collForEach(tableMap, (rowMap, rowId) =>
1873
1911
  rowCallback(rowId, (cellCallback) =>
1874
- mapForEach(rowMap, cellCallback),
1912
+ mapForEach(rowMap, (cellId, cell) =>
1913
+ cellCallback(cellId, decodeIfJson(cell)),
1914
+ ),
1875
1915
  ),
1876
1916
  ),
1877
1917
  ),
@@ -1880,11 +1920,21 @@ const createStore = () => {
1880
1920
  mapForEach(mapGet(tableCellIds, id(tableId)), tableCellCallback);
1881
1921
  const forEachRow = (tableId, rowCallback) =>
1882
1922
  collForEach(mapGet(tablesMap, id(tableId)), (rowMap, rowId) =>
1883
- rowCallback(rowId, (cellCallback) => mapForEach(rowMap, cellCallback)),
1923
+ rowCallback(rowId, (cellCallback) =>
1924
+ mapForEach(rowMap, (cellId, cell) =>
1925
+ cellCallback(cellId, decodeIfJson(cell)),
1926
+ ),
1927
+ ),
1884
1928
  );
1885
1929
  const forEachCell = (tableId, rowId, cellCallback) =>
1886
- mapForEach(mapGet(mapGet(tablesMap, id(tableId)), id(rowId)), cellCallback);
1887
- const forEachValue = (valueCallback) => mapForEach(valuesMap, valueCallback);
1930
+ mapForEach(
1931
+ mapGet(mapGet(tablesMap, id(tableId)), id(rowId)),
1932
+ (cellId, cell) => cellCallback(cellId, decodeIfJson(cell)),
1933
+ );
1934
+ const forEachValue = (valueCallback) =>
1935
+ mapForEach(valuesMap, (valueId, value) =>
1936
+ valueCallback(valueId, decodeIfJson(value)),
1937
+ );
1888
1938
  const addSortedRowIdsListener = (
1889
1939
  tableIdOrArgs,
1890
1940
  cellIdOrListener,
@@ -2076,14 +2126,17 @@ const createStore = () => {
2076
2126
  delListener,
2077
2127
  getListenerStats,
2078
2128
  isMergeable: () => false,
2079
- // only used internally by other modules
2080
- createStore,
2081
- addListener,
2082
- callListeners,
2083
- setInternalListeners,
2084
- setMiddleware,
2085
- setOrDelCell,
2086
- setOrDelValue,
2129
+ _: [
2130
+ createStore,
2131
+ addListener,
2132
+ callListeners,
2133
+ setInternalListeners,
2134
+ setMiddleware,
2135
+ setOrDelCell,
2136
+ setOrDelValue,
2137
+ getEncodedContent,
2138
+ getEncodedTransactionChanges,
2139
+ ],
2087
2140
  };
2088
2141
  objMap(
2089
2142
  {
@@ -2398,14 +2451,78 @@ const createMergeableStore = (uniqueId, getNow) => {
2398
2451
  ]);
2399
2452
  }
2400
2453
  };
2401
- const getMergeableContent = () => [
2454
+ const getMergeableContentImpl = (encoded = false) => [
2402
2455
  stampMapToObjWithHash(contentStampMap[0], (tableStampMap) =>
2403
2456
  stampMapToObjWithHash(tableStampMap, (rowStampMap) =>
2404
- stampMapToObjWithHash(rowStampMap),
2457
+ stampMapToObjWithHash(rowStampMap, ([cell, hlc, hash]) => [
2458
+ decodeIfJson(cell, EMPTY_STRING, encoded),
2459
+ hlc,
2460
+ hash,
2461
+ ]),
2405
2462
  ),
2406
2463
  ),
2407
- stampMapToObjWithHash(contentStampMap[1]),
2464
+ stampMapToObjWithHash(contentStampMap[1], ([value, hlc, hash]) => [
2465
+ decodeIfJson(value, EMPTY_STRING, encoded),
2466
+ hlc,
2467
+ hash,
2468
+ ]),
2408
2469
  ];
2470
+ const getTransactionMergeableChangesImpl = (withHashes, encoded = false) => {
2471
+ const [
2472
+ [tableStampMaps, tablesHlc, tablesHash],
2473
+ [valueStampMaps, valuesHlc, valuesHash],
2474
+ ] = contentStampMap;
2475
+ const newStamp = withHashes ? stampNewWithHash : stampNew;
2476
+ const tablesObj = {};
2477
+ collForEach(touchedCells, (touchedTable, tableId) =>
2478
+ ifNotUndefined(
2479
+ mapGet(tableStampMaps, tableId),
2480
+ ([rowStampMaps, tableHlc, tableHash]) => {
2481
+ const tableObj = {};
2482
+ collForEach(touchedTable, (touchedRow, rowId) =>
2483
+ ifNotUndefined(
2484
+ mapGet(rowStampMaps, rowId),
2485
+ ([cellStampMaps, rowHlc, rowHash]) => {
2486
+ const rowObj = {};
2487
+ collForEach(touchedRow, (cellId) => {
2488
+ ifNotUndefined(
2489
+ mapGet(cellStampMaps, cellId),
2490
+ ([cell, time, hash]) =>
2491
+ (rowObj[cellId] = newStamp(
2492
+ encoded ? cell : decodeIfJson(cell),
2493
+ time,
2494
+ hash,
2495
+ )),
2496
+ );
2497
+ });
2498
+ tableObj[rowId] = newStamp(rowObj, rowHlc, rowHash);
2499
+ },
2500
+ ),
2501
+ );
2502
+ tablesObj[tableId] = newStamp(tableObj, tableHlc, tableHash);
2503
+ },
2504
+ ),
2505
+ );
2506
+ const valuesObj = {};
2507
+ collForEach(touchedValues, (valueId) =>
2508
+ ifNotUndefined(
2509
+ mapGet(valueStampMaps, valueId),
2510
+ ([value, time, hash]) =>
2511
+ (valuesObj[valueId] = newStamp(
2512
+ encoded ? value : decodeIfJson(value),
2513
+ time,
2514
+ hash,
2515
+ )),
2516
+ ),
2517
+ );
2518
+ return [
2519
+ newStamp(tablesObj, tablesHlc, tablesHash),
2520
+ newStamp(valuesObj, valuesHlc, valuesHash),
2521
+ 1,
2522
+ ];
2523
+ };
2524
+ const getMergeableContent = () => getMergeableContentImpl();
2525
+ const getEncodedMergeableContent = () => getMergeableContentImpl(true);
2409
2526
  const getMergeableContentHashes = () => [
2410
2527
  contentStampMap[0][2],
2411
2528
  contentStampMap[1][2],
@@ -2545,52 +2662,10 @@ const createMergeableStore = (uniqueId, getNow) => {
2545
2662
  });
2546
2663
  return mergeableStore;
2547
2664
  };
2548
- const getTransactionMergeableChanges = (withHashes = false) => {
2549
- const [
2550
- [tableStampMaps, tablesHlc, tablesHash],
2551
- [valueStampMaps, valuesHlc, valuesHash],
2552
- ] = contentStampMap;
2553
- const newStamp = withHashes ? stampNewWithHash : stampNew;
2554
- const tablesObj = {};
2555
- collForEach(touchedCells, (touchedTable, tableId) =>
2556
- ifNotUndefined(
2557
- mapGet(tableStampMaps, tableId),
2558
- ([rowStampMaps, tableHlc, tableHash]) => {
2559
- const tableObj = {};
2560
- collForEach(touchedTable, (touchedRow, rowId) =>
2561
- ifNotUndefined(
2562
- mapGet(rowStampMaps, rowId),
2563
- ([cellStampMaps, rowHlc, rowHash]) => {
2564
- const rowObj = {};
2565
- collForEach(touchedRow, (cellId) => {
2566
- ifNotUndefined(
2567
- mapGet(cellStampMaps, cellId),
2568
- ([cell, time, hash]) =>
2569
- (rowObj[cellId] = newStamp(cell, time, hash)),
2570
- );
2571
- });
2572
- tableObj[rowId] = newStamp(rowObj, rowHlc, rowHash);
2573
- },
2574
- ),
2575
- );
2576
- tablesObj[tableId] = newStamp(tableObj, tableHlc, tableHash);
2577
- },
2578
- ),
2579
- );
2580
- const valuesObj = {};
2581
- collForEach(touchedValues, (valueId) =>
2582
- ifNotUndefined(
2583
- mapGet(valueStampMaps, valueId),
2584
- ([value, time, hash]) =>
2585
- (valuesObj[valueId] = newStamp(value, time, hash)),
2586
- ),
2587
- );
2588
- return [
2589
- newStamp(tablesObj, tablesHlc, tablesHash),
2590
- newStamp(valuesObj, valuesHlc, valuesHash),
2591
- 1,
2592
- ];
2593
- };
2665
+ const getTransactionMergeableChanges = (withHashes = false) =>
2666
+ getTransactionMergeableChangesImpl(withHashes);
2667
+ const getEncodedTransactionMergeableChanges = (withHashes) =>
2668
+ getTransactionMergeableChangesImpl(withHashes, true);
2594
2669
  const applyMergeableChanges = (mergeableChanges) =>
2595
2670
  disableListeningToRawStoreChanges(() =>
2596
2671
  store.applyChanges(mergeContentOrChanges(mergeableChanges)),
@@ -2622,10 +2697,13 @@ const createMergeableStore = (uniqueId, getNow) => {
2622
2697
  getTransactionMergeableChanges,
2623
2698
  applyMergeableChanges,
2624
2699
  merge,
2625
- // only used internally by other modules
2626
- hadMutated,
2700
+ __: [
2701
+ hadMutated,
2702
+ getEncodedMergeableContent,
2703
+ getEncodedTransactionMergeableChanges,
2704
+ ],
2627
2705
  };
2628
- store.setInternalListeners(
2706
+ store._[3](
2629
2707
  preStartTransaction,
2630
2708
  preFinishTransaction,
2631
2709
  postFinishTransaction,
@@ -146,7 +146,7 @@ const createMiddleware = getCreateFunction((store) => {
146
146
  addDidSetRowCallback,
147
147
  destroy,
148
148
  });
149
- store.setMiddleware(
149
+ store._[4](
150
150
  willSetContent,
151
151
  willSetTables,
152
152
  willSetTable,
@@ -146,7 +146,7 @@ const createMiddleware = getCreateFunction((store) => {
146
146
  addDidSetRowCallback,
147
147
  destroy,
148
148
  });
149
- store.setMiddleware(
149
+ store._[4](
150
150
  willSetContent,
151
151
  willSetTables,
152
152
  willSetTable,
@@ -1 +1 @@
1
- const e=e=>void 0===e,t=e=>null===e,r=(n=e,(e,t,r)=>n(e)?r?.():t(e));var n;const s=e=>e.length,o=(e,t)=>e.includes(t),c=(e,t)=>e.forEach(t),i=e=>0==s(e),l=(e,...t)=>e.push(...t),a=e=>e.pop(),d=e=>e.shift(),u=e=>e?.size??0,h=(p=u,e=>{return t=(e,t)=>e+p(t),k(e).reduce(t,0);var t});var p;const v=(e,t)=>e?.has(t)??!1,g=t=>e(t)||0==u(t),k=e=>[...e?.values()??[]],f=(e,t)=>e?.forEach(t),C=(e,t)=>e?.delete(t),L=Object.freeze,w=Map,S=e=>new w(e),y=(e,t)=>e?.get(t),z=(t,r,n)=>e(n)?(C(t,r),t):t?.set(r,n),E=(e,t,r,n)=>(v(e,t)?n?.(y(e,t)):z(e,t,r()),y(e,t)),I=(e,t,n,o,c=0)=>r((n?E:y)(e,t[c],c>s(t)-2?n:S),r=>{if(c>s(t)-2)return o?.(r)&&z(e,t[c]),r;const i=I(r,t,n,o,c+1);return g(r)&&z(e,t[c]),i}),O=t=>new Set(Array.isArray(t)||e(t)?t:[t]),A=/^\d+$/,D=(()=>{const n=new WeakMap;return u=>{n.has(u)||n.set(u,(n=>{let u,p,k,w=100,D=S(),F=S(),M=1;const V=S(),_=S(),[b,j,x]=(()=>{let e;const[n,o]=(()=>{const e=[];let t=0;return[r=>(r?d(e):null)??""+t++,t=>{A.test(t)&&s(e)<1e3&&l(e,t)}]})(),i=S();return[(t,r,s,o=[],c=()=>[])=>{e??=te;const l=n(1);var a,d;return z(i,l,[t,r,s,o,c]),a=I(r,s??[""],O),d=l,a?.add(d),l},(r,n,...o)=>c(((e,r=[""])=>{const n=[],o=(e,i)=>i==s(r)?l(n,e):t(r[i])?f(e,e=>o(e,i+1)):c([r[i],null],t=>o(y(e,t),i+1));return o(e,0),n})(r,n),t=>f(t,t=>y(i,t)[0](e,...n??[],...o))),e=>r(y(i,e),([,t,r])=>(I(t,r??[""],void 0,t=>(C(t,e),g(t)?1:0)),z(i,e),o(e),r)),n=>r(y(i,n),([r,,n=[],o,i])=>{const l=(...a)=>{const d=s(a);d==s(n)?r(e,...a,...i(a)):t(n[d])?c(o[d]?.(...a)??[],e=>l(...a,e)):l(...a,n[d])};l()})]})(),B=S(),T=S(),W=[],$=[],m=(e,t)=>{M=0,n.transaction(()=>{const[r,s]=y(B,t);f(r,(t,r)=>f(t,(t,s)=>f(t,(t,o)=>n.setOrDelCell(r,s,o,t[e],!0)))),f(s,(t,r)=>n.setOrDelValue(r,t[e],!0))}),M=1},q=e=>{z(B,e),z(T,e),j(_,[e])},G=(e,t)=>c(((e,t)=>e.splice(0,t))(e,t??s(e)),q),H=()=>G(W,s(W)-w),J=()=>r(u,()=>{l(W,u),H(),G($),u=void 0,k=1}),K=()=>{u=a(W),k=1};let N,P;const Q=(t="")=>(e(u)&&(u=""+p++,z(B,u,[D,F]),Z(u,t),D=S(),F=S(),k=1),u),R=()=>{i(W)||(((e,...t)=>{e.unshift(...t)})($,Q()),m(0,u),u=a(W),k=1)},U=()=>{i($)||(l(W,u),u=d($),m(1,u),k=1)},X=()=>{k&&(j(V),k=0)},Y=e=>{const t=Q(e);return X(),t},Z=(e,t)=>(ee(e)&&y(T,e)!==t&&(z(T,e,t),j(_,[e])),te),ee=e=>v(B,e),te={setSize:e=>(w=e,H(),te),addCheckpoint:Y,setCheckpoint:Z,getStore:()=>n,getCheckpointIds:()=>[[...W],u,[...$]],forEachCheckpoint:e=>{return t=e,f(T,(e,r)=>t(r,e));var t},hasCheckpoint:ee,getCheckpoint:e=>y(T,e),goBackward:()=>(R(),X(),te),goForward:()=>(U(),X(),te),goTo:t=>{const r=o(W,t)?R:o($,t)?U:void 0;for(;!e(r)&&t!=u;)r();return X(),te},addCheckpointIdsListener:e=>b(e,V),addCheckpointListener:(e,t)=>b(t,_,[e]),delListener:e=>(x(e),te),clear:()=>(G(W),G($),e(u)||q(u),u=void 0,p=0,Y(),te),clearForward:()=>(i($)||(G($),j(V)),te),destroy:()=>{n.delListener(N),n.delListener(P)},getListenerStats:()=>({checkpointIds:h(V),checkpoint:h(_)}),_registerListeners:()=>{N=n.addCellListener(null,null,null,(e,t,r,n,s,o)=>{if(M){J();const e=E(D,t,S),c=E(e,r,S),i=E(c,n,()=>[o,void 0]);i[1]=s,i[0]===s&&g(z(c,n))&&g(z(e,r))&&g(z(D,t))&&K(),X()}}),P=n.addValueListener(null,(e,t,r,n)=>{if(M){J();const e=E(F,t,()=>[n,void 0]);e[1]=r,e[0]===r&&g(z(F,t))&&K(),X()}})}};return L(te.clear())})(u));const p=n.get(u);return p._registerListeners(),p}})();export{D as createCheckpoints};
1
+ const e=e=>void 0===e,t=e=>null===e,n=(r=e,(e,t,n)=>r(e)?n?.():t(e));var r;const s=e=>e.length,o=(e,t)=>e.includes(t),c=(e,t)=>e.forEach(t),i=e=>0==s(e),a=(e,...t)=>e.push(...t),d=e=>e.pop(),l=e=>e.shift(),u=e=>e?.size??0,h=(p=u,e=>{return t=(e,t)=>e+p(t),k(e).reduce(t,0);var t});var p;const v=(e,t)=>e?.has(t)??!1,g=t=>e(t)||0==u(t),k=e=>[...e?.values()??[]],f=(e,t)=>e?.forEach(t),L=(e,t)=>e?.delete(t),C=Object.freeze,w=Map,S=e=>new w(e),_=(e,t)=>e?.get(t),y=(t,n,r)=>e(r)?(L(t,n),t):t?.set(n,r),z=(e,t,n,r)=>(v(e,t)?r?.(_(e,t)):y(e,t,n()),_(e,t)),E=(e,t,r,o,c=0)=>n((r?z:_)(e,t[c],c>s(t)-2?r:S),n=>{if(c>s(t)-2)return o?.(n)&&y(e,t[c]),n;const i=E(n,t,r,o,c+1);return g(n)&&y(e,t[c]),i}),I=t=>new Set(Array.isArray(t)||e(t)?t:[t]),A=/^\d+$/,F=(()=>{const r=new WeakMap;return u=>{r.has(u)||r.set(u,(r=>{let u,p,k,w=100,F=S(),M=S(),b=1;const j=S(),x=S(),[B,O,T]=(()=>{let e;const[r,o]=(()=>{const e=[];let t=0;return[n=>(n?l(e):null)??""+t++,t=>{A.test(t)&&s(e)<1e3&&a(e,t)}]})(),i=S();return[(t,n,s,o=[],c=()=>[])=>{e??=te;const a=r(1);var d,l;return y(i,a,[t,n,s,o,c]),d=E(n,s??[""],I),l=a,d?.add(l),a},(n,r,...o)=>c(((e,n=[""])=>{const r=[],o=(e,i)=>i==s(n)?a(r,e):t(n[i])?f(e,e=>o(e,i+1)):c([n[i],null],t=>o(_(e,t),i+1));return o(e,0),r})(n,r),t=>f(t,t=>_(i,t)[0](e,...r??[],...o))),e=>n(_(i,e),([,t,n])=>(E(t,n??[""],void 0,t=>(L(t,e),g(t)?1:0)),y(i,e),o(e),n)),r=>n(_(i,r),([n,,r=[],o,i])=>{const a=(...d)=>{const l=s(d);l==s(r)?n(e,...d,...i(d)):t(r[l])?c(o[l]?.(...d)??[],e=>a(...d,e)):a(...d,r[l])};a()})]})(),V=S(),W=S(),$=[],m=[],q=(e,t)=>{b=0,r.transaction(()=>{const[n,s]=_(V,t);f(n,(t,n)=>f(t,(t,s)=>f(t,(t,o)=>r._[5](n,s,o,t[e],!0)))),f(s,(t,n)=>r._[6](n,t[e],!0))}),b=1},D=e=>{y(V,e),y(W,e),O(x,[e])},G=(e,t)=>c(((e,t)=>e.splice(0,t))(e,t??s(e)),D),H=()=>G($,s($)-w),J=()=>n(u,()=>{a($,u),H(),G(m),u=void 0,k=1}),K=()=>{u=d($),k=1};let N,P;const Q=(t="")=>(e(u)&&(u=""+p++,y(V,u,[F,M]),Z(u,t),F=S(),M=S(),k=1),u),R=()=>{i($)||(((e,...t)=>{e.unshift(...t)})(m,Q()),q(0,u),u=d($),k=1)},U=()=>{i(m)||(a($,u),u=l(m),q(1,u),k=1)},X=()=>{k&&(O(j),k=0)},Y=e=>{const t=Q(e);return X(),t},Z=(e,t)=>(ee(e)&&_(W,e)!==t&&(y(W,e,t),O(x,[e])),te),ee=e=>v(V,e),te={setSize:e=>(w=e,H(),te),addCheckpoint:Y,setCheckpoint:Z,getStore:()=>r,getCheckpointIds:()=>[[...$],u,[...m]],forEachCheckpoint:e=>{return t=e,f(W,(e,n)=>t(n,e));var t},hasCheckpoint:ee,getCheckpoint:e=>_(W,e),goBackward:()=>(R(),X(),te),goForward:()=>(U(),X(),te),goTo:t=>{const n=o($,t)?R:o(m,t)?U:void 0;for(;!e(n)&&t!=u;)n();return X(),te},addCheckpointIdsListener:e=>B(e,j),addCheckpointListener:(e,t)=>B(t,x,[e]),delListener:e=>(T(e),te),clear:()=>(G($),G(m),e(u)||D(u),u=void 0,p=0,Y(),te),clearForward:()=>(i(m)||(G(m),O(j)),te),destroy:()=>{r.delListener(N),r.delListener(P)},getListenerStats:()=>({checkpointIds:h(j),checkpoint:h(x)}),_registerListeners:()=>{N=r.addCellListener(null,null,null,(e,t,n,r,s,o)=>{if(b){J();const e=z(F,t,S),c=z(e,n,S),i=z(c,r,()=>[o,void 0]);i[1]=s,i[0]===s&&g(y(c,r))&&g(y(e,n))&&g(y(F,t))&&K(),X()}}),P=r.addValueListener(null,(e,t,n,r)=>{if(b){J();const e=z(M,t,()=>[r,void 0]);e[1]=n,e[0]===n&&g(y(M,t))&&K(),X()}})}};return C(te.clear())})(u));const p=r.get(u);return p._registerListeners(),p}})();export{F as createCheckpoints};
Binary file
@@ -1 +1 @@
1
- const e=e=>void 0===e,t=e=>null===e,r=(n=e,(e,t,r)=>n(e)?r?.():t(e));var n;const s=e=>e.length,o=(e,t)=>e.includes(t),c=(e,t)=>e.forEach(t),i=e=>0==s(e),l=(e,...t)=>e.push(...t),a=e=>e.pop(),d=e=>e.shift(),u=e=>e?.size??0,h=(p=u,e=>{return t=(e,t)=>e+p(t),k(e).reduce(t,0);var t});var p;const v=(e,t)=>e?.has(t)??!1,g=t=>e(t)||0==u(t),k=e=>[...e?.values()??[]],f=(e,t)=>e?.forEach(t),C=(e,t)=>e?.delete(t),L=Object.freeze,w=Map,S=e=>new w(e),y=(e,t)=>e?.get(t),z=(t,r,n)=>e(n)?(C(t,r),t):t?.set(r,n),E=(e,t,r,n)=>(v(e,t)?n?.(y(e,t)):z(e,t,r()),y(e,t)),I=(e,t,n,o,c=0)=>r((n?E:y)(e,t[c],c>s(t)-2?n:S),r=>{if(c>s(t)-2)return o?.(r)&&z(e,t[c]),r;const i=I(r,t,n,o,c+1);return g(r)&&z(e,t[c]),i}),O=t=>new Set(Array.isArray(t)||e(t)?t:[t]),A=/^\d+$/,D=(()=>{const n=new WeakMap;return u=>{n.has(u)||n.set(u,(n=>{let u,p,k,w=100,D=S(),F=S(),M=1;const V=S(),_=S(),[b,j,x]=(()=>{let e;const[n,o]=(()=>{const e=[];let t=0;return[r=>(r?d(e):null)??""+t++,t=>{A.test(t)&&s(e)<1e3&&l(e,t)}]})(),i=S();return[(t,r,s,o=[],c=()=>[])=>{e??=te;const l=n(1);var a,d;return z(i,l,[t,r,s,o,c]),a=I(r,s??[""],O),d=l,a?.add(d),l},(r,n,...o)=>c(((e,r=[""])=>{const n=[],o=(e,i)=>i==s(r)?l(n,e):t(r[i])?f(e,e=>o(e,i+1)):c([r[i],null],t=>o(y(e,t),i+1));return o(e,0),n})(r,n),t=>f(t,t=>y(i,t)[0](e,...n??[],...o))),e=>r(y(i,e),([,t,r])=>(I(t,r??[""],void 0,t=>(C(t,e),g(t)?1:0)),z(i,e),o(e),r)),n=>r(y(i,n),([r,,n=[],o,i])=>{const l=(...a)=>{const d=s(a);d==s(n)?r(e,...a,...i(a)):t(n[d])?c(o[d]?.(...a)??[],e=>l(...a,e)):l(...a,n[d])};l()})]})(),B=S(),T=S(),W=[],$=[],m=(e,t)=>{M=0,n.transaction(()=>{const[r,s]=y(B,t);f(r,(t,r)=>f(t,(t,s)=>f(t,(t,o)=>n.setOrDelCell(r,s,o,t[e],!0)))),f(s,(t,r)=>n.setOrDelValue(r,t[e],!0))}),M=1},q=e=>{z(B,e),z(T,e),j(_,[e])},G=(e,t)=>c(((e,t)=>e.splice(0,t))(e,t??s(e)),q),H=()=>G(W,s(W)-w),J=()=>r(u,()=>{l(W,u),H(),G($),u=void 0,k=1}),K=()=>{u=a(W),k=1};let N,P;const Q=(t="")=>(e(u)&&(u=""+p++,z(B,u,[D,F]),Z(u,t),D=S(),F=S(),k=1),u),R=()=>{i(W)||(((e,...t)=>{e.unshift(...t)})($,Q()),m(0,u),u=a(W),k=1)},U=()=>{i($)||(l(W,u),u=d($),m(1,u),k=1)},X=()=>{k&&(j(V),k=0)},Y=e=>{const t=Q(e);return X(),t},Z=(e,t)=>(ee(e)&&y(T,e)!==t&&(z(T,e,t),j(_,[e])),te),ee=e=>v(B,e),te={setSize:e=>(w=e,H(),te),addCheckpoint:Y,setCheckpoint:Z,getStore:()=>n,getCheckpointIds:()=>[[...W],u,[...$]],forEachCheckpoint:e=>{return t=e,f(T,(e,r)=>t(r,e));var t},hasCheckpoint:ee,getCheckpoint:e=>y(T,e),goBackward:()=>(R(),X(),te),goForward:()=>(U(),X(),te),goTo:t=>{const r=o(W,t)?R:o($,t)?U:void 0;for(;!e(r)&&t!=u;)r();return X(),te},addCheckpointIdsListener:e=>b(e,V),addCheckpointListener:(e,t)=>b(t,_,[e]),delListener:e=>(x(e),te),clear:()=>(G(W),G($),e(u)||q(u),u=void 0,p=0,Y(),te),clearForward:()=>(i($)||(G($),j(V)),te),destroy:()=>{n.delListener(N),n.delListener(P)},getListenerStats:()=>({checkpointIds:h(V),checkpoint:h(_)}),_registerListeners:()=>{N=n.addCellListener(null,null,null,(e,t,r,n,s,o)=>{if(M){J();const e=E(D,t,S),c=E(e,r,S),i=E(c,n,()=>[o,void 0]);i[1]=s,i[0]===s&&g(z(c,n))&&g(z(e,r))&&g(z(D,t))&&K(),X()}}),P=n.addValueListener(null,(e,t,r,n)=>{if(M){J();const e=E(F,t,()=>[n,void 0]);e[1]=r,e[0]===r&&g(z(F,t))&&K(),X()}})}};return L(te.clear())})(u));const p=n.get(u);return p._registerListeners(),p}})();export{D as createCheckpoints};
1
+ const e=e=>void 0===e,t=e=>null===e,n=(r=e,(e,t,n)=>r(e)?n?.():t(e));var r;const s=e=>e.length,o=(e,t)=>e.includes(t),c=(e,t)=>e.forEach(t),i=e=>0==s(e),a=(e,...t)=>e.push(...t),d=e=>e.pop(),l=e=>e.shift(),u=e=>e?.size??0,h=(p=u,e=>{return t=(e,t)=>e+p(t),k(e).reduce(t,0);var t});var p;const v=(e,t)=>e?.has(t)??!1,g=t=>e(t)||0==u(t),k=e=>[...e?.values()??[]],f=(e,t)=>e?.forEach(t),L=(e,t)=>e?.delete(t),C=Object.freeze,w=Map,S=e=>new w(e),_=(e,t)=>e?.get(t),y=(t,n,r)=>e(r)?(L(t,n),t):t?.set(n,r),z=(e,t,n,r)=>(v(e,t)?r?.(_(e,t)):y(e,t,n()),_(e,t)),E=(e,t,r,o,c=0)=>n((r?z:_)(e,t[c],c>s(t)-2?r:S),n=>{if(c>s(t)-2)return o?.(n)&&y(e,t[c]),n;const i=E(n,t,r,o,c+1);return g(n)&&y(e,t[c]),i}),I=t=>new Set(Array.isArray(t)||e(t)?t:[t]),A=/^\d+$/,F=(()=>{const r=new WeakMap;return u=>{r.has(u)||r.set(u,(r=>{let u,p,k,w=100,F=S(),M=S(),b=1;const j=S(),x=S(),[B,O,T]=(()=>{let e;const[r,o]=(()=>{const e=[];let t=0;return[n=>(n?l(e):null)??""+t++,t=>{A.test(t)&&s(e)<1e3&&a(e,t)}]})(),i=S();return[(t,n,s,o=[],c=()=>[])=>{e??=te;const a=r(1);var d,l;return y(i,a,[t,n,s,o,c]),d=E(n,s??[""],I),l=a,d?.add(l),a},(n,r,...o)=>c(((e,n=[""])=>{const r=[],o=(e,i)=>i==s(n)?a(r,e):t(n[i])?f(e,e=>o(e,i+1)):c([n[i],null],t=>o(_(e,t),i+1));return o(e,0),r})(n,r),t=>f(t,t=>_(i,t)[0](e,...r??[],...o))),e=>n(_(i,e),([,t,n])=>(E(t,n??[""],void 0,t=>(L(t,e),g(t)?1:0)),y(i,e),o(e),n)),r=>n(_(i,r),([n,,r=[],o,i])=>{const a=(...d)=>{const l=s(d);l==s(r)?n(e,...d,...i(d)):t(r[l])?c(o[l]?.(...d)??[],e=>a(...d,e)):a(...d,r[l])};a()})]})(),V=S(),W=S(),$=[],m=[],q=(e,t)=>{b=0,r.transaction(()=>{const[n,s]=_(V,t);f(n,(t,n)=>f(t,(t,s)=>f(t,(t,o)=>r._[5](n,s,o,t[e],!0)))),f(s,(t,n)=>r._[6](n,t[e],!0))}),b=1},D=e=>{y(V,e),y(W,e),O(x,[e])},G=(e,t)=>c(((e,t)=>e.splice(0,t))(e,t??s(e)),D),H=()=>G($,s($)-w),J=()=>n(u,()=>{a($,u),H(),G(m),u=void 0,k=1}),K=()=>{u=d($),k=1};let N,P;const Q=(t="")=>(e(u)&&(u=""+p++,y(V,u,[F,M]),Z(u,t),F=S(),M=S(),k=1),u),R=()=>{i($)||(((e,...t)=>{e.unshift(...t)})(m,Q()),q(0,u),u=d($),k=1)},U=()=>{i(m)||(a($,u),u=l(m),q(1,u),k=1)},X=()=>{k&&(O(j),k=0)},Y=e=>{const t=Q(e);return X(),t},Z=(e,t)=>(ee(e)&&_(W,e)!==t&&(y(W,e,t),O(x,[e])),te),ee=e=>v(V,e),te={setSize:e=>(w=e,H(),te),addCheckpoint:Y,setCheckpoint:Z,getStore:()=>r,getCheckpointIds:()=>[[...$],u,[...m]],forEachCheckpoint:e=>{return t=e,f(W,(e,n)=>t(n,e));var t},hasCheckpoint:ee,getCheckpoint:e=>_(W,e),goBackward:()=>(R(),X(),te),goForward:()=>(U(),X(),te),goTo:t=>{const n=o($,t)?R:o(m,t)?U:void 0;for(;!e(n)&&t!=u;)n();return X(),te},addCheckpointIdsListener:e=>B(e,j),addCheckpointListener:(e,t)=>B(t,x,[e]),delListener:e=>(T(e),te),clear:()=>(G($),G(m),e(u)||D(u),u=void 0,p=0,Y(),te),clearForward:()=>(i(m)||(G(m),O(j)),te),destroy:()=>{r.delListener(N),r.delListener(P)},getListenerStats:()=>({checkpointIds:h(j),checkpoint:h(x)}),_registerListeners:()=>{N=r.addCellListener(null,null,null,(e,t,n,r,s,o)=>{if(b){J();const e=z(F,t,S),c=z(e,n,S),i=z(c,r,()=>[o,void 0]);i[1]=s,i[0]===s&&g(y(c,r))&&g(y(e,n))&&g(y(F,t))&&K(),X()}}),P=r.addValueListener(null,(e,t,n,r)=>{if(b){J();const e=z(M,t,()=>[r,void 0]);e[1]=n,e[0]===n&&g(y(M,t))&&K(),X()}})}};return C(te.clear())})(u));const p=r.get(u);return p._registerListeners(),p}})();export{F as createCheckpoints};