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.
- 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-partykit-server/index.js +1 -1
- package/min/persisters/persister-partykit-server/index.js.gz +0 -0
- package/min/persisters/persister-partykit-server/with-schemas/index.js +1 -1
- package/min/persisters/persister-partykit-server/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 +115 -67
- package/omni/with-schemas/index.js +115 -67
- package/package.json +13 -13
- package/persisters/index.js +29 -12
- package/persisters/persister-automerge/index.js +17 -9
- package/persisters/persister-automerge/with-schemas/index.js +17 -9
- package/persisters/persister-browser/index.js +34 -10
- package/persisters/persister-browser/with-schemas/index.js +34 -10
- package/persisters/persister-cr-sqlite-wasm/index.js +29 -12
- package/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +29 -12
- package/persisters/persister-durable-object-sql-storage/index.js +29 -12
- package/persisters/persister-durable-object-sql-storage/with-schemas/index.js +29 -12
- 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 +29 -12
- package/persisters/persister-electric-sql/with-schemas/index.js +29 -12
- package/persisters/persister-expo-sqlite/index.js +29 -12
- package/persisters/persister-expo-sqlite/with-schemas/index.js +29 -12
- package/persisters/persister-file/index.js +34 -10
- package/persisters/persister-file/with-schemas/index.js +34 -10
- 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 +29 -12
- package/persisters/persister-libsql/with-schemas/index.js +29 -12
- package/persisters/persister-partykit-client/index.js +44 -11
- package/persisters/persister-partykit-client/with-schemas/index.js +44 -11
- package/persisters/persister-partykit-server/index.js +39 -4
- package/persisters/persister-partykit-server/with-schemas/index.js +39 -4
- package/persisters/persister-pglite/index.js +29 -12
- package/persisters/persister-pglite/with-schemas/index.js +29 -12
- package/persisters/persister-postgres/index.js +29 -12
- package/persisters/persister-postgres/with-schemas/index.js +29 -12
- package/persisters/persister-powersync/index.js +29 -12
- package/persisters/persister-powersync/with-schemas/index.js +29 -12
- 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 +29 -12
- package/persisters/persister-react-native-sqlite/with-schemas/index.js +29 -12
- 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 +29 -12
- package/persisters/persister-sqlite-bun/with-schemas/index.js +29 -12
- package/persisters/persister-sqlite-wasm/index.js +29 -12
- package/persisters/persister-sqlite-wasm/with-schemas/index.js +29 -12
- package/persisters/persister-sqlite3/index.js +29 -12
- package/persisters/persister-sqlite3/with-schemas/index.js +29 -12
- package/persisters/persister-yjs/index.js +19 -11
- package/persisters/persister-yjs/with-schemas/index.js +19 -11
- package/persisters/with-schemas/index.js +29 -12
- package/queries/index.js +15 -14
- package/queries/with-schemas/index.js +15 -14
- package/readme.md +10 -2
- package/relationships/index.js +13 -12
- package/relationships/with-schemas/index.js +13 -12
- package/releases.md +1 -1
- 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 +31 -10
- package/synchronizers/synchronizer-ws-client/with-schemas/index.js +31 -10
- package/synchronizers/synchronizer-ws-server/index.js +34 -13
- package/synchronizers/synchronizer-ws-server/with-schemas/index.js +34 -13
- package/synchronizers/synchronizer-ws-server-durable-object/index.js +31 -10
- package/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js +31 -10
- 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 +91 -61
- package/ui-react-inspector/with-schemas/index.js +91 -61
- package/with-schemas/index.js +92 -64
|
@@ -212,7 +212,16 @@ const jsonStringWithMap = (obj) =>
|
|
|
212
212
|
const jsonStringWithUndefined = (obj) =>
|
|
213
213
|
jsonString(obj, (_key, value) => (isUndefined(value) ? UNDEFINED : value));
|
|
214
214
|
const jsonParseWithUndefined = (str) =>
|
|
215
|
-
|
|
215
|
+
// JSON.parse reviver removes properties with undefined values
|
|
216
|
+
replaceUndefinedString(jsonParse(str));
|
|
217
|
+
const replaceUndefinedString = (obj) =>
|
|
218
|
+
obj === UNDEFINED
|
|
219
|
+
? void 0
|
|
220
|
+
: isArray(obj)
|
|
221
|
+
? arrayMap(obj, replaceUndefinedString)
|
|
222
|
+
: isObject(obj)
|
|
223
|
+
? objMap(obj, replaceUndefinedString)
|
|
224
|
+
: obj;
|
|
216
225
|
|
|
217
226
|
const collSizeN = (collSizer) => (coll) =>
|
|
218
227
|
arrayReduce(collValues(coll), (total, coll2) => total + collSizer(coll2), 0);
|
|
@@ -227,31 +236,32 @@ const collClear = (coll) => coll.clear();
|
|
|
227
236
|
const collForEach = (coll, cb) => coll?.forEach(cb);
|
|
228
237
|
const collDel = (coll, keyOrValue) => coll?.delete(keyOrValue);
|
|
229
238
|
|
|
230
|
-
const
|
|
231
|
-
const
|
|
232
|
-
const
|
|
233
|
-
const
|
|
234
|
-
|
|
239
|
+
const map = Map;
|
|
240
|
+
const mapNew = (entries) => new map(entries);
|
|
241
|
+
const mapKeys = (map2) => [...(map2?.keys() ?? [])];
|
|
242
|
+
const mapGet = (map2, key) => map2?.get(key);
|
|
243
|
+
const mapForEach = (map2, cb) =>
|
|
244
|
+
collForEach(map2, (value, key) => cb(key, value));
|
|
235
245
|
const mapMap = (coll, cb) =>
|
|
236
246
|
arrayMap([...(coll?.entries() ?? [])], ([key, value]) => cb(value, key));
|
|
237
|
-
const mapSet = (
|
|
238
|
-
isUndefined(value) ? (collDel(
|
|
239
|
-
const mapEnsure = (
|
|
240
|
-
if (!collHas(
|
|
241
|
-
mapSet(
|
|
247
|
+
const mapSet = (map2, key, value) =>
|
|
248
|
+
isUndefined(value) ? (collDel(map2, key), map2) : map2?.set(key, value);
|
|
249
|
+
const mapEnsure = (map2, key, getDefaultValue, hadExistingValue) => {
|
|
250
|
+
if (!collHas(map2, key)) {
|
|
251
|
+
mapSet(map2, key, getDefaultValue());
|
|
242
252
|
} else {
|
|
243
|
-
hadExistingValue?.(mapGet(
|
|
253
|
+
hadExistingValue?.(mapGet(map2, key));
|
|
244
254
|
}
|
|
245
|
-
return mapGet(
|
|
255
|
+
return mapGet(map2, key);
|
|
246
256
|
};
|
|
247
|
-
const mapMatch = (
|
|
248
|
-
objMap(obj, (value, id) => set(
|
|
249
|
-
mapForEach(
|
|
250
|
-
return
|
|
257
|
+
const mapMatch = (map2, obj, set, del = mapSet) => {
|
|
258
|
+
objMap(obj, (value, id) => set(map2, id, value));
|
|
259
|
+
mapForEach(map2, (id) => (objHas(obj, id) ? 0 : del(map2, id)));
|
|
260
|
+
return map2;
|
|
251
261
|
};
|
|
252
|
-
const mapToObj = (
|
|
262
|
+
const mapToObj = (map2, valueMapper, excludeMapValue, excludeObjValue) => {
|
|
253
263
|
const obj = {};
|
|
254
|
-
collForEach(
|
|
264
|
+
collForEach(map2, (mapValue, id) => {
|
|
255
265
|
if (!excludeMapValue?.(mapValue, id)) {
|
|
256
266
|
const objValue = valueMapper ? valueMapper(mapValue, id) : mapValue;
|
|
257
267
|
if (!excludeObjValue?.(objValue)) {
|
|
@@ -261,27 +271,27 @@ const mapToObj = (map, valueMapper, excludeMapValue, excludeObjValue) => {
|
|
|
261
271
|
});
|
|
262
272
|
return obj;
|
|
263
273
|
};
|
|
264
|
-
const mapToObj2 = (
|
|
274
|
+
const mapToObj2 = (map2, valueMapper, excludeMapValue) =>
|
|
265
275
|
mapToObj(
|
|
266
|
-
|
|
276
|
+
map2,
|
|
267
277
|
(childMap) => mapToObj(childMap, valueMapper, excludeMapValue),
|
|
268
278
|
collIsEmpty,
|
|
269
279
|
objIsEmpty,
|
|
270
280
|
);
|
|
271
|
-
const mapToObj3 = (
|
|
281
|
+
const mapToObj3 = (map2, valueMapper, excludeMapValue) =>
|
|
272
282
|
mapToObj(
|
|
273
|
-
|
|
283
|
+
map2,
|
|
274
284
|
(childMap) => mapToObj2(childMap, valueMapper, excludeMapValue),
|
|
275
285
|
collIsEmpty,
|
|
276
286
|
objIsEmpty,
|
|
277
287
|
);
|
|
278
|
-
const mapClone = (
|
|
279
|
-
const
|
|
280
|
-
collForEach(
|
|
281
|
-
return
|
|
288
|
+
const mapClone = (map2, mapValue) => {
|
|
289
|
+
const map22 = mapNew();
|
|
290
|
+
collForEach(map2, (value, key) => map22.set(key, mapValue?.(value) ?? value));
|
|
291
|
+
return map22;
|
|
282
292
|
};
|
|
283
|
-
const mapClone2 = (
|
|
284
|
-
const mapClone3 = (
|
|
293
|
+
const mapClone2 = (map2) => mapClone(map2, mapClone);
|
|
294
|
+
const mapClone3 = (map2) => mapClone(map2, mapClone2);
|
|
285
295
|
const visitTree = (node, path, ensureLeaf, pruneLeaf, p = 0) =>
|
|
286
296
|
ifNotUndefined(
|
|
287
297
|
(ensureLeaf ? mapEnsure : mapGet)(
|
|
@@ -482,6 +492,11 @@ const createCustomPersister = (
|
|
|
482
492
|
? store.applyChanges
|
|
483
493
|
: store.setContent)(contentOrChanges);
|
|
484
494
|
};
|
|
495
|
+
const saveAfterMutated = async () => {
|
|
496
|
+
if (isAutoSaving() && store.hadMutated?.()) {
|
|
497
|
+
await save();
|
|
498
|
+
}
|
|
499
|
+
};
|
|
485
500
|
const load = async (initialContent) => {
|
|
486
501
|
/* istanbul ignore else */
|
|
487
502
|
if (status != 2 /* Saving */) {
|
|
@@ -506,6 +521,7 @@ const createCustomPersister = (
|
|
|
506
521
|
},
|
|
507
522
|
);
|
|
508
523
|
setStatus(0 /* Idle */);
|
|
524
|
+
await saveAfterMutated();
|
|
509
525
|
});
|
|
510
526
|
}
|
|
511
527
|
return persister;
|
|
@@ -524,6 +540,7 @@ const createCustomPersister = (
|
|
|
524
540
|
loads++;
|
|
525
541
|
setContentOrChanges(changes ?? content);
|
|
526
542
|
setStatus(0 /* Idle */);
|
|
543
|
+
await saveAfterMutated();
|
|
527
544
|
}
|
|
528
545
|
} else {
|
|
529
546
|
await load();
|
|
@@ -723,6 +740,7 @@ const createStore = () => {
|
|
|
723
740
|
let hadValues = false;
|
|
724
741
|
let transactions = 0;
|
|
725
742
|
let internalListeners = [];
|
|
743
|
+
let mutating = 0;
|
|
726
744
|
const changedTableIds = mapNew();
|
|
727
745
|
const changedTableCellIds = mapNew();
|
|
728
746
|
const changedRowCount = mapNew();
|
|
@@ -1127,13 +1145,13 @@ const createStore = () => {
|
|
|
1127
1145
|
cellId,
|
|
1128
1146
|
() => [oldCell, 0],
|
|
1129
1147
|
)[1] = newCell;
|
|
1130
|
-
internalListeners[3]?.(tableId, rowId, cellId, newCell);
|
|
1148
|
+
internalListeners[3]?.(tableId, rowId, cellId, newCell, mutating);
|
|
1131
1149
|
};
|
|
1132
1150
|
const valueIdsChanged = (valueId, addedOrRemoved) =>
|
|
1133
1151
|
idsChanged(changedValueIds, valueId, addedOrRemoved);
|
|
1134
1152
|
const valueChanged = (valueId, oldValue, newValue) => {
|
|
1135
1153
|
mapEnsure(changedValues, valueId, () => [oldValue, 0])[1] = newValue;
|
|
1136
|
-
internalListeners[4]?.(valueId, newValue);
|
|
1154
|
+
internalListeners[4]?.(valueId, newValue, mutating);
|
|
1137
1155
|
};
|
|
1138
1156
|
const cellInvalid = (tableId, rowId, cellId, invalidCell, defaultedCell) => {
|
|
1139
1157
|
arrayPush(
|
|
@@ -1208,14 +1226,11 @@ const createStore = () => {
|
|
|
1208
1226
|
}
|
|
1209
1227
|
};
|
|
1210
1228
|
const callTabularListenersForChanges = (mutator) => {
|
|
1211
|
-
const
|
|
1212
|
-
|
|
1213
|
-
callListeners(hasTablesListeners[mutator], void 0, hasTablesNow);
|
|
1214
|
-
}
|
|
1215
|
-
const emptySortedRowIdListeners = collIsEmpty(
|
|
1229
|
+
const hasHasTablesListeners = !collIsEmpty(hasTablesListeners[mutator]);
|
|
1230
|
+
const hasSortedRowIdListeners = !collIsEmpty(
|
|
1216
1231
|
sortedRowIdsListeners[mutator],
|
|
1217
1232
|
);
|
|
1218
|
-
const
|
|
1233
|
+
const hasIdOrHasListeners = !(
|
|
1219
1234
|
collIsEmpty(cellIdsListeners[mutator]) &&
|
|
1220
1235
|
collIsEmpty(hasCellListeners[mutator]) &&
|
|
1221
1236
|
collIsEmpty(rowIdsListeners[mutator]) &&
|
|
@@ -1223,15 +1238,17 @@ const createStore = () => {
|
|
|
1223
1238
|
collIsEmpty(tableCellIdsListeners[mutator]) &&
|
|
1224
1239
|
collIsEmpty(hasTableCellListeners[mutator]) &&
|
|
1225
1240
|
collIsEmpty(rowCountListeners[mutator]) &&
|
|
1226
|
-
|
|
1241
|
+
!hasSortedRowIdListeners &&
|
|
1227
1242
|
collIsEmpty(tableIdsListeners[mutator]) &&
|
|
1228
|
-
collIsEmpty(hasTableListeners[mutator])
|
|
1229
|
-
|
|
1243
|
+
collIsEmpty(hasTableListeners[mutator])
|
|
1244
|
+
);
|
|
1245
|
+
const hasOtherListeners = !(
|
|
1230
1246
|
collIsEmpty(cellListeners[mutator]) &&
|
|
1231
1247
|
collIsEmpty(rowListeners[mutator]) &&
|
|
1232
1248
|
collIsEmpty(tableListeners[mutator]) &&
|
|
1233
|
-
collIsEmpty(tablesListeners[mutator])
|
|
1234
|
-
|
|
1249
|
+
collIsEmpty(tablesListeners[mutator])
|
|
1250
|
+
);
|
|
1251
|
+
if (hasHasTablesListeners || hasIdOrHasListeners || hasOtherListeners) {
|
|
1235
1252
|
const changes = mutator
|
|
1236
1253
|
? [
|
|
1237
1254
|
mapClone(changedTableIds),
|
|
@@ -1239,7 +1256,9 @@ const createStore = () => {
|
|
|
1239
1256
|
mapClone(changedRowCount),
|
|
1240
1257
|
mapClone2(changedRowIds),
|
|
1241
1258
|
mapClone3(changedCellIds),
|
|
1242
|
-
|
|
1259
|
+
mapClone(changedCells, (map) =>
|
|
1260
|
+
mapClone(map, (map2) => mapClone(map2, pairClone)),
|
|
1261
|
+
),
|
|
1243
1262
|
]
|
|
1244
1263
|
: [
|
|
1245
1264
|
changedTableIds,
|
|
@@ -1249,7 +1268,13 @@ const createStore = () => {
|
|
|
1249
1268
|
changedCellIds,
|
|
1250
1269
|
changedCells,
|
|
1251
1270
|
];
|
|
1252
|
-
if (
|
|
1271
|
+
if (hasHasTablesListeners) {
|
|
1272
|
+
const hasTablesNow = hasTables();
|
|
1273
|
+
if (hasTablesNow != hadTables) {
|
|
1274
|
+
callListeners(hasTablesListeners[mutator], void 0, hasTablesNow);
|
|
1275
|
+
}
|
|
1276
|
+
}
|
|
1277
|
+
if (hasIdOrHasListeners) {
|
|
1253
1278
|
callIdsAndHasListenersIfChanged(
|
|
1254
1279
|
changes[0],
|
|
1255
1280
|
tableIdsListeners[mutator],
|
|
@@ -1281,13 +1306,13 @@ const createStore = () => {
|
|
|
1281
1306
|
hasRowListeners[mutator],
|
|
1282
1307
|
[tableId],
|
|
1283
1308
|
) &&
|
|
1284
|
-
|
|
1309
|
+
hasSortedRowIdListeners
|
|
1285
1310
|
) {
|
|
1286
1311
|
callListeners(sortedRowIdsListeners[mutator], [tableId, null]);
|
|
1287
1312
|
setAdd(calledSortableTableIds, tableId);
|
|
1288
1313
|
}
|
|
1289
1314
|
});
|
|
1290
|
-
if (
|
|
1315
|
+
if (hasSortedRowIdListeners) {
|
|
1291
1316
|
collForEach(changes[5], (rows, tableId) => {
|
|
1292
1317
|
if (!collHas(calledSortableTableIds, tableId)) {
|
|
1293
1318
|
const sortableCellIds = setNew();
|
|
@@ -1318,7 +1343,7 @@ const createStore = () => {
|
|
|
1318
1343
|
),
|
|
1319
1344
|
);
|
|
1320
1345
|
}
|
|
1321
|
-
if (
|
|
1346
|
+
if (hasOtherListeners) {
|
|
1322
1347
|
let tablesChanged;
|
|
1323
1348
|
collForEach(changes[5], (rows, tableId) => {
|
|
1324
1349
|
let tableChanged;
|
|
@@ -1355,28 +1380,31 @@ const createStore = () => {
|
|
|
1355
1380
|
}
|
|
1356
1381
|
};
|
|
1357
1382
|
const callValuesListenersForChanges = (mutator) => {
|
|
1358
|
-
const
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
const
|
|
1363
|
-
collIsEmpty(
|
|
1364
|
-
collIsEmpty(
|
|
1365
|
-
|
|
1366
|
-
collIsEmpty(valueListeners[mutator]) &&
|
|
1367
|
-
collIsEmpty(valuesListeners[mutator]);
|
|
1368
|
-
if (!emptyIdAndHasListeners || !emptyOtherListeners) {
|
|
1383
|
+
const hasHasValuesListeners = !collIsEmpty(hasValuesListeners[mutator]);
|
|
1384
|
+
const hasIdOrHasListeners =
|
|
1385
|
+
!collIsEmpty(valueIdsListeners[mutator]) ||
|
|
1386
|
+
!collIsEmpty(hasValueListeners[mutator]);
|
|
1387
|
+
const hasOtherListeners =
|
|
1388
|
+
!collIsEmpty(valueListeners[mutator]) ||
|
|
1389
|
+
!collIsEmpty(valuesListeners[mutator]);
|
|
1390
|
+
if (hasHasValuesListeners || hasIdOrHasListeners || hasOtherListeners) {
|
|
1369
1391
|
const changes = mutator
|
|
1370
|
-
? [mapClone(changedValueIds), mapClone(changedValues)]
|
|
1392
|
+
? [mapClone(changedValueIds), mapClone(changedValues, pairClone)]
|
|
1371
1393
|
: [changedValueIds, changedValues];
|
|
1372
|
-
if (
|
|
1394
|
+
if (hasHasValuesListeners) {
|
|
1395
|
+
const hasValuesNow = hasValues();
|
|
1396
|
+
if (hasValuesNow != hadValues) {
|
|
1397
|
+
callListeners(hasValuesListeners[mutator], void 0, hasValuesNow);
|
|
1398
|
+
}
|
|
1399
|
+
}
|
|
1400
|
+
if (hasIdOrHasListeners) {
|
|
1373
1401
|
callIdsAndHasListenersIfChanged(
|
|
1374
1402
|
changes[0],
|
|
1375
1403
|
valueIdsListeners[mutator],
|
|
1376
1404
|
hasValueListeners[mutator],
|
|
1377
1405
|
);
|
|
1378
1406
|
}
|
|
1379
|
-
if (
|
|
1407
|
+
if (hasOtherListeners) {
|
|
1380
1408
|
let valuesChanged;
|
|
1381
1409
|
collForEach(changes[1], ([oldValue, newValue], valueId) => {
|
|
1382
1410
|
if (newValue !== oldValue) {
|
|
@@ -1773,6 +1801,7 @@ const createStore = () => {
|
|
|
1773
1801
|
transactions--;
|
|
1774
1802
|
if (transactions == 0) {
|
|
1775
1803
|
transactions = 1;
|
|
1804
|
+
mutating = 1;
|
|
1776
1805
|
callInvalidCellListeners(1);
|
|
1777
1806
|
if (!collIsEmpty(changedCells)) {
|
|
1778
1807
|
callTabularListenersForChanges(1);
|
|
@@ -1781,6 +1810,7 @@ const createStore = () => {
|
|
|
1781
1810
|
if (!collIsEmpty(changedValues)) {
|
|
1782
1811
|
callValuesListenersForChanges(1);
|
|
1783
1812
|
}
|
|
1813
|
+
mutating = 0;
|
|
1784
1814
|
if (doRollback?.(store)) {
|
|
1785
1815
|
collForEach(changedCells, (table, tableId) =>
|
|
1786
1816
|
collForEach(table, (row, rowId) =>
|
package/with-schemas/index.js
CHANGED
|
@@ -208,31 +208,32 @@ const objValidate = (obj, validateChild, onInvalidObj, emptyIsValid = 0) => {
|
|
|
208
208
|
return emptyIsValid ? true : !objIsEmpty(obj);
|
|
209
209
|
};
|
|
210
210
|
|
|
211
|
-
const
|
|
212
|
-
const
|
|
213
|
-
const
|
|
214
|
-
const
|
|
215
|
-
|
|
211
|
+
const map = Map;
|
|
212
|
+
const mapNew = (entries) => new map(entries);
|
|
213
|
+
const mapKeys = (map2) => [...(map2?.keys() ?? [])];
|
|
214
|
+
const mapGet = (map2, key) => map2?.get(key);
|
|
215
|
+
const mapForEach = (map2, cb) =>
|
|
216
|
+
collForEach(map2, (value, key) => cb(key, value));
|
|
216
217
|
const mapMap = (coll, cb) =>
|
|
217
218
|
arrayMap([...(coll?.entries() ?? [])], ([key, value]) => cb(value, key));
|
|
218
|
-
const mapSet = (
|
|
219
|
-
isUndefined(value) ? (collDel(
|
|
220
|
-
const mapEnsure = (
|
|
221
|
-
if (!collHas(
|
|
222
|
-
mapSet(
|
|
219
|
+
const mapSet = (map2, key, value) =>
|
|
220
|
+
isUndefined(value) ? (collDel(map2, key), map2) : map2?.set(key, value);
|
|
221
|
+
const mapEnsure = (map2, key, getDefaultValue, hadExistingValue) => {
|
|
222
|
+
if (!collHas(map2, key)) {
|
|
223
|
+
mapSet(map2, key, getDefaultValue());
|
|
223
224
|
} else {
|
|
224
|
-
hadExistingValue?.(mapGet(
|
|
225
|
+
hadExistingValue?.(mapGet(map2, key));
|
|
225
226
|
}
|
|
226
|
-
return mapGet(
|
|
227
|
+
return mapGet(map2, key);
|
|
227
228
|
};
|
|
228
|
-
const mapMatch = (
|
|
229
|
-
objMap(obj, (value, id) => set(
|
|
230
|
-
mapForEach(
|
|
231
|
-
return
|
|
229
|
+
const mapMatch = (map2, obj, set, del = mapSet) => {
|
|
230
|
+
objMap(obj, (value, id) => set(map2, id, value));
|
|
231
|
+
mapForEach(map2, (id) => (objHas(obj, id) ? 0 : del(map2, id)));
|
|
232
|
+
return map2;
|
|
232
233
|
};
|
|
233
|
-
const mapToObj = (
|
|
234
|
+
const mapToObj = (map2, valueMapper, excludeMapValue, excludeObjValue) => {
|
|
234
235
|
const obj = {};
|
|
235
|
-
collForEach(
|
|
236
|
+
collForEach(map2, (mapValue, id) => {
|
|
236
237
|
if (!excludeMapValue?.(mapValue, id)) {
|
|
237
238
|
const objValue = valueMapper ? valueMapper(mapValue, id) : mapValue;
|
|
238
239
|
if (!excludeObjValue?.(objValue)) {
|
|
@@ -242,27 +243,27 @@ const mapToObj = (map, valueMapper, excludeMapValue, excludeObjValue) => {
|
|
|
242
243
|
});
|
|
243
244
|
return obj;
|
|
244
245
|
};
|
|
245
|
-
const mapToObj2 = (
|
|
246
|
+
const mapToObj2 = (map2, valueMapper, excludeMapValue) =>
|
|
246
247
|
mapToObj(
|
|
247
|
-
|
|
248
|
+
map2,
|
|
248
249
|
(childMap) => mapToObj(childMap, valueMapper, excludeMapValue),
|
|
249
250
|
collIsEmpty,
|
|
250
251
|
objIsEmpty,
|
|
251
252
|
);
|
|
252
|
-
const mapToObj3 = (
|
|
253
|
+
const mapToObj3 = (map2, valueMapper, excludeMapValue) =>
|
|
253
254
|
mapToObj(
|
|
254
|
-
|
|
255
|
+
map2,
|
|
255
256
|
(childMap) => mapToObj2(childMap, valueMapper, excludeMapValue),
|
|
256
257
|
collIsEmpty,
|
|
257
258
|
objIsEmpty,
|
|
258
259
|
);
|
|
259
|
-
const mapClone = (
|
|
260
|
-
const
|
|
261
|
-
collForEach(
|
|
262
|
-
return
|
|
260
|
+
const mapClone = (map2, mapValue) => {
|
|
261
|
+
const map22 = mapNew();
|
|
262
|
+
collForEach(map2, (value, key) => map22.set(key, mapValue?.(value) ?? value));
|
|
263
|
+
return map22;
|
|
263
264
|
};
|
|
264
|
-
const mapClone2 = (
|
|
265
|
-
const mapClone3 = (
|
|
265
|
+
const mapClone2 = (map2) => mapClone(map2, mapClone);
|
|
266
|
+
const mapClone3 = (map2) => mapClone(map2, mapClone2);
|
|
266
267
|
const visitTree = (node, path, ensureLeaf, pruneLeaf, p = 0) =>
|
|
267
268
|
ifNotUndefined(
|
|
268
269
|
(ensureLeaf ? mapEnsure : mapGet)(
|
|
@@ -1218,6 +1219,7 @@ const createStore = () => {
|
|
|
1218
1219
|
let hadValues = false;
|
|
1219
1220
|
let transactions = 0;
|
|
1220
1221
|
let internalListeners = [];
|
|
1222
|
+
let mutating = 0;
|
|
1221
1223
|
const changedTableIds = mapNew();
|
|
1222
1224
|
const changedTableCellIds = mapNew();
|
|
1223
1225
|
const changedRowCount = mapNew();
|
|
@@ -1622,13 +1624,13 @@ const createStore = () => {
|
|
|
1622
1624
|
cellId,
|
|
1623
1625
|
() => [oldCell, 0],
|
|
1624
1626
|
)[1] = newCell;
|
|
1625
|
-
internalListeners[3]?.(tableId, rowId, cellId, newCell);
|
|
1627
|
+
internalListeners[3]?.(tableId, rowId, cellId, newCell, mutating);
|
|
1626
1628
|
};
|
|
1627
1629
|
const valueIdsChanged = (valueId, addedOrRemoved) =>
|
|
1628
1630
|
idsChanged(changedValueIds, valueId, addedOrRemoved);
|
|
1629
1631
|
const valueChanged = (valueId, oldValue, newValue) => {
|
|
1630
1632
|
mapEnsure(changedValues, valueId, () => [oldValue, 0])[1] = newValue;
|
|
1631
|
-
internalListeners[4]?.(valueId, newValue);
|
|
1633
|
+
internalListeners[4]?.(valueId, newValue, mutating);
|
|
1632
1634
|
};
|
|
1633
1635
|
const cellInvalid = (tableId, rowId, cellId, invalidCell, defaultedCell) => {
|
|
1634
1636
|
arrayPush(
|
|
@@ -1703,14 +1705,11 @@ const createStore = () => {
|
|
|
1703
1705
|
}
|
|
1704
1706
|
};
|
|
1705
1707
|
const callTabularListenersForChanges = (mutator) => {
|
|
1706
|
-
const
|
|
1707
|
-
|
|
1708
|
-
callListeners(hasTablesListeners[mutator], void 0, hasTablesNow);
|
|
1709
|
-
}
|
|
1710
|
-
const emptySortedRowIdListeners = collIsEmpty(
|
|
1708
|
+
const hasHasTablesListeners = !collIsEmpty(hasTablesListeners[mutator]);
|
|
1709
|
+
const hasSortedRowIdListeners = !collIsEmpty(
|
|
1711
1710
|
sortedRowIdsListeners[mutator],
|
|
1712
1711
|
);
|
|
1713
|
-
const
|
|
1712
|
+
const hasIdOrHasListeners = !(
|
|
1714
1713
|
collIsEmpty(cellIdsListeners[mutator]) &&
|
|
1715
1714
|
collIsEmpty(hasCellListeners[mutator]) &&
|
|
1716
1715
|
collIsEmpty(rowIdsListeners[mutator]) &&
|
|
@@ -1718,15 +1717,17 @@ const createStore = () => {
|
|
|
1718
1717
|
collIsEmpty(tableCellIdsListeners[mutator]) &&
|
|
1719
1718
|
collIsEmpty(hasTableCellListeners[mutator]) &&
|
|
1720
1719
|
collIsEmpty(rowCountListeners[mutator]) &&
|
|
1721
|
-
|
|
1720
|
+
!hasSortedRowIdListeners &&
|
|
1722
1721
|
collIsEmpty(tableIdsListeners[mutator]) &&
|
|
1723
|
-
collIsEmpty(hasTableListeners[mutator])
|
|
1724
|
-
|
|
1722
|
+
collIsEmpty(hasTableListeners[mutator])
|
|
1723
|
+
);
|
|
1724
|
+
const hasOtherListeners = !(
|
|
1725
1725
|
collIsEmpty(cellListeners[mutator]) &&
|
|
1726
1726
|
collIsEmpty(rowListeners[mutator]) &&
|
|
1727
1727
|
collIsEmpty(tableListeners[mutator]) &&
|
|
1728
|
-
collIsEmpty(tablesListeners[mutator])
|
|
1729
|
-
|
|
1728
|
+
collIsEmpty(tablesListeners[mutator])
|
|
1729
|
+
);
|
|
1730
|
+
if (hasHasTablesListeners || hasIdOrHasListeners || hasOtherListeners) {
|
|
1730
1731
|
const changes = mutator
|
|
1731
1732
|
? [
|
|
1732
1733
|
mapClone(changedTableIds),
|
|
@@ -1734,7 +1735,9 @@ const createStore = () => {
|
|
|
1734
1735
|
mapClone(changedRowCount),
|
|
1735
1736
|
mapClone2(changedRowIds),
|
|
1736
1737
|
mapClone3(changedCellIds),
|
|
1737
|
-
|
|
1738
|
+
mapClone(changedCells, (map) =>
|
|
1739
|
+
mapClone(map, (map2) => mapClone(map2, pairClone)),
|
|
1740
|
+
),
|
|
1738
1741
|
]
|
|
1739
1742
|
: [
|
|
1740
1743
|
changedTableIds,
|
|
@@ -1744,7 +1747,13 @@ const createStore = () => {
|
|
|
1744
1747
|
changedCellIds,
|
|
1745
1748
|
changedCells,
|
|
1746
1749
|
];
|
|
1747
|
-
if (
|
|
1750
|
+
if (hasHasTablesListeners) {
|
|
1751
|
+
const hasTablesNow = hasTables();
|
|
1752
|
+
if (hasTablesNow != hadTables) {
|
|
1753
|
+
callListeners(hasTablesListeners[mutator], void 0, hasTablesNow);
|
|
1754
|
+
}
|
|
1755
|
+
}
|
|
1756
|
+
if (hasIdOrHasListeners) {
|
|
1748
1757
|
callIdsAndHasListenersIfChanged(
|
|
1749
1758
|
changes[0],
|
|
1750
1759
|
tableIdsListeners[mutator],
|
|
@@ -1776,13 +1785,13 @@ const createStore = () => {
|
|
|
1776
1785
|
hasRowListeners[mutator],
|
|
1777
1786
|
[tableId],
|
|
1778
1787
|
) &&
|
|
1779
|
-
|
|
1788
|
+
hasSortedRowIdListeners
|
|
1780
1789
|
) {
|
|
1781
1790
|
callListeners(sortedRowIdsListeners[mutator], [tableId, null]);
|
|
1782
1791
|
setAdd(calledSortableTableIds, tableId);
|
|
1783
1792
|
}
|
|
1784
1793
|
});
|
|
1785
|
-
if (
|
|
1794
|
+
if (hasSortedRowIdListeners) {
|
|
1786
1795
|
collForEach(changes[5], (rows, tableId) => {
|
|
1787
1796
|
if (!collHas(calledSortableTableIds, tableId)) {
|
|
1788
1797
|
const sortableCellIds = setNew();
|
|
@@ -1813,7 +1822,7 @@ const createStore = () => {
|
|
|
1813
1822
|
),
|
|
1814
1823
|
);
|
|
1815
1824
|
}
|
|
1816
|
-
if (
|
|
1825
|
+
if (hasOtherListeners) {
|
|
1817
1826
|
let tablesChanged;
|
|
1818
1827
|
collForEach(changes[5], (rows, tableId) => {
|
|
1819
1828
|
let tableChanged;
|
|
@@ -1850,28 +1859,31 @@ const createStore = () => {
|
|
|
1850
1859
|
}
|
|
1851
1860
|
};
|
|
1852
1861
|
const callValuesListenersForChanges = (mutator) => {
|
|
1853
|
-
const
|
|
1854
|
-
|
|
1855
|
-
|
|
1856
|
-
|
|
1857
|
-
const
|
|
1858
|
-
collIsEmpty(
|
|
1859
|
-
collIsEmpty(
|
|
1860
|
-
|
|
1861
|
-
collIsEmpty(valueListeners[mutator]) &&
|
|
1862
|
-
collIsEmpty(valuesListeners[mutator]);
|
|
1863
|
-
if (!emptyIdAndHasListeners || !emptyOtherListeners) {
|
|
1862
|
+
const hasHasValuesListeners = !collIsEmpty(hasValuesListeners[mutator]);
|
|
1863
|
+
const hasIdOrHasListeners =
|
|
1864
|
+
!collIsEmpty(valueIdsListeners[mutator]) ||
|
|
1865
|
+
!collIsEmpty(hasValueListeners[mutator]);
|
|
1866
|
+
const hasOtherListeners =
|
|
1867
|
+
!collIsEmpty(valueListeners[mutator]) ||
|
|
1868
|
+
!collIsEmpty(valuesListeners[mutator]);
|
|
1869
|
+
if (hasHasValuesListeners || hasIdOrHasListeners || hasOtherListeners) {
|
|
1864
1870
|
const changes = mutator
|
|
1865
|
-
? [mapClone(changedValueIds), mapClone(changedValues)]
|
|
1871
|
+
? [mapClone(changedValueIds), mapClone(changedValues, pairClone)]
|
|
1866
1872
|
: [changedValueIds, changedValues];
|
|
1867
|
-
if (
|
|
1873
|
+
if (hasHasValuesListeners) {
|
|
1874
|
+
const hasValuesNow = hasValues();
|
|
1875
|
+
if (hasValuesNow != hadValues) {
|
|
1876
|
+
callListeners(hasValuesListeners[mutator], void 0, hasValuesNow);
|
|
1877
|
+
}
|
|
1878
|
+
}
|
|
1879
|
+
if (hasIdOrHasListeners) {
|
|
1868
1880
|
callIdsAndHasListenersIfChanged(
|
|
1869
1881
|
changes[0],
|
|
1870
1882
|
valueIdsListeners[mutator],
|
|
1871
1883
|
hasValueListeners[mutator],
|
|
1872
1884
|
);
|
|
1873
1885
|
}
|
|
1874
|
-
if (
|
|
1886
|
+
if (hasOtherListeners) {
|
|
1875
1887
|
let valuesChanged;
|
|
1876
1888
|
collForEach(changes[1], ([oldValue, newValue], valueId) => {
|
|
1877
1889
|
if (newValue !== oldValue) {
|
|
@@ -2268,6 +2280,7 @@ const createStore = () => {
|
|
|
2268
2280
|
transactions--;
|
|
2269
2281
|
if (transactions == 0) {
|
|
2270
2282
|
transactions = 1;
|
|
2283
|
+
mutating = 1;
|
|
2271
2284
|
callInvalidCellListeners(1);
|
|
2272
2285
|
if (!collIsEmpty(changedCells)) {
|
|
2273
2286
|
callTabularListenersForChanges(1);
|
|
@@ -2276,6 +2289,7 @@ const createStore = () => {
|
|
|
2276
2289
|
if (!collIsEmpty(changedValues)) {
|
|
2277
2290
|
callValuesListenersForChanges(1);
|
|
2278
2291
|
}
|
|
2292
|
+
mutating = 0;
|
|
2279
2293
|
if (doRollback?.(store)) {
|
|
2280
2294
|
collForEach(changedCells, (table, tableId) =>
|
|
2281
2295
|
collForEach(table, (row, rowId) =>
|
|
@@ -2642,6 +2656,7 @@ const createMergeableStore = (uniqueId, getNow) => {
|
|
|
2642
2656
|
let listeningToRawStoreChanges = 1;
|
|
2643
2657
|
let contentStampMap = newContentStampMap();
|
|
2644
2658
|
let defaultingContent = 0;
|
|
2659
|
+
let mutated = 0;
|
|
2645
2660
|
const touchedCells = mapNew();
|
|
2646
2661
|
const touchedValues = setNew();
|
|
2647
2662
|
const [getNextHlc, seenHlc] = getHlcFunctions(uniqueId, getNow);
|
|
@@ -2768,12 +2783,15 @@ const createMergeableStore = (uniqueId, getNow) => {
|
|
|
2768
2783
|
collClear(touchedCells);
|
|
2769
2784
|
collClear(touchedValues);
|
|
2770
2785
|
};
|
|
2771
|
-
const cellChanged = (tableId, rowId, cellId, newCell) => {
|
|
2786
|
+
const cellChanged = (tableId, rowId, cellId, newCell, mutating) => {
|
|
2772
2787
|
setAdd(
|
|
2773
2788
|
mapEnsure(mapEnsure(touchedCells, tableId, mapNew), rowId, setNew),
|
|
2774
2789
|
cellId,
|
|
2775
2790
|
);
|
|
2776
|
-
if (listeningToRawStoreChanges) {
|
|
2791
|
+
if (listeningToRawStoreChanges || mutating) {
|
|
2792
|
+
if (mutating) {
|
|
2793
|
+
mutated = 1;
|
|
2794
|
+
}
|
|
2777
2795
|
mergeContentOrChanges([
|
|
2778
2796
|
[
|
|
2779
2797
|
{
|
|
@@ -2796,9 +2814,12 @@ const createMergeableStore = (uniqueId, getNow) => {
|
|
|
2796
2814
|
]);
|
|
2797
2815
|
}
|
|
2798
2816
|
};
|
|
2799
|
-
const valueChanged = (valueId, newValue) => {
|
|
2817
|
+
const valueChanged = (valueId, newValue, mutating) => {
|
|
2800
2818
|
setAdd(touchedValues, valueId);
|
|
2801
|
-
if (listeningToRawStoreChanges) {
|
|
2819
|
+
if (listeningToRawStoreChanges || mutating) {
|
|
2820
|
+
if (mutating) {
|
|
2821
|
+
mutated = 1;
|
|
2822
|
+
}
|
|
2802
2823
|
mergeContentOrChanges([
|
|
2803
2824
|
[{}],
|
|
2804
2825
|
[
|
|
@@ -3016,6 +3037,11 @@ const createMergeableStore = (uniqueId, getNow) => {
|
|
|
3016
3037
|
mergeableStore2.applyMergeableChanges(mergeableChanges);
|
|
3017
3038
|
return applyMergeableChanges(mergeableChanges2);
|
|
3018
3039
|
};
|
|
3040
|
+
const hadMutated = () => {
|
|
3041
|
+
const result = mutated;
|
|
3042
|
+
mutated = 0;
|
|
3043
|
+
return result;
|
|
3044
|
+
};
|
|
3019
3045
|
const mergeableStore = {
|
|
3020
3046
|
getMergeableContent,
|
|
3021
3047
|
getMergeableContentHashes,
|
|
@@ -3032,6 +3058,8 @@ const createMergeableStore = (uniqueId, getNow) => {
|
|
|
3032
3058
|
getTransactionMergeableChanges,
|
|
3033
3059
|
applyMergeableChanges,
|
|
3034
3060
|
merge,
|
|
3061
|
+
// only used internally by other modules
|
|
3062
|
+
hadMutated,
|
|
3035
3063
|
};
|
|
3036
3064
|
store.setInternalListeners(
|
|
3037
3065
|
preStartTransaction,
|