tinybase 7.3.2 → 7.3.4

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 (249) hide show
  1. package/checkpoints/index.js +12 -11
  2. package/checkpoints/with-schemas/index.js +12 -11
  3. package/common/index.js +3 -2
  4. package/common/with-schemas/index.js +3 -2
  5. package/index.js +92 -64
  6. package/indexes/index.js +13 -12
  7. package/indexes/with-schemas/index.js +13 -12
  8. package/mergeable-store/index.js +92 -64
  9. package/mergeable-store/with-schemas/index.js +92 -64
  10. package/metrics/index.js +13 -12
  11. package/metrics/with-schemas/index.js +13 -12
  12. package/min/checkpoints/index.js +1 -1
  13. package/min/checkpoints/index.js.gz +0 -0
  14. package/min/checkpoints/with-schemas/index.js +1 -1
  15. package/min/checkpoints/with-schemas/index.js.gz +0 -0
  16. package/min/common/index.js +1 -1
  17. package/min/common/index.js.gz +0 -0
  18. package/min/common/with-schemas/index.js +1 -1
  19. package/min/common/with-schemas/index.js.gz +0 -0
  20. package/min/index.js +1 -1
  21. package/min/index.js.gz +0 -0
  22. package/min/indexes/index.js +1 -1
  23. package/min/indexes/index.js.gz +0 -0
  24. package/min/indexes/with-schemas/index.js +1 -1
  25. package/min/indexes/with-schemas/index.js.gz +0 -0
  26. package/min/mergeable-store/index.js +1 -1
  27. package/min/mergeable-store/index.js.gz +0 -0
  28. package/min/mergeable-store/with-schemas/index.js +1 -1
  29. package/min/mergeable-store/with-schemas/index.js.gz +0 -0
  30. package/min/metrics/index.js +1 -1
  31. package/min/metrics/index.js.gz +0 -0
  32. package/min/metrics/with-schemas/index.js +1 -1
  33. package/min/metrics/with-schemas/index.js.gz +0 -0
  34. package/min/omni/index.js +1 -1
  35. package/min/omni/index.js.gz +0 -0
  36. package/min/omni/with-schemas/index.js +1 -1
  37. package/min/omni/with-schemas/index.js.gz +0 -0
  38. package/min/persisters/index.js +1 -1
  39. package/min/persisters/index.js.gz +0 -0
  40. package/min/persisters/persister-automerge/index.js +1 -1
  41. package/min/persisters/persister-automerge/index.js.gz +0 -0
  42. package/min/persisters/persister-automerge/with-schemas/index.js +1 -1
  43. package/min/persisters/persister-automerge/with-schemas/index.js.gz +0 -0
  44. package/min/persisters/persister-browser/index.js +1 -1
  45. package/min/persisters/persister-browser/index.js.gz +0 -0
  46. package/min/persisters/persister-browser/with-schemas/index.js +1 -1
  47. package/min/persisters/persister-browser/with-schemas/index.js.gz +0 -0
  48. package/min/persisters/persister-cr-sqlite-wasm/index.js +1 -1
  49. package/min/persisters/persister-cr-sqlite-wasm/index.js.gz +0 -0
  50. package/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +1 -1
  51. package/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js.gz +0 -0
  52. package/min/persisters/persister-durable-object-sql-storage/index.js +1 -1
  53. package/min/persisters/persister-durable-object-sql-storage/index.js.gz +0 -0
  54. package/min/persisters/persister-durable-object-sql-storage/with-schemas/index.js +1 -1
  55. package/min/persisters/persister-durable-object-sql-storage/with-schemas/index.js.gz +0 -0
  56. package/min/persisters/persister-durable-object-storage/index.js +1 -1
  57. package/min/persisters/persister-durable-object-storage/index.js.gz +0 -0
  58. package/min/persisters/persister-durable-object-storage/with-schemas/index.js +1 -1
  59. package/min/persisters/persister-durable-object-storage/with-schemas/index.js.gz +0 -0
  60. package/min/persisters/persister-electric-sql/index.js +1 -1
  61. package/min/persisters/persister-electric-sql/index.js.gz +0 -0
  62. package/min/persisters/persister-electric-sql/with-schemas/index.js +1 -1
  63. package/min/persisters/persister-electric-sql/with-schemas/index.js.gz +0 -0
  64. package/min/persisters/persister-expo-sqlite/index.js +1 -1
  65. package/min/persisters/persister-expo-sqlite/index.js.gz +0 -0
  66. package/min/persisters/persister-expo-sqlite/with-schemas/index.js +1 -1
  67. package/min/persisters/persister-expo-sqlite/with-schemas/index.js.gz +0 -0
  68. package/min/persisters/persister-file/index.js +1 -1
  69. package/min/persisters/persister-file/index.js.gz +0 -0
  70. package/min/persisters/persister-file/with-schemas/index.js +1 -1
  71. package/min/persisters/persister-file/with-schemas/index.js.gz +0 -0
  72. package/min/persisters/persister-indexed-db/index.js +1 -1
  73. package/min/persisters/persister-indexed-db/index.js.gz +0 -0
  74. package/min/persisters/persister-indexed-db/with-schemas/index.js +1 -1
  75. package/min/persisters/persister-indexed-db/with-schemas/index.js.gz +0 -0
  76. package/min/persisters/persister-libsql/index.js +1 -1
  77. package/min/persisters/persister-libsql/index.js.gz +0 -0
  78. package/min/persisters/persister-libsql/with-schemas/index.js +1 -1
  79. package/min/persisters/persister-libsql/with-schemas/index.js.gz +0 -0
  80. package/min/persisters/persister-partykit-client/index.js +1 -1
  81. package/min/persisters/persister-partykit-client/index.js.gz +0 -0
  82. package/min/persisters/persister-partykit-client/with-schemas/index.js +1 -1
  83. package/min/persisters/persister-partykit-client/with-schemas/index.js.gz +0 -0
  84. package/min/persisters/persister-partykit-server/index.js +1 -1
  85. package/min/persisters/persister-partykit-server/index.js.gz +0 -0
  86. package/min/persisters/persister-partykit-server/with-schemas/index.js +1 -1
  87. package/min/persisters/persister-partykit-server/with-schemas/index.js.gz +0 -0
  88. package/min/persisters/persister-pglite/index.js +1 -1
  89. package/min/persisters/persister-pglite/index.js.gz +0 -0
  90. package/min/persisters/persister-pglite/with-schemas/index.js +1 -1
  91. package/min/persisters/persister-pglite/with-schemas/index.js.gz +0 -0
  92. package/min/persisters/persister-postgres/index.js +1 -1
  93. package/min/persisters/persister-postgres/index.js.gz +0 -0
  94. package/min/persisters/persister-postgres/with-schemas/index.js +1 -1
  95. package/min/persisters/persister-postgres/with-schemas/index.js.gz +0 -0
  96. package/min/persisters/persister-powersync/index.js +1 -1
  97. package/min/persisters/persister-powersync/index.js.gz +0 -0
  98. package/min/persisters/persister-powersync/with-schemas/index.js +1 -1
  99. package/min/persisters/persister-powersync/with-schemas/index.js.gz +0 -0
  100. package/min/persisters/persister-react-native-mmkv/index.js +1 -1
  101. package/min/persisters/persister-react-native-mmkv/index.js.gz +0 -0
  102. package/min/persisters/persister-react-native-mmkv/with-schemas/index.js +1 -1
  103. package/min/persisters/persister-react-native-mmkv/with-schemas/index.js.gz +0 -0
  104. package/min/persisters/persister-react-native-sqlite/index.js +1 -1
  105. package/min/persisters/persister-react-native-sqlite/index.js.gz +0 -0
  106. package/min/persisters/persister-react-native-sqlite/with-schemas/index.js +1 -1
  107. package/min/persisters/persister-react-native-sqlite/with-schemas/index.js.gz +0 -0
  108. package/min/persisters/persister-remote/index.js +1 -1
  109. package/min/persisters/persister-remote/index.js.gz +0 -0
  110. package/min/persisters/persister-remote/with-schemas/index.js +1 -1
  111. package/min/persisters/persister-remote/with-schemas/index.js.gz +0 -0
  112. package/min/persisters/persister-sqlite-bun/index.js +1 -1
  113. package/min/persisters/persister-sqlite-bun/index.js.gz +0 -0
  114. package/min/persisters/persister-sqlite-bun/with-schemas/index.js +1 -1
  115. package/min/persisters/persister-sqlite-bun/with-schemas/index.js.gz +0 -0
  116. package/min/persisters/persister-sqlite-wasm/index.js +1 -1
  117. package/min/persisters/persister-sqlite-wasm/index.js.gz +0 -0
  118. package/min/persisters/persister-sqlite-wasm/with-schemas/index.js +1 -1
  119. package/min/persisters/persister-sqlite-wasm/with-schemas/index.js.gz +0 -0
  120. package/min/persisters/persister-sqlite3/index.js +1 -1
  121. package/min/persisters/persister-sqlite3/index.js.gz +0 -0
  122. package/min/persisters/persister-sqlite3/with-schemas/index.js +1 -1
  123. package/min/persisters/persister-sqlite3/with-schemas/index.js.gz +0 -0
  124. package/min/persisters/persister-yjs/index.js +1 -1
  125. package/min/persisters/persister-yjs/index.js.gz +0 -0
  126. package/min/persisters/persister-yjs/with-schemas/index.js +1 -1
  127. package/min/persisters/persister-yjs/with-schemas/index.js.gz +0 -0
  128. package/min/persisters/with-schemas/index.js +1 -1
  129. package/min/persisters/with-schemas/index.js.gz +0 -0
  130. package/min/queries/index.js +1 -1
  131. package/min/queries/index.js.gz +0 -0
  132. package/min/queries/with-schemas/index.js +1 -1
  133. package/min/queries/with-schemas/index.js.gz +0 -0
  134. package/min/relationships/index.js +1 -1
  135. package/min/relationships/index.js.gz +0 -0
  136. package/min/relationships/with-schemas/index.js +1 -1
  137. package/min/relationships/with-schemas/index.js.gz +0 -0
  138. package/min/store/index.js +1 -1
  139. package/min/store/index.js.gz +0 -0
  140. package/min/store/with-schemas/index.js +1 -1
  141. package/min/store/with-schemas/index.js.gz +0 -0
  142. package/min/synchronizers/index.js +1 -1
  143. package/min/synchronizers/index.js.gz +0 -0
  144. package/min/synchronizers/synchronizer-broadcast-channel/index.js +1 -1
  145. package/min/synchronizers/synchronizer-broadcast-channel/index.js.gz +0 -0
  146. package/min/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +1 -1
  147. package/min/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js.gz +0 -0
  148. package/min/synchronizers/synchronizer-local/index.js +1 -1
  149. package/min/synchronizers/synchronizer-local/index.js.gz +0 -0
  150. package/min/synchronizers/synchronizer-local/with-schemas/index.js +1 -1
  151. package/min/synchronizers/synchronizer-local/with-schemas/index.js.gz +0 -0
  152. package/min/synchronizers/synchronizer-ws-client/index.js +1 -1
  153. package/min/synchronizers/synchronizer-ws-client/index.js.gz +0 -0
  154. package/min/synchronizers/synchronizer-ws-client/with-schemas/index.js +1 -1
  155. package/min/synchronizers/synchronizer-ws-client/with-schemas/index.js.gz +0 -0
  156. package/min/synchronizers/synchronizer-ws-server/index.js +1 -1
  157. package/min/synchronizers/synchronizer-ws-server/index.js.gz +0 -0
  158. package/min/synchronizers/synchronizer-ws-server/with-schemas/index.js +1 -1
  159. package/min/synchronizers/synchronizer-ws-server/with-schemas/index.js.gz +0 -0
  160. package/min/synchronizers/synchronizer-ws-server-durable-object/index.js +1 -1
  161. package/min/synchronizers/synchronizer-ws-server-durable-object/index.js.gz +0 -0
  162. package/min/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js +1 -1
  163. package/min/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js.gz +0 -0
  164. package/min/synchronizers/synchronizer-ws-server-simple/index.js +1 -1
  165. package/min/synchronizers/synchronizer-ws-server-simple/index.js.gz +0 -0
  166. package/min/synchronizers/synchronizer-ws-server-simple/with-schemas/index.js +1 -1
  167. package/min/synchronizers/synchronizer-ws-server-simple/with-schemas/index.js.gz +0 -0
  168. package/min/synchronizers/with-schemas/index.js +1 -1
  169. package/min/synchronizers/with-schemas/index.js.gz +0 -0
  170. package/min/ui-react-inspector/index.js +1 -1
  171. package/min/ui-react-inspector/index.js.gz +0 -0
  172. package/min/ui-react-inspector/with-schemas/index.js +1 -1
  173. package/min/ui-react-inspector/with-schemas/index.js.gz +0 -0
  174. package/min/with-schemas/index.js +1 -1
  175. package/min/with-schemas/index.js.gz +0 -0
  176. package/omni/index.js +115 -67
  177. package/omni/with-schemas/index.js +115 -67
  178. package/package.json +13 -13
  179. package/persisters/index.js +29 -12
  180. package/persisters/persister-automerge/index.js +17 -9
  181. package/persisters/persister-automerge/with-schemas/index.js +17 -9
  182. package/persisters/persister-browser/index.js +34 -10
  183. package/persisters/persister-browser/with-schemas/index.js +34 -10
  184. package/persisters/persister-cr-sqlite-wasm/index.js +29 -12
  185. package/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +29 -12
  186. package/persisters/persister-durable-object-sql-storage/index.js +29 -12
  187. package/persisters/persister-durable-object-sql-storage/with-schemas/index.js +29 -12
  188. package/persisters/persister-durable-object-storage/index.js +19 -11
  189. package/persisters/persister-durable-object-storage/with-schemas/index.js +19 -11
  190. package/persisters/persister-electric-sql/index.js +29 -12
  191. package/persisters/persister-electric-sql/with-schemas/index.js +29 -12
  192. package/persisters/persister-expo-sqlite/index.js +29 -12
  193. package/persisters/persister-expo-sqlite/with-schemas/index.js +29 -12
  194. package/persisters/persister-file/index.js +34 -10
  195. package/persisters/persister-file/with-schemas/index.js +34 -10
  196. package/persisters/persister-indexed-db/index.js +17 -9
  197. package/persisters/persister-indexed-db/with-schemas/index.js +17 -9
  198. package/persisters/persister-libsql/index.js +29 -12
  199. package/persisters/persister-libsql/with-schemas/index.js +29 -12
  200. package/persisters/persister-partykit-client/index.js +44 -11
  201. package/persisters/persister-partykit-client/with-schemas/index.js +44 -11
  202. package/persisters/persister-partykit-server/index.js +39 -4
  203. package/persisters/persister-partykit-server/with-schemas/index.js +39 -4
  204. package/persisters/persister-pglite/index.js +29 -12
  205. package/persisters/persister-pglite/with-schemas/index.js +29 -12
  206. package/persisters/persister-postgres/index.js +29 -12
  207. package/persisters/persister-postgres/with-schemas/index.js +29 -12
  208. package/persisters/persister-powersync/index.js +29 -12
  209. package/persisters/persister-powersync/with-schemas/index.js +29 -12
  210. package/persisters/persister-react-native-mmkv/index.js +17 -9
  211. package/persisters/persister-react-native-mmkv/with-schemas/index.js +17 -9
  212. package/persisters/persister-react-native-sqlite/index.js +29 -12
  213. package/persisters/persister-react-native-sqlite/with-schemas/index.js +29 -12
  214. package/persisters/persister-remote/index.js +17 -9
  215. package/persisters/persister-remote/with-schemas/index.js +17 -9
  216. package/persisters/persister-sqlite-bun/index.js +29 -12
  217. package/persisters/persister-sqlite-bun/with-schemas/index.js +29 -12
  218. package/persisters/persister-sqlite-wasm/index.js +29 -12
  219. package/persisters/persister-sqlite-wasm/with-schemas/index.js +29 -12
  220. package/persisters/persister-sqlite3/index.js +29 -12
  221. package/persisters/persister-sqlite3/with-schemas/index.js +29 -12
  222. package/persisters/persister-yjs/index.js +19 -11
  223. package/persisters/persister-yjs/with-schemas/index.js +19 -11
  224. package/persisters/with-schemas/index.js +29 -12
  225. package/queries/index.js +15 -14
  226. package/queries/with-schemas/index.js +15 -14
  227. package/readme.md +10 -2
  228. package/relationships/index.js +13 -12
  229. package/relationships/with-schemas/index.js +13 -12
  230. package/releases.md +1 -1
  231. package/store/index.js +74 -60
  232. package/store/with-schemas/index.js +74 -60
  233. package/synchronizers/index.js +17 -9
  234. package/synchronizers/synchronizer-broadcast-channel/index.js +17 -9
  235. package/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +17 -9
  236. package/synchronizers/synchronizer-local/index.js +19 -11
  237. package/synchronizers/synchronizer-local/with-schemas/index.js +19 -11
  238. package/synchronizers/synchronizer-ws-client/index.js +31 -10
  239. package/synchronizers/synchronizer-ws-client/with-schemas/index.js +31 -10
  240. package/synchronizers/synchronizer-ws-server/index.js +34 -13
  241. package/synchronizers/synchronizer-ws-server/with-schemas/index.js +34 -13
  242. package/synchronizers/synchronizer-ws-server-durable-object/index.js +31 -10
  243. package/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js +31 -10
  244. package/synchronizers/synchronizer-ws-server-simple/index.js +11 -10
  245. package/synchronizers/synchronizer-ws-server-simple/with-schemas/index.js +11 -10
  246. package/synchronizers/with-schemas/index.js +17 -9
  247. package/ui-react-inspector/index.js +91 -61
  248. package/ui-react-inspector/with-schemas/index.js +91 -61
  249. package/with-schemas/index.js +92 -64
@@ -64,17 +64,18 @@ const collIsEmpty = (coll) => isUndefined(coll) || collSize(coll) == 0;
64
64
  const collForEach = (coll, cb) => coll?.forEach(cb);
65
65
  const collDel = (coll, keyOrValue) => coll?.delete(keyOrValue);
66
66
 
67
- const mapNew = (entries) => new Map(entries);
68
- const mapGet = (map, key) => map?.get(key);
69
- const mapSet = (map, key, value) =>
70
- isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
71
- const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
72
- if (!collHas(map, key)) {
73
- mapSet(map, key, getDefaultValue());
67
+ const map = Map;
68
+ const mapNew = (entries) => new map(entries);
69
+ const mapGet = (map2, key) => map2?.get(key);
70
+ const mapSet = (map2, key, value) =>
71
+ isUndefined(value) ? (collDel(map2, key), map2) : map2?.set(key, value);
72
+ const mapEnsure = (map2, key, getDefaultValue, hadExistingValue) => {
73
+ if (!collHas(map2, key)) {
74
+ mapSet(map2, key, getDefaultValue());
74
75
  } else {
75
- hadExistingValue?.(mapGet(map, key));
76
+ hadExistingValue?.(mapGet(map2, key));
76
77
  }
77
- return mapGet(map, key);
78
+ return mapGet(map2, key);
78
79
  };
79
80
  const visitTree = (node, path, ensureLeaf, pruneLeaf, p = 0) =>
80
81
  ifNotUndefined(
@@ -276,6 +277,11 @@ const createCustomPersister = (
276
277
  ? store.applyChanges
277
278
  : store.setContent)(contentOrChanges);
278
279
  };
280
+ const saveAfterMutated = async () => {
281
+ if (isAutoSaving() && store.hadMutated?.()) {
282
+ await save();
283
+ }
284
+ };
279
285
  const load = async (initialContent) => {
280
286
  /* istanbul ignore else */
281
287
  if (status != 2 /* Saving */) {
@@ -300,6 +306,7 @@ const createCustomPersister = (
300
306
  },
301
307
  );
302
308
  setStatus(0 /* Idle */);
309
+ await saveAfterMutated();
303
310
  });
304
311
  }
305
312
  return persister;
@@ -318,6 +325,7 @@ const createCustomPersister = (
318
325
  loads++;
319
326
  setContentOrChanges(changes ?? content);
320
327
  setStatus(0 /* Idle */);
328
+ await saveAfterMutated();
321
329
  }
322
330
  } else {
323
331
  await load();
@@ -64,17 +64,18 @@ const collIsEmpty = (coll) => isUndefined(coll) || collSize(coll) == 0;
64
64
  const collForEach = (coll, cb) => coll?.forEach(cb);
65
65
  const collDel = (coll, keyOrValue) => coll?.delete(keyOrValue);
66
66
 
67
- const mapNew = (entries) => new Map(entries);
68
- const mapGet = (map, key) => map?.get(key);
69
- const mapSet = (map, key, value) =>
70
- isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
71
- const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
72
- if (!collHas(map, key)) {
73
- mapSet(map, key, getDefaultValue());
67
+ const map = Map;
68
+ const mapNew = (entries) => new map(entries);
69
+ const mapGet = (map2, key) => map2?.get(key);
70
+ const mapSet = (map2, key, value) =>
71
+ isUndefined(value) ? (collDel(map2, key), map2) : map2?.set(key, value);
72
+ const mapEnsure = (map2, key, getDefaultValue, hadExistingValue) => {
73
+ if (!collHas(map2, key)) {
74
+ mapSet(map2, key, getDefaultValue());
74
75
  } else {
75
- hadExistingValue?.(mapGet(map, key));
76
+ hadExistingValue?.(mapGet(map2, key));
76
77
  }
77
- return mapGet(map, key);
78
+ return mapGet(map2, key);
78
79
  };
79
80
  const visitTree = (node, path, ensureLeaf, pruneLeaf, p = 0) =>
80
81
  ifNotUndefined(
@@ -276,6 +277,11 @@ const createCustomPersister = (
276
277
  ? store.applyChanges
277
278
  : store.setContent)(contentOrChanges);
278
279
  };
280
+ const saveAfterMutated = async () => {
281
+ if (isAutoSaving() && store.hadMutated?.()) {
282
+ await save();
283
+ }
284
+ };
279
285
  const load = async (initialContent) => {
280
286
  /* istanbul ignore else */
281
287
  if (status != 2 /* Saving */) {
@@ -300,6 +306,7 @@ const createCustomPersister = (
300
306
  },
301
307
  );
302
308
  setStatus(0 /* Idle */);
309
+ await saveAfterMutated();
303
310
  });
304
311
  }
305
312
  return persister;
@@ -318,6 +325,7 @@ const createCustomPersister = (
318
325
  loads++;
319
326
  setContentOrChanges(changes ?? content);
320
327
  setStatus(0 /* Idle */);
328
+ await saveAfterMutated();
321
329
  }
322
330
  } else {
323
331
  await load();
@@ -135,21 +135,22 @@ const objValues = (obj) => object.values(obj);
135
135
  const objSize = (obj) => size(objIds(obj));
136
136
  const objIsEmpty = (obj) => isObject(obj) && objSize(obj) == 0;
137
137
 
138
- const mapNew = (entries) => new Map(entries);
139
- const mapGet = (map, key) => map?.get(key);
140
- const mapForEach = (map, cb) =>
141
- collForEach(map, (value, key) => cb(key, value));
138
+ const map = Map;
139
+ const mapNew = (entries) => new map(entries);
140
+ const mapGet = (map2, key) => map2?.get(key);
141
+ const mapForEach = (map2, cb) =>
142
+ collForEach(map2, (value, key) => cb(key, value));
142
143
  const mapMap = (coll, cb) =>
143
144
  arrayMap([...(coll?.entries() ?? [])], ([key, value]) => cb(value, key));
144
- const mapSet = (map, key, value) =>
145
- isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
146
- const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
147
- if (!collHas(map, key)) {
148
- mapSet(map, key, getDefaultValue());
145
+ const mapSet = (map2, key, value) =>
146
+ isUndefined(value) ? (collDel(map2, key), map2) : map2?.set(key, value);
147
+ const mapEnsure = (map2, key, getDefaultValue, hadExistingValue) => {
148
+ if (!collHas(map2, key)) {
149
+ mapSet(map2, key, getDefaultValue());
149
150
  } else {
150
- hadExistingValue?.(mapGet(map, key));
151
+ hadExistingValue?.(mapGet(map2, key));
151
152
  }
152
- return mapGet(map, key);
153
+ return mapGet(map2, key);
153
154
  };
154
155
  const visitTree = (node, path, ensureLeaf, pruneLeaf, p = 0) =>
155
156
  ifNotUndefined(
@@ -304,7 +305,16 @@ const jsonParse = JSON.parse;
304
305
  const jsonStringWithUndefined = (obj) =>
305
306
  jsonString(obj, (_key, value) => (isUndefined(value) ? UNDEFINED : value));
306
307
  const jsonParseWithUndefined = (str) =>
307
- jsonParse(str, (_key, value) => (value === UNDEFINED ? void 0 : value));
308
+ // JSON.parse reviver removes properties with undefined values
309
+ replaceUndefinedString(jsonParse(str));
310
+ const replaceUndefinedString = (obj) =>
311
+ obj === UNDEFINED
312
+ ? void 0
313
+ : isArray(obj)
314
+ ? arrayMap(obj, replaceUndefinedString)
315
+ : isObject(obj)
316
+ ? objMap(obj, replaceUndefinedString)
317
+ : obj;
308
318
 
309
319
  const INTEGER = /^\d+$/;
310
320
  const getPoolFunctions = () => {
@@ -476,6 +486,11 @@ const createCustomPersister = (
476
486
  ? store.applyChanges
477
487
  : store.setContent)(contentOrChanges);
478
488
  };
489
+ const saveAfterMutated = async () => {
490
+ if (isAutoSaving() && store.hadMutated?.()) {
491
+ await save();
492
+ }
493
+ };
479
494
  const load = async (initialContent) => {
480
495
  /* istanbul ignore else */
481
496
  if (status != 2 /* Saving */) {
@@ -500,6 +515,7 @@ const createCustomPersister = (
500
515
  },
501
516
  );
502
517
  setStatus(0 /* Idle */);
518
+ await saveAfterMutated();
503
519
  });
504
520
  }
505
521
  return persister;
@@ -518,6 +534,7 @@ const createCustomPersister = (
518
534
  loads++;
519
535
  setContentOrChanges(changes ?? content);
520
536
  setStatus(0 /* Idle */);
537
+ await saveAfterMutated();
521
538
  }
522
539
  } else {
523
540
  await load();
@@ -135,21 +135,22 @@ const objValues = (obj) => object.values(obj);
135
135
  const objSize = (obj) => size(objIds(obj));
136
136
  const objIsEmpty = (obj) => isObject(obj) && objSize(obj) == 0;
137
137
 
138
- const mapNew = (entries) => new Map(entries);
139
- const mapGet = (map, key) => map?.get(key);
140
- const mapForEach = (map, cb) =>
141
- collForEach(map, (value, key) => cb(key, value));
138
+ const map = Map;
139
+ const mapNew = (entries) => new map(entries);
140
+ const mapGet = (map2, key) => map2?.get(key);
141
+ const mapForEach = (map2, cb) =>
142
+ collForEach(map2, (value, key) => cb(key, value));
142
143
  const mapMap = (coll, cb) =>
143
144
  arrayMap([...(coll?.entries() ?? [])], ([key, value]) => cb(value, key));
144
- const mapSet = (map, key, value) =>
145
- isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
146
- const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
147
- if (!collHas(map, key)) {
148
- mapSet(map, key, getDefaultValue());
145
+ const mapSet = (map2, key, value) =>
146
+ isUndefined(value) ? (collDel(map2, key), map2) : map2?.set(key, value);
147
+ const mapEnsure = (map2, key, getDefaultValue, hadExistingValue) => {
148
+ if (!collHas(map2, key)) {
149
+ mapSet(map2, key, getDefaultValue());
149
150
  } else {
150
- hadExistingValue?.(mapGet(map, key));
151
+ hadExistingValue?.(mapGet(map2, key));
151
152
  }
152
- return mapGet(map, key);
153
+ return mapGet(map2, key);
153
154
  };
154
155
  const visitTree = (node, path, ensureLeaf, pruneLeaf, p = 0) =>
155
156
  ifNotUndefined(
@@ -304,7 +305,16 @@ const jsonParse = JSON.parse;
304
305
  const jsonStringWithUndefined = (obj) =>
305
306
  jsonString(obj, (_key, value) => (isUndefined(value) ? UNDEFINED : value));
306
307
  const jsonParseWithUndefined = (str) =>
307
- jsonParse(str, (_key, value) => (value === UNDEFINED ? void 0 : value));
308
+ // JSON.parse reviver removes properties with undefined values
309
+ replaceUndefinedString(jsonParse(str));
310
+ const replaceUndefinedString = (obj) =>
311
+ obj === UNDEFINED
312
+ ? void 0
313
+ : isArray(obj)
314
+ ? arrayMap(obj, replaceUndefinedString)
315
+ : isObject(obj)
316
+ ? objMap(obj, replaceUndefinedString)
317
+ : obj;
308
318
 
309
319
  const INTEGER = /^\d+$/;
310
320
  const getPoolFunctions = () => {
@@ -476,6 +486,11 @@ const createCustomPersister = (
476
486
  ? store.applyChanges
477
487
  : store.setContent)(contentOrChanges);
478
488
  };
489
+ const saveAfterMutated = async () => {
490
+ if (isAutoSaving() && store.hadMutated?.()) {
491
+ await save();
492
+ }
493
+ };
479
494
  const load = async (initialContent) => {
480
495
  /* istanbul ignore else */
481
496
  if (status != 2 /* Saving */) {
@@ -500,6 +515,7 @@ const createCustomPersister = (
500
515
  },
501
516
  );
502
517
  setStatus(0 /* Idle */);
518
+ await saveAfterMutated();
503
519
  });
504
520
  }
505
521
  return persister;
@@ -518,6 +534,7 @@ const createCustomPersister = (
518
534
  loads++;
519
535
  setContentOrChanges(changes ?? content);
520
536
  setStatus(0 /* Idle */);
537
+ await saveAfterMutated();
521
538
  }
522
539
  } else {
523
540
  await load();
@@ -135,21 +135,22 @@ const objValues = (obj) => object.values(obj);
135
135
  const objSize = (obj) => size(objIds(obj));
136
136
  const objIsEmpty = (obj) => isObject(obj) && objSize(obj) == 0;
137
137
 
138
- const mapNew = (entries) => new Map(entries);
139
- const mapGet = (map, key) => map?.get(key);
140
- const mapForEach = (map, cb) =>
141
- collForEach(map, (value, key) => cb(key, value));
138
+ const map = Map;
139
+ const mapNew = (entries) => new map(entries);
140
+ const mapGet = (map2, key) => map2?.get(key);
141
+ const mapForEach = (map2, cb) =>
142
+ collForEach(map2, (value, key) => cb(key, value));
142
143
  const mapMap = (coll, cb) =>
143
144
  arrayMap([...(coll?.entries() ?? [])], ([key, value]) => cb(value, key));
144
- const mapSet = (map, key, value) =>
145
- isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
146
- const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
147
- if (!collHas(map, key)) {
148
- mapSet(map, key, getDefaultValue());
145
+ const mapSet = (map2, key, value) =>
146
+ isUndefined(value) ? (collDel(map2, key), map2) : map2?.set(key, value);
147
+ const mapEnsure = (map2, key, getDefaultValue, hadExistingValue) => {
148
+ if (!collHas(map2, key)) {
149
+ mapSet(map2, key, getDefaultValue());
149
150
  } else {
150
- hadExistingValue?.(mapGet(map, key));
151
+ hadExistingValue?.(mapGet(map2, key));
151
152
  }
152
- return mapGet(map, key);
153
+ return mapGet(map2, key);
153
154
  };
154
155
  const visitTree = (node, path, ensureLeaf, pruneLeaf, p = 0) =>
155
156
  ifNotUndefined(
@@ -304,7 +305,16 @@ const jsonParse = JSON.parse;
304
305
  const jsonStringWithUndefined = (obj) =>
305
306
  jsonString(obj, (_key, value) => (isUndefined(value) ? UNDEFINED : value));
306
307
  const jsonParseWithUndefined = (str) =>
307
- jsonParse(str, (_key, value) => (value === UNDEFINED ? void 0 : value));
308
+ // JSON.parse reviver removes properties with undefined values
309
+ replaceUndefinedString(jsonParse(str));
310
+ const replaceUndefinedString = (obj) =>
311
+ obj === UNDEFINED
312
+ ? void 0
313
+ : isArray(obj)
314
+ ? arrayMap(obj, replaceUndefinedString)
315
+ : isObject(obj)
316
+ ? objMap(obj, replaceUndefinedString)
317
+ : obj;
308
318
 
309
319
  const INTEGER = /^\d+$/;
310
320
  const getPoolFunctions = () => {
@@ -476,6 +486,11 @@ const createCustomPersister = (
476
486
  ? store.applyChanges
477
487
  : store.setContent)(contentOrChanges);
478
488
  };
489
+ const saveAfterMutated = async () => {
490
+ if (isAutoSaving() && store.hadMutated?.()) {
491
+ await save();
492
+ }
493
+ };
479
494
  const load = async (initialContent) => {
480
495
  /* istanbul ignore else */
481
496
  if (status != 2 /* Saving */) {
@@ -500,6 +515,7 @@ const createCustomPersister = (
500
515
  },
501
516
  );
502
517
  setStatus(0 /* Idle */);
518
+ await saveAfterMutated();
503
519
  });
504
520
  }
505
521
  return persister;
@@ -518,6 +534,7 @@ const createCustomPersister = (
518
534
  loads++;
519
535
  setContentOrChanges(changes ?? content);
520
536
  setStatus(0 /* Idle */);
537
+ await saveAfterMutated();
521
538
  }
522
539
  } else {
523
540
  await load();
@@ -135,21 +135,22 @@ const objValues = (obj) => object.values(obj);
135
135
  const objSize = (obj) => size(objIds(obj));
136
136
  const objIsEmpty = (obj) => isObject(obj) && objSize(obj) == 0;
137
137
 
138
- const mapNew = (entries) => new Map(entries);
139
- const mapGet = (map, key) => map?.get(key);
140
- const mapForEach = (map, cb) =>
141
- collForEach(map, (value, key) => cb(key, value));
138
+ const map = Map;
139
+ const mapNew = (entries) => new map(entries);
140
+ const mapGet = (map2, key) => map2?.get(key);
141
+ const mapForEach = (map2, cb) =>
142
+ collForEach(map2, (value, key) => cb(key, value));
142
143
  const mapMap = (coll, cb) =>
143
144
  arrayMap([...(coll?.entries() ?? [])], ([key, value]) => cb(value, key));
144
- const mapSet = (map, key, value) =>
145
- isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
146
- const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
147
- if (!collHas(map, key)) {
148
- mapSet(map, key, getDefaultValue());
145
+ const mapSet = (map2, key, value) =>
146
+ isUndefined(value) ? (collDel(map2, key), map2) : map2?.set(key, value);
147
+ const mapEnsure = (map2, key, getDefaultValue, hadExistingValue) => {
148
+ if (!collHas(map2, key)) {
149
+ mapSet(map2, key, getDefaultValue());
149
150
  } else {
150
- hadExistingValue?.(mapGet(map, key));
151
+ hadExistingValue?.(mapGet(map2, key));
151
152
  }
152
- return mapGet(map, key);
153
+ return mapGet(map2, key);
153
154
  };
154
155
  const visitTree = (node, path, ensureLeaf, pruneLeaf, p = 0) =>
155
156
  ifNotUndefined(
@@ -304,7 +305,16 @@ const jsonParse = JSON.parse;
304
305
  const jsonStringWithUndefined = (obj) =>
305
306
  jsonString(obj, (_key, value) => (isUndefined(value) ? UNDEFINED : value));
306
307
  const jsonParseWithUndefined = (str) =>
307
- jsonParse(str, (_key, value) => (value === UNDEFINED ? void 0 : value));
308
+ // JSON.parse reviver removes properties with undefined values
309
+ replaceUndefinedString(jsonParse(str));
310
+ const replaceUndefinedString = (obj) =>
311
+ obj === UNDEFINED
312
+ ? void 0
313
+ : isArray(obj)
314
+ ? arrayMap(obj, replaceUndefinedString)
315
+ : isObject(obj)
316
+ ? objMap(obj, replaceUndefinedString)
317
+ : obj;
308
318
 
309
319
  const INTEGER = /^\d+$/;
310
320
  const getPoolFunctions = () => {
@@ -476,6 +486,11 @@ const createCustomPersister = (
476
486
  ? store.applyChanges
477
487
  : store.setContent)(contentOrChanges);
478
488
  };
489
+ const saveAfterMutated = async () => {
490
+ if (isAutoSaving() && store.hadMutated?.()) {
491
+ await save();
492
+ }
493
+ };
479
494
  const load = async (initialContent) => {
480
495
  /* istanbul ignore else */
481
496
  if (status != 2 /* Saving */) {
@@ -500,6 +515,7 @@ const createCustomPersister = (
500
515
  },
501
516
  );
502
517
  setStatus(0 /* Idle */);
518
+ await saveAfterMutated();
503
519
  });
504
520
  }
505
521
  return persister;
@@ -518,6 +534,7 @@ const createCustomPersister = (
518
534
  loads++;
519
535
  setContentOrChanges(changes ?? content);
520
536
  setStatus(0 /* Idle */);
537
+ await saveAfterMutated();
521
538
  }
522
539
  } else {
523
540
  await load();
@@ -136,21 +136,22 @@ const objValues = (obj) => object.values(obj);
136
136
  const objSize = (obj) => size(objIds(obj));
137
137
  const objIsEmpty = (obj) => isObject(obj) && objSize(obj) == 0;
138
138
 
139
- const mapNew = (entries) => new Map(entries);
140
- const mapGet = (map, key) => map?.get(key);
141
- const mapForEach = (map, cb) =>
142
- collForEach(map, (value, key) => cb(key, value));
139
+ const map = Map;
140
+ const mapNew = (entries) => new map(entries);
141
+ const mapGet = (map2, key) => map2?.get(key);
142
+ const mapForEach = (map2, cb) =>
143
+ collForEach(map2, (value, key) => cb(key, value));
143
144
  const mapMap = (coll, cb) =>
144
145
  arrayMap([...(coll?.entries() ?? [])], ([key, value]) => cb(value, key));
145
- const mapSet = (map, key, value) =>
146
- isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
147
- const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
148
- if (!collHas(map, key)) {
149
- mapSet(map, key, getDefaultValue());
146
+ const mapSet = (map2, key, value) =>
147
+ isUndefined(value) ? (collDel(map2, key), map2) : map2?.set(key, value);
148
+ const mapEnsure = (map2, key, getDefaultValue, hadExistingValue) => {
149
+ if (!collHas(map2, key)) {
150
+ mapSet(map2, key, getDefaultValue());
150
151
  } else {
151
- hadExistingValue?.(mapGet(map, key));
152
+ hadExistingValue?.(mapGet(map2, key));
152
153
  }
153
- return mapGet(map, key);
154
+ return mapGet(map2, key);
154
155
  };
155
156
  const visitTree = (node, path, ensureLeaf, pruneLeaf, p = 0) =>
156
157
  ifNotUndefined(
@@ -305,7 +306,16 @@ const jsonParse = JSON.parse;
305
306
  const jsonStringWithUndefined = (obj) =>
306
307
  jsonString(obj, (_key, value) => (isUndefined(value) ? UNDEFINED : value));
307
308
  const jsonParseWithUndefined = (str) =>
308
- jsonParse(str, (_key, value) => (value === UNDEFINED ? void 0 : value));
309
+ // JSON.parse reviver removes properties with undefined values
310
+ replaceUndefinedString(jsonParse(str));
311
+ const replaceUndefinedString = (obj) =>
312
+ obj === UNDEFINED
313
+ ? void 0
314
+ : isArray(obj)
315
+ ? arrayMap(obj, replaceUndefinedString)
316
+ : isObject(obj)
317
+ ? objMap(obj, replaceUndefinedString)
318
+ : obj;
309
319
 
310
320
  const INTEGER = /^\d+$/;
311
321
  const getPoolFunctions = () => {
@@ -477,6 +487,11 @@ const createCustomPersister = (
477
487
  ? store.applyChanges
478
488
  : store.setContent)(contentOrChanges);
479
489
  };
490
+ const saveAfterMutated = async () => {
491
+ if (isAutoSaving() && store.hadMutated?.()) {
492
+ await save();
493
+ }
494
+ };
480
495
  const load = async (initialContent) => {
481
496
  /* istanbul ignore else */
482
497
  if (status != 2 /* Saving */) {
@@ -501,6 +516,7 @@ const createCustomPersister = (
501
516
  },
502
517
  );
503
518
  setStatus(0 /* Idle */);
519
+ await saveAfterMutated();
504
520
  });
505
521
  }
506
522
  return persister;
@@ -519,6 +535,7 @@ const createCustomPersister = (
519
535
  loads++;
520
536
  setContentOrChanges(changes ?? content);
521
537
  setStatus(0 /* Idle */);
538
+ await saveAfterMutated();
522
539
  }
523
540
  } else {
524
541
  await load();
@@ -136,21 +136,22 @@ const objValues = (obj) => object.values(obj);
136
136
  const objSize = (obj) => size(objIds(obj));
137
137
  const objIsEmpty = (obj) => isObject(obj) && objSize(obj) == 0;
138
138
 
139
- const mapNew = (entries) => new Map(entries);
140
- const mapGet = (map, key) => map?.get(key);
141
- const mapForEach = (map, cb) =>
142
- collForEach(map, (value, key) => cb(key, value));
139
+ const map = Map;
140
+ const mapNew = (entries) => new map(entries);
141
+ const mapGet = (map2, key) => map2?.get(key);
142
+ const mapForEach = (map2, cb) =>
143
+ collForEach(map2, (value, key) => cb(key, value));
143
144
  const mapMap = (coll, cb) =>
144
145
  arrayMap([...(coll?.entries() ?? [])], ([key, value]) => cb(value, key));
145
- const mapSet = (map, key, value) =>
146
- isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
147
- const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
148
- if (!collHas(map, key)) {
149
- mapSet(map, key, getDefaultValue());
146
+ const mapSet = (map2, key, value) =>
147
+ isUndefined(value) ? (collDel(map2, key), map2) : map2?.set(key, value);
148
+ const mapEnsure = (map2, key, getDefaultValue, hadExistingValue) => {
149
+ if (!collHas(map2, key)) {
150
+ mapSet(map2, key, getDefaultValue());
150
151
  } else {
151
- hadExistingValue?.(mapGet(map, key));
152
+ hadExistingValue?.(mapGet(map2, key));
152
153
  }
153
- return mapGet(map, key);
154
+ return mapGet(map2, key);
154
155
  };
155
156
  const visitTree = (node, path, ensureLeaf, pruneLeaf, p = 0) =>
156
157
  ifNotUndefined(
@@ -305,7 +306,16 @@ const jsonParse = JSON.parse;
305
306
  const jsonStringWithUndefined = (obj) =>
306
307
  jsonString(obj, (_key, value) => (isUndefined(value) ? UNDEFINED : value));
307
308
  const jsonParseWithUndefined = (str) =>
308
- jsonParse(str, (_key, value) => (value === UNDEFINED ? void 0 : value));
309
+ // JSON.parse reviver removes properties with undefined values
310
+ replaceUndefinedString(jsonParse(str));
311
+ const replaceUndefinedString = (obj) =>
312
+ obj === UNDEFINED
313
+ ? void 0
314
+ : isArray(obj)
315
+ ? arrayMap(obj, replaceUndefinedString)
316
+ : isObject(obj)
317
+ ? objMap(obj, replaceUndefinedString)
318
+ : obj;
309
319
 
310
320
  const INTEGER = /^\d+$/;
311
321
  const getPoolFunctions = () => {
@@ -477,6 +487,11 @@ const createCustomPersister = (
477
487
  ? store.applyChanges
478
488
  : store.setContent)(contentOrChanges);
479
489
  };
490
+ const saveAfterMutated = async () => {
491
+ if (isAutoSaving() && store.hadMutated?.()) {
492
+ await save();
493
+ }
494
+ };
480
495
  const load = async (initialContent) => {
481
496
  /* istanbul ignore else */
482
497
  if (status != 2 /* Saving */) {
@@ -501,6 +516,7 @@ const createCustomPersister = (
501
516
  },
502
517
  );
503
518
  setStatus(0 /* Idle */);
519
+ await saveAfterMutated();
504
520
  });
505
521
  }
506
522
  return persister;
@@ -519,6 +535,7 @@ const createCustomPersister = (
519
535
  loads++;
520
536
  setContentOrChanges(changes ?? content);
521
537
  setStatus(0 /* Idle */);
538
+ await saveAfterMutated();
522
539
  }
523
540
  } else {
524
541
  await load();
@@ -71,19 +71,20 @@ const objEnsure = (obj, id, getDefaultValue) => {
71
71
  return obj[id];
72
72
  };
73
73
 
74
- const mapNew = (entries) => new Map(entries);
75
- const mapGet = (map, key) => map?.get(key);
76
- const mapForEach = (map, cb) =>
77
- collForEach(map, (value, key) => cb(key, value));
78
- const mapSet = (map, key, value) =>
79
- isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
80
- const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
81
- if (!collHas(map, key)) {
82
- mapSet(map, key, getDefaultValue());
74
+ const map = Map;
75
+ const mapNew = (entries) => new map(entries);
76
+ const mapGet = (map2, key) => map2?.get(key);
77
+ const mapForEach = (map2, cb) =>
78
+ collForEach(map2, (value, key) => cb(key, value));
79
+ const mapSet = (map2, key, value) =>
80
+ isUndefined(value) ? (collDel(map2, key), map2) : map2?.set(key, value);
81
+ const mapEnsure = (map2, key, getDefaultValue, hadExistingValue) => {
82
+ if (!collHas(map2, key)) {
83
+ mapSet(map2, key, getDefaultValue());
83
84
  } else {
84
- hadExistingValue?.(mapGet(map, key));
85
+ hadExistingValue?.(mapGet(map2, key));
85
86
  }
86
- return mapGet(map, key);
87
+ return mapGet(map2, key);
87
88
  };
88
89
  const visitTree = (node, path, ensureLeaf, pruneLeaf, p = 0) =>
89
90
  ifNotUndefined(
@@ -285,6 +286,11 @@ const createCustomPersister = (
285
286
  ? store.applyChanges
286
287
  : store.setContent)(contentOrChanges);
287
288
  };
289
+ const saveAfterMutated = async () => {
290
+ if (isAutoSaving() && store.hadMutated?.()) {
291
+ await save();
292
+ }
293
+ };
288
294
  const load = async (initialContent) => {
289
295
  /* istanbul ignore else */
290
296
  if (status != 2 /* Saving */) {
@@ -309,6 +315,7 @@ const createCustomPersister = (
309
315
  },
310
316
  );
311
317
  setStatus(0 /* Idle */);
318
+ await saveAfterMutated();
312
319
  });
313
320
  }
314
321
  return persister;
@@ -327,6 +334,7 @@ const createCustomPersister = (
327
334
  loads++;
328
335
  setContentOrChanges(changes ?? content);
329
336
  setStatus(0 /* Idle */);
337
+ await saveAfterMutated();
330
338
  }
331
339
  } else {
332
340
  await load();