tinybase 8.0.0-beta.2 → 8.0.0-beta.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/@types/_internal/store/with-schemas/index.d.ts +2 -2
- package/@types/common/index.d.ts +22 -0
- package/@types/common/with-schemas/index.d.ts +22 -0
- package/@types/middleware/index.d.ts +44 -119
- package/@types/middleware/with-schemas/index.d.ts +44 -142
- package/@types/store/index.d.ts +132 -79
- package/@types/store/with-schemas/index.d.ts +137 -81
- package/@types/ui-react-dom/index.d.ts +6 -4
- package/@types/ui-react-dom/with-schemas/index.d.ts +6 -4
- package/checkpoints/index.js +2 -8
- package/checkpoints/with-schemas/index.js +2 -8
- package/index.js +311 -209
- package/mergeable-store/index.js +330 -201
- package/mergeable-store/with-schemas/index.js +330 -201
- package/middleware/index.js +2 -40
- package/middleware/with-schemas/index.js +2 -40
- 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/index.js +1 -1
- package/min/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/middleware/index.js +1 -1
- package/min/middleware/index.js.gz +0 -0
- package/min/middleware/with-schemas/index.js +1 -1
- 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-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/schematizers/index.js +1 -1
- package/min/schematizers/index.js.gz +0 -0
- package/min/schematizers/schematizer-arktype/index.js +1 -1
- package/min/schematizers/schematizer-arktype/index.js.gz +0 -0
- package/min/schematizers/schematizer-arktype/with-schemas/index.js +1 -1
- package/min/schematizers/schematizer-arktype/with-schemas/index.js.gz +0 -0
- package/min/schematizers/schematizer-effect/index.js +1 -1
- package/min/schematizers/schematizer-effect/index.js.gz +0 -0
- package/min/schematizers/schematizer-effect/with-schemas/index.js +1 -1
- package/min/schematizers/schematizer-effect/with-schemas/index.js.gz +0 -0
- package/min/schematizers/schematizer-typebox/index.js +1 -1
- package/min/schematizers/schematizer-typebox/index.js.gz +0 -0
- package/min/schematizers/schematizer-typebox/with-schemas/index.js +1 -1
- package/min/schematizers/schematizer-typebox/with-schemas/index.js.gz +0 -0
- package/min/schematizers/schematizer-valibot/index.js +1 -1
- package/min/schematizers/schematizer-valibot/index.js.gz +0 -0
- package/min/schematizers/schematizer-valibot/with-schemas/index.js +1 -1
- package/min/schematizers/schematizer-valibot/with-schemas/index.js.gz +0 -0
- package/min/schematizers/schematizer-yup/index.js +1 -1
- package/min/schematizers/schematizer-yup/index.js.gz +0 -0
- package/min/schematizers/schematizer-yup/with-schemas/index.js +1 -1
- package/min/schematizers/schematizer-yup/with-schemas/index.js.gz +0 -0
- package/min/schematizers/schematizer-zod/index.js +1 -1
- package/min/schematizers/schematizer-zod/index.js.gz +0 -0
- package/min/schematizers/schematizer-zod/with-schemas/index.js +1 -1
- package/min/schematizers/schematizer-zod/with-schemas/index.js.gz +0 -0
- package/min/schematizers/with-schemas/index.js +1 -1
- package/min/schematizers/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/with-schemas/index.js +1 -1
- package/min/synchronizers/with-schemas/index.js.gz +0 -0
- package/min/ui-react/index.js +1 -1
- package/min/ui-react/index.js.gz +0 -0
- package/min/ui-react/with-schemas/index.js +1 -1
- package/min/ui-react/with-schemas/index.js.gz +0 -0
- package/min/ui-react-dom/index.js +1 -1
- package/min/ui-react-dom/index.js.gz +0 -0
- package/min/ui-react-dom/with-schemas/index.js +1 -1
- package/min/ui-react-dom/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 +418 -219
- package/omni/with-schemas/index.js +418 -219
- package/package.json +10 -10
- package/persisters/index.js +5 -5
- package/persisters/persister-automerge/index.js +5 -5
- package/persisters/persister-automerge/with-schemas/index.js +5 -5
- package/persisters/persister-browser/index.js +5 -5
- package/persisters/persister-browser/with-schemas/index.js +5 -5
- package/persisters/persister-cr-sqlite-wasm/index.js +5 -5
- package/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +5 -5
- package/persisters/persister-durable-object-sql-storage/index.js +5 -5
- package/persisters/persister-durable-object-sql-storage/with-schemas/index.js +5 -5
- package/persisters/persister-durable-object-storage/index.js +5 -5
- package/persisters/persister-durable-object-storage/with-schemas/index.js +5 -5
- package/persisters/persister-electric-sql/index.js +5 -5
- package/persisters/persister-electric-sql/with-schemas/index.js +5 -5
- package/persisters/persister-expo-sqlite/index.js +5 -5
- package/persisters/persister-expo-sqlite/with-schemas/index.js +5 -5
- package/persisters/persister-file/index.js +5 -5
- package/persisters/persister-file/with-schemas/index.js +5 -5
- package/persisters/persister-indexed-db/index.js +5 -5
- package/persisters/persister-indexed-db/with-schemas/index.js +5 -5
- package/persisters/persister-libsql/index.js +5 -5
- package/persisters/persister-libsql/with-schemas/index.js +5 -5
- package/persisters/persister-partykit-client/index.js +5 -5
- package/persisters/persister-partykit-client/with-schemas/index.js +5 -5
- package/persisters/persister-pglite/index.js +5 -5
- package/persisters/persister-pglite/with-schemas/index.js +5 -5
- package/persisters/persister-postgres/index.js +5 -5
- package/persisters/persister-postgres/with-schemas/index.js +5 -5
- package/persisters/persister-powersync/index.js +5 -5
- package/persisters/persister-powersync/with-schemas/index.js +5 -5
- package/persisters/persister-react-native-mmkv/index.js +5 -5
- package/persisters/persister-react-native-mmkv/with-schemas/index.js +5 -5
- package/persisters/persister-react-native-sqlite/index.js +5 -5
- package/persisters/persister-react-native-sqlite/with-schemas/index.js +5 -5
- package/persisters/persister-remote/index.js +5 -5
- package/persisters/persister-remote/with-schemas/index.js +5 -5
- package/persisters/persister-sqlite-bun/index.js +5 -5
- package/persisters/persister-sqlite-bun/with-schemas/index.js +5 -5
- package/persisters/persister-sqlite-wasm/index.js +5 -5
- package/persisters/persister-sqlite-wasm/with-schemas/index.js +5 -5
- package/persisters/persister-sqlite3/index.js +5 -5
- package/persisters/persister-sqlite3/with-schemas/index.js +5 -5
- package/persisters/persister-yjs/index.js +5 -5
- package/persisters/persister-yjs/with-schemas/index.js +5 -5
- package/persisters/with-schemas/index.js +5 -5
- package/queries/index.js +11 -4
- package/queries/with-schemas/index.js +11 -4
- package/readme.md +3 -3
- package/releases.md +38 -3
- package/schematizers/index.js +9 -1
- package/schematizers/schematizer-arktype/index.js +16 -1
- package/schematizers/schematizer-arktype/with-schemas/index.js +16 -1
- package/schematizers/schematizer-effect/index.js +15 -2
- package/schematizers/schematizer-effect/with-schemas/index.js +15 -2
- package/schematizers/schematizer-typebox/index.js +9 -1
- package/schematizers/schematizer-typebox/with-schemas/index.js +9 -1
- package/schematizers/schematizer-valibot/index.js +17 -2
- package/schematizers/schematizer-valibot/with-schemas/index.js +17 -2
- package/schematizers/schematizer-yup/index.js +9 -1
- package/schematizers/schematizer-yup/with-schemas/index.js +9 -1
- package/schematizers/schematizer-zod/index.js +13 -2
- package/schematizers/schematizer-zod/with-schemas/index.js +13 -2
- package/schematizers/with-schemas/index.js +9 -1
- package/store/index.js +254 -149
- package/store/with-schemas/index.js +254 -149
- package/synchronizers/index.js +5 -5
- package/synchronizers/synchronizer-broadcast-channel/index.js +5 -5
- package/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +5 -5
- package/synchronizers/synchronizer-local/index.js +5 -5
- package/synchronizers/synchronizer-local/with-schemas/index.js +5 -5
- package/synchronizers/synchronizer-ws-client/index.js +5 -5
- package/synchronizers/synchronizer-ws-client/with-schemas/index.js +5 -5
- package/synchronizers/synchronizer-ws-server/index.js +5 -5
- package/synchronizers/synchronizer-ws-server/with-schemas/index.js +5 -5
- package/synchronizers/synchronizer-ws-server-durable-object/index.js +5 -5
- package/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js +5 -5
- package/synchronizers/with-schemas/index.js +5 -5
- package/ui-react/index.js +6 -0
- package/ui-react/with-schemas/index.js +6 -0
- package/ui-react-dom/index.js +113 -6
- package/ui-react-dom/with-schemas/index.js +113 -6
- package/ui-react-inspector/index.js +329 -129
- package/ui-react-inspector/with-schemas/index.js +329 -129
- package/with-schemas/index.js +311 -209
|
@@ -4,6 +4,8 @@ const STRING = getTypeOf(EMPTY_STRING);
|
|
|
4
4
|
const BOOLEAN = getTypeOf(true);
|
|
5
5
|
const NUMBER = getTypeOf(0);
|
|
6
6
|
const FUNCTION = getTypeOf(getTypeOf);
|
|
7
|
+
const OBJECT = 'object';
|
|
8
|
+
const ARRAY = 'array';
|
|
7
9
|
const TYPE = 'type';
|
|
8
10
|
const DEFAULT = 'default';
|
|
9
11
|
const ALLOW_NULL = 'allowNull';
|
|
@@ -23,6 +25,7 @@ const CELL_IDS = CELL + IDS;
|
|
|
23
25
|
const VALUE = 'Value';
|
|
24
26
|
const VALUES = VALUE + 's';
|
|
25
27
|
const VALUE_IDS = VALUE + IDS;
|
|
28
|
+
const JSON_PREFIX = '\uFFFD';
|
|
26
29
|
const id = (key) => EMPTY_STRING + key;
|
|
27
30
|
|
|
28
31
|
const getIfNotFunction = (predicate) => (value, then, otherwise) =>
|
|
@@ -36,6 +39,7 @@ const isNull = (thing) => thing === null;
|
|
|
36
39
|
const ifNotNullish = getIfNotFunction(isNullish);
|
|
37
40
|
const ifNotUndefined = getIfNotFunction(isUndefined);
|
|
38
41
|
const isTypeStringOrBoolean = (type) => type == STRING || type == BOOLEAN;
|
|
42
|
+
const isString = (thing) => getTypeOf(thing) == STRING;
|
|
39
43
|
const isFunction = (thing) => getTypeOf(thing) == FUNCTION;
|
|
40
44
|
const isArray = (thing) => Array.isArray(thing);
|
|
41
45
|
const slice = (arrayOrString, start, end) => arrayOrString.slice(start, end);
|
|
@@ -63,30 +67,6 @@ const arrayReduce = (array, cb, initial) => array.reduce(cb, initial);
|
|
|
63
67
|
const arrayPush = (array, ...values) => array.push(...values);
|
|
64
68
|
const arrayShift = (array) => array.shift();
|
|
65
69
|
|
|
66
|
-
const getCellOrValueType = (cellOrValue) => {
|
|
67
|
-
if (isNull(cellOrValue)) {
|
|
68
|
-
return NULL;
|
|
69
|
-
}
|
|
70
|
-
const type = getTypeOf(cellOrValue);
|
|
71
|
-
return isTypeStringOrBoolean(type) ||
|
|
72
|
-
(type == NUMBER && isFiniteNumber(cellOrValue))
|
|
73
|
-
? type
|
|
74
|
-
: void 0;
|
|
75
|
-
};
|
|
76
|
-
|
|
77
|
-
const collSizeN = (collSizer) => (coll) =>
|
|
78
|
-
arrayReduce(collValues(coll), (total, coll2) => total + collSizer(coll2), 0);
|
|
79
|
-
const collSize = (coll) => coll?.size ?? 0;
|
|
80
|
-
const collSize2 = collSizeN(collSize);
|
|
81
|
-
const collSize3 = collSizeN(collSize2);
|
|
82
|
-
const collSize4 = collSizeN(collSize3);
|
|
83
|
-
const collHas = (coll, keyOrValue) => coll?.has(keyOrValue) ?? false;
|
|
84
|
-
const collIsEmpty = (coll) => isUndefined(coll) || collSize(coll) == 0;
|
|
85
|
-
const collValues = (coll) => [...(coll?.values() ?? [])];
|
|
86
|
-
const collClear = (coll) => coll.clear();
|
|
87
|
-
const collForEach = (coll, cb) => coll?.forEach(cb);
|
|
88
|
-
const collDel = (coll, keyOrValue) => coll?.delete(keyOrValue);
|
|
89
|
-
|
|
90
70
|
const object = Object;
|
|
91
71
|
const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
|
|
92
72
|
const objFrozen = object.isFrozen;
|
|
@@ -105,7 +85,6 @@ const isObject = (obj) =>
|
|
|
105
85
|
const objIds = object.keys;
|
|
106
86
|
const objFreeze = object.freeze;
|
|
107
87
|
const objNew = (entries = []) => object.fromEntries(entries);
|
|
108
|
-
const objMerge = (...objs) => object.assign({}, ...objs);
|
|
109
88
|
const objHas = (obj, id) => id in obj;
|
|
110
89
|
const objDel = (obj, id) => {
|
|
111
90
|
delete obj[id];
|
|
@@ -157,6 +136,49 @@ const objValidate = (obj, validateChild, onInvalidObj, emptyIsValid = 0) => {
|
|
|
157
136
|
return emptyIsValid ? true : !objIsEmpty(obj);
|
|
158
137
|
};
|
|
159
138
|
|
|
139
|
+
const jsonString = JSON.stringify;
|
|
140
|
+
const jsonParse = JSON.parse;
|
|
141
|
+
const jsonStringWithMap = (obj) =>
|
|
142
|
+
jsonString(obj, (_key, value) =>
|
|
143
|
+
isInstanceOf(value, Map) ? object.fromEntries([...value]) : value,
|
|
144
|
+
);
|
|
145
|
+
|
|
146
|
+
const getCellOrValueType = (cellOrValue) => {
|
|
147
|
+
if (isNull(cellOrValue)) {
|
|
148
|
+
return NULL;
|
|
149
|
+
}
|
|
150
|
+
if (isArray(cellOrValue)) {
|
|
151
|
+
return ARRAY;
|
|
152
|
+
}
|
|
153
|
+
if (isObject(cellOrValue)) {
|
|
154
|
+
return OBJECT;
|
|
155
|
+
}
|
|
156
|
+
const type = getTypeOf(cellOrValue);
|
|
157
|
+
return isTypeStringOrBoolean(type) ||
|
|
158
|
+
(type == NUMBER && isFiniteNumber(cellOrValue))
|
|
159
|
+
? type
|
|
160
|
+
: void 0;
|
|
161
|
+
};
|
|
162
|
+
const isJsonType = (type) => type == OBJECT || type == ARRAY;
|
|
163
|
+
const encodeIfJson = (value) =>
|
|
164
|
+
isObject(value) || isArray(value) ? JSON_PREFIX + jsonString(value) : value;
|
|
165
|
+
const isEncodedJson = (value) => isString(value) && value[0] == JSON_PREFIX;
|
|
166
|
+
const decodeIfJson = (raw, _id, encoded) =>
|
|
167
|
+
!encoded && isEncodedJson(raw) ? jsonParse(slice(raw, 1)) : raw;
|
|
168
|
+
|
|
169
|
+
const collSizeN = (collSizer) => (coll) =>
|
|
170
|
+
arrayReduce(collValues(coll), (total, coll2) => total + collSizer(coll2), 0);
|
|
171
|
+
const collSize = (coll) => coll?.size ?? 0;
|
|
172
|
+
const collSize2 = collSizeN(collSize);
|
|
173
|
+
const collSize3 = collSizeN(collSize2);
|
|
174
|
+
const collSize4 = collSizeN(collSize3);
|
|
175
|
+
const collHas = (coll, keyOrValue) => coll?.has(keyOrValue) ?? false;
|
|
176
|
+
const collIsEmpty = (coll) => isUndefined(coll) || collSize(coll) == 0;
|
|
177
|
+
const collValues = (coll) => [...(coll?.values() ?? [])];
|
|
178
|
+
const collClear = (coll) => coll.clear();
|
|
179
|
+
const collForEach = (coll, cb) => coll?.forEach(cb);
|
|
180
|
+
const collDel = (coll, keyOrValue) => coll?.delete(keyOrValue);
|
|
181
|
+
|
|
160
182
|
const map = Map;
|
|
161
183
|
const mapNew = (entries) => new map(entries);
|
|
162
184
|
const mapKeys = (map2) => [...(map2?.keys() ?? [])];
|
|
@@ -235,13 +257,6 @@ const visitTree = (node, path, ensureLeaf, pruneLeaf, p = 0) =>
|
|
|
235
257
|
},
|
|
236
258
|
);
|
|
237
259
|
|
|
238
|
-
const jsonString = JSON.stringify;
|
|
239
|
-
const jsonParse = JSON.parse;
|
|
240
|
-
const jsonStringWithMap = (obj) =>
|
|
241
|
-
jsonString(obj, (_key, value) =>
|
|
242
|
-
isInstanceOf(value, Map) ? object.fromEntries([...value]) : value,
|
|
243
|
-
);
|
|
244
|
-
|
|
245
260
|
const defaultSorter = (sortKey1, sortKey2) =>
|
|
246
261
|
(sortKey1 ?? 0) < (sortKey2 ?? 0) ? -1 : 1;
|
|
247
262
|
|
|
@@ -435,15 +450,19 @@ const createStore = () => {
|
|
|
435
450
|
return false;
|
|
436
451
|
}
|
|
437
452
|
const type = schema[TYPE];
|
|
438
|
-
if (!isTypeStringOrBoolean(type) && type != NUMBER) {
|
|
453
|
+
if (!isTypeStringOrBoolean(type) && type != NUMBER && !isJsonType(type)) {
|
|
439
454
|
return false;
|
|
440
455
|
}
|
|
441
456
|
const defaultValue = schema[DEFAULT];
|
|
442
457
|
if (isNull(defaultValue) && !schema[ALLOW_NULL]) {
|
|
443
458
|
return false;
|
|
444
459
|
}
|
|
445
|
-
if (!isNull(defaultValue)
|
|
446
|
-
|
|
460
|
+
if (!isNull(defaultValue)) {
|
|
461
|
+
if (getCellOrValueType(defaultValue) != type) {
|
|
462
|
+
objDel(schema, DEFAULT);
|
|
463
|
+
} else {
|
|
464
|
+
schema[DEFAULT] = encodeIfJson(defaultValue);
|
|
465
|
+
}
|
|
447
466
|
}
|
|
448
467
|
return true;
|
|
449
468
|
};
|
|
@@ -483,20 +502,22 @@ const createStore = () => {
|
|
|
483
502
|
? cellSchema[ALLOW_NULL]
|
|
484
503
|
? cell
|
|
485
504
|
: cellInvalid(tableId, rowId, cellId, cell, cellSchema[DEFAULT])
|
|
486
|
-
: getCellOrValueType(cell)
|
|
487
|
-
? cell
|
|
488
|
-
:
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
505
|
+
: getCellOrValueType(cell) === cellSchema[TYPE]
|
|
506
|
+
? encodeIfJson(cell)
|
|
507
|
+
: isJsonType(cellSchema[TYPE]) && isEncodedJson(cell)
|
|
508
|
+
? cell
|
|
509
|
+
: cellInvalid(
|
|
510
|
+
tableId,
|
|
511
|
+
rowId,
|
|
512
|
+
cellId,
|
|
513
|
+
cell,
|
|
514
|
+
cellSchema[DEFAULT],
|
|
515
|
+
),
|
|
495
516
|
() => cellInvalid(tableId, rowId, cellId, cell),
|
|
496
517
|
)
|
|
497
518
|
: isUndefined(getCellOrValueType(cell))
|
|
498
519
|
? cellInvalid(tableId, rowId, cellId, cell)
|
|
499
|
-
: cell;
|
|
520
|
+
: encodeIfJson(cell);
|
|
500
521
|
const validateValues = (values, skipDefaults) =>
|
|
501
522
|
objValidate(
|
|
502
523
|
skipDefaults ? values : addDefaultsToValues(values),
|
|
@@ -520,14 +541,16 @@ const createStore = () => {
|
|
|
520
541
|
? valueSchema[ALLOW_NULL]
|
|
521
542
|
? value
|
|
522
543
|
: valueInvalid(valueId, value, valueSchema[DEFAULT])
|
|
523
|
-
: getCellOrValueType(value)
|
|
524
|
-
? value
|
|
525
|
-
:
|
|
544
|
+
: getCellOrValueType(value) === valueSchema[TYPE]
|
|
545
|
+
? encodeIfJson(value)
|
|
546
|
+
: isJsonType(valueSchema[TYPE]) && isEncodedJson(value)
|
|
547
|
+
? value
|
|
548
|
+
: valueInvalid(valueId, value, valueSchema[DEFAULT]),
|
|
526
549
|
() => valueInvalid(valueId, value),
|
|
527
550
|
)
|
|
528
551
|
: isUndefined(getCellOrValueType(value))
|
|
529
552
|
? valueInvalid(valueId, value)
|
|
530
|
-
: value;
|
|
553
|
+
: encodeIfJson(value);
|
|
531
554
|
const addDefaultsToRow = (row, tableId, rowId) => {
|
|
532
555
|
ifNotUndefined(
|
|
533
556
|
mapGet(tablesSchemaRowCache, tableId),
|
|
@@ -607,10 +630,24 @@ const createStore = () => {
|
|
|
607
630
|
);
|
|
608
631
|
const setOrDelTables = (tables) =>
|
|
609
632
|
objIsEmpty(tables) ? delTables() : setTables(tables);
|
|
610
|
-
const setOrDelCell = (
|
|
633
|
+
const setOrDelCell = (
|
|
634
|
+
tableId,
|
|
635
|
+
rowId,
|
|
636
|
+
cellId,
|
|
637
|
+
cell,
|
|
638
|
+
skipMiddleware,
|
|
639
|
+
skipRowMiddleware,
|
|
640
|
+
) =>
|
|
611
641
|
isUndefined(cell)
|
|
612
642
|
? delCell(tableId, rowId, cellId, true, skipMiddleware)
|
|
613
|
-
: setCell(
|
|
643
|
+
: setCell(
|
|
644
|
+
tableId,
|
|
645
|
+
rowId,
|
|
646
|
+
cellId,
|
|
647
|
+
cell,
|
|
648
|
+
skipMiddleware,
|
|
649
|
+
skipRowMiddleware,
|
|
650
|
+
);
|
|
614
651
|
const setOrDelValues = (values) =>
|
|
615
652
|
objIsEmpty(values) ? delValues() : setValues(values);
|
|
616
653
|
const setOrDelValue = (valueId, value, skipMiddleware) =>
|
|
@@ -710,6 +747,30 @@ const createStore = () => {
|
|
|
710
747
|
),
|
|
711
748
|
objIsEqual,
|
|
712
749
|
);
|
|
750
|
+
const applyRowDirectly = (tableId, tableMap, rowId, row, skipMiddleware) => {
|
|
751
|
+
mapMatch(
|
|
752
|
+
mapEnsure(tableMap, rowId, () => {
|
|
753
|
+
rowIdsChanged(tableId, rowId, 1);
|
|
754
|
+
return mapNew();
|
|
755
|
+
}),
|
|
756
|
+
row,
|
|
757
|
+
(rowMap, cellId, cell) =>
|
|
758
|
+
ifNotUndefined(
|
|
759
|
+
getValidatedCell(tableId, rowId, cellId, cell),
|
|
760
|
+
(validCell) =>
|
|
761
|
+
setValidCell(
|
|
762
|
+
tableId,
|
|
763
|
+
rowId,
|
|
764
|
+
rowMap,
|
|
765
|
+
cellId,
|
|
766
|
+
validCell,
|
|
767
|
+
skipMiddleware,
|
|
768
|
+
),
|
|
769
|
+
),
|
|
770
|
+
(rowMap, cellId) =>
|
|
771
|
+
delValidCell(tableId, tableMap, rowId, rowMap, cellId, true),
|
|
772
|
+
);
|
|
773
|
+
};
|
|
713
774
|
const setValidCell = (tableId, rowId, rowMap, cellId, cell, skipMiddleware) =>
|
|
714
775
|
ifTransformed(
|
|
715
776
|
cell,
|
|
@@ -950,13 +1011,21 @@ const createStore = () => {
|
|
|
950
1011
|
const getCellChange = (tableId, rowId, cellId) =>
|
|
951
1012
|
ifNotUndefined(
|
|
952
1013
|
mapGet(mapGet(mapGet(changedCells, tableId), rowId), cellId),
|
|
953
|
-
([oldCell, newCell]) => [
|
|
1014
|
+
([oldCell, newCell]) => [
|
|
1015
|
+
true,
|
|
1016
|
+
decodeIfJson(oldCell),
|
|
1017
|
+
decodeIfJson(newCell),
|
|
1018
|
+
],
|
|
954
1019
|
() => [false, ...pairNew(getCell(tableId, rowId, cellId))],
|
|
955
1020
|
);
|
|
956
1021
|
const getValueChange = (valueId) =>
|
|
957
1022
|
ifNotUndefined(
|
|
958
1023
|
mapGet(changedValues, valueId),
|
|
959
|
-
([oldValue, newValue]) => [
|
|
1024
|
+
([oldValue, newValue]) => [
|
|
1025
|
+
true,
|
|
1026
|
+
decodeIfJson(oldValue),
|
|
1027
|
+
decodeIfJson(newValue),
|
|
1028
|
+
],
|
|
960
1029
|
() => [false, ...pairNew(getValue(valueId))],
|
|
961
1030
|
);
|
|
962
1031
|
const callInvalidCellListeners = (mutator) =>
|
|
@@ -1132,8 +1201,8 @@ const createStore = () => {
|
|
|
1132
1201
|
callListeners(
|
|
1133
1202
|
cellListeners[mutator],
|
|
1134
1203
|
[tableId, rowId, cellId],
|
|
1135
|
-
newCell,
|
|
1136
|
-
oldCell,
|
|
1204
|
+
decodeIfJson(newCell),
|
|
1205
|
+
decodeIfJson(oldCell),
|
|
1137
1206
|
getCellChange,
|
|
1138
1207
|
);
|
|
1139
1208
|
tablesChanged = tableChanged = rowChanged = 1;
|
|
@@ -1189,8 +1258,8 @@ const createStore = () => {
|
|
|
1189
1258
|
callListeners(
|
|
1190
1259
|
valueListeners[mutator],
|
|
1191
1260
|
[valueId],
|
|
1192
|
-
newValue,
|
|
1193
|
-
oldValue,
|
|
1261
|
+
decodeIfJson(newValue),
|
|
1262
|
+
decodeIfJson(oldValue),
|
|
1194
1263
|
getValueChange,
|
|
1195
1264
|
);
|
|
1196
1265
|
valuesChanged = 1;
|
|
@@ -1227,10 +1296,42 @@ const createStore = () => {
|
|
|
1227
1296
|
[getTableIds],
|
|
1228
1297
|
);
|
|
1229
1298
|
};
|
|
1299
|
+
const getTransactionChangesImpl = (encoded = false) => [
|
|
1300
|
+
mapToObj(
|
|
1301
|
+
changedCells,
|
|
1302
|
+
(table, tableId) =>
|
|
1303
|
+
mapGet(changedTableIds, tableId) === -1
|
|
1304
|
+
? void 0
|
|
1305
|
+
: mapToObj(
|
|
1306
|
+
table,
|
|
1307
|
+
(row, rowId) =>
|
|
1308
|
+
mapGet(mapGet(changedRowIds, tableId), rowId) === -1
|
|
1309
|
+
? void 0
|
|
1310
|
+
: mapToObj(
|
|
1311
|
+
row,
|
|
1312
|
+
([, newCell]) =>
|
|
1313
|
+
decodeIfJson(newCell, EMPTY_STRING, encoded),
|
|
1314
|
+
(changedCell) => pairIsEqual(changedCell),
|
|
1315
|
+
),
|
|
1316
|
+
collIsEmpty,
|
|
1317
|
+
objIsEmpty,
|
|
1318
|
+
),
|
|
1319
|
+
collIsEmpty,
|
|
1320
|
+
objIsEmpty,
|
|
1321
|
+
),
|
|
1322
|
+
mapToObj(
|
|
1323
|
+
changedValues,
|
|
1324
|
+
([, newValue]) => decodeIfJson(newValue, EMPTY_STRING, encoded),
|
|
1325
|
+
(changedValue) => pairIsEqual(changedValue),
|
|
1326
|
+
),
|
|
1327
|
+
1,
|
|
1328
|
+
];
|
|
1230
1329
|
const getContent = () => [getTables(), getValues()];
|
|
1231
|
-
const
|
|
1330
|
+
const getEncodedContent = () => [mapToObj3(tablesMap), mapToObj(valuesMap)];
|
|
1331
|
+
const getTables = () => mapToObj3(tablesMap, decodeIfJson);
|
|
1232
1332
|
const getTableIds = () => mapKeys(tablesMap);
|
|
1233
|
-
const getTable = (tableId) =>
|
|
1333
|
+
const getTable = (tableId) =>
|
|
1334
|
+
mapToObj2(mapGet(tablesMap, id(tableId)), decodeIfJson);
|
|
1234
1335
|
const getTableCellIds = (tableId) =>
|
|
1235
1336
|
mapKeys(mapGet(tableCellIds, id(tableId)));
|
|
1236
1337
|
const getRowCount = (tableId) => collSize(mapGet(tablesMap, id(tableId)));
|
|
@@ -1266,14 +1367,16 @@ const createStore = () => {
|
|
|
1266
1367
|
([, rowId]) => rowId,
|
|
1267
1368
|
);
|
|
1268
1369
|
const getRow = (tableId, rowId) =>
|
|
1269
|
-
mapToObj(mapGet(mapGet(tablesMap, id(tableId)), id(rowId)));
|
|
1370
|
+
mapToObj(mapGet(mapGet(tablesMap, id(tableId)), id(rowId)), decodeIfJson);
|
|
1270
1371
|
const getCellIds = (tableId, rowId) =>
|
|
1271
1372
|
mapKeys(mapGet(mapGet(tablesMap, id(tableId)), id(rowId)));
|
|
1272
1373
|
const getCell = (tableId, rowId, cellId) =>
|
|
1273
|
-
|
|
1274
|
-
|
|
1374
|
+
decodeIfJson(
|
|
1375
|
+
mapGet(mapGet(mapGet(tablesMap, id(tableId)), id(rowId)), id(cellId)),
|
|
1376
|
+
);
|
|
1377
|
+
const getValues = () => mapToObj(valuesMap, decodeIfJson);
|
|
1275
1378
|
const getValueIds = () => mapKeys(valuesMap);
|
|
1276
|
-
const getValue = (valueId) => mapGet(valuesMap, id(valueId));
|
|
1379
|
+
const getValue = (valueId) => decodeIfJson(mapGet(valuesMap, id(valueId)));
|
|
1277
1380
|
const hasTables = () => !collIsEmpty(tablesMap);
|
|
1278
1381
|
const hasTable = (tableId) => collHas(tablesMap, id(tableId));
|
|
1279
1382
|
const hasTableCell = (tableId, cellId) =>
|
|
@@ -1344,7 +1447,14 @@ const createStore = () => {
|
|
|
1344
1447
|
tableId,
|
|
1345
1448
|
rowId,
|
|
1346
1449
|
);
|
|
1347
|
-
const setCell = (
|
|
1450
|
+
const setCell = (
|
|
1451
|
+
tableId,
|
|
1452
|
+
rowId,
|
|
1453
|
+
cellId,
|
|
1454
|
+
cell,
|
|
1455
|
+
skipMiddleware,
|
|
1456
|
+
skipRowMiddleware,
|
|
1457
|
+
) =>
|
|
1348
1458
|
fluentTransaction(
|
|
1349
1459
|
(tableId2, rowId2, cellId2) =>
|
|
1350
1460
|
ifNotUndefined(
|
|
@@ -1354,15 +1464,47 @@ const createStore = () => {
|
|
|
1354
1464
|
cellId2,
|
|
1355
1465
|
isFunction(cell) ? cell(getCell(tableId2, rowId2, cellId2)) : cell,
|
|
1356
1466
|
),
|
|
1357
|
-
(validCell) =>
|
|
1358
|
-
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
1467
|
+
(validCell) => {
|
|
1468
|
+
const tableMap = getOrCreateTable(tableId2);
|
|
1469
|
+
ifNotUndefined(
|
|
1470
|
+
skipMiddleware || skipRowMiddleware || !middleware[14]?.()
|
|
1471
|
+
? void 0
|
|
1472
|
+
: middleware[3],
|
|
1473
|
+
(willSetRow) => {
|
|
1474
|
+
const existingRowMap = mapGet(tableMap, rowId2);
|
|
1475
|
+
const prospectiveRow = {
|
|
1476
|
+
...(existingRowMap ? mapToObj(existingRowMap) : {}),
|
|
1477
|
+
[cellId2]: validCell,
|
|
1478
|
+
};
|
|
1479
|
+
ifNotUndefined(
|
|
1480
|
+
whileMutating(() =>
|
|
1481
|
+
willSetRow(
|
|
1482
|
+
tableId2,
|
|
1483
|
+
rowId2,
|
|
1484
|
+
structuredClone(prospectiveRow),
|
|
1485
|
+
),
|
|
1486
|
+
),
|
|
1487
|
+
(row) =>
|
|
1488
|
+
applyRowDirectly(
|
|
1489
|
+
tableId2,
|
|
1490
|
+
tableMap,
|
|
1491
|
+
rowId2,
|
|
1492
|
+
row,
|
|
1493
|
+
skipMiddleware,
|
|
1494
|
+
),
|
|
1495
|
+
);
|
|
1496
|
+
},
|
|
1497
|
+
() =>
|
|
1498
|
+
setCellIntoNewRow(
|
|
1499
|
+
tableId2,
|
|
1500
|
+
tableMap,
|
|
1501
|
+
rowId2,
|
|
1502
|
+
cellId2,
|
|
1503
|
+
validCell,
|
|
1504
|
+
skipMiddleware,
|
|
1505
|
+
),
|
|
1506
|
+
);
|
|
1507
|
+
},
|
|
1366
1508
|
),
|
|
1367
1509
|
tableId,
|
|
1368
1510
|
rowId,
|
|
@@ -1411,7 +1553,14 @@ const createStore = () => {
|
|
|
1411
1553
|
isUndefined(row)
|
|
1412
1554
|
? delRow(tableId, rowId)
|
|
1413
1555
|
: objMap(row, (cell, cellId) =>
|
|
1414
|
-
setOrDelCell(
|
|
1556
|
+
setOrDelCell(
|
|
1557
|
+
tableId,
|
|
1558
|
+
rowId,
|
|
1559
|
+
cellId,
|
|
1560
|
+
cell,
|
|
1561
|
+
void 0,
|
|
1562
|
+
true,
|
|
1563
|
+
),
|
|
1415
1564
|
),
|
|
1416
1565
|
),
|
|
1417
1566
|
);
|
|
@@ -1560,35 +1709,8 @@ const createStore = () => {
|
|
|
1560
1709
|
}
|
|
1561
1710
|
return store;
|
|
1562
1711
|
};
|
|
1563
|
-
const getTransactionChanges = () =>
|
|
1564
|
-
|
|
1565
|
-
changedCells,
|
|
1566
|
-
(table, tableId) =>
|
|
1567
|
-
mapGet(changedTableIds, tableId) === -1
|
|
1568
|
-
? void 0
|
|
1569
|
-
: mapToObj(
|
|
1570
|
-
table,
|
|
1571
|
-
(row, rowId) =>
|
|
1572
|
-
mapGet(mapGet(changedRowIds, tableId), rowId) === -1
|
|
1573
|
-
? void 0
|
|
1574
|
-
: mapToObj(
|
|
1575
|
-
row,
|
|
1576
|
-
([, newCell]) => newCell,
|
|
1577
|
-
(changedCell) => pairIsEqual(changedCell),
|
|
1578
|
-
),
|
|
1579
|
-
collIsEmpty,
|
|
1580
|
-
objIsEmpty,
|
|
1581
|
-
),
|
|
1582
|
-
collIsEmpty,
|
|
1583
|
-
objIsEmpty,
|
|
1584
|
-
),
|
|
1585
|
-
mapToObj(
|
|
1586
|
-
changedValues,
|
|
1587
|
-
([, newValue]) => newValue,
|
|
1588
|
-
(changedValue) => pairIsEqual(changedValue),
|
|
1589
|
-
),
|
|
1590
|
-
1,
|
|
1591
|
-
];
|
|
1712
|
+
const getTransactionChanges = () => getTransactionChangesImpl();
|
|
1713
|
+
const getEncodedTransactionChanges = () => getTransactionChangesImpl(true);
|
|
1592
1714
|
const getTransactionLog = () => [
|
|
1593
1715
|
!collIsEmpty(changedCells),
|
|
1594
1716
|
!collIsEmpty(changedValues),
|
|
@@ -1601,37 +1723,6 @@ const createStore = () => {
|
|
|
1601
1723
|
mapToObj3(changedCellIds),
|
|
1602
1724
|
mapToObj(changedValueIds),
|
|
1603
1725
|
];
|
|
1604
|
-
const doDidSetRows = () => {
|
|
1605
|
-
if (middleware[14]) {
|
|
1606
|
-
const changedCells2 = clonedChangedCells(changedCells);
|
|
1607
|
-
collForEach(changedCells2, (rows, tableId) =>
|
|
1608
|
-
collForEach(rows, (cells, rowId) => {
|
|
1609
|
-
if (
|
|
1610
|
-
!arrayEvery(
|
|
1611
|
-
collValues(cells),
|
|
1612
|
-
([oldCell, newCell]) => oldCell === newCell,
|
|
1613
|
-
)
|
|
1614
|
-
) {
|
|
1615
|
-
const newRow = getRow(tableId, rowId);
|
|
1616
|
-
const oldRow = objMerge(newRow);
|
|
1617
|
-
collForEach(cells, ([oldCell], cellId) =>
|
|
1618
|
-
isUndefined(oldCell)
|
|
1619
|
-
? objDel(oldRow, cellId)
|
|
1620
|
-
: (oldRow[cellId] = oldCell),
|
|
1621
|
-
);
|
|
1622
|
-
const didSetRow = middleware[14](tableId, rowId, oldRow, newRow);
|
|
1623
|
-
if (!objIsEqual(didSetRow, newRow)) {
|
|
1624
|
-
const setOrDelRow = objMap(newRow, () => void 0);
|
|
1625
|
-
objMap(didSetRow, (cell, cellId) => (setOrDelRow[cellId] = cell));
|
|
1626
|
-
objMap(setOrDelRow, (cell, cellId) =>
|
|
1627
|
-
setOrDelCell(tableId, rowId, cellId, cell, true),
|
|
1628
|
-
);
|
|
1629
|
-
}
|
|
1630
|
-
}
|
|
1631
|
-
}),
|
|
1632
|
-
);
|
|
1633
|
-
}
|
|
1634
|
-
};
|
|
1635
1726
|
const finishTransaction = (doRollback) => {
|
|
1636
1727
|
if (transactions > 0) {
|
|
1637
1728
|
transactions--;
|
|
@@ -1641,7 +1732,6 @@ const createStore = () => {
|
|
|
1641
1732
|
callInvalidCellListeners(1);
|
|
1642
1733
|
if (!collIsEmpty(changedCells)) {
|
|
1643
1734
|
callTabularListenersForChanges(1);
|
|
1644
|
-
doDidSetRows();
|
|
1645
1735
|
}
|
|
1646
1736
|
callInvalidValueListeners(1);
|
|
1647
1737
|
if (!collIsEmpty(changedValues)) {
|
|
@@ -1702,7 +1792,9 @@ const createStore = () => {
|
|
|
1702
1792
|
tableCallback(tableId, (rowCallback) =>
|
|
1703
1793
|
collForEach(tableMap, (rowMap, rowId) =>
|
|
1704
1794
|
rowCallback(rowId, (cellCallback) =>
|
|
1705
|
-
mapForEach(rowMap,
|
|
1795
|
+
mapForEach(rowMap, (cellId, cell) =>
|
|
1796
|
+
cellCallback(cellId, decodeIfJson(cell)),
|
|
1797
|
+
),
|
|
1706
1798
|
),
|
|
1707
1799
|
),
|
|
1708
1800
|
),
|
|
@@ -1711,11 +1803,21 @@ const createStore = () => {
|
|
|
1711
1803
|
mapForEach(mapGet(tableCellIds, id(tableId)), tableCellCallback);
|
|
1712
1804
|
const forEachRow = (tableId, rowCallback) =>
|
|
1713
1805
|
collForEach(mapGet(tablesMap, id(tableId)), (rowMap, rowId) =>
|
|
1714
|
-
rowCallback(rowId, (cellCallback) =>
|
|
1806
|
+
rowCallback(rowId, (cellCallback) =>
|
|
1807
|
+
mapForEach(rowMap, (cellId, cell) =>
|
|
1808
|
+
cellCallback(cellId, decodeIfJson(cell)),
|
|
1809
|
+
),
|
|
1810
|
+
),
|
|
1715
1811
|
);
|
|
1716
1812
|
const forEachCell = (tableId, rowId, cellCallback) =>
|
|
1717
|
-
mapForEach(
|
|
1718
|
-
|
|
1813
|
+
mapForEach(
|
|
1814
|
+
mapGet(mapGet(tablesMap, id(tableId)), id(rowId)),
|
|
1815
|
+
(cellId, cell) => cellCallback(cellId, decodeIfJson(cell)),
|
|
1816
|
+
);
|
|
1817
|
+
const forEachValue = (valueCallback) =>
|
|
1818
|
+
mapForEach(valuesMap, (valueId, value) =>
|
|
1819
|
+
valueCallback(valueId, decodeIfJson(value)),
|
|
1820
|
+
);
|
|
1719
1821
|
const addSortedRowIdsListener = (
|
|
1720
1822
|
tableIdOrArgs,
|
|
1721
1823
|
cellIdOrListener,
|
|
@@ -1800,7 +1902,7 @@ const createStore = () => {
|
|
|
1800
1902
|
willDelValues,
|
|
1801
1903
|
willDelValue,
|
|
1802
1904
|
willApplyChanges,
|
|
1803
|
-
|
|
1905
|
+
hasWillSetRowCallbacks,
|
|
1804
1906
|
) =>
|
|
1805
1907
|
(middleware = [
|
|
1806
1908
|
willSetContent,
|
|
@@ -1817,7 +1919,7 @@ const createStore = () => {
|
|
|
1817
1919
|
willDelValues,
|
|
1818
1920
|
willDelValue,
|
|
1819
1921
|
willApplyChanges,
|
|
1820
|
-
|
|
1922
|
+
hasWillSetRowCallbacks,
|
|
1821
1923
|
]);
|
|
1822
1924
|
const setInternalListeners = (
|
|
1823
1925
|
preStartTransaction,
|
|
@@ -1907,14 +2009,17 @@ const createStore = () => {
|
|
|
1907
2009
|
delListener,
|
|
1908
2010
|
getListenerStats,
|
|
1909
2011
|
isMergeable: () => false,
|
|
1910
|
-
|
|
1911
|
-
|
|
1912
|
-
|
|
1913
|
-
|
|
1914
|
-
|
|
1915
|
-
|
|
1916
|
-
|
|
1917
|
-
|
|
2012
|
+
_: [
|
|
2013
|
+
createStore,
|
|
2014
|
+
addListener,
|
|
2015
|
+
callListeners,
|
|
2016
|
+
setInternalListeners,
|
|
2017
|
+
setMiddleware,
|
|
2018
|
+
setOrDelCell,
|
|
2019
|
+
setOrDelValue,
|
|
2020
|
+
getEncodedContent,
|
|
2021
|
+
getEncodedTransactionChanges,
|
|
2022
|
+
],
|
|
1918
2023
|
};
|
|
1919
2024
|
objMap(
|
|
1920
2025
|
{
|
package/synchronizers/index.js
CHANGED
|
@@ -236,8 +236,8 @@ const getStoreFunctions = (
|
|
|
236
236
|
persist != 1 /* StoreOnly */ && store.isMergeable()
|
|
237
237
|
? [
|
|
238
238
|
1,
|
|
239
|
-
store.
|
|
240
|
-
() => store.
|
|
239
|
+
store.__[1],
|
|
240
|
+
() => store.__[2](!isSynchronizer),
|
|
241
241
|
([[changedTables], [changedValues]]) =>
|
|
242
242
|
!objIsEmpty(changedTables) || !objIsEmpty(changedValues),
|
|
243
243
|
store.setDefaultContent,
|
|
@@ -245,8 +245,8 @@ const getStoreFunctions = (
|
|
|
245
245
|
: persist != 2 /* MergeableStoreOnly */
|
|
246
246
|
? [
|
|
247
247
|
0,
|
|
248
|
-
store.
|
|
249
|
-
store.
|
|
248
|
+
store._[7],
|
|
249
|
+
store._[8],
|
|
250
250
|
([changedTables, changedValues]) =>
|
|
251
251
|
!objIsEmpty(changedTables) || !objIsEmpty(changedValues),
|
|
252
252
|
store.setContent,
|
|
@@ -311,7 +311,7 @@ const createCustomPersister = (
|
|
|
311
311
|
: store.setContent)(contentOrChanges);
|
|
312
312
|
};
|
|
313
313
|
const saveAfterMutated = async () => {
|
|
314
|
-
if (isAutoSaving() && store.
|
|
314
|
+
if (isAutoSaving() && store.__?.[0]?.()) {
|
|
315
315
|
await save();
|
|
316
316
|
}
|
|
317
317
|
};
|
|
@@ -236,8 +236,8 @@ const getStoreFunctions = (
|
|
|
236
236
|
persist != 1 /* StoreOnly */ && store.isMergeable()
|
|
237
237
|
? [
|
|
238
238
|
1,
|
|
239
|
-
store.
|
|
240
|
-
() => store.
|
|
239
|
+
store.__[1],
|
|
240
|
+
() => store.__[2](!isSynchronizer),
|
|
241
241
|
([[changedTables], [changedValues]]) =>
|
|
242
242
|
!objIsEmpty(changedTables) || !objIsEmpty(changedValues),
|
|
243
243
|
store.setDefaultContent,
|
|
@@ -245,8 +245,8 @@ const getStoreFunctions = (
|
|
|
245
245
|
: persist != 2 /* MergeableStoreOnly */
|
|
246
246
|
? [
|
|
247
247
|
0,
|
|
248
|
-
store.
|
|
249
|
-
store.
|
|
248
|
+
store._[7],
|
|
249
|
+
store._[8],
|
|
250
250
|
([changedTables, changedValues]) =>
|
|
251
251
|
!objIsEmpty(changedTables) || !objIsEmpty(changedValues),
|
|
252
252
|
store.setContent,
|
|
@@ -311,7 +311,7 @@ const createCustomPersister = (
|
|
|
311
311
|
: store.setContent)(contentOrChanges);
|
|
312
312
|
};
|
|
313
313
|
const saveAfterMutated = async () => {
|
|
314
|
-
if (isAutoSaving() && store.
|
|
314
|
+
if (isAutoSaving() && store.__?.[0]?.()) {
|
|
315
315
|
await save();
|
|
316
316
|
}
|
|
317
317
|
};
|