tinybase 8.0.0-beta.0 → 8.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/@types/index.d.ts +1 -0
- package/@types/mergeable-store/with-schemas/index.d.ts +1 -1
- package/@types/middleware/index.d.ts +1064 -0
- package/@types/middleware/with-schemas/index.d.ts +1355 -0
- package/@types/omni/index.d.ts +1 -0
- package/@types/omni/with-schemas/index.d.ts +1 -0
- package/@types/store/index.d.ts +0 -1
- package/@types/with-schemas/index.d.ts +1 -0
- package/agents.md +33 -11
- package/checkpoints/index.js +20 -20
- package/checkpoints/with-schemas/index.js +20 -20
- package/common/index.js +3 -2
- package/common/with-schemas/index.js +3 -2
- package/index.js +574 -215
- package/indexes/index.js +13 -12
- package/indexes/with-schemas/index.js +13 -12
- package/mergeable-store/index.js +461 -197
- package/mergeable-store/with-schemas/index.js +461 -197
- package/metrics/index.js +13 -12
- package/metrics/with-schemas/index.js +13 -12
- package/middleware/index.js +130 -0
- package/middleware/with-schemas/index.js +130 -0
- 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/middleware/index.js +1 -0
- package/min/middleware/index.js.gz +0 -0
- package/min/middleware/with-schemas/index.js +1 -0
- package/min/middleware/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 +610 -232
- package/omni/with-schemas/index.js +610 -232
- package/package.json +55 -19
- 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 +24 -17
- package/persisters/persister-durable-object-storage/with-schemas/index.js +24 -17
- 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 +16 -20
- package/queries/with-schemas/index.js +16 -20
- package/readme.md +21 -13
- package/relationships/index.js +13 -12
- package/relationships/with-schemas/index.js +13 -12
- package/releases.md +41 -41
- package/store/index.js +442 -192
- package/store/with-schemas/index.js +442 -192
- 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 +438 -193
- package/ui-react-inspector/with-schemas/index.js +438 -193
- package/with-schemas/index.js +574 -215
|
@@ -2,6 +2,7 @@ const getTypeOf = (thing) => typeof thing;
|
|
|
2
2
|
const EMPTY_STRING = '';
|
|
3
3
|
const STRING = getTypeOf(EMPTY_STRING);
|
|
4
4
|
const MESSAGE = 'message';
|
|
5
|
+
const UNDEFINED = '\uFFFC';
|
|
5
6
|
const strStartsWith = (str, prefix) => str.startsWith(prefix);
|
|
6
7
|
|
|
7
8
|
const getIfNotFunction = (predicate) => (value, then, otherwise) =>
|
|
@@ -30,12 +31,14 @@ const tryCatch = async (action, then1, then2) => {
|
|
|
30
31
|
};
|
|
31
32
|
|
|
32
33
|
const arrayForEach = (array, cb) => array.forEach(cb);
|
|
34
|
+
const arrayMap = (array, cb) => array.map(cb);
|
|
33
35
|
const arrayClear = (array, to) => array.splice(0, to);
|
|
34
36
|
const arrayPush = (array, ...values) => array.push(...values);
|
|
35
37
|
const arrayShift = (array) => array.shift();
|
|
36
38
|
|
|
37
39
|
const object = Object;
|
|
38
40
|
const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
|
|
41
|
+
const objEntries = object.entries;
|
|
39
42
|
const isObject = (obj) =>
|
|
40
43
|
!isNullish(obj) &&
|
|
41
44
|
ifNotNullish(
|
|
@@ -49,6 +52,11 @@ const isObject = (obj) =>
|
|
|
49
52
|
);
|
|
50
53
|
const objIds = object.keys;
|
|
51
54
|
const objFreeze = object.freeze;
|
|
55
|
+
const objNew = (entries = []) => object.fromEntries(entries);
|
|
56
|
+
const objToArray = (obj, cb) =>
|
|
57
|
+
arrayMap(objEntries(obj), ([id, value]) => cb(value, id));
|
|
58
|
+
const objMap = (obj, cb) =>
|
|
59
|
+
objNew(objToArray(obj, (value, id) => [id, cb(value, id)]));
|
|
52
60
|
const objSize = (obj) => size(objIds(obj));
|
|
53
61
|
const objIsEmpty = (obj) => isObject(obj) && objSize(obj) == 0;
|
|
54
62
|
|
|
@@ -58,6 +66,19 @@ const jsonStringWithMap = (obj) =>
|
|
|
58
66
|
jsonString(obj, (_key, value) =>
|
|
59
67
|
isInstanceOf(value, Map) ? object.fromEntries([...value]) : value,
|
|
60
68
|
);
|
|
69
|
+
const jsonStringWithUndefined = (obj) =>
|
|
70
|
+
jsonString(obj, (_key, value) => (isUndefined(value) ? UNDEFINED : value));
|
|
71
|
+
const jsonParseWithUndefined = (str) =>
|
|
72
|
+
// JSON.parse reviver removes properties with undefined values
|
|
73
|
+
replaceUndefinedString(jsonParse(str));
|
|
74
|
+
const replaceUndefinedString = (obj) =>
|
|
75
|
+
obj === UNDEFINED
|
|
76
|
+
? void 0
|
|
77
|
+
: isArray(obj)
|
|
78
|
+
? arrayMap(obj, replaceUndefinedString)
|
|
79
|
+
: isObject(obj)
|
|
80
|
+
? objMap(obj, replaceUndefinedString)
|
|
81
|
+
: obj;
|
|
61
82
|
|
|
62
83
|
const collSize = (coll) => coll?.size ?? 0;
|
|
63
84
|
const collHas = (coll, keyOrValue) => coll?.has(keyOrValue) ?? false;
|
|
@@ -65,17 +86,18 @@ const collIsEmpty = (coll) => isUndefined(coll) || collSize(coll) == 0;
|
|
|
65
86
|
const collForEach = (coll, cb) => coll?.forEach(cb);
|
|
66
87
|
const collDel = (coll, keyOrValue) => coll?.delete(keyOrValue);
|
|
67
88
|
|
|
68
|
-
const
|
|
69
|
-
const
|
|
70
|
-
const
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
89
|
+
const map = Map;
|
|
90
|
+
const mapNew = (entries) => new map(entries);
|
|
91
|
+
const mapGet = (map2, key) => map2?.get(key);
|
|
92
|
+
const mapSet = (map2, key, value) =>
|
|
93
|
+
isUndefined(value) ? (collDel(map2, key), map2) : map2?.set(key, value);
|
|
94
|
+
const mapEnsure = (map2, key, getDefaultValue, hadExistingValue) => {
|
|
95
|
+
if (!collHas(map2, key)) {
|
|
96
|
+
mapSet(map2, key, getDefaultValue());
|
|
75
97
|
} else {
|
|
76
|
-
hadExistingValue?.(mapGet(
|
|
98
|
+
hadExistingValue?.(mapGet(map2, key));
|
|
77
99
|
}
|
|
78
|
-
return mapGet(
|
|
100
|
+
return mapGet(map2, key);
|
|
79
101
|
};
|
|
80
102
|
const visitTree = (node, path, ensureLeaf, pruneLeaf, p = 0) =>
|
|
81
103
|
ifNotUndefined(
|
|
@@ -277,6 +299,11 @@ const createCustomPersister = (
|
|
|
277
299
|
? store.applyChanges
|
|
278
300
|
: store.setContent)(contentOrChanges);
|
|
279
301
|
};
|
|
302
|
+
const saveAfterMutated = async () => {
|
|
303
|
+
if (isAutoSaving() && store.hadMutated?.()) {
|
|
304
|
+
await save();
|
|
305
|
+
}
|
|
306
|
+
};
|
|
280
307
|
const load = async (initialContent) => {
|
|
281
308
|
/* istanbul ignore else */
|
|
282
309
|
if (status != 2 /* Saving */) {
|
|
@@ -301,6 +328,7 @@ const createCustomPersister = (
|
|
|
301
328
|
},
|
|
302
329
|
);
|
|
303
330
|
setStatus(0 /* Idle */);
|
|
331
|
+
await saveAfterMutated();
|
|
304
332
|
});
|
|
305
333
|
}
|
|
306
334
|
return persister;
|
|
@@ -319,6 +347,7 @@ const createCustomPersister = (
|
|
|
319
347
|
loads++;
|
|
320
348
|
setContentOrChanges(changes ?? content);
|
|
321
349
|
setStatus(0 /* Idle */);
|
|
350
|
+
await saveAfterMutated();
|
|
322
351
|
}
|
|
323
352
|
} else {
|
|
324
353
|
await load();
|
|
@@ -435,13 +464,17 @@ const SET_CHANGES = 's';
|
|
|
435
464
|
const STORE_PATH = '/store';
|
|
436
465
|
const PUT = 'PUT';
|
|
437
466
|
const construct = (prefix, type, payload) =>
|
|
438
|
-
prefix +
|
|
467
|
+
prefix +
|
|
468
|
+
type +
|
|
469
|
+
(isString(payload) ? payload : jsonStringWithUndefined(payload));
|
|
439
470
|
const deconstruct = (prefix, message, stringified) => {
|
|
440
471
|
const prefixSize = size(prefix);
|
|
441
472
|
return strStartsWith(message, prefix)
|
|
442
473
|
? [
|
|
443
474
|
message[prefixSize],
|
|
444
|
-
(stringified ?
|
|
475
|
+
(stringified ? jsonParseWithUndefined : String)(
|
|
476
|
+
slice(message, prefixSize + 1),
|
|
477
|
+
),
|
|
445
478
|
]
|
|
446
479
|
: void 0;
|
|
447
480
|
};
|
|
@@ -3,15 +3,19 @@ const EMPTY_STRING = '';
|
|
|
3
3
|
const STRING = getTypeOf(EMPTY_STRING);
|
|
4
4
|
const T = 't';
|
|
5
5
|
const V = 'v';
|
|
6
|
+
const UNDEFINED = '\uFFFC';
|
|
6
7
|
const strStartsWith = (str, prefix) => str.startsWith(prefix);
|
|
7
8
|
|
|
8
9
|
const promise = Promise;
|
|
9
10
|
const getIfNotFunction = (predicate) => (value, then, otherwise) =>
|
|
10
11
|
predicate(value) ? otherwise?.() : then(value);
|
|
11
12
|
const isInstanceOf = (thing, cls) => thing instanceof cls;
|
|
13
|
+
const isNullish = (thing) => thing == null;
|
|
12
14
|
const isUndefined = (thing) => thing === void 0;
|
|
15
|
+
const ifNotNullish = getIfNotFunction(isNullish);
|
|
13
16
|
const ifNotUndefined = getIfNotFunction(isUndefined);
|
|
14
17
|
const isString = (thing) => getTypeOf(thing) == STRING;
|
|
18
|
+
const isArray = (thing) => Array.isArray(thing);
|
|
15
19
|
const slice = (arrayOrString, start, end) => arrayOrString.slice(start, end);
|
|
16
20
|
const size = (arrayOrString) => arrayOrString.length;
|
|
17
21
|
const promiseAll = async (promises) => promise.all(promises);
|
|
@@ -23,11 +27,25 @@ const arrayPush = (array, ...values) => array.push(...values);
|
|
|
23
27
|
const arrayUnshift = (array, ...values) => array.unshift(...values);
|
|
24
28
|
|
|
25
29
|
const object = Object;
|
|
30
|
+
const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
|
|
26
31
|
const objEntries = object.entries;
|
|
32
|
+
const isObject = (obj) =>
|
|
33
|
+
!isNullish(obj) &&
|
|
34
|
+
ifNotNullish(
|
|
35
|
+
getPrototypeOf(obj),
|
|
36
|
+
(objPrototype) =>
|
|
37
|
+
objPrototype == object.prototype ||
|
|
38
|
+
isNullish(getPrototypeOf(objPrototype)),
|
|
39
|
+
|
|
40
|
+
/* istanbul ignore next */
|
|
41
|
+
() => true,
|
|
42
|
+
);
|
|
27
43
|
const objNew = (entries = []) => object.fromEntries(entries);
|
|
28
44
|
const objHas = (obj, id) => id in obj;
|
|
29
45
|
const objToArray = (obj, cb) =>
|
|
30
46
|
arrayMap(objEntries(obj), ([id, value]) => cb(value, id));
|
|
47
|
+
const objMap = (obj, cb) =>
|
|
48
|
+
objNew(objToArray(obj, (value, id) => [id, cb(value, id)]));
|
|
31
49
|
const objEnsure = (obj, id, getDefaultValue) => {
|
|
32
50
|
if (!objHas(obj, id)) {
|
|
33
51
|
obj[id] = getDefaultValue();
|
|
@@ -41,23 +59,40 @@ const jsonStringWithMap = (obj) =>
|
|
|
41
59
|
jsonString(obj, (_key, value) =>
|
|
42
60
|
isInstanceOf(value, Map) ? object.fromEntries([...value]) : value,
|
|
43
61
|
);
|
|
62
|
+
const jsonStringWithUndefined = (obj) =>
|
|
63
|
+
jsonString(obj, (_key, value) => (isUndefined(value) ? UNDEFINED : value));
|
|
64
|
+
const jsonParseWithUndefined = (str) =>
|
|
65
|
+
// JSON.parse reviver removes properties with undefined values
|
|
66
|
+
replaceUndefinedString(jsonParse(str));
|
|
67
|
+
const replaceUndefinedString = (obj) =>
|
|
68
|
+
obj === UNDEFINED
|
|
69
|
+
? void 0
|
|
70
|
+
: isArray(obj)
|
|
71
|
+
? arrayMap(obj, replaceUndefinedString)
|
|
72
|
+
: isObject(obj)
|
|
73
|
+
? objMap(obj, replaceUndefinedString)
|
|
74
|
+
: obj;
|
|
44
75
|
|
|
45
76
|
const collForEach = (coll, cb) => coll?.forEach(cb);
|
|
46
77
|
|
|
47
|
-
const mapForEach = (
|
|
48
|
-
collForEach(
|
|
78
|
+
const mapForEach = (map2, cb) =>
|
|
79
|
+
collForEach(map2, (value, key) => cb(key, value));
|
|
49
80
|
|
|
50
81
|
const SET_CHANGES = 's';
|
|
51
82
|
const STORE_PATH = '/store';
|
|
52
83
|
const PUT = 'PUT';
|
|
53
84
|
const construct = (prefix, type, payload) =>
|
|
54
|
-
prefix +
|
|
85
|
+
prefix +
|
|
86
|
+
type +
|
|
87
|
+
(isString(payload) ? payload : jsonStringWithUndefined(payload));
|
|
55
88
|
const deconstruct = (prefix, message, stringified) => {
|
|
56
89
|
const prefixSize = size(prefix);
|
|
57
90
|
return strStartsWith(message, prefix)
|
|
58
91
|
? [
|
|
59
92
|
message[prefixSize],
|
|
60
|
-
(stringified ?
|
|
93
|
+
(stringified ? jsonParseWithUndefined : String)(
|
|
94
|
+
slice(message, prefixSize + 1),
|
|
95
|
+
),
|
|
61
96
|
]
|
|
62
97
|
: void 0;
|
|
63
98
|
};
|
|
@@ -3,15 +3,19 @@ const EMPTY_STRING = '';
|
|
|
3
3
|
const STRING = getTypeOf(EMPTY_STRING);
|
|
4
4
|
const T = 't';
|
|
5
5
|
const V = 'v';
|
|
6
|
+
const UNDEFINED = '\uFFFC';
|
|
6
7
|
const strStartsWith = (str, prefix) => str.startsWith(prefix);
|
|
7
8
|
|
|
8
9
|
const promise = Promise;
|
|
9
10
|
const getIfNotFunction = (predicate) => (value, then, otherwise) =>
|
|
10
11
|
predicate(value) ? otherwise?.() : then(value);
|
|
11
12
|
const isInstanceOf = (thing, cls) => thing instanceof cls;
|
|
13
|
+
const isNullish = (thing) => thing == null;
|
|
12
14
|
const isUndefined = (thing) => thing === void 0;
|
|
15
|
+
const ifNotNullish = getIfNotFunction(isNullish);
|
|
13
16
|
const ifNotUndefined = getIfNotFunction(isUndefined);
|
|
14
17
|
const isString = (thing) => getTypeOf(thing) == STRING;
|
|
18
|
+
const isArray = (thing) => Array.isArray(thing);
|
|
15
19
|
const slice = (arrayOrString, start, end) => arrayOrString.slice(start, end);
|
|
16
20
|
const size = (arrayOrString) => arrayOrString.length;
|
|
17
21
|
const promiseAll = async (promises) => promise.all(promises);
|
|
@@ -23,11 +27,25 @@ const arrayPush = (array, ...values) => array.push(...values);
|
|
|
23
27
|
const arrayUnshift = (array, ...values) => array.unshift(...values);
|
|
24
28
|
|
|
25
29
|
const object = Object;
|
|
30
|
+
const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
|
|
26
31
|
const objEntries = object.entries;
|
|
32
|
+
const isObject = (obj) =>
|
|
33
|
+
!isNullish(obj) &&
|
|
34
|
+
ifNotNullish(
|
|
35
|
+
getPrototypeOf(obj),
|
|
36
|
+
(objPrototype) =>
|
|
37
|
+
objPrototype == object.prototype ||
|
|
38
|
+
isNullish(getPrototypeOf(objPrototype)),
|
|
39
|
+
|
|
40
|
+
/* istanbul ignore next */
|
|
41
|
+
() => true,
|
|
42
|
+
);
|
|
27
43
|
const objNew = (entries = []) => object.fromEntries(entries);
|
|
28
44
|
const objHas = (obj, id) => id in obj;
|
|
29
45
|
const objToArray = (obj, cb) =>
|
|
30
46
|
arrayMap(objEntries(obj), ([id, value]) => cb(value, id));
|
|
47
|
+
const objMap = (obj, cb) =>
|
|
48
|
+
objNew(objToArray(obj, (value, id) => [id, cb(value, id)]));
|
|
31
49
|
const objEnsure = (obj, id, getDefaultValue) => {
|
|
32
50
|
if (!objHas(obj, id)) {
|
|
33
51
|
obj[id] = getDefaultValue();
|
|
@@ -41,23 +59,40 @@ const jsonStringWithMap = (obj) =>
|
|
|
41
59
|
jsonString(obj, (_key, value) =>
|
|
42
60
|
isInstanceOf(value, Map) ? object.fromEntries([...value]) : value,
|
|
43
61
|
);
|
|
62
|
+
const jsonStringWithUndefined = (obj) =>
|
|
63
|
+
jsonString(obj, (_key, value) => (isUndefined(value) ? UNDEFINED : value));
|
|
64
|
+
const jsonParseWithUndefined = (str) =>
|
|
65
|
+
// JSON.parse reviver removes properties with undefined values
|
|
66
|
+
replaceUndefinedString(jsonParse(str));
|
|
67
|
+
const replaceUndefinedString = (obj) =>
|
|
68
|
+
obj === UNDEFINED
|
|
69
|
+
? void 0
|
|
70
|
+
: isArray(obj)
|
|
71
|
+
? arrayMap(obj, replaceUndefinedString)
|
|
72
|
+
: isObject(obj)
|
|
73
|
+
? objMap(obj, replaceUndefinedString)
|
|
74
|
+
: obj;
|
|
44
75
|
|
|
45
76
|
const collForEach = (coll, cb) => coll?.forEach(cb);
|
|
46
77
|
|
|
47
|
-
const mapForEach = (
|
|
48
|
-
collForEach(
|
|
78
|
+
const mapForEach = (map2, cb) =>
|
|
79
|
+
collForEach(map2, (value, key) => cb(key, value));
|
|
49
80
|
|
|
50
81
|
const SET_CHANGES = 's';
|
|
51
82
|
const STORE_PATH = '/store';
|
|
52
83
|
const PUT = 'PUT';
|
|
53
84
|
const construct = (prefix, type, payload) =>
|
|
54
|
-
prefix +
|
|
85
|
+
prefix +
|
|
86
|
+
type +
|
|
87
|
+
(isString(payload) ? payload : jsonStringWithUndefined(payload));
|
|
55
88
|
const deconstruct = (prefix, message, stringified) => {
|
|
56
89
|
const prefixSize = size(prefix);
|
|
57
90
|
return strStartsWith(message, prefix)
|
|
58
91
|
? [
|
|
59
92
|
message[prefixSize],
|
|
60
|
-
(stringified ?
|
|
93
|
+
(stringified ? jsonParseWithUndefined : String)(
|
|
94
|
+
slice(message, prefixSize + 1),
|
|
95
|
+
),
|
|
61
96
|
]
|
|
62
97
|
: void 0;
|
|
63
98
|
};
|
|
@@ -93,7 +93,16 @@ const jsonParse = JSON.parse;
|
|
|
93
93
|
const jsonStringWithUndefined = (obj) =>
|
|
94
94
|
jsonString(obj, (_key, value) => (isUndefined(value) ? UNDEFINED : value));
|
|
95
95
|
const jsonParseWithUndefined = (str) =>
|
|
96
|
-
|
|
96
|
+
// JSON.parse reviver removes properties with undefined values
|
|
97
|
+
replaceUndefinedString(jsonParse(str));
|
|
98
|
+
const replaceUndefinedString = (obj) =>
|
|
99
|
+
obj === UNDEFINED
|
|
100
|
+
? void 0
|
|
101
|
+
: isArray(obj)
|
|
102
|
+
? arrayMap(obj, replaceUndefinedString)
|
|
103
|
+
: isObject(obj)
|
|
104
|
+
? objMap(obj, replaceUndefinedString)
|
|
105
|
+
: obj;
|
|
97
106
|
|
|
98
107
|
const textEncoder = /* @__PURE__ */ new GLOBAL.TextEncoder();
|
|
99
108
|
const getHash = (string) => {
|
|
@@ -106,21 +115,22 @@ const getHash = (string) => {
|
|
|
106
115
|
return hash >>> 0;
|
|
107
116
|
};
|
|
108
117
|
|
|
109
|
-
const
|
|
110
|
-
const
|
|
111
|
-
const
|
|
112
|
-
|
|
118
|
+
const map = Map;
|
|
119
|
+
const mapNew = (entries) => new map(entries);
|
|
120
|
+
const mapGet = (map2, key) => map2?.get(key);
|
|
121
|
+
const mapForEach = (map2, cb) =>
|
|
122
|
+
collForEach(map2, (value, key) => cb(key, value));
|
|
113
123
|
const mapMap = (coll, cb) =>
|
|
114
124
|
arrayMap([...(coll?.entries() ?? [])], ([key, value]) => cb(value, key));
|
|
115
|
-
const mapSet = (
|
|
116
|
-
isUndefined(value) ? (collDel(
|
|
117
|
-
const mapEnsure = (
|
|
118
|
-
if (!collHas(
|
|
119
|
-
mapSet(
|
|
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());
|
|
120
130
|
} else {
|
|
121
|
-
hadExistingValue?.(mapGet(
|
|
131
|
+
hadExistingValue?.(mapGet(map2, key));
|
|
122
132
|
}
|
|
123
|
-
return mapGet(
|
|
133
|
+
return mapGet(map2, key);
|
|
124
134
|
};
|
|
125
135
|
const visitTree = (node, path, ensureLeaf, pruneLeaf, p = 0) =>
|
|
126
136
|
ifNotUndefined(
|
|
@@ -481,6 +491,11 @@ const createCustomPersister = (
|
|
|
481
491
|
? store.applyChanges
|
|
482
492
|
: store.setContent)(contentOrChanges);
|
|
483
493
|
};
|
|
494
|
+
const saveAfterMutated = async () => {
|
|
495
|
+
if (isAutoSaving() && store.hadMutated?.()) {
|
|
496
|
+
await save();
|
|
497
|
+
}
|
|
498
|
+
};
|
|
484
499
|
const load = async (initialContent) => {
|
|
485
500
|
/* istanbul ignore else */
|
|
486
501
|
if (status != 2 /* Saving */) {
|
|
@@ -505,6 +520,7 @@ const createCustomPersister = (
|
|
|
505
520
|
},
|
|
506
521
|
);
|
|
507
522
|
setStatus(0 /* Idle */);
|
|
523
|
+
await saveAfterMutated();
|
|
508
524
|
});
|
|
509
525
|
}
|
|
510
526
|
return persister;
|
|
@@ -523,6 +539,7 @@ const createCustomPersister = (
|
|
|
523
539
|
loads++;
|
|
524
540
|
setContentOrChanges(changes ?? content);
|
|
525
541
|
setStatus(0 /* Idle */);
|
|
542
|
+
await saveAfterMutated();
|
|
526
543
|
}
|
|
527
544
|
} else {
|
|
528
545
|
await load();
|
|
@@ -93,7 +93,16 @@ const jsonParse = JSON.parse;
|
|
|
93
93
|
const jsonStringWithUndefined = (obj) =>
|
|
94
94
|
jsonString(obj, (_key, value) => (isUndefined(value) ? UNDEFINED : value));
|
|
95
95
|
const jsonParseWithUndefined = (str) =>
|
|
96
|
-
|
|
96
|
+
// JSON.parse reviver removes properties with undefined values
|
|
97
|
+
replaceUndefinedString(jsonParse(str));
|
|
98
|
+
const replaceUndefinedString = (obj) =>
|
|
99
|
+
obj === UNDEFINED
|
|
100
|
+
? void 0
|
|
101
|
+
: isArray(obj)
|
|
102
|
+
? arrayMap(obj, replaceUndefinedString)
|
|
103
|
+
: isObject(obj)
|
|
104
|
+
? objMap(obj, replaceUndefinedString)
|
|
105
|
+
: obj;
|
|
97
106
|
|
|
98
107
|
const textEncoder = /* @__PURE__ */ new GLOBAL.TextEncoder();
|
|
99
108
|
const getHash = (string) => {
|
|
@@ -106,21 +115,22 @@ const getHash = (string) => {
|
|
|
106
115
|
return hash >>> 0;
|
|
107
116
|
};
|
|
108
117
|
|
|
109
|
-
const
|
|
110
|
-
const
|
|
111
|
-
const
|
|
112
|
-
|
|
118
|
+
const map = Map;
|
|
119
|
+
const mapNew = (entries) => new map(entries);
|
|
120
|
+
const mapGet = (map2, key) => map2?.get(key);
|
|
121
|
+
const mapForEach = (map2, cb) =>
|
|
122
|
+
collForEach(map2, (value, key) => cb(key, value));
|
|
113
123
|
const mapMap = (coll, cb) =>
|
|
114
124
|
arrayMap([...(coll?.entries() ?? [])], ([key, value]) => cb(value, key));
|
|
115
|
-
const mapSet = (
|
|
116
|
-
isUndefined(value) ? (collDel(
|
|
117
|
-
const mapEnsure = (
|
|
118
|
-
if (!collHas(
|
|
119
|
-
mapSet(
|
|
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());
|
|
120
130
|
} else {
|
|
121
|
-
hadExistingValue?.(mapGet(
|
|
131
|
+
hadExistingValue?.(mapGet(map2, key));
|
|
122
132
|
}
|
|
123
|
-
return mapGet(
|
|
133
|
+
return mapGet(map2, key);
|
|
124
134
|
};
|
|
125
135
|
const visitTree = (node, path, ensureLeaf, pruneLeaf, p = 0) =>
|
|
126
136
|
ifNotUndefined(
|
|
@@ -481,6 +491,11 @@ const createCustomPersister = (
|
|
|
481
491
|
? store.applyChanges
|
|
482
492
|
: store.setContent)(contentOrChanges);
|
|
483
493
|
};
|
|
494
|
+
const saveAfterMutated = async () => {
|
|
495
|
+
if (isAutoSaving() && store.hadMutated?.()) {
|
|
496
|
+
await save();
|
|
497
|
+
}
|
|
498
|
+
};
|
|
484
499
|
const load = async (initialContent) => {
|
|
485
500
|
/* istanbul ignore else */
|
|
486
501
|
if (status != 2 /* Saving */) {
|
|
@@ -505,6 +520,7 @@ const createCustomPersister = (
|
|
|
505
520
|
},
|
|
506
521
|
);
|
|
507
522
|
setStatus(0 /* Idle */);
|
|
523
|
+
await saveAfterMutated();
|
|
508
524
|
});
|
|
509
525
|
}
|
|
510
526
|
return persister;
|
|
@@ -523,6 +539,7 @@ const createCustomPersister = (
|
|
|
523
539
|
loads++;
|
|
524
540
|
setContentOrChanges(changes ?? content);
|
|
525
541
|
setStatus(0 /* Idle */);
|
|
542
|
+
await saveAfterMutated();
|
|
526
543
|
}
|
|
527
544
|
} else {
|
|
528
545
|
await load();
|
|
@@ -92,7 +92,16 @@ const jsonParse = JSON.parse;
|
|
|
92
92
|
const jsonStringWithUndefined = (obj) =>
|
|
93
93
|
jsonString(obj, (_key, value) => (isUndefined(value) ? UNDEFINED : value));
|
|
94
94
|
const jsonParseWithUndefined = (str) =>
|
|
95
|
-
|
|
95
|
+
// JSON.parse reviver removes properties with undefined values
|
|
96
|
+
replaceUndefinedString(jsonParse(str));
|
|
97
|
+
const replaceUndefinedString = (obj) =>
|
|
98
|
+
obj === UNDEFINED
|
|
99
|
+
? void 0
|
|
100
|
+
: isArray(obj)
|
|
101
|
+
? arrayMap(obj, replaceUndefinedString)
|
|
102
|
+
: isObject(obj)
|
|
103
|
+
? objMap(obj, replaceUndefinedString)
|
|
104
|
+
: obj;
|
|
96
105
|
|
|
97
106
|
const textEncoder = /* @__PURE__ */ new GLOBAL.TextEncoder();
|
|
98
107
|
const getHash = (string) => {
|
|
@@ -105,21 +114,22 @@ const getHash = (string) => {
|
|
|
105
114
|
return hash >>> 0;
|
|
106
115
|
};
|
|
107
116
|
|
|
108
|
-
const
|
|
109
|
-
const
|
|
110
|
-
const
|
|
111
|
-
|
|
117
|
+
const map = Map;
|
|
118
|
+
const mapNew = (entries) => new map(entries);
|
|
119
|
+
const mapGet = (map2, key) => map2?.get(key);
|
|
120
|
+
const mapForEach = (map2, cb) =>
|
|
121
|
+
collForEach(map2, (value, key) => cb(key, value));
|
|
112
122
|
const mapMap = (coll, cb) =>
|
|
113
123
|
arrayMap([...(coll?.entries() ?? [])], ([key, value]) => cb(value, key));
|
|
114
|
-
const mapSet = (
|
|
115
|
-
isUndefined(value) ? (collDel(
|
|
116
|
-
const mapEnsure = (
|
|
117
|
-
if (!collHas(
|
|
118
|
-
mapSet(
|
|
124
|
+
const mapSet = (map2, key, value) =>
|
|
125
|
+
isUndefined(value) ? (collDel(map2, key), map2) : map2?.set(key, value);
|
|
126
|
+
const mapEnsure = (map2, key, getDefaultValue, hadExistingValue) => {
|
|
127
|
+
if (!collHas(map2, key)) {
|
|
128
|
+
mapSet(map2, key, getDefaultValue());
|
|
119
129
|
} else {
|
|
120
|
-
hadExistingValue?.(mapGet(
|
|
130
|
+
hadExistingValue?.(mapGet(map2, key));
|
|
121
131
|
}
|
|
122
|
-
return mapGet(
|
|
132
|
+
return mapGet(map2, key);
|
|
123
133
|
};
|
|
124
134
|
const visitTree = (node, path, ensureLeaf, pruneLeaf, p = 0) =>
|
|
125
135
|
ifNotUndefined(
|
|
@@ -480,6 +490,11 @@ const createCustomPersister = (
|
|
|
480
490
|
? store.applyChanges
|
|
481
491
|
: store.setContent)(contentOrChanges);
|
|
482
492
|
};
|
|
493
|
+
const saveAfterMutated = async () => {
|
|
494
|
+
if (isAutoSaving() && store.hadMutated?.()) {
|
|
495
|
+
await save();
|
|
496
|
+
}
|
|
497
|
+
};
|
|
483
498
|
const load = async (initialContent) => {
|
|
484
499
|
/* istanbul ignore else */
|
|
485
500
|
if (status != 2 /* Saving */) {
|
|
@@ -504,6 +519,7 @@ const createCustomPersister = (
|
|
|
504
519
|
},
|
|
505
520
|
);
|
|
506
521
|
setStatus(0 /* Idle */);
|
|
522
|
+
await saveAfterMutated();
|
|
507
523
|
});
|
|
508
524
|
}
|
|
509
525
|
return persister;
|
|
@@ -522,6 +538,7 @@ const createCustomPersister = (
|
|
|
522
538
|
loads++;
|
|
523
539
|
setContentOrChanges(changes ?? content);
|
|
524
540
|
setStatus(0 /* Idle */);
|
|
541
|
+
await saveAfterMutated();
|
|
525
542
|
}
|
|
526
543
|
} else {
|
|
527
544
|
await load();
|
|
@@ -92,7 +92,16 @@ const jsonParse = JSON.parse;
|
|
|
92
92
|
const jsonStringWithUndefined = (obj) =>
|
|
93
93
|
jsonString(obj, (_key, value) => (isUndefined(value) ? UNDEFINED : value));
|
|
94
94
|
const jsonParseWithUndefined = (str) =>
|
|
95
|
-
|
|
95
|
+
// JSON.parse reviver removes properties with undefined values
|
|
96
|
+
replaceUndefinedString(jsonParse(str));
|
|
97
|
+
const replaceUndefinedString = (obj) =>
|
|
98
|
+
obj === UNDEFINED
|
|
99
|
+
? void 0
|
|
100
|
+
: isArray(obj)
|
|
101
|
+
? arrayMap(obj, replaceUndefinedString)
|
|
102
|
+
: isObject(obj)
|
|
103
|
+
? objMap(obj, replaceUndefinedString)
|
|
104
|
+
: obj;
|
|
96
105
|
|
|
97
106
|
const textEncoder = /* @__PURE__ */ new GLOBAL.TextEncoder();
|
|
98
107
|
const getHash = (string) => {
|
|
@@ -105,21 +114,22 @@ const getHash = (string) => {
|
|
|
105
114
|
return hash >>> 0;
|
|
106
115
|
};
|
|
107
116
|
|
|
108
|
-
const
|
|
109
|
-
const
|
|
110
|
-
const
|
|
111
|
-
|
|
117
|
+
const map = Map;
|
|
118
|
+
const mapNew = (entries) => new map(entries);
|
|
119
|
+
const mapGet = (map2, key) => map2?.get(key);
|
|
120
|
+
const mapForEach = (map2, cb) =>
|
|
121
|
+
collForEach(map2, (value, key) => cb(key, value));
|
|
112
122
|
const mapMap = (coll, cb) =>
|
|
113
123
|
arrayMap([...(coll?.entries() ?? [])], ([key, value]) => cb(value, key));
|
|
114
|
-
const mapSet = (
|
|
115
|
-
isUndefined(value) ? (collDel(
|
|
116
|
-
const mapEnsure = (
|
|
117
|
-
if (!collHas(
|
|
118
|
-
mapSet(
|
|
124
|
+
const mapSet = (map2, key, value) =>
|
|
125
|
+
isUndefined(value) ? (collDel(map2, key), map2) : map2?.set(key, value);
|
|
126
|
+
const mapEnsure = (map2, key, getDefaultValue, hadExistingValue) => {
|
|
127
|
+
if (!collHas(map2, key)) {
|
|
128
|
+
mapSet(map2, key, getDefaultValue());
|
|
119
129
|
} else {
|
|
120
|
-
hadExistingValue?.(mapGet(
|
|
130
|
+
hadExistingValue?.(mapGet(map2, key));
|
|
121
131
|
}
|
|
122
|
-
return mapGet(
|
|
132
|
+
return mapGet(map2, key);
|
|
123
133
|
};
|
|
124
134
|
const visitTree = (node, path, ensureLeaf, pruneLeaf, p = 0) =>
|
|
125
135
|
ifNotUndefined(
|
|
@@ -480,6 +490,11 @@ const createCustomPersister = (
|
|
|
480
490
|
? store.applyChanges
|
|
481
491
|
: store.setContent)(contentOrChanges);
|
|
482
492
|
};
|
|
493
|
+
const saveAfterMutated = async () => {
|
|
494
|
+
if (isAutoSaving() && store.hadMutated?.()) {
|
|
495
|
+
await save();
|
|
496
|
+
}
|
|
497
|
+
};
|
|
483
498
|
const load = async (initialContent) => {
|
|
484
499
|
/* istanbul ignore else */
|
|
485
500
|
if (status != 2 /* Saving */) {
|
|
@@ -504,6 +519,7 @@ const createCustomPersister = (
|
|
|
504
519
|
},
|
|
505
520
|
);
|
|
506
521
|
setStatus(0 /* Idle */);
|
|
522
|
+
await saveAfterMutated();
|
|
507
523
|
});
|
|
508
524
|
}
|
|
509
525
|
return persister;
|
|
@@ -522,6 +538,7 @@ const createCustomPersister = (
|
|
|
522
538
|
loads++;
|
|
523
539
|
setContentOrChanges(changes ?? content);
|
|
524
540
|
setStatus(0 /* Idle */);
|
|
541
|
+
await saveAfterMutated();
|
|
525
542
|
}
|
|
526
543
|
} else {
|
|
527
544
|
await load();
|