tinybase 5.0.0-beta.10 → 5.0.0-beta.11

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 (322) 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 -1
  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-yjs.cjs +1 -1
  32. package/lib/cjs/persisters/persister-yjs.cjs.gz +0 -0
  33. package/lib/cjs/persisters.cjs +1 -1
  34. package/lib/cjs/persisters.cjs.gz +0 -0
  35. package/lib/cjs/store.cjs +1 -1
  36. package/lib/cjs/store.cjs.gz +0 -0
  37. package/lib/cjs/synchronizers/synchronizer-local.cjs +1 -1
  38. package/lib/cjs/synchronizers/synchronizer-local.cjs.gz +0 -0
  39. package/lib/cjs/synchronizers/synchronizer-ws-client.cjs +1 -1
  40. package/lib/cjs/synchronizers/synchronizer-ws-client.cjs.gz +0 -0
  41. package/lib/cjs/synchronizers/synchronizer-ws-server.cjs +1 -1
  42. package/lib/cjs/synchronizers/synchronizer-ws-server.cjs.gz +0 -0
  43. package/lib/cjs/synchronizers.cjs +1 -1
  44. package/lib/cjs/synchronizers.cjs.gz +0 -0
  45. package/lib/cjs/tinybase.cjs +1 -1
  46. package/lib/cjs/tinybase.cjs.gz +0 -0
  47. package/lib/cjs/ui-react-dom-debug.cjs +1 -1
  48. package/lib/cjs/ui-react-dom-debug.cjs.gz +0 -0
  49. package/lib/cjs-es6/mergeable-store.cjs +1 -1
  50. package/lib/cjs-es6/mergeable-store.cjs.gz +0 -0
  51. package/lib/cjs-es6/persisters/persister-automerge.cjs +1 -1
  52. package/lib/cjs-es6/persisters/persister-automerge.cjs.gz +0 -0
  53. package/lib/cjs-es6/persisters/persister-browser.cjs +1 -1
  54. package/lib/cjs-es6/persisters/persister-browser.cjs.gz +0 -0
  55. package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs +1 -1
  56. package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs.gz +0 -0
  57. package/lib/cjs-es6/persisters/persister-electric-sql.cjs +1 -1
  58. package/lib/cjs-es6/persisters/persister-electric-sql.cjs.gz +0 -0
  59. package/lib/cjs-es6/persisters/persister-expo-sqlite-next.cjs +1 -1
  60. package/lib/cjs-es6/persisters/persister-expo-sqlite-next.cjs.gz +0 -0
  61. package/lib/cjs-es6/persisters/persister-expo-sqlite.cjs +1 -1
  62. package/lib/cjs-es6/persisters/persister-expo-sqlite.cjs.gz +0 -0
  63. package/lib/cjs-es6/persisters/persister-file.cjs +1 -1
  64. package/lib/cjs-es6/persisters/persister-file.cjs.gz +0 -0
  65. package/lib/cjs-es6/persisters/persister-indexed-db.cjs +1 -1
  66. package/lib/cjs-es6/persisters/persister-indexed-db.cjs.gz +0 -0
  67. package/lib/cjs-es6/persisters/persister-libsql.cjs +1 -1
  68. package/lib/cjs-es6/persisters/persister-libsql.cjs.gz +0 -0
  69. package/lib/cjs-es6/persisters/persister-partykit-client.cjs +1 -1
  70. package/lib/cjs-es6/persisters/persister-partykit-client.cjs.gz +0 -0
  71. package/lib/cjs-es6/persisters/persister-powersync.cjs +1 -1
  72. package/lib/cjs-es6/persisters/persister-powersync.cjs.gz +0 -0
  73. package/lib/cjs-es6/persisters/persister-remote.cjs +1 -1
  74. package/lib/cjs-es6/persisters/persister-remote.cjs.gz +0 -0
  75. package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs +1 -1
  76. package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs.gz +0 -0
  77. package/lib/cjs-es6/persisters/persister-sqlite3.cjs +1 -1
  78. package/lib/cjs-es6/persisters/persister-sqlite3.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/synchronizers/synchronizer-local.cjs +1 -1
  86. package/lib/cjs-es6/synchronizers/synchronizer-local.cjs.gz +0 -0
  87. package/lib/cjs-es6/synchronizers/synchronizer-ws-client.cjs +1 -1
  88. package/lib/cjs-es6/synchronizers/synchronizer-ws-client.cjs.gz +0 -0
  89. package/lib/cjs-es6/synchronizers/synchronizer-ws-server.cjs +1 -1
  90. package/lib/cjs-es6/synchronizers/synchronizer-ws-server.cjs.gz +0 -0
  91. package/lib/cjs-es6/synchronizers.cjs +1 -1
  92. package/lib/cjs-es6/synchronizers.cjs.gz +0 -0
  93. package/lib/cjs-es6/tinybase.cjs +1 -1
  94. package/lib/cjs-es6/tinybase.cjs.gz +0 -0
  95. package/lib/cjs-es6/ui-react-dom-debug.cjs +1 -1
  96. package/lib/cjs-es6/ui-react-dom-debug.cjs.gz +0 -0
  97. package/lib/debug/mergeable-store.js +1 -1
  98. package/lib/debug/persisters/persister-automerge.js +113 -101
  99. package/lib/debug/persisters/persister-browser.js +113 -97
  100. package/lib/debug/persisters/persister-cr-sqlite-wasm.js +113 -102
  101. package/lib/debug/persisters/persister-electric-sql.js +113 -102
  102. package/lib/debug/persisters/persister-expo-sqlite-next.js +113 -102
  103. package/lib/debug/persisters/persister-expo-sqlite.js +113 -102
  104. package/lib/debug/persisters/persister-file.js +108 -96
  105. package/lib/debug/persisters/persister-indexed-db.js +108 -96
  106. package/lib/debug/persisters/persister-libsql.js +113 -102
  107. package/lib/debug/persisters/persister-partykit-client.js +112 -100
  108. package/lib/debug/persisters/persister-powersync.js +113 -102
  109. package/lib/debug/persisters/persister-remote.js +108 -96
  110. package/lib/debug/persisters/persister-sqlite-wasm.js +113 -102
  111. package/lib/debug/persisters/persister-sqlite3.js +113 -102
  112. package/lib/debug/persisters/persister-yjs.js +113 -101
  113. package/lib/debug/persisters.js +107 -95
  114. package/lib/debug/store.js +1 -1
  115. package/lib/debug/synchronizers/synchronizer-local.js +114 -102
  116. package/lib/debug/synchronizers/synchronizer-ws-client.js +113 -101
  117. package/lib/debug/synchronizers/synchronizer-ws-server.js +151 -6
  118. package/lib/debug/synchronizers.js +113 -101
  119. package/lib/debug/tinybase.js +114 -102
  120. package/lib/debug/ui-react-dom.js +114 -98
  121. package/lib/es6/mergeable-store.js +1 -1
  122. package/lib/es6/mergeable-store.js.gz +0 -0
  123. package/lib/es6/persisters/persister-automerge.js +1 -1
  124. package/lib/es6/persisters/persister-automerge.js.gz +0 -0
  125. package/lib/es6/persisters/persister-browser.js +1 -1
  126. package/lib/es6/persisters/persister-browser.js.gz +0 -0
  127. package/lib/es6/persisters/persister-cr-sqlite-wasm.js +1 -1
  128. package/lib/es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  129. package/lib/es6/persisters/persister-electric-sql.js +1 -1
  130. package/lib/es6/persisters/persister-electric-sql.js.gz +0 -0
  131. package/lib/es6/persisters/persister-expo-sqlite-next.js +1 -1
  132. package/lib/es6/persisters/persister-expo-sqlite-next.js.gz +0 -0
  133. package/lib/es6/persisters/persister-expo-sqlite.js +1 -1
  134. package/lib/es6/persisters/persister-expo-sqlite.js.gz +0 -0
  135. package/lib/es6/persisters/persister-file.js +1 -1
  136. package/lib/es6/persisters/persister-file.js.gz +0 -0
  137. package/lib/es6/persisters/persister-indexed-db.js +1 -1
  138. package/lib/es6/persisters/persister-indexed-db.js.gz +0 -0
  139. package/lib/es6/persisters/persister-libsql.js +1 -1
  140. package/lib/es6/persisters/persister-libsql.js.gz +0 -0
  141. package/lib/es6/persisters/persister-partykit-client.js +1 -1
  142. package/lib/es6/persisters/persister-partykit-client.js.gz +0 -0
  143. package/lib/es6/persisters/persister-powersync.js +1 -1
  144. package/lib/es6/persisters/persister-powersync.js.gz +0 -0
  145. package/lib/es6/persisters/persister-remote.js +1 -1
  146. package/lib/es6/persisters/persister-remote.js.gz +0 -0
  147. package/lib/es6/persisters/persister-sqlite-wasm.js +1 -1
  148. package/lib/es6/persisters/persister-sqlite-wasm.js.gz +0 -0
  149. package/lib/es6/persisters/persister-sqlite3.js +1 -1
  150. package/lib/es6/persisters/persister-sqlite3.js.gz +0 -0
  151. package/lib/es6/persisters/persister-yjs.js +1 -1
  152. package/lib/es6/persisters/persister-yjs.js.gz +0 -0
  153. package/lib/es6/persisters.js +1 -1
  154. package/lib/es6/persisters.js.gz +0 -0
  155. package/lib/es6/store.js +1 -1
  156. package/lib/es6/store.js.gz +0 -0
  157. package/lib/es6/synchronizers/synchronizer-local.js +1 -1
  158. package/lib/es6/synchronizers/synchronizer-local.js.gz +0 -0
  159. package/lib/es6/synchronizers/synchronizer-ws-client.js +1 -1
  160. package/lib/es6/synchronizers/synchronizer-ws-client.js.gz +0 -0
  161. package/lib/es6/synchronizers/synchronizer-ws-server.js +1 -1
  162. package/lib/es6/synchronizers/synchronizer-ws-server.js.gz +0 -0
  163. package/lib/es6/synchronizers.js +1 -1
  164. package/lib/es6/synchronizers.js.gz +0 -0
  165. package/lib/es6/tinybase.js +1 -1
  166. package/lib/es6/tinybase.js.gz +0 -0
  167. package/lib/es6/ui-react-dom-debug.js +1 -1
  168. package/lib/es6/ui-react-dom-debug.js.gz +0 -0
  169. package/lib/mergeable-store.js +1 -1
  170. package/lib/mergeable-store.js.gz +0 -0
  171. package/lib/persisters/persister-automerge.js +1 -1
  172. package/lib/persisters/persister-automerge.js.gz +0 -0
  173. package/lib/persisters/persister-browser.js +1 -1
  174. package/lib/persisters/persister-browser.js.gz +0 -0
  175. package/lib/persisters/persister-cr-sqlite-wasm.js +1 -1
  176. package/lib/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  177. package/lib/persisters/persister-electric-sql.js +1 -1
  178. package/lib/persisters/persister-electric-sql.js.gz +0 -0
  179. package/lib/persisters/persister-expo-sqlite-next.js +1 -1
  180. package/lib/persisters/persister-expo-sqlite-next.js.gz +0 -0
  181. package/lib/persisters/persister-expo-sqlite.js +1 -1
  182. package/lib/persisters/persister-expo-sqlite.js.gz +0 -0
  183. package/lib/persisters/persister-file.js +1 -1
  184. package/lib/persisters/persister-file.js.gz +0 -0
  185. package/lib/persisters/persister-indexed-db.js +1 -1
  186. package/lib/persisters/persister-indexed-db.js.gz +0 -0
  187. package/lib/persisters/persister-libsql.js +1 -1
  188. package/lib/persisters/persister-libsql.js.gz +0 -0
  189. package/lib/persisters/persister-partykit-client.js +1 -1
  190. package/lib/persisters/persister-partykit-client.js.gz +0 -0
  191. package/lib/persisters/persister-powersync.js +1 -1
  192. package/lib/persisters/persister-powersync.js.gz +0 -0
  193. package/lib/persisters/persister-remote.js +1 -1
  194. package/lib/persisters/persister-remote.js.gz +0 -0
  195. package/lib/persisters/persister-sqlite-wasm.js +1 -1
  196. package/lib/persisters/persister-sqlite-wasm.js.gz +0 -0
  197. package/lib/persisters/persister-sqlite3.js +1 -1
  198. package/lib/persisters/persister-sqlite3.js.gz +0 -0
  199. package/lib/persisters/persister-yjs.js +1 -1
  200. package/lib/persisters/persister-yjs.js.gz +0 -0
  201. package/lib/persisters.js +1 -1
  202. package/lib/persisters.js.gz +0 -0
  203. package/lib/store.js +1 -1
  204. package/lib/store.js.gz +0 -0
  205. package/lib/synchronizers/synchronizer-local.js +1 -1
  206. package/lib/synchronizers/synchronizer-local.js.gz +0 -0
  207. package/lib/synchronizers/synchronizer-ws-client.js +1 -1
  208. package/lib/synchronizers/synchronizer-ws-client.js.gz +0 -0
  209. package/lib/synchronizers/synchronizer-ws-server.js +1 -1
  210. package/lib/synchronizers/synchronizer-ws-server.js.gz +0 -0
  211. package/lib/synchronizers.js +1 -1
  212. package/lib/synchronizers.js.gz +0 -0
  213. package/lib/tinybase.js +1 -1
  214. package/lib/tinybase.js.gz +0 -0
  215. package/lib/types/persisters/persister-browser.d.ts +2 -2
  216. package/lib/types/persisters/persister-file.d.ts +1 -1
  217. package/lib/types/persisters.d.ts +73 -47
  218. package/lib/types/synchronizers/synchronizer-ws-server.d.ts +24 -3
  219. package/lib/types/synchronizers.d.ts +1 -1
  220. package/lib/types/with-schemas/persisters/persister-browser.d.ts +2 -2
  221. package/lib/types/with-schemas/persisters/persister-file.d.ts +1 -1
  222. package/lib/types/with-schemas/persisters.d.ts +99 -87
  223. package/lib/types/with-schemas/synchronizers/synchronizer-ws-server.d.ts +24 -3
  224. package/lib/types/with-schemas/synchronizers.d.ts +1 -1
  225. package/lib/umd/mergeable-store.js +1 -1
  226. package/lib/umd/mergeable-store.js.gz +0 -0
  227. package/lib/umd/persisters/persister-automerge.js +1 -1
  228. package/lib/umd/persisters/persister-automerge.js.gz +0 -0
  229. package/lib/umd/persisters/persister-browser.js +1 -1
  230. package/lib/umd/persisters/persister-browser.js.gz +0 -0
  231. package/lib/umd/persisters/persister-cr-sqlite-wasm.js +1 -1
  232. package/lib/umd/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  233. package/lib/umd/persisters/persister-electric-sql.js +1 -1
  234. package/lib/umd/persisters/persister-electric-sql.js.gz +0 -0
  235. package/lib/umd/persisters/persister-expo-sqlite-next.js +1 -1
  236. package/lib/umd/persisters/persister-expo-sqlite-next.js.gz +0 -0
  237. package/lib/umd/persisters/persister-expo-sqlite.js +1 -1
  238. package/lib/umd/persisters/persister-expo-sqlite.js.gz +0 -0
  239. package/lib/umd/persisters/persister-file.js +1 -1
  240. package/lib/umd/persisters/persister-file.js.gz +0 -0
  241. package/lib/umd/persisters/persister-indexed-db.js +1 -1
  242. package/lib/umd/persisters/persister-indexed-db.js.gz +0 -0
  243. package/lib/umd/persisters/persister-libsql.js +1 -1
  244. package/lib/umd/persisters/persister-libsql.js.gz +0 -0
  245. package/lib/umd/persisters/persister-partykit-client.js +1 -1
  246. package/lib/umd/persisters/persister-partykit-client.js.gz +0 -0
  247. package/lib/umd/persisters/persister-powersync.js +1 -1
  248. package/lib/umd/persisters/persister-powersync.js.gz +0 -0
  249. package/lib/umd/persisters/persister-remote.js +1 -1
  250. package/lib/umd/persisters/persister-remote.js.gz +0 -0
  251. package/lib/umd/persisters/persister-sqlite-wasm.js +1 -1
  252. package/lib/umd/persisters/persister-sqlite-wasm.js.gz +0 -0
  253. package/lib/umd/persisters/persister-sqlite3.js +1 -1
  254. package/lib/umd/persisters/persister-sqlite3.js.gz +0 -0
  255. package/lib/umd/persisters/persister-yjs.js +1 -1
  256. package/lib/umd/persisters/persister-yjs.js.gz +0 -0
  257. package/lib/umd/persisters.js +1 -1
  258. package/lib/umd/persisters.js.gz +0 -0
  259. package/lib/umd/store.js +1 -1
  260. package/lib/umd/store.js.gz +0 -0
  261. package/lib/umd/synchronizers/synchronizer-local.js +1 -1
  262. package/lib/umd/synchronizers/synchronizer-local.js.gz +0 -0
  263. package/lib/umd/synchronizers/synchronizer-ws-client.js +1 -1
  264. package/lib/umd/synchronizers/synchronizer-ws-client.js.gz +0 -0
  265. package/lib/umd/synchronizers/synchronizer-ws-server.js +1 -1
  266. package/lib/umd/synchronizers/synchronizer-ws-server.js.gz +0 -0
  267. package/lib/umd/synchronizers.js +1 -1
  268. package/lib/umd/synchronizers.js.gz +0 -0
  269. package/lib/umd/tinybase.js +1 -1
  270. package/lib/umd/tinybase.js.gz +0 -0
  271. package/lib/umd/ui-react-dom-debug.js +1 -1
  272. package/lib/umd/ui-react-dom-debug.js.gz +0 -0
  273. package/lib/umd-es6/mergeable-store.js +1 -1
  274. package/lib/umd-es6/mergeable-store.js.gz +0 -0
  275. package/lib/umd-es6/persisters/persister-automerge.js +1 -1
  276. package/lib/umd-es6/persisters/persister-automerge.js.gz +0 -0
  277. package/lib/umd-es6/persisters/persister-browser.js +1 -1
  278. package/lib/umd-es6/persisters/persister-browser.js.gz +0 -0
  279. package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js +1 -1
  280. package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  281. package/lib/umd-es6/persisters/persister-electric-sql.js +1 -1
  282. package/lib/umd-es6/persisters/persister-electric-sql.js.gz +0 -0
  283. package/lib/umd-es6/persisters/persister-expo-sqlite-next.js +1 -1
  284. package/lib/umd-es6/persisters/persister-expo-sqlite-next.js.gz +0 -0
  285. package/lib/umd-es6/persisters/persister-expo-sqlite.js +1 -1
  286. package/lib/umd-es6/persisters/persister-expo-sqlite.js.gz +0 -0
  287. package/lib/umd-es6/persisters/persister-file.js +1 -1
  288. package/lib/umd-es6/persisters/persister-file.js.gz +0 -0
  289. package/lib/umd-es6/persisters/persister-indexed-db.js +1 -1
  290. package/lib/umd-es6/persisters/persister-indexed-db.js.gz +0 -0
  291. package/lib/umd-es6/persisters/persister-libsql.js +1 -1
  292. package/lib/umd-es6/persisters/persister-libsql.js.gz +0 -0
  293. package/lib/umd-es6/persisters/persister-partykit-client.js +1 -1
  294. package/lib/umd-es6/persisters/persister-partykit-client.js.gz +0 -0
  295. package/lib/umd-es6/persisters/persister-powersync.js +1 -1
  296. package/lib/umd-es6/persisters/persister-powersync.js.gz +0 -0
  297. package/lib/umd-es6/persisters/persister-remote.js +1 -1
  298. package/lib/umd-es6/persisters/persister-remote.js.gz +0 -0
  299. package/lib/umd-es6/persisters/persister-sqlite-wasm.js +1 -1
  300. package/lib/umd-es6/persisters/persister-sqlite-wasm.js.gz +0 -0
  301. package/lib/umd-es6/persisters/persister-sqlite3.js +1 -1
  302. package/lib/umd-es6/persisters/persister-sqlite3.js.gz +0 -0
  303. package/lib/umd-es6/persisters/persister-yjs.js +1 -1
  304. package/lib/umd-es6/persisters/persister-yjs.js.gz +0 -0
  305. package/lib/umd-es6/persisters.js +1 -1
  306. package/lib/umd-es6/persisters.js.gz +0 -0
  307. package/lib/umd-es6/store.js +1 -1
  308. package/lib/umd-es6/store.js.gz +0 -0
  309. package/lib/umd-es6/synchronizers/synchronizer-local.js +1 -1
  310. package/lib/umd-es6/synchronizers/synchronizer-local.js.gz +0 -0
  311. package/lib/umd-es6/synchronizers/synchronizer-ws-client.js +1 -1
  312. package/lib/umd-es6/synchronizers/synchronizer-ws-client.js.gz +0 -0
  313. package/lib/umd-es6/synchronizers/synchronizer-ws-server.js +1 -1
  314. package/lib/umd-es6/synchronizers/synchronizer-ws-server.js.gz +0 -0
  315. package/lib/umd-es6/synchronizers.js +1 -1
  316. package/lib/umd-es6/synchronizers.js.gz +0 -0
  317. package/lib/umd-es6/tinybase.js +1 -1
  318. package/lib/umd-es6/tinybase.js.gz +0 -0
  319. package/lib/umd-es6/ui-react-dom-debug.js +1 -1
  320. package/lib/umd-es6/ui-react-dom-debug.js.gz +0 -0
  321. package/package.json +1 -1
  322. package/readme.md +2 -2
@@ -4,9 +4,18 @@ const UTF8 = 'utf8';
4
4
  const isUndefined = (thing) => thing == void 0;
5
5
  const ifNotUndefined = (value, then, otherwise) =>
6
6
  isUndefined(value) ? otherwise?.() : then(value);
7
+ const isArray = (thing) => Array.isArray(thing);
7
8
  const slice = (arrayOrString, start, end) => arrayOrString.slice(start, end);
9
+ const size = (arrayOrString) => arrayOrString.length;
10
+ const test = (regex, subject) => regex.test(subject);
8
11
 
12
+ const arrayForEach = (array, cb) => array.forEach(cb);
9
13
  const arrayReduce = (array, cb, initial) => array.reduce(cb, initial);
14
+ const arrayPush = (array, ...values) => array.push(...values);
15
+ const arrayShift = (array) => array.shift();
16
+
17
+ const object = Object;
18
+ const objFreeze = object.freeze;
10
19
 
11
20
  const collSizeN = (collSizer) => (coll) =>
12
21
  arrayReduce(collValues(coll), (total, coll2) => total + collSizer(coll2), 0);
@@ -34,17 +43,139 @@ const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
34
43
  }
35
44
  return mapGet(map, key);
36
45
  };
46
+ const visitTree = (node, path, ensureLeaf, pruneLeaf, p = 0) =>
47
+ ifNotUndefined(
48
+ (ensureLeaf ? mapEnsure : mapGet)(
49
+ node,
50
+ path[p],
51
+ p > size(path) - 2 ? ensureLeaf : mapNew,
52
+ ),
53
+ (nodeOrLeaf) => {
54
+ if (p > size(path) - 2) {
55
+ if (pruneLeaf?.(nodeOrLeaf)) {
56
+ mapSet(node, path[p]);
57
+ }
58
+ return nodeOrLeaf;
59
+ }
60
+ const leaf = visitTree(nodeOrLeaf, path, ensureLeaf, pruneLeaf, p + 1);
61
+ if (collIsEmpty(nodeOrLeaf)) {
62
+ mapSet(node, path[p]);
63
+ }
64
+ return leaf;
65
+ },
66
+ );
37
67
 
38
68
  const MESSAGE_SEPARATOR = '\n';
39
69
 
70
+ const setNew = (entryOrEntries) =>
71
+ new Set(
72
+ isArray(entryOrEntries) || isUndefined(entryOrEntries)
73
+ ? entryOrEntries
74
+ : [entryOrEntries],
75
+ );
76
+ const setAdd = (set, value) => set?.add(value);
77
+
78
+ const INTEGER = /^\d+$/;
79
+ const getPoolFunctions = () => {
80
+ const pool = [];
81
+ let nextId = 0;
82
+ return [
83
+ (reuse) => (reuse ? arrayShift(pool) : null) ?? EMPTY_STRING + nextId++,
84
+ (id) => {
85
+ if (test(INTEGER, id) && size(pool) < 1e3) {
86
+ arrayPush(pool, id);
87
+ }
88
+ },
89
+ ];
90
+ };
91
+
92
+ const getWildcardedLeaves = (deepIdSet, path = [EMPTY_STRING]) => {
93
+ const leaves = [];
94
+ const deep = (node, p) =>
95
+ p == size(path)
96
+ ? arrayPush(leaves, node)
97
+ : path[p] === null
98
+ ? collForEach(node, (node2) => deep(node2, p + 1))
99
+ : arrayForEach([path[p], null], (id) => deep(mapGet(node, id), p + 1));
100
+ deep(deepIdSet, 0);
101
+ return leaves;
102
+ };
103
+ const getListenerFunctions = (getThing) => {
104
+ let thing;
105
+ const [getId, releaseId] = getPoolFunctions();
106
+ const allListeners = mapNew();
107
+ const addListener = (
108
+ listener,
109
+ idSetNode,
110
+ path,
111
+ pathGetters = [],
112
+ extraArgsGetter = () => [],
113
+ ) => {
114
+ thing ??= getThing();
115
+ const id = getId(1);
116
+ mapSet(allListeners, id, [
117
+ listener,
118
+ idSetNode,
119
+ path,
120
+ pathGetters,
121
+ extraArgsGetter,
122
+ ]);
123
+ setAdd(visitTree(idSetNode, path ?? [EMPTY_STRING], setNew), id);
124
+ return id;
125
+ };
126
+ const callListeners = (idSetNode, ids, ...extraArgs) =>
127
+ arrayForEach(getWildcardedLeaves(idSetNode, ids), (set) =>
128
+ collForEach(set, (id) =>
129
+ mapGet(allListeners, id)[0](thing, ...(ids ?? []), ...extraArgs),
130
+ ),
131
+ );
132
+ const delListener = (id) =>
133
+ ifNotUndefined(mapGet(allListeners, id), ([, idSetNode, idOrNulls]) => {
134
+ visitTree(idSetNode, idOrNulls ?? [EMPTY_STRING], void 0, (idSet) => {
135
+ collDel(idSet, id);
136
+ return collIsEmpty(idSet) ? 1 : 0;
137
+ });
138
+ mapSet(allListeners, id);
139
+ releaseId(id);
140
+ return idOrNulls;
141
+ });
142
+ const callListener = (id) =>
143
+ ifNotUndefined(
144
+ mapGet(allListeners, id),
145
+ ([listener, , path = [], pathGetters, extraArgsGetter]) => {
146
+ const callWithIds = (...ids) => {
147
+ const index = size(ids);
148
+ index == size(path)
149
+ ? listener(thing, ...ids, ...extraArgsGetter(ids))
150
+ : isUndefined(path[index])
151
+ ? arrayForEach(pathGetters[index]?.(...ids) ?? [], (id2) =>
152
+ callWithIds(...ids, id2),
153
+ )
154
+ : callWithIds(...ids, path[index]);
155
+ };
156
+ callWithIds();
157
+ },
158
+ );
159
+ return [addListener, callListeners, delListener, callListener];
160
+ };
161
+
40
162
  const PATH_REGEX = /\/([^?]*)/;
41
163
  const createWsServer = (webSocketServer) => {
164
+ const pathIdListeners = mapNew();
165
+ const clientIdListeners = mapNew();
42
166
  const clientsByPath = mapNew();
167
+ const [addListener, callListeners, delListenerImpl] = getListenerFunctions(
168
+ () => wsServer,
169
+ );
43
170
  webSocketServer.on('connection', (webSocket, request) =>
44
- ifNotUndefined(request.url?.match(PATH_REGEX), ([path]) =>
171
+ ifNotUndefined(request.url?.match(PATH_REGEX), ([, pathId]) =>
45
172
  ifNotUndefined(request.headers['sec-websocket-key'], (clientId) => {
46
- const clients = mapEnsure(clientsByPath, path, mapNew);
173
+ const clients = mapEnsure(clientsByPath, pathId, mapNew);
47
174
  mapSet(clients, clientId, webSocket);
175
+ if (clients.size == 1) {
176
+ callListeners(pathIdListeners, void 0, () => ({[pathId]: 1}));
177
+ }
178
+ callListeners(clientIdListeners, [pathId], () => ({[clientId]: 1}));
48
179
  webSocket.on('message', (data) => {
49
180
  const payload = data.toString(UTF8);
50
181
  const splitAt = payload.indexOf(MESSAGE_SEPARATOR);
@@ -66,16 +197,26 @@ const createWsServer = (webSocketServer) => {
66
197
  });
67
198
  webSocket.on('close', () => {
68
199
  collDel(clients, clientId);
200
+ callListeners(clientIdListeners, [pathId], () => ({[clientId]: -1}));
69
201
  if (collIsEmpty(clients)) {
70
- collDel(clientsByPath, path);
202
+ collDel(clientsByPath, pathId);
203
+ callListeners(pathIdListeners, void 0, () => ({[pathId]: -1}));
71
204
  }
72
205
  });
73
206
  }),
74
207
  ),
75
208
  );
76
209
  const getWebSocketServer = () => webSocketServer;
77
- const getPaths = () => mapKeys(clientsByPath);
210
+ const getPathIds = () => mapKeys(clientsByPath);
78
211
  const getClientIds = (path) => mapKeys(mapGet(clientsByPath, path));
212
+ const addPathIdsListener = (listener) =>
213
+ addListener(listener, pathIdListeners);
214
+ const addClientIdsListener = (pathId, listener) =>
215
+ addListener(listener, clientIdListeners, [pathId]);
216
+ const delListener = (listenerId) => {
217
+ delListenerImpl(listenerId);
218
+ return wsServer;
219
+ };
79
220
  const getStats = () => ({
80
221
  paths: collSize(clientsByPath),
81
222
  clients: collSize2(clientsByPath),
@@ -84,13 +225,17 @@ const createWsServer = (webSocketServer) => {
84
225
  webSocketServer.close();
85
226
  collClear(clientsByPath);
86
227
  };
87
- return {
228
+ const wsServer = {
88
229
  getWebSocketServer,
89
- getPaths,
230
+ getPathIds,
90
231
  getClientIds,
232
+ addPathIdsListener,
233
+ addClientIdsListener,
234
+ delListener,
91
235
  getStats,
92
236
  destroy,
93
237
  };
238
+ return objFreeze(wsServer);
94
239
  };
95
240
 
96
241
  export {createWsServer};
@@ -76,24 +76,27 @@ const stampNewObj = (time = EMPTY_STRING) => newStamp(objNew(), time);
76
76
 
77
77
  const scheduleRunning = mapNew();
78
78
  const scheduleActions = mapNew();
79
- const getStoreFunctions = (supportsMergeableStore, store) =>
80
- !supportsMergeableStore || isUndefined(store.getMergeableContent)
79
+ const getStoreFunctions = (supportedStoreType = 1, store) =>
80
+ supportedStoreType > 1 && 'getMergeableContent' in store
81
81
  ? [
82
- 0,
83
- store.getContent,
84
- store.getTransactionChanges,
85
- ([changedTables, changedValues]) =>
86
- !objIsEmpty(changedTables) || !objIsEmpty(changedValues),
87
- store.setContent,
88
- ]
89
- : [
90
82
  1,
91
83
  store.getMergeableContent,
92
84
  store.getTransactionMergeableChanges,
93
85
  ([[changedTables], [changedValues]]) =>
94
86
  !objIsEmpty(changedTables) || !objIsEmpty(changedValues),
95
87
  store.setDefaultContent,
96
- ];
88
+ ]
89
+ : supportedStoreType != 2
90
+ ? [
91
+ 0,
92
+ store.getContent,
93
+ store.getTransactionChanges,
94
+ ([changedTables, changedValues]) =>
95
+ !objIsEmpty(changedTables) || !objIsEmpty(changedValues),
96
+ store.setContent,
97
+ ]
98
+ : /* istanbul ignore next */
99
+ 0;
97
100
  const createCustomPersister = (
98
101
  store,
99
102
  getPersisted,
@@ -101,7 +104,7 @@ const createCustomPersister = (
101
104
  addPersisterListener,
102
105
  delPersisterListener,
103
106
  onIgnoredError,
104
- supportsMergeableStore,
107
+ supportedStoreType,
105
108
  extra = {},
106
109
  scheduleId = [],
107
110
  ) => {
@@ -119,7 +122,7 @@ const createCustomPersister = (
119
122
  getChanges,
120
123
  hasChanges,
121
124
  setDefaultContent,
122
- ] = getStoreFunctions(supportsMergeableStore, store);
125
+ ] = getStoreFunctions(supportedStoreType, store);
123
126
  const run = async () => {
124
127
  /* istanbul ignore else */
125
128
  if (!mapGet(scheduleRunning, scheduleId)) {
@@ -137,20 +140,6 @@ const createCustomPersister = (
137
140
  mapSet(scheduleRunning, scheduleId, 0);
138
141
  }
139
142
  };
140
- const loadLock = async (actions) => {
141
- /* istanbul ignore else */
142
- if (loadSave != 2) {
143
- loadSave = 1;
144
- {
145
- loads++;
146
- }
147
- await persister.schedule(async () => {
148
- await actions();
149
- loadSave = 0;
150
- });
151
- }
152
- return persister;
153
- };
154
143
  const setContentOrChanges = (contentOrChanges) => {
155
144
  (isMergeableStore && isArray(contentOrChanges?.[0])
156
145
  ? contentOrChanges?.[2] === 1
@@ -160,9 +149,14 @@ const createCustomPersister = (
160
149
  ? store.applyChanges
161
150
  : store.setContent)(contentOrChanges);
162
151
  };
163
- const persister = {
164
- load: async (initialContent) =>
165
- await loadLock(async () => {
152
+ const load = async (initialContent) => {
153
+ /* istanbul ignore else */
154
+ if (loadSave != 2) {
155
+ loadSave = 1;
156
+ {
157
+ loads++;
158
+ }
159
+ await schedule(async () => {
166
160
  try {
167
161
  setContentOrChanges(await getPersisted());
168
162
  } catch (error) {
@@ -171,76 +165,94 @@ const createCustomPersister = (
171
165
  setDefaultContent(initialContent);
172
166
  }
173
167
  }
174
- }),
175
- startAutoLoad: async (initialContent) => {
176
- await persister.stopAutoLoad().load(initialContent);
177
- autoLoadHandle = addPersisterListener(
178
- async (getContent2, getChanges2) => {
179
- const changes = getChanges2?.();
180
- await loadLock(async () => {
181
- try {
182
- setContentOrChanges(
183
- changes ?? getContent2?.() ?? (await getPersisted()),
184
- );
185
- } catch (error) {
186
- onIgnoredError?.(error);
187
- }
188
- });
189
- },
190
- );
191
- return persister;
192
- },
193
- stopAutoLoad: () => {
194
- if (autoLoadHandle) {
195
- delPersisterListener(autoLoadHandle);
196
- autoLoadHandle = void 0;
197
- }
198
- return persister;
199
- },
200
- isAutoLoading: () => !isUndefined(autoLoadHandle),
201
- save: async (getChanges2) => {
202
- /* istanbul ignore else */
203
- if (loadSave != 1) {
204
- loadSave = 2;
205
- {
206
- saves++;
207
- }
208
- await persister.schedule(async () => {
209
- try {
210
- await setPersisted(getContent, getChanges2);
211
- } catch (error) {
212
- /* istanbul ignore next */
213
- onIgnoredError?.(error);
168
+ loadSave = 0;
169
+ });
170
+ }
171
+ return persister;
172
+ };
173
+ const startAutoLoad = async (initialContent) => {
174
+ await stopAutoLoad().load(initialContent);
175
+ autoLoadHandle = addPersisterListener(async (content, changes) => {
176
+ if (changes || content) {
177
+ /* istanbul ignore else */
178
+ if (loadSave != 2) {
179
+ loadSave = 1;
180
+ {
181
+ loads++;
214
182
  }
183
+ setContentOrChanges(changes ?? content);
215
184
  loadSave = 0;
216
- });
185
+ }
186
+ } else {
187
+ await load();
217
188
  }
218
- return persister;
219
- },
220
- startAutoSave: async () => {
221
- await persister.stopAutoSave().save();
222
- autoSaveListenerId = store.addDidFinishTransactionListener(() => {
223
- const changes = getChanges();
224
- if (hasChanges(changes)) {
225
- persister.save(() => changes);
189
+ });
190
+ return persister;
191
+ };
192
+ const stopAutoLoad = () => {
193
+ if (autoLoadHandle) {
194
+ delPersisterListener(autoLoadHandle);
195
+ autoLoadHandle = void 0;
196
+ }
197
+ return persister;
198
+ };
199
+ const isAutoLoading = () => !isUndefined(autoLoadHandle);
200
+ const save = async (changes) => {
201
+ /* istanbul ignore else */
202
+ if (loadSave != 1) {
203
+ loadSave = 2;
204
+ {
205
+ saves++;
206
+ }
207
+ await schedule(async () => {
208
+ try {
209
+ await setPersisted(getContent, changes);
210
+ } catch (error) {
211
+ /* istanbul ignore next */
212
+ onIgnoredError?.(error);
226
213
  }
214
+ loadSave = 0;
227
215
  });
228
- return persister;
229
- },
230
- stopAutoSave: () => {
231
- ifNotUndefined(autoSaveListenerId, store.delListener);
232
- autoSaveListenerId = void 0;
233
- return persister;
234
- },
235
- isAutoSaving: () => !isUndefined(autoSaveListenerId),
236
- schedule: async (...actions) => {
237
- arrayPush(mapGet(scheduleActions, scheduleId), ...actions);
238
- await run();
239
- return persister;
240
- },
241
- getStore: () => store,
242
- destroy: () => persister.stopAutoLoad().stopAutoSave(),
243
- getStats: () => ({loads, saves}),
216
+ }
217
+ return persister;
218
+ };
219
+ const startAutoSave = async () => {
220
+ await stopAutoSave().save();
221
+ autoSaveListenerId = store.addDidFinishTransactionListener(() => {
222
+ const changes = getChanges();
223
+ if (hasChanges(changes)) {
224
+ save(changes);
225
+ }
226
+ });
227
+ return persister;
228
+ };
229
+ const stopAutoSave = () => {
230
+ ifNotUndefined(autoSaveListenerId, store.delListener);
231
+ autoSaveListenerId = void 0;
232
+ return persister;
233
+ };
234
+ const isAutoSaving = () => !isUndefined(autoSaveListenerId);
235
+ const schedule = async (...actions) => {
236
+ arrayPush(mapGet(scheduleActions, scheduleId), ...actions);
237
+ await run();
238
+ return persister;
239
+ };
240
+ const getStore = () => store;
241
+ const destroy = () => stopAutoLoad().stopAutoSave();
242
+ const getStats = () => ({loads, saves});
243
+ const persister = {
244
+ load,
245
+ startAutoLoad,
246
+ stopAutoLoad,
247
+ isAutoLoading,
248
+ save,
249
+ startAutoSave,
250
+ stopAutoSave,
251
+ isAutoSaving,
252
+ schedule,
253
+ getStore,
254
+ destroy,
255
+ getStats,
244
256
  ...extra,
245
257
  };
246
258
  return objFreeze(persister);
@@ -356,10 +368,10 @@ const createCustomSynchronizer = (
356
368
  );
357
369
  } else if (messageType == CONTENT_HASHES && persister.isAutoLoading()) {
358
370
  getChangesFromOtherStore(fromClientId, messageBody).then((changes) => {
359
- persisterListener?.(void 0, () => changes);
371
+ persisterListener?.(void 0, changes);
360
372
  });
361
373
  } else if (messageType == CONTENT_DIFF && persister.isAutoLoading()) {
362
- persisterListener?.(void 0, () => messageBody);
374
+ persisterListener?.(void 0, messageBody);
363
375
  } else {
364
376
  ifNotUndefined(
365
377
  messageType == GET_CONTENT_HASHES && persister.isAutoSaving()
@@ -483,12 +495,12 @@ const createCustomSynchronizer = (
483
495
  ? changes
484
496
  : void 0;
485
497
  };
486
- const setPersisted = async (getContent, getChanges) => {
498
+ const setPersisted = async (_getContent, changes) => {
487
499
  {
488
500
  sends++;
489
501
  }
490
- if (getChanges) {
491
- send(null, null, CONTENT_DIFF, getChanges());
502
+ if (changes) {
503
+ send(null, null, CONTENT_DIFF, changes);
492
504
  } else {
493
505
  send(null, null, CONTENT_HASHES, store.getMergeableContentHashes());
494
506
  }
@@ -510,7 +522,7 @@ const createCustomSynchronizer = (
510
522
  addPersisterListener,
511
523
  delPersisterListener,
512
524
  onIgnoredError,
513
- true,
525
+ 2,
514
526
  {startSync, stopSync, destroy, getSynchronizerStats, ...extra},
515
527
  );
516
528
  return persister;