tinybase 5.0.0-beta.0 → 5.0.0-beta.10

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 (493) hide show
  1. package/bin/cli.js +1 -1
  2. package/lib/checkpoints.js +1 -1
  3. package/lib/checkpoints.js.gz +0 -0
  4. package/lib/cjs/checkpoints.cjs +1 -1
  5. package/lib/cjs/checkpoints.cjs.gz +0 -0
  6. package/lib/cjs/indexes.cjs +1 -1
  7. package/lib/cjs/indexes.cjs.gz +0 -0
  8. package/lib/cjs/mergeable-store.cjs +1 -0
  9. package/lib/cjs/mergeable-store.cjs.gz +0 -0
  10. package/lib/cjs/metrics.cjs +1 -1
  11. package/lib/cjs/metrics.cjs.gz +0 -0
  12. package/lib/cjs/persisters/persister-automerge.cjs +1 -1
  13. package/lib/cjs/persisters/persister-automerge.cjs.gz +0 -0
  14. package/lib/cjs/persisters/persister-browser.cjs +1 -1
  15. package/lib/cjs/persisters/persister-browser.cjs.gz +0 -0
  16. package/lib/cjs/persisters/persister-cr-sqlite-wasm.cjs +1 -1
  17. package/lib/cjs/persisters/persister-cr-sqlite-wasm.cjs.gz +0 -0
  18. package/lib/cjs/persisters/persister-electric-sql.cjs +1 -1
  19. package/lib/cjs/persisters/persister-electric-sql.cjs.gz +0 -0
  20. package/lib/cjs/persisters/persister-expo-sqlite-next.cjs +1 -1
  21. package/lib/cjs/persisters/persister-expo-sqlite-next.cjs.gz +0 -0
  22. package/lib/cjs/persisters/persister-expo-sqlite.cjs +1 -1
  23. package/lib/cjs/persisters/persister-expo-sqlite.cjs.gz +0 -0
  24. package/lib/cjs/persisters/persister-file.cjs +1 -1
  25. package/lib/cjs/persisters/persister-file.cjs.gz +0 -0
  26. package/lib/cjs/persisters/persister-indexed-db.cjs +1 -1
  27. package/lib/cjs/persisters/persister-indexed-db.cjs.gz +0 -0
  28. package/lib/cjs/persisters/persister-libsql.cjs +1 -0
  29. package/lib/cjs/persisters/persister-libsql.cjs.gz +0 -0
  30. package/lib/cjs/persisters/persister-partykit-client.cjs +1 -1
  31. package/lib/cjs/persisters/persister-partykit-client.cjs.gz +0 -0
  32. package/lib/cjs/persisters/persister-partykit-server.cjs +1 -1
  33. package/lib/cjs/persisters/persister-partykit-server.cjs.gz +0 -0
  34. package/lib/cjs/persisters/persister-powersync.cjs +1 -0
  35. package/lib/cjs/persisters/persister-powersync.cjs.gz +0 -0
  36. package/lib/cjs/persisters/persister-remote.cjs +1 -1
  37. package/lib/cjs/persisters/persister-remote.cjs.gz +0 -0
  38. package/lib/cjs/persisters/persister-sqlite-wasm.cjs +1 -1
  39. package/lib/cjs/persisters/persister-sqlite-wasm.cjs.gz +0 -0
  40. package/lib/cjs/persisters/persister-sqlite3.cjs +1 -1
  41. package/lib/cjs/persisters/persister-sqlite3.cjs.gz +0 -0
  42. package/lib/cjs/persisters/persister-yjs.cjs +1 -1
  43. package/lib/cjs/persisters/persister-yjs.cjs.gz +0 -0
  44. package/lib/cjs/persisters.cjs +1 -1
  45. package/lib/cjs/persisters.cjs.gz +0 -0
  46. package/lib/cjs/queries.cjs +1 -1
  47. package/lib/cjs/queries.cjs.gz +0 -0
  48. package/lib/cjs/relationships.cjs +1 -1
  49. package/lib/cjs/relationships.cjs.gz +0 -0
  50. package/lib/cjs/store.cjs +1 -1
  51. package/lib/cjs/store.cjs.gz +0 -0
  52. package/lib/cjs/synchronizers/synchronizer-local.cjs +1 -0
  53. package/lib/cjs/synchronizers/synchronizer-local.cjs.gz +0 -0
  54. package/lib/cjs/synchronizers/synchronizer-ws-client.cjs +1 -0
  55. package/lib/cjs/synchronizers/synchronizer-ws-client.cjs.gz +0 -0
  56. package/lib/cjs/synchronizers/synchronizer-ws-server.cjs +1 -0
  57. package/lib/cjs/synchronizers/synchronizer-ws-server.cjs.gz +0 -0
  58. package/lib/cjs/synchronizers.cjs +1 -0
  59. package/lib/cjs/synchronizers.cjs.gz +0 -0
  60. package/lib/cjs/tinybase.cjs +1 -1
  61. package/lib/cjs/tinybase.cjs.gz +0 -0
  62. package/lib/cjs/tools.cjs +1 -1
  63. package/lib/cjs/tools.cjs.gz +0 -0
  64. package/lib/cjs/ui-react-dom-debug.cjs +1 -1
  65. package/lib/cjs/ui-react-dom-debug.cjs.gz +0 -0
  66. package/lib/cjs/ui-react-dom.cjs +1 -1
  67. package/lib/cjs/ui-react-dom.cjs.gz +0 -0
  68. package/lib/cjs/ui-react.cjs +1 -1
  69. package/lib/cjs/ui-react.cjs.gz +0 -0
  70. package/lib/cjs-es6/checkpoints.cjs +1 -1
  71. package/lib/cjs-es6/checkpoints.cjs.gz +0 -0
  72. package/lib/cjs-es6/indexes.cjs +1 -1
  73. package/lib/cjs-es6/indexes.cjs.gz +0 -0
  74. package/lib/cjs-es6/mergeable-store.cjs +1 -0
  75. package/lib/cjs-es6/mergeable-store.cjs.gz +0 -0
  76. package/lib/cjs-es6/metrics.cjs +1 -1
  77. package/lib/cjs-es6/metrics.cjs.gz +0 -0
  78. package/lib/cjs-es6/persisters/persister-automerge.cjs +1 -1
  79. package/lib/cjs-es6/persisters/persister-automerge.cjs.gz +0 -0
  80. package/lib/cjs-es6/persisters/persister-browser.cjs +1 -1
  81. package/lib/cjs-es6/persisters/persister-browser.cjs.gz +0 -0
  82. package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs +1 -1
  83. package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs.gz +0 -0
  84. package/lib/cjs-es6/persisters/persister-electric-sql.cjs +1 -1
  85. package/lib/cjs-es6/persisters/persister-electric-sql.cjs.gz +0 -0
  86. package/lib/cjs-es6/persisters/persister-expo-sqlite-next.cjs +1 -1
  87. package/lib/cjs-es6/persisters/persister-expo-sqlite-next.cjs.gz +0 -0
  88. package/lib/cjs-es6/persisters/persister-expo-sqlite.cjs +1 -1
  89. package/lib/cjs-es6/persisters/persister-expo-sqlite.cjs.gz +0 -0
  90. package/lib/cjs-es6/persisters/persister-file.cjs +1 -1
  91. package/lib/cjs-es6/persisters/persister-file.cjs.gz +0 -0
  92. package/lib/cjs-es6/persisters/persister-indexed-db.cjs +1 -1
  93. package/lib/cjs-es6/persisters/persister-indexed-db.cjs.gz +0 -0
  94. package/lib/cjs-es6/persisters/persister-libsql.cjs +1 -0
  95. package/lib/cjs-es6/persisters/persister-libsql.cjs.gz +0 -0
  96. package/lib/cjs-es6/persisters/persister-partykit-client.cjs +1 -1
  97. package/lib/cjs-es6/persisters/persister-partykit-client.cjs.gz +0 -0
  98. package/lib/cjs-es6/persisters/persister-partykit-server.cjs +1 -1
  99. package/lib/cjs-es6/persisters/persister-partykit-server.cjs.gz +0 -0
  100. package/lib/cjs-es6/persisters/persister-powersync.cjs +1 -0
  101. package/lib/cjs-es6/persisters/persister-powersync.cjs.gz +0 -0
  102. package/lib/cjs-es6/persisters/persister-remote.cjs +1 -1
  103. package/lib/cjs-es6/persisters/persister-remote.cjs.gz +0 -0
  104. package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs +1 -1
  105. package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs.gz +0 -0
  106. package/lib/cjs-es6/persisters/persister-sqlite3.cjs +1 -1
  107. package/lib/cjs-es6/persisters/persister-sqlite3.cjs.gz +0 -0
  108. package/lib/cjs-es6/persisters/persister-yjs.cjs +1 -1
  109. package/lib/cjs-es6/persisters/persister-yjs.cjs.gz +0 -0
  110. package/lib/cjs-es6/persisters.cjs +1 -1
  111. package/lib/cjs-es6/persisters.cjs.gz +0 -0
  112. package/lib/cjs-es6/queries.cjs +1 -1
  113. package/lib/cjs-es6/queries.cjs.gz +0 -0
  114. package/lib/cjs-es6/relationships.cjs +1 -1
  115. package/lib/cjs-es6/relationships.cjs.gz +0 -0
  116. package/lib/cjs-es6/store.cjs +1 -1
  117. package/lib/cjs-es6/store.cjs.gz +0 -0
  118. package/lib/cjs-es6/synchronizers/synchronizer-local.cjs +1 -0
  119. package/lib/cjs-es6/synchronizers/synchronizer-local.cjs.gz +0 -0
  120. package/lib/cjs-es6/synchronizers/synchronizer-ws-client.cjs +1 -0
  121. package/lib/cjs-es6/synchronizers/synchronizer-ws-client.cjs.gz +0 -0
  122. package/lib/cjs-es6/synchronizers/synchronizer-ws-server.cjs +1 -0
  123. package/lib/cjs-es6/synchronizers/synchronizer-ws-server.cjs.gz +0 -0
  124. package/lib/cjs-es6/synchronizers.cjs +1 -0
  125. package/lib/cjs-es6/synchronizers.cjs.gz +0 -0
  126. package/lib/cjs-es6/tinybase.cjs +1 -1
  127. package/lib/cjs-es6/tinybase.cjs.gz +0 -0
  128. package/lib/cjs-es6/tools.cjs +1 -1
  129. package/lib/cjs-es6/tools.cjs.gz +0 -0
  130. package/lib/cjs-es6/ui-react-dom-debug.cjs +1 -1
  131. package/lib/cjs-es6/ui-react-dom-debug.cjs.gz +0 -0
  132. package/lib/cjs-es6/ui-react-dom.cjs +1 -1
  133. package/lib/cjs-es6/ui-react-dom.cjs.gz +0 -0
  134. package/lib/cjs-es6/ui-react.cjs +1 -1
  135. package/lib/cjs-es6/ui-react.cjs.gz +0 -0
  136. package/lib/debug/checkpoints.js +254 -235
  137. package/lib/debug/indexes.js +10 -6
  138. package/lib/debug/mergeable-store.js +2230 -0
  139. package/lib/debug/metrics.js +10 -6
  140. package/lib/debug/persisters/persister-automerge.js +113 -87
  141. package/lib/debug/persisters/persister-browser.js +95 -57
  142. package/lib/debug/persisters/persister-cr-sqlite-wasm.js +175 -109
  143. package/lib/debug/persisters/persister-electric-sql.js +176 -109
  144. package/lib/debug/persisters/persister-expo-sqlite-next.js +176 -110
  145. package/lib/debug/persisters/persister-expo-sqlite.js +175 -109
  146. package/lib/debug/persisters/persister-file.js +94 -57
  147. package/lib/debug/persisters/persister-indexed-db.js +94 -57
  148. package/lib/debug/persisters/persister-libsql.js +913 -0
  149. package/lib/debug/persisters/persister-partykit-client.js +90 -59
  150. package/lib/debug/persisters/persister-partykit-server.js +19 -26
  151. package/lib/debug/persisters/persister-powersync.js +928 -0
  152. package/lib/debug/persisters/persister-remote.js +86 -53
  153. package/lib/debug/persisters/persister-sqlite-wasm.js +175 -109
  154. package/lib/debug/persisters/persister-sqlite3.js +175 -109
  155. package/lib/debug/persisters/persister-yjs.js +111 -84
  156. package/lib/debug/persisters.js +82 -50
  157. package/lib/debug/queries.js +18 -12
  158. package/lib/debug/relationships.js +10 -6
  159. package/lib/debug/store.js +150 -127
  160. package/lib/debug/synchronizers/synchronizer-local.js +559 -0
  161. package/lib/debug/synchronizers/synchronizer-ws-client.js +586 -0
  162. package/lib/debug/synchronizers/synchronizer-ws-server.js +96 -0
  163. package/lib/debug/synchronizers.js +519 -0
  164. package/lib/debug/tinybase.js +1281 -409
  165. package/lib/debug/tools.js +41 -64
  166. package/lib/debug/ui-react-dom.js +277 -213
  167. package/lib/debug/ui-react.js +213 -198
  168. package/lib/es6/checkpoints.js +1 -1
  169. package/lib/es6/checkpoints.js.gz +0 -0
  170. package/lib/es6/indexes.js +1 -1
  171. package/lib/es6/indexes.js.gz +0 -0
  172. package/lib/es6/mergeable-store.js +1 -0
  173. package/lib/es6/mergeable-store.js.gz +0 -0
  174. package/lib/es6/metrics.js +1 -1
  175. package/lib/es6/metrics.js.gz +0 -0
  176. package/lib/es6/persisters/persister-automerge.js +1 -1
  177. package/lib/es6/persisters/persister-automerge.js.gz +0 -0
  178. package/lib/es6/persisters/persister-browser.js +1 -1
  179. package/lib/es6/persisters/persister-browser.js.gz +0 -0
  180. package/lib/es6/persisters/persister-cr-sqlite-wasm.js +1 -1
  181. package/lib/es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  182. package/lib/es6/persisters/persister-electric-sql.js +1 -1
  183. package/lib/es6/persisters/persister-electric-sql.js.gz +0 -0
  184. package/lib/es6/persisters/persister-expo-sqlite-next.js +1 -1
  185. package/lib/es6/persisters/persister-expo-sqlite-next.js.gz +0 -0
  186. package/lib/es6/persisters/persister-expo-sqlite.js +1 -1
  187. package/lib/es6/persisters/persister-expo-sqlite.js.gz +0 -0
  188. package/lib/es6/persisters/persister-file.js +1 -1
  189. package/lib/es6/persisters/persister-file.js.gz +0 -0
  190. package/lib/es6/persisters/persister-indexed-db.js +1 -1
  191. package/lib/es6/persisters/persister-indexed-db.js.gz +0 -0
  192. package/lib/es6/persisters/persister-libsql.js +1 -0
  193. package/lib/es6/persisters/persister-libsql.js.gz +0 -0
  194. package/lib/es6/persisters/persister-partykit-client.js +1 -1
  195. package/lib/es6/persisters/persister-partykit-client.js.gz +0 -0
  196. package/lib/es6/persisters/persister-partykit-server.js +1 -1
  197. package/lib/es6/persisters/persister-partykit-server.js.gz +0 -0
  198. package/lib/es6/persisters/persister-powersync.js +1 -0
  199. package/lib/es6/persisters/persister-powersync.js.gz +0 -0
  200. package/lib/es6/persisters/persister-remote.js +1 -1
  201. package/lib/es6/persisters/persister-remote.js.gz +0 -0
  202. package/lib/es6/persisters/persister-sqlite-wasm.js +1 -1
  203. package/lib/es6/persisters/persister-sqlite-wasm.js.gz +0 -0
  204. package/lib/es6/persisters/persister-sqlite3.js +1 -1
  205. package/lib/es6/persisters/persister-sqlite3.js.gz +0 -0
  206. package/lib/es6/persisters/persister-yjs.js +1 -1
  207. package/lib/es6/persisters/persister-yjs.js.gz +0 -0
  208. package/lib/es6/persisters.js +1 -1
  209. package/lib/es6/persisters.js.gz +0 -0
  210. package/lib/es6/queries.js +1 -1
  211. package/lib/es6/queries.js.gz +0 -0
  212. package/lib/es6/relationships.js +1 -1
  213. package/lib/es6/relationships.js.gz +0 -0
  214. package/lib/es6/store.js +1 -1
  215. package/lib/es6/store.js.gz +0 -0
  216. package/lib/es6/synchronizers/synchronizer-local.js +1 -0
  217. package/lib/es6/synchronizers/synchronizer-local.js.gz +0 -0
  218. package/lib/es6/synchronizers/synchronizer-ws-client.js +1 -0
  219. package/lib/es6/synchronizers/synchronizer-ws-client.js.gz +0 -0
  220. package/lib/es6/synchronizers/synchronizer-ws-server.js +1 -0
  221. package/lib/es6/synchronizers/synchronizer-ws-server.js.gz +0 -0
  222. package/lib/es6/synchronizers.js +1 -0
  223. package/lib/es6/synchronizers.js.gz +0 -0
  224. package/lib/es6/tinybase.js +1 -1
  225. package/lib/es6/tinybase.js.gz +0 -0
  226. package/lib/es6/tools.js +1 -1
  227. package/lib/es6/tools.js.gz +0 -0
  228. package/lib/es6/ui-react-dom-debug.js +1 -1
  229. package/lib/es6/ui-react-dom-debug.js.gz +0 -0
  230. package/lib/es6/ui-react-dom.js +1 -1
  231. package/lib/es6/ui-react-dom.js.gz +0 -0
  232. package/lib/es6/ui-react.js +1 -1
  233. package/lib/es6/ui-react.js.gz +0 -0
  234. package/lib/indexes.js +1 -1
  235. package/lib/indexes.js.gz +0 -0
  236. package/lib/mergeable-store.js +1 -0
  237. package/lib/mergeable-store.js.gz +0 -0
  238. package/lib/metrics.js +1 -1
  239. package/lib/metrics.js.gz +0 -0
  240. package/lib/persisters/persister-automerge.js +1 -1
  241. package/lib/persisters/persister-automerge.js.gz +0 -0
  242. package/lib/persisters/persister-browser.js +1 -1
  243. package/lib/persisters/persister-browser.js.gz +0 -0
  244. package/lib/persisters/persister-cr-sqlite-wasm.js +1 -1
  245. package/lib/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  246. package/lib/persisters/persister-electric-sql.js +1 -1
  247. package/lib/persisters/persister-electric-sql.js.gz +0 -0
  248. package/lib/persisters/persister-expo-sqlite-next.js +1 -1
  249. package/lib/persisters/persister-expo-sqlite-next.js.gz +0 -0
  250. package/lib/persisters/persister-expo-sqlite.js +1 -1
  251. package/lib/persisters/persister-expo-sqlite.js.gz +0 -0
  252. package/lib/persisters/persister-file.js +1 -1
  253. package/lib/persisters/persister-file.js.gz +0 -0
  254. package/lib/persisters/persister-indexed-db.js +1 -1
  255. package/lib/persisters/persister-indexed-db.js.gz +0 -0
  256. package/lib/persisters/persister-libsql.js +1 -0
  257. package/lib/persisters/persister-libsql.js.gz +0 -0
  258. package/lib/persisters/persister-partykit-client.js +1 -1
  259. package/lib/persisters/persister-partykit-client.js.gz +0 -0
  260. package/lib/persisters/persister-partykit-server.js +1 -1
  261. package/lib/persisters/persister-partykit-server.js.gz +0 -0
  262. package/lib/persisters/persister-powersync.js +1 -0
  263. package/lib/persisters/persister-powersync.js.gz +0 -0
  264. package/lib/persisters/persister-remote.js +1 -1
  265. package/lib/persisters/persister-remote.js.gz +0 -0
  266. package/lib/persisters/persister-sqlite-wasm.js +1 -1
  267. package/lib/persisters/persister-sqlite-wasm.js.gz +0 -0
  268. package/lib/persisters/persister-sqlite3.js +1 -1
  269. package/lib/persisters/persister-sqlite3.js.gz +0 -0
  270. package/lib/persisters/persister-yjs.js +1 -1
  271. package/lib/persisters/persister-yjs.js.gz +0 -0
  272. package/lib/persisters.js +1 -1
  273. package/lib/persisters.js.gz +0 -0
  274. package/lib/queries.js +1 -1
  275. package/lib/queries.js.gz +0 -0
  276. package/lib/relationships.js +1 -1
  277. package/lib/relationships.js.gz +0 -0
  278. package/lib/store.js +1 -1
  279. package/lib/store.js.gz +0 -0
  280. package/lib/synchronizers/synchronizer-local.js +1 -0
  281. package/lib/synchronizers/synchronizer-local.js.gz +0 -0
  282. package/lib/synchronizers/synchronizer-ws-client.js +1 -0
  283. package/lib/synchronizers/synchronizer-ws-client.js.gz +0 -0
  284. package/lib/synchronizers/synchronizer-ws-server.js +1 -0
  285. package/lib/synchronizers/synchronizer-ws-server.js.gz +0 -0
  286. package/lib/synchronizers.js +1 -0
  287. package/lib/synchronizers.js.gz +0 -0
  288. package/lib/tinybase.js +1 -1
  289. package/lib/tinybase.js.gz +0 -0
  290. package/lib/tools.js +1 -1
  291. package/lib/tools.js.gz +0 -0
  292. package/lib/types/checkpoints.d.ts +2 -2
  293. package/lib/types/indexes.d.ts +2 -2
  294. package/lib/types/mergeable-store.d.ts +214 -0
  295. package/lib/types/metrics.d.ts +2 -2
  296. package/lib/types/persisters/persister-automerge.d.ts +11 -7
  297. package/lib/types/persisters/persister-browser.d.ts +13 -4
  298. package/lib/types/persisters/persister-cr-sqlite-wasm.d.ts +4 -0
  299. package/lib/types/persisters/persister-electric-sql.d.ts +4 -0
  300. package/lib/types/persisters/persister-expo-sqlite-next.d.ts +7 -3
  301. package/lib/types/persisters/persister-expo-sqlite.d.ts +4 -0
  302. package/lib/types/persisters/persister-file.d.ts +7 -2
  303. package/lib/types/persisters/persister-indexed-db.d.ts +4 -0
  304. package/lib/types/persisters/persister-libsql.d.ts +142 -0
  305. package/lib/types/persisters/persister-partykit-client.d.ts +4 -0
  306. package/lib/types/persisters/persister-partykit-server.d.ts +12 -8
  307. package/lib/types/persisters/persister-powersync.d.ts +157 -0
  308. package/lib/types/persisters/persister-remote.d.ts +4 -0
  309. package/lib/types/persisters/persister-sqlite-wasm.d.ts +4 -0
  310. package/lib/types/persisters/persister-sqlite3.d.ts +4 -0
  311. package/lib/types/persisters/persister-yjs.d.ts +6 -2
  312. package/lib/types/persisters.d.ts +125 -48
  313. package/lib/types/queries.d.ts +2 -2
  314. package/lib/types/relationships.d.ts +2 -2
  315. package/lib/types/store.d.ts +275 -187
  316. package/lib/types/synchronizers/synchronizer-local.d.ts +27 -0
  317. package/lib/types/synchronizers/synchronizer-ws-client.d.ts +35 -0
  318. package/lib/types/synchronizers/synchronizer-ws-server.d.ts +36 -0
  319. package/lib/types/synchronizers.d.ts +132 -0
  320. package/lib/types/tinybase.d.ts +10 -8
  321. package/lib/types/tools.d.ts +4 -4
  322. package/lib/types/ui-react.d.ts +235 -95
  323. package/lib/types/with-schemas/checkpoints.d.ts +2 -2
  324. package/lib/types/with-schemas/indexes.d.ts +2 -2
  325. package/lib/types/with-schemas/internal/queries.d.ts +4 -3
  326. package/lib/types/with-schemas/internal/store.d.ts +8 -3
  327. package/lib/types/with-schemas/mergeable-store.d.ts +492 -0
  328. package/lib/types/with-schemas/metrics.d.ts +2 -2
  329. package/lib/types/with-schemas/persisters/persister-automerge.d.ts +12 -8
  330. package/lib/types/with-schemas/persisters/persister-browser.d.ts +17 -8
  331. package/lib/types/with-schemas/persisters/persister-cr-sqlite-wasm.d.ts +5 -1
  332. package/lib/types/with-schemas/persisters/persister-electric-sql.d.ts +5 -1
  333. package/lib/types/with-schemas/persisters/persister-expo-sqlite-next.d.ts +8 -4
  334. package/lib/types/with-schemas/persisters/persister-expo-sqlite.d.ts +5 -1
  335. package/lib/types/with-schemas/persisters/persister-file.d.ts +9 -4
  336. package/lib/types/with-schemas/persisters/persister-indexed-db.d.ts +5 -1
  337. package/lib/types/with-schemas/persisters/persister-libsql.d.ts +155 -0
  338. package/lib/types/with-schemas/persisters/persister-partykit-client.d.ts +5 -1
  339. package/lib/types/with-schemas/persisters/persister-partykit-server.d.ts +15 -11
  340. package/lib/types/with-schemas/persisters/persister-powersync.d.ts +170 -0
  341. package/lib/types/with-schemas/persisters/persister-remote.d.ts +5 -1
  342. package/lib/types/with-schemas/persisters/persister-sqlite-wasm.d.ts +5 -1
  343. package/lib/types/with-schemas/persisters/persister-sqlite3.d.ts +5 -1
  344. package/lib/types/with-schemas/persisters/persister-yjs.d.ts +7 -3
  345. package/lib/types/with-schemas/persisters.d.ts +161 -101
  346. package/lib/types/with-schemas/queries.d.ts +3 -3
  347. package/lib/types/with-schemas/relationships.d.ts +2 -2
  348. package/lib/types/with-schemas/store.d.ts +483 -345
  349. package/lib/types/with-schemas/synchronizers/synchronizer-local.d.ts +29 -0
  350. package/lib/types/with-schemas/synchronizers/synchronizer-ws-client.d.ts +41 -0
  351. package/lib/types/with-schemas/synchronizers/synchronizer-ws-server.d.ts +36 -0
  352. package/lib/types/with-schemas/synchronizers.d.ts +146 -0
  353. package/lib/types/with-schemas/tinybase.d.ts +9 -8
  354. package/lib/types/with-schemas/tools.d.ts +4 -4
  355. package/lib/types/with-schemas/ui-react.d.ts +259 -102
  356. package/lib/ui-react-dom.js +1 -1
  357. package/lib/ui-react-dom.js.gz +0 -0
  358. package/lib/ui-react.js +1 -1
  359. package/lib/ui-react.js.gz +0 -0
  360. package/lib/umd/checkpoints.js +1 -1
  361. package/lib/umd/checkpoints.js.gz +0 -0
  362. package/lib/umd/indexes.js +1 -1
  363. package/lib/umd/indexes.js.gz +0 -0
  364. package/lib/umd/mergeable-store.js +1 -0
  365. package/lib/umd/mergeable-store.js.gz +0 -0
  366. package/lib/umd/metrics.js +1 -1
  367. package/lib/umd/metrics.js.gz +0 -0
  368. package/lib/umd/persisters/persister-automerge.js +1 -1
  369. package/lib/umd/persisters/persister-automerge.js.gz +0 -0
  370. package/lib/umd/persisters/persister-browser.js +1 -1
  371. package/lib/umd/persisters/persister-browser.js.gz +0 -0
  372. package/lib/umd/persisters/persister-cr-sqlite-wasm.js +1 -1
  373. package/lib/umd/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  374. package/lib/umd/persisters/persister-electric-sql.js +1 -1
  375. package/lib/umd/persisters/persister-electric-sql.js.gz +0 -0
  376. package/lib/umd/persisters/persister-expo-sqlite-next.js +1 -1
  377. package/lib/umd/persisters/persister-expo-sqlite-next.js.gz +0 -0
  378. package/lib/umd/persisters/persister-expo-sqlite.js +1 -1
  379. package/lib/umd/persisters/persister-expo-sqlite.js.gz +0 -0
  380. package/lib/umd/persisters/persister-file.js +1 -1
  381. package/lib/umd/persisters/persister-file.js.gz +0 -0
  382. package/lib/umd/persisters/persister-indexed-db.js +1 -1
  383. package/lib/umd/persisters/persister-indexed-db.js.gz +0 -0
  384. package/lib/umd/persisters/persister-libsql.js +1 -0
  385. package/lib/umd/persisters/persister-libsql.js.gz +0 -0
  386. package/lib/umd/persisters/persister-partykit-client.js +1 -1
  387. package/lib/umd/persisters/persister-partykit-client.js.gz +0 -0
  388. package/lib/umd/persisters/persister-partykit-server.js +1 -1
  389. package/lib/umd/persisters/persister-partykit-server.js.gz +0 -0
  390. package/lib/umd/persisters/persister-powersync.js +1 -0
  391. package/lib/umd/persisters/persister-powersync.js.gz +0 -0
  392. package/lib/umd/persisters/persister-remote.js +1 -1
  393. package/lib/umd/persisters/persister-remote.js.gz +0 -0
  394. package/lib/umd/persisters/persister-sqlite-wasm.js +1 -1
  395. package/lib/umd/persisters/persister-sqlite-wasm.js.gz +0 -0
  396. package/lib/umd/persisters/persister-sqlite3.js +1 -1
  397. package/lib/umd/persisters/persister-sqlite3.js.gz +0 -0
  398. package/lib/umd/persisters/persister-yjs.js +1 -1
  399. package/lib/umd/persisters/persister-yjs.js.gz +0 -0
  400. package/lib/umd/persisters.js +1 -1
  401. package/lib/umd/persisters.js.gz +0 -0
  402. package/lib/umd/queries.js +1 -1
  403. package/lib/umd/queries.js.gz +0 -0
  404. package/lib/umd/relationships.js +1 -1
  405. package/lib/umd/relationships.js.gz +0 -0
  406. package/lib/umd/store.js +1 -1
  407. package/lib/umd/store.js.gz +0 -0
  408. package/lib/umd/synchronizers/synchronizer-local.js +1 -0
  409. package/lib/umd/synchronizers/synchronizer-local.js.gz +0 -0
  410. package/lib/umd/synchronizers/synchronizer-ws-client.js +1 -0
  411. package/lib/umd/synchronizers/synchronizer-ws-client.js.gz +0 -0
  412. package/lib/umd/synchronizers/synchronizer-ws-server.js +1 -0
  413. package/lib/umd/synchronizers/synchronizer-ws-server.js.gz +0 -0
  414. package/lib/umd/synchronizers.js +1 -0
  415. package/lib/umd/synchronizers.js.gz +0 -0
  416. package/lib/umd/tinybase.js +1 -1
  417. package/lib/umd/tinybase.js.gz +0 -0
  418. package/lib/umd/tools.js +1 -1
  419. package/lib/umd/tools.js.gz +0 -0
  420. package/lib/umd/ui-react-dom-debug.js +1 -1
  421. package/lib/umd/ui-react-dom-debug.js.gz +0 -0
  422. package/lib/umd/ui-react-dom.js +1 -1
  423. package/lib/umd/ui-react-dom.js.gz +0 -0
  424. package/lib/umd/ui-react.js +1 -1
  425. package/lib/umd/ui-react.js.gz +0 -0
  426. package/lib/umd-es6/checkpoints.js +1 -1
  427. package/lib/umd-es6/checkpoints.js.gz +0 -0
  428. package/lib/umd-es6/indexes.js +1 -1
  429. package/lib/umd-es6/indexes.js.gz +0 -0
  430. package/lib/umd-es6/mergeable-store.js +1 -0
  431. package/lib/umd-es6/mergeable-store.js.gz +0 -0
  432. package/lib/umd-es6/metrics.js +1 -1
  433. package/lib/umd-es6/metrics.js.gz +0 -0
  434. package/lib/umd-es6/persisters/persister-automerge.js +1 -1
  435. package/lib/umd-es6/persisters/persister-automerge.js.gz +0 -0
  436. package/lib/umd-es6/persisters/persister-browser.js +1 -1
  437. package/lib/umd-es6/persisters/persister-browser.js.gz +0 -0
  438. package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js +1 -1
  439. package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  440. package/lib/umd-es6/persisters/persister-electric-sql.js +1 -1
  441. package/lib/umd-es6/persisters/persister-electric-sql.js.gz +0 -0
  442. package/lib/umd-es6/persisters/persister-expo-sqlite-next.js +1 -1
  443. package/lib/umd-es6/persisters/persister-expo-sqlite-next.js.gz +0 -0
  444. package/lib/umd-es6/persisters/persister-expo-sqlite.js +1 -1
  445. package/lib/umd-es6/persisters/persister-expo-sqlite.js.gz +0 -0
  446. package/lib/umd-es6/persisters/persister-file.js +1 -1
  447. package/lib/umd-es6/persisters/persister-file.js.gz +0 -0
  448. package/lib/umd-es6/persisters/persister-indexed-db.js +1 -1
  449. package/lib/umd-es6/persisters/persister-indexed-db.js.gz +0 -0
  450. package/lib/umd-es6/persisters/persister-libsql.js +1 -0
  451. package/lib/umd-es6/persisters/persister-libsql.js.gz +0 -0
  452. package/lib/umd-es6/persisters/persister-partykit-client.js +1 -1
  453. package/lib/umd-es6/persisters/persister-partykit-client.js.gz +0 -0
  454. package/lib/umd-es6/persisters/persister-partykit-server.js +1 -1
  455. package/lib/umd-es6/persisters/persister-partykit-server.js.gz +0 -0
  456. package/lib/umd-es6/persisters/persister-powersync.js +1 -0
  457. package/lib/umd-es6/persisters/persister-powersync.js.gz +0 -0
  458. package/lib/umd-es6/persisters/persister-remote.js +1 -1
  459. package/lib/umd-es6/persisters/persister-remote.js.gz +0 -0
  460. package/lib/umd-es6/persisters/persister-sqlite-wasm.js +1 -1
  461. package/lib/umd-es6/persisters/persister-sqlite-wasm.js.gz +0 -0
  462. package/lib/umd-es6/persisters/persister-sqlite3.js +1 -1
  463. package/lib/umd-es6/persisters/persister-sqlite3.js.gz +0 -0
  464. package/lib/umd-es6/persisters/persister-yjs.js +1 -1
  465. package/lib/umd-es6/persisters/persister-yjs.js.gz +0 -0
  466. package/lib/umd-es6/persisters.js +1 -1
  467. package/lib/umd-es6/persisters.js.gz +0 -0
  468. package/lib/umd-es6/queries.js +1 -1
  469. package/lib/umd-es6/queries.js.gz +0 -0
  470. package/lib/umd-es6/relationships.js +1 -1
  471. package/lib/umd-es6/relationships.js.gz +0 -0
  472. package/lib/umd-es6/store.js +1 -1
  473. package/lib/umd-es6/store.js.gz +0 -0
  474. package/lib/umd-es6/synchronizers/synchronizer-local.js +1 -0
  475. package/lib/umd-es6/synchronizers/synchronizer-local.js.gz +0 -0
  476. package/lib/umd-es6/synchronizers/synchronizer-ws-client.js +1 -0
  477. package/lib/umd-es6/synchronizers/synchronizer-ws-client.js.gz +0 -0
  478. package/lib/umd-es6/synchronizers/synchronizer-ws-server.js +1 -0
  479. package/lib/umd-es6/synchronizers/synchronizer-ws-server.js.gz +0 -0
  480. package/lib/umd-es6/synchronizers.js +1 -0
  481. package/lib/umd-es6/synchronizers.js.gz +0 -0
  482. package/lib/umd-es6/tinybase.js +1 -1
  483. package/lib/umd-es6/tinybase.js.gz +0 -0
  484. package/lib/umd-es6/tools.js +1 -1
  485. package/lib/umd-es6/tools.js.gz +0 -0
  486. package/lib/umd-es6/ui-react-dom-debug.js +1 -1
  487. package/lib/umd-es6/ui-react-dom-debug.js.gz +0 -0
  488. package/lib/umd-es6/ui-react-dom.js +1 -1
  489. package/lib/umd-es6/ui-react-dom.js.gz +0 -0
  490. package/lib/umd-es6/ui-react.js +1 -1
  491. package/lib/umd-es6/ui-react.js.gz +0 -0
  492. package/package.json +68 -48
  493. package/readme.md +2 -2
@@ -36,9 +36,11 @@ const mapForEach = (map, cb) =>
36
36
  collForEach(map, (value, key) => cb(key, value));
37
37
  const mapSet = (map, key, value) =>
38
38
  isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
39
- const mapEnsure = (map, key, getDefaultValue) => {
39
+ const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
40
40
  if (!collHas(map, key)) {
41
41
  mapSet(map, key, getDefaultValue());
42
+ } else {
43
+ hadExistingValue?.(mapGet(map, key));
42
44
  }
43
45
  return mapGet(map, key);
44
46
  };
@@ -79,13 +81,15 @@ const setNew = (entryOrEntries) =>
79
81
  );
80
82
  const setAdd = (set, value) => set?.add(value);
81
83
 
82
- const getCreateFunction = (getFunction) => {
83
- const getFunctionsByStore = /* @__PURE__ */ new WeakMap();
84
+ const getCreateFunction = (getFunction, initFunction) => {
85
+ const thingsByStore = /* @__PURE__ */ new WeakMap();
84
86
  return (store) => {
85
- if (!getFunctionsByStore.has(store)) {
86
- getFunctionsByStore.set(store, getFunction(store));
87
+ if (!thingsByStore.has(store)) {
88
+ thingsByStore.set(store, getFunction(store));
87
89
  }
88
- return getFunctionsByStore.get(store);
90
+ const thing = thingsByStore.get(store);
91
+ initFunction?.(thing);
92
+ return thing;
89
93
  };
90
94
  };
91
95
 
@@ -173,240 +177,255 @@ const getListenerFunctions = (getThing) => {
173
177
  return [addListener, callListeners, delListener, callListener];
174
178
  };
175
179
 
176
- const createCheckpoints = getCreateFunction((store) => {
177
- let backwardIdsSize = 100;
178
- let currentId;
179
- let cellsDelta = mapNew();
180
- let valuesDelta = mapNew();
181
- let listening = 1;
182
- let nextCheckpointId;
183
- let checkpointsChanged;
184
- const checkpointIdsListeners = mapNew();
185
- const checkpointListeners = mapNew();
186
- const [addListener, callListeners, delListenerImpl] = getListenerFunctions(
187
- () => checkpoints,
188
- );
189
- const deltas = mapNew();
190
- const labels = mapNew();
191
- const backwardIds = [];
192
- const forwardIds = [];
193
- const updateStore = (oldOrNew, checkpointId) => {
194
- listening = 0;
195
- store.transaction(() => {
196
- const [cellsDelta2, valuesDelta2] = mapGet(deltas, checkpointId);
197
- collForEach(cellsDelta2, (table, tableId) =>
198
- collForEach(table, (row, rowId) =>
199
- collForEach(row, (oldNew, cellId) =>
200
- setOrDelCell(store, tableId, rowId, cellId, oldNew[oldOrNew]),
180
+ const createCheckpoints = getCreateFunction(
181
+ (store) => {
182
+ let backwardIdsSize = 100;
183
+ let currentId;
184
+ let cellsDelta = mapNew();
185
+ let valuesDelta = mapNew();
186
+ let listening = 1;
187
+ let nextCheckpointId;
188
+ let checkpointsChanged;
189
+ const checkpointIdsListeners = mapNew();
190
+ const checkpointListeners = mapNew();
191
+ const [addListener, callListeners, delListenerImpl] = getListenerFunctions(
192
+ () => checkpoints,
193
+ );
194
+ const deltas = mapNew();
195
+ const labels = mapNew();
196
+ const backwardIds = [];
197
+ const forwardIds = [];
198
+ const updateStore = (oldOrNew, checkpointId) => {
199
+ listening = 0;
200
+ store.transaction(() => {
201
+ const [cellsDelta2, valuesDelta2] = mapGet(deltas, checkpointId);
202
+ collForEach(cellsDelta2, (table, tableId) =>
203
+ collForEach(table, (row, rowId) =>
204
+ collForEach(row, (oldNew, cellId) =>
205
+ setOrDelCell(store, tableId, rowId, cellId, oldNew[oldOrNew]),
206
+ ),
201
207
  ),
202
- ),
203
- );
204
- collForEach(valuesDelta2, (oldNew, valueId) =>
205
- setOrDelValue(store, valueId, oldNew[oldOrNew]),
208
+ );
209
+ collForEach(valuesDelta2, (oldNew, valueId) =>
210
+ setOrDelValue(store, valueId, oldNew[oldOrNew]),
211
+ );
212
+ });
213
+ listening = 1;
214
+ };
215
+ const clearCheckpointId = (checkpointId) => {
216
+ mapSet(deltas, checkpointId);
217
+ mapSet(labels, checkpointId);
218
+ callListeners(checkpointListeners, [checkpointId]);
219
+ };
220
+ const clearCheckpointIds = (checkpointIds, to) =>
221
+ arrayForEach(
222
+ arrayClear(checkpointIds, to ?? size(checkpointIds)),
223
+ clearCheckpointId,
206
224
  );
207
- });
208
- listening = 1;
209
- };
210
- const clearCheckpointId = (checkpointId) => {
211
- mapSet(deltas, checkpointId);
212
- mapSet(labels, checkpointId);
213
- callListeners(checkpointListeners, [checkpointId]);
214
- };
215
- const clearCheckpointIds = (checkpointIds, to) =>
216
- arrayForEach(
217
- arrayClear(checkpointIds, to ?? size(checkpointIds)),
218
- clearCheckpointId,
219
- );
220
- const trimBackwardsIds = () =>
221
- clearCheckpointIds(backwardIds, size(backwardIds) - backwardIdsSize);
222
- const storeChanged = () =>
223
- ifNotUndefined(currentId, () => {
224
- arrayPush(backwardIds, currentId);
225
- trimBackwardsIds();
226
- clearCheckpointIds(forwardIds);
227
- currentId = void 0;
225
+ const trimBackwardsIds = () =>
226
+ clearCheckpointIds(backwardIds, size(backwardIds) - backwardIdsSize);
227
+ const storeChanged = () =>
228
+ ifNotUndefined(currentId, () => {
229
+ arrayPush(backwardIds, currentId);
230
+ trimBackwardsIds();
231
+ clearCheckpointIds(forwardIds);
232
+ currentId = void 0;
233
+ checkpointsChanged = 1;
234
+ });
235
+ const storeUnchanged = () => {
236
+ currentId = arrayPop(backwardIds);
228
237
  checkpointsChanged = 1;
229
- });
230
- const storeUnchanged = () => {
231
- currentId = arrayPop(backwardIds);
232
- checkpointsChanged = 1;
233
- };
234
- const cellListenerId = store.addCellListener(
235
- null,
236
- null,
237
- null,
238
- (_store, tableId, rowId, cellId, newCell, oldCell) => {
239
- if (listening) {
240
- storeChanged();
241
- const table = mapEnsure(cellsDelta, tableId, mapNew);
242
- const row = mapEnsure(table, rowId, mapNew);
243
- const oldNew = mapEnsure(row, cellId, () => [oldCell, void 0]);
244
- oldNew[1] = newCell;
245
- if (
246
- oldNew[0] === newCell &&
247
- collIsEmpty(mapSet(row, cellId)) &&
248
- collIsEmpty(mapSet(table, rowId)) &&
249
- collIsEmpty(mapSet(cellsDelta, tableId))
250
- ) {
251
- storeUnchanged();
252
- }
253
- callListenersIfChanged();
238
+ };
239
+ let cellListenerId;
240
+ let valueListenerId;
241
+ const addCheckpointImpl = (label = EMPTY_STRING) => {
242
+ if (isUndefined(currentId)) {
243
+ currentId = EMPTY_STRING + nextCheckpointId++;
244
+ mapSet(deltas, currentId, [cellsDelta, valuesDelta]);
245
+ setCheckpoint(currentId, label);
246
+ cellsDelta = mapNew();
247
+ valuesDelta = mapNew();
248
+ checkpointsChanged = 1;
254
249
  }
255
- },
256
- );
257
- const valueListenerId = store.addValueListener(
258
- null,
259
- (_store, valueId, newValue, oldValue) => {
260
- if (listening) {
261
- storeChanged();
262
- const oldNew = mapEnsure(valuesDelta, valueId, () => [
263
- oldValue,
264
- void 0,
265
- ]);
266
- oldNew[1] = newValue;
267
- if (
268
- oldNew[0] === newValue &&
269
- collIsEmpty(mapSet(valuesDelta, valueId))
270
- ) {
271
- storeUnchanged();
272
- }
273
- callListenersIfChanged();
250
+ return currentId;
251
+ };
252
+ const goBackwardImpl = () => {
253
+ if (!arrayIsEmpty(backwardIds)) {
254
+ arrayUnshift(forwardIds, addCheckpointImpl());
255
+ updateStore(0, currentId);
256
+ currentId = arrayPop(backwardIds);
257
+ checkpointsChanged = 1;
274
258
  }
275
- },
276
- );
277
- const addCheckpointImpl = (label = EMPTY_STRING) => {
278
- if (isUndefined(currentId)) {
279
- currentId = EMPTY_STRING + nextCheckpointId++;
280
- mapSet(deltas, currentId, [cellsDelta, valuesDelta]);
281
- setCheckpoint(currentId, label);
282
- cellsDelta = mapNew();
283
- valuesDelta = mapNew();
284
- checkpointsChanged = 1;
285
- }
286
- return currentId;
287
- };
288
- const goBackwardImpl = () => {
289
- if (!arrayIsEmpty(backwardIds)) {
290
- arrayUnshift(forwardIds, addCheckpointImpl());
291
- updateStore(0, currentId);
292
- currentId = arrayPop(backwardIds);
293
- checkpointsChanged = 1;
294
- }
295
- };
296
- const goForwardImpl = () => {
297
- if (!arrayIsEmpty(forwardIds)) {
298
- arrayPush(backwardIds, currentId);
299
- currentId = arrayShift(forwardIds);
300
- updateStore(1, currentId);
301
- checkpointsChanged = 1;
302
- }
303
- };
304
- const callListenersIfChanged = () => {
305
- if (checkpointsChanged) {
306
- callListeners(checkpointIdsListeners);
307
- checkpointsChanged = 0;
308
- }
309
- };
310
- const setSize = (size2) => {
311
- backwardIdsSize = size2;
312
- trimBackwardsIds();
313
- return checkpoints;
314
- };
315
- const addCheckpoint = (label) => {
316
- const id = addCheckpointImpl(label);
317
- callListenersIfChanged();
318
- return id;
319
- };
320
- const setCheckpoint = (checkpointId, label) => {
321
- if (hasCheckpoint(checkpointId) && mapGet(labels, checkpointId) !== label) {
322
- mapSet(labels, checkpointId, label);
323
- callListeners(checkpointListeners, [checkpointId]);
324
- }
325
- return checkpoints;
326
- };
327
- const getStore = () => store;
328
- const getCheckpointIds = () => [[...backwardIds], currentId, [...forwardIds]];
329
- const forEachCheckpoint = (checkpointCallback) =>
330
- mapForEach(labels, checkpointCallback);
331
- const hasCheckpoint = (checkpointId) => collHas(deltas, checkpointId);
332
- const getCheckpoint = (checkpointId) => mapGet(labels, checkpointId);
333
- const goBackward = () => {
334
- goBackwardImpl();
335
- callListenersIfChanged();
336
- return checkpoints;
337
- };
338
- const goForward = () => {
339
- goForwardImpl();
340
- callListenersIfChanged();
341
- return checkpoints;
342
- };
343
- const goTo = (checkpointId) => {
344
- const action = arrayHas(backwardIds, checkpointId)
345
- ? goBackwardImpl
346
- : arrayHas(forwardIds, checkpointId)
347
- ? goForwardImpl
348
- : null;
349
- while (!isUndefined(action) && checkpointId != currentId) {
350
- action();
351
- }
352
- callListenersIfChanged();
353
- return checkpoints;
354
- };
355
- const addCheckpointIdsListener = (listener) =>
356
- addListener(listener, checkpointIdsListeners);
357
- const addCheckpointListener = (checkpointId, listener) =>
358
- addListener(listener, checkpointListeners, [checkpointId]);
359
- const delListener = (listenerId) => {
360
- delListenerImpl(listenerId);
361
- return checkpoints;
362
- };
363
- const clear = () => {
364
- clearCheckpointIds(backwardIds);
365
- clearCheckpointIds(forwardIds);
366
- if (!isUndefined(currentId)) {
367
- clearCheckpointId(currentId);
368
- }
369
- currentId = void 0;
370
- nextCheckpointId = 0;
371
- addCheckpoint();
372
- return checkpoints;
373
- };
374
- const clearForward = () => {
375
- if (!arrayIsEmpty(forwardIds)) {
259
+ };
260
+ const goForwardImpl = () => {
261
+ if (!arrayIsEmpty(forwardIds)) {
262
+ arrayPush(backwardIds, currentId);
263
+ currentId = arrayShift(forwardIds);
264
+ updateStore(1, currentId);
265
+ checkpointsChanged = 1;
266
+ }
267
+ };
268
+ const callListenersIfChanged = () => {
269
+ if (checkpointsChanged) {
270
+ callListeners(checkpointIdsListeners);
271
+ checkpointsChanged = 0;
272
+ }
273
+ };
274
+ const setSize = (size2) => {
275
+ backwardIdsSize = size2;
276
+ trimBackwardsIds();
277
+ return checkpoints;
278
+ };
279
+ const addCheckpoint = (label) => {
280
+ const id = addCheckpointImpl(label);
281
+ callListenersIfChanged();
282
+ return id;
283
+ };
284
+ const setCheckpoint = (checkpointId, label) => {
285
+ if (
286
+ hasCheckpoint(checkpointId) &&
287
+ mapGet(labels, checkpointId) !== label
288
+ ) {
289
+ mapSet(labels, checkpointId, label);
290
+ callListeners(checkpointListeners, [checkpointId]);
291
+ }
292
+ return checkpoints;
293
+ };
294
+ const getStore = () => store;
295
+ const getCheckpointIds = () => [
296
+ [...backwardIds],
297
+ currentId,
298
+ [...forwardIds],
299
+ ];
300
+ const forEachCheckpoint = (checkpointCallback) =>
301
+ mapForEach(labels, checkpointCallback);
302
+ const hasCheckpoint = (checkpointId) => collHas(deltas, checkpointId);
303
+ const getCheckpoint = (checkpointId) => mapGet(labels, checkpointId);
304
+ const goBackward = () => {
305
+ goBackwardImpl();
306
+ callListenersIfChanged();
307
+ return checkpoints;
308
+ };
309
+ const goForward = () => {
310
+ goForwardImpl();
311
+ callListenersIfChanged();
312
+ return checkpoints;
313
+ };
314
+ const goTo = (checkpointId) => {
315
+ const action = arrayHas(backwardIds, checkpointId)
316
+ ? goBackwardImpl
317
+ : arrayHas(forwardIds, checkpointId)
318
+ ? goForwardImpl
319
+ : null;
320
+ while (!isUndefined(action) && checkpointId != currentId) {
321
+ action();
322
+ }
323
+ callListenersIfChanged();
324
+ return checkpoints;
325
+ };
326
+ const addCheckpointIdsListener = (listener) =>
327
+ addListener(listener, checkpointIdsListeners);
328
+ const addCheckpointListener = (checkpointId, listener) =>
329
+ addListener(listener, checkpointListeners, [checkpointId]);
330
+ const delListener = (listenerId) => {
331
+ delListenerImpl(listenerId);
332
+ return checkpoints;
333
+ };
334
+ const clear = () => {
335
+ clearCheckpointIds(backwardIds);
376
336
  clearCheckpointIds(forwardIds);
377
- callListeners(checkpointIdsListeners);
378
- }
379
- return checkpoints;
380
- };
381
- const destroy = () => {
382
- store.delListener(cellListenerId);
383
- store.delListener(valueListenerId);
384
- };
385
- const getListenerStats = () => ({
386
- checkpointIds: collSize2(checkpointIdsListeners),
387
- checkpoint: collSize2(checkpointListeners),
388
- });
389
- const checkpoints = {
390
- setSize,
391
- addCheckpoint,
392
- setCheckpoint,
393
- getStore,
394
- getCheckpointIds,
395
- forEachCheckpoint,
396
- hasCheckpoint,
397
- getCheckpoint,
398
- goBackward,
399
- goForward,
400
- goTo,
401
- addCheckpointIdsListener,
402
- addCheckpointListener,
403
- delListener,
404
- clear,
405
- clearForward,
406
- destroy,
407
- getListenerStats,
408
- };
409
- return objFreeze(checkpoints.clear());
410
- });
337
+ if (!isUndefined(currentId)) {
338
+ clearCheckpointId(currentId);
339
+ }
340
+ currentId = void 0;
341
+ nextCheckpointId = 0;
342
+ addCheckpoint();
343
+ return checkpoints;
344
+ };
345
+ const clearForward = () => {
346
+ if (!arrayIsEmpty(forwardIds)) {
347
+ clearCheckpointIds(forwardIds);
348
+ callListeners(checkpointIdsListeners);
349
+ }
350
+ return checkpoints;
351
+ };
352
+ const destroy = () => {
353
+ store.delListener(cellListenerId);
354
+ store.delListener(valueListenerId);
355
+ };
356
+ const getListenerStats = () => ({
357
+ checkpointIds: collSize2(checkpointIdsListeners),
358
+ checkpoint: collSize2(checkpointListeners),
359
+ });
360
+ const _registerListeners = () => {
361
+ cellListenerId = store.addCellListener(
362
+ null,
363
+ null,
364
+ null,
365
+ (_store, tableId, rowId, cellId, newCell, oldCell) => {
366
+ if (listening) {
367
+ storeChanged();
368
+ const table = mapEnsure(cellsDelta, tableId, mapNew);
369
+ const row = mapEnsure(table, rowId, mapNew);
370
+ const oldNew = mapEnsure(row, cellId, () => [oldCell, void 0]);
371
+ oldNew[1] = newCell;
372
+ if (
373
+ oldNew[0] === newCell &&
374
+ collIsEmpty(mapSet(row, cellId)) &&
375
+ collIsEmpty(mapSet(table, rowId)) &&
376
+ collIsEmpty(mapSet(cellsDelta, tableId))
377
+ ) {
378
+ storeUnchanged();
379
+ }
380
+ callListenersIfChanged();
381
+ }
382
+ },
383
+ );
384
+ valueListenerId = store.addValueListener(
385
+ null,
386
+ (_store, valueId, newValue, oldValue) => {
387
+ if (listening) {
388
+ storeChanged();
389
+ const oldNew = mapEnsure(valuesDelta, valueId, () => [
390
+ oldValue,
391
+ void 0,
392
+ ]);
393
+ oldNew[1] = newValue;
394
+ if (
395
+ oldNew[0] === newValue &&
396
+ collIsEmpty(mapSet(valuesDelta, valueId))
397
+ ) {
398
+ storeUnchanged();
399
+ }
400
+ callListenersIfChanged();
401
+ }
402
+ },
403
+ );
404
+ };
405
+ const checkpoints = {
406
+ setSize,
407
+ addCheckpoint,
408
+ setCheckpoint,
409
+ getStore,
410
+ getCheckpointIds,
411
+ forEachCheckpoint,
412
+ hasCheckpoint,
413
+ getCheckpoint,
414
+ goBackward,
415
+ goForward,
416
+ goTo,
417
+ addCheckpointIdsListener,
418
+ addCheckpointListener,
419
+ delListener,
420
+ clear,
421
+ clearForward,
422
+ destroy,
423
+ getListenerStats,
424
+ _registerListeners,
425
+ };
426
+ return objFreeze(checkpoints.clear());
427
+ },
428
+ (checkpoints) => checkpoints._registerListeners(),
429
+ );
411
430
 
412
431
  export {createCheckpoints};
@@ -50,9 +50,11 @@ const mapForEach = (map, cb) =>
50
50
  collForEach(map, (value, key) => cb(key, value));
51
51
  const mapSet = (map, key, value) =>
52
52
  isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
53
- const mapEnsure = (map, key, getDefaultValue) => {
53
+ const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
54
54
  if (!collHas(map, key)) {
55
55
  mapSet(map, key, getDefaultValue());
56
+ } else {
57
+ hadExistingValue?.(mapGet(map, key));
56
58
  }
57
59
  return mapGet(map, key);
58
60
  };
@@ -246,13 +248,15 @@ const getRowCellFunction = (getRowCell, defaultCellValue) =>
246
248
  isString(getRowCell)
247
249
  ? (getCell) => getCell(getRowCell)
248
250
  : getRowCell ?? (() => defaultCellValue ?? EMPTY_STRING);
249
- const getCreateFunction = (getFunction) => {
250
- const getFunctionsByStore = /* @__PURE__ */ new WeakMap();
251
+ const getCreateFunction = (getFunction, initFunction) => {
252
+ const thingsByStore = /* @__PURE__ */ new WeakMap();
251
253
  return (store) => {
252
- if (!getFunctionsByStore.has(store)) {
253
- getFunctionsByStore.set(store, getFunction(store));
254
+ if (!thingsByStore.has(store)) {
255
+ thingsByStore.set(store, getFunction(store));
254
256
  }
255
- return getFunctionsByStore.get(store);
257
+ const thing = thingsByStore.get(store);
258
+ initFunction?.(thing);
259
+ return thing;
256
260
  };
257
261
  };
258
262