tinybase 4.8.16 → 4.8.17

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 (356) hide show
  1. package/lib/checkpoints.js +1 -0
  2. package/lib/checkpoints.js.gz +0 -0
  3. package/lib/cjs/checkpoints.cjs +1 -0
  4. package/lib/cjs/checkpoints.cjs.gz +0 -0
  5. package/lib/cjs/common.cjs +1 -0
  6. package/lib/cjs/common.cjs.gz +0 -0
  7. package/lib/cjs/indexes.cjs +1 -0
  8. package/lib/cjs/indexes.cjs.gz +0 -0
  9. package/lib/cjs/metrics.cjs +1 -0
  10. package/lib/cjs/metrics.cjs.gz +0 -0
  11. package/lib/cjs/persisters/persister-automerge.cjs +1 -0
  12. package/lib/cjs/persisters/persister-automerge.cjs.gz +0 -0
  13. package/lib/cjs/persisters/persister-browser.cjs +1 -0
  14. package/lib/cjs/persisters/persister-browser.cjs.gz +0 -0
  15. package/lib/cjs/persisters/persister-cr-sqlite-wasm.cjs +1 -0
  16. package/lib/cjs/persisters/persister-cr-sqlite-wasm.cjs.gz +0 -0
  17. package/lib/cjs/persisters/persister-electric-sql.cjs +1 -0
  18. package/lib/cjs/persisters/persister-electric-sql.cjs.gz +0 -0
  19. package/lib/cjs/persisters/persister-expo-sqlite-next.cjs +1 -0
  20. package/lib/cjs/persisters/persister-expo-sqlite-next.cjs.gz +0 -0
  21. package/lib/cjs/persisters/persister-expo-sqlite.cjs +1 -0
  22. package/lib/cjs/persisters/persister-expo-sqlite.cjs.gz +0 -0
  23. package/lib/cjs/persisters/persister-file.cjs +1 -0
  24. package/lib/cjs/persisters/persister-file.cjs.gz +0 -0
  25. package/lib/cjs/persisters/persister-indexed-db.cjs +1 -0
  26. package/lib/cjs/persisters/persister-indexed-db.cjs.gz +0 -0
  27. package/lib/cjs/persisters/persister-libsql.cjs +1 -0
  28. package/lib/cjs/persisters/persister-libsql.cjs.gz +0 -0
  29. package/lib/cjs/persisters/persister-partykit-client.cjs +1 -0
  30. package/lib/cjs/persisters/persister-partykit-client.cjs.gz +0 -0
  31. package/lib/cjs/persisters/persister-partykit-server.cjs +1 -0
  32. package/lib/cjs/persisters/persister-partykit-server.cjs.gz +0 -0
  33. package/lib/cjs/persisters/persister-powersync.cjs +1 -0
  34. package/lib/cjs/persisters/persister-powersync.cjs.gz +0 -0
  35. package/lib/cjs/persisters/persister-remote.cjs +1 -0
  36. package/lib/cjs/persisters/persister-remote.cjs.gz +0 -0
  37. package/lib/cjs/persisters/persister-sqlite-wasm.cjs +1 -0
  38. package/lib/cjs/persisters/persister-sqlite-wasm.cjs.gz +0 -0
  39. package/lib/cjs/persisters/persister-sqlite3.cjs +1 -0
  40. package/lib/cjs/persisters/persister-sqlite3.cjs.gz +0 -0
  41. package/lib/cjs/persisters/persister-yjs.cjs +1 -0
  42. package/lib/cjs/persisters/persister-yjs.cjs.gz +0 -0
  43. package/lib/cjs/persisters.cjs +1 -0
  44. package/lib/cjs/persisters.cjs.gz +0 -0
  45. package/lib/cjs/queries.cjs +1 -0
  46. package/lib/cjs/queries.cjs.gz +0 -0
  47. package/lib/cjs/relationships.cjs +1 -0
  48. package/lib/cjs/relationships.cjs.gz +0 -0
  49. package/lib/cjs/store.cjs +1 -0
  50. package/lib/cjs/store.cjs.gz +0 -0
  51. package/lib/cjs/tinybase.cjs +1 -0
  52. package/lib/cjs/tinybase.cjs.gz +0 -0
  53. package/lib/cjs/tools.cjs +1 -0
  54. package/lib/cjs/tools.cjs.gz +0 -0
  55. package/lib/cjs/ui-react-dom-debug.cjs +1 -0
  56. package/lib/cjs/ui-react-dom-debug.cjs.gz +0 -0
  57. package/lib/cjs/ui-react-dom.cjs +1 -0
  58. package/lib/cjs/ui-react-dom.cjs.gz +0 -0
  59. package/lib/cjs/ui-react.cjs +1 -0
  60. package/lib/cjs/ui-react.cjs.gz +0 -0
  61. package/lib/cjs-es6/checkpoints.cjs +1 -0
  62. package/lib/cjs-es6/checkpoints.cjs.gz +0 -0
  63. package/lib/cjs-es6/common.cjs +1 -0
  64. package/lib/cjs-es6/common.cjs.gz +0 -0
  65. package/lib/cjs-es6/indexes.cjs +1 -0
  66. package/lib/cjs-es6/indexes.cjs.gz +0 -0
  67. package/lib/cjs-es6/metrics.cjs +1 -0
  68. package/lib/cjs-es6/metrics.cjs.gz +0 -0
  69. package/lib/cjs-es6/persisters/persister-automerge.cjs +1 -0
  70. package/lib/cjs-es6/persisters/persister-automerge.cjs.gz +0 -0
  71. package/lib/cjs-es6/persisters/persister-browser.cjs +1 -0
  72. package/lib/cjs-es6/persisters/persister-browser.cjs.gz +0 -0
  73. package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs +1 -0
  74. package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs.gz +0 -0
  75. package/lib/cjs-es6/persisters/persister-electric-sql.cjs +1 -0
  76. package/lib/cjs-es6/persisters/persister-electric-sql.cjs.gz +0 -0
  77. package/lib/cjs-es6/persisters/persister-expo-sqlite-next.cjs +1 -0
  78. package/lib/cjs-es6/persisters/persister-expo-sqlite-next.cjs.gz +0 -0
  79. package/lib/cjs-es6/persisters/persister-expo-sqlite.cjs +1 -0
  80. package/lib/cjs-es6/persisters/persister-expo-sqlite.cjs.gz +0 -0
  81. package/lib/cjs-es6/persisters/persister-file.cjs +1 -0
  82. package/lib/cjs-es6/persisters/persister-file.cjs.gz +0 -0
  83. package/lib/cjs-es6/persisters/persister-indexed-db.cjs +1 -0
  84. package/lib/cjs-es6/persisters/persister-indexed-db.cjs.gz +0 -0
  85. package/lib/cjs-es6/persisters/persister-libsql.cjs +1 -0
  86. package/lib/cjs-es6/persisters/persister-libsql.cjs.gz +0 -0
  87. package/lib/cjs-es6/persisters/persister-partykit-client.cjs +1 -0
  88. package/lib/cjs-es6/persisters/persister-partykit-client.cjs.gz +0 -0
  89. package/lib/cjs-es6/persisters/persister-partykit-server.cjs +1 -0
  90. package/lib/cjs-es6/persisters/persister-partykit-server.cjs.gz +0 -0
  91. package/lib/cjs-es6/persisters/persister-powersync.cjs +1 -0
  92. package/lib/cjs-es6/persisters/persister-powersync.cjs.gz +0 -0
  93. package/lib/cjs-es6/persisters/persister-remote.cjs +1 -0
  94. package/lib/cjs-es6/persisters/persister-remote.cjs.gz +0 -0
  95. package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs +1 -0
  96. package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs.gz +0 -0
  97. package/lib/cjs-es6/persisters/persister-sqlite3.cjs +1 -0
  98. package/lib/cjs-es6/persisters/persister-sqlite3.cjs.gz +0 -0
  99. package/lib/cjs-es6/persisters/persister-yjs.cjs +1 -0
  100. package/lib/cjs-es6/persisters/persister-yjs.cjs.gz +0 -0
  101. package/lib/cjs-es6/persisters.cjs +1 -0
  102. package/lib/cjs-es6/persisters.cjs.gz +0 -0
  103. package/lib/cjs-es6/queries.cjs +1 -0
  104. package/lib/cjs-es6/queries.cjs.gz +0 -0
  105. package/lib/cjs-es6/relationships.cjs +1 -0
  106. package/lib/cjs-es6/relationships.cjs.gz +0 -0
  107. package/lib/cjs-es6/store.cjs +1 -0
  108. package/lib/cjs-es6/store.cjs.gz +0 -0
  109. package/lib/cjs-es6/tinybase.cjs +1 -0
  110. package/lib/cjs-es6/tinybase.cjs.gz +0 -0
  111. package/lib/cjs-es6/tools.cjs +1 -0
  112. package/lib/cjs-es6/tools.cjs.gz +0 -0
  113. package/lib/cjs-es6/ui-react-dom-debug.cjs +1 -0
  114. package/lib/cjs-es6/ui-react-dom-debug.cjs.gz +0 -0
  115. package/lib/cjs-es6/ui-react-dom.cjs +1 -0
  116. package/lib/cjs-es6/ui-react-dom.cjs.gz +0 -0
  117. package/lib/cjs-es6/ui-react.cjs +1 -0
  118. package/lib/cjs-es6/ui-react.cjs.gz +0 -0
  119. package/lib/common.js +1 -0
  120. package/lib/common.js.gz +0 -0
  121. package/lib/debug/checkpoints.js +412 -0
  122. package/lib/debug/common.js +4 -0
  123. package/lib/debug/indexes.js +544 -0
  124. package/lib/debug/metrics.js +516 -0
  125. package/lib/debug/persisters.js +183 -0
  126. package/lib/debug/queries.js +807 -0
  127. package/lib/debug/relationships.js +526 -0
  128. package/lib/debug/store.js +1602 -0
  129. package/lib/es6/checkpoints.js +1 -0
  130. package/lib/es6/checkpoints.js.gz +0 -0
  131. package/lib/es6/common.js +1 -0
  132. package/lib/es6/common.js.gz +0 -0
  133. package/lib/es6/indexes.js +1 -0
  134. package/lib/es6/indexes.js.gz +0 -0
  135. package/lib/es6/metrics.js +1 -0
  136. package/lib/es6/metrics.js.gz +0 -0
  137. package/lib/es6/persisters/persister-automerge.js +1 -0
  138. package/lib/es6/persisters/persister-automerge.js.gz +0 -0
  139. package/lib/es6/persisters/persister-browser.js +1 -0
  140. package/lib/es6/persisters/persister-browser.js.gz +0 -0
  141. package/lib/es6/persisters/persister-cr-sqlite-wasm.js +1 -0
  142. package/lib/es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  143. package/lib/es6/persisters/persister-electric-sql.js +1 -0
  144. package/lib/es6/persisters/persister-electric-sql.js.gz +0 -0
  145. package/lib/es6/persisters/persister-expo-sqlite-next.js +1 -0
  146. package/lib/es6/persisters/persister-expo-sqlite-next.js.gz +0 -0
  147. package/lib/es6/persisters/persister-expo-sqlite.js +1 -0
  148. package/lib/es6/persisters/persister-expo-sqlite.js.gz +0 -0
  149. package/lib/es6/persisters/persister-file.js +1 -0
  150. package/lib/es6/persisters/persister-file.js.gz +0 -0
  151. package/lib/es6/persisters/persister-indexed-db.js +1 -0
  152. package/lib/es6/persisters/persister-indexed-db.js.gz +0 -0
  153. package/lib/es6/persisters/persister-libsql.js +1 -0
  154. package/lib/es6/persisters/persister-libsql.js.gz +0 -0
  155. package/lib/es6/persisters/persister-partykit-client.js +1 -0
  156. package/lib/es6/persisters/persister-partykit-client.js.gz +0 -0
  157. package/lib/es6/persisters/persister-partykit-server.js +1 -0
  158. package/lib/es6/persisters/persister-partykit-server.js.gz +0 -0
  159. package/lib/es6/persisters/persister-powersync.js +1 -0
  160. package/lib/es6/persisters/persister-powersync.js.gz +0 -0
  161. package/lib/es6/persisters/persister-remote.js +1 -0
  162. package/lib/es6/persisters/persister-remote.js.gz +0 -0
  163. package/lib/es6/persisters/persister-sqlite-wasm.js +1 -0
  164. package/lib/es6/persisters/persister-sqlite-wasm.js.gz +0 -0
  165. package/lib/es6/persisters/persister-sqlite3.js +1 -0
  166. package/lib/es6/persisters/persister-sqlite3.js.gz +0 -0
  167. package/lib/es6/persisters/persister-yjs.js +1 -0
  168. package/lib/es6/persisters/persister-yjs.js.gz +0 -0
  169. package/lib/es6/persisters.js +1 -0
  170. package/lib/es6/persisters.js.gz +0 -0
  171. package/lib/es6/queries.js +1 -0
  172. package/lib/es6/queries.js.gz +0 -0
  173. package/lib/es6/relationships.js +1 -0
  174. package/lib/es6/relationships.js.gz +0 -0
  175. package/lib/es6/store.js +1 -0
  176. package/lib/es6/store.js.gz +0 -0
  177. package/lib/es6/tinybase.js +1 -0
  178. package/lib/es6/tinybase.js.gz +0 -0
  179. package/lib/es6/tools.js +1 -0
  180. package/lib/es6/tools.js.gz +0 -0
  181. package/lib/es6/ui-react-dom-debug.js +1 -0
  182. package/lib/es6/ui-react-dom-debug.js.gz +0 -0
  183. package/lib/es6/ui-react-dom.js +1 -0
  184. package/lib/es6/ui-react-dom.js.gz +0 -0
  185. package/lib/es6/ui-react.js +1 -0
  186. package/lib/es6/ui-react.js.gz +0 -0
  187. package/lib/indexes.js +1 -0
  188. package/lib/indexes.js.gz +0 -0
  189. package/lib/metrics.js +1 -0
  190. package/lib/metrics.js.gz +0 -0
  191. package/lib/persisters/persister-automerge.js +1 -0
  192. package/lib/persisters/persister-automerge.js.gz +0 -0
  193. package/lib/persisters/persister-browser.js +1 -0
  194. package/lib/persisters/persister-browser.js.gz +0 -0
  195. package/lib/persisters/persister-cr-sqlite-wasm.js +1 -0
  196. package/lib/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  197. package/lib/persisters/persister-electric-sql.js +1 -0
  198. package/lib/persisters/persister-electric-sql.js.gz +0 -0
  199. package/lib/persisters/persister-expo-sqlite-next.js +1 -0
  200. package/lib/persisters/persister-expo-sqlite-next.js.gz +0 -0
  201. package/lib/persisters/persister-expo-sqlite.js +1 -0
  202. package/lib/persisters/persister-expo-sqlite.js.gz +0 -0
  203. package/lib/persisters/persister-file.js +1 -0
  204. package/lib/persisters/persister-file.js.gz +0 -0
  205. package/lib/persisters/persister-indexed-db.js +1 -0
  206. package/lib/persisters/persister-indexed-db.js.gz +0 -0
  207. package/lib/persisters/persister-libsql.js +1 -0
  208. package/lib/persisters/persister-libsql.js.gz +0 -0
  209. package/lib/persisters/persister-partykit-client.js +1 -0
  210. package/lib/persisters/persister-partykit-client.js.gz +0 -0
  211. package/lib/persisters/persister-partykit-server.js +1 -0
  212. package/lib/persisters/persister-partykit-server.js.gz +0 -0
  213. package/lib/persisters/persister-powersync.js +1 -0
  214. package/lib/persisters/persister-powersync.js.gz +0 -0
  215. package/lib/persisters/persister-remote.js +1 -0
  216. package/lib/persisters/persister-remote.js.gz +0 -0
  217. package/lib/persisters/persister-sqlite-wasm.js +1 -0
  218. package/lib/persisters/persister-sqlite-wasm.js.gz +0 -0
  219. package/lib/persisters/persister-sqlite3.js +1 -0
  220. package/lib/persisters/persister-sqlite3.js.gz +0 -0
  221. package/lib/persisters/persister-yjs.js +1 -0
  222. package/lib/persisters/persister-yjs.js.gz +0 -0
  223. package/lib/persisters.js +1 -0
  224. package/lib/persisters.js.gz +0 -0
  225. package/lib/queries.js +1 -0
  226. package/lib/queries.js.gz +0 -0
  227. package/lib/relationships.js +1 -0
  228. package/lib/relationships.js.gz +0 -0
  229. package/lib/store.js +1 -0
  230. package/lib/store.js.gz +0 -0
  231. package/lib/tinybase.js +1 -0
  232. package/lib/tinybase.js.gz +0 -0
  233. package/lib/tools.js +1 -0
  234. package/lib/tools.js.gz +0 -0
  235. package/lib/ui-react-dom.js +1 -0
  236. package/lib/ui-react-dom.js.gz +0 -0
  237. package/lib/ui-react.js +1 -0
  238. package/lib/ui-react.js.gz +0 -0
  239. package/lib/umd/checkpoints.js +1 -0
  240. package/lib/umd/checkpoints.js.gz +0 -0
  241. package/lib/umd/common.js +1 -0
  242. package/lib/umd/common.js.gz +0 -0
  243. package/lib/umd/indexes.js +1 -0
  244. package/lib/umd/indexes.js.gz +0 -0
  245. package/lib/umd/metrics.js +1 -0
  246. package/lib/umd/metrics.js.gz +0 -0
  247. package/lib/umd/persisters/persister-automerge.js +1 -0
  248. package/lib/umd/persisters/persister-automerge.js.gz +0 -0
  249. package/lib/umd/persisters/persister-browser.js +1 -0
  250. package/lib/umd/persisters/persister-browser.js.gz +0 -0
  251. package/lib/umd/persisters/persister-cr-sqlite-wasm.js +1 -0
  252. package/lib/umd/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  253. package/lib/umd/persisters/persister-electric-sql.js +1 -0
  254. package/lib/umd/persisters/persister-electric-sql.js.gz +0 -0
  255. package/lib/umd/persisters/persister-expo-sqlite-next.js +1 -0
  256. package/lib/umd/persisters/persister-expo-sqlite-next.js.gz +0 -0
  257. package/lib/umd/persisters/persister-expo-sqlite.js +1 -0
  258. package/lib/umd/persisters/persister-expo-sqlite.js.gz +0 -0
  259. package/lib/umd/persisters/persister-file.js +1 -0
  260. package/lib/umd/persisters/persister-file.js.gz +0 -0
  261. package/lib/umd/persisters/persister-indexed-db.js +1 -0
  262. package/lib/umd/persisters/persister-indexed-db.js.gz +0 -0
  263. package/lib/umd/persisters/persister-libsql.js +1 -0
  264. package/lib/umd/persisters/persister-libsql.js.gz +0 -0
  265. package/lib/umd/persisters/persister-partykit-client.js +1 -0
  266. package/lib/umd/persisters/persister-partykit-client.js.gz +0 -0
  267. package/lib/umd/persisters/persister-partykit-server.js +1 -0
  268. package/lib/umd/persisters/persister-partykit-server.js.gz +0 -0
  269. package/lib/umd/persisters/persister-powersync.js +1 -0
  270. package/lib/umd/persisters/persister-powersync.js.gz +0 -0
  271. package/lib/umd/persisters/persister-remote.js +1 -0
  272. package/lib/umd/persisters/persister-remote.js.gz +0 -0
  273. package/lib/umd/persisters/persister-sqlite-wasm.js +1 -0
  274. package/lib/umd/persisters/persister-sqlite-wasm.js.gz +0 -0
  275. package/lib/umd/persisters/persister-sqlite3.js +1 -0
  276. package/lib/umd/persisters/persister-sqlite3.js.gz +0 -0
  277. package/lib/umd/persisters/persister-yjs.js +1 -0
  278. package/lib/umd/persisters/persister-yjs.js.gz +0 -0
  279. package/lib/umd/persisters.js +1 -0
  280. package/lib/umd/persisters.js.gz +0 -0
  281. package/lib/umd/queries.js +1 -0
  282. package/lib/umd/queries.js.gz +0 -0
  283. package/lib/umd/relationships.js +1 -0
  284. package/lib/umd/relationships.js.gz +0 -0
  285. package/lib/umd/store.js +1 -0
  286. package/lib/umd/store.js.gz +0 -0
  287. package/lib/umd/tinybase.js +1 -0
  288. package/lib/umd/tinybase.js.gz +0 -0
  289. package/lib/umd/tools.js +1 -0
  290. package/lib/umd/tools.js.gz +0 -0
  291. package/lib/umd/ui-react-dom-debug.js +1 -0
  292. package/lib/umd/ui-react-dom-debug.js.gz +0 -0
  293. package/lib/umd/ui-react-dom.js +1 -0
  294. package/lib/umd/ui-react-dom.js.gz +0 -0
  295. package/lib/umd/ui-react.js +1 -0
  296. package/lib/umd/ui-react.js.gz +0 -0
  297. package/lib/umd-es6/checkpoints.js +1 -0
  298. package/lib/umd-es6/checkpoints.js.gz +0 -0
  299. package/lib/umd-es6/common.js +1 -0
  300. package/lib/umd-es6/common.js.gz +0 -0
  301. package/lib/umd-es6/indexes.js +1 -0
  302. package/lib/umd-es6/indexes.js.gz +0 -0
  303. package/lib/umd-es6/metrics.js +1 -0
  304. package/lib/umd-es6/metrics.js.gz +0 -0
  305. package/lib/umd-es6/persisters/persister-automerge.js +1 -0
  306. package/lib/umd-es6/persisters/persister-automerge.js.gz +0 -0
  307. package/lib/umd-es6/persisters/persister-browser.js +1 -0
  308. package/lib/umd-es6/persisters/persister-browser.js.gz +0 -0
  309. package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js +1 -0
  310. package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  311. package/lib/umd-es6/persisters/persister-electric-sql.js +1 -0
  312. package/lib/umd-es6/persisters/persister-electric-sql.js.gz +0 -0
  313. package/lib/umd-es6/persisters/persister-expo-sqlite-next.js +1 -0
  314. package/lib/umd-es6/persisters/persister-expo-sqlite-next.js.gz +0 -0
  315. package/lib/umd-es6/persisters/persister-expo-sqlite.js +1 -0
  316. package/lib/umd-es6/persisters/persister-expo-sqlite.js.gz +0 -0
  317. package/lib/umd-es6/persisters/persister-file.js +1 -0
  318. package/lib/umd-es6/persisters/persister-file.js.gz +0 -0
  319. package/lib/umd-es6/persisters/persister-indexed-db.js +1 -0
  320. package/lib/umd-es6/persisters/persister-indexed-db.js.gz +0 -0
  321. package/lib/umd-es6/persisters/persister-libsql.js +1 -0
  322. package/lib/umd-es6/persisters/persister-libsql.js.gz +0 -0
  323. package/lib/umd-es6/persisters/persister-partykit-client.js +1 -0
  324. package/lib/umd-es6/persisters/persister-partykit-client.js.gz +0 -0
  325. package/lib/umd-es6/persisters/persister-partykit-server.js +1 -0
  326. package/lib/umd-es6/persisters/persister-partykit-server.js.gz +0 -0
  327. package/lib/umd-es6/persisters/persister-powersync.js +1 -0
  328. package/lib/umd-es6/persisters/persister-powersync.js.gz +0 -0
  329. package/lib/umd-es6/persisters/persister-remote.js +1 -0
  330. package/lib/umd-es6/persisters/persister-remote.js.gz +0 -0
  331. package/lib/umd-es6/persisters/persister-sqlite-wasm.js +1 -0
  332. package/lib/umd-es6/persisters/persister-sqlite-wasm.js.gz +0 -0
  333. package/lib/umd-es6/persisters/persister-sqlite3.js +1 -0
  334. package/lib/umd-es6/persisters/persister-sqlite3.js.gz +0 -0
  335. package/lib/umd-es6/persisters/persister-yjs.js +1 -0
  336. package/lib/umd-es6/persisters/persister-yjs.js.gz +0 -0
  337. package/lib/umd-es6/persisters.js +1 -0
  338. package/lib/umd-es6/persisters.js.gz +0 -0
  339. package/lib/umd-es6/queries.js +1 -0
  340. package/lib/umd-es6/queries.js.gz +0 -0
  341. package/lib/umd-es6/relationships.js +1 -0
  342. package/lib/umd-es6/relationships.js.gz +0 -0
  343. package/lib/umd-es6/store.js +1 -0
  344. package/lib/umd-es6/store.js.gz +0 -0
  345. package/lib/umd-es6/tinybase.js +1 -0
  346. package/lib/umd-es6/tinybase.js.gz +0 -0
  347. package/lib/umd-es6/tools.js +1 -0
  348. package/lib/umd-es6/tools.js.gz +0 -0
  349. package/lib/umd-es6/ui-react-dom-debug.js +1 -0
  350. package/lib/umd-es6/ui-react-dom-debug.js.gz +0 -0
  351. package/lib/umd-es6/ui-react-dom.js +1 -0
  352. package/lib/umd-es6/ui-react-dom.js.gz +0 -0
  353. package/lib/umd-es6/ui-react.js +1 -0
  354. package/lib/umd-es6/ui-react.js.gz +0 -0
  355. package/package.json +1 -1
  356. package/readme.md +2 -2
@@ -0,0 +1,516 @@
1
+ const getTypeOf = (thing) => typeof thing;
2
+ const EMPTY_STRING = '';
3
+ const STRING = getTypeOf(EMPTY_STRING);
4
+ const FUNCTION = getTypeOf(getTypeOf);
5
+ const SUM = 'sum';
6
+ const AVG = 'avg';
7
+ const MIN = 'min';
8
+ const MAX = 'max';
9
+
10
+ const mathMax = Math.max;
11
+ const mathMin = Math.min;
12
+ const isFiniteNumber = isFinite;
13
+ const isUndefined = (thing) => thing == void 0;
14
+ const ifNotUndefined = (value, then, otherwise) =>
15
+ isUndefined(value) ? otherwise?.() : then(value);
16
+ const isString = (thing) => getTypeOf(thing) == STRING;
17
+ const isFunction = (thing) => getTypeOf(thing) == FUNCTION;
18
+ const isArray = (thing) => Array.isArray(thing);
19
+ const size = (arrayOrString) => arrayOrString.length;
20
+ const test = (regex, subject) => regex.test(subject);
21
+ const getUndefined = () => void 0;
22
+
23
+ const arrayEvery = (array, cb) => array.every(cb);
24
+ const arrayIsEqual = (array1, array2) =>
25
+ size(array1) === size(array2) &&
26
+ arrayEvery(array1, (value1, index) => array2[index] === value1);
27
+ const arrayForEach = (array, cb) => array.forEach(cb);
28
+ const arraySum = (array) => arrayReduce(array, (i, j) => i + j, 0);
29
+ const arrayIsEmpty = (array) => size(array) == 0;
30
+ const arrayReduce = (array, cb, initial) => array.reduce(cb, initial);
31
+ const arrayPush = (array, ...values) => array.push(...values);
32
+ const arrayShift = (array) => array.shift();
33
+
34
+ const object = Object;
35
+ const objFreeze = object.freeze;
36
+
37
+ const collSizeN = (collSizer) => (coll) =>
38
+ arrayReduce(collValues(coll), (total, coll2) => total + collSizer(coll2), 0);
39
+ const collSize = (coll) => coll?.size ?? 0;
40
+ const collSize2 = collSizeN(collSize);
41
+ const collHas = (coll, keyOrValue) => coll?.has(keyOrValue) ?? false;
42
+ const collIsEmpty = (coll) => isUndefined(coll) || collSize(coll) == 0;
43
+ const collValues = (coll) => [...(coll?.values() ?? [])];
44
+ const collClear = (coll) => coll.clear();
45
+ const collForEach = (coll, cb) => coll?.forEach(cb);
46
+ const collDel = (coll, keyOrValue) => coll?.delete(keyOrValue);
47
+
48
+ const mapNew = (entries) => new Map(entries);
49
+ const mapKeys = (map) => [...(map?.keys() ?? [])];
50
+ const mapGet = (map, key) => map?.get(key);
51
+ const mapForEach = (map, cb) =>
52
+ collForEach(map, (value, key) => cb(key, value));
53
+ const mapSet = (map, key, value) =>
54
+ isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
55
+ const mapEnsure = (map, key, getDefaultValue) => {
56
+ if (!collHas(map, key)) {
57
+ mapSet(map, key, getDefaultValue());
58
+ }
59
+ return mapGet(map, key);
60
+ };
61
+ const visitTree = (node, path, ensureLeaf, pruneLeaf, p = 0) =>
62
+ ifNotUndefined(
63
+ (ensureLeaf ? mapEnsure : mapGet)(
64
+ node,
65
+ path[p],
66
+ p > size(path) - 2 ? ensureLeaf : mapNew,
67
+ ),
68
+ (nodeOrLeaf) => {
69
+ if (p > size(path) - 2) {
70
+ if (pruneLeaf?.(nodeOrLeaf)) {
71
+ mapSet(node, path[p]);
72
+ }
73
+ return nodeOrLeaf;
74
+ }
75
+ const leaf = visitTree(nodeOrLeaf, path, ensureLeaf, pruneLeaf, p + 1);
76
+ if (collIsEmpty(nodeOrLeaf)) {
77
+ mapSet(node, path[p]);
78
+ }
79
+ return leaf;
80
+ },
81
+ );
82
+
83
+ const numericAggregators = mapNew([
84
+ [
85
+ AVG,
86
+ [
87
+ (numbers, length) => arraySum(numbers) / length,
88
+ (metric, add, length) => metric + (add - metric) / (length + 1),
89
+ (metric, remove, length) => metric + (metric - remove) / (length - 1),
90
+ (metric, add, remove, length) => metric + (add - remove) / length,
91
+ ],
92
+ ],
93
+ [
94
+ MAX,
95
+ [
96
+ (numbers) => mathMax(...numbers),
97
+ (metric, add) => mathMax(add, metric),
98
+ (metric, remove) => (remove == metric ? void 0 : metric),
99
+ (metric, add, remove) =>
100
+ remove == metric ? void 0 : mathMax(add, metric),
101
+ ],
102
+ ],
103
+ [
104
+ MIN,
105
+ [
106
+ (numbers) => mathMin(...numbers),
107
+ (metric, add) => mathMin(add, metric),
108
+ (metric, remove) => (remove == metric ? void 0 : metric),
109
+ (metric, add, remove) =>
110
+ remove == metric ? void 0 : mathMin(add, metric),
111
+ ],
112
+ ],
113
+ [
114
+ SUM,
115
+ [
116
+ (numbers) => arraySum(numbers),
117
+ (metric, add) => metric + add,
118
+ (metric, remove) => metric - remove,
119
+ (metric, add, remove) => metric - remove + add,
120
+ ],
121
+ ],
122
+ ]);
123
+ const getAggregateValue = (
124
+ aggregateValue,
125
+ oldLength,
126
+ newValues,
127
+ changedValues,
128
+ aggregators,
129
+ force = false,
130
+ ) => {
131
+ if (collIsEmpty(newValues)) {
132
+ return void 0;
133
+ }
134
+ const [aggregate, aggregateAdd, aggregateRemove, aggregateReplace] =
135
+ aggregators;
136
+ force ||= isUndefined(aggregateValue);
137
+ collForEach(changedValues, ([oldValue, newValue]) => {
138
+ if (!force) {
139
+ aggregateValue = isUndefined(oldValue)
140
+ ? aggregateAdd?.(aggregateValue, newValue, oldLength++)
141
+ : isUndefined(newValue)
142
+ ? aggregateRemove?.(aggregateValue, oldValue, oldLength--)
143
+ : aggregateReplace?.(aggregateValue, newValue, oldValue, oldLength);
144
+ force ||= isUndefined(aggregateValue);
145
+ }
146
+ });
147
+ return force
148
+ ? aggregate(collValues(newValues), collSize(newValues))
149
+ : aggregateValue;
150
+ };
151
+
152
+ const setNew = (entryOrEntries) =>
153
+ new Set(
154
+ isArray(entryOrEntries) || isUndefined(entryOrEntries)
155
+ ? entryOrEntries
156
+ : [entryOrEntries],
157
+ );
158
+ const setAdd = (set, value) => set?.add(value);
159
+
160
+ const getDefinableFunctions = (
161
+ store,
162
+ getDefaultThing,
163
+ validateRowValue,
164
+ addListener,
165
+ callListeners,
166
+ ) => {
167
+ const hasRow = store.hasRow;
168
+ const tableIds = mapNew();
169
+ const things = mapNew();
170
+ const thingIdListeners = mapNew();
171
+ const allRowValues = mapNew();
172
+ const allSortKeys = mapNew();
173
+ const storeListenerIds = mapNew();
174
+ const getStore = () => store;
175
+ const getThingIds = () => mapKeys(tableIds);
176
+ const forEachThing = (cb) => mapForEach(things, cb);
177
+ const hasThing = (id) => collHas(things, id);
178
+ const getTableId = (id) => mapGet(tableIds, id);
179
+ const getThing = (id) => mapGet(things, id);
180
+ const setThing = (id, thing) => mapSet(things, id, thing);
181
+ const addStoreListeners = (id, andCall, ...listenerIds) => {
182
+ const set = mapEnsure(storeListenerIds, id, setNew);
183
+ arrayForEach(
184
+ listenerIds,
185
+ (listenerId) =>
186
+ setAdd(set, listenerId) && andCall && store.callListener(listenerId),
187
+ );
188
+ return listenerIds;
189
+ };
190
+ const delStoreListeners = (id, ...listenerIds) =>
191
+ ifNotUndefined(mapGet(storeListenerIds, id), (allListenerIds) => {
192
+ arrayForEach(
193
+ arrayIsEmpty(listenerIds) ? collValues(allListenerIds) : listenerIds,
194
+ (listenerId) => {
195
+ store.delListener(listenerId);
196
+ collDel(allListenerIds, listenerId);
197
+ },
198
+ );
199
+ if (collIsEmpty(allListenerIds)) {
200
+ mapSet(storeListenerIds, id);
201
+ }
202
+ });
203
+ const setDefinition = (id, tableId) => {
204
+ mapSet(tableIds, id, tableId);
205
+ if (!collHas(things, id)) {
206
+ mapSet(things, id, getDefaultThing());
207
+ mapSet(allRowValues, id, mapNew());
208
+ mapSet(allSortKeys, id, mapNew());
209
+ callListeners(thingIdListeners);
210
+ }
211
+ };
212
+ const setDefinitionAndListen = (
213
+ id,
214
+ tableId,
215
+ onChanged,
216
+ getRowValue,
217
+ getSortKey,
218
+ ) => {
219
+ setDefinition(id, tableId);
220
+ const changedRowValues = mapNew();
221
+ const changedSortKeys = mapNew();
222
+ const rowValues = mapGet(allRowValues, id);
223
+ const sortKeys = mapGet(allSortKeys, id);
224
+ const processRow = (rowId) => {
225
+ const getCell = (cellId) => store.getCell(tableId, rowId, cellId);
226
+ const oldRowValue = mapGet(rowValues, rowId);
227
+ const newRowValue = hasRow(tableId, rowId)
228
+ ? validateRowValue(getRowValue(getCell, rowId))
229
+ : void 0;
230
+ if (
231
+ !(
232
+ oldRowValue === newRowValue ||
233
+ (isArray(oldRowValue) &&
234
+ isArray(newRowValue) &&
235
+ arrayIsEqual(oldRowValue, newRowValue))
236
+ )
237
+ ) {
238
+ mapSet(changedRowValues, rowId, [oldRowValue, newRowValue]);
239
+ }
240
+ if (!isUndefined(getSortKey)) {
241
+ const oldSortKey = mapGet(sortKeys, rowId);
242
+ const newSortKey = hasRow(tableId, rowId)
243
+ ? getSortKey(getCell, rowId)
244
+ : void 0;
245
+ if (oldSortKey != newSortKey) {
246
+ mapSet(changedSortKeys, rowId, newSortKey);
247
+ }
248
+ }
249
+ };
250
+ const processTable = (force) => {
251
+ onChanged(
252
+ () => {
253
+ collForEach(changedRowValues, ([, newRowValue], rowId) =>
254
+ mapSet(rowValues, rowId, newRowValue),
255
+ );
256
+ collForEach(changedSortKeys, (newSortKey, rowId) =>
257
+ mapSet(sortKeys, rowId, newSortKey),
258
+ );
259
+ },
260
+ changedRowValues,
261
+ changedSortKeys,
262
+ rowValues,
263
+ sortKeys,
264
+ force,
265
+ );
266
+ collClear(changedRowValues);
267
+ collClear(changedSortKeys);
268
+ };
269
+ mapForEach(rowValues, processRow);
270
+ if (store.hasTable(tableId)) {
271
+ arrayForEach(store.getRowIds(tableId), (rowId) => {
272
+ if (!collHas(rowValues, rowId)) {
273
+ processRow(rowId);
274
+ }
275
+ });
276
+ }
277
+ processTable(true);
278
+ delStoreListeners(id);
279
+ addStoreListeners(
280
+ id,
281
+ 0,
282
+ store.addRowListener(tableId, null, (_store, _tableId, rowId) =>
283
+ processRow(rowId),
284
+ ),
285
+ store.addTableListener(tableId, () => processTable()),
286
+ );
287
+ };
288
+ const delDefinition = (id) => {
289
+ mapSet(tableIds, id);
290
+ mapSet(things, id);
291
+ mapSet(allRowValues, id);
292
+ mapSet(allSortKeys, id);
293
+ delStoreListeners(id);
294
+ callListeners(thingIdListeners);
295
+ };
296
+ const addThingIdsListener = (listener) =>
297
+ addListener(listener, thingIdListeners);
298
+ const destroy = () => mapForEach(storeListenerIds, delDefinition);
299
+ return [
300
+ getStore,
301
+ getThingIds,
302
+ forEachThing,
303
+ hasThing,
304
+ getTableId,
305
+ getThing,
306
+ setThing,
307
+ setDefinition,
308
+ setDefinitionAndListen,
309
+ delDefinition,
310
+ addThingIdsListener,
311
+ destroy,
312
+ addStoreListeners,
313
+ delStoreListeners,
314
+ ];
315
+ };
316
+ const getRowCellFunction = (getRowCell, defaultCellValue) =>
317
+ isString(getRowCell)
318
+ ? (getCell) => getCell(getRowCell)
319
+ : getRowCell ?? (() => defaultCellValue ?? EMPTY_STRING);
320
+ const getCreateFunction = (getFunction) => {
321
+ const getFunctionsByStore = /* @__PURE__ */ new WeakMap();
322
+ return (store) => {
323
+ if (!getFunctionsByStore.has(store)) {
324
+ getFunctionsByStore.set(store, getFunction(store));
325
+ }
326
+ return getFunctionsByStore.get(store);
327
+ };
328
+ };
329
+
330
+ const INTEGER = /^\d+$/;
331
+ const getPoolFunctions = () => {
332
+ const pool = [];
333
+ let nextId = 0;
334
+ return [
335
+ (reuse) => (reuse ? arrayShift(pool) : null) ?? EMPTY_STRING + nextId++,
336
+ (id) => {
337
+ if (test(INTEGER, id) && size(pool) < 1e3) {
338
+ arrayPush(pool, id);
339
+ }
340
+ },
341
+ ];
342
+ };
343
+
344
+ const getWildcardedLeaves = (deepIdSet, path = [EMPTY_STRING]) => {
345
+ const leaves = [];
346
+ const deep = (node, p) =>
347
+ p == size(path)
348
+ ? arrayPush(leaves, node)
349
+ : path[p] === null
350
+ ? collForEach(node, (node2) => deep(node2, p + 1))
351
+ : arrayForEach([path[p], null], (id) => deep(mapGet(node, id), p + 1));
352
+ deep(deepIdSet, 0);
353
+ return leaves;
354
+ };
355
+ const getListenerFunctions = (getThing) => {
356
+ let thing;
357
+ const [getId, releaseId] = getPoolFunctions();
358
+ const allListeners = mapNew();
359
+ const addListener = (
360
+ listener,
361
+ idSetNode,
362
+ path,
363
+ pathGetters = [],
364
+ extraArgsGetter = () => [],
365
+ ) => {
366
+ thing ??= getThing();
367
+ const id = getId(1);
368
+ mapSet(allListeners, id, [
369
+ listener,
370
+ idSetNode,
371
+ path,
372
+ pathGetters,
373
+ extraArgsGetter,
374
+ ]);
375
+ setAdd(visitTree(idSetNode, path ?? [EMPTY_STRING], setNew), id);
376
+ return id;
377
+ };
378
+ const callListeners = (idSetNode, ids, ...extraArgs) =>
379
+ arrayForEach(getWildcardedLeaves(idSetNode, ids), (set) =>
380
+ collForEach(set, (id) =>
381
+ mapGet(allListeners, id)[0](thing, ...(ids ?? []), ...extraArgs),
382
+ ),
383
+ );
384
+ const delListener = (id) =>
385
+ ifNotUndefined(mapGet(allListeners, id), ([, idSetNode, idOrNulls]) => {
386
+ visitTree(idSetNode, idOrNulls ?? [EMPTY_STRING], void 0, (idSet) => {
387
+ collDel(idSet, id);
388
+ return collIsEmpty(idSet) ? 1 : 0;
389
+ });
390
+ mapSet(allListeners, id);
391
+ releaseId(id);
392
+ return idOrNulls;
393
+ });
394
+ const callListener = (id) =>
395
+ ifNotUndefined(
396
+ mapGet(allListeners, id),
397
+ ([listener, , path = [], pathGetters, extraArgsGetter]) => {
398
+ const callWithIds = (...ids) => {
399
+ const index = size(ids);
400
+ index == size(path)
401
+ ? listener(thing, ...ids, ...extraArgsGetter(ids))
402
+ : isUndefined(path[index])
403
+ ? arrayForEach(pathGetters[index]?.(...ids) ?? [], (id2) =>
404
+ callWithIds(...ids, id2),
405
+ )
406
+ : callWithIds(...ids, path[index]);
407
+ };
408
+ callWithIds();
409
+ },
410
+ );
411
+ return [addListener, callListeners, delListener, callListener];
412
+ };
413
+
414
+ const createMetrics = getCreateFunction((store) => {
415
+ const metricListeners = mapNew();
416
+ const [addListener, callListeners, delListenerImpl] = getListenerFunctions(
417
+ () => metrics,
418
+ );
419
+ const [
420
+ getStore,
421
+ getMetricIds,
422
+ forEachMetric,
423
+ hasMetric,
424
+ getTableId,
425
+ getMetric,
426
+ setMetric,
427
+ ,
428
+ setDefinitionAndListen,
429
+ delDefinition,
430
+ addMetricIdsListener,
431
+ destroy,
432
+ ] = getDefinableFunctions(
433
+ store,
434
+ getUndefined,
435
+ (value) =>
436
+ isNaN(value) ||
437
+ isUndefined(value) ||
438
+ value === true ||
439
+ value === false ||
440
+ value === EMPTY_STRING
441
+ ? void 0
442
+ : value * 1,
443
+ addListener,
444
+ callListeners,
445
+ );
446
+ const setMetricDefinition = (
447
+ metricId,
448
+ tableId,
449
+ aggregate,
450
+ getNumber,
451
+ aggregateAdd,
452
+ aggregateRemove,
453
+ aggregateReplace,
454
+ ) => {
455
+ const aggregators = isFunction(aggregate)
456
+ ? [aggregate, aggregateAdd, aggregateRemove, aggregateReplace]
457
+ : mapGet(numericAggregators, aggregate) ??
458
+ mapGet(numericAggregators, SUM);
459
+ setDefinitionAndListen(
460
+ metricId,
461
+ tableId,
462
+ (change, changedNumbers, _changedSortKeys, numbers, _sortKeys, force) => {
463
+ const oldMetric = getMetric(metricId);
464
+ const oldLength = collSize(numbers);
465
+ force ||= isUndefined(oldMetric);
466
+ change();
467
+ let newMetric = getAggregateValue(
468
+ oldMetric,
469
+ oldLength,
470
+ numbers,
471
+ changedNumbers,
472
+ aggregators,
473
+ force,
474
+ );
475
+ if (!isFiniteNumber(newMetric)) {
476
+ newMetric = void 0;
477
+ }
478
+ if (newMetric != oldMetric) {
479
+ setMetric(metricId, newMetric);
480
+ callListeners(metricListeners, [metricId], newMetric, oldMetric);
481
+ }
482
+ },
483
+ getRowCellFunction(getNumber, 1),
484
+ );
485
+ return metrics;
486
+ };
487
+ const delMetricDefinition = (metricId) => {
488
+ delDefinition(metricId);
489
+ return metrics;
490
+ };
491
+ const addMetricListener = (metricId, listener) =>
492
+ addListener(listener, metricListeners, [metricId]);
493
+ const delListener = (listenerId) => {
494
+ delListenerImpl(listenerId);
495
+ return metrics;
496
+ };
497
+ const getListenerStats = () => ({metric: collSize2(metricListeners)});
498
+ const metrics = {
499
+ setMetricDefinition,
500
+ delMetricDefinition,
501
+ getStore,
502
+ getMetricIds,
503
+ forEachMetric,
504
+ hasMetric,
505
+ getTableId,
506
+ getMetric,
507
+ addMetricIdsListener,
508
+ addMetricListener,
509
+ delListener,
510
+ destroy,
511
+ getListenerStats,
512
+ };
513
+ return objFreeze(metrics);
514
+ });
515
+
516
+ export {createMetrics};
@@ -0,0 +1,183 @@
1
+ const isUndefined = (thing) => thing == void 0;
2
+ const ifNotUndefined = (value, then, otherwise) =>
3
+ isUndefined(value) ? otherwise?.() : then(value);
4
+ const size = (arrayOrString) => arrayOrString.length;
5
+
6
+ const arrayPush = (array, ...values) => array.push(...values);
7
+ const arrayShift = (array) => array.shift();
8
+
9
+ const object = Object;
10
+ const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
11
+ const objIds = object.keys;
12
+ const objFreeze = object.freeze;
13
+ const isObject = (obj) =>
14
+ !isUndefined(obj) &&
15
+ ifNotUndefined(
16
+ getPrototypeOf(obj),
17
+ (objPrototype) =>
18
+ objPrototype == object.prototype ||
19
+ isUndefined(getPrototypeOf(objPrototype)),
20
+ () => true,
21
+ );
22
+ const objSize = (obj) => size(objIds(obj));
23
+ const objIsEmpty = (obj) => isObject(obj) && objSize(obj) == 0;
24
+
25
+ const collHas = (coll, keyOrValue) => coll?.has(keyOrValue) ?? false;
26
+ const collDel = (coll, keyOrValue) => coll?.delete(keyOrValue);
27
+
28
+ const mapNew = (entries) => new Map(entries);
29
+ const mapGet = (map, key) => map?.get(key);
30
+ const mapSet = (map, key, value) =>
31
+ isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
32
+ const mapEnsure = (map, key, getDefaultValue) => {
33
+ if (!collHas(map, key)) {
34
+ mapSet(map, key, getDefaultValue());
35
+ }
36
+ return mapGet(map, key);
37
+ };
38
+
39
+ const scheduleRunning = mapNew();
40
+ const scheduleActions = mapNew();
41
+ const createCustomPersister = (
42
+ store,
43
+ getPersisted,
44
+ setPersisted,
45
+ addPersisterListener,
46
+ delPersisterListener,
47
+ onIgnoredError,
48
+ [getThing, thing] = [],
49
+ scheduleId = [],
50
+ ) => {
51
+ let listenerId;
52
+ let loadSave = 0;
53
+ let loads = 0;
54
+ let saves = 0;
55
+ let listening = 0;
56
+ let action;
57
+ let listeningHandle;
58
+ mapEnsure(scheduleRunning, scheduleId, () => 0);
59
+ mapEnsure(scheduleActions, scheduleId, () => []);
60
+ const run = async () => {
61
+ /* istanbul ignore else */
62
+ if (!mapGet(scheduleRunning, scheduleId)) {
63
+ mapSet(scheduleRunning, scheduleId, 1);
64
+ while (
65
+ !isUndefined((action = arrayShift(mapGet(scheduleActions, scheduleId))))
66
+ ) {
67
+ try {
68
+ await action();
69
+ } catch (error) {
70
+ /* istanbul ignore next */
71
+ onIgnoredError?.(error);
72
+ }
73
+ }
74
+ mapSet(scheduleRunning, scheduleId, 0);
75
+ }
76
+ };
77
+ const loadLock = async (actions) => {
78
+ /* istanbul ignore else */
79
+ if (loadSave != 2) {
80
+ loadSave = 1;
81
+ {
82
+ loads++;
83
+ }
84
+ await persister.schedule(async () => {
85
+ await actions();
86
+ loadSave = 0;
87
+ });
88
+ }
89
+ return persister;
90
+ };
91
+ const persister = {
92
+ load: async (initialTables, initialValues) =>
93
+ await loadLock(async () => {
94
+ try {
95
+ store.setContent(await getPersisted());
96
+ } catch {
97
+ store.setContent([initialTables, initialValues]);
98
+ }
99
+ }),
100
+ startAutoLoad: async (initialTables = {}, initialValues = {}) => {
101
+ persister.stopAutoLoad();
102
+ await persister.load(initialTables, initialValues);
103
+ listening = 1;
104
+ listeningHandle = addPersisterListener(
105
+ async (getContent, getTransactionChanges) => {
106
+ if (getTransactionChanges) {
107
+ const transactionChanges = getTransactionChanges();
108
+ await loadLock(async () =>
109
+ store.setTransactionChanges(transactionChanges),
110
+ );
111
+ } else {
112
+ await loadLock(async () => {
113
+ try {
114
+ store.setContent(getContent?.() ?? (await getPersisted()));
115
+ } catch (error) {
116
+ onIgnoredError?.(error);
117
+ }
118
+ });
119
+ }
120
+ },
121
+ );
122
+ return persister;
123
+ },
124
+ stopAutoLoad: () => {
125
+ if (listening) {
126
+ delPersisterListener(listeningHandle);
127
+ listeningHandle = void 0;
128
+ listening = 0;
129
+ }
130
+ return persister;
131
+ },
132
+ save: async (getTransactionChanges) => {
133
+ /* istanbul ignore else */
134
+ if (loadSave != 1) {
135
+ loadSave = 2;
136
+ {
137
+ saves++;
138
+ }
139
+ await persister.schedule(async () => {
140
+ try {
141
+ await setPersisted(store.getContent, getTransactionChanges);
142
+ } catch (error) {
143
+ /* istanbul ignore next */
144
+ onIgnoredError?.(error);
145
+ }
146
+ loadSave = 0;
147
+ });
148
+ }
149
+ return persister;
150
+ },
151
+ startAutoSave: async () => {
152
+ await persister.stopAutoSave().save();
153
+ listenerId = store.addDidFinishTransactionListener(
154
+ (_store, getTransactionChanges) => {
155
+ const [tableChanges, valueChanges] = getTransactionChanges();
156
+ if (!objIsEmpty(tableChanges) || !objIsEmpty(valueChanges)) {
157
+ persister.save(() => [tableChanges, valueChanges]);
158
+ }
159
+ },
160
+ );
161
+ return persister;
162
+ },
163
+ stopAutoSave: () => {
164
+ ifNotUndefined(listenerId, store.delListener);
165
+ listenerId = void 0;
166
+ return persister;
167
+ },
168
+ schedule: async (...actions) => {
169
+ arrayPush(mapGet(scheduleActions, scheduleId), ...actions);
170
+ await run();
171
+ return persister;
172
+ },
173
+ getStore: () => store,
174
+ destroy: () => persister.stopAutoLoad().stopAutoSave(),
175
+ getStats: () => ({loads, saves}),
176
+ };
177
+ if (getThing) {
178
+ persister[getThing] = () => thing;
179
+ }
180
+ return objFreeze(persister);
181
+ };
182
+
183
+ export {createCustomPersister};