tinybase 4.8.14 → 4.8.16

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/package.json +21 -22
  2. package/readme.md +1 -1
  3. package/lib/checkpoints.js +0 -1
  4. package/lib/checkpoints.js.gz +0 -0
  5. package/lib/cjs/checkpoints.cjs +0 -1
  6. package/lib/cjs/checkpoints.cjs.gz +0 -0
  7. package/lib/cjs/common.cjs +0 -1
  8. package/lib/cjs/common.cjs.gz +0 -0
  9. package/lib/cjs/indexes.cjs +0 -1
  10. package/lib/cjs/indexes.cjs.gz +0 -0
  11. package/lib/cjs/metrics.cjs +0 -1
  12. package/lib/cjs/metrics.cjs.gz +0 -0
  13. package/lib/cjs/persisters/persister-automerge.cjs +0 -1
  14. package/lib/cjs/persisters/persister-automerge.cjs.gz +0 -0
  15. package/lib/cjs/persisters/persister-browser.cjs +0 -1
  16. package/lib/cjs/persisters/persister-browser.cjs.gz +0 -0
  17. package/lib/cjs/persisters/persister-cr-sqlite-wasm.cjs +0 -1
  18. package/lib/cjs/persisters/persister-cr-sqlite-wasm.cjs.gz +0 -0
  19. package/lib/cjs/persisters/persister-electric-sql.cjs +0 -1
  20. package/lib/cjs/persisters/persister-electric-sql.cjs.gz +0 -0
  21. package/lib/cjs/persisters/persister-expo-sqlite-next.cjs +0 -1
  22. package/lib/cjs/persisters/persister-expo-sqlite-next.cjs.gz +0 -0
  23. package/lib/cjs/persisters/persister-expo-sqlite.cjs +0 -1
  24. package/lib/cjs/persisters/persister-expo-sqlite.cjs.gz +0 -0
  25. package/lib/cjs/persisters/persister-file.cjs +0 -1
  26. package/lib/cjs/persisters/persister-file.cjs.gz +0 -0
  27. package/lib/cjs/persisters/persister-indexed-db.cjs +0 -1
  28. package/lib/cjs/persisters/persister-indexed-db.cjs.gz +0 -0
  29. package/lib/cjs/persisters/persister-libsql.cjs +0 -1
  30. package/lib/cjs/persisters/persister-libsql.cjs.gz +0 -0
  31. package/lib/cjs/persisters/persister-partykit-client.cjs +0 -1
  32. package/lib/cjs/persisters/persister-partykit-client.cjs.gz +0 -0
  33. package/lib/cjs/persisters/persister-partykit-server.cjs +0 -1
  34. package/lib/cjs/persisters/persister-partykit-server.cjs.gz +0 -0
  35. package/lib/cjs/persisters/persister-powersync.cjs +0 -1
  36. package/lib/cjs/persisters/persister-powersync.cjs.gz +0 -0
  37. package/lib/cjs/persisters/persister-remote.cjs +0 -1
  38. package/lib/cjs/persisters/persister-remote.cjs.gz +0 -0
  39. package/lib/cjs/persisters/persister-sqlite-wasm.cjs +0 -1
  40. package/lib/cjs/persisters/persister-sqlite-wasm.cjs.gz +0 -0
  41. package/lib/cjs/persisters/persister-sqlite3.cjs +0 -1
  42. package/lib/cjs/persisters/persister-sqlite3.cjs.gz +0 -0
  43. package/lib/cjs/persisters/persister-yjs.cjs +0 -1
  44. package/lib/cjs/persisters/persister-yjs.cjs.gz +0 -0
  45. package/lib/cjs/persisters.cjs +0 -1
  46. package/lib/cjs/persisters.cjs.gz +0 -0
  47. package/lib/cjs/queries.cjs +0 -1
  48. package/lib/cjs/queries.cjs.gz +0 -0
  49. package/lib/cjs/relationships.cjs +0 -1
  50. package/lib/cjs/relationships.cjs.gz +0 -0
  51. package/lib/cjs/store.cjs +0 -1
  52. package/lib/cjs/store.cjs.gz +0 -0
  53. package/lib/cjs/tinybase.cjs +0 -1
  54. package/lib/cjs/tinybase.cjs.gz +0 -0
  55. package/lib/cjs/tools.cjs +0 -1
  56. package/lib/cjs/tools.cjs.gz +0 -0
  57. package/lib/cjs/ui-react-dom-debug.cjs +0 -1
  58. package/lib/cjs/ui-react-dom-debug.cjs.gz +0 -0
  59. package/lib/cjs/ui-react-dom.cjs +0 -1
  60. package/lib/cjs/ui-react-dom.cjs.gz +0 -0
  61. package/lib/cjs/ui-react.cjs +0 -1
  62. package/lib/cjs/ui-react.cjs.gz +0 -0
  63. package/lib/cjs-es6/checkpoints.cjs +0 -1
  64. package/lib/cjs-es6/checkpoints.cjs.gz +0 -0
  65. package/lib/cjs-es6/common.cjs +0 -1
  66. package/lib/cjs-es6/common.cjs.gz +0 -0
  67. package/lib/cjs-es6/indexes.cjs +0 -1
  68. package/lib/cjs-es6/indexes.cjs.gz +0 -0
  69. package/lib/cjs-es6/metrics.cjs +0 -1
  70. package/lib/cjs-es6/metrics.cjs.gz +0 -0
  71. package/lib/cjs-es6/persisters/persister-automerge.cjs +0 -1
  72. package/lib/cjs-es6/persisters/persister-automerge.cjs.gz +0 -0
  73. package/lib/cjs-es6/persisters/persister-browser.cjs +0 -1
  74. package/lib/cjs-es6/persisters/persister-browser.cjs.gz +0 -0
  75. package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs +0 -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 +0 -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 +0 -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 +0 -1
  82. package/lib/cjs-es6/persisters/persister-expo-sqlite.cjs.gz +0 -0
  83. package/lib/cjs-es6/persisters/persister-file.cjs +0 -1
  84. package/lib/cjs-es6/persisters/persister-file.cjs.gz +0 -0
  85. package/lib/cjs-es6/persisters/persister-indexed-db.cjs +0 -1
  86. package/lib/cjs-es6/persisters/persister-indexed-db.cjs.gz +0 -0
  87. package/lib/cjs-es6/persisters/persister-libsql.cjs +0 -1
  88. package/lib/cjs-es6/persisters/persister-libsql.cjs.gz +0 -0
  89. package/lib/cjs-es6/persisters/persister-partykit-client.cjs +0 -1
  90. package/lib/cjs-es6/persisters/persister-partykit-client.cjs.gz +0 -0
  91. package/lib/cjs-es6/persisters/persister-partykit-server.cjs +0 -1
  92. package/lib/cjs-es6/persisters/persister-partykit-server.cjs.gz +0 -0
  93. package/lib/cjs-es6/persisters/persister-powersync.cjs +0 -1
  94. package/lib/cjs-es6/persisters/persister-powersync.cjs.gz +0 -0
  95. package/lib/cjs-es6/persisters/persister-remote.cjs +0 -1
  96. package/lib/cjs-es6/persisters/persister-remote.cjs.gz +0 -0
  97. package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs +0 -1
  98. package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs.gz +0 -0
  99. package/lib/cjs-es6/persisters/persister-sqlite3.cjs +0 -1
  100. package/lib/cjs-es6/persisters/persister-sqlite3.cjs.gz +0 -0
  101. package/lib/cjs-es6/persisters/persister-yjs.cjs +0 -1
  102. package/lib/cjs-es6/persisters/persister-yjs.cjs.gz +0 -0
  103. package/lib/cjs-es6/persisters.cjs +0 -1
  104. package/lib/cjs-es6/persisters.cjs.gz +0 -0
  105. package/lib/cjs-es6/queries.cjs +0 -1
  106. package/lib/cjs-es6/queries.cjs.gz +0 -0
  107. package/lib/cjs-es6/relationships.cjs +0 -1
  108. package/lib/cjs-es6/relationships.cjs.gz +0 -0
  109. package/lib/cjs-es6/store.cjs +0 -1
  110. package/lib/cjs-es6/store.cjs.gz +0 -0
  111. package/lib/cjs-es6/tinybase.cjs +0 -1
  112. package/lib/cjs-es6/tinybase.cjs.gz +0 -0
  113. package/lib/cjs-es6/tools.cjs +0 -1
  114. package/lib/cjs-es6/tools.cjs.gz +0 -0
  115. package/lib/cjs-es6/ui-react-dom-debug.cjs +0 -1
  116. package/lib/cjs-es6/ui-react-dom-debug.cjs.gz +0 -0
  117. package/lib/cjs-es6/ui-react-dom.cjs +0 -1
  118. package/lib/cjs-es6/ui-react-dom.cjs.gz +0 -0
  119. package/lib/cjs-es6/ui-react.cjs +0 -1
  120. package/lib/cjs-es6/ui-react.cjs.gz +0 -0
  121. package/lib/common.js +0 -1
  122. package/lib/common.js.gz +0 -0
  123. package/lib/debug/checkpoints.js +0 -412
  124. package/lib/debug/common.js +0 -4
  125. package/lib/debug/indexes.js +0 -544
  126. package/lib/debug/metrics.js +0 -516
  127. package/lib/debug/persisters.js +0 -183
  128. package/lib/debug/queries.js +0 -807
  129. package/lib/debug/relationships.js +0 -526
  130. package/lib/debug/store.js +0 -1602
  131. package/lib/es6/checkpoints.js +0 -1
  132. package/lib/es6/checkpoints.js.gz +0 -0
  133. package/lib/es6/common.js +0 -1
  134. package/lib/es6/common.js.gz +0 -0
  135. package/lib/es6/indexes.js +0 -1
  136. package/lib/es6/indexes.js.gz +0 -0
  137. package/lib/es6/metrics.js +0 -1
  138. package/lib/es6/metrics.js.gz +0 -0
  139. package/lib/es6/persisters/persister-automerge.js +0 -1
  140. package/lib/es6/persisters/persister-automerge.js.gz +0 -0
  141. package/lib/es6/persisters/persister-browser.js +0 -1
  142. package/lib/es6/persisters/persister-browser.js.gz +0 -0
  143. package/lib/es6/persisters/persister-cr-sqlite-wasm.js +0 -1
  144. package/lib/es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  145. package/lib/es6/persisters/persister-electric-sql.js +0 -1
  146. package/lib/es6/persisters/persister-electric-sql.js.gz +0 -0
  147. package/lib/es6/persisters/persister-expo-sqlite-next.js +0 -1
  148. package/lib/es6/persisters/persister-expo-sqlite-next.js.gz +0 -0
  149. package/lib/es6/persisters/persister-expo-sqlite.js +0 -1
  150. package/lib/es6/persisters/persister-expo-sqlite.js.gz +0 -0
  151. package/lib/es6/persisters/persister-file.js +0 -1
  152. package/lib/es6/persisters/persister-file.js.gz +0 -0
  153. package/lib/es6/persisters/persister-indexed-db.js +0 -1
  154. package/lib/es6/persisters/persister-indexed-db.js.gz +0 -0
  155. package/lib/es6/persisters/persister-libsql.js +0 -1
  156. package/lib/es6/persisters/persister-libsql.js.gz +0 -0
  157. package/lib/es6/persisters/persister-partykit-client.js +0 -1
  158. package/lib/es6/persisters/persister-partykit-client.js.gz +0 -0
  159. package/lib/es6/persisters/persister-partykit-server.js +0 -1
  160. package/lib/es6/persisters/persister-partykit-server.js.gz +0 -0
  161. package/lib/es6/persisters/persister-powersync.js +0 -1
  162. package/lib/es6/persisters/persister-powersync.js.gz +0 -0
  163. package/lib/es6/persisters/persister-remote.js +0 -1
  164. package/lib/es6/persisters/persister-remote.js.gz +0 -0
  165. package/lib/es6/persisters/persister-sqlite-wasm.js +0 -1
  166. package/lib/es6/persisters/persister-sqlite-wasm.js.gz +0 -0
  167. package/lib/es6/persisters/persister-sqlite3.js +0 -1
  168. package/lib/es6/persisters/persister-sqlite3.js.gz +0 -0
  169. package/lib/es6/persisters/persister-yjs.js +0 -1
  170. package/lib/es6/persisters/persister-yjs.js.gz +0 -0
  171. package/lib/es6/persisters.js +0 -1
  172. package/lib/es6/persisters.js.gz +0 -0
  173. package/lib/es6/queries.js +0 -1
  174. package/lib/es6/queries.js.gz +0 -0
  175. package/lib/es6/relationships.js +0 -1
  176. package/lib/es6/relationships.js.gz +0 -0
  177. package/lib/es6/store.js +0 -1
  178. package/lib/es6/store.js.gz +0 -0
  179. package/lib/es6/tinybase.js +0 -1
  180. package/lib/es6/tinybase.js.gz +0 -0
  181. package/lib/es6/tools.js +0 -1
  182. package/lib/es6/tools.js.gz +0 -0
  183. package/lib/es6/ui-react-dom-debug.js +0 -1
  184. package/lib/es6/ui-react-dom-debug.js.gz +0 -0
  185. package/lib/es6/ui-react-dom.js +0 -1
  186. package/lib/es6/ui-react-dom.js.gz +0 -0
  187. package/lib/es6/ui-react.js +0 -1
  188. package/lib/es6/ui-react.js.gz +0 -0
  189. package/lib/indexes.js +0 -1
  190. package/lib/indexes.js.gz +0 -0
  191. package/lib/metrics.js +0 -1
  192. package/lib/metrics.js.gz +0 -0
  193. package/lib/persisters/persister-automerge.js +0 -1
  194. package/lib/persisters/persister-automerge.js.gz +0 -0
  195. package/lib/persisters/persister-browser.js +0 -1
  196. package/lib/persisters/persister-browser.js.gz +0 -0
  197. package/lib/persisters/persister-cr-sqlite-wasm.js +0 -1
  198. package/lib/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  199. package/lib/persisters/persister-electric-sql.js +0 -1
  200. package/lib/persisters/persister-electric-sql.js.gz +0 -0
  201. package/lib/persisters/persister-expo-sqlite-next.js +0 -1
  202. package/lib/persisters/persister-expo-sqlite-next.js.gz +0 -0
  203. package/lib/persisters/persister-expo-sqlite.js +0 -1
  204. package/lib/persisters/persister-expo-sqlite.js.gz +0 -0
  205. package/lib/persisters/persister-file.js +0 -1
  206. package/lib/persisters/persister-file.js.gz +0 -0
  207. package/lib/persisters/persister-indexed-db.js +0 -1
  208. package/lib/persisters/persister-indexed-db.js.gz +0 -0
  209. package/lib/persisters/persister-libsql.js +0 -1
  210. package/lib/persisters/persister-libsql.js.gz +0 -0
  211. package/lib/persisters/persister-partykit-client.js +0 -1
  212. package/lib/persisters/persister-partykit-client.js.gz +0 -0
  213. package/lib/persisters/persister-partykit-server.js +0 -1
  214. package/lib/persisters/persister-partykit-server.js.gz +0 -0
  215. package/lib/persisters/persister-powersync.js +0 -1
  216. package/lib/persisters/persister-powersync.js.gz +0 -0
  217. package/lib/persisters/persister-remote.js +0 -1
  218. package/lib/persisters/persister-remote.js.gz +0 -0
  219. package/lib/persisters/persister-sqlite-wasm.js +0 -1
  220. package/lib/persisters/persister-sqlite-wasm.js.gz +0 -0
  221. package/lib/persisters/persister-sqlite3.js +0 -1
  222. package/lib/persisters/persister-sqlite3.js.gz +0 -0
  223. package/lib/persisters/persister-yjs.js +0 -1
  224. package/lib/persisters/persister-yjs.js.gz +0 -0
  225. package/lib/persisters.js +0 -1
  226. package/lib/persisters.js.gz +0 -0
  227. package/lib/queries.js +0 -1
  228. package/lib/queries.js.gz +0 -0
  229. package/lib/relationships.js +0 -1
  230. package/lib/relationships.js.gz +0 -0
  231. package/lib/store.js +0 -1
  232. package/lib/store.js.gz +0 -0
  233. package/lib/tinybase.js +0 -1
  234. package/lib/tinybase.js.gz +0 -0
  235. package/lib/tools.js +0 -1
  236. package/lib/tools.js.gz +0 -0
  237. package/lib/ui-react-dom.js +0 -1
  238. package/lib/ui-react-dom.js.gz +0 -0
  239. package/lib/ui-react.js +0 -1
  240. package/lib/ui-react.js.gz +0 -0
  241. package/lib/umd/checkpoints.js +0 -1
  242. package/lib/umd/checkpoints.js.gz +0 -0
  243. package/lib/umd/common.js +0 -1
  244. package/lib/umd/common.js.gz +0 -0
  245. package/lib/umd/indexes.js +0 -1
  246. package/lib/umd/indexes.js.gz +0 -0
  247. package/lib/umd/metrics.js +0 -1
  248. package/lib/umd/metrics.js.gz +0 -0
  249. package/lib/umd/persisters/persister-automerge.js +0 -1
  250. package/lib/umd/persisters/persister-automerge.js.gz +0 -0
  251. package/lib/umd/persisters/persister-browser.js +0 -1
  252. package/lib/umd/persisters/persister-browser.js.gz +0 -0
  253. package/lib/umd/persisters/persister-cr-sqlite-wasm.js +0 -1
  254. package/lib/umd/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  255. package/lib/umd/persisters/persister-electric-sql.js +0 -1
  256. package/lib/umd/persisters/persister-electric-sql.js.gz +0 -0
  257. package/lib/umd/persisters/persister-expo-sqlite-next.js +0 -1
  258. package/lib/umd/persisters/persister-expo-sqlite-next.js.gz +0 -0
  259. package/lib/umd/persisters/persister-expo-sqlite.js +0 -1
  260. package/lib/umd/persisters/persister-expo-sqlite.js.gz +0 -0
  261. package/lib/umd/persisters/persister-file.js +0 -1
  262. package/lib/umd/persisters/persister-file.js.gz +0 -0
  263. package/lib/umd/persisters/persister-indexed-db.js +0 -1
  264. package/lib/umd/persisters/persister-indexed-db.js.gz +0 -0
  265. package/lib/umd/persisters/persister-libsql.js +0 -1
  266. package/lib/umd/persisters/persister-libsql.js.gz +0 -0
  267. package/lib/umd/persisters/persister-partykit-client.js +0 -1
  268. package/lib/umd/persisters/persister-partykit-client.js.gz +0 -0
  269. package/lib/umd/persisters/persister-partykit-server.js +0 -1
  270. package/lib/umd/persisters/persister-partykit-server.js.gz +0 -0
  271. package/lib/umd/persisters/persister-powersync.js +0 -1
  272. package/lib/umd/persisters/persister-powersync.js.gz +0 -0
  273. package/lib/umd/persisters/persister-remote.js +0 -1
  274. package/lib/umd/persisters/persister-remote.js.gz +0 -0
  275. package/lib/umd/persisters/persister-sqlite-wasm.js +0 -1
  276. package/lib/umd/persisters/persister-sqlite-wasm.js.gz +0 -0
  277. package/lib/umd/persisters/persister-sqlite3.js +0 -1
  278. package/lib/umd/persisters/persister-sqlite3.js.gz +0 -0
  279. package/lib/umd/persisters/persister-yjs.js +0 -1
  280. package/lib/umd/persisters/persister-yjs.js.gz +0 -0
  281. package/lib/umd/persisters.js +0 -1
  282. package/lib/umd/persisters.js.gz +0 -0
  283. package/lib/umd/queries.js +0 -1
  284. package/lib/umd/queries.js.gz +0 -0
  285. package/lib/umd/relationships.js +0 -1
  286. package/lib/umd/relationships.js.gz +0 -0
  287. package/lib/umd/store.js +0 -1
  288. package/lib/umd/store.js.gz +0 -0
  289. package/lib/umd/tinybase.js +0 -1
  290. package/lib/umd/tinybase.js.gz +0 -0
  291. package/lib/umd/tools.js +0 -1
  292. package/lib/umd/tools.js.gz +0 -0
  293. package/lib/umd/ui-react-dom-debug.js +0 -1
  294. package/lib/umd/ui-react-dom-debug.js.gz +0 -0
  295. package/lib/umd/ui-react-dom.js +0 -1
  296. package/lib/umd/ui-react-dom.js.gz +0 -0
  297. package/lib/umd/ui-react.js +0 -1
  298. package/lib/umd/ui-react.js.gz +0 -0
  299. package/lib/umd-es6/checkpoints.js +0 -1
  300. package/lib/umd-es6/checkpoints.js.gz +0 -0
  301. package/lib/umd-es6/common.js +0 -1
  302. package/lib/umd-es6/common.js.gz +0 -0
  303. package/lib/umd-es6/indexes.js +0 -1
  304. package/lib/umd-es6/indexes.js.gz +0 -0
  305. package/lib/umd-es6/metrics.js +0 -1
  306. package/lib/umd-es6/metrics.js.gz +0 -0
  307. package/lib/umd-es6/persisters/persister-automerge.js +0 -1
  308. package/lib/umd-es6/persisters/persister-automerge.js.gz +0 -0
  309. package/lib/umd-es6/persisters/persister-browser.js +0 -1
  310. package/lib/umd-es6/persisters/persister-browser.js.gz +0 -0
  311. package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js +0 -1
  312. package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  313. package/lib/umd-es6/persisters/persister-electric-sql.js +0 -1
  314. package/lib/umd-es6/persisters/persister-electric-sql.js.gz +0 -0
  315. package/lib/umd-es6/persisters/persister-expo-sqlite-next.js +0 -1
  316. package/lib/umd-es6/persisters/persister-expo-sqlite-next.js.gz +0 -0
  317. package/lib/umd-es6/persisters/persister-expo-sqlite.js +0 -1
  318. package/lib/umd-es6/persisters/persister-expo-sqlite.js.gz +0 -0
  319. package/lib/umd-es6/persisters/persister-file.js +0 -1
  320. package/lib/umd-es6/persisters/persister-file.js.gz +0 -0
  321. package/lib/umd-es6/persisters/persister-indexed-db.js +0 -1
  322. package/lib/umd-es6/persisters/persister-indexed-db.js.gz +0 -0
  323. package/lib/umd-es6/persisters/persister-libsql.js +0 -1
  324. package/lib/umd-es6/persisters/persister-libsql.js.gz +0 -0
  325. package/lib/umd-es6/persisters/persister-partykit-client.js +0 -1
  326. package/lib/umd-es6/persisters/persister-partykit-client.js.gz +0 -0
  327. package/lib/umd-es6/persisters/persister-partykit-server.js +0 -1
  328. package/lib/umd-es6/persisters/persister-partykit-server.js.gz +0 -0
  329. package/lib/umd-es6/persisters/persister-powersync.js +0 -1
  330. package/lib/umd-es6/persisters/persister-powersync.js.gz +0 -0
  331. package/lib/umd-es6/persisters/persister-remote.js +0 -1
  332. package/lib/umd-es6/persisters/persister-remote.js.gz +0 -0
  333. package/lib/umd-es6/persisters/persister-sqlite-wasm.js +0 -1
  334. package/lib/umd-es6/persisters/persister-sqlite-wasm.js.gz +0 -0
  335. package/lib/umd-es6/persisters/persister-sqlite3.js +0 -1
  336. package/lib/umd-es6/persisters/persister-sqlite3.js.gz +0 -0
  337. package/lib/umd-es6/persisters/persister-yjs.js +0 -1
  338. package/lib/umd-es6/persisters/persister-yjs.js.gz +0 -0
  339. package/lib/umd-es6/persisters.js +0 -1
  340. package/lib/umd-es6/persisters.js.gz +0 -0
  341. package/lib/umd-es6/queries.js +0 -1
  342. package/lib/umd-es6/queries.js.gz +0 -0
  343. package/lib/umd-es6/relationships.js +0 -1
  344. package/lib/umd-es6/relationships.js.gz +0 -0
  345. package/lib/umd-es6/store.js +0 -1
  346. package/lib/umd-es6/store.js.gz +0 -0
  347. package/lib/umd-es6/tinybase.js +0 -1
  348. package/lib/umd-es6/tinybase.js.gz +0 -0
  349. package/lib/umd-es6/tools.js +0 -1
  350. package/lib/umd-es6/tools.js.gz +0 -0
  351. package/lib/umd-es6/ui-react-dom-debug.js +0 -1
  352. package/lib/umd-es6/ui-react-dom-debug.js.gz +0 -0
  353. package/lib/umd-es6/ui-react-dom.js +0 -1
  354. package/lib/umd-es6/ui-react-dom.js.gz +0 -0
  355. package/lib/umd-es6/ui-react.js +0 -1
  356. package/lib/umd-es6/ui-react.js.gz +0 -0
@@ -1,1602 +0,0 @@
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 TYPE = 'type';
8
- const DEFAULT = 'default';
9
- const LISTENER = 'Listener';
10
- const ADD = 'add';
11
- const HAS = 'Has';
12
- const IDS = 'Ids';
13
- const TABLE = 'Table';
14
- const TABLES = TABLE + 's';
15
- const TABLE_IDS = TABLE + IDS;
16
- const ROW = 'Row';
17
- const ROW_COUNT = ROW + 'Count';
18
- const ROW_IDS = ROW + IDS;
19
- const CELL = 'Cell';
20
- const CELL_IDS = CELL + IDS;
21
- const VALUE = 'Value';
22
- const VALUES = VALUE + 's';
23
- const VALUE_IDS = VALUE + IDS;
24
- const id = (key) => EMPTY_STRING + key;
25
-
26
- const isFiniteNumber = isFinite;
27
- const isInstanceOf = (thing, cls) => thing instanceof cls;
28
- const isUndefined = (thing) => thing == void 0;
29
- const ifNotUndefined = (value, then, otherwise) =>
30
- isUndefined(value) ? otherwise?.() : then(value);
31
- const isTypeStringOrBoolean = (type) => type == STRING || type == BOOLEAN;
32
- const isFunction = (thing) => getTypeOf(thing) == FUNCTION;
33
- const isArray = (thing) => Array.isArray(thing);
34
- const slice = (arrayOrString, start, end) => arrayOrString.slice(start, end);
35
- const size = (arrayOrString) => arrayOrString.length;
36
- const test = (regex, subject) => regex.test(subject);
37
-
38
- const arrayHas = (array, value) => array.includes(value);
39
- const arrayEvery = (array, cb) => array.every(cb);
40
- const arrayIsEqual = (array1, array2) =>
41
- size(array1) === size(array2) &&
42
- arrayEvery(array1, (value1, index) => array2[index] === value1);
43
- const arraySort = (array, sorter) => array.sort(sorter);
44
- const arrayForEach = (array, cb) => array.forEach(cb);
45
- const arrayMap = (array, cb) => array.map(cb);
46
- const arrayReduce = (array, cb, initial) => array.reduce(cb, initial);
47
- const arrayPush = (array, ...values) => array.push(...values);
48
- const arrayShift = (array) => array.shift();
49
-
50
- const object = Object;
51
- const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
52
- const objIds = object.keys;
53
- const objFrozen = object.isFrozen;
54
- const objFreeze = object.freeze;
55
- const isObject = (obj) =>
56
- !isUndefined(obj) &&
57
- ifNotUndefined(
58
- getPrototypeOf(obj),
59
- (objPrototype) =>
60
- objPrototype == object.prototype ||
61
- isUndefined(getPrototypeOf(objPrototype)),
62
- () => true,
63
- );
64
- const objGet = (obj, id) => ifNotUndefined(obj, (obj2) => obj2[id]);
65
- const objHas = (obj, id) => !isUndefined(objGet(obj, id));
66
- const objDel = (obj, id) => {
67
- delete obj[id];
68
- return obj;
69
- };
70
- const objMap = (obj, cb) =>
71
- arrayMap(object.entries(obj), ([id, value]) => cb(value, id));
72
- const objSize = (obj) => size(objIds(obj));
73
- const objIsEmpty = (obj) => isObject(obj) && objSize(obj) == 0;
74
-
75
- const collSizeN = (collSizer) => (coll) =>
76
- arrayReduce(collValues(coll), (total, coll2) => total + collSizer(coll2), 0);
77
- const collSize = (coll) => coll?.size ?? 0;
78
- const collSize2 = collSizeN(collSize);
79
- const collSize3 = collSizeN(collSize2);
80
- const collSize4 = collSizeN(collSize3);
81
- const collHas = (coll, keyOrValue) => coll?.has(keyOrValue) ?? false;
82
- const collIsEmpty = (coll) => isUndefined(coll) || collSize(coll) == 0;
83
- const collValues = (coll) => [...(coll?.values() ?? [])];
84
- const collClear = (coll) => coll.clear();
85
- const collForEach = (coll, cb) => coll?.forEach(cb);
86
- const collDel = (coll, keyOrValue) => coll?.delete(keyOrValue);
87
-
88
- const mapNew = (entries) => new Map(entries);
89
- const mapKeys = (map) => [...(map?.keys() ?? [])];
90
- const mapGet = (map, key) => map?.get(key);
91
- const mapForEach = (map, cb) =>
92
- collForEach(map, (value, key) => cb(key, value));
93
- const mapMap = (coll, cb) =>
94
- arrayMap([...(coll?.entries() ?? [])], ([key, value]) => cb(value, key));
95
- const mapSet = (map, key, value) =>
96
- isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
97
- const mapEnsure = (map, key, getDefaultValue) => {
98
- if (!collHas(map, key)) {
99
- mapSet(map, key, getDefaultValue());
100
- }
101
- return mapGet(map, key);
102
- };
103
- const mapMatch = (map, obj, set, del = mapSet) => {
104
- objMap(obj, (value, id) => set(map, id, value));
105
- mapForEach(map, (id) => (objHas(obj, id) ? 0 : del(map, id)));
106
- return map;
107
- };
108
- const mapToObj = (map, mapValue, excludeValue) => {
109
- const obj = {};
110
- collForEach(map, (value, id) => {
111
- const mappedValue = mapValue ? mapValue(value, id) : value;
112
- excludeValue?.(mappedValue, value) ? 0 : (obj[id] = mappedValue);
113
- });
114
- return obj;
115
- };
116
- const mapToObj2 = (map, mapValue, excludeValue) =>
117
- mapToObj(
118
- map,
119
- (childMap) => mapToObj(childMap, mapValue, excludeValue),
120
- objIsEmpty,
121
- );
122
- const mapToObj3 = (map, mapValue, excludeValue) =>
123
- mapToObj(
124
- map,
125
- (childMap) => mapToObj2(childMap, mapValue, excludeValue),
126
- objIsEmpty,
127
- );
128
- const mapClone = (map, mapValue) => {
129
- const map2 = mapNew();
130
- collForEach(map, (value, key) => map2.set(key, mapValue?.(value) ?? value));
131
- return map2;
132
- };
133
- const mapClone2 = (map) => mapClone(map, mapClone);
134
- const mapClone3 = (map) => mapClone(map, mapClone2);
135
- const visitTree = (node, path, ensureLeaf, pruneLeaf, p = 0) =>
136
- ifNotUndefined(
137
- (ensureLeaf ? mapEnsure : mapGet)(
138
- node,
139
- path[p],
140
- p > size(path) - 2 ? ensureLeaf : mapNew,
141
- ),
142
- (nodeOrLeaf) => {
143
- if (p > size(path) - 2) {
144
- if (pruneLeaf?.(nodeOrLeaf)) {
145
- mapSet(node, path[p]);
146
- }
147
- return nodeOrLeaf;
148
- }
149
- const leaf = visitTree(nodeOrLeaf, path, ensureLeaf, pruneLeaf, p + 1);
150
- if (collIsEmpty(nodeOrLeaf)) {
151
- mapSet(node, path[p]);
152
- }
153
- return leaf;
154
- },
155
- );
156
-
157
- const setNew = (entryOrEntries) =>
158
- new Set(
159
- isArray(entryOrEntries) || isUndefined(entryOrEntries)
160
- ? entryOrEntries
161
- : [entryOrEntries],
162
- );
163
- const setAdd = (set, value) => set?.add(value);
164
-
165
- const INTEGER = /^\d+$/;
166
- const getPoolFunctions = () => {
167
- const pool = [];
168
- let nextId = 0;
169
- return [
170
- (reuse) => (reuse ? arrayShift(pool) : null) ?? EMPTY_STRING + nextId++,
171
- (id) => {
172
- if (test(INTEGER, id) && size(pool) < 1e3) {
173
- arrayPush(pool, id);
174
- }
175
- },
176
- ];
177
- };
178
-
179
- const getWildcardedLeaves = (deepIdSet, path = [EMPTY_STRING]) => {
180
- const leaves = [];
181
- const deep = (node, p) =>
182
- p == size(path)
183
- ? arrayPush(leaves, node)
184
- : path[p] === null
185
- ? collForEach(node, (node2) => deep(node2, p + 1))
186
- : arrayForEach([path[p], null], (id) => deep(mapGet(node, id), p + 1));
187
- deep(deepIdSet, 0);
188
- return leaves;
189
- };
190
- const getListenerFunctions = (getThing) => {
191
- let thing;
192
- const [getId, releaseId] = getPoolFunctions();
193
- const allListeners = mapNew();
194
- const addListener = (
195
- listener,
196
- idSetNode,
197
- path,
198
- pathGetters = [],
199
- extraArgsGetter = () => [],
200
- ) => {
201
- thing ??= getThing();
202
- const id = getId(1);
203
- mapSet(allListeners, id, [
204
- listener,
205
- idSetNode,
206
- path,
207
- pathGetters,
208
- extraArgsGetter,
209
- ]);
210
- setAdd(visitTree(idSetNode, path ?? [EMPTY_STRING], setNew), id);
211
- return id;
212
- };
213
- const callListeners = (idSetNode, ids, ...extraArgs) =>
214
- arrayForEach(getWildcardedLeaves(idSetNode, ids), (set) =>
215
- collForEach(set, (id) =>
216
- mapGet(allListeners, id)[0](thing, ...(ids ?? []), ...extraArgs),
217
- ),
218
- );
219
- const delListener = (id) =>
220
- ifNotUndefined(mapGet(allListeners, id), ([, idSetNode, idOrNulls]) => {
221
- visitTree(idSetNode, idOrNulls ?? [EMPTY_STRING], void 0, (idSet) => {
222
- collDel(idSet, id);
223
- return collIsEmpty(idSet) ? 1 : 0;
224
- });
225
- mapSet(allListeners, id);
226
- releaseId(id);
227
- return idOrNulls;
228
- });
229
- const callListener = (id) =>
230
- ifNotUndefined(
231
- mapGet(allListeners, id),
232
- ([listener, , path = [], pathGetters, extraArgsGetter]) => {
233
- const callWithIds = (...ids) => {
234
- const index = size(ids);
235
- index == size(path)
236
- ? listener(thing, ...ids, ...extraArgsGetter(ids))
237
- : isUndefined(path[index])
238
- ? arrayForEach(pathGetters[index]?.(...ids) ?? [], (id2) =>
239
- callWithIds(...ids, id2),
240
- )
241
- : callWithIds(...ids, path[index]);
242
- };
243
- callWithIds();
244
- },
245
- );
246
- return [addListener, callListeners, delListener, callListener];
247
- };
248
-
249
- const pairNew = (value) => [value, value];
250
- const pairCollSize2 = (pair, func = collSize2) => func(pair[0]) + func(pair[1]);
251
- const pairNewMap = () => [mapNew(), mapNew()];
252
- const pairClone = (array) => [...array];
253
- const pairIsEqual = ([entry1, entry2]) => entry1 === entry2;
254
-
255
- const getCellOrValueType = (cell) => {
256
- const type = getTypeOf(cell);
257
- return isTypeStringOrBoolean(type) || (type == NUMBER && isFiniteNumber(cell))
258
- ? type
259
- : void 0;
260
- };
261
- const setOrDelCell = (store, tableId, rowId, cellId, cell) =>
262
- isUndefined(cell)
263
- ? store.delCell(tableId, rowId, cellId, true)
264
- : store.setCell(tableId, rowId, cellId, cell);
265
- const setOrDelValue = (store, valueId, value) =>
266
- isUndefined(value) ? store.delValue(valueId) : store.setValue(valueId, value);
267
-
268
- const jsonString = (obj) =>
269
- JSON.stringify(obj, (_key, value) =>
270
- isInstanceOf(value, Map) ? object.fromEntries([...value]) : value,
271
- );
272
- const jsonParse = JSON.parse;
273
-
274
- const defaultSorter = (sortKey1, sortKey2) =>
275
- (sortKey1 ?? 0) < (sortKey2 ?? 0) ? -1 : 1;
276
-
277
- const validate = (obj, validateChild, onInvalidObj) => {
278
- if (isUndefined(obj) || !isObject(obj) || objIsEmpty(obj) || objFrozen(obj)) {
279
- onInvalidObj?.();
280
- return false;
281
- }
282
- objMap(obj, (child, id2) => {
283
- if (!validateChild(child, id2)) {
284
- objDel(obj, id2);
285
- }
286
- });
287
- return !objIsEmpty(obj);
288
- };
289
- const idsChanged = (changedIds, id2, addedOrRemoved) =>
290
- mapSet(
291
- changedIds,
292
- id2,
293
- mapGet(changedIds, id2) == -addedOrRemoved ? void 0 : addedOrRemoved,
294
- );
295
- const createStore = () => {
296
- let hasTablesSchema;
297
- let hasValuesSchema;
298
- let cellsTouched = false;
299
- let valuesTouched = false;
300
- let hadTables = false;
301
- let hadValues = false;
302
- let transactions = 0;
303
- const changedTableIds = mapNew();
304
- const changedTableCellIds = mapNew();
305
- const changedRowCount = mapNew();
306
- const changedRowIds = mapNew();
307
- const changedCellIds = mapNew();
308
- const changedCells = mapNew();
309
- const changedValueIds = mapNew();
310
- const changedValues = mapNew();
311
- const invalidCells = mapNew();
312
- const invalidValues = mapNew();
313
- const tablesSchemaMap = mapNew();
314
- const tablesSchemaRowCache = mapNew();
315
- const valuesSchemaMap = mapNew();
316
- const valuesDefaulted = mapNew();
317
- const valuesNonDefaulted = setNew();
318
- const tablePoolFunctions = mapNew();
319
- const tableCellIds = mapNew();
320
- const tablesMap = mapNew();
321
- const valuesMap = mapNew();
322
- const hasTablesListeners = pairNewMap();
323
- const tablesListeners = pairNewMap();
324
- const tableIdsListeners = pairNewMap();
325
- const hasTableListeners = pairNewMap();
326
- const tableListeners = pairNewMap();
327
- const tableCellIdsListeners = pairNewMap();
328
- const hasTableCellListeners = pairNewMap();
329
- const rowCountListeners = pairNewMap();
330
- const rowIdsListeners = pairNewMap();
331
- const sortedRowIdsListeners = pairNewMap();
332
- const hasRowListeners = pairNewMap();
333
- const rowListeners = pairNewMap();
334
- const cellIdsListeners = pairNewMap();
335
- const hasCellListeners = pairNewMap();
336
- const cellListeners = pairNewMap();
337
- const invalidCellListeners = pairNewMap();
338
- const invalidValueListeners = pairNewMap();
339
- const hasValuesListeners = pairNewMap();
340
- const valuesListeners = pairNewMap();
341
- const valueIdsListeners = pairNewMap();
342
- const hasValueListeners = pairNewMap();
343
- const valueListeners = pairNewMap();
344
- const startTransactionListeners = mapNew();
345
- const finishTransactionListeners = pairNewMap();
346
- const [addListener, callListeners, delListenerImpl, callListenerImpl] =
347
- getListenerFunctions(() => store);
348
- const validateTablesSchema = (tableSchema) =>
349
- validate(tableSchema, (tableSchema2) =>
350
- validate(tableSchema2, validateCellOrValueSchema),
351
- );
352
- const validateValuesSchema = (valuesSchema) =>
353
- validate(valuesSchema, validateCellOrValueSchema);
354
- const validateCellOrValueSchema = (schema) => {
355
- if (!validate(schema, (_child, id2) => arrayHas([TYPE, DEFAULT], id2))) {
356
- return false;
357
- }
358
- const type = schema[TYPE];
359
- if (!isTypeStringOrBoolean(type) && type != NUMBER) {
360
- return false;
361
- }
362
- if (getCellOrValueType(schema[DEFAULT]) != type) {
363
- objDel(schema, DEFAULT);
364
- }
365
- return true;
366
- };
367
- const validateTables = (tables) =>
368
- validate(tables, validateTable, cellInvalid);
369
- const validateTable = (table, tableId) =>
370
- (!hasTablesSchema ||
371
- collHas(tablesSchemaMap, tableId) ||
372
- cellInvalid(tableId)) &&
373
- validate(
374
- table,
375
- (row, rowId) => validateRow(tableId, rowId, row),
376
- () => cellInvalid(tableId),
377
- );
378
- const validateRow = (tableId, rowId, row, skipDefaults) =>
379
- validate(
380
- skipDefaults ? row : addDefaultsToRow(row, tableId, rowId),
381
- (cell, cellId) =>
382
- ifNotUndefined(
383
- getValidatedCell(tableId, rowId, cellId, cell),
384
- (validCell) => {
385
- row[cellId] = validCell;
386
- return true;
387
- },
388
- () => false,
389
- ),
390
- () => cellInvalid(tableId, rowId),
391
- );
392
- const getValidatedCell = (tableId, rowId, cellId, cell) =>
393
- hasTablesSchema
394
- ? ifNotUndefined(
395
- mapGet(mapGet(tablesSchemaMap, tableId), cellId),
396
- (cellSchema) =>
397
- getCellOrValueType(cell) != cellSchema[TYPE]
398
- ? cellInvalid(tableId, rowId, cellId, cell, cellSchema[DEFAULT])
399
- : cell,
400
- () => cellInvalid(tableId, rowId, cellId, cell),
401
- )
402
- : isUndefined(getCellOrValueType(cell))
403
- ? cellInvalid(tableId, rowId, cellId, cell)
404
- : cell;
405
- const validateValues = (values, skipDefaults) =>
406
- validate(
407
- skipDefaults ? values : addDefaultsToValues(values),
408
- (value, valueId) =>
409
- ifNotUndefined(
410
- getValidatedValue(valueId, value),
411
- (validValue) => {
412
- values[valueId] = validValue;
413
- return true;
414
- },
415
- () => false,
416
- ),
417
- () => valueInvalid(),
418
- );
419
- const getValidatedValue = (valueId, value) =>
420
- hasValuesSchema
421
- ? ifNotUndefined(
422
- mapGet(valuesSchemaMap, valueId),
423
- (valueSchema) =>
424
- getCellOrValueType(value) != valueSchema[TYPE]
425
- ? valueInvalid(valueId, value, valueSchema[DEFAULT])
426
- : value,
427
- () => valueInvalid(valueId, value),
428
- )
429
- : isUndefined(getCellOrValueType(value))
430
- ? valueInvalid(valueId, value)
431
- : value;
432
- const addDefaultsToRow = (row, tableId, rowId) => {
433
- ifNotUndefined(
434
- mapGet(tablesSchemaRowCache, tableId),
435
- ([rowDefaulted, rowNonDefaulted]) => {
436
- collForEach(rowDefaulted, (cell, cellId) => {
437
- if (!objHas(row, cellId)) {
438
- row[cellId] = cell;
439
- }
440
- });
441
- collForEach(rowNonDefaulted, (cellId) => {
442
- if (!objHas(row, cellId)) {
443
- cellInvalid(tableId, rowId, cellId);
444
- }
445
- });
446
- },
447
- );
448
- return row;
449
- };
450
- const addDefaultsToValues = (values) => {
451
- if (hasValuesSchema) {
452
- collForEach(valuesDefaulted, (value, valueId) => {
453
- if (!objHas(values, valueId)) {
454
- values[valueId] = value;
455
- }
456
- });
457
- collForEach(valuesNonDefaulted, (valueId) => {
458
- if (!objHas(values, valueId)) {
459
- valueInvalid(valueId);
460
- }
461
- });
462
- }
463
- return values;
464
- };
465
- const setValidTablesSchema = (tablesSchema) =>
466
- mapMatch(
467
- tablesSchemaMap,
468
- tablesSchema,
469
- (_tablesSchema, tableId, tableSchema) => {
470
- const rowDefaulted = mapNew();
471
- const rowNonDefaulted = setNew();
472
- mapMatch(
473
- mapEnsure(tablesSchemaMap, tableId, mapNew),
474
- tableSchema,
475
- (tableSchemaMap, cellId, cellSchema) => {
476
- mapSet(tableSchemaMap, cellId, cellSchema);
477
- ifNotUndefined(
478
- cellSchema[DEFAULT],
479
- (def) => mapSet(rowDefaulted, cellId, def),
480
- () => setAdd(rowNonDefaulted, cellId),
481
- );
482
- },
483
- );
484
- mapSet(tablesSchemaRowCache, tableId, [rowDefaulted, rowNonDefaulted]);
485
- },
486
- (_tablesSchema, tableId) => {
487
- mapSet(tablesSchemaMap, tableId);
488
- mapSet(tablesSchemaRowCache, tableId);
489
- },
490
- );
491
- const setValidValuesSchema = (valuesSchema) =>
492
- mapMatch(
493
- valuesSchemaMap,
494
- valuesSchema,
495
- (_valuesSchema, valueId, valueSchema) => {
496
- mapSet(valuesSchemaMap, valueId, valueSchema);
497
- ifNotUndefined(
498
- valueSchema[DEFAULT],
499
- (def) => mapSet(valuesDefaulted, valueId, def),
500
- () => setAdd(valuesNonDefaulted, valueId),
501
- );
502
- },
503
- (_valuesSchema, valueId) => {
504
- mapSet(valuesSchemaMap, valueId);
505
- mapSet(valuesDefaulted, valueId);
506
- collDel(valuesNonDefaulted, valueId);
507
- },
508
- );
509
- const setOrDelTables = (tables) =>
510
- objIsEmpty(tables) ? delTables() : setTables(tables);
511
- const setValidTables = (tables) =>
512
- mapMatch(
513
- tablesMap,
514
- tables,
515
- (_tables, tableId, table) => setValidTable(tableId, table),
516
- (_tables, tableId) => delValidTable(tableId),
517
- );
518
- const setValidTable = (tableId, table) =>
519
- mapMatch(
520
- mapEnsure(tablesMap, tableId, () => {
521
- tableIdsChanged(tableId, 1);
522
- mapSet(tablePoolFunctions, tableId, getPoolFunctions());
523
- mapSet(tableCellIds, tableId, mapNew());
524
- return mapNew();
525
- }),
526
- table,
527
- (tableMap, rowId, row) => setValidRow(tableId, tableMap, rowId, row),
528
- (tableMap, rowId) => delValidRow(tableId, tableMap, rowId),
529
- );
530
- const setValidRow = (tableId, tableMap, rowId, row, forceDel) =>
531
- mapMatch(
532
- mapEnsure(tableMap, rowId, () => {
533
- rowIdsChanged(tableId, rowId, 1);
534
- return mapNew();
535
- }),
536
- row,
537
- (rowMap, cellId, cell) =>
538
- setValidCell(tableId, rowId, rowMap, cellId, cell),
539
- (rowMap, cellId) =>
540
- delValidCell(tableId, tableMap, rowId, rowMap, cellId, forceDel),
541
- );
542
- const setValidCell = (tableId, rowId, rowMap, cellId, cell) => {
543
- if (!collHas(rowMap, cellId)) {
544
- cellIdsChanged(tableId, rowId, cellId, 1);
545
- }
546
- const oldCell = mapGet(rowMap, cellId);
547
- if (cell !== oldCell) {
548
- cellChanged(tableId, rowId, cellId, oldCell, cell);
549
- mapSet(rowMap, cellId, cell);
550
- }
551
- };
552
- const setCellIntoDefaultRow = (tableId, tableMap, rowId, cellId, validCell) =>
553
- ifNotUndefined(
554
- mapGet(tableMap, rowId),
555
- (rowMap) => setValidCell(tableId, rowId, rowMap, cellId, validCell),
556
- () =>
557
- setValidRow(
558
- tableId,
559
- tableMap,
560
- rowId,
561
- addDefaultsToRow({[cellId]: validCell}, tableId, rowId),
562
- ),
563
- );
564
- const setOrDelValues = (values) =>
565
- objIsEmpty(values) ? delValues() : setValues(values);
566
- const setValidValues = (values) =>
567
- mapMatch(
568
- valuesMap,
569
- values,
570
- (_valuesMap, valueId, value) => setValidValue(valueId, value),
571
- (_valuesMap, valueId) => delValidValue(valueId),
572
- );
573
- const setValidValue = (valueId, value) => {
574
- if (!collHas(valuesMap, valueId)) {
575
- valueIdsChanged(valueId, 1);
576
- }
577
- const oldValue = mapGet(valuesMap, valueId);
578
- if (value !== oldValue) {
579
- valueChanged(valueId, oldValue, value);
580
- mapSet(valuesMap, valueId, value);
581
- }
582
- };
583
- const getNewRowId = (tableId, reuse) => {
584
- const [getId] = mapGet(tablePoolFunctions, tableId);
585
- const rowId = getId(reuse);
586
- if (!collHas(mapGet(tablesMap, tableId), rowId)) {
587
- return rowId;
588
- }
589
- return getNewRowId(tableId, reuse);
590
- };
591
- const getOrCreateTable = (tableId) =>
592
- mapGet(tablesMap, tableId) ?? setValidTable(tableId, {});
593
- const delValidTable = (tableId) => setValidTable(tableId, {});
594
- const delValidRow = (tableId, tableMap, rowId) => {
595
- const [, releaseId] = mapGet(tablePoolFunctions, tableId);
596
- releaseId(rowId);
597
- setValidRow(tableId, tableMap, rowId, {}, true);
598
- };
599
- const delValidCell = (tableId, table, rowId, row, cellId, forceDel) => {
600
- const defaultCell = mapGet(
601
- mapGet(tablesSchemaRowCache, tableId)?.[0],
602
- cellId,
603
- );
604
- if (!isUndefined(defaultCell) && !forceDel) {
605
- return setValidCell(tableId, rowId, row, cellId, defaultCell);
606
- }
607
- const delCell2 = (cellId2) => {
608
- cellChanged(tableId, rowId, cellId2, mapGet(row, cellId2));
609
- cellIdsChanged(tableId, rowId, cellId2, -1);
610
- mapSet(row, cellId2);
611
- };
612
- isUndefined(defaultCell) ? delCell2(cellId) : mapForEach(row, delCell2);
613
- if (collIsEmpty(row)) {
614
- rowIdsChanged(tableId, rowId, -1);
615
- if (collIsEmpty(mapSet(table, rowId))) {
616
- tableIdsChanged(tableId, -1);
617
- mapSet(tablesMap, tableId);
618
- mapSet(tablePoolFunctions, tableId);
619
- mapSet(tableCellIds, tableId);
620
- }
621
- }
622
- };
623
- const delValidValue = (valueId) => {
624
- const defaultValue = mapGet(valuesDefaulted, valueId);
625
- if (!isUndefined(defaultValue)) {
626
- return setValidValue(valueId, defaultValue);
627
- }
628
- valueChanged(valueId, mapGet(valuesMap, valueId));
629
- valueIdsChanged(valueId, -1);
630
- mapSet(valuesMap, valueId);
631
- };
632
- const tableIdsChanged = (tableId, addedOrRemoved) =>
633
- idsChanged(changedTableIds, tableId, addedOrRemoved);
634
- const rowIdsChanged = (tableId, rowId, addedOrRemoved) =>
635
- idsChanged(
636
- mapEnsure(changedRowIds, tableId, mapNew),
637
- rowId,
638
- addedOrRemoved,
639
- ) &&
640
- mapSet(
641
- changedRowCount,
642
- tableId,
643
- mapEnsure(changedRowCount, tableId, () => 0) + addedOrRemoved,
644
- );
645
- const cellIdsChanged = (tableId, rowId, cellId, addedOrRemoved) => {
646
- const cellIds = mapGet(tableCellIds, tableId);
647
- const count = mapGet(cellIds, cellId) ?? 0;
648
- if (
649
- (count == 0 && addedOrRemoved == 1) ||
650
- (count == 1 && addedOrRemoved == -1)
651
- ) {
652
- idsChanged(
653
- mapEnsure(changedTableCellIds, tableId, mapNew),
654
- cellId,
655
- addedOrRemoved,
656
- );
657
- }
658
- mapSet(
659
- cellIds,
660
- cellId,
661
- count != -addedOrRemoved ? count + addedOrRemoved : null,
662
- );
663
- idsChanged(
664
- mapEnsure(mapEnsure(changedCellIds, tableId, mapNew), rowId, mapNew),
665
- cellId,
666
- addedOrRemoved,
667
- );
668
- };
669
- const cellChanged = (tableId, rowId, cellId, oldCell, newCell) =>
670
- (mapEnsure(
671
- mapEnsure(mapEnsure(changedCells, tableId, mapNew), rowId, mapNew),
672
- cellId,
673
- () => [oldCell, 0],
674
- )[1] = newCell);
675
- const valueIdsChanged = (valueId, addedOrRemoved) =>
676
- idsChanged(changedValueIds, valueId, addedOrRemoved);
677
- const valueChanged = (valueId, oldValue, newValue) =>
678
- (mapEnsure(changedValues, valueId, () => [oldValue, 0])[1] = newValue);
679
- const cellInvalid = (tableId, rowId, cellId, invalidCell, defaultedCell) => {
680
- arrayPush(
681
- mapEnsure(
682
- mapEnsure(mapEnsure(invalidCells, tableId, mapNew), rowId, mapNew),
683
- cellId,
684
- () => [],
685
- ),
686
- invalidCell,
687
- );
688
- return defaultedCell;
689
- };
690
- const valueInvalid = (valueId, invalidValue, defaultedValue) => {
691
- arrayPush(
692
- mapEnsure(invalidValues, valueId, () => []),
693
- invalidValue,
694
- );
695
- return defaultedValue;
696
- };
697
- const getCellChange = (tableId, rowId, cellId) =>
698
- ifNotUndefined(
699
- mapGet(mapGet(mapGet(changedCells, tableId), rowId), cellId),
700
- ([oldCell, newCell]) => [true, oldCell, newCell],
701
- () => [false, ...pairNew(getCell(tableId, rowId, cellId))],
702
- );
703
- const getValueChange = (valueId) =>
704
- ifNotUndefined(
705
- mapGet(changedValues, valueId),
706
- ([oldValue, newValue]) => [true, oldValue, newValue],
707
- () => [false, ...pairNew(getValue(valueId))],
708
- );
709
- const callInvalidCellListeners = (mutator) =>
710
- !collIsEmpty(invalidCells) && !collIsEmpty(invalidCellListeners[mutator])
711
- ? collForEach(
712
- mutator ? mapClone3(invalidCells) : invalidCells,
713
- (rows, tableId) =>
714
- collForEach(rows, (cells, rowId) =>
715
- collForEach(cells, (invalidCell, cellId) =>
716
- callListeners(
717
- invalidCellListeners[mutator],
718
- [tableId, rowId, cellId],
719
- invalidCell,
720
- ),
721
- ),
722
- ),
723
- )
724
- : 0;
725
- const callInvalidValueListeners = (mutator) =>
726
- !collIsEmpty(invalidValues) && !collIsEmpty(invalidValueListeners[mutator])
727
- ? collForEach(
728
- mutator ? mapClone(invalidValues) : invalidValues,
729
- (invalidValue, valueId) =>
730
- callListeners(
731
- invalidValueListeners[mutator],
732
- [valueId],
733
- invalidValue,
734
- ),
735
- )
736
- : 0;
737
- const callIdsAndHasListenersIfChanged = (
738
- changedIds,
739
- idListeners,
740
- hasListeners,
741
- ids,
742
- ) => {
743
- if (!collIsEmpty(changedIds)) {
744
- callListeners(idListeners, ids, () => mapToObj(changedIds));
745
- mapForEach(changedIds, (changedId, changed) =>
746
- callListeners(hasListeners, [...(ids ?? []), changedId], changed == 1),
747
- );
748
- return 1;
749
- }
750
- };
751
- const callTabularListenersForChanges = (mutator) => {
752
- const hasTablesNow = hasTables();
753
- if (hasTablesNow != hadTables) {
754
- callListeners(hasTablesListeners[mutator], void 0, hasTablesNow);
755
- }
756
- const emptySortedRowIdListeners = collIsEmpty(
757
- sortedRowIdsListeners[mutator],
758
- );
759
- const emptyIdAndHasListeners =
760
- collIsEmpty(cellIdsListeners[mutator]) &&
761
- collIsEmpty(hasCellListeners[mutator]) &&
762
- collIsEmpty(rowIdsListeners[mutator]) &&
763
- collIsEmpty(hasRowListeners[mutator]) &&
764
- collIsEmpty(tableCellIdsListeners[mutator]) &&
765
- collIsEmpty(hasTableCellListeners[mutator]) &&
766
- collIsEmpty(rowCountListeners[mutator]) &&
767
- emptySortedRowIdListeners &&
768
- collIsEmpty(tableIdsListeners[mutator]) &&
769
- collIsEmpty(hasTableListeners[mutator]);
770
- const emptyOtherListeners =
771
- collIsEmpty(cellListeners[mutator]) &&
772
- collIsEmpty(rowListeners[mutator]) &&
773
- collIsEmpty(tableListeners[mutator]) &&
774
- collIsEmpty(tablesListeners[mutator]);
775
- if (!emptyIdAndHasListeners || !emptyOtherListeners) {
776
- const changes = mutator
777
- ? [
778
- mapClone(changedTableIds),
779
- mapClone2(changedTableCellIds),
780
- mapClone(changedRowCount),
781
- mapClone2(changedRowIds),
782
- mapClone3(changedCellIds),
783
- mapClone3(changedCells),
784
- ]
785
- : [
786
- changedTableIds,
787
- changedTableCellIds,
788
- changedRowCount,
789
- changedRowIds,
790
- changedCellIds,
791
- changedCells,
792
- ];
793
- if (!emptyIdAndHasListeners) {
794
- callIdsAndHasListenersIfChanged(
795
- changes[0],
796
- tableIdsListeners[mutator],
797
- hasTableListeners[mutator],
798
- );
799
- collForEach(changes[1], (changedIds, tableId) =>
800
- callIdsAndHasListenersIfChanged(
801
- changedIds,
802
- tableCellIdsListeners[mutator],
803
- hasTableCellListeners[mutator],
804
- [tableId],
805
- ),
806
- );
807
- collForEach(changes[2], (changedCount, tableId) => {
808
- if (changedCount != 0) {
809
- callListeners(
810
- rowCountListeners[mutator],
811
- [tableId],
812
- getRowCount(tableId),
813
- );
814
- }
815
- });
816
- const calledSortableTableIds = setNew();
817
- collForEach(changes[3], (changedIds, tableId) => {
818
- if (
819
- callIdsAndHasListenersIfChanged(
820
- changedIds,
821
- rowIdsListeners[mutator],
822
- hasRowListeners[mutator],
823
- [tableId],
824
- ) &&
825
- !emptySortedRowIdListeners
826
- ) {
827
- callListeners(sortedRowIdsListeners[mutator], [tableId, null]);
828
- setAdd(calledSortableTableIds, tableId);
829
- }
830
- });
831
- if (!emptySortedRowIdListeners) {
832
- collForEach(changes[5], (rows, tableId) => {
833
- if (!collHas(calledSortableTableIds, tableId)) {
834
- const sortableCellIds = setNew();
835
- collForEach(rows, (cells) =>
836
- collForEach(cells, ([oldCell, newCell], cellId) =>
837
- newCell !== oldCell
838
- ? setAdd(sortableCellIds, cellId)
839
- : collDel(cells, cellId),
840
- ),
841
- );
842
- collForEach(sortableCellIds, (cellId) =>
843
- callListeners(sortedRowIdsListeners[mutator], [
844
- tableId,
845
- cellId,
846
- ]),
847
- );
848
- }
849
- });
850
- }
851
- collForEach(changes[4], (rowCellIds, tableId) =>
852
- collForEach(rowCellIds, (changedIds, rowId) =>
853
- callIdsAndHasListenersIfChanged(
854
- changedIds,
855
- cellIdsListeners[mutator],
856
- hasCellListeners[mutator],
857
- [tableId, rowId],
858
- ),
859
- ),
860
- );
861
- }
862
- if (!emptyOtherListeners) {
863
- let tablesChanged;
864
- collForEach(changes[5], (rows, tableId) => {
865
- let tableChanged;
866
- collForEach(rows, (cells, rowId) => {
867
- let rowChanged;
868
- collForEach(cells, ([oldCell, newCell], cellId) => {
869
- if (newCell !== oldCell) {
870
- callListeners(
871
- cellListeners[mutator],
872
- [tableId, rowId, cellId],
873
- newCell,
874
- oldCell,
875
- getCellChange,
876
- );
877
- tablesChanged = tableChanged = rowChanged = 1;
878
- }
879
- });
880
- if (rowChanged) {
881
- callListeners(
882
- rowListeners[mutator],
883
- [tableId, rowId],
884
- getCellChange,
885
- );
886
- }
887
- });
888
- if (tableChanged) {
889
- callListeners(tableListeners[mutator], [tableId], getCellChange);
890
- }
891
- });
892
- if (tablesChanged) {
893
- callListeners(tablesListeners[mutator], void 0, getCellChange);
894
- }
895
- }
896
- }
897
- };
898
- const callValuesListenersForChanges = (mutator) => {
899
- const hasValuesNow = hasValues();
900
- if (hasValuesNow != hadValues) {
901
- callListeners(hasValuesListeners[mutator], void 0, hasValuesNow);
902
- }
903
- const emptyIdAndHasListeners =
904
- collIsEmpty(valueIdsListeners[mutator]) &&
905
- collIsEmpty(hasValueListeners[mutator]);
906
- const emptyOtherListeners =
907
- collIsEmpty(valueListeners[mutator]) &&
908
- collIsEmpty(valuesListeners[mutator]);
909
- if (!emptyIdAndHasListeners || !emptyOtherListeners) {
910
- const changes = mutator
911
- ? [mapClone(changedValueIds), mapClone(changedValues)]
912
- : [changedValueIds, changedValues];
913
- if (!emptyIdAndHasListeners) {
914
- callIdsAndHasListenersIfChanged(
915
- changes[0],
916
- valueIdsListeners[mutator],
917
- hasValueListeners[mutator],
918
- );
919
- }
920
- if (!emptyOtherListeners) {
921
- let valuesChanged;
922
- collForEach(changes[1], ([oldValue, newValue], valueId) => {
923
- if (newValue !== oldValue) {
924
- callListeners(
925
- valueListeners[mutator],
926
- [valueId],
927
- newValue,
928
- oldValue,
929
- getValueChange,
930
- );
931
- valuesChanged = 1;
932
- }
933
- });
934
- if (valuesChanged) {
935
- callListeners(valuesListeners[mutator], void 0, getValueChange);
936
- }
937
- }
938
- }
939
- };
940
- const fluentTransaction = (actions, ...args) => {
941
- transaction(() => actions(...arrayMap(args, id)));
942
- return store;
943
- };
944
- const getTransactionChanges = () => [
945
- mapToObj(
946
- changedCells,
947
- (table, tableId) =>
948
- mapGet(changedTableIds, tableId) === -1
949
- ? null
950
- : mapToObj(
951
- table,
952
- (row, rowId) =>
953
- mapGet(mapGet(changedRowIds, tableId), rowId) === -1
954
- ? null
955
- : mapToObj(
956
- row,
957
- ([, newCell]) => newCell ?? null,
958
- (_, changedCell) => pairIsEqual(changedCell),
959
- ),
960
- objIsEmpty,
961
- ),
962
- objIsEmpty,
963
- ),
964
- mapToObj(
965
- changedValues,
966
- ([, newValue]) => newValue ?? null,
967
- (_, changedValue) => pairIsEqual(changedValue),
968
- ),
969
- ];
970
- const getTransactionLog = () => ({
971
- cellsTouched,
972
- valuesTouched,
973
- changedCells: mapToObj3(changedCells, pairClone, pairIsEqual),
974
- invalidCells: mapToObj3(invalidCells),
975
- changedValues: mapToObj(changedValues, pairClone, pairIsEqual),
976
- invalidValues: mapToObj(invalidValues),
977
- changedTableIds: mapToObj(changedTableIds),
978
- changedRowIds: mapToObj2(changedRowIds),
979
- changedCellIds: mapToObj3(changedCellIds),
980
- changedValueIds: mapToObj(changedValueIds),
981
- });
982
- const getContent = () => [getTables(), getValues()];
983
- const getTables = () => mapToObj3(tablesMap);
984
- const getTableIds = () => mapKeys(tablesMap);
985
- const getTable = (tableId) => mapToObj2(mapGet(tablesMap, id(tableId)));
986
- const getTableCellIds = (tableId) =>
987
- mapKeys(mapGet(tableCellIds, id(tableId)));
988
- const getRowCount = (tableId) => collSize(mapGet(tablesMap, id(tableId)));
989
- const getRowIds = (tableId) => mapKeys(mapGet(tablesMap, id(tableId)));
990
- const getSortedRowIds = (tableId, cellId, descending, offset = 0, limit) =>
991
- arrayMap(
992
- slice(
993
- arraySort(
994
- mapMap(mapGet(tablesMap, id(tableId)), (row, rowId) => [
995
- isUndefined(cellId) ? rowId : mapGet(row, id(cellId)),
996
- rowId,
997
- ]),
998
- ([cell1], [cell2]) =>
999
- defaultSorter(cell1, cell2) * (descending ? -1 : 1),
1000
- ),
1001
- offset,
1002
- isUndefined(limit) ? limit : offset + limit,
1003
- ),
1004
- ([, rowId]) => rowId,
1005
- );
1006
- const getRow = (tableId, rowId) =>
1007
- mapToObj(mapGet(mapGet(tablesMap, id(tableId)), id(rowId)));
1008
- const getCellIds = (tableId, rowId) =>
1009
- mapKeys(mapGet(mapGet(tablesMap, id(tableId)), id(rowId)));
1010
- const getCell = (tableId, rowId, cellId) =>
1011
- mapGet(mapGet(mapGet(tablesMap, id(tableId)), id(rowId)), id(cellId));
1012
- const getValues = () => mapToObj(valuesMap);
1013
- const getValueIds = () => mapKeys(valuesMap);
1014
- const getValue = (valueId) => mapGet(valuesMap, id(valueId));
1015
- const hasTables = () => !collIsEmpty(tablesMap);
1016
- const hasTable = (tableId) => collHas(tablesMap, id(tableId));
1017
- const hasTableCell = (tableId, cellId) =>
1018
- collHas(mapGet(tableCellIds, id(tableId)), id(cellId));
1019
- const hasRow = (tableId, rowId) =>
1020
- collHas(mapGet(tablesMap, id(tableId)), id(rowId));
1021
- const hasCell = (tableId, rowId, cellId) =>
1022
- collHas(mapGet(mapGet(tablesMap, id(tableId)), id(rowId)), id(cellId));
1023
- const hasValues = () => !collIsEmpty(valuesMap);
1024
- const hasValue = (valueId) => collHas(valuesMap, id(valueId));
1025
- const getTablesJson = () => jsonString(tablesMap);
1026
- const getValuesJson = () => jsonString(valuesMap);
1027
- const getJson = () => jsonString([tablesMap, valuesMap]);
1028
- const getTablesSchemaJson = () => jsonString(tablesSchemaMap);
1029
- const getValuesSchemaJson = () => jsonString(valuesSchemaMap);
1030
- const getSchemaJson = () => jsonString([tablesSchemaMap, valuesSchemaMap]);
1031
- const setContent = ([tables, values]) =>
1032
- fluentTransaction(() => {
1033
- (objIsEmpty(tables) ? delTables : setTables)(tables);
1034
- (objIsEmpty(values) ? delValues : setValues)(values);
1035
- });
1036
- const setTables = (tables) =>
1037
- fluentTransaction(() =>
1038
- validateTables(tables) ? setValidTables(tables) : 0,
1039
- );
1040
- const setTable = (tableId, table) =>
1041
- fluentTransaction(
1042
- (tableId2) =>
1043
- validateTable(table, tableId2) ? setValidTable(tableId2, table) : 0,
1044
- tableId,
1045
- );
1046
- const setRow = (tableId, rowId, row) =>
1047
- fluentTransaction(
1048
- (tableId2, rowId2) =>
1049
- validateRow(tableId2, rowId2, row)
1050
- ? setValidRow(tableId2, getOrCreateTable(tableId2), rowId2, row)
1051
- : 0,
1052
- tableId,
1053
- rowId,
1054
- );
1055
- const addRow = (tableId, row, reuseRowIds = true) =>
1056
- transaction(() => {
1057
- let rowId = void 0;
1058
- if (validateRow(tableId, rowId, row)) {
1059
- tableId = id(tableId);
1060
- setValidRow(
1061
- tableId,
1062
- getOrCreateTable(tableId),
1063
- (rowId = getNewRowId(tableId, reuseRowIds ? 1 : 0)),
1064
- row,
1065
- );
1066
- }
1067
- return rowId;
1068
- });
1069
- const setPartialRow = (tableId, rowId, partialRow) =>
1070
- fluentTransaction(
1071
- (tableId2, rowId2) => {
1072
- if (validateRow(tableId2, rowId2, partialRow, 1)) {
1073
- const table = getOrCreateTable(tableId2);
1074
- objMap(partialRow, (cell, cellId) =>
1075
- setCellIntoDefaultRow(tableId2, table, rowId2, cellId, cell),
1076
- );
1077
- }
1078
- },
1079
- tableId,
1080
- rowId,
1081
- );
1082
- const setCell = (tableId, rowId, cellId, cell) =>
1083
- fluentTransaction(
1084
- (tableId2, rowId2, cellId2) =>
1085
- ifNotUndefined(
1086
- getValidatedCell(
1087
- tableId2,
1088
- rowId2,
1089
- cellId2,
1090
- isFunction(cell) ? cell(getCell(tableId2, rowId2, cellId2)) : cell,
1091
- ),
1092
- (validCell) =>
1093
- setCellIntoDefaultRow(
1094
- tableId2,
1095
- getOrCreateTable(tableId2),
1096
- rowId2,
1097
- cellId2,
1098
- validCell,
1099
- ),
1100
- ),
1101
- tableId,
1102
- rowId,
1103
- cellId,
1104
- );
1105
- const setValues = (values) =>
1106
- fluentTransaction(() =>
1107
- validateValues(values) ? setValidValues(values) : 0,
1108
- );
1109
- const setPartialValues = (partialValues) =>
1110
- fluentTransaction(() =>
1111
- validateValues(partialValues, 1)
1112
- ? objMap(partialValues, (value, valueId) =>
1113
- setValidValue(valueId, value),
1114
- )
1115
- : 0,
1116
- );
1117
- const setValue = (valueId, value) =>
1118
- fluentTransaction(
1119
- (valueId2) =>
1120
- ifNotUndefined(
1121
- getValidatedValue(
1122
- valueId2,
1123
- isFunction(value) ? value(getValue(valueId2)) : value,
1124
- ),
1125
- (validValue) => setValidValue(valueId2, validValue),
1126
- ),
1127
- valueId,
1128
- );
1129
- const setTransactionChanges = (transactionChanges) =>
1130
- fluentTransaction(() => {
1131
- objMap(transactionChanges[0], (table, tableId) =>
1132
- isUndefined(table)
1133
- ? delTable(tableId)
1134
- : objMap(table, (row, rowId) =>
1135
- isUndefined(row)
1136
- ? delRow(tableId, rowId)
1137
- : objMap(row, (cell, cellId) =>
1138
- setOrDelCell(store, tableId, rowId, cellId, cell),
1139
- ),
1140
- ),
1141
- );
1142
- objMap(transactionChanges[1], (value, valueId) =>
1143
- setOrDelValue(store, valueId, value),
1144
- );
1145
- });
1146
- const setTablesJson = (tablesJson) => {
1147
- try {
1148
- setOrDelTables(jsonParse(tablesJson));
1149
- } catch {}
1150
- return store;
1151
- };
1152
- const setValuesJson = (valuesJson) => {
1153
- try {
1154
- setOrDelValues(jsonParse(valuesJson));
1155
- } catch {}
1156
- return store;
1157
- };
1158
- const setJson = (tablesAndValuesJson) =>
1159
- fluentTransaction(() => {
1160
- try {
1161
- const [tables, values] = jsonParse(tablesAndValuesJson);
1162
- setOrDelTables(tables);
1163
- setOrDelValues(values);
1164
- } catch {
1165
- setTablesJson(tablesAndValuesJson);
1166
- }
1167
- });
1168
- const setTablesSchema = (tablesSchema) =>
1169
- fluentTransaction(() => {
1170
- if ((hasTablesSchema = validateTablesSchema(tablesSchema))) {
1171
- setValidTablesSchema(tablesSchema);
1172
- if (!collIsEmpty(tablesMap)) {
1173
- const tables = getTables();
1174
- delTables();
1175
- setTables(tables);
1176
- }
1177
- }
1178
- });
1179
- const setValuesSchema = (valuesSchema) =>
1180
- fluentTransaction(() => {
1181
- if ((hasValuesSchema = validateValuesSchema(valuesSchema))) {
1182
- const values = getValues();
1183
- delValuesSchema();
1184
- delValues();
1185
- hasValuesSchema = true;
1186
- setValidValuesSchema(valuesSchema);
1187
- setValues(values);
1188
- }
1189
- });
1190
- const setSchema = (tablesSchema, valuesSchema) =>
1191
- fluentTransaction(() => {
1192
- setTablesSchema(tablesSchema);
1193
- setValuesSchema(valuesSchema);
1194
- });
1195
- const delTables = () => fluentTransaction(() => setValidTables({}));
1196
- const delTable = (tableId) =>
1197
- fluentTransaction(
1198
- (tableId2) =>
1199
- collHas(tablesMap, tableId2) ? delValidTable(tableId2) : 0,
1200
- tableId,
1201
- );
1202
- const delRow = (tableId, rowId) =>
1203
- fluentTransaction(
1204
- (tableId2, rowId2) =>
1205
- ifNotUndefined(mapGet(tablesMap, tableId2), (tableMap) =>
1206
- collHas(tableMap, rowId2)
1207
- ? delValidRow(tableId2, tableMap, rowId2)
1208
- : 0,
1209
- ),
1210
- tableId,
1211
- rowId,
1212
- );
1213
- const delCell = (tableId, rowId, cellId, forceDel) =>
1214
- fluentTransaction(
1215
- (tableId2, rowId2, cellId2) =>
1216
- ifNotUndefined(mapGet(tablesMap, tableId2), (tableMap) =>
1217
- ifNotUndefined(mapGet(tableMap, rowId2), (rowMap) =>
1218
- collHas(rowMap, cellId2)
1219
- ? delValidCell(
1220
- tableId2,
1221
- tableMap,
1222
- rowId2,
1223
- rowMap,
1224
- cellId2,
1225
- forceDel,
1226
- )
1227
- : 0,
1228
- ),
1229
- ),
1230
- tableId,
1231
- rowId,
1232
- cellId,
1233
- );
1234
- const delValues = () => fluentTransaction(() => setValidValues({}));
1235
- const delValue = (valueId) =>
1236
- fluentTransaction(
1237
- (valueId2) =>
1238
- collHas(valuesMap, valueId2) ? delValidValue(valueId2) : 0,
1239
- valueId,
1240
- );
1241
- const delTablesSchema = () =>
1242
- fluentTransaction(() => {
1243
- setValidTablesSchema({});
1244
- hasTablesSchema = false;
1245
- });
1246
- const delValuesSchema = () =>
1247
- fluentTransaction(() => {
1248
- setValidValuesSchema({});
1249
- hasValuesSchema = false;
1250
- });
1251
- const delSchema = () =>
1252
- fluentTransaction(() => {
1253
- delTablesSchema();
1254
- delValuesSchema();
1255
- });
1256
- const transaction = (actions, doRollback) => {
1257
- if (transactions != -1) {
1258
- startTransaction();
1259
- const result = actions();
1260
- finishTransaction(doRollback);
1261
- return result;
1262
- }
1263
- };
1264
- const startTransaction = () => {
1265
- if (transactions != -1) {
1266
- transactions++;
1267
- }
1268
- if (transactions == 1) {
1269
- callListeners(
1270
- startTransactionListeners,
1271
- void 0,
1272
- getTransactionChanges,
1273
- getTransactionLog,
1274
- );
1275
- }
1276
- return store;
1277
- };
1278
- const finishTransaction = (doRollback) => {
1279
- if (transactions > 0) {
1280
- transactions--;
1281
- if (transactions == 0) {
1282
- cellsTouched = !collIsEmpty(changedCells);
1283
- valuesTouched = !collIsEmpty(changedValues);
1284
- transactions = 1;
1285
- callInvalidCellListeners(1);
1286
- if (cellsTouched) {
1287
- callTabularListenersForChanges(1);
1288
- }
1289
- callInvalidValueListeners(1);
1290
- if (valuesTouched) {
1291
- callValuesListenersForChanges(1);
1292
- }
1293
- if (doRollback?.(getTransactionChanges, getTransactionLog)) {
1294
- collForEach(changedCells, (table, tableId) =>
1295
- collForEach(table, (row, rowId) =>
1296
- collForEach(row, ([oldCell], cellId) =>
1297
- setOrDelCell(store, tableId, rowId, cellId, oldCell),
1298
- ),
1299
- ),
1300
- );
1301
- collForEach(changedValues, ([oldValue], valueId) =>
1302
- setOrDelValue(store, valueId, oldValue),
1303
- );
1304
- cellsTouched = valuesTouched = false;
1305
- }
1306
- callListeners(
1307
- finishTransactionListeners[0],
1308
- void 0,
1309
- getTransactionChanges,
1310
- getTransactionLog,
1311
- );
1312
- transactions = -1;
1313
- callInvalidCellListeners(0);
1314
- if (cellsTouched) {
1315
- callTabularListenersForChanges(0);
1316
- }
1317
- callInvalidValueListeners(0);
1318
- if (valuesTouched) {
1319
- callValuesListenersForChanges(0);
1320
- }
1321
- callListeners(
1322
- finishTransactionListeners[1],
1323
- void 0,
1324
- getTransactionChanges,
1325
- getTransactionLog,
1326
- );
1327
- transactions = 0;
1328
- cellsTouched = valuesTouched = false;
1329
- hadTables = hasTables();
1330
- hadValues = hasValues();
1331
- arrayForEach(
1332
- [
1333
- changedTableIds,
1334
- changedTableCellIds,
1335
- changedRowCount,
1336
- changedRowIds,
1337
- changedCellIds,
1338
- changedCells,
1339
- invalidCells,
1340
- changedValueIds,
1341
- changedValues,
1342
- invalidValues,
1343
- ],
1344
- collClear,
1345
- );
1346
- }
1347
- }
1348
- return store;
1349
- };
1350
- const forEachTable = (tableCallback) =>
1351
- collForEach(tablesMap, (tableMap, tableId) =>
1352
- tableCallback(tableId, (rowCallback) =>
1353
- collForEach(tableMap, (rowMap, rowId) =>
1354
- rowCallback(rowId, (cellCallback) =>
1355
- mapForEach(rowMap, cellCallback),
1356
- ),
1357
- ),
1358
- ),
1359
- );
1360
- const forEachTableCell = (tableId, tableCellCallback) =>
1361
- mapForEach(mapGet(tableCellIds, id(tableId)), tableCellCallback);
1362
- const forEachRow = (tableId, rowCallback) =>
1363
- collForEach(mapGet(tablesMap, id(tableId)), (rowMap, rowId) =>
1364
- rowCallback(rowId, (cellCallback) => mapForEach(rowMap, cellCallback)),
1365
- );
1366
- const forEachCell = (tableId, rowId, cellCallback) =>
1367
- mapForEach(mapGet(mapGet(tablesMap, id(tableId)), id(rowId)), cellCallback);
1368
- const forEachValue = (valueCallback) => mapForEach(valuesMap, valueCallback);
1369
- const addSortedRowIdsListener = (
1370
- tableId,
1371
- cellId,
1372
- descending,
1373
- offset,
1374
- limit,
1375
- listener,
1376
- mutator,
1377
- ) => {
1378
- let sortedRowIds = getSortedRowIds(
1379
- tableId,
1380
- cellId,
1381
- descending,
1382
- offset,
1383
- limit,
1384
- );
1385
- return addListener(
1386
- () => {
1387
- const newSortedRowIds = getSortedRowIds(
1388
- tableId,
1389
- cellId,
1390
- descending,
1391
- offset,
1392
- limit,
1393
- );
1394
- if (!arrayIsEqual(newSortedRowIds, sortedRowIds)) {
1395
- sortedRowIds = newSortedRowIds;
1396
- listener(
1397
- store,
1398
- tableId,
1399
- cellId,
1400
- descending,
1401
- offset,
1402
- limit,
1403
- sortedRowIds,
1404
- );
1405
- }
1406
- },
1407
- sortedRowIdsListeners[mutator ? 1 : 0],
1408
- [tableId, cellId],
1409
- [getTableIds],
1410
- );
1411
- };
1412
- const addStartTransactionListener = (listener) =>
1413
- addListener(listener, startTransactionListeners);
1414
- const addWillFinishTransactionListener = (listener) =>
1415
- addListener(listener, finishTransactionListeners[0]);
1416
- const addDidFinishTransactionListener = (listener) =>
1417
- addListener(listener, finishTransactionListeners[1]);
1418
- const callListener = (listenerId) => {
1419
- callListenerImpl(listenerId);
1420
- return store;
1421
- };
1422
- const delListener = (listenerId) => {
1423
- delListenerImpl(listenerId);
1424
- return store;
1425
- };
1426
- const getListenerStats = () => ({
1427
- hasTables: pairCollSize2(hasTablesListeners),
1428
- tables: pairCollSize2(tablesListeners),
1429
- tableIds: pairCollSize2(tableIdsListeners),
1430
- hasTable: pairCollSize2(hasTableListeners),
1431
- table: pairCollSize2(tableListeners),
1432
- tableCellIds: pairCollSize2(tableCellIdsListeners),
1433
- hasTableCell: pairCollSize2(hasTableCellListeners, collSize3),
1434
- rowCount: pairCollSize2(rowCountListeners),
1435
- rowIds: pairCollSize2(rowIdsListeners),
1436
- sortedRowIds: pairCollSize2(sortedRowIdsListeners),
1437
- hasRow: pairCollSize2(hasRowListeners, collSize3),
1438
- row: pairCollSize2(rowListeners, collSize3),
1439
- cellIds: pairCollSize2(cellIdsListeners, collSize3),
1440
- hasCell: pairCollSize2(hasCellListeners, collSize4),
1441
- cell: pairCollSize2(cellListeners, collSize4),
1442
- invalidCell: pairCollSize2(invalidCellListeners, collSize4),
1443
- hasValues: pairCollSize2(hasValuesListeners),
1444
- values: pairCollSize2(valuesListeners),
1445
- valueIds: pairCollSize2(valueIdsListeners),
1446
- hasValue: pairCollSize2(hasValueListeners),
1447
- value: pairCollSize2(valueListeners),
1448
- invalidValue: pairCollSize2(invalidValueListeners),
1449
- transaction:
1450
- collSize2(startTransactionListeners) +
1451
- pairCollSize2(finishTransactionListeners),
1452
- });
1453
- const store = {
1454
- getContent,
1455
- getTables,
1456
- getTableIds,
1457
- getTable,
1458
- getTableCellIds,
1459
- getRowCount,
1460
- getRowIds,
1461
- getSortedRowIds,
1462
- getRow,
1463
- getCellIds,
1464
- getCell,
1465
- getValues,
1466
- getValueIds,
1467
- getValue,
1468
- hasTables,
1469
- hasTable,
1470
- hasTableCell,
1471
- hasRow,
1472
- hasCell,
1473
- hasValues,
1474
- hasValue,
1475
- getTablesJson,
1476
- getValuesJson,
1477
- getJson,
1478
- getTablesSchemaJson,
1479
- getValuesSchemaJson,
1480
- getSchemaJson,
1481
- hasTablesSchema: () => hasTablesSchema,
1482
- hasValuesSchema: () => hasValuesSchema,
1483
- setContent,
1484
- setTables,
1485
- setTable,
1486
- setRow,
1487
- addRow,
1488
- setPartialRow,
1489
- setCell,
1490
- setValues,
1491
- setPartialValues,
1492
- setValue,
1493
- setTransactionChanges,
1494
- setTablesJson,
1495
- setValuesJson,
1496
- setJson,
1497
- setTablesSchema,
1498
- setValuesSchema,
1499
- setSchema,
1500
- delTables,
1501
- delTable,
1502
- delRow,
1503
- delCell,
1504
- delValues,
1505
- delValue,
1506
- delTablesSchema,
1507
- delValuesSchema,
1508
- delSchema,
1509
- transaction,
1510
- startTransaction,
1511
- finishTransaction,
1512
- forEachTable,
1513
- forEachTableCell,
1514
- forEachRow,
1515
- forEachCell,
1516
- forEachValue,
1517
- addSortedRowIdsListener,
1518
- addStartTransactionListener,
1519
- addWillFinishTransactionListener,
1520
- addDidFinishTransactionListener,
1521
- callListener,
1522
- delListener,
1523
- getListenerStats,
1524
- // only used internally by other modules
1525
- createStore,
1526
- addListener,
1527
- callListeners,
1528
- };
1529
- objMap(
1530
- {
1531
- [HAS + TABLES]: [0, hasTablesListeners, [], () => [hasTables()]],
1532
- [TABLES]: [0, tablesListeners],
1533
- [TABLE_IDS]: [0, tableIdsListeners],
1534
- [HAS + TABLE]: [
1535
- 1,
1536
- hasTableListeners,
1537
- [getTableIds],
1538
- (ids) => [hasTable(...ids)],
1539
- ],
1540
- [TABLE]: [1, tableListeners, [getTableIds]],
1541
- [TABLE + CELL_IDS]: [1, tableCellIdsListeners, [getTableIds]],
1542
- [HAS + TABLE + CELL]: [
1543
- 2,
1544
- hasTableCellListeners,
1545
- [getTableIds, getTableCellIds],
1546
- (ids) => [hasTableCell(...ids)],
1547
- ],
1548
- [ROW_COUNT]: [1, rowCountListeners, [getTableIds]],
1549
- [ROW_IDS]: [1, rowIdsListeners, [getTableIds]],
1550
- [HAS + ROW]: [
1551
- 2,
1552
- hasRowListeners,
1553
- [getTableIds, getRowIds],
1554
- (ids) => [hasRow(...ids)],
1555
- ],
1556
- [ROW]: [2, rowListeners, [getTableIds, getRowIds]],
1557
- [CELL_IDS]: [2, cellIdsListeners, [getTableIds, getRowIds]],
1558
- [HAS + CELL]: [
1559
- 3,
1560
- hasCellListeners,
1561
- [getTableIds, getRowIds, getCellIds],
1562
- (ids) => [hasCell(...ids)],
1563
- ],
1564
- [CELL]: [
1565
- 3,
1566
- cellListeners,
1567
- [getTableIds, getRowIds, getCellIds],
1568
- (ids) => pairNew(getCell(...ids)),
1569
- ],
1570
- InvalidCell: [3, invalidCellListeners],
1571
- [HAS + VALUES]: [0, hasValuesListeners, [], () => [hasValues()]],
1572
- [VALUES]: [0, valuesListeners],
1573
- [VALUE_IDS]: [0, valueIdsListeners],
1574
- [HAS + VALUE]: [
1575
- 1,
1576
- hasValueListeners,
1577
- [getValueIds],
1578
- (ids) => [hasValue(...ids)],
1579
- ],
1580
- [VALUE]: [
1581
- 1,
1582
- valueListeners,
1583
- [getValueIds],
1584
- (ids) => pairNew(getValue(ids[0])),
1585
- ],
1586
- InvalidValue: [1, invalidValueListeners],
1587
- },
1588
- ([argumentCount, idSetNode, pathGetters, extraArgsGetter], listenable) => {
1589
- store[ADD + listenable + LISTENER] = (...args) =>
1590
- addListener(
1591
- args[argumentCount],
1592
- idSetNode[args[argumentCount + 1] ? 1 : 0],
1593
- argumentCount > 0 ? slice(args, 0, argumentCount) : void 0,
1594
- pathGetters,
1595
- extraArgsGetter,
1596
- );
1597
- },
1598
- );
1599
- return objFreeze(store);
1600
- };
1601
-
1602
- export {createStore};