tinybase 5.0.0-beta.12 → 5.0.0-beta.14

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 (452) hide show
  1. package/lib/cjs/common.cjs +1 -1
  2. package/lib/cjs/common.cjs.gz +0 -0
  3. package/lib/cjs/indexes.cjs +1 -1
  4. package/lib/cjs/indexes.cjs.gz +0 -0
  5. package/lib/cjs/mergeable-store.cjs +1 -1
  6. package/lib/cjs/mergeable-store.cjs.gz +0 -0
  7. package/lib/cjs/metrics.cjs +1 -1
  8. package/lib/cjs/metrics.cjs.gz +0 -0
  9. package/lib/cjs/persisters/persister-automerge.cjs +1 -1
  10. package/lib/cjs/persisters/persister-automerge.cjs.gz +0 -0
  11. package/lib/cjs/persisters/persister-browser.cjs +1 -1
  12. package/lib/cjs/persisters/persister-browser.cjs.gz +0 -0
  13. package/lib/cjs/persisters/persister-cr-sqlite-wasm.cjs +1 -1
  14. package/lib/cjs/persisters/persister-cr-sqlite-wasm.cjs.gz +0 -0
  15. package/lib/cjs/persisters/persister-electric-sql.cjs +1 -1
  16. package/lib/cjs/persisters/persister-electric-sql.cjs.gz +0 -0
  17. package/lib/cjs/persisters/persister-expo-sqlite-next.cjs +1 -1
  18. package/lib/cjs/persisters/persister-expo-sqlite-next.cjs.gz +0 -0
  19. package/lib/cjs/persisters/persister-expo-sqlite.cjs +1 -1
  20. package/lib/cjs/persisters/persister-expo-sqlite.cjs.gz +0 -0
  21. package/lib/cjs/persisters/persister-file.cjs +1 -1
  22. package/lib/cjs/persisters/persister-file.cjs.gz +0 -0
  23. package/lib/cjs/persisters/persister-indexed-db.cjs +1 -1
  24. package/lib/cjs/persisters/persister-indexed-db.cjs.gz +0 -0
  25. package/lib/cjs/persisters/persister-libsql.cjs +1 -1
  26. package/lib/cjs/persisters/persister-libsql.cjs.gz +0 -0
  27. package/lib/cjs/persisters/persister-partykit-client.cjs +1 -1
  28. package/lib/cjs/persisters/persister-partykit-client.cjs.gz +0 -0
  29. package/lib/cjs/persisters/persister-powersync.cjs +1 -1
  30. package/lib/cjs/persisters/persister-powersync.cjs.gz +0 -0
  31. package/lib/cjs/persisters/persister-remote.cjs +1 -1
  32. package/lib/cjs/persisters/persister-remote.cjs.gz +0 -0
  33. package/lib/cjs/persisters/persister-sqlite-wasm.cjs +1 -1
  34. package/lib/cjs/persisters/persister-sqlite-wasm.cjs.gz +0 -0
  35. package/lib/cjs/persisters/persister-sqlite3.cjs +1 -1
  36. package/lib/cjs/persisters/persister-sqlite3.cjs.gz +0 -0
  37. package/lib/cjs/persisters/persister-yjs.cjs +1 -1
  38. package/lib/cjs/persisters/persister-yjs.cjs.gz +0 -0
  39. package/lib/cjs/persisters.cjs +1 -1
  40. package/lib/cjs/persisters.cjs.gz +0 -0
  41. package/lib/cjs/queries.cjs +1 -1
  42. package/lib/cjs/queries.cjs.gz +0 -0
  43. package/lib/cjs/relationships.cjs +1 -1
  44. package/lib/cjs/relationships.cjs.gz +0 -0
  45. package/lib/cjs/store.cjs +1 -1
  46. package/lib/cjs/store.cjs.gz +0 -0
  47. package/lib/cjs/synchronizers/synchronizer-local.cjs +1 -1
  48. package/lib/cjs/synchronizers/synchronizer-local.cjs.gz +0 -0
  49. package/lib/cjs/synchronizers/synchronizer-ws-client.cjs +1 -1
  50. package/lib/cjs/synchronizers/synchronizer-ws-client.cjs.gz +0 -0
  51. package/lib/cjs/synchronizers.cjs +1 -1
  52. package/lib/cjs/synchronizers.cjs.gz +0 -0
  53. package/lib/cjs/tinybase.cjs +1 -1
  54. package/lib/cjs/tinybase.cjs.gz +0 -0
  55. package/lib/cjs/tools.cjs +1 -1
  56. package/lib/cjs/tools.cjs.gz +0 -0
  57. package/lib/cjs/ui-react-dom-debug.cjs +1 -1
  58. package/lib/cjs/ui-react-dom-debug.cjs.gz +0 -0
  59. package/lib/cjs/ui-react-dom.cjs +1 -1
  60. package/lib/cjs/ui-react-dom.cjs.gz +0 -0
  61. package/lib/cjs-es6/checkpoints.cjs +1 -1
  62. package/lib/cjs-es6/checkpoints.cjs.gz +0 -0
  63. package/lib/cjs-es6/common.cjs +1 -1
  64. package/lib/cjs-es6/common.cjs.gz +0 -0
  65. package/lib/cjs-es6/indexes.cjs +1 -1
  66. package/lib/cjs-es6/indexes.cjs.gz +0 -0
  67. package/lib/cjs-es6/mergeable-store.cjs +1 -1
  68. package/lib/cjs-es6/mergeable-store.cjs.gz +0 -0
  69. package/lib/cjs-es6/metrics.cjs +1 -1
  70. package/lib/cjs-es6/metrics.cjs.gz +0 -0
  71. package/lib/cjs-es6/persisters/persister-automerge.cjs +1 -1
  72. package/lib/cjs-es6/persisters/persister-automerge.cjs.gz +0 -0
  73. package/lib/cjs-es6/persisters/persister-browser.cjs +1 -1
  74. package/lib/cjs-es6/persisters/persister-browser.cjs.gz +0 -0
  75. package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs +1 -1
  76. package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs.gz +0 -0
  77. package/lib/cjs-es6/persisters/persister-electric-sql.cjs +1 -1
  78. package/lib/cjs-es6/persisters/persister-electric-sql.cjs.gz +0 -0
  79. package/lib/cjs-es6/persisters/persister-expo-sqlite-next.cjs +1 -1
  80. package/lib/cjs-es6/persisters/persister-expo-sqlite-next.cjs.gz +0 -0
  81. package/lib/cjs-es6/persisters/persister-expo-sqlite.cjs +1 -1
  82. package/lib/cjs-es6/persisters/persister-expo-sqlite.cjs.gz +0 -0
  83. package/lib/cjs-es6/persisters/persister-file.cjs +1 -1
  84. package/lib/cjs-es6/persisters/persister-file.cjs.gz +0 -0
  85. package/lib/cjs-es6/persisters/persister-indexed-db.cjs +1 -1
  86. package/lib/cjs-es6/persisters/persister-indexed-db.cjs.gz +0 -0
  87. package/lib/cjs-es6/persisters/persister-libsql.cjs +1 -1
  88. package/lib/cjs-es6/persisters/persister-libsql.cjs.gz +0 -0
  89. package/lib/cjs-es6/persisters/persister-partykit-client.cjs +1 -1
  90. package/lib/cjs-es6/persisters/persister-partykit-client.cjs.gz +0 -0
  91. package/lib/cjs-es6/persisters/persister-powersync.cjs +1 -1
  92. package/lib/cjs-es6/persisters/persister-powersync.cjs.gz +0 -0
  93. package/lib/cjs-es6/persisters/persister-remote.cjs +1 -1
  94. package/lib/cjs-es6/persisters/persister-remote.cjs.gz +0 -0
  95. package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs +1 -1
  96. package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs.gz +0 -0
  97. package/lib/cjs-es6/persisters/persister-sqlite3.cjs +1 -1
  98. package/lib/cjs-es6/persisters/persister-sqlite3.cjs.gz +0 -0
  99. package/lib/cjs-es6/persisters/persister-yjs.cjs +1 -1
  100. package/lib/cjs-es6/persisters/persister-yjs.cjs.gz +0 -0
  101. package/lib/cjs-es6/persisters.cjs +1 -1
  102. package/lib/cjs-es6/persisters.cjs.gz +0 -0
  103. package/lib/cjs-es6/queries.cjs +1 -1
  104. package/lib/cjs-es6/queries.cjs.gz +0 -0
  105. package/lib/cjs-es6/relationships.cjs +1 -1
  106. package/lib/cjs-es6/relationships.cjs.gz +0 -0
  107. package/lib/cjs-es6/store.cjs +1 -1
  108. package/lib/cjs-es6/store.cjs.gz +0 -0
  109. package/lib/cjs-es6/synchronizers/synchronizer-local.cjs +1 -1
  110. package/lib/cjs-es6/synchronizers/synchronizer-local.cjs.gz +0 -0
  111. package/lib/cjs-es6/synchronizers/synchronizer-ws-client.cjs +1 -1
  112. package/lib/cjs-es6/synchronizers/synchronizer-ws-client.cjs.gz +0 -0
  113. package/lib/cjs-es6/synchronizers.cjs +1 -1
  114. package/lib/cjs-es6/synchronizers.cjs.gz +0 -0
  115. package/lib/cjs-es6/tinybase.cjs +1 -1
  116. package/lib/cjs-es6/tinybase.cjs.gz +0 -0
  117. package/lib/cjs-es6/tools.cjs +1 -1
  118. package/lib/cjs-es6/tools.cjs.gz +0 -0
  119. package/lib/cjs-es6/ui-react-dom-debug.cjs +1 -1
  120. package/lib/cjs-es6/ui-react-dom-debug.cjs.gz +0 -0
  121. package/lib/cjs-es6/ui-react-dom.cjs +1 -1
  122. package/lib/cjs-es6/ui-react-dom.cjs.gz +0 -0
  123. package/lib/common.js +1 -1
  124. package/lib/common.js.gz +0 -0
  125. package/lib/debug/common.js +22 -1
  126. package/lib/debug/indexes.js +6 -1
  127. package/lib/debug/mergeable-store.js +57 -45
  128. package/lib/debug/metrics.js +0 -1
  129. package/lib/debug/persisters/persister-automerge.js +1 -3
  130. package/lib/debug/persisters/persister-browser.js +1 -3
  131. package/lib/debug/persisters/persister-cr-sqlite-wasm.js +24 -30
  132. package/lib/debug/persisters/persister-electric-sql.js +24 -30
  133. package/lib/debug/persisters/persister-expo-sqlite-next.js +24 -30
  134. package/lib/debug/persisters/persister-expo-sqlite.js +24 -30
  135. package/lib/debug/persisters/persister-file.js +1 -3
  136. package/lib/debug/persisters/persister-indexed-db.js +1 -4
  137. package/lib/debug/persisters/persister-libsql.js +24 -30
  138. package/lib/debug/persisters/persister-partykit-client.js +1 -3
  139. package/lib/debug/persisters/persister-powersync.js +24 -30
  140. package/lib/debug/persisters/persister-remote.js +1 -4
  141. package/lib/debug/persisters/persister-sqlite-wasm.js +24 -30
  142. package/lib/debug/persisters/persister-sqlite3.js +24 -30
  143. package/lib/debug/persisters/persister-yjs.js +1 -3
  144. package/lib/debug/persisters.js +1 -3
  145. package/lib/debug/queries.js +0 -1
  146. package/lib/debug/relationships.js +0 -1
  147. package/lib/debug/store.js +6 -0
  148. package/lib/debug/synchronizers/synchronizer-local.js +19 -89
  149. package/lib/debug/synchronizers/synchronizer-ws-client.js +18 -88
  150. package/lib/debug/synchronizers.js +18 -88
  151. package/lib/debug/tinybase.js +93 -81
  152. package/lib/debug/tools.js +0 -3
  153. package/lib/debug/ui-react-dom.js +13 -11
  154. package/lib/es6/checkpoints.js +1 -1
  155. package/lib/es6/checkpoints.js.gz +0 -0
  156. package/lib/es6/common.js +1 -1
  157. package/lib/es6/common.js.gz +0 -0
  158. package/lib/es6/indexes.js +1 -1
  159. package/lib/es6/indexes.js.gz +0 -0
  160. package/lib/es6/mergeable-store.js +1 -1
  161. package/lib/es6/mergeable-store.js.gz +0 -0
  162. package/lib/es6/metrics.js +1 -1
  163. package/lib/es6/metrics.js.gz +0 -0
  164. package/lib/es6/persisters/persister-automerge.js +1 -1
  165. package/lib/es6/persisters/persister-automerge.js.gz +0 -0
  166. package/lib/es6/persisters/persister-browser.js +1 -1
  167. package/lib/es6/persisters/persister-browser.js.gz +0 -0
  168. package/lib/es6/persisters/persister-cr-sqlite-wasm.js +1 -1
  169. package/lib/es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  170. package/lib/es6/persisters/persister-electric-sql.js +1 -1
  171. package/lib/es6/persisters/persister-electric-sql.js.gz +0 -0
  172. package/lib/es6/persisters/persister-expo-sqlite-next.js +1 -1
  173. package/lib/es6/persisters/persister-expo-sqlite-next.js.gz +0 -0
  174. package/lib/es6/persisters/persister-expo-sqlite.js +1 -1
  175. package/lib/es6/persisters/persister-expo-sqlite.js.gz +0 -0
  176. package/lib/es6/persisters/persister-file.js +1 -1
  177. package/lib/es6/persisters/persister-file.js.gz +0 -0
  178. package/lib/es6/persisters/persister-indexed-db.js +1 -1
  179. package/lib/es6/persisters/persister-indexed-db.js.gz +0 -0
  180. package/lib/es6/persisters/persister-libsql.js +1 -1
  181. package/lib/es6/persisters/persister-libsql.js.gz +0 -0
  182. package/lib/es6/persisters/persister-partykit-client.js +1 -1
  183. package/lib/es6/persisters/persister-partykit-client.js.gz +0 -0
  184. package/lib/es6/persisters/persister-powersync.js +1 -1
  185. package/lib/es6/persisters/persister-powersync.js.gz +0 -0
  186. package/lib/es6/persisters/persister-remote.js +1 -1
  187. package/lib/es6/persisters/persister-remote.js.gz +0 -0
  188. package/lib/es6/persisters/persister-sqlite-wasm.js +1 -1
  189. package/lib/es6/persisters/persister-sqlite-wasm.js.gz +0 -0
  190. package/lib/es6/persisters/persister-sqlite3.js +1 -1
  191. package/lib/es6/persisters/persister-sqlite3.js.gz +0 -0
  192. package/lib/es6/persisters/persister-yjs.js +1 -1
  193. package/lib/es6/persisters/persister-yjs.js.gz +0 -0
  194. package/lib/es6/persisters.js +1 -1
  195. package/lib/es6/persisters.js.gz +0 -0
  196. package/lib/es6/queries.js +1 -1
  197. package/lib/es6/queries.js.gz +0 -0
  198. package/lib/es6/relationships.js +1 -1
  199. package/lib/es6/relationships.js.gz +0 -0
  200. package/lib/es6/store.js +1 -1
  201. package/lib/es6/store.js.gz +0 -0
  202. package/lib/es6/synchronizers/synchronizer-local.js +1 -1
  203. package/lib/es6/synchronizers/synchronizer-local.js.gz +0 -0
  204. package/lib/es6/synchronizers/synchronizer-ws-client.js +1 -1
  205. package/lib/es6/synchronizers/synchronizer-ws-client.js.gz +0 -0
  206. package/lib/es6/synchronizers.js +1 -1
  207. package/lib/es6/synchronizers.js.gz +0 -0
  208. package/lib/es6/tinybase.js +1 -1
  209. package/lib/es6/tinybase.js.gz +0 -0
  210. package/lib/es6/tools.js +1 -1
  211. package/lib/es6/tools.js.gz +0 -0
  212. package/lib/es6/ui-react-dom-debug.js +1 -1
  213. package/lib/es6/ui-react-dom-debug.js.gz +0 -0
  214. package/lib/es6/ui-react-dom.js +1 -1
  215. package/lib/es6/ui-react-dom.js.gz +0 -0
  216. package/lib/indexes.js +1 -1
  217. package/lib/indexes.js.gz +0 -0
  218. package/lib/mergeable-store.js +1 -1
  219. package/lib/mergeable-store.js.gz +0 -0
  220. package/lib/metrics.js +1 -1
  221. package/lib/metrics.js.gz +0 -0
  222. package/lib/persisters/persister-automerge.js +1 -1
  223. package/lib/persisters/persister-automerge.js.gz +0 -0
  224. package/lib/persisters/persister-browser.js +1 -1
  225. package/lib/persisters/persister-browser.js.gz +0 -0
  226. package/lib/persisters/persister-cr-sqlite-wasm.js +1 -1
  227. package/lib/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  228. package/lib/persisters/persister-electric-sql.js +1 -1
  229. package/lib/persisters/persister-electric-sql.js.gz +0 -0
  230. package/lib/persisters/persister-expo-sqlite-next.js +1 -1
  231. package/lib/persisters/persister-expo-sqlite-next.js.gz +0 -0
  232. package/lib/persisters/persister-expo-sqlite.js +1 -1
  233. package/lib/persisters/persister-expo-sqlite.js.gz +0 -0
  234. package/lib/persisters/persister-file.js +1 -1
  235. package/lib/persisters/persister-file.js.gz +0 -0
  236. package/lib/persisters/persister-indexed-db.js +1 -1
  237. package/lib/persisters/persister-indexed-db.js.gz +0 -0
  238. package/lib/persisters/persister-libsql.js +1 -1
  239. package/lib/persisters/persister-libsql.js.gz +0 -0
  240. package/lib/persisters/persister-partykit-client.js +1 -1
  241. package/lib/persisters/persister-partykit-client.js.gz +0 -0
  242. package/lib/persisters/persister-powersync.js +1 -1
  243. package/lib/persisters/persister-powersync.js.gz +0 -0
  244. package/lib/persisters/persister-remote.js +1 -1
  245. package/lib/persisters/persister-remote.js.gz +0 -0
  246. package/lib/persisters/persister-sqlite-wasm.js +1 -1
  247. package/lib/persisters/persister-sqlite-wasm.js.gz +0 -0
  248. package/lib/persisters/persister-sqlite3.js +1 -1
  249. package/lib/persisters/persister-sqlite3.js.gz +0 -0
  250. package/lib/persisters/persister-yjs.js +1 -1
  251. package/lib/persisters/persister-yjs.js.gz +0 -0
  252. package/lib/persisters.js +1 -1
  253. package/lib/persisters.js.gz +0 -0
  254. package/lib/queries.js +1 -1
  255. package/lib/queries.js.gz +0 -0
  256. package/lib/relationships.js +1 -1
  257. package/lib/relationships.js.gz +0 -0
  258. package/lib/store.js +1 -1
  259. package/lib/store.js.gz +0 -0
  260. package/lib/synchronizers/synchronizer-local.js +1 -1
  261. package/lib/synchronizers/synchronizer-local.js.gz +0 -0
  262. package/lib/synchronizers/synchronizer-ws-client.js +1 -1
  263. package/lib/synchronizers/synchronizer-ws-client.js.gz +0 -0
  264. package/lib/synchronizers.js +1 -1
  265. package/lib/synchronizers.js.gz +0 -0
  266. package/lib/tinybase.js +1 -1
  267. package/lib/tinybase.js.gz +0 -0
  268. package/lib/tools.js +1 -1
  269. package/lib/tools.js.gz +0 -0
  270. package/lib/types/common.d.ts +7 -0
  271. package/lib/types/mergeable-store.d.ts +2 -8
  272. package/lib/types/persisters/persister-automerge.d.ts +2 -2
  273. package/lib/types/persisters/persister-browser.d.ts +3 -3
  274. package/lib/types/persisters/persister-cr-sqlite-wasm.d.ts +2 -2
  275. package/lib/types/persisters/persister-electric-sql.d.ts +2 -2
  276. package/lib/types/persisters/persister-expo-sqlite-next.d.ts +2 -2
  277. package/lib/types/persisters/persister-expo-sqlite.d.ts +2 -2
  278. package/lib/types/persisters/persister-file.d.ts +3 -3
  279. package/lib/types/persisters/persister-indexed-db.d.ts +2 -2
  280. package/lib/types/persisters/persister-libsql.d.ts +3 -3
  281. package/lib/types/persisters/persister-partykit-client.d.ts +2 -2
  282. package/lib/types/persisters/persister-partykit-server.d.ts +2 -2
  283. package/lib/types/persisters/persister-powersync.d.ts +3 -3
  284. package/lib/types/persisters/persister-remote.d.ts +2 -2
  285. package/lib/types/persisters/persister-sqlite-wasm.d.ts +2 -2
  286. package/lib/types/persisters/persister-sqlite3.d.ts +2 -2
  287. package/lib/types/persisters.d.ts +5 -4
  288. package/lib/types/relationships.d.ts +1 -1
  289. package/lib/types/synchronizers/synchronizer-local.d.ts +2 -2
  290. package/lib/types/synchronizers/synchronizer-ws-client.d.ts +2 -2
  291. package/lib/types/synchronizers/synchronizer-ws-server.d.ts +2 -2
  292. package/lib/types/synchronizers.d.ts +13 -9
  293. package/lib/types/ui-react-dom.d.ts +2 -2
  294. package/lib/types/ui-react.d.ts +5 -5
  295. package/lib/types/with-schemas/common.d.ts +7 -0
  296. package/lib/types/with-schemas/indexes.d.ts +1 -1
  297. package/lib/types/with-schemas/internal/queries.d.ts +4 -4
  298. package/lib/types/with-schemas/internal/store.d.ts +2 -2
  299. package/lib/types/with-schemas/internal/ui-react.d.ts +12 -8
  300. package/lib/types/with-schemas/mergeable-store.d.ts +3 -9
  301. package/lib/types/with-schemas/metrics.d.ts +1 -1
  302. package/lib/types/with-schemas/persisters/persister-automerge.d.ts +2 -2
  303. package/lib/types/with-schemas/persisters/persister-browser.d.ts +3 -3
  304. package/lib/types/with-schemas/persisters/persister-cr-sqlite-wasm.d.ts +2 -2
  305. package/lib/types/with-schemas/persisters/persister-electric-sql.d.ts +2 -2
  306. package/lib/types/with-schemas/persisters/persister-expo-sqlite-next.d.ts +2 -2
  307. package/lib/types/with-schemas/persisters/persister-expo-sqlite.d.ts +2 -2
  308. package/lib/types/with-schemas/persisters/persister-file.d.ts +3 -3
  309. package/lib/types/with-schemas/persisters/persister-indexed-db.d.ts +2 -2
  310. package/lib/types/with-schemas/persisters/persister-libsql.d.ts +3 -3
  311. package/lib/types/with-schemas/persisters/persister-partykit-client.d.ts +2 -2
  312. package/lib/types/with-schemas/persisters/persister-partykit-server.d.ts +2 -2
  313. package/lib/types/with-schemas/persisters/persister-powersync.d.ts +4 -4
  314. package/lib/types/with-schemas/persisters/persister-remote.d.ts +2 -2
  315. package/lib/types/with-schemas/persisters/persister-sqlite-wasm.d.ts +2 -2
  316. package/lib/types/with-schemas/persisters/persister-sqlite3.d.ts +2 -2
  317. package/lib/types/with-schemas/persisters.d.ts +6 -5
  318. package/lib/types/with-schemas/queries.d.ts +2 -2
  319. package/lib/types/with-schemas/relationships.d.ts +2 -2
  320. package/lib/types/with-schemas/store.d.ts +1 -1
  321. package/lib/types/with-schemas/synchronizers/synchronizer-local.d.ts +3 -3
  322. package/lib/types/with-schemas/synchronizers/synchronizer-ws-client.d.ts +3 -3
  323. package/lib/types/with-schemas/synchronizers/synchronizer-ws-server.d.ts +2 -2
  324. package/lib/types/with-schemas/synchronizers.d.ts +13 -9
  325. package/lib/types/with-schemas/ui-react-dom.d.ts +5 -5
  326. package/lib/types/with-schemas/ui-react.d.ts +8 -10
  327. package/lib/ui-react-dom.js +1 -1
  328. package/lib/ui-react-dom.js.gz +0 -0
  329. package/lib/umd/common.js +1 -1
  330. package/lib/umd/common.js.gz +0 -0
  331. package/lib/umd/indexes.js +1 -1
  332. package/lib/umd/indexes.js.gz +0 -0
  333. package/lib/umd/mergeable-store.js +1 -1
  334. package/lib/umd/mergeable-store.js.gz +0 -0
  335. package/lib/umd/metrics.js +1 -1
  336. package/lib/umd/metrics.js.gz +0 -0
  337. package/lib/umd/persisters/persister-automerge.js +1 -1
  338. package/lib/umd/persisters/persister-automerge.js.gz +0 -0
  339. package/lib/umd/persisters/persister-browser.js +1 -1
  340. package/lib/umd/persisters/persister-browser.js.gz +0 -0
  341. package/lib/umd/persisters/persister-cr-sqlite-wasm.js +1 -1
  342. package/lib/umd/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  343. package/lib/umd/persisters/persister-electric-sql.js +1 -1
  344. package/lib/umd/persisters/persister-electric-sql.js.gz +0 -0
  345. package/lib/umd/persisters/persister-expo-sqlite-next.js +1 -1
  346. package/lib/umd/persisters/persister-expo-sqlite-next.js.gz +0 -0
  347. package/lib/umd/persisters/persister-expo-sqlite.js +1 -1
  348. package/lib/umd/persisters/persister-expo-sqlite.js.gz +0 -0
  349. package/lib/umd/persisters/persister-file.js +1 -1
  350. package/lib/umd/persisters/persister-file.js.gz +0 -0
  351. package/lib/umd/persisters/persister-indexed-db.js +1 -1
  352. package/lib/umd/persisters/persister-indexed-db.js.gz +0 -0
  353. package/lib/umd/persisters/persister-libsql.js +1 -1
  354. package/lib/umd/persisters/persister-libsql.js.gz +0 -0
  355. package/lib/umd/persisters/persister-partykit-client.js +1 -1
  356. package/lib/umd/persisters/persister-partykit-client.js.gz +0 -0
  357. package/lib/umd/persisters/persister-powersync.js +1 -1
  358. package/lib/umd/persisters/persister-powersync.js.gz +0 -0
  359. package/lib/umd/persisters/persister-remote.js +1 -1
  360. package/lib/umd/persisters/persister-remote.js.gz +0 -0
  361. package/lib/umd/persisters/persister-sqlite-wasm.js +1 -1
  362. package/lib/umd/persisters/persister-sqlite-wasm.js.gz +0 -0
  363. package/lib/umd/persisters/persister-sqlite3.js +1 -1
  364. package/lib/umd/persisters/persister-sqlite3.js.gz +0 -0
  365. package/lib/umd/persisters/persister-yjs.js +1 -1
  366. package/lib/umd/persisters/persister-yjs.js.gz +0 -0
  367. package/lib/umd/persisters.js +1 -1
  368. package/lib/umd/persisters.js.gz +0 -0
  369. package/lib/umd/queries.js +1 -1
  370. package/lib/umd/queries.js.gz +0 -0
  371. package/lib/umd/relationships.js +1 -1
  372. package/lib/umd/relationships.js.gz +0 -0
  373. package/lib/umd/store.js +1 -1
  374. package/lib/umd/store.js.gz +0 -0
  375. package/lib/umd/synchronizers/synchronizer-local.js +1 -1
  376. package/lib/umd/synchronizers/synchronizer-local.js.gz +0 -0
  377. package/lib/umd/synchronizers/synchronizer-ws-client.js +1 -1
  378. package/lib/umd/synchronizers/synchronizer-ws-client.js.gz +0 -0
  379. package/lib/umd/synchronizers.js +1 -1
  380. package/lib/umd/synchronizers.js.gz +0 -0
  381. package/lib/umd/tinybase.js +1 -1
  382. package/lib/umd/tinybase.js.gz +0 -0
  383. package/lib/umd/tools.js +1 -1
  384. package/lib/umd/tools.js.gz +0 -0
  385. package/lib/umd/ui-react-dom-debug.js +1 -1
  386. package/lib/umd/ui-react-dom-debug.js.gz +0 -0
  387. package/lib/umd/ui-react-dom.js +1 -1
  388. package/lib/umd/ui-react-dom.js.gz +0 -0
  389. package/lib/umd-es6/checkpoints.js +1 -1
  390. package/lib/umd-es6/checkpoints.js.gz +0 -0
  391. package/lib/umd-es6/common.js +1 -1
  392. package/lib/umd-es6/common.js.gz +0 -0
  393. package/lib/umd-es6/indexes.js +1 -1
  394. package/lib/umd-es6/indexes.js.gz +0 -0
  395. package/lib/umd-es6/mergeable-store.js +1 -1
  396. package/lib/umd-es6/mergeable-store.js.gz +0 -0
  397. package/lib/umd-es6/metrics.js +1 -1
  398. package/lib/umd-es6/metrics.js.gz +0 -0
  399. package/lib/umd-es6/persisters/persister-automerge.js +1 -1
  400. package/lib/umd-es6/persisters/persister-automerge.js.gz +0 -0
  401. package/lib/umd-es6/persisters/persister-browser.js +1 -1
  402. package/lib/umd-es6/persisters/persister-browser.js.gz +0 -0
  403. package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js +1 -1
  404. package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  405. package/lib/umd-es6/persisters/persister-electric-sql.js +1 -1
  406. package/lib/umd-es6/persisters/persister-electric-sql.js.gz +0 -0
  407. package/lib/umd-es6/persisters/persister-expo-sqlite-next.js +1 -1
  408. package/lib/umd-es6/persisters/persister-expo-sqlite-next.js.gz +0 -0
  409. package/lib/umd-es6/persisters/persister-expo-sqlite.js +1 -1
  410. package/lib/umd-es6/persisters/persister-expo-sqlite.js.gz +0 -0
  411. package/lib/umd-es6/persisters/persister-file.js +1 -1
  412. package/lib/umd-es6/persisters/persister-file.js.gz +0 -0
  413. package/lib/umd-es6/persisters/persister-indexed-db.js +1 -1
  414. package/lib/umd-es6/persisters/persister-indexed-db.js.gz +0 -0
  415. package/lib/umd-es6/persisters/persister-libsql.js +1 -1
  416. package/lib/umd-es6/persisters/persister-libsql.js.gz +0 -0
  417. package/lib/umd-es6/persisters/persister-partykit-client.js +1 -1
  418. package/lib/umd-es6/persisters/persister-partykit-client.js.gz +0 -0
  419. package/lib/umd-es6/persisters/persister-powersync.js +1 -1
  420. package/lib/umd-es6/persisters/persister-powersync.js.gz +0 -0
  421. package/lib/umd-es6/persisters/persister-remote.js +1 -1
  422. package/lib/umd-es6/persisters/persister-remote.js.gz +0 -0
  423. package/lib/umd-es6/persisters/persister-sqlite-wasm.js +1 -1
  424. package/lib/umd-es6/persisters/persister-sqlite-wasm.js.gz +0 -0
  425. package/lib/umd-es6/persisters/persister-sqlite3.js +1 -1
  426. package/lib/umd-es6/persisters/persister-sqlite3.js.gz +0 -0
  427. package/lib/umd-es6/persisters/persister-yjs.js +1 -1
  428. package/lib/umd-es6/persisters/persister-yjs.js.gz +0 -0
  429. package/lib/umd-es6/persisters.js +1 -1
  430. package/lib/umd-es6/persisters.js.gz +0 -0
  431. package/lib/umd-es6/queries.js +1 -1
  432. package/lib/umd-es6/queries.js.gz +0 -0
  433. package/lib/umd-es6/relationships.js +1 -1
  434. package/lib/umd-es6/relationships.js.gz +0 -0
  435. package/lib/umd-es6/store.js +1 -1
  436. package/lib/umd-es6/store.js.gz +0 -0
  437. package/lib/umd-es6/synchronizers/synchronizer-local.js +1 -1
  438. package/lib/umd-es6/synchronizers/synchronizer-local.js.gz +0 -0
  439. package/lib/umd-es6/synchronizers/synchronizer-ws-client.js +1 -1
  440. package/lib/umd-es6/synchronizers/synchronizer-ws-client.js.gz +0 -0
  441. package/lib/umd-es6/synchronizers.js +1 -1
  442. package/lib/umd-es6/synchronizers.js.gz +0 -0
  443. package/lib/umd-es6/tinybase.js +1 -1
  444. package/lib/umd-es6/tinybase.js.gz +0 -0
  445. package/lib/umd-es6/tools.js +1 -1
  446. package/lib/umd-es6/tools.js.gz +0 -0
  447. package/lib/umd-es6/ui-react-dom-debug.js +1 -1
  448. package/lib/umd-es6/ui-react-dom-debug.js.gz +0 -0
  449. package/lib/umd-es6/ui-react-dom.js +1 -1
  450. package/lib/umd-es6/ui-react-dom.js.gz +0 -0
  451. package/package.json +17 -17
  452. package/readme.md +2 -2
@@ -1,8 +1,6 @@
1
1
  const EMPTY_STRING = '';
2
- const strCharCodeAt = (str, position) => str.charCodeAt(position);
3
2
 
4
3
  const promise = Promise;
5
- const mathMax = Math.max;
6
4
  const isUndefined = (thing) => thing == void 0;
7
5
  const ifNotUndefined = (value, then, otherwise) =>
8
6
  isUndefined(value) ? otherwise?.() : then(value);
@@ -11,6 +9,8 @@ const size = (arrayOrString) => arrayOrString.length;
11
9
  const promiseNew = (resolver) => new promise(resolver);
12
10
 
13
11
  const arrayForEach = (array, cb) => array.forEach(cb);
12
+ const arrayMap = (array, cb) => array.map(cb);
13
+ const arrayReduce = (array, cb, initial) => array.reduce(cb, initial);
14
14
  const arrayPush = (array, ...values) => array.push(...values);
15
15
  const arrayShift = (array) => array.shift();
16
16
 
@@ -55,22 +55,11 @@ const mapSet = (map, key, value) =>
55
55
  const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
56
56
  if (!collHas(map, key)) {
57
57
  mapSet(map, key, getDefaultValue());
58
- } else {
59
- hadExistingValue?.(mapGet(map, key));
60
58
  }
61
59
  return mapGet(map, key);
62
60
  };
63
61
 
64
- const textEncoder = new globalThis.TextEncoder();
65
- const getHash = (value) => {
66
- let hash = 2166136261;
67
- arrayForEach(textEncoder.encode(value), (char) => {
68
- hash ^= char;
69
- hash +=
70
- (hash << 1) + (hash << 4) + (hash << 7) + (hash << 8) + (hash << 24);
71
- });
72
- return hash >>> 0;
73
- };
62
+ new globalThis.TextEncoder();
74
63
 
75
64
  const newStamp = (value, time) => (time ? [value, time] : [value]);
76
65
  const getLatestTime = (time1, time2) =>
@@ -80,7 +69,7 @@ const stampNewObj = (time = EMPTY_STRING) => newStamp(objNew(), time);
80
69
  const scheduleRunning = mapNew();
81
70
  const scheduleActions = mapNew();
82
71
  const getStoreFunctions = (supportedStoreType = 1, store) =>
83
- supportedStoreType > 1 && 'getMergeableContent' in store
72
+ supportedStoreType > 1 && 'merge' in store
84
73
  ? [
85
74
  1,
86
75
  store.getMergeableContent,
@@ -262,77 +251,19 @@ const createCustomPersister = (
262
251
  };
263
252
 
264
253
  const MASK6 = 63;
265
- const SHIFT36 = 2 ** 36;
266
- const SHIFT30 = 2 ** 30;
267
- const SHIFT24 = 2 ** 24;
268
- const SHIFT18 = 2 ** 18;
269
- const SHIFT12 = 2 ** 12;
270
- const SHIFT6 = 2 ** 6;
271
- const toB64 = (num) => String.fromCharCode(48 + (num & MASK6));
272
- const fromB64 = (str, pos) => strCharCodeAt(str, pos) - 48;
273
- const encodeHlc = (logicalTime42, counter24, clientHash30) =>
274
- toB64(logicalTime42 / SHIFT36) +
275
- toB64(logicalTime42 / SHIFT30) +
276
- toB64(logicalTime42 / SHIFT24) +
277
- toB64(logicalTime42 / SHIFT18) +
278
- toB64(logicalTime42 / SHIFT12) +
279
- toB64(logicalTime42 / SHIFT6) +
280
- toB64(logicalTime42) +
281
- toB64(counter24 / SHIFT18) +
282
- toB64(counter24 / SHIFT12) +
283
- toB64(counter24 / SHIFT6) +
284
- toB64(counter24) +
285
- toB64(clientHash30 / SHIFT24) +
286
- toB64(clientHash30 / SHIFT18) +
287
- toB64(clientHash30 / SHIFT12) +
288
- toB64(clientHash30 / SHIFT6) +
289
- toB64(clientHash30);
290
- const decodeHlc = (hlc16) => [
291
- fromB64(hlc16, 0) * SHIFT36 +
292
- fromB64(hlc16, 1) * SHIFT30 +
293
- fromB64(hlc16, 2) * SHIFT24 +
294
- fromB64(hlc16, 3) * SHIFT18 +
295
- fromB64(hlc16, 4) * SHIFT12 +
296
- fromB64(hlc16, 5) * SHIFT6 +
297
- fromB64(hlc16, 6),
298
- fromB64(hlc16, 7) * SHIFT18 +
299
- fromB64(hlc16, 8) * SHIFT12 +
300
- fromB64(hlc16, 9) * SHIFT6 +
301
- fromB64(hlc16, 10),
302
- fromB64(hlc16, 11) * SHIFT24 +
303
- fromB64(hlc16, 12) * SHIFT18 +
304
- fromB64(hlc16, 13) * SHIFT12 +
305
- fromB64(hlc16, 14) * SHIFT6 +
306
- fromB64(hlc16, 15),
307
- ];
308
- const getHlcFunctions = (uniqueId) => {
309
- let logicalTime = 0;
310
- let lastCounter = -1;
311
- const uniqueIdHash = getHash(uniqueId);
312
- const getHlc = () => {
313
- seenHlc();
314
- return encodeHlc(logicalTime, ++lastCounter, uniqueIdHash);
315
- };
316
- const seenHlc = (hlc) => {
317
- const previousLogicalTime = logicalTime;
318
- const [remoteLogicalTime, remoteCounter] =
319
- isUndefined(hlc) || hlc == '' ? [0, 0] : decodeHlc(hlc);
320
- logicalTime = mathMax(
321
- previousLogicalTime,
322
- remoteLogicalTime,
323
- globalThis.HLC_TIME ?? Date.now(),
324
- );
325
- lastCounter =
326
- logicalTime == previousLogicalTime
327
- ? logicalTime == remoteLogicalTime
328
- ? mathMax(lastCounter, remoteCounter)
329
- : lastCounter
330
- : logicalTime == remoteLogicalTime
331
- ? remoteCounter
332
- : -1;
333
- };
334
- return [getHlc, seenHlc];
335
- };
254
+ const ENCODE =
255
+ '-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz'.split(
256
+ EMPTY_STRING,
257
+ );
258
+ mapNew(arrayMap(ENCODE, (char, index) => [char, index]));
259
+ const encode = (num) => ENCODE[num & MASK6];
260
+
261
+ const getUniqueId = (length = 16) =>
262
+ arrayReduce(
263
+ crypto.getRandomValues(new Uint8Array(length)),
264
+ (uniqueId, number) => uniqueId + encode(number),
265
+ '',
266
+ );
336
267
 
337
268
  const RESPONSE = 0;
338
269
  const GET_CONTENT_HASHES = 1;
@@ -354,7 +285,6 @@ const createCustomSynchronizer = (
354
285
  let persisterListener;
355
286
  let sends = 0;
356
287
  let receives = 0;
357
- const [getHlc] = getHlcFunctions(store.getId());
358
288
  const pendingRequests = mapNew();
359
289
  onReceive((fromClientId, requestId, messageType, messageBody) => {
360
290
  {
@@ -399,7 +329,7 @@ const createCustomSynchronizer = (
399
329
  });
400
330
  const request = async (toClientId, messageType, messageBody = EMPTY_STRING) =>
401
331
  promiseNew((resolve, reject) => {
402
- const requestId = getHlc();
332
+ const requestId = getUniqueId();
403
333
  const timeout = setTimeout(() => {
404
334
  collDel(pendingRequests, requestId);
405
335
  reject(
@@ -533,7 +463,7 @@ const createCustomSynchronizer = (
533
463
 
534
464
  const clients = mapNew();
535
465
  const createLocalSynchronizer = (store, onIgnoredError) => {
536
- const clientId = '' + Math.random();
466
+ const clientId = getUniqueId();
537
467
  const send = (toClientId, requestId, messageType, messageBody) => {
538
468
  setTimeout(
539
469
  () =>
@@ -1,9 +1,7 @@
1
1
  const EMPTY_STRING = '';
2
2
  const UTF8 = 'utf8';
3
- const strCharCodeAt = (str, position) => str.charCodeAt(position);
4
3
 
5
4
  const promise = Promise;
6
- const mathMax = Math.max;
7
5
  const isUndefined = (thing) => thing == void 0;
8
6
  const ifNotUndefined = (value, then, otherwise) =>
9
7
  isUndefined(value) ? otherwise?.() : then(value);
@@ -13,6 +11,8 @@ const size = (arrayOrString) => arrayOrString.length;
13
11
  const promiseNew = (resolver) => new promise(resolver);
14
12
 
15
13
  const arrayForEach = (array, cb) => array.forEach(cb);
14
+ const arrayMap = (array, cb) => array.map(cb);
15
+ const arrayReduce = (array, cb, initial) => array.reduce(cb, initial);
16
16
  const arrayPush = (array, ...values) => array.push(...values);
17
17
  const arrayShift = (array) => array.shift();
18
18
 
@@ -66,22 +66,11 @@ const mapSet = (map, key, value) =>
66
66
  const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
67
67
  if (!collHas(map, key)) {
68
68
  mapSet(map, key, getDefaultValue());
69
- } else {
70
- hadExistingValue?.(mapGet(map, key));
71
69
  }
72
70
  return mapGet(map, key);
73
71
  };
74
72
 
75
- const textEncoder = new globalThis.TextEncoder();
76
- const getHash = (value) => {
77
- let hash = 2166136261;
78
- arrayForEach(textEncoder.encode(value), (char) => {
79
- hash ^= char;
80
- hash +=
81
- (hash << 1) + (hash << 4) + (hash << 7) + (hash << 8) + (hash << 24);
82
- });
83
- return hash >>> 0;
84
- };
73
+ new globalThis.TextEncoder();
85
74
 
86
75
  const newStamp = (value, time) => (time ? [value, time] : [value]);
87
76
  const getLatestTime = (time1, time2) =>
@@ -91,7 +80,7 @@ const stampNewObj = (time = EMPTY_STRING) => newStamp(objNew(), time);
91
80
  const scheduleRunning = mapNew();
92
81
  const scheduleActions = mapNew();
93
82
  const getStoreFunctions = (supportedStoreType = 1, store) =>
94
- supportedStoreType > 1 && 'getMergeableContent' in store
83
+ supportedStoreType > 1 && 'merge' in store
95
84
  ? [
96
85
  1,
97
86
  store.getMergeableContent,
@@ -273,77 +262,19 @@ const createCustomPersister = (
273
262
  };
274
263
 
275
264
  const MASK6 = 63;
276
- const SHIFT36 = 2 ** 36;
277
- const SHIFT30 = 2 ** 30;
278
- const SHIFT24 = 2 ** 24;
279
- const SHIFT18 = 2 ** 18;
280
- const SHIFT12 = 2 ** 12;
281
- const SHIFT6 = 2 ** 6;
282
- const toB64 = (num) => String.fromCharCode(48 + (num & MASK6));
283
- const fromB64 = (str, pos) => strCharCodeAt(str, pos) - 48;
284
- const encodeHlc = (logicalTime42, counter24, clientHash30) =>
285
- toB64(logicalTime42 / SHIFT36) +
286
- toB64(logicalTime42 / SHIFT30) +
287
- toB64(logicalTime42 / SHIFT24) +
288
- toB64(logicalTime42 / SHIFT18) +
289
- toB64(logicalTime42 / SHIFT12) +
290
- toB64(logicalTime42 / SHIFT6) +
291
- toB64(logicalTime42) +
292
- toB64(counter24 / SHIFT18) +
293
- toB64(counter24 / SHIFT12) +
294
- toB64(counter24 / SHIFT6) +
295
- toB64(counter24) +
296
- toB64(clientHash30 / SHIFT24) +
297
- toB64(clientHash30 / SHIFT18) +
298
- toB64(clientHash30 / SHIFT12) +
299
- toB64(clientHash30 / SHIFT6) +
300
- toB64(clientHash30);
301
- const decodeHlc = (hlc16) => [
302
- fromB64(hlc16, 0) * SHIFT36 +
303
- fromB64(hlc16, 1) * SHIFT30 +
304
- fromB64(hlc16, 2) * SHIFT24 +
305
- fromB64(hlc16, 3) * SHIFT18 +
306
- fromB64(hlc16, 4) * SHIFT12 +
307
- fromB64(hlc16, 5) * SHIFT6 +
308
- fromB64(hlc16, 6),
309
- fromB64(hlc16, 7) * SHIFT18 +
310
- fromB64(hlc16, 8) * SHIFT12 +
311
- fromB64(hlc16, 9) * SHIFT6 +
312
- fromB64(hlc16, 10),
313
- fromB64(hlc16, 11) * SHIFT24 +
314
- fromB64(hlc16, 12) * SHIFT18 +
315
- fromB64(hlc16, 13) * SHIFT12 +
316
- fromB64(hlc16, 14) * SHIFT6 +
317
- fromB64(hlc16, 15),
318
- ];
319
- const getHlcFunctions = (uniqueId) => {
320
- let logicalTime = 0;
321
- let lastCounter = -1;
322
- const uniqueIdHash = getHash(uniqueId);
323
- const getHlc = () => {
324
- seenHlc();
325
- return encodeHlc(logicalTime, ++lastCounter, uniqueIdHash);
326
- };
327
- const seenHlc = (hlc) => {
328
- const previousLogicalTime = logicalTime;
329
- const [remoteLogicalTime, remoteCounter] =
330
- isUndefined(hlc) || hlc == '' ? [0, 0] : decodeHlc(hlc);
331
- logicalTime = mathMax(
332
- previousLogicalTime,
333
- remoteLogicalTime,
334
- globalThis.HLC_TIME ?? Date.now(),
335
- );
336
- lastCounter =
337
- logicalTime == previousLogicalTime
338
- ? logicalTime == remoteLogicalTime
339
- ? mathMax(lastCounter, remoteCounter)
340
- : lastCounter
341
- : logicalTime == remoteLogicalTime
342
- ? remoteCounter
343
- : -1;
344
- };
345
- return [getHlc, seenHlc];
346
- };
265
+ const ENCODE =
266
+ '-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz'.split(
267
+ EMPTY_STRING,
268
+ );
269
+ mapNew(arrayMap(ENCODE, (char, index) => [char, index]));
270
+ const encode = (num) => ENCODE[num & MASK6];
271
+
272
+ const getUniqueId = (length = 16) =>
273
+ arrayReduce(
274
+ crypto.getRandomValues(new Uint8Array(length)),
275
+ (uniqueId, number) => uniqueId + encode(number),
276
+ '',
277
+ );
347
278
 
348
279
  const RESPONSE = 0;
349
280
  const GET_CONTENT_HASHES = 1;
@@ -365,7 +296,6 @@ const createCustomSynchronizer = (
365
296
  let persisterListener;
366
297
  let sends = 0;
367
298
  let receives = 0;
368
- const [getHlc] = getHlcFunctions(store.getId());
369
299
  const pendingRequests = mapNew();
370
300
  onReceive((fromClientId, requestId, messageType, messageBody) => {
371
301
  {
@@ -410,7 +340,7 @@ const createCustomSynchronizer = (
410
340
  });
411
341
  const request = async (toClientId, messageType, messageBody = EMPTY_STRING) =>
412
342
  promiseNew((resolve, reject) => {
413
- const requestId = getHlc();
343
+ const requestId = getUniqueId();
414
344
  const timeout = setTimeout(() => {
415
345
  collDel(pendingRequests, requestId);
416
346
  reject(
@@ -1,8 +1,6 @@
1
1
  const EMPTY_STRING = '';
2
- const strCharCodeAt = (str, position) => str.charCodeAt(position);
3
2
 
4
3
  const promise = Promise;
5
- const mathMax = Math.max;
6
4
  const isUndefined = (thing) => thing == void 0;
7
5
  const ifNotUndefined = (value, then, otherwise) =>
8
6
  isUndefined(value) ? otherwise?.() : then(value);
@@ -11,6 +9,8 @@ const size = (arrayOrString) => arrayOrString.length;
11
9
  const promiseNew = (resolver) => new promise(resolver);
12
10
 
13
11
  const arrayForEach = (array, cb) => array.forEach(cb);
12
+ const arrayMap = (array, cb) => array.map(cb);
13
+ const arrayReduce = (array, cb, initial) => array.reduce(cb, initial);
14
14
  const arrayPush = (array, ...values) => array.push(...values);
15
15
  const arrayShift = (array) => array.shift();
16
16
 
@@ -52,22 +52,11 @@ const mapSet = (map, key, value) =>
52
52
  const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
53
53
  if (!collHas(map, key)) {
54
54
  mapSet(map, key, getDefaultValue());
55
- } else {
56
- hadExistingValue?.(mapGet(map, key));
57
55
  }
58
56
  return mapGet(map, key);
59
57
  };
60
58
 
61
- const textEncoder = new globalThis.TextEncoder();
62
- const getHash = (value) => {
63
- let hash = 2166136261;
64
- arrayForEach(textEncoder.encode(value), (char) => {
65
- hash ^= char;
66
- hash +=
67
- (hash << 1) + (hash << 4) + (hash << 7) + (hash << 8) + (hash << 24);
68
- });
69
- return hash >>> 0;
70
- };
59
+ new globalThis.TextEncoder();
71
60
 
72
61
  const newStamp = (value, time) => (time ? [value, time] : [value]);
73
62
  const getLatestTime = (time1, time2) =>
@@ -77,7 +66,7 @@ const stampNewObj = (time = EMPTY_STRING) => newStamp(objNew(), time);
77
66
  const scheduleRunning = mapNew();
78
67
  const scheduleActions = mapNew();
79
68
  const getStoreFunctions = (supportedStoreType = 1, store) =>
80
- supportedStoreType > 1 && 'getMergeableContent' in store
69
+ supportedStoreType > 1 && 'merge' in store
81
70
  ? [
82
71
  1,
83
72
  store.getMergeableContent,
@@ -259,77 +248,19 @@ const createCustomPersister = (
259
248
  };
260
249
 
261
250
  const MASK6 = 63;
262
- const SHIFT36 = 2 ** 36;
263
- const SHIFT30 = 2 ** 30;
264
- const SHIFT24 = 2 ** 24;
265
- const SHIFT18 = 2 ** 18;
266
- const SHIFT12 = 2 ** 12;
267
- const SHIFT6 = 2 ** 6;
268
- const toB64 = (num) => String.fromCharCode(48 + (num & MASK6));
269
- const fromB64 = (str, pos) => strCharCodeAt(str, pos) - 48;
270
- const encodeHlc = (logicalTime42, counter24, clientHash30) =>
271
- toB64(logicalTime42 / SHIFT36) +
272
- toB64(logicalTime42 / SHIFT30) +
273
- toB64(logicalTime42 / SHIFT24) +
274
- toB64(logicalTime42 / SHIFT18) +
275
- toB64(logicalTime42 / SHIFT12) +
276
- toB64(logicalTime42 / SHIFT6) +
277
- toB64(logicalTime42) +
278
- toB64(counter24 / SHIFT18) +
279
- toB64(counter24 / SHIFT12) +
280
- toB64(counter24 / SHIFT6) +
281
- toB64(counter24) +
282
- toB64(clientHash30 / SHIFT24) +
283
- toB64(clientHash30 / SHIFT18) +
284
- toB64(clientHash30 / SHIFT12) +
285
- toB64(clientHash30 / SHIFT6) +
286
- toB64(clientHash30);
287
- const decodeHlc = (hlc16) => [
288
- fromB64(hlc16, 0) * SHIFT36 +
289
- fromB64(hlc16, 1) * SHIFT30 +
290
- fromB64(hlc16, 2) * SHIFT24 +
291
- fromB64(hlc16, 3) * SHIFT18 +
292
- fromB64(hlc16, 4) * SHIFT12 +
293
- fromB64(hlc16, 5) * SHIFT6 +
294
- fromB64(hlc16, 6),
295
- fromB64(hlc16, 7) * SHIFT18 +
296
- fromB64(hlc16, 8) * SHIFT12 +
297
- fromB64(hlc16, 9) * SHIFT6 +
298
- fromB64(hlc16, 10),
299
- fromB64(hlc16, 11) * SHIFT24 +
300
- fromB64(hlc16, 12) * SHIFT18 +
301
- fromB64(hlc16, 13) * SHIFT12 +
302
- fromB64(hlc16, 14) * SHIFT6 +
303
- fromB64(hlc16, 15),
304
- ];
305
- const getHlcFunctions = (uniqueId) => {
306
- let logicalTime = 0;
307
- let lastCounter = -1;
308
- const uniqueIdHash = getHash(uniqueId);
309
- const getHlc = () => {
310
- seenHlc();
311
- return encodeHlc(logicalTime, ++lastCounter, uniqueIdHash);
312
- };
313
- const seenHlc = (hlc) => {
314
- const previousLogicalTime = logicalTime;
315
- const [remoteLogicalTime, remoteCounter] =
316
- isUndefined(hlc) || hlc == '' ? [0, 0] : decodeHlc(hlc);
317
- logicalTime = mathMax(
318
- previousLogicalTime,
319
- remoteLogicalTime,
320
- globalThis.HLC_TIME ?? Date.now(),
321
- );
322
- lastCounter =
323
- logicalTime == previousLogicalTime
324
- ? logicalTime == remoteLogicalTime
325
- ? mathMax(lastCounter, remoteCounter)
326
- : lastCounter
327
- : logicalTime == remoteLogicalTime
328
- ? remoteCounter
329
- : -1;
330
- };
331
- return [getHlc, seenHlc];
332
- };
251
+ const ENCODE =
252
+ '-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz'.split(
253
+ EMPTY_STRING,
254
+ );
255
+ mapNew(arrayMap(ENCODE, (char, index) => [char, index]));
256
+ const encode = (num) => ENCODE[num & MASK6];
257
+
258
+ const getUniqueId = (length = 16) =>
259
+ arrayReduce(
260
+ crypto.getRandomValues(new Uint8Array(length)),
261
+ (uniqueId, number) => uniqueId + encode(number),
262
+ '',
263
+ );
333
264
 
334
265
  const RESPONSE = 0;
335
266
  const GET_CONTENT_HASHES = 1;
@@ -351,7 +282,6 @@ const createCustomSynchronizer = (
351
282
  let persisterListener;
352
283
  let sends = 0;
353
284
  let receives = 0;
354
- const [getHlc] = getHlcFunctions(store.getId());
355
285
  const pendingRequests = mapNew();
356
286
  onReceive((fromClientId, requestId, messageType, messageBody) => {
357
287
  {
@@ -396,7 +326,7 @@ const createCustomSynchronizer = (
396
326
  });
397
327
  const request = async (toClientId, messageType, messageBody = EMPTY_STRING) =>
398
328
  promiseNew((resolve, reject) => {
399
- const requestId = getHlc();
329
+ const requestId = getUniqueId();
400
330
  const timeout = setTimeout(() => {
401
331
  collDel(pendingRequests, requestId);
402
332
  reject(