tinybase 5.0.0-beta.0 → 5.0.0-beta.1

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 (284) hide show
  1. package/bin/cli.js +1 -1
  2. package/lib/checkpoints.js +1 -1
  3. package/lib/checkpoints.js.gz +0 -0
  4. package/lib/cjs/checkpoints.cjs +1 -1
  5. package/lib/cjs/checkpoints.cjs.gz +0 -0
  6. package/lib/cjs/indexes.cjs +1 -1
  7. package/lib/cjs/indexes.cjs.gz +0 -0
  8. package/lib/cjs/metrics.cjs +1 -1
  9. package/lib/cjs/metrics.cjs.gz +0 -0
  10. package/lib/cjs/persisters/persister-automerge.cjs +1 -1
  11. package/lib/cjs/persisters/persister-automerge.cjs.gz +0 -0
  12. package/lib/cjs/persisters/persister-cr-sqlite-wasm.cjs +1 -1
  13. package/lib/cjs/persisters/persister-cr-sqlite-wasm.cjs.gz +0 -0
  14. package/lib/cjs/persisters/persister-electric-sql.cjs +1 -1
  15. package/lib/cjs/persisters/persister-electric-sql.cjs.gz +0 -0
  16. package/lib/cjs/persisters/persister-expo-sqlite-next.cjs +1 -1
  17. package/lib/cjs/persisters/persister-expo-sqlite-next.cjs.gz +0 -0
  18. package/lib/cjs/persisters/persister-expo-sqlite.cjs +1 -1
  19. package/lib/cjs/persisters/persister-expo-sqlite.cjs.gz +0 -0
  20. package/lib/cjs/persisters/persister-indexed-db.cjs +1 -1
  21. package/lib/cjs/persisters/persister-indexed-db.cjs.gz +0 -0
  22. package/lib/cjs/persisters/persister-partykit-server.cjs +1 -1
  23. package/lib/cjs/persisters/persister-partykit-server.cjs.gz +0 -0
  24. package/lib/cjs/persisters/persister-sqlite-wasm.cjs +1 -1
  25. package/lib/cjs/persisters/persister-sqlite-wasm.cjs.gz +0 -0
  26. package/lib/cjs/persisters/persister-sqlite3.cjs +1 -1
  27. package/lib/cjs/persisters/persister-sqlite3.cjs.gz +0 -0
  28. package/lib/cjs/persisters/persister-yjs.cjs +1 -1
  29. package/lib/cjs/persisters/persister-yjs.cjs.gz +0 -0
  30. package/lib/cjs/queries.cjs +1 -1
  31. package/lib/cjs/queries.cjs.gz +0 -0
  32. package/lib/cjs/relationships.cjs +1 -1
  33. package/lib/cjs/relationships.cjs.gz +0 -0
  34. package/lib/cjs/store.cjs +1 -1
  35. package/lib/cjs/store.cjs.gz +0 -0
  36. package/lib/cjs/tinybase.cjs +1 -1
  37. package/lib/cjs/tinybase.cjs.gz +0 -0
  38. package/lib/cjs/tools.cjs +1 -1
  39. package/lib/cjs/tools.cjs.gz +0 -0
  40. package/lib/cjs/ui-react-dom-debug.cjs +1 -1
  41. package/lib/cjs/ui-react-dom-debug.cjs.gz +0 -0
  42. package/lib/cjs/ui-react-dom.cjs +1 -1
  43. package/lib/cjs/ui-react-dom.cjs.gz +0 -0
  44. package/lib/cjs/ui-react.cjs +1 -1
  45. package/lib/cjs/ui-react.cjs.gz +0 -0
  46. package/lib/cjs-es6/checkpoints.cjs +1 -1
  47. package/lib/cjs-es6/checkpoints.cjs.gz +0 -0
  48. package/lib/cjs-es6/indexes.cjs +1 -1
  49. package/lib/cjs-es6/indexes.cjs.gz +0 -0
  50. package/lib/cjs-es6/metrics.cjs +1 -1
  51. package/lib/cjs-es6/metrics.cjs.gz +0 -0
  52. package/lib/cjs-es6/persisters/persister-automerge.cjs +1 -1
  53. package/lib/cjs-es6/persisters/persister-automerge.cjs.gz +0 -0
  54. package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs +1 -1
  55. package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs.gz +0 -0
  56. package/lib/cjs-es6/persisters/persister-electric-sql.cjs +1 -1
  57. package/lib/cjs-es6/persisters/persister-electric-sql.cjs.gz +0 -0
  58. package/lib/cjs-es6/persisters/persister-expo-sqlite-next.cjs +1 -1
  59. package/lib/cjs-es6/persisters/persister-expo-sqlite-next.cjs.gz +0 -0
  60. package/lib/cjs-es6/persisters/persister-expo-sqlite.cjs +1 -1
  61. package/lib/cjs-es6/persisters/persister-expo-sqlite.cjs.gz +0 -0
  62. package/lib/cjs-es6/persisters/persister-indexed-db.cjs +1 -1
  63. package/lib/cjs-es6/persisters/persister-indexed-db.cjs.gz +0 -0
  64. package/lib/cjs-es6/persisters/persister-partykit-server.cjs +1 -1
  65. package/lib/cjs-es6/persisters/persister-partykit-server.cjs.gz +0 -0
  66. package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs +1 -1
  67. package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs.gz +0 -0
  68. package/lib/cjs-es6/persisters/persister-sqlite3.cjs +1 -1
  69. package/lib/cjs-es6/persisters/persister-sqlite3.cjs.gz +0 -0
  70. package/lib/cjs-es6/persisters/persister-yjs.cjs +1 -1
  71. package/lib/cjs-es6/persisters/persister-yjs.cjs.gz +0 -0
  72. package/lib/cjs-es6/queries.cjs +1 -1
  73. package/lib/cjs-es6/queries.cjs.gz +0 -0
  74. package/lib/cjs-es6/relationships.cjs +1 -1
  75. package/lib/cjs-es6/relationships.cjs.gz +0 -0
  76. package/lib/cjs-es6/store.cjs +1 -1
  77. package/lib/cjs-es6/store.cjs.gz +0 -0
  78. package/lib/cjs-es6/tinybase.cjs +1 -1
  79. package/lib/cjs-es6/tinybase.cjs.gz +0 -0
  80. package/lib/cjs-es6/tools.cjs +1 -1
  81. package/lib/cjs-es6/tools.cjs.gz +0 -0
  82. package/lib/cjs-es6/ui-react-dom-debug.cjs +1 -1
  83. package/lib/cjs-es6/ui-react-dom-debug.cjs.gz +0 -0
  84. package/lib/cjs-es6/ui-react-dom.cjs +1 -1
  85. package/lib/cjs-es6/ui-react-dom.cjs.gz +0 -0
  86. package/lib/cjs-es6/ui-react.cjs +1 -1
  87. package/lib/cjs-es6/ui-react.cjs.gz +0 -0
  88. package/lib/debug/checkpoints.js +251 -234
  89. package/lib/debug/indexes.js +7 -5
  90. package/lib/debug/metrics.js +7 -5
  91. package/lib/debug/persisters/persister-automerge.js +3 -1
  92. package/lib/debug/persisters/persister-browser.js +1 -0
  93. package/lib/debug/persisters/persister-cr-sqlite-wasm.js +10 -6
  94. package/lib/debug/persisters/persister-electric-sql.js +11 -6
  95. package/lib/debug/persisters/persister-expo-sqlite-next.js +11 -7
  96. package/lib/debug/persisters/persister-expo-sqlite.js +10 -6
  97. package/lib/debug/persisters/persister-file.js +1 -0
  98. package/lib/debug/persisters/persister-indexed-db.js +4 -1
  99. package/lib/debug/persisters/persister-partykit-client.js +1 -0
  100. package/lib/debug/persisters/persister-partykit-server.js +2 -1
  101. package/lib/debug/persisters/persister-remote.js +1 -0
  102. package/lib/debug/persisters/persister-sqlite-wasm.js +10 -6
  103. package/lib/debug/persisters/persister-sqlite3.js +10 -6
  104. package/lib/debug/persisters/persister-yjs.js +3 -1
  105. package/lib/debug/persisters.js +1 -0
  106. package/lib/debug/queries.js +9 -6
  107. package/lib/debug/relationships.js +7 -5
  108. package/lib/debug/store.js +3 -1
  109. package/lib/debug/tinybase.js +254 -235
  110. package/lib/debug/tools.js +19 -43
  111. package/lib/debug/ui-react-dom.js +3 -1
  112. package/lib/debug/ui-react.js +166 -200
  113. package/lib/es6/checkpoints.js +1 -1
  114. package/lib/es6/checkpoints.js.gz +0 -0
  115. package/lib/es6/indexes.js +1 -1
  116. package/lib/es6/indexes.js.gz +0 -0
  117. package/lib/es6/metrics.js +1 -1
  118. package/lib/es6/metrics.js.gz +0 -0
  119. package/lib/es6/persisters/persister-automerge.js +1 -1
  120. package/lib/es6/persisters/persister-automerge.js.gz +0 -0
  121. package/lib/es6/persisters/persister-cr-sqlite-wasm.js +1 -1
  122. package/lib/es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  123. package/lib/es6/persisters/persister-electric-sql.js +1 -1
  124. package/lib/es6/persisters/persister-electric-sql.js.gz +0 -0
  125. package/lib/es6/persisters/persister-expo-sqlite-next.js +1 -1
  126. package/lib/es6/persisters/persister-expo-sqlite-next.js.gz +0 -0
  127. package/lib/es6/persisters/persister-expo-sqlite.js +1 -1
  128. package/lib/es6/persisters/persister-expo-sqlite.js.gz +0 -0
  129. package/lib/es6/persisters/persister-indexed-db.js +1 -1
  130. package/lib/es6/persisters/persister-indexed-db.js.gz +0 -0
  131. package/lib/es6/persisters/persister-partykit-server.js +1 -1
  132. package/lib/es6/persisters/persister-partykit-server.js.gz +0 -0
  133. package/lib/es6/persisters/persister-sqlite-wasm.js +1 -1
  134. package/lib/es6/persisters/persister-sqlite-wasm.js.gz +0 -0
  135. package/lib/es6/persisters/persister-sqlite3.js +1 -1
  136. package/lib/es6/persisters/persister-sqlite3.js.gz +0 -0
  137. package/lib/es6/persisters/persister-yjs.js +1 -1
  138. package/lib/es6/persisters/persister-yjs.js.gz +0 -0
  139. package/lib/es6/queries.js +1 -1
  140. package/lib/es6/queries.js.gz +0 -0
  141. package/lib/es6/relationships.js +1 -1
  142. package/lib/es6/relationships.js.gz +0 -0
  143. package/lib/es6/store.js +1 -1
  144. package/lib/es6/store.js.gz +0 -0
  145. package/lib/es6/tinybase.js +1 -1
  146. package/lib/es6/tinybase.js.gz +0 -0
  147. package/lib/es6/tools.js +1 -1
  148. package/lib/es6/tools.js.gz +0 -0
  149. package/lib/es6/ui-react-dom-debug.js +1 -1
  150. package/lib/es6/ui-react-dom-debug.js.gz +0 -0
  151. package/lib/es6/ui-react-dom.js +1 -1
  152. package/lib/es6/ui-react-dom.js.gz +0 -0
  153. package/lib/es6/ui-react.js +1 -1
  154. package/lib/es6/ui-react.js.gz +0 -0
  155. package/lib/indexes.js +1 -1
  156. package/lib/indexes.js.gz +0 -0
  157. package/lib/metrics.js +1 -1
  158. package/lib/metrics.js.gz +0 -0
  159. package/lib/persisters/persister-automerge.js +1 -1
  160. package/lib/persisters/persister-automerge.js.gz +0 -0
  161. package/lib/persisters/persister-cr-sqlite-wasm.js +1 -1
  162. package/lib/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  163. package/lib/persisters/persister-electric-sql.js +1 -1
  164. package/lib/persisters/persister-electric-sql.js.gz +0 -0
  165. package/lib/persisters/persister-expo-sqlite-next.js +1 -1
  166. package/lib/persisters/persister-expo-sqlite-next.js.gz +0 -0
  167. package/lib/persisters/persister-expo-sqlite.js +1 -1
  168. package/lib/persisters/persister-expo-sqlite.js.gz +0 -0
  169. package/lib/persisters/persister-indexed-db.js +1 -1
  170. package/lib/persisters/persister-indexed-db.js.gz +0 -0
  171. package/lib/persisters/persister-partykit-server.js +1 -1
  172. package/lib/persisters/persister-partykit-server.js.gz +0 -0
  173. package/lib/persisters/persister-sqlite-wasm.js +1 -1
  174. package/lib/persisters/persister-sqlite-wasm.js.gz +0 -0
  175. package/lib/persisters/persister-sqlite3.js +1 -1
  176. package/lib/persisters/persister-sqlite3.js.gz +0 -0
  177. package/lib/persisters/persister-yjs.js +1 -1
  178. package/lib/persisters/persister-yjs.js.gz +0 -0
  179. package/lib/queries.js +1 -1
  180. package/lib/queries.js.gz +0 -0
  181. package/lib/relationships.js +1 -1
  182. package/lib/relationships.js.gz +0 -0
  183. package/lib/store.js +1 -1
  184. package/lib/store.js.gz +0 -0
  185. package/lib/tinybase.js +1 -1
  186. package/lib/tinybase.js.gz +0 -0
  187. package/lib/tools.js +1 -1
  188. package/lib/tools.js.gz +0 -0
  189. package/lib/types/persisters/persister-expo-sqlite-next.d.ts +3 -3
  190. package/lib/types/ui-react.d.ts +77 -88
  191. package/lib/types/with-schemas/internal/queries.d.ts +4 -3
  192. package/lib/types/with-schemas/internal/store.d.ts +4 -3
  193. package/lib/types/with-schemas/persisters/persister-expo-sqlite-next.d.ts +4 -4
  194. package/lib/types/with-schemas/ui-react.d.ts +84 -95
  195. package/lib/ui-react-dom.js +1 -1
  196. package/lib/ui-react-dom.js.gz +0 -0
  197. package/lib/ui-react.js +1 -1
  198. package/lib/ui-react.js.gz +0 -0
  199. package/lib/umd/checkpoints.js +1 -1
  200. package/lib/umd/checkpoints.js.gz +0 -0
  201. package/lib/umd/indexes.js +1 -1
  202. package/lib/umd/indexes.js.gz +0 -0
  203. package/lib/umd/metrics.js +1 -1
  204. package/lib/umd/metrics.js.gz +0 -0
  205. package/lib/umd/persisters/persister-automerge.js +1 -1
  206. package/lib/umd/persisters/persister-automerge.js.gz +0 -0
  207. package/lib/umd/persisters/persister-cr-sqlite-wasm.js +1 -1
  208. package/lib/umd/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  209. package/lib/umd/persisters/persister-electric-sql.js +1 -1
  210. package/lib/umd/persisters/persister-electric-sql.js.gz +0 -0
  211. package/lib/umd/persisters/persister-expo-sqlite-next.js +1 -1
  212. package/lib/umd/persisters/persister-expo-sqlite-next.js.gz +0 -0
  213. package/lib/umd/persisters/persister-expo-sqlite.js +1 -1
  214. package/lib/umd/persisters/persister-expo-sqlite.js.gz +0 -0
  215. package/lib/umd/persisters/persister-indexed-db.js +1 -1
  216. package/lib/umd/persisters/persister-indexed-db.js.gz +0 -0
  217. package/lib/umd/persisters/persister-partykit-server.js +1 -1
  218. package/lib/umd/persisters/persister-partykit-server.js.gz +0 -0
  219. package/lib/umd/persisters/persister-sqlite-wasm.js +1 -1
  220. package/lib/umd/persisters/persister-sqlite-wasm.js.gz +0 -0
  221. package/lib/umd/persisters/persister-sqlite3.js +1 -1
  222. package/lib/umd/persisters/persister-sqlite3.js.gz +0 -0
  223. package/lib/umd/persisters/persister-yjs.js +1 -1
  224. package/lib/umd/persisters/persister-yjs.js.gz +0 -0
  225. package/lib/umd/queries.js +1 -1
  226. package/lib/umd/queries.js.gz +0 -0
  227. package/lib/umd/relationships.js +1 -1
  228. package/lib/umd/relationships.js.gz +0 -0
  229. package/lib/umd/store.js +1 -1
  230. package/lib/umd/store.js.gz +0 -0
  231. package/lib/umd/tinybase.js +1 -1
  232. package/lib/umd/tinybase.js.gz +0 -0
  233. package/lib/umd/tools.js +1 -1
  234. package/lib/umd/tools.js.gz +0 -0
  235. package/lib/umd/ui-react-dom-debug.js +1 -1
  236. package/lib/umd/ui-react-dom-debug.js.gz +0 -0
  237. package/lib/umd/ui-react-dom.js +1 -1
  238. package/lib/umd/ui-react-dom.js.gz +0 -0
  239. package/lib/umd/ui-react.js +1 -1
  240. package/lib/umd/ui-react.js.gz +0 -0
  241. package/lib/umd-es6/checkpoints.js +1 -1
  242. package/lib/umd-es6/checkpoints.js.gz +0 -0
  243. package/lib/umd-es6/indexes.js +1 -1
  244. package/lib/umd-es6/indexes.js.gz +0 -0
  245. package/lib/umd-es6/metrics.js +1 -1
  246. package/lib/umd-es6/metrics.js.gz +0 -0
  247. package/lib/umd-es6/persisters/persister-automerge.js +1 -1
  248. package/lib/umd-es6/persisters/persister-automerge.js.gz +0 -0
  249. package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js +1 -1
  250. package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  251. package/lib/umd-es6/persisters/persister-electric-sql.js +1 -1
  252. package/lib/umd-es6/persisters/persister-electric-sql.js.gz +0 -0
  253. package/lib/umd-es6/persisters/persister-expo-sqlite-next.js +1 -1
  254. package/lib/umd-es6/persisters/persister-expo-sqlite-next.js.gz +0 -0
  255. package/lib/umd-es6/persisters/persister-expo-sqlite.js +1 -1
  256. package/lib/umd-es6/persisters/persister-expo-sqlite.js.gz +0 -0
  257. package/lib/umd-es6/persisters/persister-indexed-db.js +1 -1
  258. package/lib/umd-es6/persisters/persister-indexed-db.js.gz +0 -0
  259. package/lib/umd-es6/persisters/persister-partykit-server.js +1 -1
  260. package/lib/umd-es6/persisters/persister-partykit-server.js.gz +0 -0
  261. package/lib/umd-es6/persisters/persister-sqlite-wasm.js +1 -1
  262. package/lib/umd-es6/persisters/persister-sqlite-wasm.js.gz +0 -0
  263. package/lib/umd-es6/persisters/persister-sqlite3.js +1 -1
  264. package/lib/umd-es6/persisters/persister-sqlite3.js.gz +0 -0
  265. package/lib/umd-es6/persisters/persister-yjs.js +1 -1
  266. package/lib/umd-es6/persisters/persister-yjs.js.gz +0 -0
  267. package/lib/umd-es6/queries.js +1 -1
  268. package/lib/umd-es6/queries.js.gz +0 -0
  269. package/lib/umd-es6/relationships.js +1 -1
  270. package/lib/umd-es6/relationships.js.gz +0 -0
  271. package/lib/umd-es6/store.js +1 -1
  272. package/lib/umd-es6/store.js.gz +0 -0
  273. package/lib/umd-es6/tinybase.js +1 -1
  274. package/lib/umd-es6/tinybase.js.gz +0 -0
  275. package/lib/umd-es6/tools.js +1 -1
  276. package/lib/umd-es6/tools.js.gz +0 -0
  277. package/lib/umd-es6/ui-react-dom-debug.js +1 -1
  278. package/lib/umd-es6/ui-react-dom-debug.js.gz +0 -0
  279. package/lib/umd-es6/ui-react-dom.js +1 -1
  280. package/lib/umd-es6/ui-react-dom.js.gz +0 -0
  281. package/lib/umd-es6/ui-react.js +1 -1
  282. package/lib/umd-es6/ui-react.js.gz +0 -0
  283. package/package.json +21 -21
  284. package/readme.md +2 -2
@@ -79,13 +79,15 @@ const setNew = (entryOrEntries) =>
79
79
  );
80
80
  const setAdd = (set, value) => set?.add(value);
81
81
 
82
- const getCreateFunction = (getFunction) => {
83
- const getFunctionsByStore = /* @__PURE__ */ new WeakMap();
82
+ const getCreateFunction = (getFunction, initFunction) => {
83
+ const thingsByStore = /* @__PURE__ */ new WeakMap();
84
84
  return (store) => {
85
- if (!getFunctionsByStore.has(store)) {
86
- getFunctionsByStore.set(store, getFunction(store));
85
+ if (!thingsByStore.has(store)) {
86
+ thingsByStore.set(store, getFunction(store));
87
87
  }
88
- return getFunctionsByStore.get(store);
88
+ const thing = thingsByStore.get(store);
89
+ initFunction?.(thing);
90
+ return thing;
89
91
  };
90
92
  };
91
93
 
@@ -173,240 +175,255 @@ const getListenerFunctions = (getThing) => {
173
175
  return [addListener, callListeners, delListener, callListener];
174
176
  };
175
177
 
176
- const createCheckpoints = getCreateFunction((store) => {
177
- let backwardIdsSize = 100;
178
- let currentId;
179
- let cellsDelta = mapNew();
180
- let valuesDelta = mapNew();
181
- let listening = 1;
182
- let nextCheckpointId;
183
- let checkpointsChanged;
184
- const checkpointIdsListeners = mapNew();
185
- const checkpointListeners = mapNew();
186
- const [addListener, callListeners, delListenerImpl] = getListenerFunctions(
187
- () => checkpoints,
188
- );
189
- const deltas = mapNew();
190
- const labels = mapNew();
191
- const backwardIds = [];
192
- const forwardIds = [];
193
- const updateStore = (oldOrNew, checkpointId) => {
194
- listening = 0;
195
- store.transaction(() => {
196
- const [cellsDelta2, valuesDelta2] = mapGet(deltas, checkpointId);
197
- collForEach(cellsDelta2, (table, tableId) =>
198
- collForEach(table, (row, rowId) =>
199
- collForEach(row, (oldNew, cellId) =>
200
- setOrDelCell(store, tableId, rowId, cellId, oldNew[oldOrNew]),
178
+ const createCheckpoints = getCreateFunction(
179
+ (store) => {
180
+ let backwardIdsSize = 100;
181
+ let currentId;
182
+ let cellsDelta = mapNew();
183
+ let valuesDelta = mapNew();
184
+ let listening = 1;
185
+ let nextCheckpointId;
186
+ let checkpointsChanged;
187
+ const checkpointIdsListeners = mapNew();
188
+ const checkpointListeners = mapNew();
189
+ const [addListener, callListeners, delListenerImpl] = getListenerFunctions(
190
+ () => checkpoints,
191
+ );
192
+ const deltas = mapNew();
193
+ const labels = mapNew();
194
+ const backwardIds = [];
195
+ const forwardIds = [];
196
+ const updateStore = (oldOrNew, checkpointId) => {
197
+ listening = 0;
198
+ store.transaction(() => {
199
+ const [cellsDelta2, valuesDelta2] = mapGet(deltas, checkpointId);
200
+ collForEach(cellsDelta2, (table, tableId) =>
201
+ collForEach(table, (row, rowId) =>
202
+ collForEach(row, (oldNew, cellId) =>
203
+ setOrDelCell(store, tableId, rowId, cellId, oldNew[oldOrNew]),
204
+ ),
201
205
  ),
202
- ),
203
- );
204
- collForEach(valuesDelta2, (oldNew, valueId) =>
205
- setOrDelValue(store, valueId, oldNew[oldOrNew]),
206
+ );
207
+ collForEach(valuesDelta2, (oldNew, valueId) =>
208
+ setOrDelValue(store, valueId, oldNew[oldOrNew]),
209
+ );
210
+ });
211
+ listening = 1;
212
+ };
213
+ const clearCheckpointId = (checkpointId) => {
214
+ mapSet(deltas, checkpointId);
215
+ mapSet(labels, checkpointId);
216
+ callListeners(checkpointListeners, [checkpointId]);
217
+ };
218
+ const clearCheckpointIds = (checkpointIds, to) =>
219
+ arrayForEach(
220
+ arrayClear(checkpointIds, to ?? size(checkpointIds)),
221
+ clearCheckpointId,
206
222
  );
207
- });
208
- listening = 1;
209
- };
210
- const clearCheckpointId = (checkpointId) => {
211
- mapSet(deltas, checkpointId);
212
- mapSet(labels, checkpointId);
213
- callListeners(checkpointListeners, [checkpointId]);
214
- };
215
- const clearCheckpointIds = (checkpointIds, to) =>
216
- arrayForEach(
217
- arrayClear(checkpointIds, to ?? size(checkpointIds)),
218
- clearCheckpointId,
219
- );
220
- const trimBackwardsIds = () =>
221
- clearCheckpointIds(backwardIds, size(backwardIds) - backwardIdsSize);
222
- const storeChanged = () =>
223
- ifNotUndefined(currentId, () => {
224
- arrayPush(backwardIds, currentId);
225
- trimBackwardsIds();
226
- clearCheckpointIds(forwardIds);
227
- currentId = void 0;
223
+ const trimBackwardsIds = () =>
224
+ clearCheckpointIds(backwardIds, size(backwardIds) - backwardIdsSize);
225
+ const storeChanged = () =>
226
+ ifNotUndefined(currentId, () => {
227
+ arrayPush(backwardIds, currentId);
228
+ trimBackwardsIds();
229
+ clearCheckpointIds(forwardIds);
230
+ currentId = void 0;
231
+ checkpointsChanged = 1;
232
+ });
233
+ const storeUnchanged = () => {
234
+ currentId = arrayPop(backwardIds);
228
235
  checkpointsChanged = 1;
229
- });
230
- const storeUnchanged = () => {
231
- currentId = arrayPop(backwardIds);
232
- checkpointsChanged = 1;
233
- };
234
- const cellListenerId = store.addCellListener(
235
- null,
236
- null,
237
- null,
238
- (_store, tableId, rowId, cellId, newCell, oldCell) => {
239
- if (listening) {
240
- storeChanged();
241
- const table = mapEnsure(cellsDelta, tableId, mapNew);
242
- const row = mapEnsure(table, rowId, mapNew);
243
- const oldNew = mapEnsure(row, cellId, () => [oldCell, void 0]);
244
- oldNew[1] = newCell;
245
- if (
246
- oldNew[0] === newCell &&
247
- collIsEmpty(mapSet(row, cellId)) &&
248
- collIsEmpty(mapSet(table, rowId)) &&
249
- collIsEmpty(mapSet(cellsDelta, tableId))
250
- ) {
251
- storeUnchanged();
252
- }
253
- callListenersIfChanged();
236
+ };
237
+ let cellListenerId;
238
+ let valueListenerId;
239
+ const addCheckpointImpl = (label = EMPTY_STRING) => {
240
+ if (isUndefined(currentId)) {
241
+ currentId = EMPTY_STRING + nextCheckpointId++;
242
+ mapSet(deltas, currentId, [cellsDelta, valuesDelta]);
243
+ setCheckpoint(currentId, label);
244
+ cellsDelta = mapNew();
245
+ valuesDelta = mapNew();
246
+ checkpointsChanged = 1;
254
247
  }
255
- },
256
- );
257
- const valueListenerId = store.addValueListener(
258
- null,
259
- (_store, valueId, newValue, oldValue) => {
260
- if (listening) {
261
- storeChanged();
262
- const oldNew = mapEnsure(valuesDelta, valueId, () => [
263
- oldValue,
264
- void 0,
265
- ]);
266
- oldNew[1] = newValue;
267
- if (
268
- oldNew[0] === newValue &&
269
- collIsEmpty(mapSet(valuesDelta, valueId))
270
- ) {
271
- storeUnchanged();
272
- }
273
- callListenersIfChanged();
248
+ return currentId;
249
+ };
250
+ const goBackwardImpl = () => {
251
+ if (!arrayIsEmpty(backwardIds)) {
252
+ arrayUnshift(forwardIds, addCheckpointImpl());
253
+ updateStore(0, currentId);
254
+ currentId = arrayPop(backwardIds);
255
+ checkpointsChanged = 1;
274
256
  }
275
- },
276
- );
277
- const addCheckpointImpl = (label = EMPTY_STRING) => {
278
- if (isUndefined(currentId)) {
279
- currentId = EMPTY_STRING + nextCheckpointId++;
280
- mapSet(deltas, currentId, [cellsDelta, valuesDelta]);
281
- setCheckpoint(currentId, label);
282
- cellsDelta = mapNew();
283
- valuesDelta = mapNew();
284
- checkpointsChanged = 1;
285
- }
286
- return currentId;
287
- };
288
- const goBackwardImpl = () => {
289
- if (!arrayIsEmpty(backwardIds)) {
290
- arrayUnshift(forwardIds, addCheckpointImpl());
291
- updateStore(0, currentId);
292
- currentId = arrayPop(backwardIds);
293
- checkpointsChanged = 1;
294
- }
295
- };
296
- const goForwardImpl = () => {
297
- if (!arrayIsEmpty(forwardIds)) {
298
- arrayPush(backwardIds, currentId);
299
- currentId = arrayShift(forwardIds);
300
- updateStore(1, currentId);
301
- checkpointsChanged = 1;
302
- }
303
- };
304
- const callListenersIfChanged = () => {
305
- if (checkpointsChanged) {
306
- callListeners(checkpointIdsListeners);
307
- checkpointsChanged = 0;
308
- }
309
- };
310
- const setSize = (size2) => {
311
- backwardIdsSize = size2;
312
- trimBackwardsIds();
313
- return checkpoints;
314
- };
315
- const addCheckpoint = (label) => {
316
- const id = addCheckpointImpl(label);
317
- callListenersIfChanged();
318
- return id;
319
- };
320
- const setCheckpoint = (checkpointId, label) => {
321
- if (hasCheckpoint(checkpointId) && mapGet(labels, checkpointId) !== label) {
322
- mapSet(labels, checkpointId, label);
323
- callListeners(checkpointListeners, [checkpointId]);
324
- }
325
- return checkpoints;
326
- };
327
- const getStore = () => store;
328
- const getCheckpointIds = () => [[...backwardIds], currentId, [...forwardIds]];
329
- const forEachCheckpoint = (checkpointCallback) =>
330
- mapForEach(labels, checkpointCallback);
331
- const hasCheckpoint = (checkpointId) => collHas(deltas, checkpointId);
332
- const getCheckpoint = (checkpointId) => mapGet(labels, checkpointId);
333
- const goBackward = () => {
334
- goBackwardImpl();
335
- callListenersIfChanged();
336
- return checkpoints;
337
- };
338
- const goForward = () => {
339
- goForwardImpl();
340
- callListenersIfChanged();
341
- return checkpoints;
342
- };
343
- const goTo = (checkpointId) => {
344
- const action = arrayHas(backwardIds, checkpointId)
345
- ? goBackwardImpl
346
- : arrayHas(forwardIds, checkpointId)
347
- ? goForwardImpl
348
- : null;
349
- while (!isUndefined(action) && checkpointId != currentId) {
350
- action();
351
- }
352
- callListenersIfChanged();
353
- return checkpoints;
354
- };
355
- const addCheckpointIdsListener = (listener) =>
356
- addListener(listener, checkpointIdsListeners);
357
- const addCheckpointListener = (checkpointId, listener) =>
358
- addListener(listener, checkpointListeners, [checkpointId]);
359
- const delListener = (listenerId) => {
360
- delListenerImpl(listenerId);
361
- return checkpoints;
362
- };
363
- const clear = () => {
364
- clearCheckpointIds(backwardIds);
365
- clearCheckpointIds(forwardIds);
366
- if (!isUndefined(currentId)) {
367
- clearCheckpointId(currentId);
368
- }
369
- currentId = void 0;
370
- nextCheckpointId = 0;
371
- addCheckpoint();
372
- return checkpoints;
373
- };
374
- const clearForward = () => {
375
- if (!arrayIsEmpty(forwardIds)) {
257
+ };
258
+ const goForwardImpl = () => {
259
+ if (!arrayIsEmpty(forwardIds)) {
260
+ arrayPush(backwardIds, currentId);
261
+ currentId = arrayShift(forwardIds);
262
+ updateStore(1, currentId);
263
+ checkpointsChanged = 1;
264
+ }
265
+ };
266
+ const callListenersIfChanged = () => {
267
+ if (checkpointsChanged) {
268
+ callListeners(checkpointIdsListeners);
269
+ checkpointsChanged = 0;
270
+ }
271
+ };
272
+ const setSize = (size2) => {
273
+ backwardIdsSize = size2;
274
+ trimBackwardsIds();
275
+ return checkpoints;
276
+ };
277
+ const addCheckpoint = (label) => {
278
+ const id = addCheckpointImpl(label);
279
+ callListenersIfChanged();
280
+ return id;
281
+ };
282
+ const setCheckpoint = (checkpointId, label) => {
283
+ if (
284
+ hasCheckpoint(checkpointId) &&
285
+ mapGet(labels, checkpointId) !== label
286
+ ) {
287
+ mapSet(labels, checkpointId, label);
288
+ callListeners(checkpointListeners, [checkpointId]);
289
+ }
290
+ return checkpoints;
291
+ };
292
+ const getStore = () => store;
293
+ const getCheckpointIds = () => [
294
+ [...backwardIds],
295
+ currentId,
296
+ [...forwardIds],
297
+ ];
298
+ const forEachCheckpoint = (checkpointCallback) =>
299
+ mapForEach(labels, checkpointCallback);
300
+ const hasCheckpoint = (checkpointId) => collHas(deltas, checkpointId);
301
+ const getCheckpoint = (checkpointId) => mapGet(labels, checkpointId);
302
+ const goBackward = () => {
303
+ goBackwardImpl();
304
+ callListenersIfChanged();
305
+ return checkpoints;
306
+ };
307
+ const goForward = () => {
308
+ goForwardImpl();
309
+ callListenersIfChanged();
310
+ return checkpoints;
311
+ };
312
+ const goTo = (checkpointId) => {
313
+ const action = arrayHas(backwardIds, checkpointId)
314
+ ? goBackwardImpl
315
+ : arrayHas(forwardIds, checkpointId)
316
+ ? goForwardImpl
317
+ : null;
318
+ while (!isUndefined(action) && checkpointId != currentId) {
319
+ action();
320
+ }
321
+ callListenersIfChanged();
322
+ return checkpoints;
323
+ };
324
+ const addCheckpointIdsListener = (listener) =>
325
+ addListener(listener, checkpointIdsListeners);
326
+ const addCheckpointListener = (checkpointId, listener) =>
327
+ addListener(listener, checkpointListeners, [checkpointId]);
328
+ const delListener = (listenerId) => {
329
+ delListenerImpl(listenerId);
330
+ return checkpoints;
331
+ };
332
+ const clear = () => {
333
+ clearCheckpointIds(backwardIds);
376
334
  clearCheckpointIds(forwardIds);
377
- callListeners(checkpointIdsListeners);
378
- }
379
- return checkpoints;
380
- };
381
- const destroy = () => {
382
- store.delListener(cellListenerId);
383
- store.delListener(valueListenerId);
384
- };
385
- const getListenerStats = () => ({
386
- checkpointIds: collSize2(checkpointIdsListeners),
387
- checkpoint: collSize2(checkpointListeners),
388
- });
389
- const checkpoints = {
390
- setSize,
391
- addCheckpoint,
392
- setCheckpoint,
393
- getStore,
394
- getCheckpointIds,
395
- forEachCheckpoint,
396
- hasCheckpoint,
397
- getCheckpoint,
398
- goBackward,
399
- goForward,
400
- goTo,
401
- addCheckpointIdsListener,
402
- addCheckpointListener,
403
- delListener,
404
- clear,
405
- clearForward,
406
- destroy,
407
- getListenerStats,
408
- };
409
- return objFreeze(checkpoints.clear());
410
- });
335
+ if (!isUndefined(currentId)) {
336
+ clearCheckpointId(currentId);
337
+ }
338
+ currentId = void 0;
339
+ nextCheckpointId = 0;
340
+ addCheckpoint();
341
+ return checkpoints;
342
+ };
343
+ const clearForward = () => {
344
+ if (!arrayIsEmpty(forwardIds)) {
345
+ clearCheckpointIds(forwardIds);
346
+ callListeners(checkpointIdsListeners);
347
+ }
348
+ return checkpoints;
349
+ };
350
+ const destroy = () => {
351
+ store.delListener(cellListenerId);
352
+ store.delListener(valueListenerId);
353
+ };
354
+ const getListenerStats = () => ({
355
+ checkpointIds: collSize2(checkpointIdsListeners),
356
+ checkpoint: collSize2(checkpointListeners),
357
+ });
358
+ const _registerListeners = () => {
359
+ cellListenerId = store.addCellListener(
360
+ null,
361
+ null,
362
+ null,
363
+ (_store, tableId, rowId, cellId, newCell, oldCell) => {
364
+ if (listening) {
365
+ storeChanged();
366
+ const table = mapEnsure(cellsDelta, tableId, mapNew);
367
+ const row = mapEnsure(table, rowId, mapNew);
368
+ const oldNew = mapEnsure(row, cellId, () => [oldCell, void 0]);
369
+ oldNew[1] = newCell;
370
+ if (
371
+ oldNew[0] === newCell &&
372
+ collIsEmpty(mapSet(row, cellId)) &&
373
+ collIsEmpty(mapSet(table, rowId)) &&
374
+ collIsEmpty(mapSet(cellsDelta, tableId))
375
+ ) {
376
+ storeUnchanged();
377
+ }
378
+ callListenersIfChanged();
379
+ }
380
+ },
381
+ );
382
+ valueListenerId = store.addValueListener(
383
+ null,
384
+ (_store, valueId, newValue, oldValue) => {
385
+ if (listening) {
386
+ storeChanged();
387
+ const oldNew = mapEnsure(valuesDelta, valueId, () => [
388
+ oldValue,
389
+ void 0,
390
+ ]);
391
+ oldNew[1] = newValue;
392
+ if (
393
+ oldNew[0] === newValue &&
394
+ collIsEmpty(mapSet(valuesDelta, valueId))
395
+ ) {
396
+ storeUnchanged();
397
+ }
398
+ callListenersIfChanged();
399
+ }
400
+ },
401
+ );
402
+ };
403
+ const checkpoints = {
404
+ setSize,
405
+ addCheckpoint,
406
+ setCheckpoint,
407
+ getStore,
408
+ getCheckpointIds,
409
+ forEachCheckpoint,
410
+ hasCheckpoint,
411
+ getCheckpoint,
412
+ goBackward,
413
+ goForward,
414
+ goTo,
415
+ addCheckpointIdsListener,
416
+ addCheckpointListener,
417
+ delListener,
418
+ clear,
419
+ clearForward,
420
+ destroy,
421
+ getListenerStats,
422
+ _registerListeners,
423
+ };
424
+ return objFreeze(checkpoints.clear());
425
+ },
426
+ (checkpoints) => checkpoints._registerListeners(),
427
+ );
411
428
 
412
429
  export {createCheckpoints};
@@ -246,13 +246,15 @@ const getRowCellFunction = (getRowCell, defaultCellValue) =>
246
246
  isString(getRowCell)
247
247
  ? (getCell) => getCell(getRowCell)
248
248
  : getRowCell ?? (() => defaultCellValue ?? EMPTY_STRING);
249
- const getCreateFunction = (getFunction) => {
250
- const getFunctionsByStore = /* @__PURE__ */ new WeakMap();
249
+ const getCreateFunction = (getFunction, initFunction) => {
250
+ const thingsByStore = /* @__PURE__ */ new WeakMap();
251
251
  return (store) => {
252
- if (!getFunctionsByStore.has(store)) {
253
- getFunctionsByStore.set(store, getFunction(store));
252
+ if (!thingsByStore.has(store)) {
253
+ thingsByStore.set(store, getFunction(store));
254
254
  }
255
- return getFunctionsByStore.get(store);
255
+ const thing = thingsByStore.get(store);
256
+ initFunction?.(thing);
257
+ return thing;
256
258
  };
257
259
  };
258
260
 
@@ -317,13 +317,15 @@ const getRowCellFunction = (getRowCell, defaultCellValue) =>
317
317
  isString(getRowCell)
318
318
  ? (getCell) => getCell(getRowCell)
319
319
  : getRowCell ?? (() => defaultCellValue ?? EMPTY_STRING);
320
- const getCreateFunction = (getFunction) => {
321
- const getFunctionsByStore = /* @__PURE__ */ new WeakMap();
320
+ const getCreateFunction = (getFunction, initFunction) => {
321
+ const thingsByStore = /* @__PURE__ */ new WeakMap();
322
322
  return (store) => {
323
- if (!getFunctionsByStore.has(store)) {
324
- getFunctionsByStore.set(store, getFunction(store));
323
+ if (!thingsByStore.has(store)) {
324
+ thingsByStore.set(store, getFunction(store));
325
325
  }
326
- return getFunctionsByStore.get(store);
326
+ const thing = thingsByStore.get(store);
327
+ initFunction?.(thing);
328
+ return thing;
327
329
  };
328
330
  };
329
331
 
@@ -11,6 +11,7 @@ const arrayShift = (array) => array.shift();
11
11
 
12
12
  const object = Object;
13
13
  const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
14
+ const objEntries = object.entries;
14
15
  const objIds = object.keys;
15
16
  const objFreeze = object.freeze;
16
17
  const isObject = (obj) =>
@@ -20,6 +21,7 @@ const isObject = (obj) =>
20
21
  (objPrototype) =>
21
22
  objPrototype == object.prototype ||
22
23
  isUndefined(getPrototypeOf(objPrototype)),
24
+ /* istanbul ignore next */
23
25
  () => true,
24
26
  );
25
27
  const objGet = (obj, id) => ifNotUndefined(obj, (obj2) => obj2[id]);
@@ -29,7 +31,7 @@ const objDel = (obj, id) => {
29
31
  return obj;
30
32
  };
31
33
  const objMap = (obj, cb) =>
32
- arrayMap(object.entries(obj), ([id, value]) => cb(value, id));
34
+ arrayMap(objEntries(obj), ([id, value]) => cb(value, id));
33
35
  const objSize = (obj) => size(objIds(obj));
34
36
  const objIsEmpty = (obj) => isObject(obj) && objSize(obj) == 0;
35
37
  const objEnsure = (obj, id, getDefaultValue) => {
@@ -18,6 +18,7 @@ const isObject = (obj) =>
18
18
  (objPrototype) =>
19
19
  objPrototype == object.prototype ||
20
20
  isUndefined(getPrototypeOf(objPrototype)),
21
+ /* istanbul ignore next */
21
22
  () => true,
22
23
  );
23
24
  const objSize = (obj) => size(objIds(obj));
@@ -40,6 +40,7 @@ const collDel = (coll, keyOrValue) => coll?.delete(keyOrValue);
40
40
 
41
41
  const object = Object;
42
42
  const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
43
+ const objEntries = object.entries;
43
44
  const objIds = object.keys;
44
45
  const objFreeze = object.freeze;
45
46
  const isObject = (obj) =>
@@ -49,6 +50,7 @@ const isObject = (obj) =>
49
50
  (objPrototype) =>
50
51
  objPrototype == object.prototype ||
51
52
  isUndefined(getPrototypeOf(objPrototype)),
53
+ /* istanbul ignore next */
52
54
  () => true,
53
55
  );
54
56
  const objNew = (entries = []) => object.fromEntries(entries);
@@ -60,7 +62,7 @@ const objDel = (obj, id) => {
60
62
  return obj;
61
63
  };
62
64
  const objMap = (obj, cb) =>
63
- arrayMap(object.entries(obj), ([id, value]) => cb(value, id));
65
+ arrayMap(objEntries(obj), ([id, value]) => cb(value, id));
64
66
  const objValues = (obj) => object.values(obj);
65
67
  const objSize = (obj) => size(objIds(obj));
66
68
  const objIsEmpty = (obj) => isObject(obj) && objSize(obj) == 0;
@@ -187,9 +189,7 @@ const getCommandFunctions = (cmd, managedTableNames, onIgnoredError) => {
187
189
  }
188
190
  if (!arrayIsEmpty(tableColumnNames) && !collHas(schemaMap, tableName)) {
189
191
  await cmd(
190
- `CREATE TABLE${escapeId(tableName)}(${escapeId(
191
- rowIdColumnName,
192
- )} PRIMARY KEY ON CONFLICT REPLACE${arrayJoin(
192
+ `CREATE TABLE${escapeId(tableName)}(${escapeId(rowIdColumnName)} PRIMARY KEY ON CONFLICT REPLACE${arrayJoin(
193
193
  arrayMap(tableColumnNames, (cellId) => COMMA + escapeId(cellId)),
194
194
  )});`,
195
195
  );
@@ -513,6 +513,7 @@ const createJsonSqlitePersister = (
513
513
  [storeTableName],
514
514
  managedTableNames,
515
515
  db,
516
+ getThing,
516
517
  ) => {
517
518
  const [refreshSchema, loadTable, saveTable, transaction] =
518
519
  getCommandFunctions(cmd, managedTableNames, onIgnoredError);
@@ -545,7 +546,7 @@ const createJsonSqlitePersister = (
545
546
  addPersisterListener,
546
547
  delPersisterListener,
547
548
  onIgnoredError,
548
- ['getDb', db],
549
+ [getThing, db],
549
550
  db,
550
551
  );
551
552
  return persister;
@@ -564,6 +565,7 @@ const createTabularSqlitePersister = (
564
565
  ],
565
566
  managedTableNames,
566
567
  db,
568
+ getThing,
567
569
  ) => {
568
570
  const [refreshSchema, loadTable, saveTable, transaction] =
569
571
  getCommandFunctions(cmd, managedTableNames, onIgnoredError);
@@ -650,7 +652,7 @@ const createTabularSqlitePersister = (
650
652
  addPersisterListener,
651
653
  delPersisterListener,
652
654
  onIgnoredError,
653
- ['getDb', db],
655
+ [getThing, db],
654
656
  db,
655
657
  );
656
658
  return persister;
@@ -761,6 +763,7 @@ const createSqlitePersister = (
761
763
  onSqlCommand,
762
764
  onIgnoredError,
763
765
  db,
766
+ getThing = 'getDb',
764
767
  ) => {
765
768
  let dataVersion;
766
769
  let schemaVersion;
@@ -822,6 +825,7 @@ const createSqlitePersister = (
822
825
  defaultedConfig,
823
826
  collValues(managedTableNamesSet),
824
827
  db,
828
+ getThing,
825
829
  );
826
830
  };
827
831