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,807 @@
1
+ const getTypeOf = (thing) => typeof thing;
2
+ const EMPTY_STRING = '';
3
+ const STRING = getTypeOf(EMPTY_STRING);
4
+ const BOOLEAN = getTypeOf(true);
5
+ const NUMBER = getTypeOf(0);
6
+ const FUNCTION = getTypeOf(getTypeOf);
7
+ const SUM = 'sum';
8
+ const AVG = 'avg';
9
+ const MIN = 'min';
10
+ const MAX = 'max';
11
+ const LISTENER = 'Listener';
12
+ const RESULT = 'Result';
13
+ const GET = 'get';
14
+ const ADD = 'add';
15
+ const IDS = 'Ids';
16
+ const TABLE = 'Table';
17
+ const ROW = 'Row';
18
+ const ROW_COUNT = ROW + 'Count';
19
+ const ROW_IDS = ROW + IDS;
20
+ const SORTED_ROW_IDS = 'Sorted' + ROW + IDS;
21
+ const CELL = 'Cell';
22
+ const CELL_IDS = CELL + IDS;
23
+
24
+ const mathMax = Math.max;
25
+ const mathMin = Math.min;
26
+ const isFiniteNumber = isFinite;
27
+ const isUndefined = (thing) => thing == void 0;
28
+ const ifNotUndefined = (value, then, otherwise) =>
29
+ isUndefined(value) ? otherwise?.() : then(value);
30
+ const isTypeStringOrBoolean = (type) => type == STRING || type == BOOLEAN;
31
+ const isFunction = (thing) => getTypeOf(thing) == FUNCTION;
32
+ const isArray = (thing) => Array.isArray(thing);
33
+ const slice = (arrayOrString, start, end) => arrayOrString.slice(start, end);
34
+ const size = (arrayOrString) => arrayOrString.length;
35
+ const getUndefined = () => void 0;
36
+
37
+ const arrayEvery = (array, cb) => array.every(cb);
38
+ const arrayIsEqual = (array1, array2) =>
39
+ size(array1) === size(array2) &&
40
+ arrayEvery(array1, (value1, index) => array2[index] === value1);
41
+ const arrayForEach = (array, cb) => array.forEach(cb);
42
+ const arrayMap = (array, cb) => array.map(cb);
43
+ const arraySum = (array) => arrayReduce(array, (i, j) => i + j, 0);
44
+ const arrayIsEmpty = (array) => size(array) == 0;
45
+ const arrayReduce = (array, cb, initial) => array.reduce(cb, initial);
46
+ const arrayPush = (array, ...values) => array.push(...values);
47
+
48
+ const object = Object;
49
+ const objFreeze = object.freeze;
50
+ const objMap = (obj, cb) =>
51
+ arrayMap(object.entries(obj), ([id, value]) => cb(value, id));
52
+
53
+ const collSize = (coll) => coll?.size ?? 0;
54
+ const collHas = (coll, keyOrValue) => coll?.has(keyOrValue) ?? false;
55
+ const collIsEmpty = (coll) => isUndefined(coll) || collSize(coll) == 0;
56
+ const collValues = (coll) => [...(coll?.values() ?? [])];
57
+ const collClear = (coll) => coll.clear();
58
+ const collForEach = (coll, cb) => coll?.forEach(cb);
59
+ const collDel = (coll, keyOrValue) => coll?.delete(keyOrValue);
60
+
61
+ const mapNew = (entries) => new Map(entries);
62
+ const mapKeys = (map) => [...(map?.keys() ?? [])];
63
+ const mapGet = (map, key) => map?.get(key);
64
+ const mapForEach = (map, cb) =>
65
+ collForEach(map, (value, key) => cb(key, value));
66
+ const mapSet = (map, key, value) =>
67
+ isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
68
+ const mapEnsure = (map, key, getDefaultValue) => {
69
+ if (!collHas(map, key)) {
70
+ mapSet(map, key, getDefaultValue());
71
+ }
72
+ return mapGet(map, key);
73
+ };
74
+ const visitTree = (node, path, ensureLeaf, pruneLeaf, p = 0) =>
75
+ ifNotUndefined(
76
+ (ensureLeaf ? mapEnsure : mapGet)(
77
+ node,
78
+ path[p],
79
+ p > size(path) - 2 ? ensureLeaf : mapNew,
80
+ ),
81
+ (nodeOrLeaf) => {
82
+ if (p > size(path) - 2) {
83
+ if (pruneLeaf?.(nodeOrLeaf)) {
84
+ mapSet(node, path[p]);
85
+ }
86
+ return nodeOrLeaf;
87
+ }
88
+ const leaf = visitTree(nodeOrLeaf, path, ensureLeaf, pruneLeaf, p + 1);
89
+ if (collIsEmpty(nodeOrLeaf)) {
90
+ mapSet(node, path[p]);
91
+ }
92
+ return leaf;
93
+ },
94
+ );
95
+
96
+ const setNew = (entryOrEntries) =>
97
+ new Set(
98
+ isArray(entryOrEntries) || isUndefined(entryOrEntries)
99
+ ? entryOrEntries
100
+ : [entryOrEntries],
101
+ );
102
+ const setAdd = (set, value) => set?.add(value);
103
+
104
+ const numericAggregators = mapNew([
105
+ [
106
+ AVG,
107
+ [
108
+ (numbers, length) => arraySum(numbers) / length,
109
+ (metric, add, length) => metric + (add - metric) / (length + 1),
110
+ (metric, remove, length) => metric + (metric - remove) / (length - 1),
111
+ (metric, add, remove, length) => metric + (add - remove) / length,
112
+ ],
113
+ ],
114
+ [
115
+ MAX,
116
+ [
117
+ (numbers) => mathMax(...numbers),
118
+ (metric, add) => mathMax(add, metric),
119
+ (metric, remove) => (remove == metric ? void 0 : metric),
120
+ (metric, add, remove) =>
121
+ remove == metric ? void 0 : mathMax(add, metric),
122
+ ],
123
+ ],
124
+ [
125
+ MIN,
126
+ [
127
+ (numbers) => mathMin(...numbers),
128
+ (metric, add) => mathMin(add, metric),
129
+ (metric, remove) => (remove == metric ? void 0 : metric),
130
+ (metric, add, remove) =>
131
+ remove == metric ? void 0 : mathMin(add, metric),
132
+ ],
133
+ ],
134
+ [
135
+ SUM,
136
+ [
137
+ (numbers) => arraySum(numbers),
138
+ (metric, add) => metric + add,
139
+ (metric, remove) => metric - remove,
140
+ (metric, add, remove) => metric - remove + add,
141
+ ],
142
+ ],
143
+ ]);
144
+ const getAggregateValue = (
145
+ aggregateValue,
146
+ oldLength,
147
+ newValues,
148
+ changedValues,
149
+ aggregators,
150
+ force = false,
151
+ ) => {
152
+ if (collIsEmpty(newValues)) {
153
+ return void 0;
154
+ }
155
+ const [aggregate, aggregateAdd, aggregateRemove, aggregateReplace] =
156
+ aggregators;
157
+ force ||= isUndefined(aggregateValue);
158
+ collForEach(changedValues, ([oldValue, newValue]) => {
159
+ if (!force) {
160
+ aggregateValue = isUndefined(oldValue)
161
+ ? aggregateAdd?.(aggregateValue, newValue, oldLength++)
162
+ : isUndefined(newValue)
163
+ ? aggregateRemove?.(aggregateValue, oldValue, oldLength--)
164
+ : aggregateReplace?.(aggregateValue, newValue, oldValue, oldLength);
165
+ force ||= isUndefined(aggregateValue);
166
+ }
167
+ });
168
+ return force
169
+ ? aggregate(collValues(newValues), collSize(newValues))
170
+ : aggregateValue;
171
+ };
172
+
173
+ const getCellOrValueType = (cell) => {
174
+ const type = getTypeOf(cell);
175
+ return isTypeStringOrBoolean(type) || (type == NUMBER && isFiniteNumber(cell))
176
+ ? type
177
+ : void 0;
178
+ };
179
+ const setOrDelCell = (store, tableId, rowId, cellId, cell) =>
180
+ isUndefined(cell)
181
+ ? store.delCell(tableId, rowId, cellId, true)
182
+ : store.setCell(tableId, rowId, cellId, cell);
183
+
184
+ const getDefinableFunctions = (
185
+ store,
186
+ getDefaultThing,
187
+ validateRowValue,
188
+ addListener,
189
+ callListeners,
190
+ ) => {
191
+ const hasRow = store.hasRow;
192
+ const tableIds = mapNew();
193
+ const things = mapNew();
194
+ const thingIdListeners = mapNew();
195
+ const allRowValues = mapNew();
196
+ const allSortKeys = mapNew();
197
+ const storeListenerIds = mapNew();
198
+ const getStore = () => store;
199
+ const getThingIds = () => mapKeys(tableIds);
200
+ const forEachThing = (cb) => mapForEach(things, cb);
201
+ const hasThing = (id) => collHas(things, id);
202
+ const getTableId = (id) => mapGet(tableIds, id);
203
+ const getThing = (id) => mapGet(things, id);
204
+ const setThing = (id, thing) => mapSet(things, id, thing);
205
+ const addStoreListeners = (id, andCall, ...listenerIds) => {
206
+ const set = mapEnsure(storeListenerIds, id, setNew);
207
+ arrayForEach(
208
+ listenerIds,
209
+ (listenerId) =>
210
+ setAdd(set, listenerId) && andCall && store.callListener(listenerId),
211
+ );
212
+ return listenerIds;
213
+ };
214
+ const delStoreListeners = (id, ...listenerIds) =>
215
+ ifNotUndefined(mapGet(storeListenerIds, id), (allListenerIds) => {
216
+ arrayForEach(
217
+ arrayIsEmpty(listenerIds) ? collValues(allListenerIds) : listenerIds,
218
+ (listenerId) => {
219
+ store.delListener(listenerId);
220
+ collDel(allListenerIds, listenerId);
221
+ },
222
+ );
223
+ if (collIsEmpty(allListenerIds)) {
224
+ mapSet(storeListenerIds, id);
225
+ }
226
+ });
227
+ const setDefinition = (id, tableId) => {
228
+ mapSet(tableIds, id, tableId);
229
+ if (!collHas(things, id)) {
230
+ mapSet(things, id, getDefaultThing());
231
+ mapSet(allRowValues, id, mapNew());
232
+ mapSet(allSortKeys, id, mapNew());
233
+ callListeners(thingIdListeners);
234
+ }
235
+ };
236
+ const setDefinitionAndListen = (
237
+ id,
238
+ tableId,
239
+ onChanged,
240
+ getRowValue,
241
+ getSortKey,
242
+ ) => {
243
+ setDefinition(id, tableId);
244
+ const changedRowValues = mapNew();
245
+ const changedSortKeys = mapNew();
246
+ const rowValues = mapGet(allRowValues, id);
247
+ const sortKeys = mapGet(allSortKeys, id);
248
+ const processRow = (rowId) => {
249
+ const getCell = (cellId) => store.getCell(tableId, rowId, cellId);
250
+ const oldRowValue = mapGet(rowValues, rowId);
251
+ const newRowValue = hasRow(tableId, rowId)
252
+ ? validateRowValue(getRowValue(getCell, rowId))
253
+ : void 0;
254
+ if (
255
+ !(
256
+ oldRowValue === newRowValue ||
257
+ (isArray(oldRowValue) &&
258
+ isArray(newRowValue) &&
259
+ arrayIsEqual(oldRowValue, newRowValue))
260
+ )
261
+ ) {
262
+ mapSet(changedRowValues, rowId, [oldRowValue, newRowValue]);
263
+ }
264
+ if (!isUndefined(getSortKey)) {
265
+ const oldSortKey = mapGet(sortKeys, rowId);
266
+ const newSortKey = hasRow(tableId, rowId)
267
+ ? getSortKey(getCell, rowId)
268
+ : void 0;
269
+ if (oldSortKey != newSortKey) {
270
+ mapSet(changedSortKeys, rowId, newSortKey);
271
+ }
272
+ }
273
+ };
274
+ const processTable = (force) => {
275
+ onChanged(
276
+ () => {
277
+ collForEach(changedRowValues, ([, newRowValue], rowId) =>
278
+ mapSet(rowValues, rowId, newRowValue),
279
+ );
280
+ collForEach(changedSortKeys, (newSortKey, rowId) =>
281
+ mapSet(sortKeys, rowId, newSortKey),
282
+ );
283
+ },
284
+ changedRowValues,
285
+ changedSortKeys,
286
+ rowValues,
287
+ sortKeys,
288
+ force,
289
+ );
290
+ collClear(changedRowValues);
291
+ collClear(changedSortKeys);
292
+ };
293
+ mapForEach(rowValues, processRow);
294
+ if (store.hasTable(tableId)) {
295
+ arrayForEach(store.getRowIds(tableId), (rowId) => {
296
+ if (!collHas(rowValues, rowId)) {
297
+ processRow(rowId);
298
+ }
299
+ });
300
+ }
301
+ processTable(true);
302
+ delStoreListeners(id);
303
+ addStoreListeners(
304
+ id,
305
+ 0,
306
+ store.addRowListener(tableId, null, (_store, _tableId, rowId) =>
307
+ processRow(rowId),
308
+ ),
309
+ store.addTableListener(tableId, () => processTable()),
310
+ );
311
+ };
312
+ const delDefinition = (id) => {
313
+ mapSet(tableIds, id);
314
+ mapSet(things, id);
315
+ mapSet(allRowValues, id);
316
+ mapSet(allSortKeys, id);
317
+ delStoreListeners(id);
318
+ callListeners(thingIdListeners);
319
+ };
320
+ const addThingIdsListener = (listener) =>
321
+ addListener(listener, thingIdListeners);
322
+ const destroy = () => mapForEach(storeListenerIds, delDefinition);
323
+ return [
324
+ getStore,
325
+ getThingIds,
326
+ forEachThing,
327
+ hasThing,
328
+ getTableId,
329
+ getThing,
330
+ setThing,
331
+ setDefinition,
332
+ setDefinitionAndListen,
333
+ delDefinition,
334
+ addThingIdsListener,
335
+ destroy,
336
+ addStoreListeners,
337
+ delStoreListeners,
338
+ ];
339
+ };
340
+ const getCreateFunction = (getFunction) => {
341
+ const getFunctionsByStore = /* @__PURE__ */ new WeakMap();
342
+ return (store) => {
343
+ if (!getFunctionsByStore.has(store)) {
344
+ getFunctionsByStore.set(store, getFunction(store));
345
+ }
346
+ return getFunctionsByStore.get(store);
347
+ };
348
+ };
349
+
350
+ const createQueries = getCreateFunction((store) => {
351
+ const createStore = store.createStore;
352
+ const preStore = createStore();
353
+ const resultStore = createStore();
354
+ const preStoreListenerIds = mapNew();
355
+ const {
356
+ addListener,
357
+ callListeners,
358
+ delListener: delListenerImpl,
359
+ } = resultStore;
360
+ const [
361
+ getStore,
362
+ getQueryIds,
363
+ forEachQuery,
364
+ hasQuery,
365
+ getTableId,
366
+ ,
367
+ ,
368
+ setDefinition,
369
+ ,
370
+ delDefinition,
371
+ addQueryIdsListenerImpl,
372
+ destroy,
373
+ addStoreListeners,
374
+ delStoreListeners,
375
+ ] = getDefinableFunctions(
376
+ store,
377
+ () => true,
378
+ getUndefined,
379
+ addListener,
380
+ callListeners,
381
+ );
382
+ const addPreStoreListener = (preStore2, queryId, ...listenerIds) =>
383
+ arrayForEach(listenerIds, (listenerId) =>
384
+ setAdd(
385
+ mapEnsure(
386
+ mapEnsure(preStoreListenerIds, queryId, mapNew),
387
+ preStore2,
388
+ setNew,
389
+ ),
390
+ listenerId,
391
+ ),
392
+ );
393
+ const resetPreStores = (queryId) => {
394
+ ifNotUndefined(
395
+ mapGet(preStoreListenerIds, queryId),
396
+ (queryPreStoreListenerIds) => {
397
+ mapForEach(queryPreStoreListenerIds, (preStore2, listenerIds) =>
398
+ collForEach(listenerIds, (listenerId) =>
399
+ preStore2.delListener(listenerId),
400
+ ),
401
+ );
402
+ collClear(queryPreStoreListenerIds);
403
+ },
404
+ );
405
+ arrayForEach([resultStore, preStore], (store2) => store2.delTable(queryId));
406
+ };
407
+ const synchronizeTransactions = (queryId, fromStore, toStore) =>
408
+ addPreStoreListener(
409
+ fromStore,
410
+ queryId,
411
+ fromStore.addStartTransactionListener(toStore.startTransaction),
412
+ fromStore.addDidFinishTransactionListener(() =>
413
+ toStore.finishTransaction(),
414
+ ),
415
+ );
416
+ const setQueryDefinition = (queryId, tableId, build) => {
417
+ setDefinition(queryId, tableId);
418
+ resetPreStores(queryId);
419
+ const selectEntries = [];
420
+ const joinEntries = [[null, [tableId, null, null, [], mapNew()]]];
421
+ const wheres = [];
422
+ const groupEntries = [];
423
+ const havings = [];
424
+ const select = (arg1, arg2) => {
425
+ const selectEntry = isFunction(arg1)
426
+ ? [size(selectEntries) + EMPTY_STRING, arg1]
427
+ : [
428
+ isUndefined(arg2) ? arg1 : arg2,
429
+ (getTableCell) => getTableCell(arg1, arg2),
430
+ ];
431
+ arrayPush(selectEntries, selectEntry);
432
+ return {as: (selectedCellId) => (selectEntry[0] = selectedCellId)};
433
+ };
434
+ const join = (joinedTableId, arg1, arg2) => {
435
+ const fromIntermediateJoinedTableId =
436
+ isUndefined(arg2) || isFunction(arg1) ? null : arg1;
437
+ const onArg = isUndefined(fromIntermediateJoinedTableId) ? arg1 : arg2;
438
+ const joinEntry = [
439
+ joinedTableId,
440
+ [
441
+ joinedTableId,
442
+ fromIntermediateJoinedTableId,
443
+ isFunction(onArg) ? onArg : (getCell) => getCell(onArg),
444
+ [],
445
+ mapNew(),
446
+ ],
447
+ ];
448
+ arrayPush(joinEntries, joinEntry);
449
+ return {as: (joinedTableId2) => (joinEntry[0] = joinedTableId2)};
450
+ };
451
+ const where = (arg1, arg2, arg3) =>
452
+ arrayPush(
453
+ wheres,
454
+ isFunction(arg1)
455
+ ? arg1
456
+ : isUndefined(arg3)
457
+ ? (getTableCell) => getTableCell(arg1) === arg2
458
+ : (getTableCell) => getTableCell(arg1, arg2) === arg3,
459
+ );
460
+ const group = (
461
+ selectedCellId,
462
+ aggregate,
463
+ aggregateAdd,
464
+ aggregateRemove,
465
+ aggregateReplace,
466
+ ) => {
467
+ const groupEntry = [
468
+ selectedCellId,
469
+ [
470
+ selectedCellId,
471
+ isFunction(aggregate)
472
+ ? [aggregate, aggregateAdd, aggregateRemove, aggregateReplace]
473
+ : mapGet(numericAggregators, aggregate) ?? [
474
+ (_cells, length) => length,
475
+ ],
476
+ ],
477
+ ];
478
+ arrayPush(groupEntries, groupEntry);
479
+ return {as: (groupedCellId) => (groupEntry[0] = groupedCellId)};
480
+ };
481
+ const having = (arg1, arg2) =>
482
+ arrayPush(
483
+ havings,
484
+ isFunction(arg1)
485
+ ? arg1
486
+ : (getSelectedOrGroupedCell) =>
487
+ getSelectedOrGroupedCell(arg1) === arg2,
488
+ );
489
+ build({select, join, where, group, having});
490
+ const selects = mapNew(selectEntries);
491
+ if (collIsEmpty(selects)) {
492
+ return queries;
493
+ }
494
+ const joins = mapNew(joinEntries);
495
+ mapForEach(joins, (asTableId, [, fromAsTableId]) =>
496
+ ifNotUndefined(mapGet(joins, fromAsTableId), ({3: toAsTableIds}) =>
497
+ isUndefined(asTableId) ? 0 : arrayPush(toAsTableIds, asTableId),
498
+ ),
499
+ );
500
+ const groups = mapNew(groupEntries);
501
+ let selectJoinWhereStore = preStore;
502
+ if (collIsEmpty(groups) && arrayIsEmpty(havings)) {
503
+ selectJoinWhereStore = resultStore;
504
+ } else {
505
+ synchronizeTransactions(queryId, selectJoinWhereStore, resultStore);
506
+ const groupedSelectedCellIds = mapNew();
507
+ mapForEach(groups, (groupedCellId, [selectedCellId, aggregators]) =>
508
+ setAdd(mapEnsure(groupedSelectedCellIds, selectedCellId, setNew), [
509
+ groupedCellId,
510
+ aggregators,
511
+ ]),
512
+ );
513
+ const groupBySelectedCellIds = setNew();
514
+ mapForEach(selects, (selectedCellId) =>
515
+ collHas(groupedSelectedCellIds, selectedCellId)
516
+ ? 0
517
+ : setAdd(groupBySelectedCellIds, selectedCellId),
518
+ );
519
+ const tree = mapNew();
520
+ const writeGroupRow = (
521
+ leaf,
522
+ changedGroupedSelectedCells,
523
+ selectedRowId,
524
+ forceRemove,
525
+ ) =>
526
+ ifNotUndefined(
527
+ leaf,
528
+ ([selectedCells, selectedRowIds, groupRowId, groupRow]) => {
529
+ mapForEach(
530
+ changedGroupedSelectedCells,
531
+ (selectedCellId, [newCell]) => {
532
+ const selectedCell = mapEnsure(
533
+ selectedCells,
534
+ selectedCellId,
535
+ mapNew,
536
+ );
537
+ const oldLeafCell = mapGet(selectedCell, selectedRowId);
538
+ const newLeafCell = forceRemove ? void 0 : newCell;
539
+ if (oldLeafCell !== newLeafCell) {
540
+ const oldNewSet = setNew([[oldLeafCell, newLeafCell]]);
541
+ const oldLength = collSize(selectedCell);
542
+ mapSet(selectedCell, selectedRowId, newLeafCell);
543
+ collForEach(
544
+ mapGet(groupedSelectedCellIds, selectedCellId),
545
+ ([groupedCellId, aggregators]) => {
546
+ const aggregateValue = getAggregateValue(
547
+ groupRow[groupedCellId],
548
+ oldLength,
549
+ selectedCell,
550
+ oldNewSet,
551
+ aggregators,
552
+ );
553
+ groupRow[groupedCellId] = isUndefined(
554
+ getCellOrValueType(aggregateValue),
555
+ )
556
+ ? null
557
+ : aggregateValue;
558
+ },
559
+ );
560
+ }
561
+ },
562
+ );
563
+ if (
564
+ collIsEmpty(selectedRowIds) ||
565
+ !arrayEvery(havings, (having2) =>
566
+ having2((cellId) => groupRow[cellId]),
567
+ )
568
+ ) {
569
+ resultStore.delRow(queryId, groupRowId);
570
+ } else if (isUndefined(groupRowId)) {
571
+ leaf[2] = resultStore.addRow(queryId, groupRow);
572
+ } else {
573
+ resultStore.setRow(queryId, groupRowId, groupRow);
574
+ }
575
+ },
576
+ );
577
+ addPreStoreListener(
578
+ selectJoinWhereStore,
579
+ queryId,
580
+ selectJoinWhereStore.addRowListener(
581
+ queryId,
582
+ null,
583
+ (_store, _tableId, selectedRowId, getCellChange) => {
584
+ const oldPath = [];
585
+ const newPath = [];
586
+ const changedGroupedSelectedCells = mapNew();
587
+ const rowExists = selectJoinWhereStore.hasRow(
588
+ queryId,
589
+ selectedRowId,
590
+ );
591
+ let changedLeaf = !rowExists;
592
+ collForEach(groupBySelectedCellIds, (selectedCellId) => {
593
+ const [changed, oldCell, newCell] = getCellChange(
594
+ queryId,
595
+ selectedRowId,
596
+ selectedCellId,
597
+ );
598
+ arrayPush(oldPath, oldCell);
599
+ arrayPush(newPath, newCell);
600
+ changedLeaf ||= changed;
601
+ });
602
+ mapForEach(groupedSelectedCellIds, (selectedCellId) => {
603
+ const [changed, , newCell] = getCellChange(
604
+ queryId,
605
+ selectedRowId,
606
+ selectedCellId,
607
+ );
608
+ if (changedLeaf || changed) {
609
+ mapSet(changedGroupedSelectedCells, selectedCellId, [newCell]);
610
+ }
611
+ });
612
+ if (changedLeaf) {
613
+ writeGroupRow(
614
+ visitTree(tree, oldPath, void 0, ([, selectedRowIds]) => {
615
+ collDel(selectedRowIds, selectedRowId);
616
+ return collIsEmpty(selectedRowIds);
617
+ }),
618
+ changedGroupedSelectedCells,
619
+ selectedRowId,
620
+ 1,
621
+ );
622
+ }
623
+ if (rowExists) {
624
+ writeGroupRow(
625
+ visitTree(
626
+ tree,
627
+ newPath,
628
+ () => {
629
+ const groupRow = {};
630
+ collForEach(
631
+ groupBySelectedCellIds,
632
+ (selectedCellId) =>
633
+ (groupRow[selectedCellId] =
634
+ selectJoinWhereStore.getCell(
635
+ queryId,
636
+ selectedRowId,
637
+ selectedCellId,
638
+ )),
639
+ );
640
+ return [mapNew(), setNew(), void 0, groupRow];
641
+ },
642
+ ([, selectedRowIds]) => {
643
+ setAdd(selectedRowIds, selectedRowId);
644
+ },
645
+ ),
646
+ changedGroupedSelectedCells,
647
+ selectedRowId,
648
+ );
649
+ }
650
+ },
651
+ ),
652
+ );
653
+ }
654
+ synchronizeTransactions(queryId, store, selectJoinWhereStore);
655
+ const writeSelectRow = (rootRowId) => {
656
+ const getTableCell = (arg1, arg2) =>
657
+ store.getCell(
658
+ ...(isUndefined(arg2)
659
+ ? [tableId, rootRowId, arg1]
660
+ : arg1 === tableId
661
+ ? [tableId, rootRowId, arg2]
662
+ : [
663
+ mapGet(joins, arg1)?.[0],
664
+ mapGet(mapGet(joins, arg1)?.[4], rootRowId)?.[0],
665
+ arg2,
666
+ ]),
667
+ );
668
+ selectJoinWhereStore.transaction(() =>
669
+ arrayEvery(wheres, (where2) => where2(getTableCell))
670
+ ? mapForEach(selects, (asCellId, tableCellGetter) =>
671
+ setOrDelCell(
672
+ selectJoinWhereStore,
673
+ queryId,
674
+ rootRowId,
675
+ asCellId,
676
+ tableCellGetter(getTableCell, rootRowId),
677
+ ),
678
+ )
679
+ : selectJoinWhereStore.delRow(queryId, rootRowId),
680
+ );
681
+ };
682
+ const listenToTable = (rootRowId, tableId2, rowId, joinedTableIds2) => {
683
+ const getCell = (cellId) => store.getCell(tableId2, rowId, cellId);
684
+ arrayForEach(joinedTableIds2, (remoteAsTableId) => {
685
+ const [realJoinedTableId, , on, nextJoinedTableIds, remoteIdPair] =
686
+ mapGet(joins, remoteAsTableId);
687
+ const remoteRowId = on?.(getCell, rootRowId);
688
+ const [previousRemoteRowId, previousRemoteListenerId] =
689
+ mapGet(remoteIdPair, rootRowId) ?? [];
690
+ if (remoteRowId != previousRemoteRowId) {
691
+ if (!isUndefined(previousRemoteListenerId)) {
692
+ delStoreListeners(queryId, previousRemoteListenerId);
693
+ }
694
+ mapSet(
695
+ remoteIdPair,
696
+ rootRowId,
697
+ isUndefined(remoteRowId)
698
+ ? null
699
+ : [
700
+ remoteRowId,
701
+ ...addStoreListeners(
702
+ queryId,
703
+ 1,
704
+ store.addRowListener(realJoinedTableId, remoteRowId, () =>
705
+ listenToTable(
706
+ rootRowId,
707
+ realJoinedTableId,
708
+ remoteRowId,
709
+ nextJoinedTableIds,
710
+ ),
711
+ ),
712
+ ),
713
+ ],
714
+ );
715
+ }
716
+ });
717
+ writeSelectRow(rootRowId);
718
+ };
719
+ const {3: joinedTableIds} = mapGet(joins, null);
720
+ selectJoinWhereStore.transaction(() =>
721
+ addStoreListeners(
722
+ queryId,
723
+ 1,
724
+ store.addRowListener(tableId, null, (_store, _tableId, rootRowId) => {
725
+ if (store.hasRow(tableId, rootRowId)) {
726
+ listenToTable(rootRowId, tableId, rootRowId, joinedTableIds);
727
+ } else {
728
+ selectJoinWhereStore.delRow(queryId, rootRowId);
729
+ collForEach(joins, ({4: idsByRootRowId}) =>
730
+ ifNotUndefined(
731
+ mapGet(idsByRootRowId, rootRowId),
732
+ ([, listenerId]) => {
733
+ delStoreListeners(queryId, listenerId);
734
+ mapSet(idsByRootRowId, rootRowId);
735
+ },
736
+ ),
737
+ );
738
+ }
739
+ }),
740
+ ),
741
+ );
742
+ return queries;
743
+ };
744
+ const delQueryDefinition = (queryId) => {
745
+ resetPreStores(queryId);
746
+ delDefinition(queryId);
747
+ return queries;
748
+ };
749
+ const addQueryIdsListener = (listener) =>
750
+ addQueryIdsListenerImpl(() => listener(queries));
751
+ const delListener = (listenerId) => {
752
+ delListenerImpl(listenerId);
753
+ return queries;
754
+ };
755
+ const getListenerStats = () => {
756
+ const {
757
+ tables: _1,
758
+ tableIds: _2,
759
+ transaction: _3,
760
+ ...stats
761
+ } = resultStore.getListenerStats();
762
+ return stats;
763
+ };
764
+ const queries = {
765
+ setQueryDefinition,
766
+ delQueryDefinition,
767
+ getStore,
768
+ getQueryIds,
769
+ forEachQuery,
770
+ hasQuery,
771
+ getTableId,
772
+ addQueryIdsListener,
773
+ delListener,
774
+ destroy,
775
+ getListenerStats,
776
+ };
777
+ objMap(
778
+ {
779
+ [TABLE]: [1, 1],
780
+ [TABLE + CELL_IDS]: [0, 1],
781
+ [ROW_COUNT]: [0, 1],
782
+ [ROW_IDS]: [0, 1],
783
+ [SORTED_ROW_IDS]: [0, 5],
784
+ [ROW]: [1, 2],
785
+ [CELL_IDS]: [0, 2],
786
+ [CELL]: [1, 3],
787
+ },
788
+ ([hasAndForEach, argumentCount], gettable) => {
789
+ arrayForEach(
790
+ hasAndForEach ? [GET, 'has', 'forEach'] : [GET],
791
+ (prefix) =>
792
+ (queries[prefix + RESULT + gettable] = (...args) =>
793
+ resultStore[prefix + gettable](...args)),
794
+ );
795
+ queries[ADD + RESULT + gettable + LISTENER] = (...args) =>
796
+ resultStore[ADD + gettable + LISTENER](
797
+ ...slice(args, 0, argumentCount),
798
+ (_store, ...listenerArgs) =>
799
+ args[argumentCount](queries, ...listenerArgs),
800
+ true,
801
+ );
802
+ },
803
+ );
804
+ return objFreeze(queries);
805
+ });
806
+
807
+ export {createQueries};