tinybase 7.3.3 → 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.
- package/checkpoints/index.js +12 -11
- package/checkpoints/with-schemas/index.js +12 -11
- package/common/index.js +3 -2
- package/common/with-schemas/index.js +3 -2
- package/index.js +92 -64
- package/indexes/index.js +13 -12
- package/indexes/with-schemas/index.js +13 -12
- package/mergeable-store/index.js +92 -64
- package/mergeable-store/with-schemas/index.js +92 -64
- package/metrics/index.js +13 -12
- package/metrics/with-schemas/index.js +13 -12
- package/min/checkpoints/index.js +1 -1
- package/min/checkpoints/index.js.gz +0 -0
- package/min/checkpoints/with-schemas/index.js +1 -1
- package/min/checkpoints/with-schemas/index.js.gz +0 -0
- package/min/common/index.js +1 -1
- package/min/common/index.js.gz +0 -0
- package/min/common/with-schemas/index.js +1 -1
- package/min/common/with-schemas/index.js.gz +0 -0
- package/min/index.js +1 -1
- package/min/index.js.gz +0 -0
- package/min/indexes/index.js +1 -1
- package/min/indexes/index.js.gz +0 -0
- package/min/indexes/with-schemas/index.js +1 -1
- package/min/indexes/with-schemas/index.js.gz +0 -0
- package/min/mergeable-store/index.js +1 -1
- package/min/mergeable-store/index.js.gz +0 -0
- package/min/mergeable-store/with-schemas/index.js +1 -1
- package/min/mergeable-store/with-schemas/index.js.gz +0 -0
- package/min/metrics/index.js +1 -1
- package/min/metrics/index.js.gz +0 -0
- package/min/metrics/with-schemas/index.js +1 -1
- package/min/metrics/with-schemas/index.js.gz +0 -0
- package/min/omni/index.js +1 -1
- package/min/omni/index.js.gz +0 -0
- package/min/omni/with-schemas/index.js +1 -1
- package/min/omni/with-schemas/index.js.gz +0 -0
- package/min/persisters/index.js +1 -1
- package/min/persisters/index.js.gz +0 -0
- package/min/persisters/persister-automerge/index.js +1 -1
- package/min/persisters/persister-automerge/index.js.gz +0 -0
- package/min/persisters/persister-automerge/with-schemas/index.js +1 -1
- package/min/persisters/persister-automerge/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-browser/index.js +1 -1
- package/min/persisters/persister-browser/index.js.gz +0 -0
- package/min/persisters/persister-browser/with-schemas/index.js +1 -1
- package/min/persisters/persister-browser/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-cr-sqlite-wasm/index.js +1 -1
- package/min/persisters/persister-cr-sqlite-wasm/index.js.gz +0 -0
- package/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +1 -1
- package/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-durable-object-sql-storage/index.js +1 -1
- package/min/persisters/persister-durable-object-sql-storage/index.js.gz +0 -0
- package/min/persisters/persister-durable-object-sql-storage/with-schemas/index.js +1 -1
- package/min/persisters/persister-durable-object-sql-storage/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-durable-object-storage/index.js +1 -1
- package/min/persisters/persister-durable-object-storage/index.js.gz +0 -0
- package/min/persisters/persister-durable-object-storage/with-schemas/index.js +1 -1
- package/min/persisters/persister-durable-object-storage/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-electric-sql/index.js +1 -1
- package/min/persisters/persister-electric-sql/index.js.gz +0 -0
- package/min/persisters/persister-electric-sql/with-schemas/index.js +1 -1
- package/min/persisters/persister-electric-sql/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-expo-sqlite/index.js +1 -1
- package/min/persisters/persister-expo-sqlite/index.js.gz +0 -0
- package/min/persisters/persister-expo-sqlite/with-schemas/index.js +1 -1
- package/min/persisters/persister-expo-sqlite/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-file/index.js +1 -1
- package/min/persisters/persister-file/index.js.gz +0 -0
- package/min/persisters/persister-file/with-schemas/index.js +1 -1
- package/min/persisters/persister-file/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-indexed-db/index.js +1 -1
- package/min/persisters/persister-indexed-db/index.js.gz +0 -0
- package/min/persisters/persister-indexed-db/with-schemas/index.js +1 -1
- package/min/persisters/persister-indexed-db/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-libsql/index.js +1 -1
- package/min/persisters/persister-libsql/index.js.gz +0 -0
- package/min/persisters/persister-libsql/with-schemas/index.js +1 -1
- package/min/persisters/persister-libsql/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-partykit-client/index.js +1 -1
- package/min/persisters/persister-partykit-client/index.js.gz +0 -0
- package/min/persisters/persister-partykit-client/with-schemas/index.js +1 -1
- package/min/persisters/persister-partykit-client/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-pglite/index.js +1 -1
- package/min/persisters/persister-pglite/index.js.gz +0 -0
- package/min/persisters/persister-pglite/with-schemas/index.js +1 -1
- package/min/persisters/persister-pglite/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-postgres/index.js +1 -1
- package/min/persisters/persister-postgres/index.js.gz +0 -0
- package/min/persisters/persister-postgres/with-schemas/index.js +1 -1
- package/min/persisters/persister-postgres/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-powersync/index.js +1 -1
- package/min/persisters/persister-powersync/index.js.gz +0 -0
- package/min/persisters/persister-powersync/with-schemas/index.js +1 -1
- package/min/persisters/persister-powersync/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-react-native-mmkv/index.js +1 -1
- package/min/persisters/persister-react-native-mmkv/index.js.gz +0 -0
- package/min/persisters/persister-react-native-mmkv/with-schemas/index.js +1 -1
- package/min/persisters/persister-react-native-mmkv/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-react-native-sqlite/index.js +1 -1
- package/min/persisters/persister-react-native-sqlite/index.js.gz +0 -0
- package/min/persisters/persister-react-native-sqlite/with-schemas/index.js +1 -1
- package/min/persisters/persister-react-native-sqlite/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-remote/index.js +1 -1
- package/min/persisters/persister-remote/index.js.gz +0 -0
- package/min/persisters/persister-remote/with-schemas/index.js +1 -1
- package/min/persisters/persister-remote/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-sqlite-bun/index.js +1 -1
- package/min/persisters/persister-sqlite-bun/index.js.gz +0 -0
- package/min/persisters/persister-sqlite-bun/with-schemas/index.js +1 -1
- package/min/persisters/persister-sqlite-bun/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-sqlite-wasm/index.js +1 -1
- package/min/persisters/persister-sqlite-wasm/index.js.gz +0 -0
- package/min/persisters/persister-sqlite-wasm/with-schemas/index.js +1 -1
- package/min/persisters/persister-sqlite-wasm/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-sqlite3/index.js +1 -1
- package/min/persisters/persister-sqlite3/index.js.gz +0 -0
- package/min/persisters/persister-sqlite3/with-schemas/index.js +1 -1
- package/min/persisters/persister-sqlite3/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-yjs/index.js +1 -1
- package/min/persisters/persister-yjs/index.js.gz +0 -0
- package/min/persisters/persister-yjs/with-schemas/index.js +1 -1
- package/min/persisters/persister-yjs/with-schemas/index.js.gz +0 -0
- package/min/persisters/with-schemas/index.js +1 -1
- package/min/persisters/with-schemas/index.js.gz +0 -0
- package/min/queries/index.js +1 -1
- package/min/queries/index.js.gz +0 -0
- package/min/queries/with-schemas/index.js +1 -1
- package/min/queries/with-schemas/index.js.gz +0 -0
- package/min/relationships/index.js +1 -1
- package/min/relationships/index.js.gz +0 -0
- package/min/relationships/with-schemas/index.js +1 -1
- package/min/relationships/with-schemas/index.js.gz +0 -0
- package/min/store/index.js +1 -1
- package/min/store/index.js.gz +0 -0
- package/min/store/with-schemas/index.js +1 -1
- package/min/store/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/index.js +1 -1
- package/min/synchronizers/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-broadcast-channel/index.js +1 -1
- package/min/synchronizers/synchronizer-broadcast-channel/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +1 -1
- package/min/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-local/index.js +1 -1
- package/min/synchronizers/synchronizer-local/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-local/with-schemas/index.js +1 -1
- package/min/synchronizers/synchronizer-local/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-client/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-client/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-client/with-schemas/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-client/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-server/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-server/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-server/with-schemas/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-server/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-server-durable-object/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-server-durable-object/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-server-simple/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-server-simple/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-server-simple/with-schemas/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-server-simple/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/with-schemas/index.js +1 -1
- package/min/synchronizers/with-schemas/index.js.gz +0 -0
- package/min/ui-react-inspector/index.js +1 -1
- package/min/ui-react-inspector/index.js.gz +0 -0
- package/min/ui-react-inspector/with-schemas/index.js +1 -1
- package/min/ui-react-inspector/with-schemas/index.js.gz +0 -0
- package/min/with-schemas/index.js +1 -1
- package/min/with-schemas/index.js.gz +0 -0
- package/omni/index.js +99 -64
- package/omni/with-schemas/index.js +99 -64
- package/package.json +3 -3
- package/persisters/index.js +19 -11
- package/persisters/persister-automerge/index.js +17 -9
- package/persisters/persister-automerge/with-schemas/index.js +17 -9
- package/persisters/persister-browser/index.js +17 -9
- package/persisters/persister-browser/with-schemas/index.js +17 -9
- package/persisters/persister-cr-sqlite-wasm/index.js +19 -11
- package/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +19 -11
- package/persisters/persister-durable-object-sql-storage/index.js +19 -11
- package/persisters/persister-durable-object-sql-storage/with-schemas/index.js +19 -11
- package/persisters/persister-durable-object-storage/index.js +19 -11
- package/persisters/persister-durable-object-storage/with-schemas/index.js +19 -11
- package/persisters/persister-electric-sql/index.js +19 -11
- package/persisters/persister-electric-sql/with-schemas/index.js +19 -11
- package/persisters/persister-expo-sqlite/index.js +19 -11
- package/persisters/persister-expo-sqlite/with-schemas/index.js +19 -11
- package/persisters/persister-file/index.js +17 -9
- package/persisters/persister-file/with-schemas/index.js +17 -9
- package/persisters/persister-indexed-db/index.js +17 -9
- package/persisters/persister-indexed-db/with-schemas/index.js +17 -9
- package/persisters/persister-libsql/index.js +19 -11
- package/persisters/persister-libsql/with-schemas/index.js +19 -11
- package/persisters/persister-partykit-client/index.js +17 -9
- package/persisters/persister-partykit-client/with-schemas/index.js +17 -9
- package/persisters/persister-partykit-server/index.js +2 -2
- package/persisters/persister-partykit-server/with-schemas/index.js +2 -2
- package/persisters/persister-pglite/index.js +19 -11
- package/persisters/persister-pglite/with-schemas/index.js +19 -11
- package/persisters/persister-postgres/index.js +19 -11
- package/persisters/persister-postgres/with-schemas/index.js +19 -11
- package/persisters/persister-powersync/index.js +19 -11
- package/persisters/persister-powersync/with-schemas/index.js +19 -11
- package/persisters/persister-react-native-mmkv/index.js +17 -9
- package/persisters/persister-react-native-mmkv/with-schemas/index.js +17 -9
- package/persisters/persister-react-native-sqlite/index.js +19 -11
- package/persisters/persister-react-native-sqlite/with-schemas/index.js +19 -11
- package/persisters/persister-remote/index.js +17 -9
- package/persisters/persister-remote/with-schemas/index.js +17 -9
- package/persisters/persister-sqlite-bun/index.js +19 -11
- package/persisters/persister-sqlite-bun/with-schemas/index.js +19 -11
- package/persisters/persister-sqlite-wasm/index.js +19 -11
- package/persisters/persister-sqlite-wasm/with-schemas/index.js +19 -11
- package/persisters/persister-sqlite3/index.js +19 -11
- package/persisters/persister-sqlite3/with-schemas/index.js +19 -11
- package/persisters/persister-yjs/index.js +19 -11
- package/persisters/persister-yjs/with-schemas/index.js +19 -11
- package/persisters/with-schemas/index.js +19 -11
- package/queries/index.js +15 -14
- package/queries/with-schemas/index.js +15 -14
- package/readme.md +2 -2
- package/relationships/index.js +13 -12
- package/relationships/with-schemas/index.js +13 -12
- package/store/index.js +74 -60
- package/store/with-schemas/index.js +74 -60
- package/synchronizers/index.js +17 -9
- package/synchronizers/synchronizer-broadcast-channel/index.js +17 -9
- package/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +17 -9
- package/synchronizers/synchronizer-local/index.js +19 -11
- package/synchronizers/synchronizer-local/with-schemas/index.js +19 -11
- package/synchronizers/synchronizer-ws-client/index.js +17 -9
- package/synchronizers/synchronizer-ws-client/with-schemas/index.js +17 -9
- package/synchronizers/synchronizer-ws-server/index.js +20 -12
- package/synchronizers/synchronizer-ws-server/with-schemas/index.js +20 -12
- package/synchronizers/synchronizer-ws-server-durable-object/index.js +17 -9
- package/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js +17 -9
- package/synchronizers/synchronizer-ws-server-simple/index.js +11 -10
- package/synchronizers/synchronizer-ws-server-simple/with-schemas/index.js +11 -10
- package/synchronizers/with-schemas/index.js +17 -9
- package/ui-react-inspector/index.js +81 -60
- package/ui-react-inspector/with-schemas/index.js +81 -60
- package/with-schemas/index.js +92 -64
|
@@ -276,31 +276,32 @@ const objValidate = (obj, validateChild, onInvalidObj, emptyIsValid = 0) => {
|
|
|
276
276
|
return emptyIsValid ? true : !objIsEmpty(obj);
|
|
277
277
|
};
|
|
278
278
|
|
|
279
|
-
const
|
|
280
|
-
const
|
|
281
|
-
const
|
|
282
|
-
const
|
|
283
|
-
|
|
279
|
+
const map = Map;
|
|
280
|
+
const mapNew = (entries) => new map(entries);
|
|
281
|
+
const mapKeys = (map2) => [...(map2?.keys() ?? [])];
|
|
282
|
+
const mapGet = (map2, key) => map2?.get(key);
|
|
283
|
+
const mapForEach = (map2, cb) =>
|
|
284
|
+
collForEach(map2, (value, key) => cb(key, value));
|
|
284
285
|
const mapMap = (coll, cb) =>
|
|
285
286
|
arrayMap([...(coll?.entries() ?? [])], ([key, value]) => cb(value, key));
|
|
286
|
-
const mapSet = (
|
|
287
|
-
isUndefined(value) ? (collDel(
|
|
288
|
-
const mapEnsure = (
|
|
289
|
-
if (!collHas(
|
|
290
|
-
mapSet(
|
|
287
|
+
const mapSet = (map2, key, value) =>
|
|
288
|
+
isUndefined(value) ? (collDel(map2, key), map2) : map2?.set(key, value);
|
|
289
|
+
const mapEnsure = (map2, key, getDefaultValue, hadExistingValue) => {
|
|
290
|
+
if (!collHas(map2, key)) {
|
|
291
|
+
mapSet(map2, key, getDefaultValue());
|
|
291
292
|
} else {
|
|
292
|
-
hadExistingValue?.(mapGet(
|
|
293
|
+
hadExistingValue?.(mapGet(map2, key));
|
|
293
294
|
}
|
|
294
|
-
return mapGet(
|
|
295
|
+
return mapGet(map2, key);
|
|
295
296
|
};
|
|
296
|
-
const mapMatch = (
|
|
297
|
-
objMap(obj, (value, id) => set(
|
|
298
|
-
mapForEach(
|
|
299
|
-
return
|
|
297
|
+
const mapMatch = (map2, obj, set, del = mapSet) => {
|
|
298
|
+
objMap(obj, (value, id) => set(map2, id, value));
|
|
299
|
+
mapForEach(map2, (id) => (objHas(obj, id) ? 0 : del(map2, id)));
|
|
300
|
+
return map2;
|
|
300
301
|
};
|
|
301
|
-
const mapToObj = (
|
|
302
|
+
const mapToObj = (map2, valueMapper, excludeMapValue, excludeObjValue) => {
|
|
302
303
|
const obj = {};
|
|
303
|
-
collForEach(
|
|
304
|
+
collForEach(map2, (mapValue, id) => {
|
|
304
305
|
if (!excludeMapValue?.(mapValue, id)) {
|
|
305
306
|
const objValue = valueMapper ? valueMapper(mapValue, id) : mapValue;
|
|
306
307
|
if (!excludeObjValue?.(objValue)) {
|
|
@@ -310,27 +311,27 @@ const mapToObj = (map, valueMapper, excludeMapValue, excludeObjValue) => {
|
|
|
310
311
|
});
|
|
311
312
|
return obj;
|
|
312
313
|
};
|
|
313
|
-
const mapToObj2 = (
|
|
314
|
+
const mapToObj2 = (map2, valueMapper, excludeMapValue) =>
|
|
314
315
|
mapToObj(
|
|
315
|
-
|
|
316
|
+
map2,
|
|
316
317
|
(childMap) => mapToObj(childMap, valueMapper, excludeMapValue),
|
|
317
318
|
collIsEmpty,
|
|
318
319
|
objIsEmpty,
|
|
319
320
|
);
|
|
320
|
-
const mapToObj3 = (
|
|
321
|
+
const mapToObj3 = (map2, valueMapper, excludeMapValue) =>
|
|
321
322
|
mapToObj(
|
|
322
|
-
|
|
323
|
+
map2,
|
|
323
324
|
(childMap) => mapToObj2(childMap, valueMapper, excludeMapValue),
|
|
324
325
|
collIsEmpty,
|
|
325
326
|
objIsEmpty,
|
|
326
327
|
);
|
|
327
|
-
const mapClone = (
|
|
328
|
-
const
|
|
329
|
-
collForEach(
|
|
330
|
-
return
|
|
328
|
+
const mapClone = (map2, mapValue) => {
|
|
329
|
+
const map22 = mapNew();
|
|
330
|
+
collForEach(map2, (value, key) => map22.set(key, mapValue?.(value) ?? value));
|
|
331
|
+
return map22;
|
|
331
332
|
};
|
|
332
|
-
const mapClone2 = (
|
|
333
|
-
const mapClone3 = (
|
|
333
|
+
const mapClone2 = (map2) => mapClone(map2, mapClone);
|
|
334
|
+
const mapClone3 = (map2) => mapClone(map2, mapClone2);
|
|
334
335
|
const visitTree = (node, path, ensureLeaf, pruneLeaf, p = 0) =>
|
|
335
336
|
ifNotUndefined(
|
|
336
337
|
(ensureLeaf ? mapEnsure : mapGet)(
|
|
@@ -1299,6 +1300,7 @@ const createStore = () => {
|
|
|
1299
1300
|
let hadValues = false;
|
|
1300
1301
|
let transactions = 0;
|
|
1301
1302
|
let internalListeners = [];
|
|
1303
|
+
let mutating = 0;
|
|
1302
1304
|
const changedTableIds = mapNew();
|
|
1303
1305
|
const changedTableCellIds = mapNew();
|
|
1304
1306
|
const changedRowCount = mapNew();
|
|
@@ -1703,13 +1705,13 @@ const createStore = () => {
|
|
|
1703
1705
|
cellId,
|
|
1704
1706
|
() => [oldCell, 0],
|
|
1705
1707
|
)[1] = newCell;
|
|
1706
|
-
internalListeners[3]?.(tableId, rowId, cellId, newCell);
|
|
1708
|
+
internalListeners[3]?.(tableId, rowId, cellId, newCell, mutating);
|
|
1707
1709
|
};
|
|
1708
1710
|
const valueIdsChanged = (valueId, addedOrRemoved) =>
|
|
1709
1711
|
idsChanged(changedValueIds, valueId, addedOrRemoved);
|
|
1710
1712
|
const valueChanged = (valueId, oldValue, newValue) => {
|
|
1711
1713
|
mapEnsure(changedValues, valueId, () => [oldValue, 0])[1] = newValue;
|
|
1712
|
-
internalListeners[4]?.(valueId, newValue);
|
|
1714
|
+
internalListeners[4]?.(valueId, newValue, mutating);
|
|
1713
1715
|
};
|
|
1714
1716
|
const cellInvalid = (tableId, rowId, cellId, invalidCell, defaultedCell) => {
|
|
1715
1717
|
arrayPush(
|
|
@@ -1784,14 +1786,11 @@ const createStore = () => {
|
|
|
1784
1786
|
}
|
|
1785
1787
|
};
|
|
1786
1788
|
const callTabularListenersForChanges = (mutator) => {
|
|
1787
|
-
const
|
|
1788
|
-
|
|
1789
|
-
callListeners(hasTablesListeners[mutator], void 0, hasTablesNow);
|
|
1790
|
-
}
|
|
1791
|
-
const emptySortedRowIdListeners = collIsEmpty(
|
|
1789
|
+
const hasHasTablesListeners = !collIsEmpty(hasTablesListeners[mutator]);
|
|
1790
|
+
const hasSortedRowIdListeners = !collIsEmpty(
|
|
1792
1791
|
sortedRowIdsListeners[mutator],
|
|
1793
1792
|
);
|
|
1794
|
-
const
|
|
1793
|
+
const hasIdOrHasListeners = !(
|
|
1795
1794
|
collIsEmpty(cellIdsListeners[mutator]) &&
|
|
1796
1795
|
collIsEmpty(hasCellListeners[mutator]) &&
|
|
1797
1796
|
collIsEmpty(rowIdsListeners[mutator]) &&
|
|
@@ -1799,15 +1798,17 @@ const createStore = () => {
|
|
|
1799
1798
|
collIsEmpty(tableCellIdsListeners[mutator]) &&
|
|
1800
1799
|
collIsEmpty(hasTableCellListeners[mutator]) &&
|
|
1801
1800
|
collIsEmpty(rowCountListeners[mutator]) &&
|
|
1802
|
-
|
|
1801
|
+
!hasSortedRowIdListeners &&
|
|
1803
1802
|
collIsEmpty(tableIdsListeners[mutator]) &&
|
|
1804
|
-
collIsEmpty(hasTableListeners[mutator])
|
|
1805
|
-
|
|
1803
|
+
collIsEmpty(hasTableListeners[mutator])
|
|
1804
|
+
);
|
|
1805
|
+
const hasOtherListeners = !(
|
|
1806
1806
|
collIsEmpty(cellListeners[mutator]) &&
|
|
1807
1807
|
collIsEmpty(rowListeners[mutator]) &&
|
|
1808
1808
|
collIsEmpty(tableListeners[mutator]) &&
|
|
1809
|
-
collIsEmpty(tablesListeners[mutator])
|
|
1810
|
-
|
|
1809
|
+
collIsEmpty(tablesListeners[mutator])
|
|
1810
|
+
);
|
|
1811
|
+
if (hasHasTablesListeners || hasIdOrHasListeners || hasOtherListeners) {
|
|
1811
1812
|
const changes = mutator
|
|
1812
1813
|
? [
|
|
1813
1814
|
mapClone(changedTableIds),
|
|
@@ -1815,7 +1816,9 @@ const createStore = () => {
|
|
|
1815
1816
|
mapClone(changedRowCount),
|
|
1816
1817
|
mapClone2(changedRowIds),
|
|
1817
1818
|
mapClone3(changedCellIds),
|
|
1818
|
-
|
|
1819
|
+
mapClone(changedCells, (map) =>
|
|
1820
|
+
mapClone(map, (map2) => mapClone(map2, pairClone)),
|
|
1821
|
+
),
|
|
1819
1822
|
]
|
|
1820
1823
|
: [
|
|
1821
1824
|
changedTableIds,
|
|
@@ -1825,7 +1828,13 @@ const createStore = () => {
|
|
|
1825
1828
|
changedCellIds,
|
|
1826
1829
|
changedCells,
|
|
1827
1830
|
];
|
|
1828
|
-
if (
|
|
1831
|
+
if (hasHasTablesListeners) {
|
|
1832
|
+
const hasTablesNow = hasTables();
|
|
1833
|
+
if (hasTablesNow != hadTables) {
|
|
1834
|
+
callListeners(hasTablesListeners[mutator], void 0, hasTablesNow);
|
|
1835
|
+
}
|
|
1836
|
+
}
|
|
1837
|
+
if (hasIdOrHasListeners) {
|
|
1829
1838
|
callIdsAndHasListenersIfChanged(
|
|
1830
1839
|
changes[0],
|
|
1831
1840
|
tableIdsListeners[mutator],
|
|
@@ -1857,13 +1866,13 @@ const createStore = () => {
|
|
|
1857
1866
|
hasRowListeners[mutator],
|
|
1858
1867
|
[tableId],
|
|
1859
1868
|
) &&
|
|
1860
|
-
|
|
1869
|
+
hasSortedRowIdListeners
|
|
1861
1870
|
) {
|
|
1862
1871
|
callListeners(sortedRowIdsListeners[mutator], [tableId, null]);
|
|
1863
1872
|
setAdd(calledSortableTableIds, tableId);
|
|
1864
1873
|
}
|
|
1865
1874
|
});
|
|
1866
|
-
if (
|
|
1875
|
+
if (hasSortedRowIdListeners) {
|
|
1867
1876
|
collForEach(changes[5], (rows, tableId) => {
|
|
1868
1877
|
if (!collHas(calledSortableTableIds, tableId)) {
|
|
1869
1878
|
const sortableCellIds = setNew();
|
|
@@ -1894,7 +1903,7 @@ const createStore = () => {
|
|
|
1894
1903
|
),
|
|
1895
1904
|
);
|
|
1896
1905
|
}
|
|
1897
|
-
if (
|
|
1906
|
+
if (hasOtherListeners) {
|
|
1898
1907
|
let tablesChanged;
|
|
1899
1908
|
collForEach(changes[5], (rows, tableId) => {
|
|
1900
1909
|
let tableChanged;
|
|
@@ -1931,28 +1940,31 @@ const createStore = () => {
|
|
|
1931
1940
|
}
|
|
1932
1941
|
};
|
|
1933
1942
|
const callValuesListenersForChanges = (mutator) => {
|
|
1934
|
-
const
|
|
1935
|
-
|
|
1936
|
-
|
|
1937
|
-
|
|
1938
|
-
const
|
|
1939
|
-
collIsEmpty(
|
|
1940
|
-
collIsEmpty(
|
|
1941
|
-
|
|
1942
|
-
collIsEmpty(valueListeners[mutator]) &&
|
|
1943
|
-
collIsEmpty(valuesListeners[mutator]);
|
|
1944
|
-
if (!emptyIdAndHasListeners || !emptyOtherListeners) {
|
|
1943
|
+
const hasHasValuesListeners = !collIsEmpty(hasValuesListeners[mutator]);
|
|
1944
|
+
const hasIdOrHasListeners =
|
|
1945
|
+
!collIsEmpty(valueIdsListeners[mutator]) ||
|
|
1946
|
+
!collIsEmpty(hasValueListeners[mutator]);
|
|
1947
|
+
const hasOtherListeners =
|
|
1948
|
+
!collIsEmpty(valueListeners[mutator]) ||
|
|
1949
|
+
!collIsEmpty(valuesListeners[mutator]);
|
|
1950
|
+
if (hasHasValuesListeners || hasIdOrHasListeners || hasOtherListeners) {
|
|
1945
1951
|
const changes = mutator
|
|
1946
|
-
? [mapClone(changedValueIds), mapClone(changedValues)]
|
|
1952
|
+
? [mapClone(changedValueIds), mapClone(changedValues, pairClone)]
|
|
1947
1953
|
: [changedValueIds, changedValues];
|
|
1948
|
-
if (
|
|
1954
|
+
if (hasHasValuesListeners) {
|
|
1955
|
+
const hasValuesNow = hasValues();
|
|
1956
|
+
if (hasValuesNow != hadValues) {
|
|
1957
|
+
callListeners(hasValuesListeners[mutator], void 0, hasValuesNow);
|
|
1958
|
+
}
|
|
1959
|
+
}
|
|
1960
|
+
if (hasIdOrHasListeners) {
|
|
1949
1961
|
callIdsAndHasListenersIfChanged(
|
|
1950
1962
|
changes[0],
|
|
1951
1963
|
valueIdsListeners[mutator],
|
|
1952
1964
|
hasValueListeners[mutator],
|
|
1953
1965
|
);
|
|
1954
1966
|
}
|
|
1955
|
-
if (
|
|
1967
|
+
if (hasOtherListeners) {
|
|
1956
1968
|
let valuesChanged;
|
|
1957
1969
|
collForEach(changes[1], ([oldValue, newValue], valueId) => {
|
|
1958
1970
|
if (newValue !== oldValue) {
|
|
@@ -2349,6 +2361,7 @@ const createStore = () => {
|
|
|
2349
2361
|
transactions--;
|
|
2350
2362
|
if (transactions == 0) {
|
|
2351
2363
|
transactions = 1;
|
|
2364
|
+
mutating = 1;
|
|
2352
2365
|
callInvalidCellListeners(1);
|
|
2353
2366
|
if (!collIsEmpty(changedCells)) {
|
|
2354
2367
|
callTabularListenersForChanges(1);
|
|
@@ -2357,6 +2370,7 @@ const createStore = () => {
|
|
|
2357
2370
|
if (!collIsEmpty(changedValues)) {
|
|
2358
2371
|
callValuesListenersForChanges(1);
|
|
2359
2372
|
}
|
|
2373
|
+
mutating = 0;
|
|
2360
2374
|
if (doRollback?.(store)) {
|
|
2361
2375
|
collForEach(changedCells, (table, tableId) =>
|
|
2362
2376
|
collForEach(table, (row, rowId) =>
|
|
@@ -2723,6 +2737,7 @@ const createMergeableStore = (uniqueId, getNow) => {
|
|
|
2723
2737
|
let listeningToRawStoreChanges = 1;
|
|
2724
2738
|
let contentStampMap = newContentStampMap();
|
|
2725
2739
|
let defaultingContent = 0;
|
|
2740
|
+
let mutated = 0;
|
|
2726
2741
|
const touchedCells = mapNew();
|
|
2727
2742
|
const touchedValues = setNew();
|
|
2728
2743
|
const [getNextHlc, seenHlc] = getHlcFunctions(uniqueId, getNow);
|
|
@@ -2849,12 +2864,15 @@ const createMergeableStore = (uniqueId, getNow) => {
|
|
|
2849
2864
|
collClear(touchedCells);
|
|
2850
2865
|
collClear(touchedValues);
|
|
2851
2866
|
};
|
|
2852
|
-
const cellChanged = (tableId, rowId, cellId, newCell) => {
|
|
2867
|
+
const cellChanged = (tableId, rowId, cellId, newCell, mutating) => {
|
|
2853
2868
|
setAdd(
|
|
2854
2869
|
mapEnsure(mapEnsure(touchedCells, tableId, mapNew), rowId, setNew),
|
|
2855
2870
|
cellId,
|
|
2856
2871
|
);
|
|
2857
|
-
if (listeningToRawStoreChanges) {
|
|
2872
|
+
if (listeningToRawStoreChanges || mutating) {
|
|
2873
|
+
if (mutating) {
|
|
2874
|
+
mutated = 1;
|
|
2875
|
+
}
|
|
2858
2876
|
mergeContentOrChanges([
|
|
2859
2877
|
[
|
|
2860
2878
|
{
|
|
@@ -2877,9 +2895,12 @@ const createMergeableStore = (uniqueId, getNow) => {
|
|
|
2877
2895
|
]);
|
|
2878
2896
|
}
|
|
2879
2897
|
};
|
|
2880
|
-
const valueChanged = (valueId, newValue) => {
|
|
2898
|
+
const valueChanged = (valueId, newValue, mutating) => {
|
|
2881
2899
|
setAdd(touchedValues, valueId);
|
|
2882
|
-
if (listeningToRawStoreChanges) {
|
|
2900
|
+
if (listeningToRawStoreChanges || mutating) {
|
|
2901
|
+
if (mutating) {
|
|
2902
|
+
mutated = 1;
|
|
2903
|
+
}
|
|
2883
2904
|
mergeContentOrChanges([
|
|
2884
2905
|
[{}],
|
|
2885
2906
|
[
|
|
@@ -3097,6 +3118,11 @@ const createMergeableStore = (uniqueId, getNow) => {
|
|
|
3097
3118
|
mergeableStore2.applyMergeableChanges(mergeableChanges);
|
|
3098
3119
|
return applyMergeableChanges(mergeableChanges2);
|
|
3099
3120
|
};
|
|
3121
|
+
const hadMutated = () => {
|
|
3122
|
+
const result = mutated;
|
|
3123
|
+
mutated = 0;
|
|
3124
|
+
return result;
|
|
3125
|
+
};
|
|
3100
3126
|
const mergeableStore = {
|
|
3101
3127
|
getMergeableContent,
|
|
3102
3128
|
getMergeableContentHashes,
|
|
@@ -3113,6 +3139,8 @@ const createMergeableStore = (uniqueId, getNow) => {
|
|
|
3113
3139
|
getTransactionMergeableChanges,
|
|
3114
3140
|
applyMergeableChanges,
|
|
3115
3141
|
merge,
|
|
3142
|
+
// only used internally by other modules
|
|
3143
|
+
hadMutated,
|
|
3116
3144
|
};
|
|
3117
3145
|
store.setInternalListeners(
|
|
3118
3146
|
preStartTransaction,
|
|
@@ -3416,6 +3444,11 @@ const createCustomPersister = (
|
|
|
3416
3444
|
? store.applyChanges
|
|
3417
3445
|
: store.setContent)(contentOrChanges);
|
|
3418
3446
|
};
|
|
3447
|
+
const saveAfterMutated = async () => {
|
|
3448
|
+
if (isAutoSaving() && store.hadMutated?.()) {
|
|
3449
|
+
await save();
|
|
3450
|
+
}
|
|
3451
|
+
};
|
|
3419
3452
|
const load = async (initialContent) => {
|
|
3420
3453
|
/* istanbul ignore else */
|
|
3421
3454
|
if (status != 2 /* Saving */) {
|
|
@@ -3440,6 +3473,7 @@ const createCustomPersister = (
|
|
|
3440
3473
|
},
|
|
3441
3474
|
);
|
|
3442
3475
|
setStatus(0 /* Idle */);
|
|
3476
|
+
await saveAfterMutated();
|
|
3443
3477
|
});
|
|
3444
3478
|
}
|
|
3445
3479
|
return persister;
|
|
@@ -3458,6 +3492,7 @@ const createCustomPersister = (
|
|
|
3458
3492
|
loads++;
|
|
3459
3493
|
setContentOrChanges(changes ?? content);
|
|
3460
3494
|
setStatus(0 /* Idle */);
|
|
3495
|
+
await saveAfterMutated();
|
|
3461
3496
|
}
|
|
3462
3497
|
} else {
|
|
3463
3498
|
await load();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tinybase",
|
|
3
|
-
"version": "7.3.
|
|
3
|
+
"version": "7.3.4",
|
|
4
4
|
"author": "jamesgpearce",
|
|
5
5
|
"repository": "github:tinyplex/tinybase",
|
|
6
6
|
"license": "MIT",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"sideEffects": false,
|
|
23
23
|
"peerDependencies": {
|
|
24
24
|
"@automerge/automerge-repo": "^2.5.1",
|
|
25
|
-
"@cloudflare/workers-types": "^4.
|
|
25
|
+
"@cloudflare/workers-types": "^4.20260214.0",
|
|
26
26
|
"@electric-sql/pglite": "^0.3.15",
|
|
27
27
|
"@libsql/client": "^0.17.0",
|
|
28
28
|
"@powersync/common": "^1.46.0",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"@vlcn.io/crsqlite-wasm": "^0.16.0",
|
|
32
32
|
"arktype": "^2.1.29",
|
|
33
33
|
"bun": "^1.3.9",
|
|
34
|
-
"effect": "^3.19.
|
|
34
|
+
"effect": "^3.19.17",
|
|
35
35
|
"electric-sql": "^0.12.1",
|
|
36
36
|
"expo": "^54.0.33",
|
|
37
37
|
"expo-sqlite": "^16.0.10",
|
package/persisters/index.js
CHANGED
|
@@ -94,21 +94,22 @@ const objValues = (obj) => object.values(obj);
|
|
|
94
94
|
const objSize = (obj) => size(objIds(obj));
|
|
95
95
|
const objIsEmpty = (obj) => isObject(obj) && objSize(obj) == 0;
|
|
96
96
|
|
|
97
|
-
const
|
|
98
|
-
const
|
|
99
|
-
const
|
|
100
|
-
|
|
97
|
+
const map = Map;
|
|
98
|
+
const mapNew = (entries) => new map(entries);
|
|
99
|
+
const mapGet = (map2, key) => map2?.get(key);
|
|
100
|
+
const mapForEach = (map2, cb) =>
|
|
101
|
+
collForEach(map2, (value, key) => cb(key, value));
|
|
101
102
|
const mapMap = (coll, cb) =>
|
|
102
103
|
arrayMap([...(coll?.entries() ?? [])], ([key, value]) => cb(value, key));
|
|
103
|
-
const mapSet = (
|
|
104
|
-
isUndefined(value) ? (collDel(
|
|
105
|
-
const mapEnsure = (
|
|
106
|
-
if (!collHas(
|
|
107
|
-
mapSet(
|
|
104
|
+
const mapSet = (map2, key, value) =>
|
|
105
|
+
isUndefined(value) ? (collDel(map2, key), map2) : map2?.set(key, value);
|
|
106
|
+
const mapEnsure = (map2, key, getDefaultValue, hadExistingValue) => {
|
|
107
|
+
if (!collHas(map2, key)) {
|
|
108
|
+
mapSet(map2, key, getDefaultValue());
|
|
108
109
|
} else {
|
|
109
|
-
hadExistingValue?.(mapGet(
|
|
110
|
+
hadExistingValue?.(mapGet(map2, key));
|
|
110
111
|
}
|
|
111
|
-
return mapGet(
|
|
112
|
+
return mapGet(map2, key);
|
|
112
113
|
};
|
|
113
114
|
const visitTree = (node, path, ensureLeaf, pruneLeaf, p = 0) =>
|
|
114
115
|
ifNotUndefined(
|
|
@@ -320,6 +321,11 @@ const createCustomPersister = (
|
|
|
320
321
|
? store.applyChanges
|
|
321
322
|
: store.setContent)(contentOrChanges);
|
|
322
323
|
};
|
|
324
|
+
const saveAfterMutated = async () => {
|
|
325
|
+
if (isAutoSaving() && store.hadMutated?.()) {
|
|
326
|
+
await save();
|
|
327
|
+
}
|
|
328
|
+
};
|
|
323
329
|
const load = async (initialContent) => {
|
|
324
330
|
/* istanbul ignore else */
|
|
325
331
|
if (status != 2 /* Saving */) {
|
|
@@ -344,6 +350,7 @@ const createCustomPersister = (
|
|
|
344
350
|
},
|
|
345
351
|
);
|
|
346
352
|
setStatus(0 /* Idle */);
|
|
353
|
+
await saveAfterMutated();
|
|
347
354
|
});
|
|
348
355
|
}
|
|
349
356
|
return persister;
|
|
@@ -362,6 +369,7 @@ const createCustomPersister = (
|
|
|
362
369
|
loads++;
|
|
363
370
|
setContentOrChanges(changes ?? content);
|
|
364
371
|
setStatus(0 /* Idle */);
|
|
372
|
+
await saveAfterMutated();
|
|
365
373
|
}
|
|
366
374
|
} else {
|
|
367
375
|
await load();
|
|
@@ -71,17 +71,18 @@ const collIsEmpty = (coll) => isUndefined(coll) || collSize(coll) == 0;
|
|
|
71
71
|
const collForEach = (coll, cb) => coll?.forEach(cb);
|
|
72
72
|
const collDel = (coll, keyOrValue) => coll?.delete(keyOrValue);
|
|
73
73
|
|
|
74
|
-
const
|
|
75
|
-
const
|
|
76
|
-
const
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
74
|
+
const map = Map;
|
|
75
|
+
const mapNew = (entries) => new map(entries);
|
|
76
|
+
const mapGet = (map2, key) => map2?.get(key);
|
|
77
|
+
const mapSet = (map2, key, value) =>
|
|
78
|
+
isUndefined(value) ? (collDel(map2, key), map2) : map2?.set(key, value);
|
|
79
|
+
const mapEnsure = (map2, key, getDefaultValue, hadExistingValue) => {
|
|
80
|
+
if (!collHas(map2, key)) {
|
|
81
|
+
mapSet(map2, key, getDefaultValue());
|
|
81
82
|
} else {
|
|
82
|
-
hadExistingValue?.(mapGet(
|
|
83
|
+
hadExistingValue?.(mapGet(map2, key));
|
|
83
84
|
}
|
|
84
|
-
return mapGet(
|
|
85
|
+
return mapGet(map2, key);
|
|
85
86
|
};
|
|
86
87
|
const visitTree = (node, path, ensureLeaf, pruneLeaf, p = 0) =>
|
|
87
88
|
ifNotUndefined(
|
|
@@ -283,6 +284,11 @@ const createCustomPersister = (
|
|
|
283
284
|
? store.applyChanges
|
|
284
285
|
: store.setContent)(contentOrChanges);
|
|
285
286
|
};
|
|
287
|
+
const saveAfterMutated = async () => {
|
|
288
|
+
if (isAutoSaving() && store.hadMutated?.()) {
|
|
289
|
+
await save();
|
|
290
|
+
}
|
|
291
|
+
};
|
|
286
292
|
const load = async (initialContent) => {
|
|
287
293
|
/* istanbul ignore else */
|
|
288
294
|
if (status != 2 /* Saving */) {
|
|
@@ -307,6 +313,7 @@ const createCustomPersister = (
|
|
|
307
313
|
},
|
|
308
314
|
);
|
|
309
315
|
setStatus(0 /* Idle */);
|
|
316
|
+
await saveAfterMutated();
|
|
310
317
|
});
|
|
311
318
|
}
|
|
312
319
|
return persister;
|
|
@@ -325,6 +332,7 @@ const createCustomPersister = (
|
|
|
325
332
|
loads++;
|
|
326
333
|
setContentOrChanges(changes ?? content);
|
|
327
334
|
setStatus(0 /* Idle */);
|
|
335
|
+
await saveAfterMutated();
|
|
328
336
|
}
|
|
329
337
|
} else {
|
|
330
338
|
await load();
|
|
@@ -71,17 +71,18 @@ const collIsEmpty = (coll) => isUndefined(coll) || collSize(coll) == 0;
|
|
|
71
71
|
const collForEach = (coll, cb) => coll?.forEach(cb);
|
|
72
72
|
const collDel = (coll, keyOrValue) => coll?.delete(keyOrValue);
|
|
73
73
|
|
|
74
|
-
const
|
|
75
|
-
const
|
|
76
|
-
const
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
74
|
+
const map = Map;
|
|
75
|
+
const mapNew = (entries) => new map(entries);
|
|
76
|
+
const mapGet = (map2, key) => map2?.get(key);
|
|
77
|
+
const mapSet = (map2, key, value) =>
|
|
78
|
+
isUndefined(value) ? (collDel(map2, key), map2) : map2?.set(key, value);
|
|
79
|
+
const mapEnsure = (map2, key, getDefaultValue, hadExistingValue) => {
|
|
80
|
+
if (!collHas(map2, key)) {
|
|
81
|
+
mapSet(map2, key, getDefaultValue());
|
|
81
82
|
} else {
|
|
82
|
-
hadExistingValue?.(mapGet(
|
|
83
|
+
hadExistingValue?.(mapGet(map2, key));
|
|
83
84
|
}
|
|
84
|
-
return mapGet(
|
|
85
|
+
return mapGet(map2, key);
|
|
85
86
|
};
|
|
86
87
|
const visitTree = (node, path, ensureLeaf, pruneLeaf, p = 0) =>
|
|
87
88
|
ifNotUndefined(
|
|
@@ -283,6 +284,11 @@ const createCustomPersister = (
|
|
|
283
284
|
? store.applyChanges
|
|
284
285
|
: store.setContent)(contentOrChanges);
|
|
285
286
|
};
|
|
287
|
+
const saveAfterMutated = async () => {
|
|
288
|
+
if (isAutoSaving() && store.hadMutated?.()) {
|
|
289
|
+
await save();
|
|
290
|
+
}
|
|
291
|
+
};
|
|
286
292
|
const load = async (initialContent) => {
|
|
287
293
|
/* istanbul ignore else */
|
|
288
294
|
if (status != 2 /* Saving */) {
|
|
@@ -307,6 +313,7 @@ const createCustomPersister = (
|
|
|
307
313
|
},
|
|
308
314
|
);
|
|
309
315
|
setStatus(0 /* Idle */);
|
|
316
|
+
await saveAfterMutated();
|
|
310
317
|
});
|
|
311
318
|
}
|
|
312
319
|
return persister;
|
|
@@ -325,6 +332,7 @@ const createCustomPersister = (
|
|
|
325
332
|
loads++;
|
|
326
333
|
setContentOrChanges(changes ?? content);
|
|
327
334
|
setStatus(0 /* Idle */);
|
|
335
|
+
await saveAfterMutated();
|
|
328
336
|
}
|
|
329
337
|
} else {
|
|
330
338
|
await load();
|
|
@@ -77,17 +77,18 @@ const collIsEmpty = (coll) => isUndefined(coll) || collSize(coll) == 0;
|
|
|
77
77
|
const collForEach = (coll, cb) => coll?.forEach(cb);
|
|
78
78
|
const collDel = (coll, keyOrValue) => coll?.delete(keyOrValue);
|
|
79
79
|
|
|
80
|
-
const
|
|
81
|
-
const
|
|
82
|
-
const
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
80
|
+
const map = Map;
|
|
81
|
+
const mapNew = (entries) => new map(entries);
|
|
82
|
+
const mapGet = (map2, key) => map2?.get(key);
|
|
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(
|
|
89
|
+
hadExistingValue?.(mapGet(map2, key));
|
|
89
90
|
}
|
|
90
|
-
return mapGet(
|
|
91
|
+
return mapGet(map2, key);
|
|
91
92
|
};
|
|
92
93
|
const visitTree = (node, path, ensureLeaf, pruneLeaf, p = 0) =>
|
|
93
94
|
ifNotUndefined(
|
|
@@ -289,6 +290,11 @@ const createCustomPersister = (
|
|
|
289
290
|
? store.applyChanges
|
|
290
291
|
: store.setContent)(contentOrChanges);
|
|
291
292
|
};
|
|
293
|
+
const saveAfterMutated = async () => {
|
|
294
|
+
if (isAutoSaving() && store.hadMutated?.()) {
|
|
295
|
+
await save();
|
|
296
|
+
}
|
|
297
|
+
};
|
|
292
298
|
const load = async (initialContent) => {
|
|
293
299
|
/* istanbul ignore else */
|
|
294
300
|
if (status != 2 /* Saving */) {
|
|
@@ -313,6 +319,7 @@ const createCustomPersister = (
|
|
|
313
319
|
},
|
|
314
320
|
);
|
|
315
321
|
setStatus(0 /* Idle */);
|
|
322
|
+
await saveAfterMutated();
|
|
316
323
|
});
|
|
317
324
|
}
|
|
318
325
|
return persister;
|
|
@@ -331,6 +338,7 @@ const createCustomPersister = (
|
|
|
331
338
|
loads++;
|
|
332
339
|
setContentOrChanges(changes ?? content);
|
|
333
340
|
setStatus(0 /* Idle */);
|
|
341
|
+
await saveAfterMutated();
|
|
334
342
|
}
|
|
335
343
|
} else {
|
|
336
344
|
await load();
|
|
@@ -77,17 +77,18 @@ const collIsEmpty = (coll) => isUndefined(coll) || collSize(coll) == 0;
|
|
|
77
77
|
const collForEach = (coll, cb) => coll?.forEach(cb);
|
|
78
78
|
const collDel = (coll, keyOrValue) => coll?.delete(keyOrValue);
|
|
79
79
|
|
|
80
|
-
const
|
|
81
|
-
const
|
|
82
|
-
const
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
80
|
+
const map = Map;
|
|
81
|
+
const mapNew = (entries) => new map(entries);
|
|
82
|
+
const mapGet = (map2, key) => map2?.get(key);
|
|
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(
|
|
89
|
+
hadExistingValue?.(mapGet(map2, key));
|
|
89
90
|
}
|
|
90
|
-
return mapGet(
|
|
91
|
+
return mapGet(map2, key);
|
|
91
92
|
};
|
|
92
93
|
const visitTree = (node, path, ensureLeaf, pruneLeaf, p = 0) =>
|
|
93
94
|
ifNotUndefined(
|
|
@@ -289,6 +290,11 @@ const createCustomPersister = (
|
|
|
289
290
|
? store.applyChanges
|
|
290
291
|
: store.setContent)(contentOrChanges);
|
|
291
292
|
};
|
|
293
|
+
const saveAfterMutated = async () => {
|
|
294
|
+
if (isAutoSaving() && store.hadMutated?.()) {
|
|
295
|
+
await save();
|
|
296
|
+
}
|
|
297
|
+
};
|
|
292
298
|
const load = async (initialContent) => {
|
|
293
299
|
/* istanbul ignore else */
|
|
294
300
|
if (status != 2 /* Saving */) {
|
|
@@ -313,6 +319,7 @@ const createCustomPersister = (
|
|
|
313
319
|
},
|
|
314
320
|
);
|
|
315
321
|
setStatus(0 /* Idle */);
|
|
322
|
+
await saveAfterMutated();
|
|
316
323
|
});
|
|
317
324
|
}
|
|
318
325
|
return persister;
|
|
@@ -331,6 +338,7 @@ const createCustomPersister = (
|
|
|
331
338
|
loads++;
|
|
332
339
|
setContentOrChanges(changes ?? content);
|
|
333
340
|
setStatus(0 /* Idle */);
|
|
341
|
+
await saveAfterMutated();
|
|
334
342
|
}
|
|
335
343
|
} else {
|
|
336
344
|
await load();
|