tinybase 5.0.0-beta.5 → 5.0.0-beta.6

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 (353) hide show
  1. package/lib/cjs/mergeable-store.cjs +1 -1
  2. package/lib/cjs/mergeable-store.cjs.gz +0 -0
  3. package/lib/cjs/persisters/persister-automerge.cjs +1 -1
  4. package/lib/cjs/persisters/persister-automerge.cjs.gz +0 -0
  5. package/lib/cjs/persisters/persister-browser.cjs +1 -1
  6. package/lib/cjs/persisters/persister-browser.cjs.gz +0 -0
  7. package/lib/cjs/persisters/persister-cr-sqlite-wasm.cjs +1 -1
  8. package/lib/cjs/persisters/persister-cr-sqlite-wasm.cjs.gz +0 -0
  9. package/lib/cjs/persisters/persister-electric-sql.cjs +1 -1
  10. package/lib/cjs/persisters/persister-electric-sql.cjs.gz +0 -0
  11. package/lib/cjs/persisters/persister-expo-sqlite-next.cjs +1 -1
  12. package/lib/cjs/persisters/persister-expo-sqlite-next.cjs.gz +0 -0
  13. package/lib/cjs/persisters/persister-expo-sqlite.cjs +1 -1
  14. package/lib/cjs/persisters/persister-expo-sqlite.cjs.gz +0 -0
  15. package/lib/cjs/persisters/persister-file.cjs +1 -1
  16. package/lib/cjs/persisters/persister-file.cjs.gz +0 -0
  17. package/lib/cjs/persisters/persister-indexed-db.cjs +1 -1
  18. package/lib/cjs/persisters/persister-indexed-db.cjs.gz +0 -0
  19. package/lib/cjs/persisters/persister-libsql.cjs +1 -1
  20. package/lib/cjs/persisters/persister-libsql.cjs.gz +0 -0
  21. package/lib/cjs/persisters/persister-partykit-client.cjs +1 -1
  22. package/lib/cjs/persisters/persister-partykit-client.cjs.gz +0 -0
  23. package/lib/cjs/persisters/persister-powersync.cjs +1 -0
  24. package/lib/cjs/persisters/persister-powersync.cjs.gz +0 -0
  25. package/lib/cjs/persisters/persister-remote.cjs +1 -1
  26. package/lib/cjs/persisters/persister-remote.cjs.gz +0 -0
  27. package/lib/cjs/persisters/persister-sqlite-wasm.cjs +1 -1
  28. package/lib/cjs/persisters/persister-sqlite-wasm.cjs.gz +0 -0
  29. package/lib/cjs/persisters/persister-sqlite3.cjs +1 -1
  30. package/lib/cjs/persisters/persister-sqlite3.cjs.gz +0 -0
  31. package/lib/cjs/persisters/persister-sync.cjs +1 -0
  32. package/lib/cjs/persisters/persister-sync.cjs.gz +0 -0
  33. package/lib/cjs/persisters/persister-yjs.cjs +1 -1
  34. package/lib/cjs/persisters/persister-yjs.cjs.gz +0 -0
  35. package/lib/cjs/persisters.cjs +1 -1
  36. package/lib/cjs/persisters.cjs.gz +0 -0
  37. package/lib/cjs/store.cjs +1 -1
  38. package/lib/cjs/store.cjs.gz +0 -0
  39. package/lib/cjs/tinybase.cjs +1 -1
  40. package/lib/cjs/tinybase.cjs.gz +0 -0
  41. package/lib/cjs/tools.cjs +1 -1
  42. package/lib/cjs/tools.cjs.gz +0 -0
  43. package/lib/cjs/ui-react-dom-debug.cjs +1 -1
  44. package/lib/cjs/ui-react-dom-debug.cjs.gz +0 -0
  45. package/lib/cjs/ui-react.cjs +1 -1
  46. package/lib/cjs/ui-react.cjs.gz +0 -0
  47. package/lib/cjs-es6/mergeable-store.cjs +1 -1
  48. package/lib/cjs-es6/mergeable-store.cjs.gz +0 -0
  49. package/lib/cjs-es6/persisters/persister-automerge.cjs +1 -1
  50. package/lib/cjs-es6/persisters/persister-automerge.cjs.gz +0 -0
  51. package/lib/cjs-es6/persisters/persister-browser.cjs +1 -1
  52. package/lib/cjs-es6/persisters/persister-browser.cjs.gz +0 -0
  53. package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs +1 -1
  54. package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs.gz +0 -0
  55. package/lib/cjs-es6/persisters/persister-electric-sql.cjs +1 -1
  56. package/lib/cjs-es6/persisters/persister-electric-sql.cjs.gz +0 -0
  57. package/lib/cjs-es6/persisters/persister-expo-sqlite-next.cjs +1 -1
  58. package/lib/cjs-es6/persisters/persister-expo-sqlite-next.cjs.gz +0 -0
  59. package/lib/cjs-es6/persisters/persister-expo-sqlite.cjs +1 -1
  60. package/lib/cjs-es6/persisters/persister-expo-sqlite.cjs.gz +0 -0
  61. package/lib/cjs-es6/persisters/persister-file.cjs +1 -1
  62. package/lib/cjs-es6/persisters/persister-file.cjs.gz +0 -0
  63. package/lib/cjs-es6/persisters/persister-indexed-db.cjs +1 -1
  64. package/lib/cjs-es6/persisters/persister-indexed-db.cjs.gz +0 -0
  65. package/lib/cjs-es6/persisters/persister-libsql.cjs +1 -1
  66. package/lib/cjs-es6/persisters/persister-libsql.cjs.gz +0 -0
  67. package/lib/cjs-es6/persisters/persister-partykit-client.cjs +1 -1
  68. package/lib/cjs-es6/persisters/persister-partykit-client.cjs.gz +0 -0
  69. package/lib/cjs-es6/persisters/persister-powersync.cjs +1 -0
  70. package/lib/cjs-es6/persisters/persister-powersync.cjs.gz +0 -0
  71. package/lib/cjs-es6/persisters/persister-remote.cjs +1 -1
  72. package/lib/cjs-es6/persisters/persister-remote.cjs.gz +0 -0
  73. package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs +1 -1
  74. package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs.gz +0 -0
  75. package/lib/cjs-es6/persisters/persister-sqlite3.cjs +1 -1
  76. package/lib/cjs-es6/persisters/persister-sqlite3.cjs.gz +0 -0
  77. package/lib/cjs-es6/persisters/persister-sync.cjs +1 -0
  78. package/lib/cjs-es6/persisters/persister-sync.cjs.gz +0 -0
  79. package/lib/cjs-es6/persisters/persister-yjs.cjs +1 -1
  80. package/lib/cjs-es6/persisters/persister-yjs.cjs.gz +0 -0
  81. package/lib/cjs-es6/persisters.cjs +1 -1
  82. package/lib/cjs-es6/persisters.cjs.gz +0 -0
  83. package/lib/cjs-es6/store.cjs +1 -1
  84. package/lib/cjs-es6/store.cjs.gz +0 -0
  85. package/lib/cjs-es6/tinybase.cjs +1 -1
  86. package/lib/cjs-es6/tinybase.cjs.gz +0 -0
  87. package/lib/cjs-es6/tools.cjs +1 -1
  88. package/lib/cjs-es6/tools.cjs.gz +0 -0
  89. package/lib/cjs-es6/ui-react-dom-debug.cjs +1 -1
  90. package/lib/cjs-es6/ui-react-dom-debug.cjs.gz +0 -0
  91. package/lib/cjs-es6/ui-react.cjs +1 -1
  92. package/lib/cjs-es6/ui-react.cjs.gz +0 -0
  93. package/lib/debug/mergeable-store.js +287 -130
  94. package/lib/debug/persisters/persister-automerge.js +39 -46
  95. package/lib/debug/persisters/persister-browser.js +39 -46
  96. package/lib/debug/persisters/persister-cr-sqlite-wasm.js +64 -60
  97. package/lib/debug/persisters/persister-electric-sql.js +64 -60
  98. package/lib/debug/persisters/persister-expo-sqlite-next.js +64 -60
  99. package/lib/debug/persisters/persister-expo-sqlite.js +64 -60
  100. package/lib/debug/persisters/persister-file.js +39 -46
  101. package/lib/debug/persisters/persister-indexed-db.js +39 -46
  102. package/lib/debug/persisters/persister-libsql.js +64 -60
  103. package/lib/debug/persisters/persister-partykit-client.js +39 -46
  104. package/lib/debug/persisters/persister-powersync.js +917 -0
  105. package/lib/debug/persisters/persister-remote.js +39 -46
  106. package/lib/debug/persisters/persister-sqlite-wasm.js +64 -60
  107. package/lib/debug/persisters/persister-sqlite3.js +64 -60
  108. package/lib/debug/persisters/persister-sync.js +594 -0
  109. package/lib/debug/persisters/persister-yjs.js +41 -48
  110. package/lib/debug/persisters.js +38 -45
  111. package/lib/debug/store.js +44 -32
  112. package/lib/debug/tinybase.js +322 -173
  113. package/lib/debug/tools.js +2 -2
  114. package/lib/debug/ui-react-dom.js +81 -76
  115. package/lib/debug/ui-react.js +1 -1
  116. package/lib/es6/mergeable-store.js +1 -1
  117. package/lib/es6/mergeable-store.js.gz +0 -0
  118. package/lib/es6/persisters/persister-automerge.js +1 -1
  119. package/lib/es6/persisters/persister-automerge.js.gz +0 -0
  120. package/lib/es6/persisters/persister-browser.js +1 -1
  121. package/lib/es6/persisters/persister-browser.js.gz +0 -0
  122. package/lib/es6/persisters/persister-cr-sqlite-wasm.js +1 -1
  123. package/lib/es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  124. package/lib/es6/persisters/persister-electric-sql.js +1 -1
  125. package/lib/es6/persisters/persister-electric-sql.js.gz +0 -0
  126. package/lib/es6/persisters/persister-expo-sqlite-next.js +1 -1
  127. package/lib/es6/persisters/persister-expo-sqlite-next.js.gz +0 -0
  128. package/lib/es6/persisters/persister-expo-sqlite.js +1 -1
  129. package/lib/es6/persisters/persister-expo-sqlite.js.gz +0 -0
  130. package/lib/es6/persisters/persister-file.js +1 -1
  131. package/lib/es6/persisters/persister-file.js.gz +0 -0
  132. package/lib/es6/persisters/persister-indexed-db.js +1 -1
  133. package/lib/es6/persisters/persister-indexed-db.js.gz +0 -0
  134. package/lib/es6/persisters/persister-libsql.js +1 -1
  135. package/lib/es6/persisters/persister-libsql.js.gz +0 -0
  136. package/lib/es6/persisters/persister-partykit-client.js +1 -1
  137. package/lib/es6/persisters/persister-partykit-client.js.gz +0 -0
  138. package/lib/es6/persisters/persister-powersync.js +1 -0
  139. package/lib/es6/persisters/persister-powersync.js.gz +0 -0
  140. package/lib/es6/persisters/persister-remote.js +1 -1
  141. package/lib/es6/persisters/persister-remote.js.gz +0 -0
  142. package/lib/es6/persisters/persister-sqlite-wasm.js +1 -1
  143. package/lib/es6/persisters/persister-sqlite-wasm.js.gz +0 -0
  144. package/lib/es6/persisters/persister-sqlite3.js +1 -1
  145. package/lib/es6/persisters/persister-sqlite3.js.gz +0 -0
  146. package/lib/es6/persisters/persister-sync.js +1 -0
  147. package/lib/es6/persisters/persister-sync.js.gz +0 -0
  148. package/lib/es6/persisters/persister-yjs.js +1 -1
  149. package/lib/es6/persisters/persister-yjs.js.gz +0 -0
  150. package/lib/es6/persisters.js +1 -1
  151. package/lib/es6/persisters.js.gz +0 -0
  152. package/lib/es6/store.js +1 -1
  153. package/lib/es6/store.js.gz +0 -0
  154. package/lib/es6/tinybase.js +1 -1
  155. package/lib/es6/tinybase.js.gz +0 -0
  156. package/lib/es6/tools.js +1 -1
  157. package/lib/es6/tools.js.gz +0 -0
  158. package/lib/es6/ui-react-dom-debug.js +1 -1
  159. package/lib/es6/ui-react-dom-debug.js.gz +0 -0
  160. package/lib/es6/ui-react.js +1 -1
  161. package/lib/es6/ui-react.js.gz +0 -0
  162. package/lib/mergeable-store.js +1 -1
  163. package/lib/mergeable-store.js.gz +0 -0
  164. package/lib/persisters/persister-automerge.js +1 -1
  165. package/lib/persisters/persister-automerge.js.gz +0 -0
  166. package/lib/persisters/persister-browser.js +1 -1
  167. package/lib/persisters/persister-browser.js.gz +0 -0
  168. package/lib/persisters/persister-cr-sqlite-wasm.js +1 -1
  169. package/lib/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  170. package/lib/persisters/persister-electric-sql.js +1 -1
  171. package/lib/persisters/persister-electric-sql.js.gz +0 -0
  172. package/lib/persisters/persister-expo-sqlite-next.js +1 -1
  173. package/lib/persisters/persister-expo-sqlite-next.js.gz +0 -0
  174. package/lib/persisters/persister-expo-sqlite.js +1 -1
  175. package/lib/persisters/persister-expo-sqlite.js.gz +0 -0
  176. package/lib/persisters/persister-file.js +1 -1
  177. package/lib/persisters/persister-file.js.gz +0 -0
  178. package/lib/persisters/persister-indexed-db.js +1 -1
  179. package/lib/persisters/persister-indexed-db.js.gz +0 -0
  180. package/lib/persisters/persister-libsql.js +1 -1
  181. package/lib/persisters/persister-libsql.js.gz +0 -0
  182. package/lib/persisters/persister-partykit-client.js +1 -1
  183. package/lib/persisters/persister-partykit-client.js.gz +0 -0
  184. package/lib/persisters/persister-powersync.js +1 -0
  185. package/lib/persisters/persister-powersync.js.gz +0 -0
  186. package/lib/persisters/persister-remote.js +1 -1
  187. package/lib/persisters/persister-remote.js.gz +0 -0
  188. package/lib/persisters/persister-sqlite-wasm.js +1 -1
  189. package/lib/persisters/persister-sqlite-wasm.js.gz +0 -0
  190. package/lib/persisters/persister-sqlite3.js +1 -1
  191. package/lib/persisters/persister-sqlite3.js.gz +0 -0
  192. package/lib/persisters/persister-sync.js +1 -0
  193. package/lib/persisters/persister-sync.js.gz +0 -0
  194. package/lib/persisters/persister-yjs.js +1 -1
  195. package/lib/persisters/persister-yjs.js.gz +0 -0
  196. package/lib/persisters.js +1 -1
  197. package/lib/persisters.js.gz +0 -0
  198. package/lib/store.js +1 -1
  199. package/lib/store.js.gz +0 -0
  200. package/lib/tinybase.js +1 -1
  201. package/lib/tinybase.js.gz +0 -0
  202. package/lib/tools.js +1 -1
  203. package/lib/tools.js.gz +0 -0
  204. package/lib/types/checkpoints.d.ts +2 -2
  205. package/lib/types/indexes.d.ts +2 -2
  206. package/lib/types/mergeable-store.d.ts +121 -59
  207. package/lib/types/metrics.d.ts +2 -2
  208. package/lib/types/persisters/persister-automerge.d.ts +3 -0
  209. package/lib/types/persisters/persister-browser.d.ts +9 -2
  210. package/lib/types/persisters/persister-cr-sqlite-wasm.d.ts +3 -0
  211. package/lib/types/persisters/persister-electric-sql.d.ts +3 -0
  212. package/lib/types/persisters/persister-expo-sqlite-next.d.ts +3 -0
  213. package/lib/types/persisters/persister-expo-sqlite.d.ts +3 -0
  214. package/lib/types/persisters/persister-file.d.ts +5 -1
  215. package/lib/types/persisters/persister-indexed-db.d.ts +3 -0
  216. package/lib/types/persisters/persister-libsql.d.ts +3 -0
  217. package/lib/types/persisters/persister-partykit-client.d.ts +3 -0
  218. package/lib/types/persisters/persister-powersync.d.ts +157 -0
  219. package/lib/types/persisters/persister-remote.d.ts +3 -0
  220. package/lib/types/persisters/persister-sqlite-wasm.d.ts +3 -0
  221. package/lib/types/persisters/persister-sqlite3.d.ts +3 -0
  222. package/lib/types/persisters/persister-sync.d.ts +182 -0
  223. package/lib/types/persisters/persister-yjs.d.ts +5 -2
  224. package/lib/types/persisters.d.ts +60 -3
  225. package/lib/types/queries.d.ts +2 -2
  226. package/lib/types/relationships.d.ts +2 -2
  227. package/lib/types/store.d.ts +36 -3
  228. package/lib/types/tinybase.d.ts +9 -9
  229. package/lib/types/tools.d.ts +2 -2
  230. package/lib/types/ui-react.d.ts +8 -8
  231. package/lib/types/with-schemas/checkpoints.d.ts +2 -2
  232. package/lib/types/with-schemas/indexes.d.ts +2 -2
  233. package/lib/types/with-schemas/mergeable-store.d.ts +185 -87
  234. package/lib/types/with-schemas/metrics.d.ts +2 -2
  235. package/lib/types/with-schemas/persisters/persister-automerge.d.ts +4 -1
  236. package/lib/types/with-schemas/persisters/persister-browser.d.ts +13 -6
  237. package/lib/types/with-schemas/persisters/persister-cr-sqlite-wasm.d.ts +4 -1
  238. package/lib/types/with-schemas/persisters/persister-electric-sql.d.ts +4 -1
  239. package/lib/types/with-schemas/persisters/persister-expo-sqlite-next.d.ts +4 -1
  240. package/lib/types/with-schemas/persisters/persister-expo-sqlite.d.ts +4 -1
  241. package/lib/types/with-schemas/persisters/persister-file.d.ts +7 -3
  242. package/lib/types/with-schemas/persisters/persister-indexed-db.d.ts +4 -1
  243. package/lib/types/with-schemas/persisters/persister-libsql.d.ts +4 -1
  244. package/lib/types/with-schemas/persisters/persister-partykit-client.d.ts +4 -1
  245. package/lib/types/with-schemas/persisters/persister-powersync.d.ts +170 -0
  246. package/lib/types/with-schemas/persisters/persister-remote.d.ts +4 -1
  247. package/lib/types/with-schemas/persisters/persister-sqlite-wasm.d.ts +4 -1
  248. package/lib/types/with-schemas/persisters/persister-sqlite3.d.ts +4 -1
  249. package/lib/types/with-schemas/persisters/persister-sync.d.ts +195 -0
  250. package/lib/types/with-schemas/persisters/persister-yjs.d.ts +6 -3
  251. package/lib/types/with-schemas/persisters.d.ts +79 -7
  252. package/lib/types/with-schemas/queries.d.ts +3 -3
  253. package/lib/types/with-schemas/relationships.d.ts +2 -2
  254. package/lib/types/with-schemas/store.d.ts +100 -3
  255. package/lib/types/with-schemas/tinybase.d.ts +9 -9
  256. package/lib/types/with-schemas/tools.d.ts +2 -2
  257. package/lib/types/with-schemas/ui-react.d.ts +8 -8
  258. package/lib/ui-react.js +1 -1
  259. package/lib/ui-react.js.gz +0 -0
  260. package/lib/umd/mergeable-store.js +1 -1
  261. package/lib/umd/mergeable-store.js.gz +0 -0
  262. package/lib/umd/persisters/persister-automerge.js +1 -1
  263. package/lib/umd/persisters/persister-automerge.js.gz +0 -0
  264. package/lib/umd/persisters/persister-browser.js +1 -1
  265. package/lib/umd/persisters/persister-browser.js.gz +0 -0
  266. package/lib/umd/persisters/persister-cr-sqlite-wasm.js +1 -1
  267. package/lib/umd/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  268. package/lib/umd/persisters/persister-electric-sql.js +1 -1
  269. package/lib/umd/persisters/persister-electric-sql.js.gz +0 -0
  270. package/lib/umd/persisters/persister-expo-sqlite-next.js +1 -1
  271. package/lib/umd/persisters/persister-expo-sqlite-next.js.gz +0 -0
  272. package/lib/umd/persisters/persister-expo-sqlite.js +1 -1
  273. package/lib/umd/persisters/persister-expo-sqlite.js.gz +0 -0
  274. package/lib/umd/persisters/persister-file.js +1 -1
  275. package/lib/umd/persisters/persister-file.js.gz +0 -0
  276. package/lib/umd/persisters/persister-indexed-db.js +1 -1
  277. package/lib/umd/persisters/persister-indexed-db.js.gz +0 -0
  278. package/lib/umd/persisters/persister-libsql.js +1 -1
  279. package/lib/umd/persisters/persister-libsql.js.gz +0 -0
  280. package/lib/umd/persisters/persister-partykit-client.js +1 -1
  281. package/lib/umd/persisters/persister-partykit-client.js.gz +0 -0
  282. package/lib/umd/persisters/persister-powersync.js +1 -0
  283. package/lib/umd/persisters/persister-powersync.js.gz +0 -0
  284. package/lib/umd/persisters/persister-remote.js +1 -1
  285. package/lib/umd/persisters/persister-remote.js.gz +0 -0
  286. package/lib/umd/persisters/persister-sqlite-wasm.js +1 -1
  287. package/lib/umd/persisters/persister-sqlite-wasm.js.gz +0 -0
  288. package/lib/umd/persisters/persister-sqlite3.js +1 -1
  289. package/lib/umd/persisters/persister-sqlite3.js.gz +0 -0
  290. package/lib/umd/persisters/persister-sync.js +1 -0
  291. package/lib/umd/persisters/persister-sync.js.gz +0 -0
  292. package/lib/umd/persisters/persister-yjs.js +1 -1
  293. package/lib/umd/persisters/persister-yjs.js.gz +0 -0
  294. package/lib/umd/persisters.js +1 -1
  295. package/lib/umd/persisters.js.gz +0 -0
  296. package/lib/umd/store.js +1 -1
  297. package/lib/umd/store.js.gz +0 -0
  298. package/lib/umd/tinybase.js +1 -1
  299. package/lib/umd/tinybase.js.gz +0 -0
  300. package/lib/umd/tools.js +1 -1
  301. package/lib/umd/tools.js.gz +0 -0
  302. package/lib/umd/ui-react-dom-debug.js +1 -1
  303. package/lib/umd/ui-react-dom-debug.js.gz +0 -0
  304. package/lib/umd/ui-react.js +1 -1
  305. package/lib/umd/ui-react.js.gz +0 -0
  306. package/lib/umd-es6/mergeable-store.js +1 -1
  307. package/lib/umd-es6/mergeable-store.js.gz +0 -0
  308. package/lib/umd-es6/persisters/persister-automerge.js +1 -1
  309. package/lib/umd-es6/persisters/persister-automerge.js.gz +0 -0
  310. package/lib/umd-es6/persisters/persister-browser.js +1 -1
  311. package/lib/umd-es6/persisters/persister-browser.js.gz +0 -0
  312. package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js +1 -1
  313. package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  314. package/lib/umd-es6/persisters/persister-electric-sql.js +1 -1
  315. package/lib/umd-es6/persisters/persister-electric-sql.js.gz +0 -0
  316. package/lib/umd-es6/persisters/persister-expo-sqlite-next.js +1 -1
  317. package/lib/umd-es6/persisters/persister-expo-sqlite-next.js.gz +0 -0
  318. package/lib/umd-es6/persisters/persister-expo-sqlite.js +1 -1
  319. package/lib/umd-es6/persisters/persister-expo-sqlite.js.gz +0 -0
  320. package/lib/umd-es6/persisters/persister-file.js +1 -1
  321. package/lib/umd-es6/persisters/persister-file.js.gz +0 -0
  322. package/lib/umd-es6/persisters/persister-indexed-db.js +1 -1
  323. package/lib/umd-es6/persisters/persister-indexed-db.js.gz +0 -0
  324. package/lib/umd-es6/persisters/persister-libsql.js +1 -1
  325. package/lib/umd-es6/persisters/persister-libsql.js.gz +0 -0
  326. package/lib/umd-es6/persisters/persister-partykit-client.js +1 -1
  327. package/lib/umd-es6/persisters/persister-partykit-client.js.gz +0 -0
  328. package/lib/umd-es6/persisters/persister-powersync.js +1 -0
  329. package/lib/umd-es6/persisters/persister-powersync.js.gz +0 -0
  330. package/lib/umd-es6/persisters/persister-remote.js +1 -1
  331. package/lib/umd-es6/persisters/persister-remote.js.gz +0 -0
  332. package/lib/umd-es6/persisters/persister-sqlite-wasm.js +1 -1
  333. package/lib/umd-es6/persisters/persister-sqlite-wasm.js.gz +0 -0
  334. package/lib/umd-es6/persisters/persister-sqlite3.js +1 -1
  335. package/lib/umd-es6/persisters/persister-sqlite3.js.gz +0 -0
  336. package/lib/umd-es6/persisters/persister-sync.js +1 -0
  337. package/lib/umd-es6/persisters/persister-sync.js.gz +0 -0
  338. package/lib/umd-es6/persisters/persister-yjs.js +1 -1
  339. package/lib/umd-es6/persisters/persister-yjs.js.gz +0 -0
  340. package/lib/umd-es6/persisters.js +1 -1
  341. package/lib/umd-es6/persisters.js.gz +0 -0
  342. package/lib/umd-es6/store.js +1 -1
  343. package/lib/umd-es6/store.js.gz +0 -0
  344. package/lib/umd-es6/tinybase.js +1 -1
  345. package/lib/umd-es6/tinybase.js.gz +0 -0
  346. package/lib/umd-es6/tools.js +1 -1
  347. package/lib/umd-es6/tools.js.gz +0 -0
  348. package/lib/umd-es6/ui-react-dom-debug.js +1 -1
  349. package/lib/umd-es6/ui-react-dom-debug.js.gz +0 -0
  350. package/lib/umd-es6/ui-react.js +1 -1
  351. package/lib/umd-es6/ui-react.js.gz +0 -0
  352. package/package.json +37 -26
  353. package/readme.md +2 -2
@@ -22,8 +22,6 @@ const arrayShift = (array) => array.shift();
22
22
  const object = Object;
23
23
  const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
24
24
  const objEntries = object.entries;
25
- const objIds = object.keys;
26
- const objFreeze = object.freeze;
27
25
  const isObject = (obj) =>
28
26
  !isUndefined(obj) &&
29
27
  ifNotUndefined(
@@ -34,6 +32,8 @@ const isObject = (obj) =>
34
32
  /* istanbul ignore next */
35
33
  () => true,
36
34
  );
35
+ const objIds = object.keys;
36
+ const objFreeze = object.freeze;
37
37
  const objNew = (entries = []) => object.fromEntries(entries);
38
38
  const objHas = (obj, id) => id in obj;
39
39
  const objToArray = (obj, cb) =>
@@ -68,7 +68,6 @@ const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
68
68
 
69
69
  const scheduleRunning = mapNew();
70
70
  const scheduleActions = mapNew();
71
- const isMergeable = (contentOrChanges) => isString(contentOrChanges?.[0]);
72
71
  const getStoreFunctions = (supportsMergeableStore, store) =>
73
72
  !supportsMergeableStore || isUndefined(store.getMergeableContent)
74
73
  ? [
@@ -93,16 +92,15 @@ const createCustomPersister = (
93
92
  delPersisterListener,
94
93
  onIgnoredError,
95
94
  supportsMergeableStore,
96
- [getThing, thing] = [],
95
+ extra = {},
97
96
  scheduleId = [],
98
97
  ) => {
99
- let listenerId;
100
98
  let loadSave = 0;
101
99
  let loads = 0;
102
100
  let saves = 0;
103
- let listening = 0;
104
101
  let action;
105
- let listeningHandle;
102
+ let autoLoadHandle;
103
+ let autoSaveListenerId;
106
104
  mapEnsure(scheduleRunning, scheduleId, () => 0);
107
105
  mapEnsure(scheduleActions, scheduleId, () => []);
108
106
  const [isMergeableStore, getContent, getChanges, hasChanges] =
@@ -138,55 +136,51 @@ const createCustomPersister = (
138
136
  }
139
137
  return persister;
140
138
  };
139
+ const setContentOrChanges = (contentOrChanges) => {
140
+ (isMergeableStore && isString(contentOrChanges?.[0])
141
+ ? contentOrChanges?.[1][2] === 1
142
+ ? store.applyMergeableChanges
143
+ : store.setMergeableContent
144
+ : contentOrChanges?.[2] === 1
145
+ ? store.applyChanges
146
+ : store.setContent)(contentOrChanges);
147
+ };
141
148
  const persister = {
142
149
  load: async (initialTables, initialValues) =>
143
150
  await loadLock(async () => {
144
151
  try {
145
- const content = await getPersisted();
146
- (isMergeableStore && isMergeable(content)
147
- ? store.setMergeableContent
148
- : store.setContent)(content);
149
- } catch {
152
+ setContentOrChanges(await getPersisted());
153
+ } catch (error) {
154
+ onIgnoredError?.(error);
150
155
  store.setContent([initialTables, initialValues]);
151
156
  }
152
157
  }),
153
158
  startAutoLoad: async (initialTables = {}, initialValues = {}) => {
154
- persister.stopAutoLoad();
155
- await persister.load(initialTables, initialValues);
156
- listening = 1;
157
- listeningHandle = addPersisterListener(
159
+ await persister.stopAutoLoad().load(initialTables, initialValues);
160
+ autoLoadHandle = addPersisterListener(
158
161
  async (getContent2, getChanges2) => {
159
- if (getChanges2) {
160
- const changes = getChanges2();
161
- await loadLock(async () =>
162
- (isMergeableStore && isMergeable(changes)
163
- ? store.applyMergeableChanges
164
- : store.applyChanges)(changes),
165
- );
166
- } else {
167
- await loadLock(async () => {
168
- try {
169
- const content = getContent2?.() ?? (await getPersisted());
170
- (isMergeableStore && isMergeable(content)
171
- ? store.setMergeableContent
172
- : store.setContent)(content);
173
- } catch (error) {
174
- onIgnoredError?.(error);
175
- }
176
- });
177
- }
162
+ const changes = getChanges2?.();
163
+ await loadLock(async () => {
164
+ try {
165
+ setContentOrChanges(
166
+ changes ?? getContent2?.() ?? (await getPersisted()),
167
+ );
168
+ } catch (error) {
169
+ onIgnoredError?.(error);
170
+ }
171
+ });
178
172
  },
179
173
  );
180
174
  return persister;
181
175
  },
182
176
  stopAutoLoad: () => {
183
- if (listening) {
184
- delPersisterListener(listeningHandle);
185
- listeningHandle = void 0;
186
- listening = 0;
177
+ if (autoLoadHandle) {
178
+ delPersisterListener(autoLoadHandle);
179
+ autoLoadHandle = void 0;
187
180
  }
188
181
  return persister;
189
182
  },
183
+ isAutoLoading: () => !isUndefined(autoLoadHandle),
190
184
  save: async (getChanges2) => {
191
185
  /* istanbul ignore else */
192
186
  if (loadSave != 1) {
@@ -208,7 +202,7 @@ const createCustomPersister = (
208
202
  },
209
203
  startAutoSave: async () => {
210
204
  await persister.stopAutoSave().save();
211
- listenerId = store.addDidFinishTransactionListener(() => {
205
+ autoSaveListenerId = store.addDidFinishTransactionListener(() => {
212
206
  const changes = getChanges();
213
207
  if (hasChanges(changes)) {
214
208
  persister.save(() => changes);
@@ -217,10 +211,11 @@ const createCustomPersister = (
217
211
  return persister;
218
212
  },
219
213
  stopAutoSave: () => {
220
- ifNotUndefined(listenerId, store.delListener);
221
- listenerId = void 0;
214
+ ifNotUndefined(autoSaveListenerId, store.delListener);
215
+ autoSaveListenerId = void 0;
222
216
  return persister;
223
217
  },
218
+ isAutoSaving: () => !isUndefined(autoSaveListenerId),
224
219
  schedule: async (...actions) => {
225
220
  arrayPush(mapGet(scheduleActions, scheduleId), ...actions);
226
221
  await run();
@@ -229,10 +224,8 @@ const createCustomPersister = (
229
224
  getStore: () => store,
230
225
  destroy: () => persister.stopAutoLoad().stopAutoSave(),
231
226
  getStats: () => ({loads, saves}),
227
+ ...extra,
232
228
  };
233
- if (getThing) {
234
- persister[getThing] = () => thing;
235
- }
236
229
  return objFreeze(persister);
237
230
  };
238
231
 
@@ -240,7 +233,7 @@ const DELETE = 'delete';
240
233
  const getYContent = (yContent) => [yContent.get(T), yContent.get(V)];
241
234
  const getChangesFromYDoc = (yContent, events) => {
242
235
  if (size(events) == 1 && arrayIsEmpty(events[0].path)) {
243
- return [yContent.get(T).toJSON(), yContent.get(V).toJSON()];
236
+ return [yContent.get(T).toJSON(), yContent.get(V).toJSON(), 1];
244
237
  }
245
238
  const [yTables, yValues] = getYContent(yContent);
246
239
  const tables = {};
@@ -286,7 +279,7 @@ const getChangesFromYDoc = (yContent, events) => {
286
279
  (values[valueId] = action == DELETE ? null : yValues.get(valueId)),
287
280
  ),
288
281
  );
289
- return [tables, values];
282
+ return [tables, values, 1];
290
283
  };
291
284
  const applyChangesToYDoc = (yContent, getContent, getChanges) => {
292
285
  if (!yContent.size) {
@@ -405,7 +398,7 @@ const createYjsPersister = (
405
398
  delPersisterListener,
406
399
  onIgnoredError,
407
400
  false,
408
- ['getYDoc', yDoc],
401
+ {getYDoc: () => yDoc},
409
402
  );
410
403
  };
411
404
 
@@ -13,8 +13,6 @@ const arrayShift = (array) => array.shift();
13
13
 
14
14
  const object = Object;
15
15
  const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
16
- const objIds = object.keys;
17
- const objFreeze = object.freeze;
18
16
  const isObject = (obj) =>
19
17
  !isUndefined(obj) &&
20
18
  ifNotUndefined(
@@ -25,6 +23,8 @@ const isObject = (obj) =>
25
23
  /* istanbul ignore next */
26
24
  () => true,
27
25
  );
26
+ const objIds = object.keys;
27
+ const objFreeze = object.freeze;
28
28
  const objSize = (obj) => size(objIds(obj));
29
29
  const objIsEmpty = (obj) => isObject(obj) && objSize(obj) == 0;
30
30
 
@@ -46,7 +46,6 @@ const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
46
46
 
47
47
  const scheduleRunning = mapNew();
48
48
  const scheduleActions = mapNew();
49
- const isMergeable = (contentOrChanges) => isString(contentOrChanges?.[0]);
50
49
  const getStoreFunctions = (supportsMergeableStore, store) =>
51
50
  !supportsMergeableStore || isUndefined(store.getMergeableContent)
52
51
  ? [
@@ -71,16 +70,15 @@ const createCustomPersister = (
71
70
  delPersisterListener,
72
71
  onIgnoredError,
73
72
  supportsMergeableStore,
74
- [getThing, thing] = [],
73
+ extra = {},
75
74
  scheduleId = [],
76
75
  ) => {
77
- let listenerId;
78
76
  let loadSave = 0;
79
77
  let loads = 0;
80
78
  let saves = 0;
81
- let listening = 0;
82
79
  let action;
83
- let listeningHandle;
80
+ let autoLoadHandle;
81
+ let autoSaveListenerId;
84
82
  mapEnsure(scheduleRunning, scheduleId, () => 0);
85
83
  mapEnsure(scheduleActions, scheduleId, () => []);
86
84
  const [isMergeableStore, getContent, getChanges, hasChanges] =
@@ -116,55 +114,51 @@ const createCustomPersister = (
116
114
  }
117
115
  return persister;
118
116
  };
117
+ const setContentOrChanges = (contentOrChanges) => {
118
+ (isMergeableStore && isString(contentOrChanges?.[0])
119
+ ? contentOrChanges?.[1][2] === 1
120
+ ? store.applyMergeableChanges
121
+ : store.setMergeableContent
122
+ : contentOrChanges?.[2] === 1
123
+ ? store.applyChanges
124
+ : store.setContent)(contentOrChanges);
125
+ };
119
126
  const persister = {
120
127
  load: async (initialTables, initialValues) =>
121
128
  await loadLock(async () => {
122
129
  try {
123
- const content = await getPersisted();
124
- (isMergeableStore && isMergeable(content)
125
- ? store.setMergeableContent
126
- : store.setContent)(content);
127
- } catch {
130
+ setContentOrChanges(await getPersisted());
131
+ } catch (error) {
132
+ onIgnoredError?.(error);
128
133
  store.setContent([initialTables, initialValues]);
129
134
  }
130
135
  }),
131
136
  startAutoLoad: async (initialTables = {}, initialValues = {}) => {
132
- persister.stopAutoLoad();
133
- await persister.load(initialTables, initialValues);
134
- listening = 1;
135
- listeningHandle = addPersisterListener(
137
+ await persister.stopAutoLoad().load(initialTables, initialValues);
138
+ autoLoadHandle = addPersisterListener(
136
139
  async (getContent2, getChanges2) => {
137
- if (getChanges2) {
138
- const changes = getChanges2();
139
- await loadLock(async () =>
140
- (isMergeableStore && isMergeable(changes)
141
- ? store.applyMergeableChanges
142
- : store.applyChanges)(changes),
143
- );
144
- } else {
145
- await loadLock(async () => {
146
- try {
147
- const content = getContent2?.() ?? (await getPersisted());
148
- (isMergeableStore && isMergeable(content)
149
- ? store.setMergeableContent
150
- : store.setContent)(content);
151
- } catch (error) {
152
- onIgnoredError?.(error);
153
- }
154
- });
155
- }
140
+ const changes = getChanges2?.();
141
+ await loadLock(async () => {
142
+ try {
143
+ setContentOrChanges(
144
+ changes ?? getContent2?.() ?? (await getPersisted()),
145
+ );
146
+ } catch (error) {
147
+ onIgnoredError?.(error);
148
+ }
149
+ });
156
150
  },
157
151
  );
158
152
  return persister;
159
153
  },
160
154
  stopAutoLoad: () => {
161
- if (listening) {
162
- delPersisterListener(listeningHandle);
163
- listeningHandle = void 0;
164
- listening = 0;
155
+ if (autoLoadHandle) {
156
+ delPersisterListener(autoLoadHandle);
157
+ autoLoadHandle = void 0;
165
158
  }
166
159
  return persister;
167
160
  },
161
+ isAutoLoading: () => !isUndefined(autoLoadHandle),
168
162
  save: async (getChanges2) => {
169
163
  /* istanbul ignore else */
170
164
  if (loadSave != 1) {
@@ -186,7 +180,7 @@ const createCustomPersister = (
186
180
  },
187
181
  startAutoSave: async () => {
188
182
  await persister.stopAutoSave().save();
189
- listenerId = store.addDidFinishTransactionListener(() => {
183
+ autoSaveListenerId = store.addDidFinishTransactionListener(() => {
190
184
  const changes = getChanges();
191
185
  if (hasChanges(changes)) {
192
186
  persister.save(() => changes);
@@ -195,10 +189,11 @@ const createCustomPersister = (
195
189
  return persister;
196
190
  },
197
191
  stopAutoSave: () => {
198
- ifNotUndefined(listenerId, store.delListener);
199
- listenerId = void 0;
192
+ ifNotUndefined(autoSaveListenerId, store.delListener);
193
+ autoSaveListenerId = void 0;
200
194
  return persister;
201
195
  },
196
+ isAutoSaving: () => !isUndefined(autoSaveListenerId),
202
197
  schedule: async (...actions) => {
203
198
  arrayPush(mapGet(scheduleActions, scheduleId), ...actions);
204
199
  await run();
@@ -207,10 +202,8 @@ const createCustomPersister = (
207
202
  getStore: () => store,
208
203
  destroy: () => persister.stopAutoLoad().stopAutoSave(),
209
204
  getStats: () => ({loads, saves}),
205
+ ...extra,
210
206
  };
211
- if (getThing) {
212
- persister[getThing] = () => thing;
213
- }
214
207
  return objFreeze(persister);
215
208
  };
216
209
 
@@ -50,9 +50,7 @@ const arrayShift = (array) => array.shift();
50
50
  const object = Object;
51
51
  const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
52
52
  const objEntries = object.entries;
53
- const objIds = object.keys;
54
53
  const objFrozen = object.isFrozen;
55
- const objFreeze = object.freeze;
56
54
  const isObject = (obj) =>
57
55
  !isUndefined(obj) &&
58
56
  ifNotUndefined(
@@ -63,6 +61,8 @@ const isObject = (obj) =>
63
61
  /* istanbul ignore next */
64
62
  () => true,
65
63
  );
64
+ const objIds = object.keys;
65
+ const objFreeze = object.freeze;
66
66
  const objHas = (obj, id) => id in obj;
67
67
  const objDel = (obj, id) => {
68
68
  delete obj[id];
@@ -72,6 +72,23 @@ const objToArray = (obj, cb) =>
72
72
  arrayMap(objEntries(obj), ([id, value]) => cb(value, id));
73
73
  const objSize = (obj) => size(objIds(obj));
74
74
  const objIsEmpty = (obj) => isObject(obj) && objSize(obj) == 0;
75
+ const objValidate = (obj, validateChild, onInvalidObj, emptyIsValid = 0) => {
76
+ if (
77
+ isUndefined(obj) ||
78
+ !isObject(obj) ||
79
+ (!emptyIsValid && objIsEmpty(obj)) ||
80
+ objFrozen(obj)
81
+ ) {
82
+ onInvalidObj?.();
83
+ return false;
84
+ }
85
+ objToArray(obj, (child, id) => {
86
+ if (!validateChild(child, id)) {
87
+ objDel(obj, id);
88
+ }
89
+ });
90
+ return emptyIsValid ? true : !objIsEmpty(obj);
91
+ };
75
92
 
76
93
  const collSizeN = (collSizer) => (coll) =>
77
94
  arrayReduce(collValues(coll), (total, coll2) => total + collSizer(coll2), 0);
@@ -108,24 +125,28 @@ const mapMatch = (map, obj, set, del = mapSet) => {
108
125
  mapForEach(map, (id) => (objHas(obj, id) ? 0 : del(map, id)));
109
126
  return map;
110
127
  };
111
- const mapToObj = (map, mapValue, excludeValue) => {
128
+ const mapToObj = (map, valueMapper, excludeMapValue, excludeObjValue) => {
112
129
  const obj = {};
113
- collForEach(map, (value, id) => {
114
- const mappedValue = mapValue ? mapValue(value, id) : value;
115
- excludeValue?.(mappedValue, value) ? 0 : (obj[id] = mappedValue);
130
+ collForEach(map, (mapValue, id) => {
131
+ if (!excludeMapValue?.(mapValue, id)) {
132
+ const objValue = valueMapper ? valueMapper(mapValue, id) : mapValue;
133
+ excludeObjValue?.(objValue) ? 0 : (obj[id] = objValue);
134
+ }
116
135
  });
117
136
  return obj;
118
137
  };
119
- const mapToObj2 = (map, mapValue, excludeValue) =>
138
+ const mapToObj2 = (map, valueMapper, excludeMapValue) =>
120
139
  mapToObj(
121
140
  map,
122
- (childMap) => mapToObj(childMap, mapValue, excludeValue),
141
+ (childMap) => mapToObj(childMap, valueMapper, excludeMapValue),
142
+ collIsEmpty,
123
143
  objIsEmpty,
124
144
  );
125
- const mapToObj3 = (map, mapValue, excludeValue) =>
145
+ const mapToObj3 = (map, valueMapper, excludeMapValue) =>
126
146
  mapToObj(
127
147
  map,
128
- (childMap) => mapToObj2(childMap, mapValue, excludeValue),
148
+ (childMap) => mapToObj2(childMap, valueMapper, excludeMapValue),
149
+ collIsEmpty,
129
150
  objIsEmpty,
130
151
  );
131
152
  const mapClone = (map, mapValue) => {
@@ -278,18 +299,6 @@ const jsonParse = JSON.parse;
278
299
  const defaultSorter = (sortKey1, sortKey2) =>
279
300
  (sortKey1 ?? 0) < (sortKey2 ?? 0) ? -1 : 1;
280
301
 
281
- const validate = (obj, validateChild, onInvalidObj) => {
282
- if (isUndefined(obj) || !isObject(obj) || objIsEmpty(obj) || objFrozen(obj)) {
283
- onInvalidObj?.();
284
- return false;
285
- }
286
- objToArray(obj, (child, id2) => {
287
- if (!validateChild(child, id2)) {
288
- objDel(obj, id2);
289
- }
290
- });
291
- return !objIsEmpty(obj);
292
- };
293
302
  const idsChanged = (changedIds, id2, addedOrRemoved) =>
294
303
  mapSet(
295
304
  changedIds,
@@ -349,13 +358,13 @@ const createStore = () => {
349
358
  const [addListener, callListeners, delListenerImpl, callListenerImpl] =
350
359
  getListenerFunctions(() => store);
351
360
  const validateTablesSchema = (tableSchema) =>
352
- validate(tableSchema, (tableSchema2) =>
353
- validate(tableSchema2, validateCellOrValueSchema),
361
+ objValidate(tableSchema, (tableSchema2) =>
362
+ objValidate(tableSchema2, validateCellOrValueSchema),
354
363
  );
355
364
  const validateValuesSchema = (valuesSchema) =>
356
- validate(valuesSchema, validateCellOrValueSchema);
365
+ objValidate(valuesSchema, validateCellOrValueSchema);
357
366
  const validateCellOrValueSchema = (schema) => {
358
- if (!validate(schema, (_child, id2) => arrayHas([TYPE, DEFAULT], id2))) {
367
+ if (!objValidate(schema, (_child, id2) => arrayHas([TYPE, DEFAULT], id2))) {
359
368
  return false;
360
369
  }
361
370
  const type = schema[TYPE];
@@ -368,18 +377,18 @@ const createStore = () => {
368
377
  return true;
369
378
  };
370
379
  const validateTables = (tables) =>
371
- validate(tables, validateTable, cellInvalid);
380
+ objValidate(tables, validateTable, cellInvalid);
372
381
  const validateTable = (table, tableId) =>
373
382
  (!hasTablesSchema ||
374
383
  collHas(tablesSchemaMap, tableId) ||
375
384
  cellInvalid(tableId)) &&
376
- validate(
385
+ objValidate(
377
386
  table,
378
387
  (row, rowId) => validateRow(tableId, rowId, row),
379
388
  () => cellInvalid(tableId),
380
389
  );
381
390
  const validateRow = (tableId, rowId, row, skipDefaults) =>
382
- validate(
391
+ objValidate(
383
392
  skipDefaults ? row : addDefaultsToRow(row, tableId, rowId),
384
393
  (cell, cellId) =>
385
394
  ifNotUndefined(
@@ -406,7 +415,7 @@ const createStore = () => {
406
415
  ? cellInvalid(tableId, rowId, cellId, cell)
407
416
  : cell;
408
417
  const validateValues = (values, skipDefaults) =>
409
- validate(
418
+ objValidate(
410
419
  skipDefaults ? values : addDefaultsToValues(values),
411
420
  (value, valueId) =>
412
421
  ifNotUndefined(
@@ -1249,17 +1258,20 @@ const createStore = () => {
1249
1258
  : mapToObj(
1250
1259
  row,
1251
1260
  ([, newCell]) => newCell,
1252
- (_, changedCell) => pairIsEqual(changedCell),
1261
+ (changedCell) => pairIsEqual(changedCell),
1253
1262
  ),
1263
+ collIsEmpty,
1254
1264
  objIsEmpty,
1255
1265
  ),
1266
+ collIsEmpty,
1256
1267
  objIsEmpty,
1257
1268
  ),
1258
1269
  mapToObj(
1259
1270
  changedValues,
1260
1271
  ([, newValue]) => newValue,
1261
- (_, changedValue) => pairIsEqual(changedValue),
1272
+ (changedValue) => pairIsEqual(changedValue),
1262
1273
  ),
1274
+ 1,
1263
1275
  ];
1264
1276
  const getTransactionLog = () => [
1265
1277
  !collIsEmpty(changedCells),