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
@@ -15,6 +15,8 @@ const STRING = getTypeOf(EMPTY_STRING);
15
15
  const BOOLEAN = getTypeOf(true);
16
16
  const NUMBER = getTypeOf(0);
17
17
  const FUNCTION$1 = getTypeOf(getTypeOf);
18
+ const OBJECT = 'object';
19
+ const ARRAY = 'array';
18
20
  const TRUE = 'true';
19
21
  const TYPE = 'type';
20
22
  const DEFAULT = 'default';
@@ -68,6 +70,7 @@ const EXTRA = 'extra';
68
70
  const T = 't';
69
71
  const V = 'v';
70
72
  const UNDEFINED = '\uFFFC';
73
+ const JSON_PREFIX = '\uFFFD';
71
74
  const id = (key) => EMPTY_STRING + key;
72
75
  const strStartsWith = (str, prefix) => str.startsWith(prefix);
73
76
  const strEndsWith = (str, suffix) => str.endsWith(suffix);
@@ -619,18 +622,12 @@ const createCheckpoints = getCreateFunction(
619
622
  collForEach(cellsDelta2, (table, tableId) =>
620
623
  collForEach(table, (row, rowId) =>
621
624
  collForEach(row, (oldNew, cellId) =>
622
- store.setOrDelCell(
623
- tableId,
624
- rowId,
625
- cellId,
626
- oldNew[oldOrNew],
627
- true,
628
- ),
625
+ store._[5](tableId, rowId, cellId, oldNew[oldOrNew], true),
629
626
  ),
630
627
  ),
631
628
  );
632
629
  collForEach(valuesDelta2, (oldNew, valueId) =>
633
- store.setOrDelValue(valueId, oldNew[oldOrNew], true),
630
+ store._[6](valueId, oldNew[oldOrNew], true),
634
631
  );
635
632
  });
636
633
  listening = 1;
@@ -1233,6 +1230,12 @@ const getCellOrValueType = (cellOrValue) => {
1233
1230
  if (isNull(cellOrValue)) {
1234
1231
  return NULL;
1235
1232
  }
1233
+ if (isArray(cellOrValue)) {
1234
+ return ARRAY;
1235
+ }
1236
+ if (isObject(cellOrValue)) {
1237
+ return OBJECT;
1238
+ }
1236
1239
  const type = getTypeOf(cellOrValue);
1237
1240
  return isTypeStringOrBoolean(type) ||
1238
1241
  (type == NUMBER && isFiniteNumber(cellOrValue))
@@ -1241,17 +1244,33 @@ const getCellOrValueType = (cellOrValue) => {
1241
1244
  };
1242
1245
  const isCellOrValueOrUndefined = (cellOrValue) =>
1243
1246
  isUndefined(cellOrValue) || !isUndefined(getCellOrValueType(cellOrValue));
1244
- const getTypeCase = (type, stringCase, numberCase, booleanCase) =>
1247
+ const isJsonType = (type) => type == OBJECT || type == ARRAY;
1248
+ const encodeIfJson = (value) =>
1249
+ isObject(value) || isArray(value) ? JSON_PREFIX + jsonString(value) : value;
1250
+ const isEncodedJson = (value) => isString(value) && value[0] == JSON_PREFIX;
1251
+ const decodeIfJson = (raw, _id, encoded) =>
1252
+ !encoded && isEncodedJson(raw) ? jsonParse(slice(raw, 1)) : raw;
1253
+ const getTypeCase = (
1254
+ type,
1255
+ stringCase,
1256
+ numberCase,
1257
+ booleanCase,
1258
+ objectCase,
1259
+ arrayCase,
1260
+ ) =>
1245
1261
  type == STRING
1246
1262
  ? stringCase
1247
1263
  : type == NUMBER
1248
1264
  ? numberCase
1249
1265
  : type == BOOLEAN
1250
1266
  ? booleanCase
1251
- : null;
1267
+ : type == OBJECT
1268
+ ? objectCase
1269
+ : type == ARRAY
1270
+ ? arrayCase
1271
+ : null;
1252
1272
 
1253
1273
  const stampClone = ([value, hlc]) => stampNew(value, hlc);
1254
- const stampCloneWithHash = ([value, hlc, hash]) => [value, hlc, hash];
1255
1274
  const stampNew = (value, hlc) => (hlc ? [value, hlc] : [value]);
1256
1275
  const stampNewWithHash = (value, hlc, hash) => [value, hlc, hash];
1257
1276
  const getStampHash = (stamp) => stamp[2];
@@ -1268,10 +1287,11 @@ const stampUpdate = (stamp, hlc, hash) => {
1268
1287
  };
1269
1288
  const stampNewObj = (hlc = EMPTY_STRING) => stampNew(objNew(), hlc);
1270
1289
  const stampNewMap = (hlc = EMPTY_STRING) => [mapNew(), hlc, 0];
1271
- const stampMapToObjWithHash = (
1272
- [map, hlc, hash],
1273
- mapper = stampCloneWithHash,
1274
- ) => [mapToObj(map, mapper), hlc, hash];
1290
+ const stampMapToObjWithHash = ([map, hlc, hash], mapper) => [
1291
+ mapToObj(map, mapper),
1292
+ hlc,
1293
+ hash,
1294
+ ];
1275
1295
  const stampMapToObjWithoutHash = ([map, hlc], mapper = stampClone) =>
1276
1296
  stampNew(mapToObj(map, mapper), hlc);
1277
1297
  const stampValidate = (stamp, validateThing) =>
@@ -1378,15 +1398,19 @@ const createStore = () => {
1378
1398
  return false;
1379
1399
  }
1380
1400
  const type = schema[TYPE];
1381
- if (!isTypeStringOrBoolean(type) && type != NUMBER) {
1401
+ if (!isTypeStringOrBoolean(type) && type != NUMBER && !isJsonType(type)) {
1382
1402
  return false;
1383
1403
  }
1384
1404
  const defaultValue = schema[DEFAULT];
1385
1405
  if (isNull(defaultValue) && !schema[ALLOW_NULL]) {
1386
1406
  return false;
1387
1407
  }
1388
- if (!isNull(defaultValue) && getCellOrValueType(defaultValue) != type) {
1389
- objDel(schema, DEFAULT);
1408
+ if (!isNull(defaultValue)) {
1409
+ if (getCellOrValueType(defaultValue) != type) {
1410
+ objDel(schema, DEFAULT);
1411
+ } else {
1412
+ schema[DEFAULT] = encodeIfJson(defaultValue);
1413
+ }
1390
1414
  }
1391
1415
  return true;
1392
1416
  };
@@ -1426,20 +1450,22 @@ const createStore = () => {
1426
1450
  ? cellSchema[ALLOW_NULL]
1427
1451
  ? cell
1428
1452
  : cellInvalid(tableId, rowId, cellId, cell, cellSchema[DEFAULT])
1429
- : getCellOrValueType(cell) == cellSchema[TYPE]
1430
- ? cell
1431
- : cellInvalid(
1432
- tableId,
1433
- rowId,
1434
- cellId,
1435
- cell,
1436
- cellSchema[DEFAULT],
1437
- ),
1453
+ : getCellOrValueType(cell) === cellSchema[TYPE]
1454
+ ? encodeIfJson(cell)
1455
+ : isJsonType(cellSchema[TYPE]) && isEncodedJson(cell)
1456
+ ? cell
1457
+ : cellInvalid(
1458
+ tableId,
1459
+ rowId,
1460
+ cellId,
1461
+ cell,
1462
+ cellSchema[DEFAULT],
1463
+ ),
1438
1464
  () => cellInvalid(tableId, rowId, cellId, cell),
1439
1465
  )
1440
1466
  : isUndefined(getCellOrValueType(cell))
1441
1467
  ? cellInvalid(tableId, rowId, cellId, cell)
1442
- : cell;
1468
+ : encodeIfJson(cell);
1443
1469
  const validateValues = (values, skipDefaults) =>
1444
1470
  objValidate(
1445
1471
  skipDefaults ? values : addDefaultsToValues(values),
@@ -1463,14 +1489,16 @@ const createStore = () => {
1463
1489
  ? valueSchema[ALLOW_NULL]
1464
1490
  ? value
1465
1491
  : valueInvalid(valueId, value, valueSchema[DEFAULT])
1466
- : getCellOrValueType(value) == valueSchema[TYPE]
1467
- ? value
1468
- : valueInvalid(valueId, value, valueSchema[DEFAULT]),
1492
+ : getCellOrValueType(value) === valueSchema[TYPE]
1493
+ ? encodeIfJson(value)
1494
+ : isJsonType(valueSchema[TYPE]) && isEncodedJson(value)
1495
+ ? value
1496
+ : valueInvalid(valueId, value, valueSchema[DEFAULT]),
1469
1497
  () => valueInvalid(valueId, value),
1470
1498
  )
1471
1499
  : isUndefined(getCellOrValueType(value))
1472
1500
  ? valueInvalid(valueId, value)
1473
- : value;
1501
+ : encodeIfJson(value);
1474
1502
  const addDefaultsToRow = (row, tableId, rowId) => {
1475
1503
  ifNotUndefined(
1476
1504
  mapGet(tablesSchemaRowCache, tableId),
@@ -1893,13 +1921,21 @@ const createStore = () => {
1893
1921
  const getCellChange = (tableId, rowId, cellId) =>
1894
1922
  ifNotUndefined(
1895
1923
  mapGet(mapGet(mapGet(changedCells, tableId), rowId), cellId),
1896
- ([oldCell, newCell]) => [true, oldCell, newCell],
1924
+ ([oldCell, newCell]) => [
1925
+ true,
1926
+ decodeIfJson(oldCell),
1927
+ decodeIfJson(newCell),
1928
+ ],
1897
1929
  () => [false, ...pairNew(getCell(tableId, rowId, cellId))],
1898
1930
  );
1899
1931
  const getValueChange = (valueId) =>
1900
1932
  ifNotUndefined(
1901
1933
  mapGet(changedValues, valueId),
1902
- ([oldValue, newValue]) => [true, oldValue, newValue],
1934
+ ([oldValue, newValue]) => [
1935
+ true,
1936
+ decodeIfJson(oldValue),
1937
+ decodeIfJson(newValue),
1938
+ ],
1903
1939
  () => [false, ...pairNew(getValue(valueId))],
1904
1940
  );
1905
1941
  const callInvalidCellListeners = (mutator) =>
@@ -2075,8 +2111,8 @@ const createStore = () => {
2075
2111
  callListeners(
2076
2112
  cellListeners[mutator],
2077
2113
  [tableId, rowId, cellId],
2078
- newCell,
2079
- oldCell,
2114
+ decodeIfJson(newCell),
2115
+ decodeIfJson(oldCell),
2080
2116
  getCellChange,
2081
2117
  );
2082
2118
  tablesChanged = tableChanged = rowChanged = 1;
@@ -2132,8 +2168,8 @@ const createStore = () => {
2132
2168
  callListeners(
2133
2169
  valueListeners[mutator],
2134
2170
  [valueId],
2135
- newValue,
2136
- oldValue,
2171
+ decodeIfJson(newValue),
2172
+ decodeIfJson(oldValue),
2137
2173
  getValueChange,
2138
2174
  );
2139
2175
  valuesChanged = 1;
@@ -2170,10 +2206,42 @@ const createStore = () => {
2170
2206
  [getTableIds],
2171
2207
  );
2172
2208
  };
2209
+ const getTransactionChangesImpl = (encoded = false) => [
2210
+ mapToObj(
2211
+ changedCells,
2212
+ (table, tableId) =>
2213
+ mapGet(changedTableIds, tableId) === -1
2214
+ ? void 0
2215
+ : mapToObj(
2216
+ table,
2217
+ (row, rowId) =>
2218
+ mapGet(mapGet(changedRowIds, tableId), rowId) === -1
2219
+ ? void 0
2220
+ : mapToObj(
2221
+ row,
2222
+ ([, newCell]) =>
2223
+ decodeIfJson(newCell, EMPTY_STRING, encoded),
2224
+ (changedCell) => pairIsEqual(changedCell),
2225
+ ),
2226
+ collIsEmpty,
2227
+ objIsEmpty,
2228
+ ),
2229
+ collIsEmpty,
2230
+ objIsEmpty,
2231
+ ),
2232
+ mapToObj(
2233
+ changedValues,
2234
+ ([, newValue]) => decodeIfJson(newValue, EMPTY_STRING, encoded),
2235
+ (changedValue) => pairIsEqual(changedValue),
2236
+ ),
2237
+ 1,
2238
+ ];
2173
2239
  const getContent = () => [getTables(), getValues()];
2174
- const getTables = () => mapToObj3(tablesMap);
2240
+ const getEncodedContent = () => [mapToObj3(tablesMap), mapToObj(valuesMap)];
2241
+ const getTables = () => mapToObj3(tablesMap, decodeIfJson);
2175
2242
  const getTableIds = () => mapKeys(tablesMap);
2176
- const getTable = (tableId) => mapToObj2(mapGet(tablesMap, id(tableId)));
2243
+ const getTable = (tableId) =>
2244
+ mapToObj2(mapGet(tablesMap, id(tableId)), decodeIfJson);
2177
2245
  const getTableCellIds = (tableId) =>
2178
2246
  mapKeys(mapGet(tableCellIds, id(tableId)));
2179
2247
  const getRowCount = (tableId) => collSize(mapGet(tablesMap, id(tableId)));
@@ -2209,14 +2277,16 @@ const createStore = () => {
2209
2277
  ([, rowId]) => rowId,
2210
2278
  );
2211
2279
  const getRow = (tableId, rowId) =>
2212
- mapToObj(mapGet(mapGet(tablesMap, id(tableId)), id(rowId)));
2280
+ mapToObj(mapGet(mapGet(tablesMap, id(tableId)), id(rowId)), decodeIfJson);
2213
2281
  const getCellIds = (tableId, rowId) =>
2214
2282
  mapKeys(mapGet(mapGet(tablesMap, id(tableId)), id(rowId)));
2215
2283
  const getCell = (tableId, rowId, cellId) =>
2216
- mapGet(mapGet(mapGet(tablesMap, id(tableId)), id(rowId)), id(cellId));
2217
- const getValues = () => mapToObj(valuesMap);
2284
+ decodeIfJson(
2285
+ mapGet(mapGet(mapGet(tablesMap, id(tableId)), id(rowId)), id(cellId)),
2286
+ );
2287
+ const getValues = () => mapToObj(valuesMap, decodeIfJson);
2218
2288
  const getValueIds = () => mapKeys(valuesMap);
2219
- const getValue = (valueId) => mapGet(valuesMap, id(valueId));
2289
+ const getValue = (valueId) => decodeIfJson(mapGet(valuesMap, id(valueId)));
2220
2290
  const hasTables = () => !collIsEmpty(tablesMap);
2221
2291
  const hasTable = (tableId) => collHas(tablesMap, id(tableId));
2222
2292
  const hasTableCell = (tableId, cellId) =>
@@ -2503,35 +2573,8 @@ const createStore = () => {
2503
2573
  }
2504
2574
  return store;
2505
2575
  };
2506
- const getTransactionChanges = () => [
2507
- mapToObj(
2508
- changedCells,
2509
- (table, tableId) =>
2510
- mapGet(changedTableIds, tableId) === -1
2511
- ? void 0
2512
- : mapToObj(
2513
- table,
2514
- (row, rowId) =>
2515
- mapGet(mapGet(changedRowIds, tableId), rowId) === -1
2516
- ? void 0
2517
- : mapToObj(
2518
- row,
2519
- ([, newCell]) => newCell,
2520
- (changedCell) => pairIsEqual(changedCell),
2521
- ),
2522
- collIsEmpty,
2523
- objIsEmpty,
2524
- ),
2525
- collIsEmpty,
2526
- objIsEmpty,
2527
- ),
2528
- mapToObj(
2529
- changedValues,
2530
- ([, newValue]) => newValue,
2531
- (changedValue) => pairIsEqual(changedValue),
2532
- ),
2533
- 1,
2534
- ];
2576
+ const getTransactionChanges = () => getTransactionChangesImpl();
2577
+ const getEncodedTransactionChanges = () => getTransactionChangesImpl(true);
2535
2578
  const getTransactionLog = () => [
2536
2579
  !collIsEmpty(changedCells),
2537
2580
  !collIsEmpty(changedValues),
@@ -2645,7 +2688,9 @@ const createStore = () => {
2645
2688
  tableCallback(tableId, (rowCallback) =>
2646
2689
  collForEach(tableMap, (rowMap, rowId) =>
2647
2690
  rowCallback(rowId, (cellCallback) =>
2648
- mapForEach(rowMap, cellCallback),
2691
+ mapForEach(rowMap, (cellId, cell) =>
2692
+ cellCallback(cellId, decodeIfJson(cell)),
2693
+ ),
2649
2694
  ),
2650
2695
  ),
2651
2696
  ),
@@ -2654,11 +2699,21 @@ const createStore = () => {
2654
2699
  mapForEach(mapGet(tableCellIds, id(tableId)), tableCellCallback);
2655
2700
  const forEachRow = (tableId, rowCallback) =>
2656
2701
  collForEach(mapGet(tablesMap, id(tableId)), (rowMap, rowId) =>
2657
- rowCallback(rowId, (cellCallback) => mapForEach(rowMap, cellCallback)),
2702
+ rowCallback(rowId, (cellCallback) =>
2703
+ mapForEach(rowMap, (cellId, cell) =>
2704
+ cellCallback(cellId, decodeIfJson(cell)),
2705
+ ),
2706
+ ),
2658
2707
  );
2659
2708
  const forEachCell = (tableId, rowId, cellCallback) =>
2660
- mapForEach(mapGet(mapGet(tablesMap, id(tableId)), id(rowId)), cellCallback);
2661
- const forEachValue = (valueCallback) => mapForEach(valuesMap, valueCallback);
2709
+ mapForEach(
2710
+ mapGet(mapGet(tablesMap, id(tableId)), id(rowId)),
2711
+ (cellId, cell) => cellCallback(cellId, decodeIfJson(cell)),
2712
+ );
2713
+ const forEachValue = (valueCallback) =>
2714
+ mapForEach(valuesMap, (valueId, value) =>
2715
+ valueCallback(valueId, decodeIfJson(value)),
2716
+ );
2662
2717
  const addSortedRowIdsListener = (
2663
2718
  tableIdOrArgs,
2664
2719
  cellIdOrListener,
@@ -2850,14 +2905,17 @@ const createStore = () => {
2850
2905
  delListener,
2851
2906
  getListenerStats,
2852
2907
  isMergeable: () => false,
2853
- // only used internally by other modules
2854
- createStore,
2855
- addListener,
2856
- callListeners,
2857
- setInternalListeners,
2858
- setMiddleware,
2859
- setOrDelCell,
2860
- setOrDelValue,
2908
+ _: [
2909
+ createStore,
2910
+ addListener,
2911
+ callListeners,
2912
+ setInternalListeners,
2913
+ setMiddleware,
2914
+ setOrDelCell,
2915
+ setOrDelValue,
2916
+ getEncodedContent,
2917
+ getEncodedTransactionChanges,
2918
+ ],
2861
2919
  };
2862
2920
  objMap(
2863
2921
  {
@@ -3172,14 +3230,78 @@ const createMergeableStore = (uniqueId, getNow) => {
3172
3230
  ]);
3173
3231
  }
3174
3232
  };
3175
- const getMergeableContent = () => [
3233
+ const getMergeableContentImpl = (encoded = false) => [
3176
3234
  stampMapToObjWithHash(contentStampMap[0], (tableStampMap) =>
3177
3235
  stampMapToObjWithHash(tableStampMap, (rowStampMap) =>
3178
- stampMapToObjWithHash(rowStampMap),
3236
+ stampMapToObjWithHash(rowStampMap, ([cell, hlc, hash]) => [
3237
+ decodeIfJson(cell, EMPTY_STRING, encoded),
3238
+ hlc,
3239
+ hash,
3240
+ ]),
3179
3241
  ),
3180
3242
  ),
3181
- stampMapToObjWithHash(contentStampMap[1]),
3243
+ stampMapToObjWithHash(contentStampMap[1], ([value, hlc, hash]) => [
3244
+ decodeIfJson(value, EMPTY_STRING, encoded),
3245
+ hlc,
3246
+ hash,
3247
+ ]),
3182
3248
  ];
3249
+ const getTransactionMergeableChangesImpl = (withHashes, encoded = false) => {
3250
+ const [
3251
+ [tableStampMaps, tablesHlc, tablesHash],
3252
+ [valueStampMaps, valuesHlc, valuesHash],
3253
+ ] = contentStampMap;
3254
+ const newStamp = withHashes ? stampNewWithHash : stampNew;
3255
+ const tablesObj = {};
3256
+ collForEach(touchedCells, (touchedTable, tableId) =>
3257
+ ifNotUndefined(
3258
+ mapGet(tableStampMaps, tableId),
3259
+ ([rowStampMaps, tableHlc, tableHash]) => {
3260
+ const tableObj = {};
3261
+ collForEach(touchedTable, (touchedRow, rowId) =>
3262
+ ifNotUndefined(
3263
+ mapGet(rowStampMaps, rowId),
3264
+ ([cellStampMaps, rowHlc, rowHash]) => {
3265
+ const rowObj = {};
3266
+ collForEach(touchedRow, (cellId) => {
3267
+ ifNotUndefined(
3268
+ mapGet(cellStampMaps, cellId),
3269
+ ([cell, time, hash]) =>
3270
+ (rowObj[cellId] = newStamp(
3271
+ encoded ? cell : decodeIfJson(cell),
3272
+ time,
3273
+ hash,
3274
+ )),
3275
+ );
3276
+ });
3277
+ tableObj[rowId] = newStamp(rowObj, rowHlc, rowHash);
3278
+ },
3279
+ ),
3280
+ );
3281
+ tablesObj[tableId] = newStamp(tableObj, tableHlc, tableHash);
3282
+ },
3283
+ ),
3284
+ );
3285
+ const valuesObj = {};
3286
+ collForEach(touchedValues, (valueId) =>
3287
+ ifNotUndefined(
3288
+ mapGet(valueStampMaps, valueId),
3289
+ ([value, time, hash]) =>
3290
+ (valuesObj[valueId] = newStamp(
3291
+ encoded ? value : decodeIfJson(value),
3292
+ time,
3293
+ hash,
3294
+ )),
3295
+ ),
3296
+ );
3297
+ return [
3298
+ newStamp(tablesObj, tablesHlc, tablesHash),
3299
+ newStamp(valuesObj, valuesHlc, valuesHash),
3300
+ 1,
3301
+ ];
3302
+ };
3303
+ const getMergeableContent = () => getMergeableContentImpl();
3304
+ const getEncodedMergeableContent = () => getMergeableContentImpl(true);
3183
3305
  const getMergeableContentHashes = () => [
3184
3306
  contentStampMap[0][2],
3185
3307
  contentStampMap[1][2],
@@ -3319,52 +3441,10 @@ const createMergeableStore = (uniqueId, getNow) => {
3319
3441
  });
3320
3442
  return mergeableStore;
3321
3443
  };
3322
- const getTransactionMergeableChanges = (withHashes = false) => {
3323
- const [
3324
- [tableStampMaps, tablesHlc, tablesHash],
3325
- [valueStampMaps, valuesHlc, valuesHash],
3326
- ] = contentStampMap;
3327
- const newStamp = withHashes ? stampNewWithHash : stampNew;
3328
- const tablesObj = {};
3329
- collForEach(touchedCells, (touchedTable, tableId) =>
3330
- ifNotUndefined(
3331
- mapGet(tableStampMaps, tableId),
3332
- ([rowStampMaps, tableHlc, tableHash]) => {
3333
- const tableObj = {};
3334
- collForEach(touchedTable, (touchedRow, rowId) =>
3335
- ifNotUndefined(
3336
- mapGet(rowStampMaps, rowId),
3337
- ([cellStampMaps, rowHlc, rowHash]) => {
3338
- const rowObj = {};
3339
- collForEach(touchedRow, (cellId) => {
3340
- ifNotUndefined(
3341
- mapGet(cellStampMaps, cellId),
3342
- ([cell, time, hash]) =>
3343
- (rowObj[cellId] = newStamp(cell, time, hash)),
3344
- );
3345
- });
3346
- tableObj[rowId] = newStamp(rowObj, rowHlc, rowHash);
3347
- },
3348
- ),
3349
- );
3350
- tablesObj[tableId] = newStamp(tableObj, tableHlc, tableHash);
3351
- },
3352
- ),
3353
- );
3354
- const valuesObj = {};
3355
- collForEach(touchedValues, (valueId) =>
3356
- ifNotUndefined(
3357
- mapGet(valueStampMaps, valueId),
3358
- ([value, time, hash]) =>
3359
- (valuesObj[valueId] = newStamp(value, time, hash)),
3360
- ),
3361
- );
3362
- return [
3363
- newStamp(tablesObj, tablesHlc, tablesHash),
3364
- newStamp(valuesObj, valuesHlc, valuesHash),
3365
- 1,
3366
- ];
3367
- };
3444
+ const getTransactionMergeableChanges = (withHashes = false) =>
3445
+ getTransactionMergeableChangesImpl(withHashes);
3446
+ const getEncodedTransactionMergeableChanges = (withHashes) =>
3447
+ getTransactionMergeableChangesImpl(withHashes, true);
3368
3448
  const applyMergeableChanges = (mergeableChanges) =>
3369
3449
  disableListeningToRawStoreChanges(() =>
3370
3450
  store.applyChanges(mergeContentOrChanges(mergeableChanges)),
@@ -3396,10 +3476,13 @@ const createMergeableStore = (uniqueId, getNow) => {
3396
3476
  getTransactionMergeableChanges,
3397
3477
  applyMergeableChanges,
3398
3478
  merge,
3399
- // only used internally by other modules
3400
- hadMutated,
3479
+ __: [
3480
+ hadMutated,
3481
+ getEncodedMergeableContent,
3482
+ getEncodedTransactionMergeableChanges,
3483
+ ],
3401
3484
  };
3402
- store.setInternalListeners(
3485
+ store._[3](
3403
3486
  preStartTransaction,
3404
3487
  preFinishTransaction,
3405
3488
  postFinishTransaction,
@@ -3718,7 +3801,7 @@ const createMiddleware = getCreateFunction((store) => {
3718
3801
  addDidSetRowCallback,
3719
3802
  destroy,
3720
3803
  });
3721
- store.setMiddleware(
3804
+ store._[4](
3722
3805
  willSetContent,
3723
3806
  willSetTables,
3724
3807
  willSetTable,
@@ -3758,8 +3841,8 @@ const getStoreFunctions = (
3758
3841
  persist != 1 /* StoreOnly */ && store.isMergeable()
3759
3842
  ? [
3760
3843
  1,
3761
- store.getMergeableContent,
3762
- () => store.getTransactionMergeableChanges(!isSynchronizer),
3844
+ store.__[1],
3845
+ () => store.__[2](!isSynchronizer),
3763
3846
  ([[changedTables], [changedValues]]) =>
3764
3847
  !objIsEmpty(changedTables) || !objIsEmpty(changedValues),
3765
3848
  store.setDefaultContent,
@@ -3767,8 +3850,8 @@ const getStoreFunctions = (
3767
3850
  : persist != 2 /* MergeableStoreOnly */
3768
3851
  ? [
3769
3852
  0,
3770
- store.getContent,
3771
- store.getTransactionChanges,
3853
+ store._[7],
3854
+ store._[8],
3772
3855
  ([changedTables, changedValues]) =>
3773
3856
  !objIsEmpty(changedTables) || !objIsEmpty(changedValues),
3774
3857
  store.setContent,
@@ -3833,7 +3916,7 @@ const createCustomPersister = (
3833
3916
  : store.setContent)(contentOrChanges);
3834
3917
  };
3835
3918
  const saveAfterMutated = async () => {
3836
- if (isAutoSaving() && store.hadMutated?.()) {
3919
+ if (isAutoSaving() && store.__?.[0]?.()) {
3837
3920
  await save();
3838
3921
  }
3839
3922
  };
@@ -6246,15 +6329,14 @@ const createYjsPersister = (
6246
6329
  };
6247
6330
 
6248
6331
  const createQueries = getCreateFunction((store) => {
6249
- const createStore = store.createStore;
6332
+ const createStore = store._[0];
6250
6333
  const preStore = createStore();
6251
6334
  const resultStore = createStore();
6252
6335
  const preStoreListenerIds = mapNew();
6253
6336
  const paramValuesListeners = mapNew();
6254
6337
  const paramValueListeners = mapNew();
6255
6338
  const {
6256
- addListener,
6257
- callListeners,
6339
+ _: [, addListener, callListeners],
6258
6340
  delListener: delListenerImpl,
6259
6341
  } = resultStore;
6260
6342
  const [
@@ -6573,7 +6655,7 @@ const createQueries = getCreateFunction((store) => {
6573
6655
  selectJoinWhereStore.transaction(() =>
6574
6656
  arrayEvery(wheres, (where2) => where2(getTableCell))
6575
6657
  ? mapForEach(selects, (asCellId, tableCellGetter) =>
6576
- selectJoinWhereStore.setOrDelCell(
6658
+ selectJoinWhereStore._[5](
6577
6659
  queryId,
6578
6660
  rootRowId,
6579
6661
  asCellId,
@@ -7894,6 +7976,10 @@ const IS_EQUALS = [
7894
7976
  (paramValues1, paramValues2) =>
7895
7977
  objIsEqual(paramValues1, paramValues2, arrayOrValueEqual),
7896
7978
  arrayOrValueEqual,
7979
+ (thing1, thing2) =>
7980
+ thing1 === thing2 ||
7981
+ ((isObject(thing1) || isArray(thing1)) &&
7982
+ jsonString(thing1) === jsonString(thing2)),
7897
7983
  ];
7898
7984
  const isEqual = (thing1, thing2) => thing1 === thing2;
7899
7985
  const useCreate = (store, create, createDeps = EMPTY_ARRAY) => {
@@ -9635,12 +9721,20 @@ const EditableThing = ({
9635
9721
  const [stringThing, setStringThing] = useState();
9636
9722
  const [numberThing, setNumberThing] = useState();
9637
9723
  const [booleanThing, setBooleanThing] = useState();
9724
+ const [objectThingJson, setObjectThingJson] = useState(EMPTY_STRING);
9725
+ const [arrayThingJson, setArrayThingJson] = useState(EMPTY_STRING);
9638
9726
  if (currentThing !== thing) {
9639
9727
  setThingType(getCellOrValueType(thing));
9640
9728
  setCurrentThing(thing);
9641
- setStringThing(String(thing));
9642
- setNumberThing(Number(thing) || 0);
9643
- setBooleanThing(Boolean(thing));
9729
+ if (isObject(thing)) {
9730
+ setObjectThingJson(jsonString(thing));
9731
+ } else if (isArray(thing)) {
9732
+ setArrayThingJson(jsonString(thing));
9733
+ } else {
9734
+ setStringThing(String(thing));
9735
+ setNumberThing(Number(thing) || 0);
9736
+ setBooleanThing(Boolean(thing));
9737
+ }
9644
9738
  }
9645
9739
  const handleThingChange = useCallback(
9646
9740
  (thing2, setTypedThing) => {
@@ -9652,12 +9746,21 @@ const EditableThing = ({
9652
9746
  );
9653
9747
  const handleTypeChange = useCallback(() => {
9654
9748
  if (!hasSchema?.()) {
9655
- const nextType = getTypeCase(thingType, NUMBER, BOOLEAN, STRING);
9749
+ const nextType = getTypeCase(
9750
+ thingType,
9751
+ NUMBER,
9752
+ BOOLEAN,
9753
+ OBJECT,
9754
+ ARRAY,
9755
+ STRING,
9756
+ );
9656
9757
  const thing2 = getTypeCase(
9657
9758
  nextType,
9658
9759
  stringThing,
9659
9760
  numberThing,
9660
9761
  booleanThing,
9762
+ objectThingJson ? jsonParse(objectThingJson) : {},
9763
+ arrayThingJson ? jsonParse(arrayThingJson) : [],
9661
9764
  );
9662
9765
  setThingType(nextType);
9663
9766
  setCurrentThing(thing2);
@@ -9669,6 +9772,8 @@ const EditableThing = ({
9669
9772
  stringThing,
9670
9773
  numberThing,
9671
9774
  booleanThing,
9775
+ objectThingJson,
9776
+ arrayThingJson,
9672
9777
  thingType,
9673
9778
  ]);
9674
9779
  const widget = getTypeCase(
@@ -9720,6 +9825,46 @@ const EditableThing = ({
9720
9825
  },
9721
9826
  thingType,
9722
9827
  ),
9828
+ /* @__PURE__ */ jsx(
9829
+ 'textarea',
9830
+ {
9831
+ value: objectThingJson,
9832
+ onChange: useCallback(
9833
+ (event) => {
9834
+ const str = event[CURRENT_TARGET][_VALUE];
9835
+ setObjectThingJson(str);
9836
+ try {
9837
+ const parsed = jsonParse(str);
9838
+ if (isObject(parsed)) {
9839
+ onThingChange(parsed);
9840
+ }
9841
+ } catch {}
9842
+ },
9843
+ [onThingChange],
9844
+ ),
9845
+ },
9846
+ thingType,
9847
+ ),
9848
+ /* @__PURE__ */ jsx(
9849
+ 'textarea',
9850
+ {
9851
+ value: arrayThingJson,
9852
+ onChange: useCallback(
9853
+ (event) => {
9854
+ const str = event[CURRENT_TARGET][_VALUE];
9855
+ setArrayThingJson(str);
9856
+ try {
9857
+ const parsed = jsonParse(str);
9858
+ if (isArray(parsed)) {
9859
+ onThingChange(parsed);
9860
+ }
9861
+ } catch {}
9862
+ },
9863
+ [onThingChange],
9864
+ ),
9865
+ },
9866
+ thingType,
9867
+ ),
9723
9868
  );
9724
9869
  return /* @__PURE__ */ jsxs('div', {
9725
9870
  className,