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
@@ -75,17 +75,18 @@ const objEnsure = (obj, id, getDefaultValue) => {
75
75
  return obj[id];
76
76
  };
77
77
 
78
- const mapNew = (entries) => new Map(entries);
79
- const mapGet = (map, key) => map?.get(key);
80
- const mapSet = (map, key, value) =>
81
- isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
82
- const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
83
- if (!collHas(map, key)) {
84
- mapSet(map, key, getDefaultValue());
78
+ const map = Map;
79
+ const mapNew = (entries) => new map(entries);
80
+ const mapGet = (map2, key) => map2?.get(key);
81
+ const mapSet = (map2, key, value) =>
82
+ isUndefined(value) ? (collDel(map2, key), map2) : map2?.set(key, value);
83
+ const mapEnsure = (map2, key, getDefaultValue, hadExistingValue) => {
84
+ if (!collHas(map2, key)) {
85
+ mapSet(map2, key, getDefaultValue());
85
86
  } else {
86
- hadExistingValue?.(mapGet(map, key));
87
+ hadExistingValue?.(mapGet(map2, key));
87
88
  }
88
- return mapGet(map, key);
89
+ return mapGet(map2, key);
89
90
  };
90
91
  const visitTree = (node, path, ensureLeaf, pruneLeaf, p = 0) =>
91
92
  ifNotUndefined(
@@ -309,6 +310,11 @@ const createCustomPersister = (
309
310
  ? store.applyChanges
310
311
  : store.setContent)(contentOrChanges);
311
312
  };
313
+ const saveAfterMutated = async () => {
314
+ if (isAutoSaving() && store.hadMutated?.()) {
315
+ await save();
316
+ }
317
+ };
312
318
  const load = async (initialContent) => {
313
319
  /* istanbul ignore else */
314
320
  if (status != 2 /* Saving */) {
@@ -333,6 +339,7 @@ const createCustomPersister = (
333
339
  },
334
340
  );
335
341
  setStatus(0 /* Idle */);
342
+ await saveAfterMutated();
336
343
  });
337
344
  }
338
345
  return persister;
@@ -351,6 +358,7 @@ const createCustomPersister = (
351
358
  loads++;
352
359
  setContentOrChanges(changes ?? content);
353
360
  setStatus(0 /* Idle */);
361
+ await saveAfterMutated();
354
362
  }
355
363
  } else {
356
364
  await load();
@@ -75,19 +75,20 @@ const objEnsure = (obj, id, getDefaultValue) => {
75
75
  return obj[id];
76
76
  };
77
77
 
78
- const mapNew = (entries) => new Map(entries);
79
- const mapGet = (map, key) => map?.get(key);
80
- const mapForEach = (map, cb) =>
81
- collForEach(map, (value, key) => cb(key, value));
82
- const mapSet = (map, key, value) =>
83
- isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
84
- const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
85
- if (!collHas(map, key)) {
86
- mapSet(map, key, getDefaultValue());
78
+ const map = Map;
79
+ const mapNew = (entries) => new map(entries);
80
+ const mapGet = (map2, key) => map2?.get(key);
81
+ const mapForEach = (map2, cb) =>
82
+ collForEach(map2, (value, key) => cb(key, value));
83
+ const mapSet = (map2, key, value) =>
84
+ isUndefined(value) ? (collDel(map2, key), map2) : map2?.set(key, value);
85
+ const mapEnsure = (map2, key, getDefaultValue, hadExistingValue) => {
86
+ if (!collHas(map2, key)) {
87
+ mapSet(map2, key, getDefaultValue());
87
88
  } else {
88
- hadExistingValue?.(mapGet(map, key));
89
+ hadExistingValue?.(mapGet(map2, key));
89
90
  }
90
- return mapGet(map, key);
91
+ return mapGet(map2, key);
91
92
  };
92
93
  const visitTree = (node, path, ensureLeaf, pruneLeaf, p = 0) =>
93
94
  ifNotUndefined(
@@ -311,6 +312,11 @@ const createCustomPersister = (
311
312
  ? store.applyChanges
312
313
  : store.setContent)(contentOrChanges);
313
314
  };
315
+ const saveAfterMutated = async () => {
316
+ if (isAutoSaving() && store.hadMutated?.()) {
317
+ await save();
318
+ }
319
+ };
314
320
  const load = async (initialContent) => {
315
321
  /* istanbul ignore else */
316
322
  if (status != 2 /* Saving */) {
@@ -335,6 +341,7 @@ const createCustomPersister = (
335
341
  },
336
342
  );
337
343
  setStatus(0 /* Idle */);
344
+ await saveAfterMutated();
338
345
  });
339
346
  }
340
347
  return persister;
@@ -353,6 +360,7 @@ const createCustomPersister = (
353
360
  loads++;
354
361
  setContentOrChanges(changes ?? content);
355
362
  setStatus(0 /* Idle */);
363
+ await saveAfterMutated();
356
364
  }
357
365
  } else {
358
366
  await load();
@@ -75,19 +75,20 @@ const objEnsure = (obj, id, getDefaultValue) => {
75
75
  return obj[id];
76
76
  };
77
77
 
78
- const mapNew = (entries) => new Map(entries);
79
- const mapGet = (map, key) => map?.get(key);
80
- const mapForEach = (map, cb) =>
81
- collForEach(map, (value, key) => cb(key, value));
82
- const mapSet = (map, key, value) =>
83
- isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
84
- const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
85
- if (!collHas(map, key)) {
86
- mapSet(map, key, getDefaultValue());
78
+ const map = Map;
79
+ const mapNew = (entries) => new map(entries);
80
+ const mapGet = (map2, key) => map2?.get(key);
81
+ const mapForEach = (map2, cb) =>
82
+ collForEach(map2, (value, key) => cb(key, value));
83
+ const mapSet = (map2, key, value) =>
84
+ isUndefined(value) ? (collDel(map2, key), map2) : map2?.set(key, value);
85
+ const mapEnsure = (map2, key, getDefaultValue, hadExistingValue) => {
86
+ if (!collHas(map2, key)) {
87
+ mapSet(map2, key, getDefaultValue());
87
88
  } else {
88
- hadExistingValue?.(mapGet(map, key));
89
+ hadExistingValue?.(mapGet(map2, key));
89
90
  }
90
- return mapGet(map, key);
91
+ return mapGet(map2, key);
91
92
  };
92
93
  const visitTree = (node, path, ensureLeaf, pruneLeaf, p = 0) =>
93
94
  ifNotUndefined(
@@ -311,6 +312,11 @@ const createCustomPersister = (
311
312
  ? store.applyChanges
312
313
  : store.setContent)(contentOrChanges);
313
314
  };
315
+ const saveAfterMutated = async () => {
316
+ if (isAutoSaving() && store.hadMutated?.()) {
317
+ await save();
318
+ }
319
+ };
314
320
  const load = async (initialContent) => {
315
321
  /* istanbul ignore else */
316
322
  if (status != 2 /* Saving */) {
@@ -335,6 +341,7 @@ const createCustomPersister = (
335
341
  },
336
342
  );
337
343
  setStatus(0 /* Idle */);
344
+ await saveAfterMutated();
338
345
  });
339
346
  }
340
347
  return persister;
@@ -353,6 +360,7 @@ const createCustomPersister = (
353
360
  loads++;
354
361
  setContentOrChanges(changes ?? content);
355
362
  setStatus(0 /* Idle */);
363
+ await saveAfterMutated();
356
364
  }
357
365
  } else {
358
366
  await load();
@@ -66,6 +66,10 @@ const objNew = (entries = []) => object.fromEntries(entries);
66
66
  const objHas = (obj, id) => id in obj;
67
67
  const objForEach = (obj, cb) =>
68
68
  arrayForEach(objEntries(obj), ([id, value]) => cb(value, id));
69
+ const objToArray = (obj, cb) =>
70
+ arrayMap(objEntries(obj), ([id, value]) => cb(value, id));
71
+ const objMap = (obj, cb) =>
72
+ objNew(objToArray(obj, (value, id) => [id, cb(value, id)]));
69
73
  const objSize = (obj) => size(objIds(obj));
70
74
  const objIsEmpty = (obj) => isObject(obj) && objSize(obj) == 0;
71
75
  const objEnsure = (obj, id, getDefaultValue) => {
@@ -80,7 +84,16 @@ const jsonParse = JSON.parse;
80
84
  const jsonStringWithUndefined = (obj) =>
81
85
  jsonString(obj, (_key, value) => (isUndefined(value) ? UNDEFINED : value));
82
86
  const jsonParseWithUndefined = (str) =>
83
- jsonParse(str, (_key, value) => (value === UNDEFINED ? void 0 : value));
87
+ // JSON.parse reviver removes properties with undefined values
88
+ replaceUndefinedString(jsonParse(str));
89
+ const replaceUndefinedString = (obj) =>
90
+ obj === UNDEFINED
91
+ ? void 0
92
+ : isArray(obj)
93
+ ? arrayMap(obj, replaceUndefinedString)
94
+ : isObject(obj)
95
+ ? objMap(obj, replaceUndefinedString)
96
+ : obj;
84
97
 
85
98
  const MESSAGE_SEPARATOR = '\n';
86
99
  const ifPayloadValid = (payload, then) => {
@@ -104,17 +117,18 @@ const collIsEmpty = (coll) => isUndefined(coll) || collSize(coll) == 0;
104
117
  const collForEach = (coll, cb) => coll?.forEach(cb);
105
118
  const collDel = (coll, keyOrValue) => coll?.delete(keyOrValue);
106
119
 
107
- const mapNew = (entries) => new Map(entries);
108
- const mapGet = (map, key) => map?.get(key);
109
- const mapSet = (map, key, value) =>
110
- isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
111
- const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
112
- if (!collHas(map, key)) {
113
- mapSet(map, key, getDefaultValue());
120
+ const map = Map;
121
+ const mapNew = (entries) => new map(entries);
122
+ const mapGet = (map2, key) => map2?.get(key);
123
+ const mapSet = (map2, key, value) =>
124
+ isUndefined(value) ? (collDel(map2, key), map2) : map2?.set(key, value);
125
+ const mapEnsure = (map2, key, getDefaultValue, hadExistingValue) => {
126
+ if (!collHas(map2, key)) {
127
+ mapSet(map2, key, getDefaultValue());
114
128
  } else {
115
- hadExistingValue?.(mapGet(map, key));
129
+ hadExistingValue?.(mapGet(map2, key));
116
130
  }
117
- return mapGet(map, key);
131
+ return mapGet(map2, key);
118
132
  };
119
133
  const visitTree = (node, path, ensureLeaf, pruneLeaf, p = 0) =>
120
134
  ifNotUndefined(
@@ -338,6 +352,11 @@ const createCustomPersister = (
338
352
  ? store.applyChanges
339
353
  : store.setContent)(contentOrChanges);
340
354
  };
355
+ const saveAfterMutated = async () => {
356
+ if (isAutoSaving() && store.hadMutated?.()) {
357
+ await save();
358
+ }
359
+ };
341
360
  const load = async (initialContent) => {
342
361
  /* istanbul ignore else */
343
362
  if (status != 2 /* Saving */) {
@@ -362,6 +381,7 @@ const createCustomPersister = (
362
381
  },
363
382
  );
364
383
  setStatus(0 /* Idle */);
384
+ await saveAfterMutated();
365
385
  });
366
386
  }
367
387
  return persister;
@@ -380,6 +400,7 @@ const createCustomPersister = (
380
400
  loads++;
381
401
  setContentOrChanges(changes ?? content);
382
402
  setStatus(0 /* Idle */);
403
+ await saveAfterMutated();
383
404
  }
384
405
  } else {
385
406
  await load();
@@ -66,6 +66,10 @@ const objNew = (entries = []) => object.fromEntries(entries);
66
66
  const objHas = (obj, id) => id in obj;
67
67
  const objForEach = (obj, cb) =>
68
68
  arrayForEach(objEntries(obj), ([id, value]) => cb(value, id));
69
+ const objToArray = (obj, cb) =>
70
+ arrayMap(objEntries(obj), ([id, value]) => cb(value, id));
71
+ const objMap = (obj, cb) =>
72
+ objNew(objToArray(obj, (value, id) => [id, cb(value, id)]));
69
73
  const objSize = (obj) => size(objIds(obj));
70
74
  const objIsEmpty = (obj) => isObject(obj) && objSize(obj) == 0;
71
75
  const objEnsure = (obj, id, getDefaultValue) => {
@@ -80,7 +84,16 @@ const jsonParse = JSON.parse;
80
84
  const jsonStringWithUndefined = (obj) =>
81
85
  jsonString(obj, (_key, value) => (isUndefined(value) ? UNDEFINED : value));
82
86
  const jsonParseWithUndefined = (str) =>
83
- jsonParse(str, (_key, value) => (value === UNDEFINED ? void 0 : value));
87
+ // JSON.parse reviver removes properties with undefined values
88
+ replaceUndefinedString(jsonParse(str));
89
+ const replaceUndefinedString = (obj) =>
90
+ obj === UNDEFINED
91
+ ? void 0
92
+ : isArray(obj)
93
+ ? arrayMap(obj, replaceUndefinedString)
94
+ : isObject(obj)
95
+ ? objMap(obj, replaceUndefinedString)
96
+ : obj;
84
97
 
85
98
  const MESSAGE_SEPARATOR = '\n';
86
99
  const ifPayloadValid = (payload, then) => {
@@ -104,17 +117,18 @@ const collIsEmpty = (coll) => isUndefined(coll) || collSize(coll) == 0;
104
117
  const collForEach = (coll, cb) => coll?.forEach(cb);
105
118
  const collDel = (coll, keyOrValue) => coll?.delete(keyOrValue);
106
119
 
107
- const mapNew = (entries) => new Map(entries);
108
- const mapGet = (map, key) => map?.get(key);
109
- const mapSet = (map, key, value) =>
110
- isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
111
- const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
112
- if (!collHas(map, key)) {
113
- mapSet(map, key, getDefaultValue());
120
+ const map = Map;
121
+ const mapNew = (entries) => new map(entries);
122
+ const mapGet = (map2, key) => map2?.get(key);
123
+ const mapSet = (map2, key, value) =>
124
+ isUndefined(value) ? (collDel(map2, key), map2) : map2?.set(key, value);
125
+ const mapEnsure = (map2, key, getDefaultValue, hadExistingValue) => {
126
+ if (!collHas(map2, key)) {
127
+ mapSet(map2, key, getDefaultValue());
114
128
  } else {
115
- hadExistingValue?.(mapGet(map, key));
129
+ hadExistingValue?.(mapGet(map2, key));
116
130
  }
117
- return mapGet(map, key);
131
+ return mapGet(map2, key);
118
132
  };
119
133
  const visitTree = (node, path, ensureLeaf, pruneLeaf, p = 0) =>
120
134
  ifNotUndefined(
@@ -338,6 +352,11 @@ const createCustomPersister = (
338
352
  ? store.applyChanges
339
353
  : store.setContent)(contentOrChanges);
340
354
  };
355
+ const saveAfterMutated = async () => {
356
+ if (isAutoSaving() && store.hadMutated?.()) {
357
+ await save();
358
+ }
359
+ };
341
360
  const load = async (initialContent) => {
342
361
  /* istanbul ignore else */
343
362
  if (status != 2 /* Saving */) {
@@ -362,6 +381,7 @@ const createCustomPersister = (
362
381
  },
363
382
  );
364
383
  setStatus(0 /* Idle */);
384
+ await saveAfterMutated();
365
385
  });
366
386
  }
367
387
  return persister;
@@ -380,6 +400,7 @@ const createCustomPersister = (
380
400
  loads++;
381
401
  setContentOrChanges(changes ?? content);
382
402
  setStatus(0 /* Idle */);
403
+ await saveAfterMutated();
383
404
  }
384
405
  } else {
385
406
  await load();
@@ -79,6 +79,10 @@ const objNew = (entries = []) => object.fromEntries(entries);
79
79
  const objHas = (obj, id) => id in obj;
80
80
  const objForEach = (obj, cb) =>
81
81
  arrayForEach(objEntries(obj), ([id, value]) => cb(value, id));
82
+ const objToArray = (obj, cb) =>
83
+ arrayMap(objEntries(obj), ([id, value]) => cb(value, id));
84
+ const objMap = (obj, cb) =>
85
+ objNew(objToArray(obj, (value, id) => [id, cb(value, id)]));
82
86
  const objSize = (obj) => size(objIds(obj));
83
87
  const objIsEmpty = (obj) => isObject(obj) && objSize(obj) == 0;
84
88
  const objEnsure = (obj, id, getDefaultValue) => {
@@ -88,22 +92,23 @@ const objEnsure = (obj, id, getDefaultValue) => {
88
92
  return obj[id];
89
93
  };
90
94
 
91
- const mapNew = (entries) => new Map(entries);
92
- const mapKeys = (map) => [...(map?.keys() ?? [])];
93
- const mapGet = (map, key) => map?.get(key);
94
- const mapForEach = (map, cb) =>
95
- collForEach(map, (value, key) => cb(key, value));
95
+ const map = Map;
96
+ const mapNew = (entries) => new map(entries);
97
+ const mapKeys = (map2) => [...(map2?.keys() ?? [])];
98
+ const mapGet = (map2, key) => map2?.get(key);
99
+ const mapForEach = (map2, cb) =>
100
+ collForEach(map2, (value, key) => cb(key, value));
96
101
  const mapMap = (coll, cb) =>
97
102
  arrayMap([...(coll?.entries() ?? [])], ([key, value]) => cb(value, key));
98
- const mapSet = (map, key, value) =>
99
- isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
100
- const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
101
- if (!collHas(map, key)) {
102
- mapSet(map, key, getDefaultValue());
103
+ const mapSet = (map2, key, value) =>
104
+ isUndefined(value) ? (collDel(map2, key), map2) : map2?.set(key, value);
105
+ const mapEnsure = (map2, key, getDefaultValue, hadExistingValue) => {
106
+ if (!collHas(map2, key)) {
107
+ mapSet(map2, key, getDefaultValue());
103
108
  } else {
104
- hadExistingValue?.(mapGet(map, key));
109
+ hadExistingValue?.(mapGet(map2, key));
105
110
  }
106
- return mapGet(map, key);
111
+ return mapGet(map2, key);
107
112
  };
108
113
  const visitTree = (node, path, ensureLeaf, pruneLeaf, p = 0) =>
109
114
  ifNotUndefined(
@@ -226,7 +231,16 @@ const jsonParse = JSON.parse;
226
231
  const jsonStringWithUndefined = (obj) =>
227
232
  jsonString(obj, (_key, value) => (isUndefined(value) ? UNDEFINED : value));
228
233
  const jsonParseWithUndefined = (str) =>
229
- jsonParse(str, (_key, value) => (value === UNDEFINED ? void 0 : value));
234
+ // JSON.parse reviver removes properties with undefined values
235
+ replaceUndefinedString(jsonParse(str));
236
+ const replaceUndefinedString = (obj) =>
237
+ obj === UNDEFINED
238
+ ? void 0
239
+ : isArray(obj)
240
+ ? arrayMap(obj, replaceUndefinedString)
241
+ : isObject(obj)
242
+ ? objMap(obj, replaceUndefinedString)
243
+ : obj;
230
244
 
231
245
  const MESSAGE_SEPARATOR = '\n';
232
246
  const ifPayloadValid = (payload, then) => {
@@ -350,6 +364,11 @@ const createCustomPersister = (
350
364
  ? store.applyChanges
351
365
  : store.setContent)(contentOrChanges);
352
366
  };
367
+ const saveAfterMutated = async () => {
368
+ if (isAutoSaving() && store.hadMutated?.()) {
369
+ await save();
370
+ }
371
+ };
353
372
  const load = async (initialContent) => {
354
373
  /* istanbul ignore else */
355
374
  if (status != 2 /* Saving */) {
@@ -374,6 +393,7 @@ const createCustomPersister = (
374
393
  },
375
394
  );
376
395
  setStatus(0 /* Idle */);
396
+ await saveAfterMutated();
377
397
  });
378
398
  }
379
399
  return persister;
@@ -392,6 +412,7 @@ const createCustomPersister = (
392
412
  loads++;
393
413
  setContentOrChanges(changes ?? content);
394
414
  setStatus(0 /* Idle */);
415
+ await saveAfterMutated();
395
416
  }
396
417
  } else {
397
418
  await load();
@@ -79,6 +79,10 @@ const objNew = (entries = []) => object.fromEntries(entries);
79
79
  const objHas = (obj, id) => id in obj;
80
80
  const objForEach = (obj, cb) =>
81
81
  arrayForEach(objEntries(obj), ([id, value]) => cb(value, id));
82
+ const objToArray = (obj, cb) =>
83
+ arrayMap(objEntries(obj), ([id, value]) => cb(value, id));
84
+ const objMap = (obj, cb) =>
85
+ objNew(objToArray(obj, (value, id) => [id, cb(value, id)]));
82
86
  const objSize = (obj) => size(objIds(obj));
83
87
  const objIsEmpty = (obj) => isObject(obj) && objSize(obj) == 0;
84
88
  const objEnsure = (obj, id, getDefaultValue) => {
@@ -88,22 +92,23 @@ const objEnsure = (obj, id, getDefaultValue) => {
88
92
  return obj[id];
89
93
  };
90
94
 
91
- const mapNew = (entries) => new Map(entries);
92
- const mapKeys = (map) => [...(map?.keys() ?? [])];
93
- const mapGet = (map, key) => map?.get(key);
94
- const mapForEach = (map, cb) =>
95
- collForEach(map, (value, key) => cb(key, value));
95
+ const map = Map;
96
+ const mapNew = (entries) => new map(entries);
97
+ const mapKeys = (map2) => [...(map2?.keys() ?? [])];
98
+ const mapGet = (map2, key) => map2?.get(key);
99
+ const mapForEach = (map2, cb) =>
100
+ collForEach(map2, (value, key) => cb(key, value));
96
101
  const mapMap = (coll, cb) =>
97
102
  arrayMap([...(coll?.entries() ?? [])], ([key, value]) => cb(value, key));
98
- const mapSet = (map, key, value) =>
99
- isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
100
- const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
101
- if (!collHas(map, key)) {
102
- mapSet(map, key, getDefaultValue());
103
+ const mapSet = (map2, key, value) =>
104
+ isUndefined(value) ? (collDel(map2, key), map2) : map2?.set(key, value);
105
+ const mapEnsure = (map2, key, getDefaultValue, hadExistingValue) => {
106
+ if (!collHas(map2, key)) {
107
+ mapSet(map2, key, getDefaultValue());
103
108
  } else {
104
- hadExistingValue?.(mapGet(map, key));
109
+ hadExistingValue?.(mapGet(map2, key));
105
110
  }
106
- return mapGet(map, key);
111
+ return mapGet(map2, key);
107
112
  };
108
113
  const visitTree = (node, path, ensureLeaf, pruneLeaf, p = 0) =>
109
114
  ifNotUndefined(
@@ -226,7 +231,16 @@ const jsonParse = JSON.parse;
226
231
  const jsonStringWithUndefined = (obj) =>
227
232
  jsonString(obj, (_key, value) => (isUndefined(value) ? UNDEFINED : value));
228
233
  const jsonParseWithUndefined = (str) =>
229
- jsonParse(str, (_key, value) => (value === UNDEFINED ? void 0 : value));
234
+ // JSON.parse reviver removes properties with undefined values
235
+ replaceUndefinedString(jsonParse(str));
236
+ const replaceUndefinedString = (obj) =>
237
+ obj === UNDEFINED
238
+ ? void 0
239
+ : isArray(obj)
240
+ ? arrayMap(obj, replaceUndefinedString)
241
+ : isObject(obj)
242
+ ? objMap(obj, replaceUndefinedString)
243
+ : obj;
230
244
 
231
245
  const MESSAGE_SEPARATOR = '\n';
232
246
  const ifPayloadValid = (payload, then) => {
@@ -350,6 +364,11 @@ const createCustomPersister = (
350
364
  ? store.applyChanges
351
365
  : store.setContent)(contentOrChanges);
352
366
  };
367
+ const saveAfterMutated = async () => {
368
+ if (isAutoSaving() && store.hadMutated?.()) {
369
+ await save();
370
+ }
371
+ };
353
372
  const load = async (initialContent) => {
354
373
  /* istanbul ignore else */
355
374
  if (status != 2 /* Saving */) {
@@ -374,6 +393,7 @@ const createCustomPersister = (
374
393
  },
375
394
  );
376
395
  setStatus(0 /* Idle */);
396
+ await saveAfterMutated();
377
397
  });
378
398
  }
379
399
  return persister;
@@ -392,6 +412,7 @@ const createCustomPersister = (
392
412
  loads++;
393
413
  setContentOrChanges(changes ?? content);
394
414
  setStatus(0 /* Idle */);
415
+ await saveAfterMutated();
395
416
  }
396
417
  } else {
397
418
  await load();
@@ -67,6 +67,10 @@ const objNew = (entries = []) => object.fromEntries(entries);
67
67
  const objHas = (obj, id) => id in obj;
68
68
  const objForEach = (obj, cb) =>
69
69
  arrayForEach(objEntries(obj), ([id, value]) => cb(value, id));
70
+ const objToArray = (obj, cb) =>
71
+ arrayMap(objEntries(obj), ([id, value]) => cb(value, id));
72
+ const objMap = (obj, cb) =>
73
+ objNew(objToArray(obj, (value, id) => [id, cb(value, id)]));
70
74
  const objValues = (obj) => object.values(obj);
71
75
  const objSize = (obj) => size(objIds(obj));
72
76
  const objIsEmpty = (obj) => isObject(obj) && objSize(obj) == 0;
@@ -82,7 +86,16 @@ const jsonParse = JSON.parse;
82
86
  const jsonStringWithUndefined = (obj) =>
83
87
  jsonString(obj, (_key, value) => (isUndefined(value) ? UNDEFINED : value));
84
88
  const jsonParseWithUndefined = (str) =>
85
- jsonParse(str, (_key, value) => (value === UNDEFINED ? void 0 : value));
89
+ // JSON.parse reviver removes properties with undefined values
90
+ replaceUndefinedString(jsonParse(str));
91
+ const replaceUndefinedString = (obj) =>
92
+ obj === UNDEFINED
93
+ ? void 0
94
+ : isArray(obj)
95
+ ? arrayMap(obj, replaceUndefinedString)
96
+ : isObject(obj)
97
+ ? objMap(obj, replaceUndefinedString)
98
+ : obj;
86
99
 
87
100
  const MESSAGE_SEPARATOR = '\n';
88
101
  const ifPayloadValid = (payload, then) => {
@@ -106,17 +119,18 @@ const collIsEmpty = (coll) => isUndefined(coll) || collSize(coll) == 0;
106
119
  const collForEach = (coll, cb) => coll?.forEach(cb);
107
120
  const collDel = (coll, keyOrValue) => coll?.delete(keyOrValue);
108
121
 
109
- const mapNew = (entries) => new Map(entries);
110
- const mapGet = (map, key) => map?.get(key);
111
- const mapSet = (map, key, value) =>
112
- isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
113
- const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
114
- if (!collHas(map, key)) {
115
- mapSet(map, key, getDefaultValue());
122
+ const map = Map;
123
+ const mapNew = (entries) => new map(entries);
124
+ const mapGet = (map2, key) => map2?.get(key);
125
+ const mapSet = (map2, key, value) =>
126
+ isUndefined(value) ? (collDel(map2, key), map2) : map2?.set(key, value);
127
+ const mapEnsure = (map2, key, getDefaultValue, hadExistingValue) => {
128
+ if (!collHas(map2, key)) {
129
+ mapSet(map2, key, getDefaultValue());
116
130
  } else {
117
- hadExistingValue?.(mapGet(map, key));
131
+ hadExistingValue?.(mapGet(map2, key));
118
132
  }
119
- return mapGet(map, key);
133
+ return mapGet(map2, key);
120
134
  };
121
135
  const visitTree = (node, path, ensureLeaf, pruneLeaf, p = 0) =>
122
136
  ifNotUndefined(
@@ -340,6 +354,11 @@ const createCustomPersister = (
340
354
  ? store.applyChanges
341
355
  : store.setContent)(contentOrChanges);
342
356
  };
357
+ const saveAfterMutated = async () => {
358
+ if (isAutoSaving() && store.hadMutated?.()) {
359
+ await save();
360
+ }
361
+ };
343
362
  const load = async (initialContent) => {
344
363
  /* istanbul ignore else */
345
364
  if (status != 2 /* Saving */) {
@@ -364,6 +383,7 @@ const createCustomPersister = (
364
383
  },
365
384
  );
366
385
  setStatus(0 /* Idle */);
386
+ await saveAfterMutated();
367
387
  });
368
388
  }
369
389
  return persister;
@@ -382,6 +402,7 @@ const createCustomPersister = (
382
402
  loads++;
383
403
  setContentOrChanges(changes ?? content);
384
404
  setStatus(0 /* Idle */);
405
+ await saveAfterMutated();
385
406
  }
386
407
  } else {
387
408
  await load();