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
package/with-schemas/index.js
CHANGED
|
@@ -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';
|
|
@@ -33,6 +35,7 @@ const VALUE = 'Value';
|
|
|
33
35
|
const VALUES = VALUE + 's';
|
|
34
36
|
const VALUE_IDS = VALUE + IDS;
|
|
35
37
|
const TRANSACTION = 'Transaction';
|
|
38
|
+
const JSON_PREFIX = '\uFFFD';
|
|
36
39
|
const id = (key) => EMPTY_STRING + key;
|
|
37
40
|
const strStartsWith = (str, prefix) => str.startsWith(prefix);
|
|
38
41
|
const strEndsWith = (str, suffix) => str.endsWith(suffix);
|
|
@@ -131,7 +134,6 @@ const isObject = (obj) =>
|
|
|
131
134
|
const objIds = object.keys;
|
|
132
135
|
const objFreeze = object.freeze;
|
|
133
136
|
const objNew = (entries = []) => object.fromEntries(entries);
|
|
134
|
-
const objMerge = (...objs) => object.assign({}, ...objs);
|
|
135
137
|
const objGet = (obj, id) => ifNotUndefined(obj, (obj2) => obj2[id]);
|
|
136
138
|
const objHas = (obj, id) => id in obj;
|
|
137
139
|
const objDel = (obj, id) => {
|
|
@@ -560,18 +562,12 @@ const createCheckpoints = getCreateFunction(
|
|
|
560
562
|
collForEach(cellsDelta2, (table, tableId) =>
|
|
561
563
|
collForEach(table, (row, rowId) =>
|
|
562
564
|
collForEach(row, (oldNew, cellId) =>
|
|
563
|
-
store.
|
|
564
|
-
tableId,
|
|
565
|
-
rowId,
|
|
566
|
-
cellId,
|
|
567
|
-
oldNew[oldOrNew],
|
|
568
|
-
true,
|
|
569
|
-
),
|
|
565
|
+
store._[5](tableId, rowId, cellId, oldNew[oldOrNew], true),
|
|
570
566
|
),
|
|
571
567
|
),
|
|
572
568
|
);
|
|
573
569
|
collForEach(valuesDelta2, (oldNew, valueId) =>
|
|
574
|
-
store.
|
|
570
|
+
store._[6](valueId, oldNew[oldOrNew], true),
|
|
575
571
|
);
|
|
576
572
|
});
|
|
577
573
|
listening = 1;
|
|
@@ -1161,6 +1157,12 @@ const getCellOrValueType = (cellOrValue) => {
|
|
|
1161
1157
|
if (isNull(cellOrValue)) {
|
|
1162
1158
|
return NULL;
|
|
1163
1159
|
}
|
|
1160
|
+
if (isArray(cellOrValue)) {
|
|
1161
|
+
return ARRAY;
|
|
1162
|
+
}
|
|
1163
|
+
if (isObject(cellOrValue)) {
|
|
1164
|
+
return OBJECT;
|
|
1165
|
+
}
|
|
1164
1166
|
const type = getTypeOf(cellOrValue);
|
|
1165
1167
|
return isTypeStringOrBoolean(type) ||
|
|
1166
1168
|
(type == NUMBER && isFiniteNumber(cellOrValue))
|
|
@@ -1169,9 +1171,14 @@ const getCellOrValueType = (cellOrValue) => {
|
|
|
1169
1171
|
};
|
|
1170
1172
|
const isCellOrValueOrUndefined = (cellOrValue) =>
|
|
1171
1173
|
isUndefined(cellOrValue) || !isUndefined(getCellOrValueType(cellOrValue));
|
|
1174
|
+
const isJsonType = (type) => type == OBJECT || type == ARRAY;
|
|
1175
|
+
const encodeIfJson = (value) =>
|
|
1176
|
+
isObject(value) || isArray(value) ? JSON_PREFIX + jsonString(value) : value;
|
|
1177
|
+
const isEncodedJson = (value) => isString(value) && value[0] == JSON_PREFIX;
|
|
1178
|
+
const decodeIfJson = (raw, _id, encoded) =>
|
|
1179
|
+
!encoded && isEncodedJson(raw) ? jsonParse(slice(raw, 1)) : raw;
|
|
1172
1180
|
|
|
1173
1181
|
const stampClone = ([value, hlc]) => stampNew(value, hlc);
|
|
1174
|
-
const stampCloneWithHash = ([value, hlc, hash]) => [value, hlc, hash];
|
|
1175
1182
|
const stampNew = (value, hlc) => (hlc ? [value, hlc] : [value]);
|
|
1176
1183
|
const stampNewWithHash = (value, hlc, hash) => [value, hlc, hash];
|
|
1177
1184
|
const getStampHash = (stamp) => stamp[2];
|
|
@@ -1188,10 +1195,11 @@ const stampUpdate = (stamp, hlc, hash) => {
|
|
|
1188
1195
|
};
|
|
1189
1196
|
const stampNewObj = (hlc = EMPTY_STRING) => stampNew(objNew(), hlc);
|
|
1190
1197
|
const stampNewMap = (hlc = EMPTY_STRING) => [mapNew(), hlc, 0];
|
|
1191
|
-
const stampMapToObjWithHash = (
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
|
|
1198
|
+
const stampMapToObjWithHash = ([map, hlc, hash], mapper) => [
|
|
1199
|
+
mapToObj(map, mapper),
|
|
1200
|
+
hlc,
|
|
1201
|
+
hash,
|
|
1202
|
+
];
|
|
1195
1203
|
const stampMapToObjWithoutHash = ([map, hlc], mapper = stampClone) =>
|
|
1196
1204
|
stampNew(mapToObj(map, mapper), hlc);
|
|
1197
1205
|
const stampValidate = (stamp, validateThing) =>
|
|
@@ -1298,15 +1306,19 @@ const createStore = () => {
|
|
|
1298
1306
|
return false;
|
|
1299
1307
|
}
|
|
1300
1308
|
const type = schema[TYPE];
|
|
1301
|
-
if (!isTypeStringOrBoolean(type) && type != NUMBER) {
|
|
1309
|
+
if (!isTypeStringOrBoolean(type) && type != NUMBER && !isJsonType(type)) {
|
|
1302
1310
|
return false;
|
|
1303
1311
|
}
|
|
1304
1312
|
const defaultValue = schema[DEFAULT];
|
|
1305
1313
|
if (isNull(defaultValue) && !schema[ALLOW_NULL]) {
|
|
1306
1314
|
return false;
|
|
1307
1315
|
}
|
|
1308
|
-
if (!isNull(defaultValue)
|
|
1309
|
-
|
|
1316
|
+
if (!isNull(defaultValue)) {
|
|
1317
|
+
if (getCellOrValueType(defaultValue) != type) {
|
|
1318
|
+
objDel(schema, DEFAULT);
|
|
1319
|
+
} else {
|
|
1320
|
+
schema[DEFAULT] = encodeIfJson(defaultValue);
|
|
1321
|
+
}
|
|
1310
1322
|
}
|
|
1311
1323
|
return true;
|
|
1312
1324
|
};
|
|
@@ -1346,20 +1358,22 @@ const createStore = () => {
|
|
|
1346
1358
|
? cellSchema[ALLOW_NULL]
|
|
1347
1359
|
? cell
|
|
1348
1360
|
: cellInvalid(tableId, rowId, cellId, cell, cellSchema[DEFAULT])
|
|
1349
|
-
: getCellOrValueType(cell)
|
|
1350
|
-
? cell
|
|
1351
|
-
:
|
|
1352
|
-
|
|
1353
|
-
|
|
1354
|
-
|
|
1355
|
-
|
|
1356
|
-
|
|
1357
|
-
|
|
1361
|
+
: getCellOrValueType(cell) === cellSchema[TYPE]
|
|
1362
|
+
? encodeIfJson(cell)
|
|
1363
|
+
: isJsonType(cellSchema[TYPE]) && isEncodedJson(cell)
|
|
1364
|
+
? cell
|
|
1365
|
+
: cellInvalid(
|
|
1366
|
+
tableId,
|
|
1367
|
+
rowId,
|
|
1368
|
+
cellId,
|
|
1369
|
+
cell,
|
|
1370
|
+
cellSchema[DEFAULT],
|
|
1371
|
+
),
|
|
1358
1372
|
() => cellInvalid(tableId, rowId, cellId, cell),
|
|
1359
1373
|
)
|
|
1360
1374
|
: isUndefined(getCellOrValueType(cell))
|
|
1361
1375
|
? cellInvalid(tableId, rowId, cellId, cell)
|
|
1362
|
-
: cell;
|
|
1376
|
+
: encodeIfJson(cell);
|
|
1363
1377
|
const validateValues = (values, skipDefaults) =>
|
|
1364
1378
|
objValidate(
|
|
1365
1379
|
skipDefaults ? values : addDefaultsToValues(values),
|
|
@@ -1383,14 +1397,16 @@ const createStore = () => {
|
|
|
1383
1397
|
? valueSchema[ALLOW_NULL]
|
|
1384
1398
|
? value
|
|
1385
1399
|
: valueInvalid(valueId, value, valueSchema[DEFAULT])
|
|
1386
|
-
: getCellOrValueType(value)
|
|
1387
|
-
? value
|
|
1388
|
-
:
|
|
1400
|
+
: getCellOrValueType(value) === valueSchema[TYPE]
|
|
1401
|
+
? encodeIfJson(value)
|
|
1402
|
+
: isJsonType(valueSchema[TYPE]) && isEncodedJson(value)
|
|
1403
|
+
? value
|
|
1404
|
+
: valueInvalid(valueId, value, valueSchema[DEFAULT]),
|
|
1389
1405
|
() => valueInvalid(valueId, value),
|
|
1390
1406
|
)
|
|
1391
1407
|
: isUndefined(getCellOrValueType(value))
|
|
1392
1408
|
? valueInvalid(valueId, value)
|
|
1393
|
-
: value;
|
|
1409
|
+
: encodeIfJson(value);
|
|
1394
1410
|
const addDefaultsToRow = (row, tableId, rowId) => {
|
|
1395
1411
|
ifNotUndefined(
|
|
1396
1412
|
mapGet(tablesSchemaRowCache, tableId),
|
|
@@ -1470,10 +1486,24 @@ const createStore = () => {
|
|
|
1470
1486
|
);
|
|
1471
1487
|
const setOrDelTables = (tables) =>
|
|
1472
1488
|
objIsEmpty(tables) ? delTables() : setTables(tables);
|
|
1473
|
-
const setOrDelCell = (
|
|
1489
|
+
const setOrDelCell = (
|
|
1490
|
+
tableId,
|
|
1491
|
+
rowId,
|
|
1492
|
+
cellId,
|
|
1493
|
+
cell,
|
|
1494
|
+
skipMiddleware,
|
|
1495
|
+
skipRowMiddleware,
|
|
1496
|
+
) =>
|
|
1474
1497
|
isUndefined(cell)
|
|
1475
1498
|
? delCell(tableId, rowId, cellId, true, skipMiddleware)
|
|
1476
|
-
: setCell(
|
|
1499
|
+
: setCell(
|
|
1500
|
+
tableId,
|
|
1501
|
+
rowId,
|
|
1502
|
+
cellId,
|
|
1503
|
+
cell,
|
|
1504
|
+
skipMiddleware,
|
|
1505
|
+
skipRowMiddleware,
|
|
1506
|
+
);
|
|
1477
1507
|
const setOrDelValues = (values) =>
|
|
1478
1508
|
objIsEmpty(values) ? delValues() : setValues(values);
|
|
1479
1509
|
const setOrDelValue = (valueId, value, skipMiddleware) =>
|
|
@@ -1573,6 +1603,30 @@ const createStore = () => {
|
|
|
1573
1603
|
),
|
|
1574
1604
|
objIsEqual,
|
|
1575
1605
|
);
|
|
1606
|
+
const applyRowDirectly = (tableId, tableMap, rowId, row, skipMiddleware) => {
|
|
1607
|
+
mapMatch(
|
|
1608
|
+
mapEnsure(tableMap, rowId, () => {
|
|
1609
|
+
rowIdsChanged(tableId, rowId, 1);
|
|
1610
|
+
return mapNew();
|
|
1611
|
+
}),
|
|
1612
|
+
row,
|
|
1613
|
+
(rowMap, cellId, cell) =>
|
|
1614
|
+
ifNotUndefined(
|
|
1615
|
+
getValidatedCell(tableId, rowId, cellId, cell),
|
|
1616
|
+
(validCell) =>
|
|
1617
|
+
setValidCell(
|
|
1618
|
+
tableId,
|
|
1619
|
+
rowId,
|
|
1620
|
+
rowMap,
|
|
1621
|
+
cellId,
|
|
1622
|
+
validCell,
|
|
1623
|
+
skipMiddleware,
|
|
1624
|
+
),
|
|
1625
|
+
),
|
|
1626
|
+
(rowMap, cellId) =>
|
|
1627
|
+
delValidCell(tableId, tableMap, rowId, rowMap, cellId, true),
|
|
1628
|
+
);
|
|
1629
|
+
};
|
|
1576
1630
|
const setValidCell = (tableId, rowId, rowMap, cellId, cell, skipMiddleware) =>
|
|
1577
1631
|
ifTransformed(
|
|
1578
1632
|
cell,
|
|
@@ -1813,13 +1867,21 @@ const createStore = () => {
|
|
|
1813
1867
|
const getCellChange = (tableId, rowId, cellId) =>
|
|
1814
1868
|
ifNotUndefined(
|
|
1815
1869
|
mapGet(mapGet(mapGet(changedCells, tableId), rowId), cellId),
|
|
1816
|
-
([oldCell, newCell]) => [
|
|
1870
|
+
([oldCell, newCell]) => [
|
|
1871
|
+
true,
|
|
1872
|
+
decodeIfJson(oldCell),
|
|
1873
|
+
decodeIfJson(newCell),
|
|
1874
|
+
],
|
|
1817
1875
|
() => [false, ...pairNew(getCell(tableId, rowId, cellId))],
|
|
1818
1876
|
);
|
|
1819
1877
|
const getValueChange = (valueId) =>
|
|
1820
1878
|
ifNotUndefined(
|
|
1821
1879
|
mapGet(changedValues, valueId),
|
|
1822
|
-
([oldValue, newValue]) => [
|
|
1880
|
+
([oldValue, newValue]) => [
|
|
1881
|
+
true,
|
|
1882
|
+
decodeIfJson(oldValue),
|
|
1883
|
+
decodeIfJson(newValue),
|
|
1884
|
+
],
|
|
1823
1885
|
() => [false, ...pairNew(getValue(valueId))],
|
|
1824
1886
|
);
|
|
1825
1887
|
const callInvalidCellListeners = (mutator) =>
|
|
@@ -1995,8 +2057,8 @@ const createStore = () => {
|
|
|
1995
2057
|
callListeners(
|
|
1996
2058
|
cellListeners[mutator],
|
|
1997
2059
|
[tableId, rowId, cellId],
|
|
1998
|
-
newCell,
|
|
1999
|
-
oldCell,
|
|
2060
|
+
decodeIfJson(newCell),
|
|
2061
|
+
decodeIfJson(oldCell),
|
|
2000
2062
|
getCellChange,
|
|
2001
2063
|
);
|
|
2002
2064
|
tablesChanged = tableChanged = rowChanged = 1;
|
|
@@ -2052,8 +2114,8 @@ const createStore = () => {
|
|
|
2052
2114
|
callListeners(
|
|
2053
2115
|
valueListeners[mutator],
|
|
2054
2116
|
[valueId],
|
|
2055
|
-
newValue,
|
|
2056
|
-
oldValue,
|
|
2117
|
+
decodeIfJson(newValue),
|
|
2118
|
+
decodeIfJson(oldValue),
|
|
2057
2119
|
getValueChange,
|
|
2058
2120
|
);
|
|
2059
2121
|
valuesChanged = 1;
|
|
@@ -2090,10 +2152,42 @@ const createStore = () => {
|
|
|
2090
2152
|
[getTableIds],
|
|
2091
2153
|
);
|
|
2092
2154
|
};
|
|
2155
|
+
const getTransactionChangesImpl = (encoded = false) => [
|
|
2156
|
+
mapToObj(
|
|
2157
|
+
changedCells,
|
|
2158
|
+
(table, tableId) =>
|
|
2159
|
+
mapGet(changedTableIds, tableId) === -1
|
|
2160
|
+
? void 0
|
|
2161
|
+
: mapToObj(
|
|
2162
|
+
table,
|
|
2163
|
+
(row, rowId) =>
|
|
2164
|
+
mapGet(mapGet(changedRowIds, tableId), rowId) === -1
|
|
2165
|
+
? void 0
|
|
2166
|
+
: mapToObj(
|
|
2167
|
+
row,
|
|
2168
|
+
([, newCell]) =>
|
|
2169
|
+
decodeIfJson(newCell, EMPTY_STRING, encoded),
|
|
2170
|
+
(changedCell) => pairIsEqual(changedCell),
|
|
2171
|
+
),
|
|
2172
|
+
collIsEmpty,
|
|
2173
|
+
objIsEmpty,
|
|
2174
|
+
),
|
|
2175
|
+
collIsEmpty,
|
|
2176
|
+
objIsEmpty,
|
|
2177
|
+
),
|
|
2178
|
+
mapToObj(
|
|
2179
|
+
changedValues,
|
|
2180
|
+
([, newValue]) => decodeIfJson(newValue, EMPTY_STRING, encoded),
|
|
2181
|
+
(changedValue) => pairIsEqual(changedValue),
|
|
2182
|
+
),
|
|
2183
|
+
1,
|
|
2184
|
+
];
|
|
2093
2185
|
const getContent = () => [getTables(), getValues()];
|
|
2094
|
-
const
|
|
2186
|
+
const getEncodedContent = () => [mapToObj3(tablesMap), mapToObj(valuesMap)];
|
|
2187
|
+
const getTables = () => mapToObj3(tablesMap, decodeIfJson);
|
|
2095
2188
|
const getTableIds = () => mapKeys(tablesMap);
|
|
2096
|
-
const getTable = (tableId) =>
|
|
2189
|
+
const getTable = (tableId) =>
|
|
2190
|
+
mapToObj2(mapGet(tablesMap, id(tableId)), decodeIfJson);
|
|
2097
2191
|
const getTableCellIds = (tableId) =>
|
|
2098
2192
|
mapKeys(mapGet(tableCellIds, id(tableId)));
|
|
2099
2193
|
const getRowCount = (tableId) => collSize(mapGet(tablesMap, id(tableId)));
|
|
@@ -2129,14 +2223,16 @@ const createStore = () => {
|
|
|
2129
2223
|
([, rowId]) => rowId,
|
|
2130
2224
|
);
|
|
2131
2225
|
const getRow = (tableId, rowId) =>
|
|
2132
|
-
mapToObj(mapGet(mapGet(tablesMap, id(tableId)), id(rowId)));
|
|
2226
|
+
mapToObj(mapGet(mapGet(tablesMap, id(tableId)), id(rowId)), decodeIfJson);
|
|
2133
2227
|
const getCellIds = (tableId, rowId) =>
|
|
2134
2228
|
mapKeys(mapGet(mapGet(tablesMap, id(tableId)), id(rowId)));
|
|
2135
2229
|
const getCell = (tableId, rowId, cellId) =>
|
|
2136
|
-
|
|
2137
|
-
|
|
2230
|
+
decodeIfJson(
|
|
2231
|
+
mapGet(mapGet(mapGet(tablesMap, id(tableId)), id(rowId)), id(cellId)),
|
|
2232
|
+
);
|
|
2233
|
+
const getValues = () => mapToObj(valuesMap, decodeIfJson);
|
|
2138
2234
|
const getValueIds = () => mapKeys(valuesMap);
|
|
2139
|
-
const getValue = (valueId) => mapGet(valuesMap, id(valueId));
|
|
2235
|
+
const getValue = (valueId) => decodeIfJson(mapGet(valuesMap, id(valueId)));
|
|
2140
2236
|
const hasTables = () => !collIsEmpty(tablesMap);
|
|
2141
2237
|
const hasTable = (tableId) => collHas(tablesMap, id(tableId));
|
|
2142
2238
|
const hasTableCell = (tableId, cellId) =>
|
|
@@ -2207,7 +2303,14 @@ const createStore = () => {
|
|
|
2207
2303
|
tableId,
|
|
2208
2304
|
rowId,
|
|
2209
2305
|
);
|
|
2210
|
-
const setCell = (
|
|
2306
|
+
const setCell = (
|
|
2307
|
+
tableId,
|
|
2308
|
+
rowId,
|
|
2309
|
+
cellId,
|
|
2310
|
+
cell,
|
|
2311
|
+
skipMiddleware,
|
|
2312
|
+
skipRowMiddleware,
|
|
2313
|
+
) =>
|
|
2211
2314
|
fluentTransaction(
|
|
2212
2315
|
(tableId2, rowId2, cellId2) =>
|
|
2213
2316
|
ifNotUndefined(
|
|
@@ -2217,15 +2320,47 @@ const createStore = () => {
|
|
|
2217
2320
|
cellId2,
|
|
2218
2321
|
isFunction(cell) ? cell(getCell(tableId2, rowId2, cellId2)) : cell,
|
|
2219
2322
|
),
|
|
2220
|
-
(validCell) =>
|
|
2221
|
-
|
|
2222
|
-
|
|
2223
|
-
|
|
2224
|
-
|
|
2225
|
-
|
|
2226
|
-
|
|
2227
|
-
|
|
2228
|
-
|
|
2323
|
+
(validCell) => {
|
|
2324
|
+
const tableMap = getOrCreateTable(tableId2);
|
|
2325
|
+
ifNotUndefined(
|
|
2326
|
+
skipMiddleware || skipRowMiddleware || !middleware[14]?.()
|
|
2327
|
+
? void 0
|
|
2328
|
+
: middleware[3],
|
|
2329
|
+
(willSetRow) => {
|
|
2330
|
+
const existingRowMap = mapGet(tableMap, rowId2);
|
|
2331
|
+
const prospectiveRow = {
|
|
2332
|
+
...(existingRowMap ? mapToObj(existingRowMap) : {}),
|
|
2333
|
+
[cellId2]: validCell,
|
|
2334
|
+
};
|
|
2335
|
+
ifNotUndefined(
|
|
2336
|
+
whileMutating(() =>
|
|
2337
|
+
willSetRow(
|
|
2338
|
+
tableId2,
|
|
2339
|
+
rowId2,
|
|
2340
|
+
structuredClone(prospectiveRow),
|
|
2341
|
+
),
|
|
2342
|
+
),
|
|
2343
|
+
(row) =>
|
|
2344
|
+
applyRowDirectly(
|
|
2345
|
+
tableId2,
|
|
2346
|
+
tableMap,
|
|
2347
|
+
rowId2,
|
|
2348
|
+
row,
|
|
2349
|
+
skipMiddleware,
|
|
2350
|
+
),
|
|
2351
|
+
);
|
|
2352
|
+
},
|
|
2353
|
+
() =>
|
|
2354
|
+
setCellIntoNewRow(
|
|
2355
|
+
tableId2,
|
|
2356
|
+
tableMap,
|
|
2357
|
+
rowId2,
|
|
2358
|
+
cellId2,
|
|
2359
|
+
validCell,
|
|
2360
|
+
skipMiddleware,
|
|
2361
|
+
),
|
|
2362
|
+
);
|
|
2363
|
+
},
|
|
2229
2364
|
),
|
|
2230
2365
|
tableId,
|
|
2231
2366
|
rowId,
|
|
@@ -2274,7 +2409,14 @@ const createStore = () => {
|
|
|
2274
2409
|
isUndefined(row)
|
|
2275
2410
|
? delRow(tableId, rowId)
|
|
2276
2411
|
: objMap(row, (cell, cellId) =>
|
|
2277
|
-
setOrDelCell(
|
|
2412
|
+
setOrDelCell(
|
|
2413
|
+
tableId,
|
|
2414
|
+
rowId,
|
|
2415
|
+
cellId,
|
|
2416
|
+
cell,
|
|
2417
|
+
void 0,
|
|
2418
|
+
true,
|
|
2419
|
+
),
|
|
2278
2420
|
),
|
|
2279
2421
|
),
|
|
2280
2422
|
);
|
|
@@ -2423,35 +2565,8 @@ const createStore = () => {
|
|
|
2423
2565
|
}
|
|
2424
2566
|
return store;
|
|
2425
2567
|
};
|
|
2426
|
-
const getTransactionChanges = () =>
|
|
2427
|
-
|
|
2428
|
-
changedCells,
|
|
2429
|
-
(table, tableId) =>
|
|
2430
|
-
mapGet(changedTableIds, tableId) === -1
|
|
2431
|
-
? void 0
|
|
2432
|
-
: mapToObj(
|
|
2433
|
-
table,
|
|
2434
|
-
(row, rowId) =>
|
|
2435
|
-
mapGet(mapGet(changedRowIds, tableId), rowId) === -1
|
|
2436
|
-
? void 0
|
|
2437
|
-
: mapToObj(
|
|
2438
|
-
row,
|
|
2439
|
-
([, newCell]) => newCell,
|
|
2440
|
-
(changedCell) => pairIsEqual(changedCell),
|
|
2441
|
-
),
|
|
2442
|
-
collIsEmpty,
|
|
2443
|
-
objIsEmpty,
|
|
2444
|
-
),
|
|
2445
|
-
collIsEmpty,
|
|
2446
|
-
objIsEmpty,
|
|
2447
|
-
),
|
|
2448
|
-
mapToObj(
|
|
2449
|
-
changedValues,
|
|
2450
|
-
([, newValue]) => newValue,
|
|
2451
|
-
(changedValue) => pairIsEqual(changedValue),
|
|
2452
|
-
),
|
|
2453
|
-
1,
|
|
2454
|
-
];
|
|
2568
|
+
const getTransactionChanges = () => getTransactionChangesImpl();
|
|
2569
|
+
const getEncodedTransactionChanges = () => getTransactionChangesImpl(true);
|
|
2455
2570
|
const getTransactionLog = () => [
|
|
2456
2571
|
!collIsEmpty(changedCells),
|
|
2457
2572
|
!collIsEmpty(changedValues),
|
|
@@ -2464,37 +2579,6 @@ const createStore = () => {
|
|
|
2464
2579
|
mapToObj3(changedCellIds),
|
|
2465
2580
|
mapToObj(changedValueIds),
|
|
2466
2581
|
];
|
|
2467
|
-
const doDidSetRows = () => {
|
|
2468
|
-
if (middleware[14]) {
|
|
2469
|
-
const changedCells2 = clonedChangedCells(changedCells);
|
|
2470
|
-
collForEach(changedCells2, (rows, tableId) =>
|
|
2471
|
-
collForEach(rows, (cells, rowId) => {
|
|
2472
|
-
if (
|
|
2473
|
-
!arrayEvery(
|
|
2474
|
-
collValues(cells),
|
|
2475
|
-
([oldCell, newCell]) => oldCell === newCell,
|
|
2476
|
-
)
|
|
2477
|
-
) {
|
|
2478
|
-
const newRow = getRow(tableId, rowId);
|
|
2479
|
-
const oldRow = objMerge(newRow);
|
|
2480
|
-
collForEach(cells, ([oldCell], cellId) =>
|
|
2481
|
-
isUndefined(oldCell)
|
|
2482
|
-
? objDel(oldRow, cellId)
|
|
2483
|
-
: (oldRow[cellId] = oldCell),
|
|
2484
|
-
);
|
|
2485
|
-
const didSetRow = middleware[14](tableId, rowId, oldRow, newRow);
|
|
2486
|
-
if (!objIsEqual(didSetRow, newRow)) {
|
|
2487
|
-
const setOrDelRow = objMap(newRow, () => void 0);
|
|
2488
|
-
objMap(didSetRow, (cell, cellId) => (setOrDelRow[cellId] = cell));
|
|
2489
|
-
objMap(setOrDelRow, (cell, cellId) =>
|
|
2490
|
-
setOrDelCell(tableId, rowId, cellId, cell, true),
|
|
2491
|
-
);
|
|
2492
|
-
}
|
|
2493
|
-
}
|
|
2494
|
-
}),
|
|
2495
|
-
);
|
|
2496
|
-
}
|
|
2497
|
-
};
|
|
2498
2582
|
const finishTransaction = (doRollback) => {
|
|
2499
2583
|
if (transactions > 0) {
|
|
2500
2584
|
transactions--;
|
|
@@ -2504,7 +2588,6 @@ const createStore = () => {
|
|
|
2504
2588
|
callInvalidCellListeners(1);
|
|
2505
2589
|
if (!collIsEmpty(changedCells)) {
|
|
2506
2590
|
callTabularListenersForChanges(1);
|
|
2507
|
-
doDidSetRows();
|
|
2508
2591
|
}
|
|
2509
2592
|
callInvalidValueListeners(1);
|
|
2510
2593
|
if (!collIsEmpty(changedValues)) {
|
|
@@ -2565,7 +2648,9 @@ const createStore = () => {
|
|
|
2565
2648
|
tableCallback(tableId, (rowCallback) =>
|
|
2566
2649
|
collForEach(tableMap, (rowMap, rowId) =>
|
|
2567
2650
|
rowCallback(rowId, (cellCallback) =>
|
|
2568
|
-
mapForEach(rowMap,
|
|
2651
|
+
mapForEach(rowMap, (cellId, cell) =>
|
|
2652
|
+
cellCallback(cellId, decodeIfJson(cell)),
|
|
2653
|
+
),
|
|
2569
2654
|
),
|
|
2570
2655
|
),
|
|
2571
2656
|
),
|
|
@@ -2574,11 +2659,21 @@ const createStore = () => {
|
|
|
2574
2659
|
mapForEach(mapGet(tableCellIds, id(tableId)), tableCellCallback);
|
|
2575
2660
|
const forEachRow = (tableId, rowCallback) =>
|
|
2576
2661
|
collForEach(mapGet(tablesMap, id(tableId)), (rowMap, rowId) =>
|
|
2577
|
-
rowCallback(rowId, (cellCallback) =>
|
|
2662
|
+
rowCallback(rowId, (cellCallback) =>
|
|
2663
|
+
mapForEach(rowMap, (cellId, cell) =>
|
|
2664
|
+
cellCallback(cellId, decodeIfJson(cell)),
|
|
2665
|
+
),
|
|
2666
|
+
),
|
|
2578
2667
|
);
|
|
2579
2668
|
const forEachCell = (tableId, rowId, cellCallback) =>
|
|
2580
|
-
mapForEach(
|
|
2581
|
-
|
|
2669
|
+
mapForEach(
|
|
2670
|
+
mapGet(mapGet(tablesMap, id(tableId)), id(rowId)),
|
|
2671
|
+
(cellId, cell) => cellCallback(cellId, decodeIfJson(cell)),
|
|
2672
|
+
);
|
|
2673
|
+
const forEachValue = (valueCallback) =>
|
|
2674
|
+
mapForEach(valuesMap, (valueId, value) =>
|
|
2675
|
+
valueCallback(valueId, decodeIfJson(value)),
|
|
2676
|
+
);
|
|
2582
2677
|
const addSortedRowIdsListener = (
|
|
2583
2678
|
tableIdOrArgs,
|
|
2584
2679
|
cellIdOrListener,
|
|
@@ -2663,7 +2758,7 @@ const createStore = () => {
|
|
|
2663
2758
|
willDelValues,
|
|
2664
2759
|
willDelValue,
|
|
2665
2760
|
willApplyChanges,
|
|
2666
|
-
|
|
2761
|
+
hasWillSetRowCallbacks,
|
|
2667
2762
|
) =>
|
|
2668
2763
|
(middleware = [
|
|
2669
2764
|
willSetContent,
|
|
@@ -2680,7 +2775,7 @@ const createStore = () => {
|
|
|
2680
2775
|
willDelValues,
|
|
2681
2776
|
willDelValue,
|
|
2682
2777
|
willApplyChanges,
|
|
2683
|
-
|
|
2778
|
+
hasWillSetRowCallbacks,
|
|
2684
2779
|
]);
|
|
2685
2780
|
const setInternalListeners = (
|
|
2686
2781
|
preStartTransaction,
|
|
@@ -2770,14 +2865,17 @@ const createStore = () => {
|
|
|
2770
2865
|
delListener,
|
|
2771
2866
|
getListenerStats,
|
|
2772
2867
|
isMergeable: () => false,
|
|
2773
|
-
|
|
2774
|
-
|
|
2775
|
-
|
|
2776
|
-
|
|
2777
|
-
|
|
2778
|
-
|
|
2779
|
-
|
|
2780
|
-
|
|
2868
|
+
_: [
|
|
2869
|
+
createStore,
|
|
2870
|
+
addListener,
|
|
2871
|
+
callListeners,
|
|
2872
|
+
setInternalListeners,
|
|
2873
|
+
setMiddleware,
|
|
2874
|
+
setOrDelCell,
|
|
2875
|
+
setOrDelValue,
|
|
2876
|
+
getEncodedContent,
|
|
2877
|
+
getEncodedTransactionChanges,
|
|
2878
|
+
],
|
|
2781
2879
|
};
|
|
2782
2880
|
objMap(
|
|
2783
2881
|
{
|
|
@@ -3092,14 +3190,78 @@ const createMergeableStore = (uniqueId, getNow) => {
|
|
|
3092
3190
|
]);
|
|
3093
3191
|
}
|
|
3094
3192
|
};
|
|
3095
|
-
const
|
|
3193
|
+
const getMergeableContentImpl = (encoded = false) => [
|
|
3096
3194
|
stampMapToObjWithHash(contentStampMap[0], (tableStampMap) =>
|
|
3097
3195
|
stampMapToObjWithHash(tableStampMap, (rowStampMap) =>
|
|
3098
|
-
stampMapToObjWithHash(rowStampMap)
|
|
3196
|
+
stampMapToObjWithHash(rowStampMap, ([cell, hlc, hash]) => [
|
|
3197
|
+
decodeIfJson(cell, EMPTY_STRING, encoded),
|
|
3198
|
+
hlc,
|
|
3199
|
+
hash,
|
|
3200
|
+
]),
|
|
3099
3201
|
),
|
|
3100
3202
|
),
|
|
3101
|
-
stampMapToObjWithHash(contentStampMap[1])
|
|
3203
|
+
stampMapToObjWithHash(contentStampMap[1], ([value, hlc, hash]) => [
|
|
3204
|
+
decodeIfJson(value, EMPTY_STRING, encoded),
|
|
3205
|
+
hlc,
|
|
3206
|
+
hash,
|
|
3207
|
+
]),
|
|
3102
3208
|
];
|
|
3209
|
+
const getTransactionMergeableChangesImpl = (withHashes, encoded = false) => {
|
|
3210
|
+
const [
|
|
3211
|
+
[tableStampMaps, tablesHlc, tablesHash],
|
|
3212
|
+
[valueStampMaps, valuesHlc, valuesHash],
|
|
3213
|
+
] = contentStampMap;
|
|
3214
|
+
const newStamp = withHashes ? stampNewWithHash : stampNew;
|
|
3215
|
+
const tablesObj = {};
|
|
3216
|
+
collForEach(touchedCells, (touchedTable, tableId) =>
|
|
3217
|
+
ifNotUndefined(
|
|
3218
|
+
mapGet(tableStampMaps, tableId),
|
|
3219
|
+
([rowStampMaps, tableHlc, tableHash]) => {
|
|
3220
|
+
const tableObj = {};
|
|
3221
|
+
collForEach(touchedTable, (touchedRow, rowId) =>
|
|
3222
|
+
ifNotUndefined(
|
|
3223
|
+
mapGet(rowStampMaps, rowId),
|
|
3224
|
+
([cellStampMaps, rowHlc, rowHash]) => {
|
|
3225
|
+
const rowObj = {};
|
|
3226
|
+
collForEach(touchedRow, (cellId) => {
|
|
3227
|
+
ifNotUndefined(
|
|
3228
|
+
mapGet(cellStampMaps, cellId),
|
|
3229
|
+
([cell, time, hash]) =>
|
|
3230
|
+
(rowObj[cellId] = newStamp(
|
|
3231
|
+
encoded ? cell : decodeIfJson(cell),
|
|
3232
|
+
time,
|
|
3233
|
+
hash,
|
|
3234
|
+
)),
|
|
3235
|
+
);
|
|
3236
|
+
});
|
|
3237
|
+
tableObj[rowId] = newStamp(rowObj, rowHlc, rowHash);
|
|
3238
|
+
},
|
|
3239
|
+
),
|
|
3240
|
+
);
|
|
3241
|
+
tablesObj[tableId] = newStamp(tableObj, tableHlc, tableHash);
|
|
3242
|
+
},
|
|
3243
|
+
),
|
|
3244
|
+
);
|
|
3245
|
+
const valuesObj = {};
|
|
3246
|
+
collForEach(touchedValues, (valueId) =>
|
|
3247
|
+
ifNotUndefined(
|
|
3248
|
+
mapGet(valueStampMaps, valueId),
|
|
3249
|
+
([value, time, hash]) =>
|
|
3250
|
+
(valuesObj[valueId] = newStamp(
|
|
3251
|
+
encoded ? value : decodeIfJson(value),
|
|
3252
|
+
time,
|
|
3253
|
+
hash,
|
|
3254
|
+
)),
|
|
3255
|
+
),
|
|
3256
|
+
);
|
|
3257
|
+
return [
|
|
3258
|
+
newStamp(tablesObj, tablesHlc, tablesHash),
|
|
3259
|
+
newStamp(valuesObj, valuesHlc, valuesHash),
|
|
3260
|
+
1,
|
|
3261
|
+
];
|
|
3262
|
+
};
|
|
3263
|
+
const getMergeableContent = () => getMergeableContentImpl();
|
|
3264
|
+
const getEncodedMergeableContent = () => getMergeableContentImpl(true);
|
|
3103
3265
|
const getMergeableContentHashes = () => [
|
|
3104
3266
|
contentStampMap[0][2],
|
|
3105
3267
|
contentStampMap[1][2],
|
|
@@ -3239,52 +3401,10 @@ const createMergeableStore = (uniqueId, getNow) => {
|
|
|
3239
3401
|
});
|
|
3240
3402
|
return mergeableStore;
|
|
3241
3403
|
};
|
|
3242
|
-
const getTransactionMergeableChanges = (withHashes = false) =>
|
|
3243
|
-
|
|
3244
|
-
|
|
3245
|
-
|
|
3246
|
-
] = contentStampMap;
|
|
3247
|
-
const newStamp = withHashes ? stampNewWithHash : stampNew;
|
|
3248
|
-
const tablesObj = {};
|
|
3249
|
-
collForEach(touchedCells, (touchedTable, tableId) =>
|
|
3250
|
-
ifNotUndefined(
|
|
3251
|
-
mapGet(tableStampMaps, tableId),
|
|
3252
|
-
([rowStampMaps, tableHlc, tableHash]) => {
|
|
3253
|
-
const tableObj = {};
|
|
3254
|
-
collForEach(touchedTable, (touchedRow, rowId) =>
|
|
3255
|
-
ifNotUndefined(
|
|
3256
|
-
mapGet(rowStampMaps, rowId),
|
|
3257
|
-
([cellStampMaps, rowHlc, rowHash]) => {
|
|
3258
|
-
const rowObj = {};
|
|
3259
|
-
collForEach(touchedRow, (cellId) => {
|
|
3260
|
-
ifNotUndefined(
|
|
3261
|
-
mapGet(cellStampMaps, cellId),
|
|
3262
|
-
([cell, time, hash]) =>
|
|
3263
|
-
(rowObj[cellId] = newStamp(cell, time, hash)),
|
|
3264
|
-
);
|
|
3265
|
-
});
|
|
3266
|
-
tableObj[rowId] = newStamp(rowObj, rowHlc, rowHash);
|
|
3267
|
-
},
|
|
3268
|
-
),
|
|
3269
|
-
);
|
|
3270
|
-
tablesObj[tableId] = newStamp(tableObj, tableHlc, tableHash);
|
|
3271
|
-
},
|
|
3272
|
-
),
|
|
3273
|
-
);
|
|
3274
|
-
const valuesObj = {};
|
|
3275
|
-
collForEach(touchedValues, (valueId) =>
|
|
3276
|
-
ifNotUndefined(
|
|
3277
|
-
mapGet(valueStampMaps, valueId),
|
|
3278
|
-
([value, time, hash]) =>
|
|
3279
|
-
(valuesObj[valueId] = newStamp(value, time, hash)),
|
|
3280
|
-
),
|
|
3281
|
-
);
|
|
3282
|
-
return [
|
|
3283
|
-
newStamp(tablesObj, tablesHlc, tablesHash),
|
|
3284
|
-
newStamp(valuesObj, valuesHlc, valuesHash),
|
|
3285
|
-
1,
|
|
3286
|
-
];
|
|
3287
|
-
};
|
|
3404
|
+
const getTransactionMergeableChanges = (withHashes = false) =>
|
|
3405
|
+
getTransactionMergeableChangesImpl(withHashes);
|
|
3406
|
+
const getEncodedTransactionMergeableChanges = (withHashes) =>
|
|
3407
|
+
getTransactionMergeableChangesImpl(withHashes, true);
|
|
3288
3408
|
const applyMergeableChanges = (mergeableChanges) =>
|
|
3289
3409
|
disableListeningToRawStoreChanges(() =>
|
|
3290
3410
|
store.applyChanges(mergeContentOrChanges(mergeableChanges)),
|
|
@@ -3316,10 +3436,13 @@ const createMergeableStore = (uniqueId, getNow) => {
|
|
|
3316
3436
|
getTransactionMergeableChanges,
|
|
3317
3437
|
applyMergeableChanges,
|
|
3318
3438
|
merge,
|
|
3319
|
-
|
|
3320
|
-
|
|
3439
|
+
__: [
|
|
3440
|
+
hadMutated,
|
|
3441
|
+
getEncodedMergeableContent,
|
|
3442
|
+
getEncodedTransactionMergeableChanges,
|
|
3443
|
+
],
|
|
3321
3444
|
};
|
|
3322
|
-
store.
|
|
3445
|
+
store._[3](
|
|
3323
3446
|
preStartTransaction,
|
|
3324
3447
|
preFinishTransaction,
|
|
3325
3448
|
postFinishTransaction,
|
|
@@ -3558,7 +3681,6 @@ const createMiddleware = getCreateFunction((store) => {
|
|
|
3558
3681
|
const willDelValuesCallbacks = [];
|
|
3559
3682
|
const willDelValueCallbacks = [];
|
|
3560
3683
|
const willApplyChangesCallbacks = [];
|
|
3561
|
-
const didSetRowCallbacksMap = mapNew();
|
|
3562
3684
|
const willSetContent = (content) =>
|
|
3563
3685
|
reduceCallbacks(willSetContentCallbacks, content);
|
|
3564
3686
|
const willSetTables = (tables) =>
|
|
@@ -3585,17 +3707,6 @@ const createMiddleware = getCreateFunction((store) => {
|
|
|
3585
3707
|
everyCallback(willDelValueCallbacks, valueId);
|
|
3586
3708
|
const willApplyChanges = (changes) =>
|
|
3587
3709
|
reduceCallbacks(willApplyChangesCallbacks, changes);
|
|
3588
|
-
const didSetRow = (tableId, rowId, oldRow, newRow) =>
|
|
3589
|
-
ifNotUndefined(
|
|
3590
|
-
mapGet(didSetRowCallbacksMap, tableId),
|
|
3591
|
-
(callbacks) =>
|
|
3592
|
-
arrayReduce(
|
|
3593
|
-
callbacks,
|
|
3594
|
-
(current, callback) => callback(tableId, rowId, oldRow, current),
|
|
3595
|
-
newRow,
|
|
3596
|
-
),
|
|
3597
|
-
() => newRow,
|
|
3598
|
-
);
|
|
3599
3710
|
const getStore = () => store;
|
|
3600
3711
|
const addWillSetContentCallback = addCallback(willSetContentCallbacks);
|
|
3601
3712
|
const addWillSetTablesCallback = addCallback(willSetTablesCallbacks);
|
|
@@ -3611,13 +3722,6 @@ const createMiddleware = getCreateFunction((store) => {
|
|
|
3611
3722
|
const addWillDelValuesCallback = addCallback(willDelValuesCallbacks);
|
|
3612
3723
|
const addWillDelValueCallback = addCallback(willDelValueCallbacks);
|
|
3613
3724
|
const addWillApplyChangesCallback = addCallback(willApplyChangesCallbacks);
|
|
3614
|
-
const addDidSetRowCallback = (tableId, callback) =>
|
|
3615
|
-
fluent(() =>
|
|
3616
|
-
arrayPush(
|
|
3617
|
-
mapEnsure(didSetRowCallbacksMap, tableId, () => []),
|
|
3618
|
-
callback,
|
|
3619
|
-
),
|
|
3620
|
-
);
|
|
3621
3725
|
const destroy = () => {};
|
|
3622
3726
|
const middleware = objFreeze({
|
|
3623
3727
|
getStore,
|
|
@@ -3635,10 +3739,9 @@ const createMiddleware = getCreateFunction((store) => {
|
|
|
3635
3739
|
addWillDelValuesCallback,
|
|
3636
3740
|
addWillDelValueCallback,
|
|
3637
3741
|
addWillApplyChangesCallback,
|
|
3638
|
-
addDidSetRowCallback,
|
|
3639
3742
|
destroy,
|
|
3640
3743
|
});
|
|
3641
|
-
store.
|
|
3744
|
+
store._[4](
|
|
3642
3745
|
willSetContent,
|
|
3643
3746
|
willSetTables,
|
|
3644
3747
|
willSetTable,
|
|
@@ -3653,21 +3756,20 @@ const createMiddleware = getCreateFunction((store) => {
|
|
|
3653
3756
|
willDelValues,
|
|
3654
3757
|
willDelValue,
|
|
3655
3758
|
willApplyChanges,
|
|
3656
|
-
|
|
3759
|
+
() => willSetRowCallbacks.length > 0,
|
|
3657
3760
|
);
|
|
3658
3761
|
return middleware;
|
|
3659
3762
|
});
|
|
3660
3763
|
|
|
3661
3764
|
const createQueries = getCreateFunction((store) => {
|
|
3662
|
-
const createStore = store.
|
|
3765
|
+
const createStore = store._[0];
|
|
3663
3766
|
const preStore = createStore();
|
|
3664
3767
|
const resultStore = createStore();
|
|
3665
3768
|
const preStoreListenerIds = mapNew();
|
|
3666
3769
|
const paramValuesListeners = mapNew();
|
|
3667
3770
|
const paramValueListeners = mapNew();
|
|
3668
3771
|
const {
|
|
3669
|
-
addListener,
|
|
3670
|
-
callListeners,
|
|
3772
|
+
_: [, addListener, callListeners],
|
|
3671
3773
|
delListener: delListenerImpl,
|
|
3672
3774
|
} = resultStore;
|
|
3673
3775
|
const [
|
|
@@ -3986,7 +4088,7 @@ const createQueries = getCreateFunction((store) => {
|
|
|
3986
4088
|
selectJoinWhereStore.transaction(() =>
|
|
3987
4089
|
arrayEvery(wheres, (where2) => where2(getTableCell))
|
|
3988
4090
|
? mapForEach(selects, (asCellId, tableCellGetter) =>
|
|
3989
|
-
selectJoinWhereStore.
|
|
4091
|
+
selectJoinWhereStore._[5](
|
|
3990
4092
|
queryId,
|
|
3991
4093
|
rootRowId,
|
|
3992
4094
|
asCellId,
|